aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-10-03 14:15:39 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-10-03 14:15:39 +0000
commit7b2f93c8b63f59d429731aaf16d14f0cd32f98c8 (patch)
tree67b8cef98da94836aa84d802c81a7d59b9dc9e10
parent385b91f2f49169442067ff6406b370618d11a776 (diff)
CodeGen: Fix a silly typo when emitting subs of block addresses.
Part of PR14005. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165117 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/ExprConstant.cpp2
-rw-r--r--test/CodeGen/const-label-addr.c14
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 05912fc1c5..e21c83b64f 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -4919,7 +4919,7 @@ bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {
if (!LHSValue.Offset.isZero() || !RHSValue.Offset.isZero())
return false;
const Expr *LHSExpr = LHSValue.Base.dyn_cast<const Expr*>();
- const Expr *RHSExpr = LHSValue.Base.dyn_cast<const Expr*>();
+ const Expr *RHSExpr = RHSValue.Base.dyn_cast<const Expr*>();
if (!LHSExpr || !RHSExpr)
return false;
const AddrLabelExpr *LHSAddrExpr = dyn_cast<AddrLabelExpr>(LHSExpr);
diff --git a/test/CodeGen/const-label-addr.c b/test/CodeGen/const-label-addr.c
index 9d99f88c8a..e2fe38750f 100644
--- a/test/CodeGen/const-label-addr.c
+++ b/test/CodeGen/const-label-addr.c
@@ -1,4 +1,16 @@
-// RUN: %clang_cc1 %s -emit-llvm -o %t
+// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
+
+// CHECK: @a.a = internal global i8* blockaddress(@a, %A)
int a() {
A:;static void* a = &&A;
}
+
+// PR14005
+// CHECK: @b.ar = internal global {{.*}} sub (i{{..}} ptrtoint (i8* blockaddress(@b, %l2) to i{{..}}), i{{..}} ptrtoint (i8* blockaddress(@b, %l1) to i{{..}}))
+int b() {
+ static int ar = &&l2 - &&l1;
+l1:
+ return 10;
+l2:
+ return 11;
+}