]> granicus.if.org Git - clang/commitdiff
Fix PR 3780: In one code path in BasicValueFactory::getValue() we would not
authorTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 02:52:39 +0000 (02:52 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 02:52:39 +0000 (02:52 +0000)
return an unsigned integer for a null pointer value.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66630 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/BasicValueFactory.cpp
test/Analysis/misc-ps.m

index 2c7d6a37c157429614803a0b765ada08f113c02a..6ceab93b08670ae89a0ba1f65ea6f0479bd919ce 100644 (file)
@@ -92,7 +92,7 @@ const llvm::APSInt& BasicValueFactory::getValue(uint64_t X, unsigned BitWidth,
 const llvm::APSInt& BasicValueFactory::getValue(uint64_t X, QualType T) {
   
   unsigned bits = Ctx.getTypeSize(T);
-  llvm::APSInt V(bits, T->isUnsignedIntegerType());
+  llvm::APSInt V(bits, T->isUnsignedIntegerType() || Loc::IsLocType(T));
   V = X;
   return getValue(V);
 }
index 04e6555dd1b219478a58b33a0874f27669563a96..50dda78cdb1e5508cdd8ecef638c97dbb9e3d7db 100644 (file)
@@ -178,3 +178,18 @@ char pr3770(int x) {
   return 'a';
 }
 
+// PR 3780
+// - We just want to test that this doesn't crash the analyzer.
+typedef struct st ST;
+struct st { char *name; };
+extern ST *Cur_Pu;
+
+void pr3780(void)
+{
+  static ST *last_Cur_Pu;
+  if (last_Cur_Pu == Cur_Pu) {
+    return;
+  } 
+}
+
+