clang crash on designted initializers.

Enea Zaffanella zaffanella at cs.unipr.it
Wed Nov 27 05:55:49 PST 2013


Hello.

The following code, which was only generating two warnings with an old 
version of clang, now also causes a crash.

$ cat bug.c
struct S {
   union U {
     int i;
     double d;
   } u;
};

struct S s = {
   .u = { .i = 0, .d = 0.0 },
   .u = { 0 },
};

$ clang -c bug.c
bug.c:9:19: warning: initializer overrides prior initialization of this
       subobject [-Winitializer-overrides]
   .u = { .i = 0, .d = 0.0 },
                  ~^
bug.c:9:15: note: previous initialization is here
   .u = { .i = 0, .d = 0.0 },
               ^
bug.c:10:10: warning: initializer overrides prior initialization of this
       subobject [-Winitializer-overrides]
   .u = { 0 },
          ^
bug.c:9:23: note: previous initialization is here
   .u = { .i = 0, .d = 0.0 },
                       ^~~
llvm/tools/clang/lib/Sema/../../include/clang/AST/Expr.h:3830: void 
clang::InitListExpr::setInitializedFieldInUnion(clang::FieldDecl*): 
Assertion `(FD == 0 || getInitializedFieldInUnion() == 0 || 
getInitializedFieldInUnion() == FD) && "Only one field of a union may be 
initialized at a time!"' failed.
[...]
19 clang           0x00000000014ef843 
clang::InitializationSequence::Perform(clang::Sema&, 
clang::InitializedEntity const&, clang::InitializationKind const&, 
llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) + 7919
20 clang           0x000000000132621a 
clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool, 
bool) + 4648
[...]
clang version 3.5 (trunk 195545)
Target: x86_64-unknown-linux-gnu





More information about the cfe-commits mailing list