aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2011-04-12 01:01:22 +0000
committerJohn McCall <rjmccall@apple.com>2011-04-12 01:01:22 +0000
commit26fbc72b33bdbd20b0145bf117c64d373f8051e3 (patch)
tree8f6f888fbae064164f13f64e4b8de1fc2212e869
parent4955e57cd5de1e47be4e2f3e6c733beac166bbd8 (diff)
Ignore indirect field declarations. Fixes PR9570.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129337 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/CodeGenModule.cpp5
-rw-r--r--test/CodeGenCXX/global-init.cpp7
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 944b24cbd3..d22991db04 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -2034,6 +2034,11 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
EmitGlobal(cast<VarDecl>(D));
break;
+ // Indirect fields from global anonymous structs and unions can be
+ // ignored; only the actual variable requires IR gen support.
+ case Decl::IndirectField:
+ break;
+
// C++ Decls
case Decl::Namespace:
EmitNamespace(cast<NamespaceDecl>(D));
diff --git a/test/CodeGenCXX/global-init.cpp b/test/CodeGenCXX/global-init.cpp
index 6003270816..752223bc7b 100644
--- a/test/CodeGenCXX/global-init.cpp
+++ b/test/CodeGenCXX/global-init.cpp
@@ -90,6 +90,13 @@ namespace PR5974 {
// CHECK-NEXT: sub
// CHECK-NEXT: store i32 {{.*}}, i32* @_ZN5test1L1yE
+// PR9570: the indirect field shouldn't crash IR gen.
+namespace test5 {
+ union {
+ unsigned bar[4096] __attribute__((aligned(128)));
+ };
+}
+
// At the end of the file, we check that y is initialized before z.
// CHECK: define internal void @_GLOBAL__I_a() section "__TEXT,__StaticInit,regular,pure_instructions" {