Commit Graph

176 Commits

Author SHA1 Message Date
Rafael Espindola c50c27cca8 the big refactoring bits of PR3782.
This introduces FunctionType::ExtInfo to hold the calling convention and the
noreturn attribute. The next patch will extend it to include the regparm
attribute and fix the bug.

llvm-svn: 99920
2010-03-30 20:24:48 +00:00
David Chisnall 12ae54d42f Fixed synthesizing properties declared in properties (GNU runtime).
llvm-svn: 99077
2010-03-20 19:53:29 +00:00
David Chisnall 2bfc50bf68 Fixed copy-and-paste error causing categories to contain the protocols declared on the class, not the protocols declared on the category.
llvm-svn: 98455
2010-03-13 22:20:45 +00:00
David Chisnall 36c6320d78 Don't generate method metadata for @dynamic properties. Fixes PR6354.
llvm-svn: 97199
2010-02-26 01:11:38 +00:00
John McCall 2da83a3a38 Use the power of types to track down another canonicalization bug in
the ABI-computation interface.  Fixes <rdar://problem/7691046>.

llvm-svn: 97197
2010-02-26 00:48:12 +00:00
Benjamin Kramer f3a499ad88 StringRefize two random methods, remove a dead variable and a weird constructor call.
This maybe fixes some of the errors GCC 4.5 gives on this code.

llvm-svn: 95684
2010-02-09 19:31:24 +00:00
John McCall ab26cfa58d Standardize the parsing of function type attributes in a way that
follows (as conservatively as possible) gcc's current behavior:  attributes
written on return types that don't apply there are applied to the function
instead, etc.  Only parse CC attributes as type attributes, not as decl attributes;
don't accepet noreturn as a decl attribute on ValueDecls, either (it still
needs to apply to other decls, like blocks).  Consistently consume CC/noreturn
information throughout codegen;  enforce this by removing their default values
in CodeGenTypes::getFunctionInfo().

llvm-svn: 95436
2010-02-05 21:31:56 +00:00
Daniel Dunbar 45858d2d59 Revert "Numerous changes to selector handling:", this breaks a whole bunch of
working code, for no apparent reason.

llvm-svn: 95244
2010-02-03 20:11:42 +00:00
David Chisnall 5bb4efdf3c First pass at adding GC support for GNU runtime. GC ivar maps not yet constructed, GC flag not set.
Please don't try using this yet - the runtime support is still very immature and your code will almost certainly crash if you do.  

llvm-svn: 95222
2010-02-03 15:59:02 +00:00
David Chisnall 92b762e256 Numerous changes to selector handling:
- Don't use GlobalAliases with non-0 GEPs (GNU runtime) - this was unsupported and LLVM will be generating errors if you do it soon.  This also simplifies the code generated by the GNU runtime a bit.  

- Make GetSelector() return a constant (GNU runtime), not a load of a store of a constant.

- Recognise @selector() expressions as valid static initialisers (as GCC does).

- Add methods to GCObjCRuntime to emit selectors as constants (needed for using @selector() expressions as constants.  These need implementing for the Mac runtimes - I couldn't figure out how to do this, they seem to require a load.

- Store an ObjCMethodDecl in an ObjCSelectorExpr so that we can get at the type information for the selector.  This is needed for generating typed selectors from @selector() expressions (as GCC does).  Ideally, this information should be stored in the Selector, but that would be an invasive change.  We should eventually add checks for common uses of @selector() expressions.  Possibly adding an attribute that can be applied to method args providing the types of a selector so, for example, you'd do something like this:

- (id)performSelector: __attribute__((selector_types(id, SEL, id)))(SEL)
           withObject: (id)object;

Then, any @selector() expressions passed to the method will be check to ensure that it conforms to this signature.  We do this at run time on the GNU runtime already, but it would be nice to do it at compile time on all runtimes.

- Made @selector() expressions emit type info if available and the runtime supports it.

Someone more familiar with the Mac runtime needs to implement the GetConstantSelector() function in CGObjCMac.  This currently just assert()s.

llvm-svn: 95189
2010-02-03 02:09:30 +00:00
David Chisnall 358e751a7b Unique ObjC strings (GNU Runtime); fix for PR6142. Note: Doing this in the runtime-specific code is a bit ugly. It would be a good idea to hoist all of the string / protocol uniqueing code up into CGObjCRuntime or CodeGenModule and only handle emitting the original versions in the runtime-specific code.
llvm-svn: 94676
2010-01-27 12:49:23 +00:00
David Chisnall 481e3a87fe Created __builtin___NSStringMakeConstantString() builtin, which generates constant Objective-C strings.
llvm-svn: 94274
2010-01-23 02:40:42 +00:00
David Chisnall 035ead209f Made ObjC method name mangling match GCC (which does it in a stupid and broken way that can give conflicts on method names containing underscores, but is needed for gdb to work because gdb does not know how to read ObjC class tables and relies on the mangling).
llvm-svn: 93427
2010-01-14 14:08:19 +00:00
David Chisnall c8fc573ea0 Fix type mismatch on 64-bit platforms (GNU ObjC).
llvm-svn: 93169
2010-01-11 19:02:35 +00:00
David Chisnall df34917a38 Export a public symbol for classes with the GNU runtime.
llvm-svn: 92973
2010-01-08 00:14:31 +00:00
David Chisnall 9a2073c035 Fix for PR5691
llvm-svn: 92846
2010-01-06 18:02:59 +00:00
Anders Carlsson 61a401caec Pass ReturnValueSlot to EmitCall. No functionality change yet.
llvm-svn: 92138
2009-12-24 19:25:24 +00:00
David Chisnall 3a509cd8cc Fix for bug 5691.
This fixes throwing exceptions inside @catch blocks nested inside outer @try blocks and also fixes jumping from an inner @finally to an outer @finally (via any relevant @catch blocks).

The code exhibiting this bug was based on code from CGObjCMac.  I believe that this bug may still be present on the Mac runtimes, although the test case in the bug contains a few GNUisms and won't compile without some minor tweaks with Apple's libobjc.

llvm-svn: 92117
2009-12-24 02:26:34 +00:00
Daniel Dunbar 75fa84ebc6 Change LangOptions::ObjCConstantStringClass to an std::string to avoid worrying about the lifetime.
llvm-svn: 90052
2009-11-29 02:38:47 +00:00
David Chisnall bc8bdea183 Fixed crash when using undefined protocols (GNU runtime).
llvm-svn: 89457
2009-11-20 14:50:59 +00:00
David Chisnall cb1b7bf79d Fixed bug where ivar offsets were being initialized as 0 with the fragile GNU ABI.
llvm-svn: 89133
2009-11-17 19:32:15 +00:00
David Chisnall b3b44ce433 Fixed two minor differences between clang and GCC-generated runtime structures for the GNU runtime.
llvm-svn: 88937
2009-11-16 19:05:54 +00:00
Duncan Sands cef56992b0 There is now only one version of eh.selector and eh.typeid.for.
Fix the clang build.

llvm-svn: 84107
2009-10-14 16:13:30 +00:00
Benjamin Kramer abd5b90e4c Simplify pointer creation with the new Type::getInt*Ptr methods.
llvm-svn: 83964
2009-10-13 10:07:13 +00:00
Fariborz Jahanian 7a95d72b10 Patch fixes a code gen. bug in generation of objc_assign_ivar
(objc GC's API).

llvm-svn: 82724
2009-09-24 22:25:38 +00:00
John McCall 9dd450bb78 Change all the Type::getAsFoo() methods to specializations of Type::getAs().
Several of the existing methods were identical to their respective
specializations, and so have been removed entirely.  Several more 'leaf'
optimizations were introduced.

The getAsFoo() methods which imposed extra conditions, like
getAsObjCInterfacePointerType(), have been left in place.

llvm-svn: 82501
2009-09-21 23:43:11 +00:00
Nick Lewycky 41eaf0ac57 Make clang stop relying on ConstantStruct::get's default value for isPacked
which will be going away (ie. it's becoming a required parameter) later today.

llvm-svn: 82323
2009-09-19 20:00:52 +00:00
Daniel Dunbar df0e62d0a1 IRgen/ObjC: Correctly construct the function info for variadic message sends.
This fixes some bad -O0 codegen and the unnecessary clearing of al on entry to objc_msgSend for most message sends.

<rdar://problem/7102824> [irgen] unnecessary xorb on calls to objc_msgSend on x86_64

llvm-svn: 82118
2009-09-17 04:01:40 +00:00
Daniel Dunbar aff9fcaa02 IRgen/ObjC: Make the target method decl available to GenerateMessageSendSuper.
llvm-svn: 82117
2009-09-17 04:01:22 +00:00
David Chisnall 2997982ab4 Small fix to stop CGObjCGNU emitting symbols that break some versions of gas.
llvm-svn: 81778
2009-09-14 19:04:10 +00:00
Daniel Dunbar c0f8eef710 Fix use of uninitialized, David please check.
llvm-svn: 81570
2009-09-11 20:56:53 +00:00
Fariborz Jahanian 2cde203392 Non fragile ABI for GNU runtime. Patch bu David Chisnall.
llvm-svn: 81462
2009-09-10 21:48:21 +00:00
Mike Stump 11289f4280 Remove tabs, and whitespace cleanups.
llvm-svn: 81346
2009-09-09 15:08:12 +00:00
Fariborz Jahanian 879d726608 Re-implemented generation of objc_memmove_collectable
API for copying GC'able aggregates (Next runtime only).

llvm-svn: 80607
2009-08-31 19:33:16 +00:00
David Chisnall 5778fce141 Updated GNU runtime non-fragile ABI.
Added -fconstant-string-class= option.
Added __has_feature() test for non-fragile ABI.

llvm-svn: 80591
2009-08-31 16:41:57 +00:00
David Chisnall 9f57c29053 Initial patch to support definitions of id and Class from headers in Objective-C code.
This currently breaks test/SemaObjC/id-isa-ref.m and issues some spurious warnings when you attempt to assign a struct objc_class* value to a Class variable.  The test case probably should fail as it's written, because without the definition of Class the compiler should not assume struct objc_class* is a valid receiver type, but it's left broken because it would be nice if we could get that passing too for the special case of isa.

Approved by snaroff.

llvm-svn: 79248
2009-08-17 16:35:33 +00:00
Owen Anderson c36edfede5 Update for LLVM API change.
llvm-svn: 78957
2009-08-13 23:27:53 +00:00
Owen Anderson 41a750271b Update for LLVM API change.
llvm-svn: 78946
2009-08-13 21:57:51 +00:00
Owen Anderson 758428f4e3 Update for LLVM API change.
llvm-svn: 78259
2009-08-05 23:18:46 +00:00
Chris Lattner c58e5699be cgobjcgnu was making invalid common globals.
llvm-svn: 78161
2009-08-05 05:25:18 +00:00
Mike Stump dd93a19ac6 Fixup spacing and 80-col violations.
llvm-svn: 77731
2009-07-31 21:31:32 +00:00
Owen Anderson 0b75f23b94 Update for LLVM API change.
llvm-svn: 77722
2009-07-31 20:28:54 +00:00
Owen Anderson 7ec07a573c Update for LLVM API changes.
llvm-svn: 77638
2009-07-30 23:11:26 +00:00
Owen Anderson 9793f0e4d7 Update for LLVM API change.
llvm-svn: 77514
2009-07-29 22:16:19 +00:00
Owen Anderson ade90fd1ba Update for LLVM API change.
llvm-svn: 77492
2009-07-29 18:54:39 +00:00
Owen Anderson 47034e1733 Update for LLVM API change.
llvm-svn: 77349
2009-07-28 18:33:04 +00:00
Owen Anderson 0e0189d64d Update for LLVM API change.
llvm-svn: 77267
2009-07-27 22:29:56 +00:00
Owen Anderson b7a2fe6f81 Update for LLVM API change.
llvm-svn: 77012
2009-07-24 23:12:58 +00:00
Daniel Dunbar c46a079957 Fix declaration of obc_enumerationMutation function, for GNU runtime.
llvm-svn: 76959
2009-07-24 07:40:24 +00:00
Anders Carlsson 15b73deeea Revert r75641.
llvm-svn: 76327
2009-07-18 19:43:29 +00:00