зеркало из https://github.com/microsoft/clang-1.git
Don't crash during constant-evaluation of 1/(1/0). PR9262.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126541 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
bc7fbf0d37
Коммит
3b332ab132
|
@ -2926,7 +2926,7 @@ static ICEDiag CheckICE(const Expr* E, ASTContext &Ctx) {
|
|||
Exp->getOpcode() == BO_Rem) {
|
||||
// Evaluate gives an error for undefined Div/Rem, so make sure
|
||||
// we don't evaluate one.
|
||||
if (LHSResult.Val != 2 && RHSResult.Val != 2) {
|
||||
if (LHSResult.Val == 0 && RHSResult.Val == 0) {
|
||||
llvm::APSInt REval = Exp->getRHS()->EvaluateAsInt(Ctx);
|
||||
if (REval == 0)
|
||||
return ICEDiag(1, E->getLocStart());
|
||||
|
|
|
@ -66,6 +66,8 @@ int illegaldiv1b[1 && 1/0]; // expected-warning {{division by zero is undefined
|
|||
int illegaldiv2[1/0]; // expected-error {{variable length array declaration not allowed at file scope}} \
|
||||
// expected-warning {{division by zero is undefined}}
|
||||
int illegaldiv3[INT_MIN / -1]; // expected-error {{variable length array declaration not allowed at file scope}}
|
||||
// PR9262
|
||||
int illegaldiv4[0 / (1 / 0)]; // expected-warning {{division by zero is undefined}} expected-error {{variable length array declaration not allowed at file scope}}
|
||||
|
||||
int chooseexpr[__builtin_choose_expr(1, 1, expr)];
|
||||
int realop[(__real__ 4) == 4 ? 1 : -1];
|
||||
|
|
Загрузка…
Ссылка в новой задаче