зеркало из https://github.com/microsoft/clang-1.git
Fix EmitNullInitializationToLValue for bitfield lvalues.
- PR2643 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54397 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
10e3dedb6f
Коммит
82397139c4
|
@ -340,10 +340,8 @@ void AggExprEmitter::EmitInitializationToLValue(Expr* E, LValue LV) {
|
|||
void AggExprEmitter::EmitNullInitializationToLValue(LValue LV, QualType T) {
|
||||
if (!CGF.hasAggregateLLVMType(T)) {
|
||||
// For non-aggregates, we can store zero
|
||||
const llvm::Type *T =
|
||||
cast<llvm::PointerType>(LV.getAddress()->getType())->getElementType();
|
||||
// FIXME: volatility
|
||||
Builder.CreateStore(llvm::Constant::getNullValue(T), LV.getAddress());
|
||||
llvm::Value *Null = llvm::Constant::getNullValue(CGF.ConvertType(T));
|
||||
CGF.EmitStoreThroughLValue(RValue::get(Null), LV, T);
|
||||
} else {
|
||||
// Otherwise, just memset the whole thing to zero. This is legal
|
||||
// because in LLVM, all default initializers are guaranteed to have a
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: clang -emit-llvm -o - %s
|
||||
// PR2643
|
||||
|
||||
void foo() {
|
||||
struct {
|
||||
int a : 1;
|
||||
int b : 1;
|
||||
} entry = {0};
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче