implement l-value codegen of comma expr

llvm-svn: 71595
This commit is contained in:
Chris Lattner 2009-05-12 21:28:12 +00:00
parent e0be0dfced
commit e541ea3a61
2 changed files with 18 additions and 0 deletions

View File

@ -1108,6 +1108,12 @@ RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) {
}
LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) {
// Comma expressions just emit their LHS then their RHS as an l-value.
if (E->getOpcode() == BinaryOperator::Comma) {
EmitAnyExpr(E->getLHS());
return EmitLValue(E->getRHS());
}
// Can only get l-value for binary operator expressions which are a
// simple assignment of aggregate type.
if (E->getOpcode() != BinaryOperator::Assign)

View File

@ -104,3 +104,15 @@ void f7() {
int f8() {
return ({ foo(); }).Y;
}
// rdar://6880558
struct S;
struct C {
int i;
struct S *tab[];
};
struct S { struct C c; };
void f9(struct S *x) {
foo(((void)1, x->c).tab[0]);
}