summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ExprConstant.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* General cleanup, evaluate the RHS of a logical op even if the LHS will give ↵Anders Carlsson2008-11-301-16/+25
| | | | | | us the result. llvm-svn: 60297
* EvalInfo now holds a reference to an EvalResult struct.Anders Carlsson2008-11-301-24/+14
| | | | llvm-svn: 60296
* remove debug-only assertion in the complex float evaluator as it makes some ↵Nuno Lopes2008-11-261-1/+0
| | | | | | real apps crash llvm-svn: 60069
* The address of a variable is only constant if the variable has global storage.Anders Carlsson2008-11-241-1/+9
| | | | llvm-svn: 59939
* Fix bug in the constant evaluator. Fixes PR3115.Anders Carlsson2008-11-241-33/+33
| | | | llvm-svn: 59938
* Return false if we encounter a type we can't handle.Anders Carlsson2008-11-221-1/+2
| | | | llvm-svn: 59889
* Case values must be evaluatedAnders Carlsson2008-11-221-19/+23
| | | | llvm-svn: 59884
* Use Expr::Evaluate for case statements. Fixes PR2525Anders Carlsson2008-11-221-9/+27
| | | | llvm-svn: 59881
* fix folding of '*doubleArray'Nuno Lopes2008-11-191-0/+3
| | | | llvm-svn: 59647
* Address some comments Eli had.Anders Carlsson2008-11-161-11/+6
| | | | llvm-svn: 59430
* use HandleConversionToBool() to check if a given cond is foldable (per Eli's ↵Nuno Lopes2008-11-161-3/+3
| | | | | | comment) llvm-svn: 59429
* More complex float evaluator support.Anders Carlsson2008-11-161-0/+45
| | | | llvm-svn: 59428
* rename Expr::tryEvaluate to Expr::Evaluate.Chris Lattner2008-11-161-6/+6
| | | | llvm-svn: 59426
* Add very limited support for evaluating complex floats.Anders Carlsson2008-11-161-1/+46
| | | | llvm-svn: 59425
* fix folding of comma if given a non-constant operand.Nuno Lopes2008-11-161-3/+4
| | | | | | Eli please take a look, as I'm not sure if this gets the extension warning in the right place llvm-svn: 59422
* make IntExprEvaluator fold the ?: operatorNuno Lopes2008-11-161-0/+9
| | | | llvm-svn: 59421
* More work on the constant evaluator. Eli, it would be great if you could ↵Anders Carlsson2008-11-161-1/+65
| | | | | | have a look at this. llvm-svn: 59420
* Add the ability to evaluate comparison operators with floating point numbers ↵Anders Carlsson2008-11-161-2/+45
| | | | | | as operands. llvm-svn: 59408
* Fix for crash issues with comma operators with a void first operand, and Eli Friedman2008-11-131-50/+67
| | | | | | | | | | 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. llvm-svn: 59224
* Backout of r59196, plus a new ICE test. Sorry if this is a Eli Friedman2008-11-131-32/+16
| | | | | | | | | | | | | | | | | | 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. llvm-svn: 59212
* Fix bug in constant evaluation exposed by 176.gcc.Daniel Dunbar2008-11-131-16/+32
| | | | | | | | | | | | - 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? llvm-svn: 59196
* Disable some debug prints.Daniel Dunbar2008-11-121-0/+2
| | | | llvm-svn: 59174
* Some additions to tryEvaluate I've had sitting around for a while.Eli Friedman2008-11-121-25/+202
| | | | | | | | | | | | | | 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. llvm-svn: 59125
* fix a crash analyzing constants in 176.gcc/expr.c with my next patch. It wasChris Lattner2008-11-121-16/+34
| | | | | | | | 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. llvm-svn: 59110
* Teach the aggressive constant folder to fold X && 0 -> 0 and X || 1 -> 1Chris Lattner2008-11-121-1/+21
| | | | llvm-svn: 59105
* Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof ↵Sebastian Redl2008-11-111-14/+10
| | | | | | expressions, both of values and types. llvm-svn: 59057
* PR2919: __builtin_types_compatible_p strips CRV qualifiers.Daniel Dunbar2008-10-241-1/+7
| | | | llvm-svn: 58079
* Teach tryEvaluate that fabs, copysign, and unary +/- are constants forDaniel Dunbar2008-10-161-1/+36
| | | | | | | | floats. - With testcase, which also has some other things GCC folds but we don't commented out in it. llvm-svn: 57624
* Fix test suite regression, getFloatTypeSemantics shouldn't be calledDaniel Dunbar2008-10-141-4/+6
| | | | | | on non-float types. llvm-svn: 57477
* Adjust calls to APFloat conversion for new interface.Dale Johannesen2008-10-091-2/+3
| | | | llvm-svn: 57332
* ExprConstant should not abort when it sees a pointer constant that isn't.Chris Lattner2008-10-061-3/+0
| | | | llvm-svn: 57162
* Add a Expr::isEvaluatable method, eliminate isBuiltinConstantExprChris Lattner2008-10-061-0/+7
| | | | | | | which is checking for something that can be inconsistent with what we can constant fold. llvm-svn: 57159
* Move folding of __builtin_classify_type out of the CallExprChris Lattner2008-10-061-2/+57
| | | | | | interface into the constant folding interface. llvm-svn: 57158
* Move handling of __builtin_nan("") out of CGBuiltin.cpp into ExprConstant.cppChris Lattner2008-10-061-0/+14
| | | | llvm-svn: 57157
* Teach FloatExprEvaluator to evaluate __builtin_huge_val and inf.Chris Lattner2008-10-061-3/+5
| | | | llvm-svn: 57154
* Add a comment that describes tryEvaluate. Make tryEvaluate foldChris Lattner2008-10-061-5/+37
| | | | | | | __builtin_constant_p properly, and add some scaffolding for FloatExprEvaluator to eventually handle huge_val and inf. llvm-svn: 57152
* Initial implementation of floats in Expr::tryEvaluate; this doesn't Eli Friedman2008-08-221-21/+82
| | | | | | | implement some things, like unary operators and casts, but it's enough to fix PR2703 as filed. llvm-svn: 55155
* Add ExplicitCastExpr to replace the current CastExpr, and have ↵Argyrios Kyrtzidis2008-08-181-3/+0
| | | | | | | | | | | ImplicitCastExpr and ExplicitCastExpr derive from a common base class (CastExpr): Expr -> CastExpr -> ExplicitCastExpr -> ImplicitCastExpr llvm-svn: 54955
* More #include cleaningDaniel Dunbar2008-08-111-1/+0
| | | | | | | | | | | - 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. llvm-svn: 54632
* Remove the old evaluator code.Anders Carlsson2008-08-101-40/+2
| | | | llvm-svn: 54615
* Turn on the new constant expression evaluator; it isn't Eli Friedman2008-08-091-1/+1
| | | | | | | 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. llvm-svn: 54597
* Minor tweak plus a couple of FIXMEs.Eli Friedman2008-07-271-2/+7
| | | | llvm-svn: 54119
* expand casts to handle what isIntegerConstantExpr handles.Chris Lattner2008-07-121-11/+52
| | | | | | Casts from pointers remain a problem. :) llvm-svn: 53501
* Add support for __builtin_type_compatible_p, enums, etc.Chris Lattner2008-07-121-16/+47
| | | | llvm-svn: 53500
* start remembering diagnostics for various cases, add some missingChris Lattner2008-07-121-28/+85
| | | | | | code. Switch to Eli's getIntWidth method. llvm-svn: 53499
* Provide a structure for passing down 'is evaluated' and passing up Chris Lattner2008-07-111-25/+62
| | | | | | diagnosic+loc info for i-c-e evaluation. llvm-svn: 53490
* simplify some code a bit.Chris Lattner2008-07-111-48/+42
| | | | llvm-svn: 53477
* share code between sizeof(expr) and sizeof(type)Chris Lattner2008-07-111-61/+44
| | | | llvm-svn: 53475
* implement support for __extension__, make sure the result of aChris Lattner2008-07-111-13/+30
| | | | | | comparison has the right width. llvm-svn: 53469
* add a new getIntTypeSizeInBits method.Chris Lattner2008-07-111-11/+12
| | | | llvm-svn: 53468
OpenPOWER on IntegriCloud