aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/ExprConstant.cpp
AgeCommit message (Collapse)Author
2008-11-16fix folding of comma if given a non-constant operand.Nuno Lopes
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
2008-11-16make IntExprEvaluator fold the ?: operatorNuno Lopes
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59421 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-16More work on the constant evaluator. Eli, it would be great if you could ↵Anders Carlsson
have a look at this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59420 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-16Add the ability to evaluate comparison operators with floating point numbers ↵Anders Carlsson
as operands. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59408 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Fix for crash issues with comma operators with a void first operand, and Eli Friedman
some more bullet-proofing/enhancements for tryEvaluate. This shouldn't cause any behavior changes except for handling cases where we were crashing before and being able to evaluate a few more cases in tryEvaluate. This should settle the minor mess surrounding r59196. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59224 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Backout of r59196, plus a new ICE test. Sorry if this is a Eli Friedman
little rude; I figure it's cleaner to just back this out now so it doesn't get forgotten or mixed up with other checkins. The modification to isICE is simply wrong; I've added a test that the change to isICE breaks. I'm pretty sure the modification to tryEvaluate is also wrong. At the very least, there's some serious miscommunication going on here, as this is going in exactly the opposite direction of r59105. My understanding is that tryEvaluate is not supposed to care about side effects. That said, a lot of the clients to tryEvaluate are expecting it to enforce a no-side-effects policy, so we probably need another method that provides that guarantee. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59212 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Fix bug in constant evaluation exposed by 176.gcc.Daniel Dunbar
- Evaluation of , operator used bogus assumption that LHS could be evaluated as an integral expression even though its type is unspecified. This change is making isICE very permissive of the LHS in non-evaluated contexts because it is not clear what predicate we would use to reject code here. The standard didn't offer me any guidance; opinions? git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59196 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Disable some debug prints.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59174 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Some additions to tryEvaluate I've had sitting around for a while.Eli Friedman
This pushes it a lot closer to being able to deal with most of the stuff CodeGen's constant expression evaluator knows how to deal with. This also fixes PR3003. The test could possibly use some improvement, but this'll work for now. Test 6 is inspired by PR3003; the other tests are mostly just designed to exercise the new code. The reason for the funny structure of the tests is that type fixing for arrays inside of structs is the only place in Sema that calls tryEvaluate, at least for the moment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59125 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12fix a crash analyzing constants in 176.gcc/expr.c with my next patch. It wasChris Lattner
crashing because we errors are ignored in subexpressions that are not evaluated, but we still evaluate the result of parents. This would cause an assertion because the erroneous subexpr didn't have its result value set to the right type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59110 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Teach the aggressive constant folder to fold X && 0 -> 0 and X || 1 -> 1Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59105 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-11Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof ↵Sebastian Redl
expressions, both of values and types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59057 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-24PR2919: __builtin_types_compatible_p strips CRV qualifiers.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58079 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-16Teach tryEvaluate that fabs, copysign, and unary +/- are constants forDaniel Dunbar
floats. - With testcase, which also has some other things GCC folds but we don't commented out in it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57624 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-14Fix test suite regression, getFloatTypeSemantics shouldn't be calledDaniel Dunbar
on non-float types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57477 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-09Adjust calls to APFloat conversion for new interface.Dale Johannesen
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57332 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06ExprConstant should not abort when it sees a pointer constant that isn't.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57162 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Add a Expr::isEvaluatable method, eliminate isBuiltinConstantExprChris Lattner
which is checking for something that can be inconsistent with what we can constant fold. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57159 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Move folding of __builtin_classify_type out of the CallExprChris Lattner
interface into the constant folding interface. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57158 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Move handling of __builtin_nan("") out of CGBuiltin.cpp into ExprConstant.cppChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57157 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Teach FloatExprEvaluator to evaluate __builtin_huge_val and inf.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57154 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Add a comment that describes tryEvaluate. Make tryEvaluate foldChris Lattner
__builtin_constant_p properly, and add some scaffolding for FloatExprEvaluator to eventually handle huge_val and inf. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57152 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-22Initial implementation of floats in Expr::tryEvaluate; this doesn't Eli Friedman
implement some things, like unary operators and casts, but it's enough to fix PR2703 as filed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55155 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-18Add ExplicitCastExpr to replace the current CastExpr, and have ↵Argyrios Kyrtzidis
ImplicitCastExpr and ExplicitCastExpr derive from a common base class (CastExpr): Expr -> CastExpr -> ExplicitCastExpr -> ImplicitCastExpr git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54955 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-11More #include cleaningDaniel Dunbar
- Kill unnecessary #includes in .cpp files. This is an automatic sweep so some things removed are actually used, but happen to be included by a previous header. I tried to get rid of the obvious examples and this was the easiest way to trim the #includes in one fell swoop. - We now return to regularly scheduled development. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54632 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-10Remove the old evaluator code.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54615 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-09Turn on the new constant expression evaluator; it isn't Eli Friedman
anywhere near complete, but I don't know of any issues, and it can handle enough to allow removing the I-C-E pointer cast hack. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54597 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-27Minor tweak plus a couple of FIXMEs.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54119 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-12expand casts to handle what isIntegerConstantExpr handles.Chris Lattner
Casts from pointers remain a problem. :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53501 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-12Add support for __builtin_type_compatible_p, enums, etc.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53500 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-12start remembering diagnostics for various cases, add some missingChris Lattner
code. Switch to Eli's getIntWidth method. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53499 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11Provide a structure for passing down 'is evaluated' and passing up Chris Lattner
diagnosic+loc info for i-c-e evaluation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53490 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11simplify some code a bit.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53477 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11share code between sizeof(expr) and sizeof(type)Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53475 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11implement support for __extension__, make sure the result of aChris Lattner
comparison has the right width. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53469 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11add a new getIntTypeSizeInBits method.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53468 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11rename "SInt" methods to "Int" in APValue.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53467 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11make the new evaluator avoid conversions APValue<->APSInt in some cases.Chris Lattner
Add some accessors to APValue. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53465 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11rearrange some code, no functionality changes.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53463 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Fix small bug. The evaluator now works well enough to pass all testsAnders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53238 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08More constant expression work.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53235 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Move out some methods.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53234 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08More work.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53233 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Compilation fixSeo Sanghyeon
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53222 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Port more of Eli's evaluator over. This makes the int evaluator handle ↵Anders Carlsson
binary and unary operators. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53221 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Commit beginnings of int evaluator. Currently not used.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53219 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Shuffle things around in preparation for integrating Eli's constant evaluator.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53074 91177308-0d34-0410-b5e6-96231b3b80d8