Przeglądaj źródła

Ignore indirect field declarations. Fixes PR9570.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129337 91177308-0d34-0410-b5e6-96231b3b80d8
John McCall 14 lat temu
rodzic
commit
26fbc72b33
2 zmienionych plików z 12 dodań i 0 usunięć
  1. 5 0
      lib/CodeGen/CodeGenModule.cpp
  2. 7 0
      test/CodeGenCXX/global-init.cpp

+ 5 - 0
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));

+ 7 - 0
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" {