| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 103873
|
| |
|
|
|
|
|
| |
destroy the variable along the exceptional edge; it's only during
normal execution that we avoid destroying this variable.
llvm-svn: 103872
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ObjCObjectType, which is basically just a pair of
one of {primitive-id, primitive-Class, user-defined @class}
with
a list of protocols.
An ObjCObjectPointerType is therefore just a pointer which always points to
one of these types (possibly sugared). ObjCInterfaceType is now just a kind
of ObjCObjectType which happens to not carry any protocols.
Alter a rather large number of use sites to use ObjCObjectType instead of
ObjCInterfaceType. Store an ObjCInterfaceType as a pointer on the decl rather
than hashing them in a FoldingSet. Remove some number of methods that are no
longer used, at least after this patch.
By simplifying ObjCObjectPointerType, we are now able to easily remove and apply
pointers to Objective-C types, which is crucial for a certain kind of ObjC++
metaprogramming common in WebKit.
llvm-svn: 103870
|
| |
|
|
|
|
|
|
|
| |
return statements. We perform NRVO only when all of the return
statements in the function return the same variable. Fixes some link
failures in Boost.Interprocess (which is relying on NRVO), and
probably improves performance for some C++ applications.
llvm-svn: 103867
|
| |
|
|
|
|
|
|
|
|
|
|
| |
return value optimization. Sema marks return statements with their
NRVO candidates (which may or may not end up using the NRVO), then, at
the end of a function body, computes and marks those variables that
can be allocated into the return slot.
I've checked this locally with some debugging statements (not
committed), but there won't be any tests until CodeGen comes along.
llvm-svn: 103865
|
| |
|
|
|
|
|
| |
implicit conversions where needed. This fixes an error reported
on cfe-dev, not really worth a testcase though.
llvm-svn: 103864
|
| |
|
|
|
|
|
|
|
|
| |
"return" statement and mark the corresponding CXXConstructExpr as
elidable. Teach CodeGen that eliding a temporary is different from
eliding an object construction.
This is just a baby step toward NRVO.
llvm-svn: 103849
|
| |
|
|
| |
llvm-svn: 103843
|
| |
|
|
| |
llvm-svn: 103842
|
| |
|
|
|
|
| |
assembler defaults to on.
llvm-svn: 103825
|
| |
|
|
|
|
| |
Radar 7923673.
llvm-svn: 103812
|
| |
|
|
|
|
| |
part (or possibly all) of PR7132.
llvm-svn: 103810
|
| |
|
|
|
|
|
|
| |
throw, it should use invoke when needed. The fixes the
Boost.Statechrt failures that motivated PR7132, but there are a few
side issues to tackle as well.
llvm-svn: 103803
|
| |
|
|
| |
llvm-svn: 103793
|
| |
|
|
| |
llvm-svn: 103792
|
| |
|
|
|
|
|
|
|
| |
user directive is needed to force a property implementation.
It is decided based on those propeties which are declared in
the class (or in its protocols) but not those which must be
default implemented by one of its super classes. Implements radar 7923851.
llvm-svn: 103787
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
declarator is incorrect. Not being a typename causes the parser to
dive down into the K&R identifier list handling stuff, which is almost
never the right thing to do.
Before:
r.c:3:17: error: expected ')'
void bar(intptr y);
^
r.c:3:9: note: to match this '('
void bar(intptr y);
^
r.c:3:10: error: a parameter list without types is only allowed in a function definition
void bar(intptr y);
^
After:
r.c:3:10: error: unknown type name 'intptr'; did you mean 'intptr_t'?
void bar(intptr y);
^~~~~~
intptr_t
r.c:1:13: note: 'intptr_t' declared here
typedef int intptr_t;
^
This fixes rdar://7980651 - poor recovery for bad type in the first arg of a C function
llvm-svn: 103783
|
| |
|
|
|
|
|
| |
identifier in the identifier list consumed before it is called.
No functionality change.
llvm-svn: 103781
|
| |
|
|
| |
llvm-svn: 103780
|
| |
|
|
|
|
| |
Providing linkage name for function static variable confuses gdb, so don't do that.
llvm-svn: 103779
|
| |
|
|
|
|
| |
types.", it is breaking Clang bootstrap.
llvm-svn: 103775
|
| |
|
|
|
|
| |
correctly.
llvm-svn: 103771
|
| |
|
|
| |
llvm-svn: 103770
|
| |
|
|
| |
llvm-svn: 103767
|
| |
|
|
|
|
|
| |
scopes during unqualified name lookup that has fallen out to namespace
scope. Fixes PR7133.
llvm-svn: 103766
|
| |
|
|
|
|
|
| |
function's definition is an out-of-class definition marked
"inline". Fixes an assertion in WebKit.
llvm-svn: 103763
|
| |
|
|
| |
llvm-svn: 103761
|
| |
|
|
|
|
|
|
| |
-static.
- How else will we figure out what is broken, eh?
llvm-svn: 103759
|
| |
|
|
|
|
| |
This fixes bunch of failures in gdb testsuite.
llvm-svn: 103745
|
| |
|
|
|
|
|
|
|
|
|
|
| |
methods for which the key function is guaranteed to be in another
translation unit. Unfortunately, this guarantee isn't the case when
dealing with shared libraries that fail to export these virtual method
definitions.
I'm reopening PR6747 so we can consider this again at a later point in
time.
llvm-svn: 103741
|
| |
|
|
|
|
| |
Completes radar 7963410.
llvm-svn: 103719
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"used" (e.g., we will refer to the vtable in the generated code) and
when they are defined (i.e., because we've seen the key function
definition). Previously, we were effectively tracking "potential
definitions" rather than uses, so we were a bit too eager about emitting
vtables for classes without key functions.
The new scheme:
- For every use of a vtable, Sema calls MarkVTableUsed() to indicate
the use. For example, this occurs when calling a virtual member
function of the class, defining a constructor of that class type,
dynamic_cast'ing from that type to a derived class, casting
to/through a virtual base class, etc.
- For every definition of a vtable, Sema calls MarkVTableUsed() to
indicate the definition. This happens at the end of the translation
unit for classes whose key function has been defined (so we can
delay computation of the key function; see PR6564), and will also
occur with explicit template instantiation definitions.
- For every vtable defined/used, we mark all of the virtual member
functions of that vtable as defined/used, unless we know that the key
function is in another translation unit. This instantiates virtual
member functions when needed.
- At the end of the translation unit, Sema tells CodeGen (via the
ASTConsumer) which vtables must be defined (CodeGen will define
them) and which may be used (for which CodeGen will define the
vtables lazily).
From a language perspective, both the old and the new schemes are
permissible: we're allowed to instantiate virtual member functions
whenever we want per the standard. However, all other C++ compilers
were more lazy than we were, and our eagerness was both a performance
issue (we instantiated too much) and a portability problem (we broke
Boost test cases, which now pass).
Notes:
(1) There's a ton of churn in the tests, because the order in which
vtables get emitted to IR has changed. I've tried to isolate some of
the larger tests from these issues.
(2) Some diagnostics related to
implicitly-instantiated/implicitly-defined virtual member functions
have moved to the point of first use/definition. It's better this
way.
(3) I could use a review of the places where we MarkVTableUsed, to
see if I missed any place where the language effectively requires a
vtable.
Fixes PR7114 and PR6564.
llvm-svn: 103718
|
| |
|
|
|
|
|
|
| |
@synchronized statement is empty.
Fixes <rdar://problem/7979430>.
llvm-svn: 103717
|
| |
|
|
|
|
|
|
| |
references. This is a WIP as we should handle function pointers, etc. Reshuffle
the code to do this to facilitate recursing in this manner, and to check for
the type already being printed first rather than last.
llvm-svn: 103712
|
| |
|
|
|
|
| |
magic type that 'id' is a pointer to.
llvm-svn: 103708
|
| |
|
|
| |
llvm-svn: 103707
|
| |
|
|
|
|
| |
against pointer patterns.
llvm-svn: 103706
|
| |
|
|
| |
llvm-svn: 103705
|
| |
|
|
|
|
|
| |
than 127 groups so this was already failing given -fsigned-char. A subsequent
to commit to TableGen will generate shorts for the arrays themselves.
llvm-svn: 103703
|
| |
|
|
| |
llvm-svn: 103688
|
| |
|
|
|
|
|
|
|
| |
This fixes recent regressions reported by gdb testsuite.
Tighter verification of debug info generated by FE found these regressions.
Refactor code to extract line number and column number from SourceLocation.
llvm-svn: 103678
|
| |
|
|
|
|
|
| |
class object used as a receiver to an objective-c
pointer via a converwsion function. wip.
llvm-svn: 103672
|
| |
|
|
|
|
|
|
|
|
|
| |
(e.g. for C++ operators) in the xml dump.
I also re-enabled the unit test for ast-print-xml (or so I think)
at least, make test didn't fail..."
patch by Sebastien Binet!
llvm-svn: 103671
|
| |
|
|
| |
llvm-svn: 103670
|
| |
|
|
|
|
| |
support the necessary ABI yet.
llvm-svn: 103632
|
| |
|
|
| |
llvm-svn: 103631
|
| |
|
|
|
|
| |
another.
llvm-svn: 103630
|
| |
|
|
|
|
|
| |
potentially-evaluated expression context, to ensure that used
declarations get properly marked. Fixes PR7123.
llvm-svn: 103624
|
| |
|
|
|
|
|
|
| |
member function (default constructor, copy constructor, copy
assignment operator, destructor), emit a note showing where that
implicit definition was required.
llvm-svn: 103619
|
| |
|
|
|
|
| |
a convenience routine to find the innermost common ancestor of two scopes.
llvm-svn: 103565
|