fix test/CodeGen/statements.c on 32-bit hosts.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84039 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-10-13 22:12:09 +00:00
Родитель 07d68f1f07
Коммит 430656e1c3
2 изменённых файлов: 19 добавлений и 1 удалений

Просмотреть файл

@ -1281,6 +1281,13 @@ bool Expr::isConstantInitializer(ASTContext &Ctx) const {
// cast-to-union extension.
if (getType()->isRecordType())
return cast<CastExpr>(this)->getSubExpr()->isConstantInitializer(Ctx);
// Integer->integer casts can be handled here, which is important for
// things like (int)(&&x-&&y). Scary but true.
if (getType()->isIntegerType() &&
cast<CastExpr>(this)->getSubExpr()->getType()->isIntegerType())
return cast<CastExpr>(this)->getSubExpr()->isConstantInitializer(Ctx);
break;
}
return isEvaluatable(Ctx);

Просмотреть файл

@ -548,7 +548,18 @@ public:
// Explicit and implicit no-op casts
QualType Ty = E->getType(), SubTy = E->getSubExpr()->getType();
if (CGM.getContext().hasSameUnqualifiedType(Ty, SubTy))
return Visit(E->getSubExpr());
return Visit(E->getSubExpr());
// Handle integer->integer casts for address-of-label differences.
if (Ty->isIntegerType() && SubTy->isIntegerType() &&
CGF) {
llvm::Value *Src = Visit(E->getSubExpr());
if (Src == 0) return 0;
// Use EmitScalarConversion to perform the conversion.
return cast<llvm::Constant>(CGF->EmitScalarConversion(Src, SubTy, Ty));
}
return 0;
}
}