Commit Graph

41 Commits

Author SHA1 Message Date
Anders Carlsson
a85c1469c7 When building RTTI descriptors for pointer types, we need to get the unqualified array type and the qualifiers from it.
llvm-svn: 105326
2010-06-02 15:44:35 +00:00
John McCall
48bf349471 Fix -fno-rtti -fexceptions by forcing the emission of (non-"builtin") RTTI
when used by the exceptions routines.  Fixes PR 6974.

llvm-svn: 102684
2010-04-30 01:15:21 +00:00
Anders Carlsson
11e5140db9 Vtable -> VTable renames across the board.
llvm-svn: 101666
2010-04-17 20:15:18 +00:00
Douglas Gregor
eadd3cace9 Eliminate excessive PCH deserialization caused by the search for
__cxxabiv1::__fundamental_type_info in every translation
unit. Previously, we would perform name lookup for
__cxxabiv1::__fundamental_type_info at the end of IRGen for a each
translation unit, to determine whether it was present. If so, we we
produce type information for all of the fundamental types. However,
this name lookup causes PCH deserialization of a significant part of the
translation unit, which has a woeful impact on performance.

With this change, we now look at each record type after we've
generated its vtable to see if it is
__cxxabiv1::__fundamental_type_info. If so, we generate type info for
all of the fundamental types. This works because
__cxxabiv1::__fundamental_type_info should always have a key function
(typically the virtual destructor), that will be defined once in the
support library. The fundamental type information will end up there.

Fixes <rdar://problem/7840011>.

llvm-svn: 100772
2010-04-08 15:52:03 +00:00
Douglas Gregor
d7f18dd750 Drastically simplify the computation of linkage for typeinfo by using
the existing (and already well-tested) linkage computation for types,
with minor tweaks for dynamic classes and (pointers to) incomplete
types. Fixes PR6597.

llvm-svn: 99968
2010-03-31 00:15:35 +00:00
Rafael Espindola
adcc1d18e2 When given the magic class __cxxabiv1::__fundamental_type_info, produce
the typeinfo for the fundamental types.

Fixes PR6685.

llvm-svn: 99701
2010-03-27 02:52:14 +00:00
Anders Carlsson
a864caff8c Rename CGVtableInfo to CodeGenVTables in preparation of adding another VTableInfo class.
llvm-svn: 99250
2010-03-23 04:11:45 +00:00
Anders Carlsson
4cbe83cccb Rename getVirtualBaseOffsetIndex to getVirtualBaseOffsetOffset to reflect what it actually does.
llvm-svn: 98248
2010-03-11 07:15:17 +00:00
John McCall
67da35c832 Extract a common structure for holding information about the definition
of a C++ record.  Exposed a lot of problems where various routines were
silently doing The Wrong Thing (or The Acceptable Thing in The Wrong Order)
when presented with a non-definition.  Also cuts down on memory usage.

llvm-svn: 95330
2010-02-04 22:26:26 +00:00
Douglas Gregor
2a34df3264 Fix linkage for RTTI names by re-using the logic for computing the
linkage of vtables. Before this, we were emitting RTTI names for
template instantiations with strong external linkage rather than with
weak ODR linkage.

llvm-svn: 92857
2010-01-06 22:00:56 +00:00
Anders Carlsson
c92a37e917 Speculative MSVC fix.
llvm-svn: 92421
2010-01-02 18:46:23 +00:00
Anders Carlsson
2d21394190 If the key function of a record is inline, then the RTTI data should have weak_odr linkage.
llvm-svn: 92371
2009-12-31 19:36:25 +00:00
Anders Carlsson
7ae81bb711 More RTTI builder cleanup.
llvm-svn: 92360
2009-12-31 17:43:53 +00:00
Anders Carlsson
a442499072 Fix a bunch of bugs with VMI RTTI building, and add a whole bunch of tests.
llvm-svn: 92319
2009-12-30 23:47:56 +00:00
Anders Carlsson
ac2f681777 More RTTI cleanup, test that RTTI classes have the correct vtables.
llvm-svn: 92284
2009-12-30 01:00:12 +00:00
Anders Carlsson
79c184e975 Match gcc and treat vector types as fundamental types.
llvm-svn: 92278
2009-12-29 22:30:11 +00:00
Anders Carlsson
ef88695860 Handle enum types as well.
llvm-svn: 92276
2009-12-29 22:13:01 +00:00
Anders Carlsson
0e4151c685 Test linkage of RTTI descriptors of array types.
llvm-svn: 92274
2009-12-29 21:58:32 +00:00
Anders Carlsson
26cf4ab8e2 Fix function type RTTI linkage and add tests.
llvm-svn: 92266
2009-12-29 20:20:19 +00:00
Mike Stump
bb2f57dd39 Don't set hidden for a non-external symbol as that would make it extenal.
Refine codegen for visibility and hidden.  WIP.

