| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
are represented as prvalues in C++; don't be fooled into thinking they're
global lvalues.
llvm-svn: 150870
|
| |
|
|
|
|
|
|
| |
<rdar://problem/10885993>.
This should probably be refactored... but it isn't completely obvious what refactoring is best.
llvm-svn: 150869
|
| |
|
|
| |
llvm-svn: 150868
|
| |
|
|
|
|
|
|
|
|
| |
We had two separate issues here: firstly, varions functions were assuming that
they did not need to perform semantic checks on trivial destructors (this is
not true in C++11, where a trivial destructor can nonetheless be private or
deleted), and a bunch of DiagnoseUseOfDecl calls were missing for uses of
destructors.
llvm-svn: 150866
|
| |
|
|
|
|
|
|
|
| |
decent diagnostics. Finish the work of combining all the 'ShouldDelete'
functions into one. In unifying the code, fix a minor bug where an anonymous
union with a deleted default constructor as a member of a union wasn't being
considered as making the outer union's default constructor deleted.
llvm-svn: 150862
|
| |
|
|
| |
llvm-svn: 150859
|
| |
|
|
|
|
|
|
| |
with full types if they exist.
rdar://10809898 and rdar://10209967 and rdar://10400981
llvm-svn: 150858
|
| |
|
|
| |
llvm-svn: 150857
|
| |
|
|
|
|
|
| |
emit less than complete types on purpose on occasion and so
our caches aren't useful for this kind of lazy emitting.
llvm-svn: 150856
|
| |
|
|
| |
llvm-svn: 150855
|
| |
|
|
|
|
| |
for functions called more than once.
llvm-svn: 150849
|
| |
|
|
|
|
|
|
|
|
|
|
| |
it aware of CString APIs that return the input parameter.
Malloc Checker needs to know how the 'strcpy' function is
evaluated. Introduce the dependency on CStringChecker for that.
CStringChecker knows all about these APIs.
Addresses radar://10864450
llvm-svn: 150846
|
| |
|
|
|
|
|
| |
(Ex: It was not treating __inline_strcpy as strcpy. Will add tests that
rely on this later on.)
llvm-svn: 150845
|
| |
|
|
|
|
| |
until the end when all their ivars are known then.
llvm-svn: 150844
|
| |
|
|
|
|
| |
and some cleanup.
llvm-svn: 150839
|
| |
|
|
| |
llvm-svn: 150838
|
| |
|
|
|
|
| |
patch.
llvm-svn: 150825
|
| |
|
|
|
|
| |
order to not be broken (by Solaris standards).
llvm-svn: 150822
|
| |
|
|
|
|
| |
functionality change.
llvm-svn: 150817
|
| |
|
|
|
|
| |
Don't know what I was thinking there. Fixes PR12023.
llvm-svn: 150804
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We now generate temporary arrays to back std::initializer_list objects
initialized with braces. The initializer_list is then made to point at
the array. We support both ptr+size and start+end forms, although
the latter is untested.
Array lifetime is correct for temporary std::initializer_lists (e.g.
call arguments) and local variables. It is untested for new expressions
and member initializers.
Things left to do:
Massively increase the amount of testing. I need to write tests for
start+end init lists, temporary objects created as a side effect of
initializing init list objects, new expressions, member initialization,
creation of temporary objects (e.g. std::vector) for initializer lists,
and probably more.
Get lifetime "right" for member initializers and new expressions. Not
that either are very useful.
Implement list-initialization of array new expressions.
llvm-svn: 150803
|
| |
|
|
|
|
|
|
| |
variable ends, if the variable has a trivial destructor and no mutable
subobjects then emit an llvm.invariant.start call for it. globalopt knows to
make the variable const when evaluating this.
llvm-svn: 150798
|
| |
|
|
|
|
| |
Fixes lots of gdb testsuite failures.
llvm-svn: 150797
|
| |
|
|
|
|
|
|
|
| |
as constants.
Refactor and simplify all the separate checks for whether a type can be
emitted as a constant.
llvm-svn: 150793
|
| |
|
|
|
|
|
|
|
|
|
| |
1) It has a const-qualified type, and
2) It has no mutable members, and
3) It has no dynamic initialization, and
4) It has trivial destruction.
Remove the unnecessary requirement that the type be POD. This allows us to
mark all constexpr objects with no mutable members as 'constant'.
llvm-svn: 150792
|
| |
|
|
|
|
| |
we're capturing it by value in a non-mutable lambda.
llvm-svn: 150791
|
| |
|
|
|
|
|
|
|
| |
designators in the parser. In the worst case, this disambiguation
requires tentative parsing just past the closing ']', but for most
cases we'll be able to tell by looking ahead just one token (without
going into the heavyweight tentative parsing machinery).
llvm-svn: 150790
|
| |
|
|
|
|
| |
can be represented by an LValue, and use that to simplify the code a little.
llvm-svn: 150789
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
optional argument passed through the variadic ellipsis)
potentially affects how we need to lower it. Propagate
this information down to the various getFunctionInfo(...)
overloads on CodeGenTypes. Furthermore, rename those
overloads to clarify their distinct purposes, and make
sure we're calling the right one in the right place.
This has a nice side-effect of making it easier to construct
a function type, since the 'variadic' bit is no longer
separable.
This shouldn't really change anything for our existing
platforms, with one minor exception --- we should now call
variadic ObjC methods with the ... in the "right place"
(see the test case), which I guess matters for anyone
running GNUStep on MIPS. Mostly it's just a substantial
clean-up.
llvm-svn: 150788
|
| |
|
|
|
|
| |
in the AST accessor and micro-optimize it very slightly.
llvm-svn: 150787
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
conversion to function pointer. Rather than having IRgen synthesize
the body of this function, we instead introduce a static member
function "__invoke" with the same signature as the lambda's
operator() in the AST. Sema then generates a body for the conversion
to function pointer which simply returns the address of __invoke. This
approach makes it easier to evaluate a call to the conversion function
as a constant, makes the linkage of the __invoke function follow the
normal rules for member functions, and may make life easier down the
road if we ever want to constexpr'ify some of lambdas.
Note that IR generation is responsible for filling in the body of
__invoke (Sema just adds a dummy body), because the body can't
generally be expressed in C++.
Eli, please review!
llvm-svn: 150783
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
loop and switch statements, by teaching Scope that a function scope never has
a continue/break parent for the purposes of control flow. Remove the hack in
block and lambda expressions which worked around this by pretending that such
expressions were continue/break scopes.
Remove Scope::ControlParent, since it's unused.
In passing, teach default statements to recover properly from a missing ';', and
add a fixit for same to both default and case labels (the latter already
recovered correctly).
llvm-svn: 150776
|
| |
|
|
|
|
|
| |
zero-initialize class types with virtual bases when constant-evaluating an
initializer.
llvm-svn: 150770
|
| |
|
|
| |
llvm-svn: 150767
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"Add a completed/incomplete type difference. This allows us to have
partial types for contexts and forward decls while allowing us to
complete types later on for debug purposes.
This piggy-backs on the metadata replacement and rauw changes
for temporary nodes and takes advantage of the incremental
support I added in earlier. This allows us to, if we decide,
to limit adding methods and variables to structures in order
to limit the amount of debug information output into a .o file.
The caching is a bit complicated though so any thoughts on
untangling that are welcome."
with a fix:
- Remove all RAUW during type construction by adding stub versions
of types that we later complete.
and some TODOs:
- Add an RAUW cache for forward declared types so that we can replace
them at the end of compilation.
- Remove the code that updates on completed types because we no
longer need to have that happen. We emit incomplete types on
purpose and only want to know when we want to complete them.
llvm-svn: 150752
|
| |
|
|
| |
llvm-svn: 150738
|
| |
|
|
|
|
|
|
| |
Don't try to typo-correct a method redeclaration to declarations not in
the current record as it could lead to infinite recursion if CorrectTypo
finds more than one correction candidate in a parent record.
llvm-svn: 150735
|
| |
|
|
|
|
|
| |
- Rename the category "Logic Error" -> "Memory Error".
- Shorten all the messages.
llvm-svn: 150733
|
| |
|
|
|
|
| |
of failing realloc. + Minor cleanups.
llvm-svn: 150732
|
| |
|
|
| |
llvm-svn: 150731
|
| |
|
|
| |
llvm-svn: 150728
|
| |
|
|
|
|
|
| |
trailing return type but not a '()'. Recover by inserting the
parentheses. Thanks to Xeo on IRC for the example.
llvm-svn: 150727
|
| |
|
|
| |
llvm-svn: 150726
|
| |
|
|
|
|
|
|
|
| |
even if they are not within a function scope. Teach template
instantiation to treat them as such, and make sure that we have a
local instantiation scope when instantiating default arguments and
static data members.
llvm-svn: 150725
|
| |
|
|
|
|
| |
expressions. To be used later.
llvm-svn: 150723
|
| |
|
|
|
|
| |
CoreEngine. Also have it based on adding predecessors/successors, not node allocation. No measurable performance change."
llvm-svn: 150722
|
| |
|
|
|
|
| |
restriction and add some tests.
llvm-svn: 150721
|
| |
|
|
|
|
| |
have it based on adding predecessors/successors, not node allocation. No measurable performance change.
llvm-svn: 150720
|
| |
|
|
|
|
| |
change.
llvm-svn: 150719
|
| |
|
|
|
|
| |
part of class meta-data.
llvm-svn: 150714
|