Add codegen upport for implicit casts to aggregate exprs.
llvm-svn: 45954
This commit is contained in:
parent
f14ba63620
commit
1ba25ca171
|
@ -70,8 +70,8 @@ public:
|
|||
|
||||
// Operators.
|
||||
// case Expr::UnaryOperatorClass:
|
||||
// case Expr::ImplicitCastExprClass:
|
||||
// case Expr::CastExprClass:
|
||||
void VisitImplicitCastExpr(ImplicitCastExpr *E);
|
||||
void VisitCallExpr(const CallExpr *E);
|
||||
void VisitStmtExpr(const StmtExpr *E);
|
||||
void VisitBinaryOperator(const BinaryOperator *BO);
|
||||
|
@ -137,6 +137,16 @@ void AggExprEmitter::EmitAggLoadOfLValue(const Expr *E) {
|
|||
// Visitor Methods
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void AggExprEmitter::VisitImplicitCastExpr(ImplicitCastExpr *E)
|
||||
{
|
||||
QualType STy = E->getSubExpr()->getType().getCanonicalType();
|
||||
QualType Ty = E->getType().getCanonicalType();
|
||||
|
||||
assert(STy == Ty && "Implicit cast types must be equal");
|
||||
|
||||
Visit(E->getSubExpr());
|
||||
}
|
||||
|
||||
void AggExprEmitter::VisitCallExpr(const CallExpr *E)
|
||||
{
|
||||
RValue RV = CGF.EmitCallExpr(E);
|
||||
|
|
|
@ -112,3 +112,18 @@ struct _w
|
|||
|
||||
_Bool j,k;
|
||||
} ws;
|
||||
|
||||
/* Implicit casts (due to typedefs) */
|
||||
typedef struct _a
|
||||
{
|
||||
int a;
|
||||
} a;
|
||||
|
||||
void f11()
|
||||
{
|
||||
struct _a a1;
|
||||
a a2;
|
||||
|
||||
a1 = a2;
|
||||
a2 = a1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue