]> granicus.if.org Git - clang/commitdiff
Add support in GRExprEngine for UnaryOperator::AlignOf. This fixes one crash report...
authorTed Kremenek <kremenek@apple.com>
Sat, 18 Oct 2008 22:20:20 +0000 (22:20 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 18 Oct 2008 22:20:20 +0000 (22:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57777 91177308-0d34-0410-b5e6-96231b3b80d8

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

index d122dca0195a1e8825d7caba21d09325ceae7745..98fa58f5ddb9a67d37b6df84ddfdf01b1a86818e 100644 (file)
@@ -1780,6 +1780,23 @@ void GRExprEngine::VisitUnaryOperator(UnaryOperator* U, NodeTy* Pred,
       
       return;
     }
+     
+    case UnaryOperator::AlignOf: {
+      
+      QualType T = U->getSubExpr()->getType();
+      
+      // FIXME: Add support for VLAs.
+      
+      if (!T.getTypePtr()->isConstantSizeType())
+        return;
+      
+      uint64_t size = getContext().getTypeAlign(T) / 8;                
+      const GRState* St = GetState(Pred);
+      St = SetSVal(St, U, NonLoc::MakeVal(getBasicVals(), size, U->getType()));
+      
+      MakeNode(Dst, U, Pred, St);
+      return;
+    }
       
     case UnaryOperator::SizeOf: {
             
index f96b1a22c7df5cc60090aa087d40c9b64accd184..ab00bd8c341352a90b2edd12bd0b000b50080f3f 100644 (file)
@@ -9,3 +9,7 @@
 }
 @end
 
+// Reduced test case from crash in PR 2796;
+//  http://llvm.org/bugs/show_bug.cgi?id=2796
+
+unsigned foo(unsigned x) { return __alignof__((x)) + sizeof(x); }