forked from OSchip/llvm-project
When reference binding array rvalues, such as those created by compound
literals of array type, materialise a temporary. llvm-svn: 144483
This commit is contained in:
parent
38b3f312ca
commit
fcc764d140
|
@ -3187,7 +3187,7 @@ static void TryReferenceInitialization(Sema &S,
|
|||
if (T1Quals != T2Quals)
|
||||
Sequence.AddQualificationConversionStep(cv1T1, ValueKind);
|
||||
Sequence.AddReferenceBindingStep(cv1T1,
|
||||
/*bindingTemporary=*/(InitCategory.isPRValue() && !T2->isArrayType()));
|
||||
/*bindingTemporary=*/InitCategory.isPRValue());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,3 +25,15 @@ int f() {
|
|||
// CHECK-NEXT: ret i32 [[RESULT]]
|
||||
return ((Y){17, "seventeen"}).i;
|
||||
}
|
||||
|
||||
// CHECK: define i32 @_Z1gv()
|
||||
int g() {
|
||||
// CHECK: store [2 x i32]* %{{[a-z0-9.]+}}, [2 x i32]** [[V:%[a-z0-9.]+]]
|
||||
const int (&v)[2] = (int [2]) {1,2};
|
||||
|
||||
// CHECK: [[A:%[a-z0-9.]+]] = load [2 x i32]** [[V]]
|
||||
// CHECK-NEXT: [[A0ADDR:%[a-z0-9.]+]] = getelementptr inbounds [2 x i32]* [[A]], i32 0, {{.*}} 0
|
||||
// CHECK-NEXT: [[A0:%[a-z0-9.]+]] = load i32* [[A0ADDR]]
|
||||
// CHECK-NEXT: ret i32 [[A0]]
|
||||
return v[0];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue