John McCall
294c2db42b
Ensure an insertion point at the end of a statement-expression.
...
Fixes PR8967.
llvm-svn: 123360
2011-01-13 02:03:06 +00:00
Douglas Gregor
be7b54889f
Add IR generation support for SizeOfPackExpr.
...
llvm-svn: 123332
2011-01-12 22:11:34 +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
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
a2342eb857
Fix a bug in the emission of __real/__imag l-values on scalar operands.
...
Fix a bug in the emission of complex compound assignment l-values.
Introduce a method to emit an expression whose value isn't relevant.
Make that method evaluate its operand as an l-value if it is one.
Fixes our volatile compliance in C++.
llvm-svn: 120931
2010-12-05 02:00:02 +00:00
John McCall
594827281c
Silly special case: never load when dereferencing void*.
...
llvm-svn: 120905
2010-12-04 12:43:24 +00:00
John McCall
34376a68c4
Although we currently have explicit lvalue-to-rvalue conversions, they're
...
not actually frequently used, because ImpCastExprToType only creates a node
if the types differ. So explicitly create an ICE in the lvalue-to-rvalue
conversion code in DefaultFunctionArrayLvalueConversion() as well as several
other new places, and consistently deal with the consequences throughout the
compiler.
In addition, introduce a new cast kind for loading an ObjCProperty l-value,
and make sure we emit those nodes whenever an ObjCProperty l-value appears
that's not on the LHS of an assignment operator.
This breaks a couple of rewriter tests, which I've x-failed until future
development occurs on the rewriter.
Ted Kremenek kindly contributed the analyzer workarounds in this patch.
llvm-svn: 120890
2010-12-04 03:47:34 +00:00
John McCall
f3eb96fccf
Kill the KVC l-value kind and calculate the base expression when emitting
...
the l-value.
llvm-svn: 120884
2010-12-04 02:32:38 +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
f3735e01ce
Restore the lvalue-to-rvalue conversion patch with a minimal fix.
...
llvm-svn: 120555
2010-12-01 04:43:34 +00:00
John McCall
4f22c9de48
L-value to r-value conversion is not ready for prime-time.
...
llvm-svn: 120433
2010-11-30 17:58:55 +00:00
John McCall
824fd1dcff
Introduce an r-value to l-value cast kind. I'm not promising anything
...
about the reliability of this yet.
llvm-svn: 120422
2010-11-30 10:13:06 +00:00
John McCall
086a464e24
Switch a lot of call-sites over to using the new value-kind calculations.
...
llvm-svn: 120084
2010-11-24 05:12:34 +00:00
Anton Yartsev
3f8f2886c1
comparison of AltiVec vectors now gives bool result (fix for 7533)
...
llvm-svn: 119678
2010-11-18 03:19:30 +00:00
John McCall
07bb19667a
Simplify some complex emission and implement correct semantics for
...
assignment to volatiles in C. This in effect reverts some of mjs's
work in and around r72572. Basically, the C++ standard is quite
clear, except that it lies about volatile behavior approximating
C's, whereas the C standard is almost actively misleading.
llvm-svn: 119344
2010-11-16 10:08:07 +00:00
John McCall
3eba6e67ec
Now that we have reliable cast kinds, simplify scalar cast IR gen.
...
llvm-svn: 119332
2010-11-16 06:21:14 +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
8cb679e4e1
Assorted work leading towards the elimination of CK_Unknown.
...
llvm-svn: 119138
2010-11-15 09:13:47 +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
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
Benjamin Kramer
fb5e584151
More class anonymization.
...
llvm-svn: 117106
2010-10-22 16:48:22 +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
Devang Patel
3db5480b27
Tighter check in r116060 blcoked enums also. Emit enum const's debug info.
...
llvm-svn: 116071
2010-10-08 18:24:19 +00:00
Devang Patel
5e8ee2bb89
Do not repeat debug info for file variable constants.
...
This is tested by file-statics.exp in gdb testsuite.
llvm-svn: 116060
2010-10-08 17:02:40 +00:00
Devang Patel
3703ff4163
dyn_cast is more appropriate here.
...
llvm-svn: 115569
2010-10-04 22:28:23 +00:00
Devang Patel
95eea45aa5
Add missing '}' :)
...
llvm-svn: 115568
2010-10-04 22:13:18 +00:00
Devang Patel
44b8bf0f5b
Emit debug info for an aggregate while processing MemberExpr if the aggregate's debug info was delayed untill now.
...
llvm-svn: 115564
2010-10-04 21:46:04 +00:00
Fariborz Jahanian
8fb87aec78
Patch implements passing arrays to functions expecting
...
vla. Implements pr7827.
llvm-svn: 114737
2010-09-24 17:30:16 +00:00
Fariborz Jahanian
521c72c756
Fixes an IRgen ICE due to cast of null pointer to
...
a vla type (fixes pr7827).
llvm-svn: 114495
2010-09-21 22:53:33 +00:00
Nate Begeman
abb5a7370d
Check in support for OpenCL conditional operator on vector types.
...
llvm-svn: 114371
2010-09-20 22:41:17 +00:00
David Chisnall
dd84ef1e62
Add a -ftrapv-handler= option which allows a handler to invoke instead of simply aborting when a signed operation overflows. This mirrors the (GCC-incompatible) behaviour from clang 1.0 and 1.1 when -ftrapv was specified, but allows the handler to be defined for each compilation unit.
...
llvm-svn: 114192
2010-09-17 18:29:54 +00:00
Fariborz Jahanian
5bbd1b0051
Patch to add IRgen support for Gnu's conditional operator
...
extension when missing LHS. This patch covers scalar
conditionals only. Others are wip.
(pr7726, radar 8353567).
llvm-svn: 114182
2010-09-17 15:51:28 +00:00
John McCall
7a626f63f7
one piece of code is responsible for the lifetime of every aggregate
...
slot. The easiest way to do that was to bundle up the information
we care about for aggregate slots into a new structure which demands
that its creators at least consider the question.
I could probably be convinced that the ObjC 'needs GC' bit should
be rolled into this structure.
Implement generalized copy elision. The main obstacle here is that
IR-generation must be much more careful about making sure that exactly
llvm-svn: 113962
2010-09-15 10:14:12 +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
Chris Lattner
8ee6a4142a
Augment -ftrapv to check for divide by zero, mod by zero, and INT_MIN % -1.
...
Patch by John Regehr!
llvm-svn: 113705
2010-09-11 21:47:09 +00:00
Sebastian Redl
b67655fc6d
Implement CXXNoexceptExpr codegen.
...
llvm-svn: 113629
2010-09-10 21:04:00 +00:00
Fariborz Jahanian
60babfb8a1
Casting of a property reference to 'void' did not
...
generate the necessary code. This patch fixes it.
// rdar://8389655
llvm-svn: 113079
2010-09-04 19:49:18 +00:00
Fariborz Jahanian
087206dbcd
Truncate block variable of bool type to i1 when its
...
value is used. This matches with non-block variable
use of bool type. (Fixes radar 8390062).
llvm-svn: 113027
2010-09-03 23:07:53 +00:00
Daniel Dunbar
2f8df98c92
IRgen: Fix silly thinko in r112021, which was generating code for the same expr
...
twice. This showed up as an assert on the odd test case because we generated the
decl map entry twice.
llvm-svn: 112943
2010-09-03 02:07:00 +00:00
John McCall
5d865c3292
Teach IR generation to return 'this' from constructors and destructors
...
under the ARM ABI.
llvm-svn: 112588
2010-08-31 07:33:07 +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
e3675ef0f3
Two minor fixes to user-defined literals:
...
- Zero-initialize UDLData so that crashes stop
- Stop complaining that we can't emit them (we most certainly can)
llvm-svn: 112467
2010-08-30 09:27:16 +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
John McCall
2536c6da0e
More incremental progress towards not including Expr.h in Sema.h.
...
llvm-svn: 112044
2010-08-25 10:28:54 +00:00
Daniel Dunbar
ead6824c3c
IRgen: Fix a horrible bug in pointer to bool conversion, which we were treating
...
as a truncation not a comparison to null.
llvm-svn: 112021
2010-08-25 03:32:38 +00:00
Douglas Gregor
f63e4c3334
Emit an error noting that Clang does not support code generation for
...
the ternary operator without a left-hand side in C++ (PR7726), from
Jean-Daniel Dupas!
llvm-svn: 111809
2010-08-23 14:50:27 +00:00
John McCall
7a9aac2d9f
Abstract out everything having to do with member pointers into the ABI
...
class; they should just be completely opaque throughout IR gen now,
although I haven't really audited that.
Fix a bug apparently inherited from gcc-4.2 where we failed to null-check
member data pointers when performing derived-to-base or base-to-derived
conversions on them.
llvm-svn: 111789
2010-08-23 01:21:21 +00:00