Anders Carlsson
73f97534b0
Pass a 'ForVTable' flag to GetAddrOfThunk and pass it along to GetOrCreateLLVMFunction so that we
...
won't assert when building a thunk for an implicit virtual member function that is not marked used.
llvm-svn: 124967
2011-02-05 18:48:55 +00:00
Anders Carlsson
3c23948481
Re-land r124768, with a fix for PR9130.
...
We now emit everything except unused implicit virtual member functions when building the vtable.
llvm-svn: 124935
2011-02-05 04:35:53 +00:00
Fariborz Jahanian
e28342c401
minor refactoring of -fapple-kext stuff.
...
llvm-svn: 124837
2011-02-04 00:32:39 +00:00
Fariborz Jahanian
7cadb2f65b
What was I thinking?
...
llvm-svn: 124835
2011-02-04 00:08:13 +00:00
Fariborz Jahanian
f7f04458b3
-fapple-kext cannot have 'weak' visibility in this
...
abi.
llvm-svn: 124834
2011-02-04 00:01:24 +00:00
Fariborz Jahanian
7f6f81ba9b
Clean up of -fapple-kext abi code. No change otherwise.
...
llvm-svn: 124807
2011-02-03 19:27:17 +00:00
John McCall
f3a8860ee1
More capturing of 'this': implicit member expressions. Getting that
...
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
2011-02-03 08:15:49 +00:00
Rafael Espindola
af5b92e8f7
Revert 124768.
...
This reopens PR99114, but that one at least can be avoided with an #include.
PR9130 cannot.
llvm-svn: 124780
2011-02-03 06:30:58 +00:00
Anders Carlsson
bac84bef65
Don't try to mark virtual members referenced for classes where the key function
...
is not defined in the current translation unit. Doing so lead to compile errors
such as PR9114.
Instead, when CodeGen is building the vtable, don't try to emit a definition
for functions that aren't marked used in the current translation unit.
Fixes PR9114.
llvm-svn: 124768
2011-02-03 02:08:44 +00:00
Fariborz Jahanian
0c12ed1429
-fapple-kext, elimination of all direct calls to virtual dtors.
...
llvm-svn: 124757
2011-02-02 23:12:46 +00:00
Devang Patel
84ffdd9ba3
Emit debug info for template value parameters.
...
llvm-svn: 124756
2011-02-02 22:36:18 +00:00
Devang Patel
e3773c2f51
Emit debug info for template type parameters.
...
llvm-svn: 124753
2011-02-02 21:38:49 +00:00
Benjamin Kramer
24f1d3e60a
Add NetBSD target support. Patch by Joerg Sonnenberger.
...
llvm-svn: 124736
2011-02-02 18:59:27 +00:00
Fariborz Jahanian
265c325ef3
-fapple-kext support for indirect call to virtuals dtors - wip.
...
llvm-svn: 124701
2011-02-01 23:22:34 +00:00
John McCall
2725aa13ea
Do the right thing for zero-initializing VLAs that don't have a zero
...
bit-pattern. It's not clear that this is actually useful given current
language restrictions.
llvm-svn: 124685
2011-02-01 21:35:06 +00:00
Rafael Espindola
88ea6ab44f
Revert 124633. The linker has been told how to merge available_externally.
...
llvm-svn: 124651
2011-02-01 05:45:26 +00:00
Ken Dyck
316d6f69bc
Convert RecordLayout::NonVirtualSize from bit units to CharUnits.
...
llvm-svn: 124646
2011-02-01 01:52:10 +00:00
Rafael Espindola
9fa5a67d3d
Set visibility for available_externally globals. This is important for two 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
2011-02-01 00:37:17 +00:00
Argyrios Kyrtzidis
8322b426a5
Amazing that there are still issues with the fields of anonymous struct/unions..
...
Allow taking the address of such a field for a pointer-to-member constant. Fixes rdar://8818236.
llvm-svn: 124575
2011-01-31 07:04:29 +00:00
Anders Carlsson
a03f3a85cb
When building with optimizations, emit vtables where the key is not in the
...
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
2011-01-30 20:45:54 +00:00
Anders Carlsson
5b48bf70a8
Remove dead code.
...
llvm-svn: 124554
2011-01-29 22:15:18 +00:00
Anders Carlsson
49f17537ee
When emitting RTTI for a non-class type, compute the visibility of the RTTI data based on the explicit visibility of the type.
...
llvm-svn: 124553
2011-01-29 22:10:32 +00:00
Anders Carlsson
537fdceded
Move GetLLVMVisibility to CodeGenModule.
...
llvm-svn: 124550
2011-01-29 20:59:35 +00:00
Anders Carlsson
678632fa42
Add RTTIBuilder::GetAddrOfTypeName which uses the newly added CreateOrReplaceCXXRuntimeVariable.
...
Set the visibility for typeinfo names.
llvm-svn: 124548
2011-01-29 20:36:11 +00:00
Anders Carlsson
265aa7c070
Change CodeGenModule::setTypeVisibility to take a TypeVisibilityKind enum instead of an "IsForRTTI" flag.
...
llvm-svn: 124546
2011-01-29 20:24:48 +00:00
Anders Carlsson
072ef7420a
Replace an isa/cast with a dyn_cast.
...
llvm-svn: 124542
2011-01-29 19:41:00 +00:00
Anders Carlsson
c6a47895f7
Get rid of an unneeded parameter from setGlobalVisibility.
...
llvm-svn: 124541
2011-01-29 19:39:23 +00:00
Anders Carlsson
5963024ff6
Give VTTs the right visibility.
...
llvm-svn: 124540
2011-01-29 19:34:19 +00:00
Anders Carlsson
883fc72c3c
Make emitting a VTT a two-step process, much like emitting a VTable. You first get the address of the VTT, and then pass it to EmitVTTDefinition.
...
llvm-svn: 124539
2011-01-29 19:16:51 +00:00
Anders Carlsson
93be9a90cc
Use CGM.CreateOrReplaceCXXRuntimeVariable in CGVTables.cpp
...
llvm-svn: 124538
2011-01-29 18:25:07 +00:00
Anders Carlsson
da80af3681
Add a new function, to be used by CGRTTI, CGVTables and CGVTT (which each has their own copy of this code).
...
llvm-svn: 124537
2011-01-29 18:20:20 +00:00
Ken Dyck
a45a70cf73
Replace a literal '8' with getCharWidth().
...
llvm-svn: 124536
2011-01-29 17:53:12 +00:00
Anders Carlsson
fd4834061c
Remove IsDefinition from CodeGenModule::setTypeVisibility; it is always true.
...
llvm-svn: 124529
2011-01-29 05:26:32 +00:00
Anders Carlsson
6b3afd7df1
When trying to get the most derived class, don't assume that we can ignore all casts. We can only ignore derived-to-base and no-op casts. Fixes selfhost.
...
llvm-svn: 124528
2011-01-29 05:04:11 +00:00
Anders Carlsson
1ae64c5a9d
When calling a virtual member function on a base class and the most derived class is marked 'final', we can devirtualize the call.
...
llvm-svn: 124524
2011-01-29 03:52:01 +00:00
Anders Carlsson
a376b53695
When doing a derived-to-base class through a virtual class, we don't have to get the vbase offset from the vtable if the derived class is marked final.
...
llvm-svn: 124523
2011-01-29 03:18:56 +00:00
Fariborz Jahanian
9f9438b314
More work to support -fapple-kext regarding
...
indirect vf calls and addition of extra entry
at bottom of vtbls.
llvm-svn: 124507
2011-01-28 23:42:29 +00:00
John McCall
b91ab89729
Add my new file to the CMake lists, sorry about that.
...
llvm-svn: 124503
2011-01-28 20:10:46 +00:00
John McCall
ed1ae86ac6
Move all the cleanups framework code into a single file.
...
Pure motion.
llvm-svn: 124484
2011-01-28 11:13:47 +00:00
John McCall
cb5f77f046
Reorganize the value-dominance metaprogram and introduce a specialization
...
for CodeGen's RValue type.
llvm-svn: 124483
2011-01-28 10:53:53 +00:00
John McCall
e4df6c8d96
Convert the exception-freeing cleanup over to the conditional cleanups code,
...
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
2011-01-28 08:37:24 +00:00
Douglas Gregor
21d3fca917
When producing IR for a lvalue-to-rvalue cast *as an lvalue*, only
...
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
2011-01-27 23:22:05 +00:00
John McCall
284c48fff6
Do a proper recursive lookup when deciding whether a class's usual
...
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
2011-01-27 09:37:56 +00:00
John McCall
2903675929
Notes on dynamic array cookies in MSVC.
...
My thanks to chapuni for his help in investigating this.
llvm-svn: 124351
2011-01-27 02:46:02 +00:00
Fariborz Jahanian
2f2fa7284b
Fixes an IRgen bug where __block variable is
...
referenced in the block-literal initializer
of that variable. // rdar://8893785
llvm-svn: 124332
2011-01-26 23:08:27 +00:00
John McCall
0a6bf2ebe2
Un-nest the meat of this function.
...
llvm-svn: 124310
2011-01-26 19:21:13 +00:00
John McCall
f256eb54a2
Fix some obvious bugs in the conditional-cleanup code and then make the
...
dtor cleanup use it.
llvm-svn: 124309
2011-01-26 19:15:39 +00:00
John McCall
ce1de6172c
Better framework for conditional cleanups; untested as yet.
...
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
2011-01-26 04:00:11 +00:00
Nico Weber
2992efa403
Add -add-plugin flag, which runs plugins in addition to codegen.
...
llvm-svn: 124227
2011-01-25 20:34:14 +00:00
Eric Christopher
23ec82fa47
Revert r124146 for now. It appears to be failing on a few platforms.
...
llvm-svn: 124153
2011-01-24 23:07:03 +00:00