[analyzer] Fix assertion in getAPSIntType
authoreinvbri <vince.a.bridgers@ericsson.com>
Sat, 10 Dec 2022 01:18:03 +0000 (19:18 -0600)
committereinvbri <vince.a.bridgers@ericsson.com>
Sun, 11 Dec 2022 23:56:51 +0000 (17:56 -0600)
commit443b46e6d3139c1306caddd06efa674dcea9f38f
treefd68137481765051dcebd5ec869eaf1cc6656d0c
parent4d1c5b946ad7f10d398b43e7f20a528407fb79b9
[analyzer] Fix assertion in getAPSIntType

getAPSIntType crashes when analzying a simple case that uses a fixed
point type. getAPSIntType needs to handle fixed point types differently
to get sign information. LIT and Unittests were added since there were
 none previously added.

   clang: <root>/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h:155:
      clang::ento::APSIntType clang::ento::BasicValueFactory::getAPSIntType(clang::QualType) const:
      Assertion `T->isIntegralOrEnumerationType() || Loc::isLocType(T)' failed.

    Program received signal SIGABRT, Aborted.
    0x00007ffff66e2387 in raise () from /lib64/libc.so.6
    (gdb) bt
        at <root>/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h:155
        at <root>/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h:172
          LHS=0x108965a0, op=clang::BO_Shr, RHS=..., resultTy=...) at
          <root>/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:213
          (this=0x1088e460, state=..., op=clang::BO_Shr, lhs=..., rhs=..., resultTy=...)
          at <root>/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:681

Reviewed By: steakhal

Differential Revision: https://reviews.llvm.org/D139759
clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h
clang/test/Analysis/fixed-point.c [new file with mode: 0644]
clang/unittests/StaticAnalyzer/APSIntTypeTest.cpp [new file with mode: 0644]
clang/unittests/StaticAnalyzer/CMakeLists.txt