CodeGen: Compound literals with funny types shouldn't crash
authorDavid Majnemer <david.majnemer@gmail.com>
Sun, 14 Dec 2014 12:16:43 +0000 (12:16 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Sun, 14 Dec 2014 12:16:43 +0000 (12:16 +0000)
commit17e2633cd65d43ec0a14d247c7be83e2b793ef86
tree5271c453ac6943f7f2a4bcd663699d090e03e14e
parent3fcafa2cdb0d128507308a05555049d3424da2a5
CodeGen: Compound literals with funny types shouldn't crash

CodeGen assumed that a compound literal with array type should have a
corresponding LLVM IR array type.

We had two bugs in this area:
- Zero sized arrays in compound literals would lead to the creation of
  an opaque type.  This is unnecessary, we should just create an array
  type with a bound of zero.
- Funny record types (like unions) lead to exotic IR types for compound
  literals.  In this case, CodeGen must be prepared to deal with the
  possibility that it might not have an array IR type.

This fixes PR21912.

llvm-svn: 224219
clang/lib/CodeGen/CGExprConstant.cpp
clang/lib/CodeGen/CGExprScalar.cpp
clang/test/CodeGenCXX/compound-literals.cpp
clang/test/CodeGenCXX/lambda-expressions.cpp