| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 124654
|
| |
|
|
|
|
|
|
| |
extremely rambunctious, both on parsing and on template instantiation.
Calm it down, fixing an internal consistency assert on anonymous enum
instantiation manglings.
llvm-svn: 124653
|
| |
|
|
| |
llvm-svn: 124651
|
| |
|
|
|
|
|
|
|
|
| |
reasons:
* llvm-link would complains about mismatched visibility
* If we produce a relocation with an available_externally, it is good to know that
it is hidden.
llvm-svn: 124633
|
| |
|
|
|
|
| |
Allow taking the address of such a field for a pointer-to-member constant. Fixes rdar://8818236.
llvm-svn: 124575
|
| |
|
|
| |
llvm-svn: 124574
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
current translation unit as available_externally.
This helps devirtualize the second example in PR3100, comment 18:
struct S { S() {}; virtual void xyzzy(); };
inline void foo(S *s) { s->xyzzy(); }
void bar() { S s; foo(&s); }
This involved four major changes:
1. In DefineUsedVTables, always mark virtual member functions as referenced for
non-template classes and class template specializations.
2. In CodeGenVTables::ShouldEmitVTableInThisTU return true if optimizations are
enabled, even if the key function is not implemented in this translation
unit. We don't ever do this for code compiled with -fapple-kext, because we
don't ever want to devirtualize virtual member function calls in that case.
3. Give the correct linkage for vtables where the key function is not defined.
4. Update the linkage for RTTI structures when necessary.
llvm-svn: 124565
|
| |
|
|
| |
llvm-svn: 124555
|
| |
|
|
|
|
| |
data based on the explicit visibility of the type.
llvm-svn: 124553
|
| |
|
|
|
|
| |
I'm still not sure if having the typenames be visible with -hidden-weak-vtables, but I think it makes sense.
llvm-svn: 124549
|
| |
|
|
| |
llvm-svn: 124543
|
| |
|
|
| |
llvm-svn: 124540
|
| |
|
|
|
|
| |
first get the address of the VTT, and then pass it to EmitVTTDefinition.
llvm-svn: 124539
|
| |
|
|
|
|
| |
all casts. We can only ignore derived-to-base and no-op casts. Fixes selfhost.
llvm-svn: 124528
|
| |
|
|
|
|
| |
class is marked 'final', we can devirtualize the call.
llvm-svn: 124524
|
| |
|
|
|
|
| |
get the vbase offset from the vtable if the derived class is marked final.
llvm-svn: 124523
|
| |
|
|
|
|
|
| |
indirect vf calls and addition of extra entry
at bottom of vtbls.
llvm-svn: 124507
|
| |
|
|
|
|
|
|
|
| |
fixing a crash which probably nobody was ever going to see. In doing so,
fix a horrendous number of problems with the conditional-cleanups code.
Also, make conditional cleanups re-use the cleanup's activation variable,
which avoids some unfortunate repetitiveness.
llvm-svn: 124481
|
| |
|
|
| |
llvm-svn: 124455
|
| |
|
|
|
|
|
|
|
| |
non-class prvalues actually require the realization of a
temporary. For everything else, we already have an lvalue (or class
prvalue) in the subexpression.
Note: we're missing some move elision in this case. I'll tackle that next.
llvm-svn: 124453
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
element type. Fixes rdar://problem/8913416.
llvm-svn: 124315
|
| |
|
|
|
|
| |
dtor cleanup use it.
llvm-svn: 124309
|
| |
|
|
|
|
|
|
| |
using rules that I just made up this morning. This encoding has now
been proposed to the Itanium C++ ABI group for inclusion, but of
course it's still possible that the mangling will change.
llvm-svn: 124296
|
| |
|
|
|
|
|
|
| |
I'm separately committing this because it incidentally changes some
block orderings and minor IR issues, like using a phi instead of
an unnecessary alloca.
llvm-svn: 124277
|
| |
|
|
| |
llvm-svn: 124210
|
| |
|
|
|
|
|
| |
derived-to-base conversion, set the cast kind and base path
appropriately.
llvm-svn: 124189
|
| |
|
|
|
|
|
|
| |
exception of explicit template instantiations, which have to be weak_odr.
This fixes PR6996.
llvm-svn: 124089
|
| |
|
|
| |
llvm-svn: 124083
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
Improve on test case. Per Doug's comment. wip.
llvm-svn: 123954
|
| |
|
|
|
|
| |
vf calls, be made indirect. This patch is towards that goal.
llvm-svn: 123922
|
| |
|
|
| |
llvm-svn: 123773
|
| |
|
|
| |
llvm-svn: 123742
|
| |
|
|
| |
llvm-svn: 123741
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For example:
class A{
public:
A& operator=(const A& that) {
if (this != &that) {
this->A::~A();
this->A::A(that); // <=== explicit constructor call.
}
return *this;
}
};
More work will be needed to support an explicit call to a template constructor.
llvm-svn: 123735
|
| |
|
|
| |
llvm-svn: 123531
|
| |
|
|
| |
llvm-svn: 123478
|
| |
|
|
| |
llvm-svn: 123430
|
| |
|
|
| |
llvm-svn: 123382
|
| |
|
|
| |
llvm-svn: 123379
|
| |
|
|
| |
llvm-svn: 123378
|
| |
|
|
| |
llvm-svn: 123354
|
| |
|
|
| |
llvm-svn: 123332
|
| |
|
|
| |
llvm-svn: 123293
|
| |
|
|
| |
llvm-svn: 123280
|
| |
|
|
|
|
| |
think it is safe to mark all type infos with unnamed_addr, but I am not sure.
llvm-svn: 123275
|
| |
|
|
| |
llvm-svn: 123272
|
| |
|
|
| |
llvm-svn: 123197
|
| |
|
|
|
|
|
|
|
| |
static const char foo[] = "foo";
static const char *bar = "bar";
the global created to hold "bar" will have it, but foo will not.
llvm-svn: 123192
|