forked from OSchip/llvm-project
parent
7248923a5d
commit
7d4c083c19
|
@ -72,6 +72,12 @@ RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E, llvm::Value *AggLoc,
|
|||
|
||||
RValue CodeGenFunction::EmitReferenceBindingToExpr(const Expr* E,
|
||||
QualType DestType) {
|
||||
if (E->isLvalue(getContext()) == Expr::LV_Valid) {
|
||||
// Emit the expr as an lvalue.
|
||||
LValue LV = EmitLValue(E);
|
||||
return RValue::get(LV.getAddress());
|
||||
}
|
||||
|
||||
CGM.ErrorUnsupported(E, "reference binding");
|
||||
return GetUndefRValue(DestType);
|
||||
}
|
||||
|
|
|
@ -14,3 +14,30 @@ int& gr = g;
|
|||
void t3() {
|
||||
int b = gr;
|
||||
}
|
||||
|
||||
// Test reference binding.
|
||||
|
||||
struct C {};
|
||||
|
||||
void f(const int&);
|
||||
void f(const _Complex int&);
|
||||
void f(const C&);
|
||||
|
||||
void test_scalar() {
|
||||
int a = 10;
|
||||
|
||||
f(a);
|
||||
}
|
||||
|
||||
void test_complex() {
|
||||
_Complex int a = 10i;
|
||||
|
||||
f(a);
|
||||
}
|
||||
|
||||
void test_aggregate() {
|
||||
C c;
|
||||
|
||||
f(c);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue