Commit Graph

162 Commits

Author SHA1 Message Date
Douglas Gregor d94105a1c2 Don't generate any code for an explicit call to a trivial destructor.
Now that parsing, semantic analysis, and (I think) code generation of
pseudo-destructor expressions and explicit destructor calls works,
update the example-dynarray.cpp test to destroy the objects it
allocates and update the test to actually compile + link.
The code seems correct, but the Clang-compiled version dies with a
malloc error. Time to debug!

llvm-svn: 81025
2009-09-04 19:04:08 +00:00
Mike Stump 5a522353c3 Add overidding for methods for vtable building for the secondary
vtables.  Add thunk generation.  WIP.

llvm-svn: 81014
2009-09-04 18:27:16 +00:00
Anders Carlsson 35dca26835 Fix an assertion when initializing a union using a member initializer. (We weren't casting from the union type to the initializer type correctly).
llvm-svn: 80837
2009-09-02 21:14:47 +00:00
Mike Stump 2348e62498 More overriding base work and some cleanups. WIP.
llvm-svn: 80737
2009-09-01 23:22:44 +00:00
Mike Stump 40dc64bcfc Split out overriding. WIP.
llvm-svn: 80732
2009-09-01 22:20:28 +00:00
Anders Carlsson 783ab50b33 Assert that we don't have any virtual bases. We can emit dtors for polymorphics classes just fune.
llvm-svn: 80722
2009-09-01 21:12:16 +00:00
Anders Carlsson 6b8b4b459d We can generate constructors/destructors with base classes and non-trivial fields just fine now.
llvm-svn: 80701
2009-09-01 18:33:46 +00:00
Douglas Gregor 96ee789d33 Rename CXXQualifiedMemberExpr -> CXXAdornedMemberExpr, since we will
also be adding explicit template arguments as an additional
"adornment". No functionality change.

llvm-svn: 80628
2009-08-31 21:41:48 +00:00
Eli Friedman 033e8d4ae6 Make IRGen for initializing a member reference work correctly.
llvm-svn: 80439
2009-08-29 20:58:20 +00:00
Mike Stump beefdc8948 iGenerate vcalls as we build up the methods. WIP.
llvm-svn: 80405
2009-08-28 23:22:54 +00:00
Fariborz Jahanian 8b899e4247 ir-gen related patch for type conversion
with class type conversion methods. WIP.

llvm-svn: 80365
2009-08-28 15:11:24 +00:00
Mike Stump a0d0e6fcb1 Fixup codegen for static dispatch to a virtual function that was
almost correct.  :-)

llvm-svn: 80181
2009-08-26 23:38:08 +00:00
Fariborz Jahanian c71f094c08 ir-gen for type convesion of class objects. WIP.
llvm-svn: 80178
2009-08-26 23:31:30 +00:00
Douglas Gregor c190523d7a When a member reference expression includes a qualifier on the member
name, e.g.,
  
  x->Base::f()

retain the qualifier (and its source range information) in a new
subclass of MemberExpr called CXXQualifiedMemberExpr. Provide
construction, transformation, profiling, printing, etc., for this new
expression type.

When a virtual function is called via a qualified name, don't emit a
virtual call. Instead, call that function directly. Mike, could you
add a CodeGen test for this, too?

llvm-svn: 80167
2009-08-26 22:36:53 +00:00
Mike Stump a5588bf3ac Implement virtual dispatch. :-) This is self-consistent with clang,
but not yet necessarily perfectly consistent with gcc.  Also addressed
Doug and John's comments.

llvm-svn: 80137
2009-08-26 20:46:33 +00:00
Anders Carlsson 458055a890 Revert r80064 since it broke the build.
llvm-svn: 80066
2009-08-26 03:30:14 +00:00
Mike Stump fbddfdacdc Implement virtual dispatch. :-) This is self-consistent with clang, but not yet
necessarily perfectly consistent with gcc.

llvm-svn: 80064
2009-08-26 01:54:35 +00:00
Fariborz Jahanian 2c73b1d2a2 Simplified default construction of array data members
in the constructor prologue.

llvm-svn: 80060
2009-08-26 00:23:27 +00:00
Anders Carlsson 9cedbefb24 Add a -fno-elide-constructors option to clang-cc.
llvm-svn: 79782
2009-08-22 22:30:33 +00:00
Mike Stump 0b8c5ae7af Calculate the address point for a vtable better, and start fleshing out the vcall
calculations better.

llvm-svn: 79687
2009-08-21 23:09:30 +00:00
Fariborz Jahanian 8adc973483 Patch to ir-gen copy assigning array members when synthesizing
a copy assignment operator function.

llvm-svn: 79681
2009-08-21 22:34:55 +00:00
Fariborz Jahanian 5626384384 Patch to provide ir-gen support in copying array members
when synthesizing a copy constructor. Arrays's base element
may have a trivial or non-trivial copy constructor.

llvm-svn: 79653
2009-08-21 18:30:26 +00:00
Fariborz Jahanian 7481bd88bb Array member construction in prologue of user-declared
constructors.

