]> granicus.if.org Git - clang/commitdiff
Support emitting aggregate class initializers. Fixes PR5581.
authorAnders Carlsson <andersca@mac.com>
Sat, 21 Nov 2009 23:56:04 +0000 (23:56 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 21 Nov 2009 23:56:04 +0000 (23:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89569 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprConstant.cpp
test/CodeGenCXX/const-init.cpp

index 40b845dba050394989df08b5dd5f96fcc6e1803d..d0475dd8df1f832eac90632acd4b33e0283e73b8 100644 (file)
@@ -673,7 +673,7 @@ public:
     if (ILE->getType()->isArrayType())
       return EmitArrayInitialization(ILE);
 
-    if (ILE->getType()->isStructureType())
+    if (ILE->getType()->isRecordType())
       return EmitStructInitialization(ILE);
 
     if (ILE->getType()->isUnionType())
index 427ba537299280e06c8ed77339134c55348d5a80..42da6346daf3b6ec90b6872322d53c2667176fd7 100644 (file)
@@ -1,11 +1,26 @@
-// RUN: clang-cc -verify -emit-llvm -o %t %s
+// RUN: clang-cc -verify -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s
 
+// CHECK: @a = global i32 10
 int a = 10;
+// CHECK: @ar = global i32* @a
 int &ar = a;
 
 void f();
+// CHECK: @fr = global void ()* @_Z1fv
 void (&fr)() = f;
 
 struct S { int& a; };
+// CHECK: @s = global %0 { i32* @a }
 S s = { a };
 
+// PR5581
+namespace PR5581 {
+class C {
+public:
+  enum { e0, e1 };
+  unsigned f;
+};
+
+// CHECK: @_ZN6PR55812g0E = global %1 { i32 1 }
+C g0 = { C::e1 };
+}