| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 144799
|
|
|
|
|
|
|
| |
not safely derived. Don't allow lvalue-to-rvalue conversions on the result of
dereferencing such a pointer.
llvm-svn: 144783
|
|
|
|
|
|
|
|
| |
or MemberExpr which refers to it. As a side-effect, MemberExprs which refer to
static member functions and static data members are now emitted as constant
expressions.
llvm-svn: 144468
|
|
|
|
| |
llvm-svn: 144382
|
|
|
|
|
|
| |
please the buildbots.
llvm-svn: 144375
|
|
|
|
|
|
|
|
|
|
|
| |
reinstates r144273; a combination of r144333's fix for NoOp rvalue-to-lvalue
casts and some corresponding changes here resolve the regression which that
caused.
This patch also adds support for some additional forms of member function call,
along with additional testing.
llvm-svn: 144369
|
|
|
|
| |
llvm-svn: 144296
|
|
|
|
| |
llvm-svn: 144273
|
|
|
|
|
|
|
| |
literal types, as well as derived-to-base casts for lvalues and
derived-to-virtual-base casts.
llvm-svn: 144265
|
|
|
|
|
|
|
| |
is currently too inefficient to allow us to use it for array initializers, but
fortunately we usually don't yet need to evaluate such initializers.
llvm-svn: 144260
|
|
|
|
| |
llvm-svn: 144156
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
expression evaluation:
- When folding a non-value-dependent expression, we may try to use the
initializer of a value-dependent variable. If that happens, give up.
- In C++98, actually check that a const, non-volatile DeclRefExpr inside an ICE
is of integral or enumeration type (a reference isn't OK!)
- In C++11, DeclRefExprs for objects of const literal type initialized with
value-dependent expressions are themselves value-dependent.
- So are references initialized with value-dependent expressions (though this
case is missing from the C++11 standard, along with many others).
llvm-svn: 144056
|
|
|
|
| |
llvm-svn: 143922
|
|
|
|
| |
llvm-svn: 143910
|
|
|
|
|
|
| |
core constant value down to an APValue.
llvm-svn: 143909
|
|
|
|
|
|
|
|
| |
partially undoes the revert in r143491, but does not introduce any new instances
of the underlying issue (which is not yet fixed) in code which does not use
the 'constexpr' keyword.
llvm-svn: 143905
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
property references to use a new PseudoObjectExpr
expression which pairs a syntactic form of the expression
with a set of semantic expressions implementing it.
This should significantly reduce the complexity required
elsewhere in the compiler to deal with these kinds of
expressions (e.g. IR generation's special l-value kind,
the static analyzer's Message abstraction), at the lower
cost of specifically dealing with the odd AST structure
of these expressions. It should also greatly simplify
efforts to implement similar language features in the
future, most notably Managed C++'s properties and indexed
properties.
Most of the effort here is in dealing with the various
clients of the AST. I've gone ahead and simplified the
ObjC rewriter's use of properties; other clients, like
IR-gen and the static analyzer, have all the old
complexity *and* all the new complexity, at least
temporarily. Many thanks to Ted for writing and advising
on the necessary changes to the static analyzer.
I've xfailed a small diagnostics regression in the static
analyzer at Ted's request.
llvm-svn: 143867
|
|
|
|
| |
llvm-svn: 143696
|
|
|
|
|
|
|
| |
initializations which refer indirectly to elements of the object being
initialized.
llvm-svn: 143680
|
|
|
|
|
|
|
| |
to allow us to implement the C++11 rule that a non-active union member can't be
read, and use it to implement subobject access for string literals.
llvm-svn: 143677
|
|
|
|
|
|
|
| |
be at the same address as another object, we do know it won't alias a null
pointer.
llvm-svn: 143674
|
|
|
|
|
|
| |
if it's marked as weak: that definition may not end up being used.
llvm-svn: 143496
|
|
|
|
|
|
|
| |
apparent miscompile triggered by this is investigated. This is essentially a
revert of r143298.
llvm-svn: 143491
|
|
|
|
|
|
| |
perform the code simplifications this rule allows.
llvm-svn: 143463
|
|
|
|
| |
llvm-svn: 143391
|
|
|
|
|
|
| |
arbitrary integer constant. Fixes regression from r143334.
llvm-svn: 143374
|
|
|
|
|
|
| |
needed for C++11, and will follow later.
llvm-svn: 143363
|
|
|
|
|
|
| |
rvalue. Test and better fix to follow.
llvm-svn: 143360
|
|
|
|
|
|
| |
materialized temporaries.
llvm-svn: 143335
|
|
|
|
|
|
| |
arbitrary pointers, if those pointers don't point to weak objects or literals.
llvm-svn: 143334
|
|
|
|
|
|
| |
result is not unspecified.
llvm-svn: 143329
|
|
|
|
| |
llvm-svn: 143320
|
|
|
|
|
|
| |
integer-cast pointer value.
llvm-svn: 143299
|
|
|
|
|
|
|
|
| |
just integers and floating point types. Since we don't support evaluating class
types or performing lvalue-to-rvalue conversions on array elements yet, this
just means pointer types right now.
llvm-svn: 143298
|
|
|
|
|
|
|
|
| |
Track the function invocation where an lvalue referring to a constexpr function
parameter originated from, and use it to substitute the correct argument and to
determine whether such an argument's lifetime has ended.
llvm-svn: 143296
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
binary operator isn't an rvalue if it's an assignment operator.
llvm-svn: 143250
|
|
|
|
|
|
|
|
|
|
| |
constexpr function arguments outside of their function (passing or returning
them by reference) does not work correctly yet.
Calling constexpr function templates does not work yet, since the bodies are not
instantiated until the end of the translation unit.
llvm-svn: 143234
|
|
|
|
|
|
|
|
|
|
| |
are present in all the necessary places:
In constant expression evaluation, evaluate lvalues as lvalues and rvalues as
rvalues. Remove special case for caching reference initialization and fix a
cyclic initialization crash in the process.
llvm-svn: 143204
|
|
|
|
| |
llvm-svn: 142884
|
|
|
|
|
|
| |
lvalue-to-rvalue conversion on the LHS operand of '->'.
llvm-svn: 142872
|
|
|
|
| |
llvm-svn: 142866
|
|
|
|
|
|
|
|
| |
rvalues, as C++11 constant evaluation semantics require. DeclRefs referring to
references can now use the normal initialization-caching codepath, which
incidentally fixes a crash in cyclic initialization of references.
llvm-svn: 142844
|
|
|
|
| |
llvm-svn: 142835
|
|
|
|
|
|
|
| |
floating-point literals if they are the immediate operands of casts.
ImplicitCastExpr is not a cast in the language-standards sense.
llvm-svn: 142832
|
|
|
|
|
|
| |
caching.
llvm-svn: 142812
|
|
|
|
|
|
|
| |
const expression evaluation subclasses, and remove some APValue copying and
malloc traffic in the process.
llvm-svn: 142733
|
|
|
|
|
|
|
|
| |
an atomic type rather than an atomic type itself just to save some implementation pain; I can change that if it seems worthwhile.
I think this is the last hook needed for <atomic> besides defines for ATOMIC_CHAR_LOCK_FREE and friends.
llvm-svn: 142281
|
|
|
|
|
|
|
| |
end result. Use this split to propagate state information and diagnostics
through more of constant expression evaluation.
llvm-svn: 142159
|
|
|
|
|
|
| |
list initialization into base class.
llvm-svn: 141717
|