зеркало из https://github.com/microsoft/clang-1.git
fix folding of comma if given a non-constant operand.
Eli please take a look, as I'm not sure if this gets the extension warning in the right place git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59422 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
ca7c2eaca3
Коммит
f9ef0c675b
|
@ -517,16 +517,17 @@ bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {
|
|||
// Evaluate the side that actually matters; this needs to be
|
||||
// handled specially because calling Visit() on the LHS can
|
||||
// have strange results when it doesn't have an integral type.
|
||||
Visit(E->getRHS());
|
||||
if (Visit(E->getRHS()))
|
||||
return true;
|
||||
|
||||
// Check for isEvaluated; the idea is that this might eventually
|
||||
// be useful for isICE and other similar uses that care about
|
||||
// whether a comma is evaluated. This isn't really used yet, though,
|
||||
// and I'm not sure it really works as intended.
|
||||
if (!Info.isEvaluated)
|
||||
return true;
|
||||
return Extension(E->getOperatorLoc(), diag::ext_comma_in_constant_expr);
|
||||
|
||||
return Extension(E->getOperatorLoc(), diag::ext_comma_in_constant_expr);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (E->isLogicalOp()) {
|
||||
|
|
|
@ -39,3 +39,9 @@ int test5(const float x, float float_number) {
|
|||
return __builtin_isless(x, float_number);
|
||||
}
|
||||
|
||||
// this one shouldn't fold
|
||||
int ola() {
|
||||
int a=2;
|
||||
if ((0, (int)a) & 2) { return 1; }
|
||||
return 2;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче