From: John McCall Date: Tue, 12 Apr 2011 01:01:22 +0000 (+0000) Subject: Ignore indirect field declarations. Fixes PR9570. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=26fbc72b33bdbd20b0145bf117c64d373f8051e3;p=clang Ignore indirect field declarations. Fixes PR9570. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129337 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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(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(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" {