Nick Lewycky
097f47ce02
Fix build under -Wswitch by adding support for FK_ListConstructorOverloadFailed
...
to initialization sequence dumping.
llvm-svn: 147171
2011-12-22 20:21:32 +00:00
Sebastian Redl
6901c0de67
Overloading for initializer list construction.
...
llvm-svn: 147156
2011-12-22 18:58:38 +00:00
Sebastian Redl
ed2e53222f
List-initialization via constructor part 1. Still needs: pretty-printing, overloading, initializer_list.
...
llvm-svn: 147145
2011-12-22 14:44:04 +00:00
Richard Smith
0f8ede1654
Revert r146766, and add a testcase for which it introduced a wrong-code bug.
...
llvm-svn: 146961
2011-12-20 04:00:21 +00:00
Nicola Gigante
3533eb4f5c
Fix an inconsistency in the syntactic form of InitListExpr in case of initialization that involves a ConstructorConversion
...
llvm-svn: 146766
2011-12-16 22:57:37 +00:00
Richard Smith
f6f003af6a
C++11 constexpr: Add note stacks containing backtraces if constant evaluation
...
fails within a call to a constexpr function. Add -fconstexpr-backtrace-limit
argument to driver and frontend, to control the maximum number of notes so
produced (default 10). Fix APValue printing to be able to pretty-print all
APValue types, and move the testing for this functionality from a unittest to
a -verify test now that it's visible in clang's output.
llvm-svn: 146749
2011-12-16 19:06:07 +00:00
Richard Smith
507840dbff
Revert r145244. It causes us to create broken ASTs with missing type information
...
for some cast expressions.
Original commit message:
Removed useless ImplicitCast nodes in explicit cstyle and static casts
llvm-svn: 145447
2011-11-29 22:48:16 +00:00
Nicola Gigante
13b6a2ae04
Removed useless ImplicitCast nodes in explicit cstyle and static casts
...
llvm-svn: 145244
2011-11-28 12:21:57 +00:00
Sebastian Redl
29526f09ce
Reference initialization with initializer lists.
...
This supports single-element initializer lists for references according to DR1288, as well as creating temporaries and binding to them for other initializer lists.
llvm-svn: 145186
2011-11-27 16:50:07 +00:00
Richard Trieu
caff247882
Add feature to diagnostics that will provide more information on function
...
pointer mismatch. Cases covered are: initialization, assignment, and function
arguments. Additional text will give the extra information about the nature
of the mismatch: different classes for member functions, wrong number of
parameters, different parameter type, different return type, and function
qualifier mismatch.
llvm-svn: 145114
2011-11-23 22:32:32 +00:00
Abramo Bagnara
5001caa1b6
Fixed HadMultipleCandidates loading.
...
llvm-svn: 144995
2011-11-19 11:44:21 +00:00
Abramo Bagnara
b0cf297654
Added missing ImplicitCastExpr around conversion operator call.
...
llvm-svn: 144850
2011-11-16 22:46:05 +00:00
John McCall
d5c98ae695
Resolve placeholder expressions before trying to deduce
...
'auto'. Introduce a convenience method to make this a bit
easier, and use it elsewhere.
llvm-svn: 144605
2011-11-15 01:35:18 +00:00
Peter Collingbourne
fcc764d140
When reference binding array rvalues, such as those created by compound
...
literals of array type, materialise a temporary.
llvm-svn: 144483
2011-11-13 00:51:30 +00:00
Richard Smith
7b553f1b19
Rename Expr::Evaluate to Expr::EvaluateAsRValue to make it clear that it will
...
implicitly perform an lvalue-to-rvalue conversion if used on an lvalue
expression. Also improve the documentation of Expr::Evaluate* to indicate which
of them will accept expressions with side-effects.
llvm-svn: 143263
2011-10-29 00:50:52 +00:00
John McCall
526ab47a55
Restore r142914 and r142915, now with missing file and apparent
...
GCC compiler workaround.
llvm-svn: 142931
2011-10-25 17:37:35 +00:00
NAKAMURA Takumi
9a8f13961c
Revert r142914 and r142915, due to possibly missing file.
...
r142914: "Introduce a placeholder type for "pseudo object""
r142915: "Pull the pseudo-object stuff into its own file."
llvm-svn: 142921
2011-10-25 14:32:25 +00:00
John McCall
c4a2d3259f
Introduce a placeholder type for "pseudo object"
...
expressions: expressions which refer to a logical rather
than a physical l-value, where the logical object is
actually accessed via custom getter/setter code.
A subsequent patch will generalize the AST for these
so that arbitrary "implementing" sub-expressions can
be provided.
Right now the only client is ObjC properties, but
this should be generalizable to similar language
features, e.g. Managed C++'s __property methods.
llvm-svn: 142914
2011-10-25 07:27:56 +00:00
Argyrios Kyrtzidis
d4590a5d5f
Don't try to set the "array filler" in a InitListExpr twice.
...
llvm-svn: 142695
2011-10-21 23:02:22 +00:00
Richard Smith
c620f554b9
-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not
...
have an unambiguous accessible copying constructor; this is ill-formed in C++98.
llvm-svn: 142533
2011-10-19 16:55:56 +00:00
Richard Smith
c82397332d
-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.
...
llvm-svn: 142426
2011-10-18 21:39:00 +00:00
John McCall
4124c4924d
Teach the ARC compiler to not require __bridge casts when
...
passing/receiving CF objects at +0 to/from Objective-C methods
or audited C functions.
llvm-svn: 142219
2011-10-17 18:40:02 +00:00
Sebastian Redl
8b6412af46
Diagnose when omitting braces in direct list-initialization in C++0x.
...
This also applies to C99-style aggregate literals, should they be used in C++11, since they are effectively identical to constructor call list-initialization syntax.
llvm-svn: 142147
2011-10-16 18:19:28 +00:00
Sebastian Redl
2b47b7a3e6
In the verify-only pass, check that items that don't have an initializer in an init list can be value-initialized, at least when designated initializers are not involved. No test case yet, since early failures cannot be distinguished from late failures until overload resolution works.
...
llvm-svn: 142146
2011-10-16 18:19:20 +00:00
Benjamin Kramer
b89514a9b8
Change operator<< for raw_ostream and NamedDecl to take a reference instead of a pointer.
...
Passing a pointer was a bad idea as it collides with the overload for void*.
llvm-svn: 141971
2011-10-14 18:45:37 +00:00
Richard Smith
caf3390d44
Constant expression evaluation refactoring:
...
- Remodel Expr::EvaluateAsInt to behave like the other EvaluateAs* functions,
and add Expr::EvaluateKnownConstInt to capture the current fold-or-assert
behaviour.
- Factor out evaluation of bitfield bit widths.
- Fix a few places which would evaluate an expression twice: once to determine
whether it is a constant expression, then again to get the value.
llvm-svn: 141561
2011-10-10 18:28:20 +00:00
Douglas Gregor
556e5860f9
Per C++ [class.bit]p2, unnamed bit-fields are not members. Fixes PR10289.
...
llvm-svn: 141549
2011-10-10 17:22:13 +00:00
Benjamin Kramer
ec44099cf8
Initialize the HadMultipleCandidates flag.
...
Found by valgrind.
llvm-svn: 141510
2011-10-09 17:58:25 +00:00
Abramo Bagnara
635ed24e1d
Added a flag to identify resolved overloaded function references.
...
llvm-svn: 141171
2011-10-05 07:56:41 +00:00
Eli Friedman
606c103644
Remove a nonsensical bit of code from InitListChecker::getStructuredSubobjectInit which was increasing the reserved size for an init list past its maximum possible size. Fixes PR11056, a case where we were reserving a bunch of memory for arrays that was never actually used.
...
(No testcase because I don't think we have any way to actually write a testcase for this; the chosen value of NumElements has no effects on anything other than performance and memory usage.)
llvm-svn: 141106
2011-10-04 20:31:48 +00:00
Eli Friedman
be4b363060
Get rid of useless helper Sema::CastCategory.
...
llvm-svn: 140642
2011-09-27 21:58:52 +00:00
Eli Friedman
f272d40d7c
PR11009: Fix a FIXME which was leading to an assertion failure with rvalue references.
...
llvm-svn: 140594
2011-09-27 01:11:35 +00:00
Eli Friedman
d8d7a37437
CheckStringInit has side effects; make sure we don't run it in VerifyOnly mode, at least for the moment. <rdar://problem/10185490>.
...
Sebastian, please take a look at this; I'm not entirely sure it is the right thing to do.
llvm-svn: 140552
2011-09-26 19:09:09 +00:00
Eli Friedman
ed0f9168de
Fix a typo in the new VerifyOnly handling in SemaInit. No visible difference at the moment, as far as I can tell.
...
llvm-svn: 140546
2011-09-26 18:53:43 +00:00
Benjamin Kramer
afe718f373
Add a missing increment to avoid infinite looping in the regression test.
...
Also make sure we set the error flag when correcting a typo.
llvm-svn: 140466
2011-09-25 02:41:26 +00:00
Sebastian Redl
12757ab4cb
Treat list-initialization of scalars as a first-class citizen in C++11.
...
Allow empty initializer lists for scalars, which mean value-initialization.
Constant evaluation for single-element and empty initializer lists for scalars.
Codegen for empty initializer lists for scalars.
Test case comes in next commit.
llvm-svn: 140459
2011-09-24 17:48:14 +00:00
Sebastian Redl
b49c46c25c
Give InitListChecker a verification-only mode, where it neither emits diagnostics nor
...
builds a semantic (structured) initializer list, just reports on whether it can match
the given list to the target type.
Use this mode for doing init list checking in the initial step of initialization, which
will eventually allow us to do overload resolution based on the outcome.
llvm-svn: 140457
2011-09-24 17:48:00 +00:00
Sebastian Redl
7de1fb410c
In Initialization, add step kind SK_ListConstructorCall (list-initialization
...
resolves to a constructor call in C++11) and failure kind
FK_ListInitializationFailed (early InitListChecker run failed).
llvm-svn: 140456
2011-09-24 17:47:52 +00:00
Sebastian Redl
a846cac01b
Inline Sema::CheckInitList into its only user.
...
llvm-svn: 140455
2011-09-24 17:47:46 +00:00
Sebastian Redl
26bcc942d0
Fix typos and non-doxygen-ness in a few comments.
...
llvm-svn: 140454
2011-09-24 17:47:39 +00:00
David Blaikie
83d382b1ca
Switch assert(0/false) llvm_unreachable.
...
llvm-svn: 140367
2011-09-23 05:06:16 +00:00
Eli Friedman
6b9c41ea68
Add list initialization for complex numbers in C. Essentially, this allows "_Complex float x = {1.0f, 2.0f};". See changes to docs/LanguageExtensions.html for a longer description.
...
<rdar://problem/9397672>.
llvm-svn: 140090
2011-09-19 23:17:44 +00:00
Francois Pichet
0706d203cf
Rename LangOptions::Microsoft to LangOptions::MicrosoftExt to make it clear that this flag must be used only for Microsoft extensions and not emulation; to avoid confusion with the new LangOptions::MicrosoftMode flag.
...
Many of the code now under LangOptions::MicrosoftExt will eventually be moved under the LangOptions::MicrosoftMode flag.
llvm-svn: 139987
2011-09-17 17:15:52 +00:00
John McCall
2d637d2e79
Rename the ARC cast kinds to start with "ARC".
...
llvm-svn: 139466
2011-09-10 06:18:15 +00:00
Richard Trieu
a04ad1a1b9
Extend the self-reference warning to catch when a constructor references itself upon initialization, such as using itself within its own copy constructor.
...
struct S {};
S s(s);
llvm-svn: 138969
2011-09-01 21:44:13 +00:00
Jeffrey Yasskin
924255875e
Fix PR10694: Boolean conversions can be from pointers, and those conversions
...
aren't considered narrowing conversions.
llvm-svn: 138838
2011-08-30 22:25:41 +00:00
Jeffrey Yasskin
74231381a3
Print 'int' instead of 'const int' in the narrowing conversion error, since the
...
qualification of a type doesn't affect whether a conversion is a narrowing
conversion.
This doesn't work in template cases because SubstTemplateTypeParmType gets in
the way.
llvm-svn: 138735
2011-08-29 15:59:37 +00:00
Eli Friedman
3fa64df543
Refactor and fix checking for initialization of flexible array members. The old version had the checks scattered across the code, missed some checks, and had a couple nasty bugs in existing checks.
...
Fixes PR10648 and another similar accepts-invalid bug.
llvm-svn: 138398
2011-08-23 22:24:57 +00:00
Eli Friedman
c616c5ff1a
Remove function parameter which always used the default value.
...
llvm-svn: 138368
2011-08-23 20:17:13 +00:00
Francois Pichet
4c7269474e
Downgrade "err_init_list_variable_narrowing" into a warning in Microsoft mode even if c++0x is enabled. This necessary to parse MSVC code in C++0x mode.
...
llvm-svn: 137904
2011-08-18 00:04:08 +00:00