From: Fariborz Jahanian Date: Fri, 6 Nov 2009 20:47:40 +0000 (+0000) Subject: Prevent a code gen. crash on empty unions - pr5408. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e504170f688b0e2113011839b933a4ec450b5182;p=clang Prevent a code gen. crash on empty unions - pr5408. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86287 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index 7baf69d876..8e0864b8dd 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -208,7 +208,11 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) { Align = 1; } } - + if (!Align) { + assert((D->field_begin() == D->field_end()) && "LayoutUnion - Align 0"); + Align = 1; + } + // Append tail padding. if (Layout.getSize() / 8 > Size) AppendPadding(Layout.getSize() / 8, Align); diff --git a/test/CodeGenCXX/empty-union.cpp b/test/CodeGenCXX/empty-union.cpp new file mode 100644 index 0000000000..fdd97415a2 --- /dev/null +++ b/test/CodeGenCXX/empty-union.cpp @@ -0,0 +1,10 @@ +// RUN: clang-cc -emit-llvm -o - %s + +union sigval { }; + +union sigval sigev_value; + +int main() +{ + return sizeof(sigev_value); +}