llvm-svn: 92118
2009-12-24 02:33:48 +00:00
Mike Stump
a8a2a33af9 Fix recent regression caught by g++.old-deja/g++.mike/eh19.C.
llvm-svn: 92109
2009-12-24 01:10:27 +00:00
Mike Stump
f3c23c0cd4 Fix regression found by g++.dg/eh/alias1.C.
llvm-svn: 92072
2009-12-23 22:48:20 +00:00
Anders Carlsson
2b7f444366 Incomplete structs should also have internal linkage.
llvm-svn: 91805
2009-12-21 00:41:42 +00:00
Anders Carlsson
18e6ee1b20 Correcly handle pointers to member pointer types where the class or the pointee is incomplete.
llvm-svn: 91804
2009-12-20 23:37:55 +00:00
Anders Carlsson
d008129f34 Rework the way pointer types are handled by the RTTI builder. We now get the right linkage for indirect pointers to incomplete structs.
llvm-svn: 91799
2009-12-20 22:30:54 +00:00
Daniel Dunbar
e017ecc9e2 Remove ';' after method definition. Noticed by clang++, which one would think
would have a higher respect for its own code. This is getting old, is this
warning really adding value?

llvm-svn: 91779
2009-12-19 17:50:07 +00:00
Anders Carlsson
3f4336cb1f Rename GetAddrOfRTTI to GetAddrOfRTTIDescriptor. Remove the overload that takes a CXXRecordDecl since we were just creating a QualType from it anyway.
llvm-svn: 91590
2009-12-17 07:09:17 +00:00
Anders Carlsson
1fd734276d Simplify RTTIBuilder::finish.
llvm-svn: 91585
2009-12-17 05:10:59 +00:00
Anders Carlsson
e5a94105eb Move the Info vector into the RTTIBuilder struct. No functionality change.
llvm-svn: 91583
2009-12-17 05:06:03 +00:00
Anders Carlsson
07863b8b6e Use GetAddrOfRTTI everywhere and remove GenerateRTTI and GenerateRTTIRef. With this change, we can now compile and link TableGen.
llvm-svn: 91520
2009-12-16 07:05:41 +00:00
Anders Carlsson
c67974ccb1 Simplify BuildSimpleType in the RTTBuilder to avoid using an std::vector.
llvm-svn: 91255
2009-12-13 23:47:29 +00:00
Anders Carlsson
e7025c55a4 Change the RTTIBuilder's finish member function to take a pointer to the constants array + the length of the array.
llvm-svn: 91241
2009-12-13 16:38:01 +00:00
Eli Friedman
3ace52b3a7 Fix linkage of type info and vtable for classes without linkage.
llvm-svn: 91152
2009-12-11 20:48:18 +00:00
Anders Carlsson
1d6ad50826 Move info vectors and add assertions in preparation of moving the vector directly into RTTIBuilder.
llvm-svn: 91129
2009-12-11 16:41:51 +00:00
Anders Carlsson
a0b98f083a Use GetAddrOfRTTI when getting the RTTI pointer for a base class.
llvm-svn: 91127
2009-12-11 16:37:06 +00:00
Anders Carlsson
fd7dfeb779 Improve linkage of RTTI data structures. Introduce CodeGenModule::GetAddrOfRTTI which figures out the right linkage of the RTTI information for the given type and whether it should be defined or not. I will migrate clients over to GetAddrOfRTTI in subsequent commits (with tests).
llvm-svn: 91098
2009-12-11 02:46:30 +00:00
Anders Carlsson
c988201417 Use named flags in RTTIBuilder::BuildPointerType.
llvm-svn: 91088
2009-12-11 01:27:37 +00:00
Mike Stump
afe4764fa5 Be sure to instantiate rtti for non-polymorphic bases.
llvm-svn: 90586
2009-12-04 20:55:13 +00:00
Mike Stump
ae1b85d984 Put the Builder classes into the anonymous namespace.
llvm-svn: 90335
2009-12-02 19:07:44 +00:00
Mike Stump
c01c2b87e8 Change rtti/Rtti to RTTI, as it is an acronym.
llvm-svn: 90334
2009-12-02 18:57:08 +00:00
Mike Stump
d6eb364b31 Rename CGRtti.cpp to CGRTTI.cpp.
llvm-svn: 90331
2009-12-02 18:32:08 +00:00