Add codegen upport for implicit casts to aggregate exprs.

llvm-svn: 45954
This commit is contained in:
Anders Carlsson 2008-01-14 06:28:57 +00:00
parent f14ba63620
commit 1ba25ca171
2 changed files with 26 additions and 1 deletions

View File

@ -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);

View File

@ -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;
}