]> granicus.if.org Git - clang/commitdiff
getLLVMFieldNo can't be called before emitting the base value.
authorLauro Ramos Venancio <lauro.venancio@gmail.com>
Wed, 30 Jan 2008 21:23:20 +0000 (21:23 +0000)
committerLauro Ramos Venancio <lauro.venancio@gmail.com>
Wed, 30 Jan 2008 21:23:20 +0000 (21:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46576 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGExprConstant.cpp
test/CodeGen/init-with-member-expr.c [new file with mode: 0644]

index 070ce1d734c43e97b8458a41241385fb869a8c93..d996fd8af46885c59e628ea0ad7bfd9a7906a920 100644 (file)
@@ -412,12 +412,13 @@ public:
     }
     case Expr::MemberExprClass: {
       MemberExpr* ME = cast<MemberExpr>(E);
-      unsigned FieldNumber = CGM.getTypes().getLLVMFieldNo(ME->getMemberDecl());
       llvm::Constant *Base;
       if (ME->isArrow())
         Base = Visit(ME->getBase());
       else
         Base = EmitLValue(ME->getBase());
+
+      unsigned FieldNumber = CGM.getTypes().getLLVMFieldNo(ME->getMemberDecl());
       llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
       llvm::Constant *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty,
                                                    FieldNumber);
diff --git a/test/CodeGen/init-with-member-expr.c b/test/CodeGen/init-with-member-expr.c
new file mode 100644 (file)
index 0000000..f82a135
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: clang %s -emit-llvm
+struct test {
+  int a;
+};
+
+extern struct test t;
+
+int *b=&t.a;
+