зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
07d68f1f07
Коммит
430656e1c3
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче