]> granicus.if.org Git - clang/commit
This patch fixes multiple issues in clang's designated init builder and
authorDouglas Gregor <dgregor@apple.com>
Fri, 8 Oct 2010 20:44:28 +0000 (20:44 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 8 Oct 2010 20:44:28 +0000 (20:44 +0000)
commit022d13de47a5f02d1e4089fa3360fae8bcb17666
tree88fc03a92656fb5ec40df431c49326f98bb09362
parent5a9c0bca4504eeda45a3fd0ae1c244b2994f38b2
This patch fixes multiple issues in clang's designated init builder and
completes support for C1X anonymous struct/union init features:

 * Indexed anonymous member initializers should not be expanded. Doing so makes
little sense and would cause unresolvable semantic ambiguity in valid code
(regression introduced by r69153).

 * Subobject initialization of (possibly nested) anonymous members are now
referred to with paths relative to the naming record context, eliminating the
synthesis of incorrect implicit InitListExprs that caused CodeGen to assert.

 * Field lookup was missing a null check in IdentifierInfo comparison which
caused lookup for a known (already resolved) field to match the first unnamed
data member it encountered leading to silent miscompilation.

 * Subobject paths are no longer built using the general purpose
Sema::BuildAnonymousStructUnionMemberPath(). If any corner cases crop up, we
will now assert earlier in Sema instead of passing invalid InitListExprs
through to CodeGen.

Fixes PR6955, from Alp Toker!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116098 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/SemaInit.cpp
test/CodeGen/designated-initializers.c
test/Sema/designated-initializers.c