[cfe-commits] r72886 - in /cfe/trunk: lib/AST/ExprConstant.cpp test/Sema/const-eval.c

Eli Friedman eli.friedman at gmail.com
Thu Jun 4 13:04:03 PDT 2009


Author: efriedma
Date: Thu Jun  4 15:04:03 2009
New Revision: 72886

URL: http://llvm.org/viewvc/llvm-project?rev=72886&view=rev
Log:
PR4326: Handle constant evaluation for void* pointer subtraction 
correctly.


Modified:
    cfe/trunk/lib/AST/ExprConstant.cpp
    cfe/trunk/test/Sema/const-eval.c

Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=72886&r1=72885&r2=72886&view=diff

==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Thu Jun  4 15:04:03 2009
@@ -946,7 +946,12 @@
         const QualType ElementType = Type->getAsPointerType()->getPointeeType();
 
         uint64_t D = LHSValue.getLValueOffset() - RHSValue.getLValueOffset();
-        D /= Info.Ctx.getTypeSize(ElementType) / 8;
+        uint64_t ElemSize;
+        if (ElementType->isVoidType() || ElementType->isFunctionType())
+          ElemSize = 8;
+        else
+          ElemSize = Info.Ctx.getTypeSize(ElementType);
+        D /= ElemSize / 8;
 
         return Success(D, E);
       }

Modified: cfe/trunk/test/Sema/const-eval.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/const-eval.c?rev=72886&r1=72885&r2=72886&view=diff

==============================================================================
--- cfe/trunk/test/Sema/const-eval.c (original)
+++ cfe/trunk/test/Sema/const-eval.c Thu Jun  4 15:04:03 2009
@@ -65,3 +65,4 @@
 EVAL_EXPR(30, (int)(_Complex float)((1<<30)-1) == (1<<30) ? 1 : -1)
 EVAL_EXPR(31, (int*)0 == (int*)0 ? 1 : -1)
 EVAL_EXPR(32, (int*)0 != (int*)0 ? -1 : 1)
+EVAL_EXPR(33, (void*)0 - (void*)0 == 0 ? 1 : -1)





More information about the cfe-commits mailing list