John McCall
fcef3cf510
Rewrite ComplexExprEvaluator::VisitCastExpr to use cast kinds, and fix
...
the basic casting logic to insert intermediate casts and preserve the
exact complex-cast design. Fixes a crash in the test suite.
llvm-svn: 121776
2010-12-14 17:51:41 +00:00
Abramo Bagnara
9e0e7096a3
Improved complex constants evaluation.
...
llvm-svn: 121616
2010-12-11 16:05:48 +00:00
Francois Pichet
34b2113250
Remove the TypesCompatibleExprClass AST node. Merge its functionality into BinaryTypeTraitExpr.
...
llvm-svn: 121298
2010-12-08 22:35:30 +00:00
Jay Foad
6d4db0c885
PR5207: Change APInt methods trunc(), sext(), zext(), sextOrTrunc() and
...
zextOrTrunc(), and APSInt methods extend(), extOrTrunc() and new method
trunc(), to be const and to return a new value instead of modifying the
object in place.
llvm-svn: 121121
2010-12-07 08:25:34 +00:00
Francois Pichet
9dfa3ce94f
Type traits intrinsic implementation: __is_base_of(T, U)
...
New AST node introduced: BinaryTypeTraitExpr; to be reused for more intrinsics.
llvm-svn: 121074
2010-12-07 00:08:36 +00:00
John McCall
5d41378146
Rename CXXExprWithTemporaries -> ExprWithCleanups; there's no theoretical
...
reason this is limited to C++, and it's certainly not limited to temporaries.
llvm-svn: 120996
2010-12-06 08:20:24 +00:00
John McCall
b7bd14fa08
Simplify the ASTs by consolidating ObjCImplicitGetterSetterExpr and ObjCPropertyRefExpr
...
into the latter.
llvm-svn: 120643
2010-12-02 01:19:52 +00:00
John McCall
d50a27111c
Kill CK_Unknown and flesh out the documentation for the existing CastKinds.
...
llvm-svn: 119331
2010-11-16 05:46:29 +00:00
John McCall
8d69a2160e
Add a new expression kind, OpaqueValueExpr, which is useful for
...
certain internal type-checking procedures as well as for representing
certain implicitly-generated operations. Uses to follow.
llvm-svn: 119289
2010-11-15 23:31:06 +00:00
John McCall
d764625448
Add a few more complex-related cast kinds that arise due to arbitrary
...
implicit conversions; the last batch was specific to promotions.
I think this is the full set we need. I do think dividing the cast
kinds into floating and integral is probably a good idea.
Annotate a *lot* more C casts with useful cast kinds.
llvm-svn: 119036
2010-11-14 08:17:51 +00:00
John McCall
c5e62b47af
Introduce five new cast kinds for various conversions into and
...
between complex types.
llvm-svn: 118994
2010-11-13 09:02:35 +00:00
John McCall
e84af4e486
Introduce a null-to-pointer implicit cast kind.
...
llvm-svn: 118966
2010-11-13 01:35:44 +00:00
John McCall
18a2c2c0b9
Split out -Wconversion warnings about constant precision into their
...
own subcategory, -Wconstant-conversion, which is on by default.
Tweak the constant folder to give better results in the invalid
case of a negative shift amount.
Implements rdar://problem/6792488
llvm-svn: 118636
2010-11-09 22:22:12 +00:00
Anders Carlsson
fd88a6160d
Rename getBaseClassOffset to getBaseClassOffsetInBits and introduce a getBaseClassOffset which returns the offset in CharUnits. Do the same thing for getVBaseClassOffset.
...
llvm-svn: 117881
2010-10-31 23:22:37 +00:00
Anders Carlsson
1827509176
Teach the constant expr evaluator about derived-to-base casts when no virtual bases are involved. Fixes PR5974.
...
llvm-svn: 117868
2010-10-31 20:41:46 +00:00
Anders Carlsson
a5df61a341
Don't try to evaluate the LHS or RHS of a member pointer binary operation. Fixes PR8507.
...
llvm-svn: 117850
2010-10-31 01:21:47 +00:00
Fariborz Jahanian
681c0754d9
Eliminate usage of ObjCSuperExpr used for
...
'super' as receiver of property or a setter/getter
methods. //rdar: //8525788
llvm-svn: 116483
2010-10-14 16:04:05 +00:00
John McCall
a2fabff4f6
Permit constant evaluation of const floating-point variables with
...
constant initializers.
llvm-svn: 116138
2010-10-09 01:34:31 +00:00
Sebastian Redl
8eb06f17c4
Eagerly evaluate type traits in Sema instead of lazily in AST. They actually need Sema access to be correct, fixes coming up.
...
llvm-svn: 113782
2010-09-13 20:56:31 +00:00
Sebastian Redl
5f0180d815
First version of a testcase, plus fixes.
...
llvm-svn: 113624
2010-09-10 20:55:47 +00:00
Sebastian Redl
4202c0f2a9
Define and implement CXXNoexceptExpr. Create it in Sema.
...
llvm-svn: 113623
2010-09-10 20:55:43 +00:00
Douglas Gregor
6a6dac2fbf
Support strlen() and __builtin_strlen() as constant expressions with
...
the call argument is a string literal. Fixes
<rdar://problem/8413477>.
llvm-svn: 113580
2010-09-10 06:27:15 +00:00
Francois Pichet
5cc0a67f08
Fix warnings caused by new CXXUuidofExprClass enumerator.
...
llvm-svn: 113444
2010-09-08 23:47:05 +00:00
Eli Friedman
08e3cdcffa
Get rid of unnecessary return.
...
llvm-svn: 113132
2010-09-06 00:31:37 +00:00
Eli Friedman
0b1fbd1394
PR7242: Make sure to use a different context for evaluating constant
...
initializers, so the result of the evaluation doesn't leak through
inconsistently. Also, don't evaluate references to variables with
initializers with side-effects.
llvm-svn: 113128
2010-09-06 00:10:32 +00:00
Douglas Gregor
6429f5cf29
Eliminate CXXBindReferenceExpr, which was used in a ton of
...
well-intentioned but completely unused code.
llvm-svn: 112868
2010-09-02 21:50:02 +00:00
Alexis Hunt
3b7918625c
Revert my user-defined literal commits - r1124{58,60,67} pending
...
some issues being sorted out.
llvm-svn: 112493
2010-08-30 17:47:05 +00:00
Alexis Hunt
79eb5469e0
Implement C++0x user-defined string literals.
...
The extra data stored on user-defined literal Tokens is stored in extra
allocated memory, which is managed by the PreprocessorLexer because there isn't
a better place to put it that makes sure it gets deallocated, but only after
it's used up. My testing has shown no significant slowdown as a result, but
independent testing would be appreciated.
llvm-svn: 112458
2010-08-29 21:26:48 +00:00
John McCall
e302792b61
GCC didn't care for my attempt at API compatibility, so brute-force everything
...
to the new constants.
llvm-svn: 112047
2010-08-25 11:45:40 +00:00
Eli Friedman
c3e9df3cc0
Move a bunch of code out of the ComplexExprEvaluator class definition;
...
no functionality change.
llvm-svn: 111207
2010-08-16 23:27:44 +00:00
Eli Friedman
9571953f36
PR7884: Fix the implementations of __real__ and __imag__ on real floats.
...
llvm-svn: 111080
2010-08-14 20:52:13 +00:00
Eli Friedman
a2622dd266
Zap unused UnaryOperator::OffsetOf.
...
llvm-svn: 110996
2010-08-13 01:36:11 +00:00
Eli Friedman
a170cd6257
Get rid of isObjectType; when C++ says "object type", it generally
...
just means "not a function type", not "not a function type or void". This
changes behavior slightly, but generally in a way which accepts more code.
llvm-svn: 110303
2010-08-05 02:49:48 +00:00
Dan Gohman
28ade550f4
Fix namespace polution.
...
llvm-svn: 109440
2010-07-26 21:25:24 +00:00
Douglas Gregor
51954276cc
Introduce a new cast kind for an "lvalue bitcast", which handles
...
reinterpret_casts (possibly indirectly via C-style/functional casts)
on values, e.g.,
int i;
reinterpret_cast<short&>(i);
The IR generated for this is essentially the same as for
*reinterpret_cast<short*>(&i).
Fixes PR6437, PR7593, and PR7344.
llvm-svn: 108294
2010-07-13 23:17:26 +00:00
Douglas Gregor
747eb7840a
Reinstate the fix for PR7556. A silly use of isTrivial() was
...
suppressing copies of objects with trivial copy constructors.
llvm-svn: 107857
2010-07-08 06:14:04 +00:00
Douglas Gregor
e182370eda
Revert r107828 and r107827, the fix for PR7556, which seems to be
...
breaking bootstrap on Linux.
llvm-svn: 107837
2010-07-07 23:37:33 +00:00
Douglas Gregor
6df2b8c3ac
Rename CXXZeroInitValueExpr to CXXScalarValueInitExpr, to reflect its
...
newly-narrowed scope. No functionality change.
llvm-svn: 107828
2010-07-07 22:43:56 +00:00
John McCall
11086fcb65
Don't consider casted non-global pointers to be evaluatable.
...
Fixes rdar://problem/8154689
llvm-svn: 107755
2010-07-07 05:08:32 +00:00
Douglas Gregor
b90df60b3b
Introduce Type::isIntegralOrEnumerationType(), to cover those places
...
in C++ that involve both integral and enumeration types. Convert all
of the callers to Type::isIntegralType() that are meant to work with
both integral and enumeration types over to
Type::isIntegralOrEnumerationType(), to prepare to eliminate
enumeration types as integral types.
llvm-svn: 106071
2010-06-16 00:17:44 +00:00
John McCall
875679eea0
Fix the constant evaluator for AltiVec-style vector literals so that the
...
vector is filled with the given constant; we were just initializing the
first element.
llvm-svn: 105824
2010-06-11 17:54:15 +00:00
Chandler Carruth
e299ba66f5
When constant folding reference variables with an initializer to the
...
initializer, don't fold paramters. Their initializers are just default
arguments which can be overridden. This fixes some spectacular regressions due
to more things making it into the constant folding.
llvm-svn: 103904
2010-05-16 09:32:51 +00:00
Abramo Bagnara
f819945365
Added Expr::EvaluateAsAnyLValue.
...
llvm-svn: 103780
2010-05-14 17:07:14 +00:00
John McCall
9500760829
Refactor the constant-evaluator so that it only supports a single form
...
of constant-evaluation. Formerly you could control whether it accepted
local l-values or not; now it always evaluates local l-values in the core
routines, but filters them out where consumed by the top-level routines.
This will make it much easier to cache evaluability.
llvm-svn: 103444
2010-05-10 23:27:23 +00:00
John McCall
b1fb0d3610
The FP constant evaluator was missing a few cases of unary operators that return floats
...
but whose operand isn't a float: specifically, __real__ and __imag__. Instead
of filtering these out, just implement them.
Fixes <rdar://problem/7958272>.
llvm-svn: 103307
2010-05-07 22:08:54 +00:00
John McCall
eb3e4f3481
Make that null-dereference fix a little clearer by rearranging some code.
...
llvm-svn: 103298
2010-05-07 21:34:32 +00:00
John McCall
06f0e09756
Fix a potential null dereference in the pointer-to-bool evaluator; caught by
...
Eli Friedman.
llvm-svn: 103297
2010-05-07 21:01:17 +00:00
John McCall
45d55e4f26
Change the pointer / lvalue constant evaluators to build into a target reference
...
and return a bool.
llvm-svn: 103296
2010-05-07 21:00:08 +00:00
John McCall
93d91dcdb7
Change the complex constant evaluator to return a bool instead of an APValue.
...
llvm-svn: 103268
2010-05-07 17:22:02 +00:00
Rafael Espindola
a1f9cc1bec
Fix PR4386 by implementing gcc's old behaviour (4.2) when initializing
...
variables with a comparison of a function pointer with 0.
llvm-svn: 103253
2010-05-07 15:18:43 +00:00