llvm-svn: 79640
2009-08-21 17:09:38 +00:00
Fariborz Jahanian 6c9e5a2b9e Introduce getConstantArrayElementCount API and use it in
construction/destruction of array members.

llvm-svn: 79637
2009-08-21 16:31:06 +00:00
Mike Stump a002945a20 We now support overriding base functions in vtables. WIP.
llvm-svn: 79587
2009-08-21 01:45:00 +00:00
Fariborz Jahanian 1a606ab12a Patch to ir-gen destruction of array member elements in revers order
of their construction.

llvm-svn: 79571
2009-08-20 23:02:58 +00:00
Fariborz Jahanian 9c83720d17 ir-gen patch to destruct array members. WIP.
llvm-svn: 79565
2009-08-20 20:54:15 +00:00
Mike Stump cae6178b3b Refine vbase offsets for the inductive case. Things are now starting
to come together nicely.  Still a WIP.

llvm-svn: 79521
2009-08-20 07:22:17 +00:00
Mike Stump 2220447adc Ensure we don't output repeated vbase offsets. I have a testcase for
this, but need to fixup the actual offset value before I can check it
in.  WIP.

llvm-svn: 79506
2009-08-20 02:11:48 +00:00
Fariborz Jahanian dd46eb770f Test case for my last patch plus a minor clean up.
llvm-svn: 79500
2009-08-20 01:01:06 +00:00
Fariborz Jahanian eeb0e57247 ir-gen for multi-dimensional array construction. WIP.
llvm-svn: 79497
2009-08-20 00:15:15 +00:00
Fariborz Jahanian a8fe2c26a8 Removed unneeded code for break/continue statements in
manufactured for-loop per Anders feedback (thanks).

- Fariborz

llvm-svn: 79466
2009-08-19 21:10:38 +00:00
Fariborz Jahanian 431c883287 ir-gen for constructing arrays as non-static data members. WIP.
llvm-svn: 79464
2009-08-19 20:55:16 +00:00
Daniel Dunbar 58bc48c14e Switch to SmallString::str from SmallString::c_str.
- Several FIXMEs due to non-Twinification of IRBuilder.

llvm-svn: 79455
2009-08-19 20:04:03 +00:00
Mike Stump 3bc0a3bf7d One second thought, I think I want to limit this class to just vtable
building activities.

llvm-svn: 79438
2009-08-19 18:10:47 +00:00
Mike Stump b386941208 Cleanup: fold IndirectPrimary into builder.
llvm-svn: 79423
2009-08-19 14:40:47 +00:00
Mike Stump 3b09f004db We don't want to confuse this layout with the BLayout from the builder.
llvm-svn: 79422
2009-08-19 14:06:50 +00:00
Mike Stump 984c99d190 Restore vbase offsets for classes without a primary.
llvm-svn: 79402
2009-08-19 02:53:08 +00:00
Mike Stump 583ef62149 Refine vcalls a little.
llvm-svn: 79400
2009-08-19 02:06:38 +00:00
Mike Stump 6fe6ca11da Cleanup.
llvm-svn: 79374
2009-08-18 22:04:08 +00:00
Mike Stump 07347353a0 Cleanups. Move GenerateRtti to CodeGenModule.
llvm-svn: 79372
2009-08-18 21:49:00 +00:00
Mike Stump ee81dca8c7 Move the rest of the vtable building code into the new builder.
llvm-svn: 79370
2009-08-18 21:30:21 +00:00
Mike Stump 1f18b9a301 Suck up method generation.
llvm-svn: 79367
2009-08-18 21:03:28 +00:00
Mike Stump 5cb34077ef Split out vtable bulding code into a builder.
llvm-svn: 79366
2009-08-18 20:50:28 +00:00
Fariborz Jahanian d172e91f2a Patch to 1) synthesizing non-trivial default destructor when
one is not provided by user. 2) More complete
emission of ctor prologue when it has no initializer
list or when it is synthesized.

llvm-svn: 79269
2009-08-17 19:04:50 +00:00
Anders Carlsson 49033712e4 Remove an ErrorUnsupported call.
llvm-svn: 79261
2009-08-17 18:24:57 +00:00
Anders Carlsson 81f0df9601 Improve handling of delete expressions.
llvm-svn: 79205
2009-08-16 21:13:42 +00:00
Mike Stump 22ea1f8a30 Cleanups and fixups for calculating the virtual base offsets. WIP.
llvm-svn: 79156
2009-08-16 01:46:26 +00:00
Fariborz Jahanian 0aed0225b4 Improved on ir-gen for synthesis of non-trivial default
constructor body whose class has non-static data-members which
required non-trivial construction.

llvm-svn: 79125
2009-08-15 18:55:17 +00:00
Fariborz Jahanian 42af5ba7b7 ir-gen for generation of trvial copy constructor
call.

llvm-svn: 79034
2009-08-14 20:11:43 +00:00