| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
diagnostics.
Patch by Stephen Hines.
llvm-svn: 125998
|
| |
|
|
|
|
|
|
| |
a non-pointer on the two sides of a conditional expression.
Patch by Stephen Hines and Mihai Rusu.
llvm-svn: 125995
|
| |
|
|
|
|
|
|
|
| |
especially C++ code, and generally expand the test coverage.
Logic adapted from a patch by Kaelyn Uhrain <rikka@google.com> and
another Googler.
llvm-svn: 125775
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
class and to bind the shared value using OpaqueValueExpr. This fixes an
unnoticed problem with deserialization of these expressions where the
deserialized form would lose the vital pointer-equality trait; or rather,
it fixes it because this patch also does the right thing for deserializing
OVEs.
Change OVEs to not be a "temporary object" in the sense that copy elision is
permitted.
This new representation is not totally unawkward to work with, but I think
that's really part and parcel with the semantics we're modelling here. In
particular, it's much easier to fix things like the copy elision bug and to
make the CFG look right.
I've tried to update the analyzer to deal with this in at least some
obvious cases, and I think we get a much better CFG out, but the printing
of OpaqueValueExprs probably needs some work.
llvm-svn: 125744
|
| |
|
|
|
|
|
| |
types which are contravariance in argument types and covariance
in return types. // rdar://8979379.
llvm-svn: 125445
|
| |
|
|
|
|
|
| |
in liu of a class method getter.
// rdar://8962253
llvm-svn: 125094
|
| |
|
|
|
|
|
|
|
| |
a glvalue as a temporary. Previously, we were enumerating all of the
cases that coul return glvalues and might be called with
Sema::MaybeBindToTemporary(), but that was gross and we missed the
Objective-C property reference case.
llvm-svn: 125070
|
| |
|
|
|
|
|
|
|
|
|
| |
right for anonymous struct/union members led to me discovering some
seemingly broken code in that area of Sema, which I fixed, partly by
changing the representation of member pointer constants so that
IndirectFieldDecls aren't expanded. This led to assorted cleanups with
member pointers in CodeGen, and while I was doing that I saw some random
other things to clean up.
llvm-svn: 124785
|
| |
|
|
|
|
|
| |
on, as well as more reliably limiting invalid references to locals from
nested scopes.
llvm-svn: 124721
|
| |
|
|
|
|
| |
from Alex Miller!
llvm-svn: 124663
|
| |
|
|
| |
llvm-svn: 124505
|
| |
|
|
|
|
|
|
| |
might be queried in places where we absolutely require a valid
location (e.g., for template instantiation). Fixes some major
brokenness in the use of __is_convertible_to.
llvm-svn: 124465
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
access control errors into SFINAE errors, so that the trait provides
enough support to implement the C++0x std::is_convertible type trait.
To get there, the SFINAETrap now knows how to set up a SFINAE context
independent of any template instantiations or template argument
deduction steps, and (separately) can set a Sema flag to translate
access control errors into SFINAE errors. The latter can also be
useful if we decide that access control errors during template argument
deduction should cause substitution failure (rather than a hard error)
as has been proposed for C++0x.
llvm-svn: 124446
|
| |
|
|
|
|
| |
to be sure we have complete types in many cases
llvm-svn: 124428
|
| |
|
|
|
|
|
|
|
|
| |
semantics after the C++0x is_convertible type trait. This
implementation is not 100% complete, because it allows access errors
to be hard errors (rather than just evaluating false).
Original patch by Steven Watanabe!
llvm-svn: 124425
|
| |
|
|
|
|
|
|
|
|
| |
catch:
lock_guard(my_mutex);
declares a variable instead of creating a temporary.
llvm-svn: 124398
|
| |
|
|
|
|
|
|
|
| |
deallocation function has a two-argument form. Store the result of this
check in new[] and delete[] nodes.
Fixes rdar://problem/8913519
llvm-svn: 124373
|
| |
|
|
| |
llvm-svn: 124364
|
| |
|
|
| |
llvm-svn: 124363
|
| |
|
|
|
|
|
|
|
|
|
| |
derived-to-base cast that also casts away constness (one of the cases
for static_cast followed by const_cast) would be treated as a bit-cast
rather than a derived-to-base class, causing miscompiles and
heartburn.
Fixes <rdar://problem/8913298>.
llvm-svn: 124340
|
| |
|
|
|
|
|
| |
the restrictions on .* and ->* for ref-qualified pointer-to-member
functions.
llvm-svn: 124294
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
authors to write
class __attribute__((forbid_temporaries)) Name { ... };
when they want to force users to name all variables of the type. This protects
people from doing things like creating a scoped_lock that only lives for a
single statement instead of an entire scope.
The warning produced by this attribute can be disabled by
-Wno-forbid-temporaries.
llvm-svn: 124217
|
| |
|
|
|
|
|
| |
as an rvalue per C++0x [class.copy]p33. If that fails, try again with
the original subexpression.
llvm-svn: 124002
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
NRVO candidate for a return statement, to
Sema::getCopyElisionCandidate(), and teach it enough to also determine
the NRVO candidate for a throw expression. We still don't use the
latter information, however.
Along the way, implement core issue 1148, which eliminates copy
elision from catch parameters and clarifies that copy elision cannot
occur from function parameters (which we already implemented).
llvm-svn: 123982
|
| |
|
|
|
|
|
| |
declaration that name lookup actually found, so that we can use it for
access checking later on. Fixes <rdar://problem/8876150>.
llvm-svn: 123867
|
| |
|
|
|
|
|
| |
so allow it to propagate the failure outward. Fixes the crashing part
of <rdar://problem/8876150>.
llvm-svn: 123863
|
| |
|
|
|
|
| |
thousand other things which were (generally inadvertantly) relying on that.
llvm-svn: 123814
|
| |
|
|
|
|
| |
-Wint-to-pointer-cast.
llvm-svn: 123719
|
| |
|
|
|
|
|
| |
1. Do not validate for uuid attribute if the type is template dependent.
2. Search every class declaration and definition for the uuid attribute.
llvm-svn: 122578
|
| |
|
|
| |
llvm-svn: 122230
|
| |
|
|
|
|
| |
GUID.
llvm-svn: 122226
|
| |
|
|
| |
llvm-svn: 122162
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
whether the expression contains an unexpanded parameter pack, in the
same vein as the changes to the Type hierarchy. Compute this bit
within all of the Expr subclasses.
This change required a bunch of reshuffling of dependency
calculations, mainly to consolidate them inside the constructors and
to fuse multiple loops that iterate over arguments to determine type
dependence, value dependence, and (now) containment of unexpanded
parameter packs.
Again, testing is painfully sparse, because all of the diagnostics
will change and it is more important to test the to-be-written visitor
that collects unexpanded parameter packs.
llvm-svn: 121831
|
| |
|
|
| |
llvm-svn: 121763
|
| |
|
|
| |
llvm-svn: 121759
|
| |
|
|
|
|
|
| |
class to be passed around. The line between argument and return types and
everything else is kindof vague, but I think it's justifiable.
llvm-svn: 121752
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and TemplateArgument with an operation that determines whether there
are any unexpanded parameter packs within that construct. Use this
information to diagnose the appearance of the names of parameter packs
that have not been expanded (C++ [temp.variadic]p5). Since this
property is checked often (every declaration, ever expression
statement, etc.), we extend Type and Expr with a bit storing the
result of this computation, rather than walking the AST each time to
determine whether any unexpanded parameter packs occur.
This commit is deficient in several ways, which will be remedied with
future commits:
- Expr has a bit to store the presence of an unexpanded parameter
pack, but it is never set.
- The error messages don't point out where the unexpanded parameter
packs were named in the type/expression, but they should.
- We don't check for unexpanded parameter packs in all of the places
where we should.
- Testing is sparse, pending the resolution of the above three
issues.
llvm-svn: 121724
|
| |
|
|
|
|
| |
BinaryTypeTraitExpr.
llvm-svn: 121298
|
| |
|
|
|
|
| |
the failed compile in PR8751.
llvm-svn: 121192
|
| |
|
|
|
|
|
| |
I'm not opposed to the idea in concept, but there's no point in preserving
abortive experiments.
llvm-svn: 121083
|
| |
|
|
|
|
| |
New AST node introduced: BinaryTypeTraitExpr; to be reused for more intrinsics.
llvm-svn: 121074
|
| |
|
|
|
|
| |
reason this is limited to C++, and it's certainly not limited to temporaries.
llvm-svn: 120996
|
| |
|
|
| |
llvm-svn: 120904
|
| |
|
|
| |
llvm-svn: 120902
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
| |
about deprecated Objective-C pointer conversions. Plus, make sure to
actually set an appropriate AssignmentAction when performing an
implicit conversion from an InitializationSequence. Fixes regressions
in the GCC DejaGNU testsuite.
llvm-svn: 120744
|
| |
|
|
| |
llvm-svn: 120646
|
| |
|
|
| |
llvm-svn: 120084
|
| |
|
|
|
|
| |
out because there are still bugs left.
llvm-svn: 119722
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
store it on the expression node. Also store an "object kind",
which distinguishes ordinary "addressed" l-values (like
variable references and pointer dereferences) and bitfield,
@property, and vector-component l-values.
Currently we're not using these for much, but I aim to switch
pretty much everything calculating l-valueness over to them.
For now they shouldn't necessarily be trusted.
llvm-svn: 119685
|