aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenObjC
AgeCommit message (Collapse)Author
2011-07-27The lock operand to an @synchronized statement is also John McCall
supposed to be a full-expression; make it so. In ARC, make sure we retain the lock for the entire protected block. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136271 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-27Clean up the analysis of the collection operand to ObjCJohn McCall
for-in statements; specifically, make sure to close over any temporaries or cleanups it might require. In ARC, this has implications for the lifetime of the collection, so emit it with a retain and release it upon exit from the loop. rdar://problem/9817306 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136204 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-22Document the existing objc_precise_lifetime attribute.John McCall
Introduce and document a new objc_returns_inner_pointer attribute, and consume it by performing a retain+autorelease on message receivers when they're not immediately loaded from an object with precise lifetime. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135764 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-22In ARC, non-atomic getters do not need to retain and autoreleaseJohn McCall
their loaded values, although it still worth doing this for __weak properties to get the autoreleased-return-value optimization. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135747 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-22In Objective-C, pull arbitrary attributes from overriddenJohn McCall
methods, including indirectly overridden methods like those declared in protocols and categories. There are mismatches that we would like to diagnose but aren't yet, but this is fine for now. I looked at approaches that avoided doing this lookup unless we needed it, but the infer-related-result-type checks were doing it anyway, so I left it with the same fast-path check for no previous declartions of that selector. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135743 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-20Removes a comment.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135640 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-20objc-arc: Fixes a crash @throw'ing an objc message.Fariborz Jahanian
// pr10411 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135638 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-13Don't crash if defining -dealloc in a category.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135054 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-13Okay, that rule about zero-length arrays applies to destroyingJohn McCall
them, too. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135038 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-12In ARC mode, consider Objective-C lifetime types (object pointers andDouglas Gregor
block pointers) that don't have any qualification to be POD types. We were previously considering them to be non-POD types, because this was convenient in C++ for is_pod-like traits. However, we now end up inferring lifetime in such cases (template arguments infer __strong), so it is not necessary. Moreover, we want rvalues of object type (which have their lifetime stripped) to be PODs to allow, e.g., va_arg(arglist, id) to function properly. Fixes <rdar://problem/9758798>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134993 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-12Switch field destruction over to use the new destroyer-based APIJohn McCall
and kill a lot of redundant code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134988 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-10keep track of whether being in a RS_StructPointer stateChris Lattner
caused us to skip layout out a function accurately. If so, flush the type cache for both the function and struct case to ensure that any pointers to the functions get recomputed. This is overconservative, but with this patch clang can build itself again. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134863 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-10Fix the clang bootstrap and Jay's testcase from llvm-dev by being completelyChris Lattner
conservative when converting a functiontype to IR when in a "pointer within a struct" context. This has the unfortunate sideeffect of compiling all function pointers inside of structs into "{}*" which, though correct, is ugly. This has the positive side effect of being correct, and it is pretty straight-forward to improve on this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134861 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-09clang side to match the LLVM IR type system rewrite patch.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134831 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-09A number of array-related IR-gen cleanups.John McCall
- Emit default-initialization of arrays that were partially initialized with initializer lists with a loop, rather than emitting the default initializer N times; - support destroying VLAs of non-trivial type, although this is not yet exposed to users; and - support the partial destruction of arrays initialized with initializer lists when an initializer throws an exception. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134784 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-07In ARC, reclaim all return values of retainable type, not just thoseJohn McCall
where we have an immediate need of a retained value. As an exception, don't do this when the call is made as the immediate operand of a __bridge retain. This is more in the way of a workaround than an actual guarantee, so it's acceptable to be brittle here. rdar://problem/9504800 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134605 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-06Call objc_terminate() instead of abort() when a cleanup throws anJohn McCall
exception in Objective-C; in Objective-C++ we still use std::terminate(). This is only available in very recent runtimes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134456 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-06Change the driver's logic about Objective-C runtimes: abstract out aJohn McCall
structure to hold inferred information, then propagate each invididual bit down to -cc1. Separate the bits of "supports weak" and "has a native ARC runtime"; make the latter a CodeGenOption. The tool chain is still driving this decision, because it's the place that has the required deployment target information on Darwin, but at least it's better-factored now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134453 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-29objc-arc: fix a IRGen crash when checking forFariborz Jahanian
accessibility of an initializer which is a compound statement. // rdar://9694706 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134091 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-24Test case for r133840, neglectfully uncommitted.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133841 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-24Change the IR-generation of VLAs so that we capture bounds,John McCall
not sizes; so that we use well-typed allocas; and so that we properly recurse through the full set of variably-modified types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133827 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-22Emit @finally blocks completely lazily instead of forcing theirJohn McCall
existence by always threading an edge from the catchall. Not doing this was previously causing a crash in the very extreme case where neither the normal cleanup nor the EH catchall was actually reachable: we would delete the catchall entry block, which would cause us to delete the entry block of the finally cleanup as well because the cleanup logic would merge the blocks, which in turn triggered an assert because later blocks in the finally would still be using values from the entry. Laziness turns out to be the most elegant solution to the problem. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133601 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-21objc-arc: Add support for unbridged cast of Fariborz Jahanian
__builtin___CFStringMakeConstantString and CF typed function calls with explicit cf_returns_retained/cf_returns_not_retained attributes. // rdar://9544832 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133535 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-21objc-arc: CodeGen part of unbridged cast of CF types.Fariborz Jahanian
// rdar://9474349 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133525 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-17Objective-C fast enumeration loop variables are not retained in ARC, butJohn McCall
they should still be officially __strong for the purposes of errors, block capture, etc. Make a new bit on variables, isARCPseudoStrong(), and set this for 'self' and these enumeration-loop variables. Change the code that was looking for the old patterns to look for this bit, and change IR generation to find this bit and treat the resulting variable as __unsafe_unretained for the purposes of init/destroy in the two places it can come up. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133243 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-16For the purpose of @encode'ing, accept 'void' typeFariborz Jahanian
(even though it is incomplete type) because gcc says so. // rdar://9622422 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133208 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Automatic Reference Counting.John McCall
Language-design credit goes to a lot of people, but I particularly want to single out Blaine Garst and Patrick Beard for their contributions. Compiler implementation credit goes to Argyrios, Doug, Fariborz, and myself, in no particular order. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133103 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Remote this unreliable test case because it did not do its job.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132948 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-04These tests require particular registered targets. Declared as such.Galina Kistanova
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132623 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-03These tests require particular registered targets. Declared as such.Galina Kistanova
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132600 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-31Fix test, check for stable strings in the output.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132370 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-31List objective-c ineterfaces as public types in dwarf debug info output.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132361 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-28Convert Clang over to resuming from landing pads with llvm.eh.resume.John McCall
It's quite likely that this will explode, but I need to know how. :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132269 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-27Back out r132209; it's breaking nightly tests.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132219 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-27Implement a new, much improved version of the cleanup hack. We just needJohn McCall
to be careful to emit landing pads that are always prepared to handle a cleanup path. This is correct mostly because of the fix to the LLVM inliner, r132200. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132209 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-27Objective-C doesn't consider the use of incomplete types as methodDouglas Gregor
parameter types to be ill-formed. However, it relies on the completeness of method parameter types when producing metadata, e.g., for a protocol, leading IR generating to crash in such cases. Since there's no real way to tighten down the semantics of Objective-C here without breaking existing code, do something safe but lame: suppress the generation of metadata when this happens. Fixes <rdar://problem/9123036>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132171 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-24Test case for r131940.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131941 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-19Fix location of setter/getter synthesized for a property.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131701 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-17Patch to fix IR-gen crash generating structure ABI which implementsFariborz Jahanian
user specified string class via -fconstant-string-class option. pr9914. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131496 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-17Reapply the commits that r131401 reverted and add a fix for PR9927.Argyrios Kyrtzidis
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131446 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-16Revert 131377, 131369 and 131365.Rafael Espindola
131365 caused PR9927. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131401 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-15Fix generation of obj-c @encoding for members with zero size.Argyrios Kyrtzidis
Also follow gcc in that arrays of elements with zero size are encoded as arrays with zero elements. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131369 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-14Only perform the null-initialization of an aggregate result of a messageJohn McCall
send if the receiver is null. Normally it's not worthwhile to check this, but avoiding the null-initialization is nice, and this also avoids nasty problems where the null-initialization is visible within the call because we use an aliased result buffer. rdar://problem/9402992 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131366 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-14Create proper Objective-C @encoding for C++ classes; fixes rdar://9357400.Argyrios Kyrtzidis
Go through and expand the members of bases into the encoding string (and encode the VTable as well). Unlike gcc which expands virtual bases as many times as they appear in the hierarchy, clang will only expand them once at the end, to reflect the actual layout. Note that there doesn't seem to be a way to indicate in the encoding that packing/alignment of members is different that normal, in which case the encoding will be out-of-sync with the real layout. If the runtime switches to just consider the size of types without taking into account alignment, we could easily make padding explicit in the encoding (e.g. using arrays of chars). The encoding strings would be longer then though. Also encode a flexible array member as array of 0 size, like gcc, not as a pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131365 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-12Doug convinced me that DW_AT_APPLE_objc_complete_type is more appropriate name.Devang Patel
s/DW_AT_APPLE_objc_class_extension/DW_AT_APPLE_objc_complete_type/g git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131245 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-12Do not add AT_APPLE_objc_class_extension attribute if @implementation is not ↵Devang Patel
seen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131242 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-12Use DW_AT_APPLE_objc_class_extension attribute to identify interfaces that ↵Devang Patel
represent class extension. Radar 9423077. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131239 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-04Pack ivar offsets together.Bill Wendling
Ivar offsets for synthesized ivars are wrong, which could end up with a large number of dirty pages because of ivar fixups at runtime. When we pack all of the synthesized ivars into the same section, it limits the number of dirty pages created. Place them in the "__DATA,__objc_ivar" section. <rdar://problem/9374905> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130870 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-03Silence warnings.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130785 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-02Emit debug info for __destroy_helper_block_ and __copy_helper_block.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130719 91177308-0d34-0410-b5e6-96231b3b80d8