]> granicus.if.org Git - clang/commitdiff
A base subobject type doesn't make sense for unions; don't try to compute it. Based...
authorEli Friedman <eli.friedman@gmail.com>
Fri, 13 Jan 2012 03:58:31 +0000 (03:58 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Fri, 13 Jan 2012 03:58:31 +0000 (03:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148093 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGRecordLayoutBuilder.cpp
test/CodeGenCXX/empty-union.cpp

index 74fd794ef11047325140702ead2379b5829f4045..537daf9932eca311b29018f4682ed952d626da45 100644 (file)
@@ -997,7 +997,7 @@ CGRecordLayout *CodeGenTypes::ComputeRecordLayout(const RecordDecl *D,
 
   // If we're in C++, compute the base subobject type.
   llvm::StructType *BaseTy = 0;
-  if (isa<CXXRecordDecl>(D)) {
+  if (isa<CXXRecordDecl>(D) && !D->isUnion()) {
     BaseTy = Builder.BaseSubobjectType;
     if (!BaseTy) BaseTy = Ty;
   }
index 118a0d29b47dd9da10332bdfd42ae6088c41bdcf..7f3e6ccf50ad8a16ccaa08e0ef2f8de20b72d697 100644 (file)
@@ -1,10 +1,7 @@
 // RUN: %clang_cc1 -emit-llvm -o - %s
 
 union sigval { };
+union sigval Test1;
 
-union sigval sigev_value;
-
-int main()
-{
-  return sizeof(sigev_value);
-}
+union NonPODUnion { ~NonPODUnion(); };
+union NonPODUnion Test2;