]> granicus.if.org Git - clang/commitdiff
Add pointer + int (and vice versa) to the constant emitter.
authorAnders Carlsson <andersca@mac.com>
Wed, 6 Feb 2008 07:23:14 +0000 (07:23 +0000)
committerAnders Carlsson <andersca@mac.com>
Wed, 6 Feb 2008 07:23:14 +0000 (07:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46812 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGExprConstant.cpp

index 85f0697348ca7df236a5acfa09225c6b493a2358..8c319a0eb31a80ed14c64f32cdb6fd227fadcacc 100644 (file)
@@ -385,8 +385,16 @@ public:
     if (!E->getType()->isPointerType())
       return llvm::ConstantExpr::getAdd(LHS, RHS);
     
-    assert(0 && "Unhandled bin add types!");
-    return 0;
+    llvm::Constant *Ptr, *Idx;
+    if (isa<llvm::PointerType>(LHS->getType())) { // pointer + int
+      Ptr = LHS;
+      Idx = RHS;
+    } else { // int + pointer
+      Ptr = RHS;
+      Idx = LHS;
+    }
+    
+    return llvm::ConstantExpr::getGetElementPtr(Ptr, &Idx, 1);
   }
     
   llvm::Constant *VisitBinAnd(const BinaryOperator *E) {