From: Eli Friedman Date: Fri, 24 Feb 2012 23:53:49 +0000 (+0000) Subject: Fix a stupid mistake in r151133. Reported to me by Joerg Sonnenberger. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a13d4d2c1e45ab611ca857d923caacfaeb3cd07;p=clang Fix a stupid mistake in r151133. Reported to me by Joerg Sonnenberger. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151407 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 6ea21ec47a..d620d3b953 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -857,10 +857,12 @@ void AggExprEmitter::EmitNullInitializationToLValue(LValue lv) { llvm::Value *null = llvm::Constant::getNullValue(CGF.ConvertType(type)); // Note that the following is not equivalent to // EmitStoreThroughBitfieldLValue for ARC types. - if (lv.isBitField()) + if (lv.isBitField()) { CGF.EmitStoreThroughBitfieldLValue(RValue::get(null), lv); - assert(lv.isSimple()); - CGF.EmitStoreOfScalar(null, lv, /* isInitialization */ true); + } else { + assert(lv.isSimple()); + CGF.EmitStoreOfScalar(null, lv, /* isInitialization */ true); + } } else { // There's a potential optimization opportunity in combining // memsets; that would be easy for arrays, but relatively diff --git a/test/CodeGen/init.c b/test/CodeGen/init.c index 599b4f23db..426233d8df 100644 --- a/test/CodeGen/init.c +++ b/test/CodeGen/init.c @@ -123,3 +123,10 @@ struct test12 { struct test12 (*p)(void); } test12g; + +void test13(int x) { + struct X { int a; int b : 10; int c; }; + struct X y = {.c = x}; + // CHECK: @test13 + // CHECK: and i32 {{.*}}, -1024 +}