aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenObjCXX
AgeCommit message (Collapse)Author
2013-05-03Correctly emit certain implicit references to 'self' even withinJohn McCall
a lambda. Bug #1 is that CGF's CurFuncDecl was "stuck" at lambda invocation functions. Fix that by generally improving getNonClosureContext to look through lambdas and captured statements but only report code contexts, which is generally what's wanted. Audit uses of CurFuncDecl and getNonClosureAncestor for correctness. Bug #2 is that lambdas weren't specially mapping 'self' when inside an ObjC method. Fix that by removing the requirement for that and using the normal EmitDeclRefLValue path in LoadObjCSelf. rdar://13800041 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181000 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-11Drop ObjCIndirectCopyRestoreExprs during template instantiation.John McCall
It's a kind of implicit conversion, which we generally drop, but more importantly it's got very specific placement requirements. rdar://13617051 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179254 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-10Don't crash when mangling types defined in ObjC class extensions.John McCall
The original test case here was mangling a type name for TBAA, but we can provoke this in C++11 easily enough. rdar://13434937 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179153 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-03In ObjC++ on legacy runtimes, push an EH cleanup as well asJohn McCall
a normal cleanup when entering a @try or @synchronized to ensure that we clean that up if an exception is triggered. Apparently GCC did this, so it's hard to argue that we shouldn't do at least as much. rdar://12364847 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178599 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-23Under ARC, when we're passing the address of a strong variableJohn McCall
to an out-parameter using the indirect-writeback conversion, and we copied the current value of the variable to the temporary, make sure that we register an intrinsic use of that value with the optimizer so that the value won't get released until we have a chance to retain it. rdar://13195034 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177813 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-08Sema: Preserve attributes on parameters in instantiated function templates.Jordan Rose
This was causing correctness issues for ARC and the static analyzer when a function template has "consumed" Objective-C object parameters (i.e. parameters that will be released by the function before returning). The fix is threefold: (1) Actually copy over the attributes from old ParmVarDecls to new ones. (2) Have Sema::BuildFunctionType only work for building FunctionProtoTypes, which it was doing anyway. This allows us to pass an ExtProtoInfo instead of a plain ExtInfo and several flags. (3) Drop param attributes as part of StripImplicitInstantiation, which is used when an implicit instantiation is followed by an explicit one. <rdar://problem/12685622> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176728 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-04Correction to r176432: the bug actually fixed was <rdar://13025708>.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176433 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-04Centralize and refine the __unknown_anytype argument rulesJohn McCall
and be sure to apply them whether or not the debugger gave us a method declaration. rdar://12565338 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176432 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-01Perform the receiver-expression transformations regardless ofJohn McCall
whether we already have a method. Fixes a bug where we were failing to properly contextually convert a message receiver during template instantiation. As a side-effect, we now actually perform correct method lookup after adjusting a message-send to integral or non-ObjC pointer types (legal outside of ARC). rdar://13305374 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176339 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-27Reapply r176133 with testcase fixes.Bill Wendling
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176145 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-26Unify clang/llvm attributes for asan/tsan/msan (Clang part)Kostya Serebryany
These are two related changes (one in llvm, one in clang). LLVM: - rename address_safety => sanitize_address (the enum value is the same, so we preserve binary compatibility with old bitcode) - rename thread_safety => sanitize_thread - rename no_uninitialized_checks -> sanitize_memory CLANG: - add __attribute__((no_sanitize_address)) as a synonym for __attribute__((no_address_safety_analysis)) - add __attribute__((no_sanitize_thread)) - add __attribute__((no_sanitize_memory)) for S in address thread memory If -fsanitize=S is present and __attribute__((no_sanitize_S)) is not set llvm attribute sanitize_S git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176076 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-25Revert "Add more attributes from the command line to functions."Anna Zaks
This reverts commit 176009. The commit is a likely cause of several buildbot failures. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176044 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-25Add more attributes from the command line to functions.Bill Wendling
This is an ongoing process. Any command line option which a back-end cares about should be added here. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176009 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-22Update to use references to attribute groups instead of listing the ↵Bill Wendling
attributes on the call/invoke instructions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175878 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-21objective-C arc IR-gen. Retaining of strongFariborz Jahanian
arguments in function prologue is done with objc_StoreStrong to pair it with similar objc_StoreStrong for release in function epilogue. This is done with -O0 only. // rdar://13145317 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175698 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-20Attempt to clean up tests for non-X86 platforms.Bill Wendling
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175652 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-20Modify the tests to use attribute group references instead of listing theBill Wendling
function attributes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175606 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-15Add the 'target-cpu' and 'target-features' attributes to functions.Bill Wendling
The back-end will use these values to reconfigure code generation for different features. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175308 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-06Added test for r174461 that checks that the desired behavior also occurs in ↵Michael Gottesman
ObjC++ alongside ObjC. \end paranoia. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174471 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-01Destroy arrays and ARC fields when throwing out of ctors.John McCall
Previously we were only handling non-array fields of class type. Testcases derived from a patch by WenHan Gu. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174146 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-22Use the correct field to copy/dispose a __block variable.John McCall
We were previously hard-coding a particular field index. This was fine before (because we were obviously guaranteed the presence of a copy/dispose member) except for (1) alignment padding and (2) future extensions adding extra members to the header, such as the extended-layout pointer. Note that we only introduce the extended-layout pointer in the presence of structs. (We also seem to be introducing it even in the presence of an all-non-object layout, but that's a different potential issue.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173122 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-17objC block layout: Patch reorders block layout to Fariborz Jahanian
produce more inline layout metadata. // rdar://12752901 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172683 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-10Declare +new instead of -new in test.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172126 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-10objectiveC++: When throwing c++ exception of Fariborz Jahanian
an objectiveC object, use objc_exception_throw to raise the exception. // rdar://12605907 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172091 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-17Reapply r170344, this time without forgetting to commit the header changes.David Chisnall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170354 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-17Revert "Added support for new property helpers (GNUstep runtime)."Benjamin Kramer
This reverts commit r170344. Doesn't even compile. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170351 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-17Added support for new property helpers (GNUstep runtime).David Chisnall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170344 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-03Fix PR14474: don't emit debug info for interface types in -gline-tables-only ↵Alexey Samsonov
mode. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169138 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-27objective-C arc: load of a __weak object happens via call toFariborz Jahanian
objc_loadWeak. This retains and autorelease the weakly-refereced object. This hidden autorelease sometimes makes __weak variable alive even after the weak reference is erased, because the object is still referenced by an autorelease pool. This patch overcomes this behavior by loading a weak object via call to objc_loadWeakRetained(), followng it by objc_release at appropriate place, thereby removing the hidden autorelease. // rdar://10849570 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168740 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-13Don't try to save the assigned value in a Objective-C property assignmentEli Friedman
if the type of the value is a non-trivial class type. Fixes PR14318. (There's a minor ObjC++ language change here: given that we can't save the value, the type of the assignment expression is void in such cases.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167884 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-06Minor fix to ObjC layout bitmap metadata. Found while I was trying toEli Friedman
refactor the code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167436 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-05Use the individual -fsanitize=<...> arguments to control which of the UBSanRichard Smith
checks to enable. Remove frontend support for -fcatch-undefined-behavior, -faddress-sanitizer and -fthread-sanitizer now that they don't do anything. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167413 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-26objective-C IRGen: for @implementation nested in Fariborz Jahanian
extern "C", its method definitions must be IRGen'ed before meta-data for class is generated. Otherwise, IRGen crashes (to say the least). // rdar://12581683 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166809 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-17At -O0, prefer objc_storeStrong with a null new value to theJohn McCall
combination of a load+objc_release; this is generally better for tools that try to track why values are retained and released. Also use objc_storeStrong when copying a block (again, only at -O0), which requires us to do a preliminary store of null in order to compensate for objc_storeStrong's assign semantics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166085 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-18Remove invalid double colon in test case was previously ignored by FileCheck.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164167 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21When performing a trivial copy of a C++ type, we must be careful notJohn McCall
to overwrite objects that might have been allocated into the type's tail padding. This patch is missing some potential optimizations where the destination is provably a complete object, but it's necessary for correctness. Patch by Jonathan Sauer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162254 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-07Teach Expr::HasSideEffects about all the Expr types, and fix a bug where itRichard Smith
was mistakenly classifying dynamic_casts which might throw as having no side effects. Switch it from a visitor to a switch, so it is kept up-to-date as future Expr nodes are added. Move it from ExprConstant.cpp to Expr.cpp, since it's not really related to constant expression evaluation. Since we use HasSideEffect to determine whether to emit an unused global with internal linkage, this has the effect of suppressing emission of globals in some cases. I've left many of the Objective-C cases conservatively assuming that the expression has side-effects. I'll leave it to someone with better knowledge of Objective-C than mine to improve them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161388 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-31Don't crash *or* insert a bogus autorelease when emitting aJohn McCall
this-adjustment thunk in ARC++. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161014 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-11Don't try to do RVO on block variables that refer to an enclosing local.Nico Weber
Fixes PR13314, clang crashing on blocks refering to an enclosing local when the enclosing function returns void. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160089 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-26block literal irgen: several improvements on naming blockFariborz Jahanian
literal helper functions. All helper functions (global and locals) use block_invoke as their prefix. Local literal helper names are prefixed by their enclosing mangled function names. Blocks in non-local initializers (e.g. a global variable or a C++11 field) are prefixed by their mangled variable name. The descriminator number added to end of the name starts off with blank (for first block) and _<N> (for the N+2-th block). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159206 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-20Restructure how the driver communicates information about theJohn McCall
target Objective-C runtime down to the frontend: break this down into a single target runtime kind and version, and compute all the relevant information from that. This makes it relatively painless to add support for new runtimes to the compiler. Make the new -cc1 flag, -fobjc-runtime=blah-x.y.z, available at the driver level as a better and more general alternative to -fgnu-runtime and -fnext-runtime. This new concept of an Objective-C runtime also encompasses what we were previously separating out as the "Objective-C ABI", so fragile vs. non-fragile runtimes are now really modelled as different kinds of runtime, paving the way for better overall differentiation. As a sort of special case, continue to accept the -cc1 flag -fobjc-runtime-has-weak, as a sop to PLCompatibilityWeak. I won't go so far as to say "no functionality change", even ignoring the new driver flag, but subtle changes in driver semantics are almost certainly not intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158793 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-27When @encode'ing a C++ class that has empty base classes, we can endDouglas Gregor
up with gaps when the class inherits from the same empty base class more than once. Fixes <rdar://problem/11324167>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155738 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-06Fix a Sema invariant bug that I recently introduced involvingJohn McCall
the template instantiation of statement-expressions. I think it was jyasskin who had a crashing testcase in this area; hopefully this fixes it and he can find his testcase and check it in. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154189 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-06Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,Ted Kremenek
NSNumber, and boolean literals. This includes both Sema and Codegen support. Included is also support for new Objective-C container subscripting. My apologies for the large patch. It was very difficult to break apart. The patch introduces changes to the driver as well to cause clang to link in additional runtime support when needed to support the new language features. Docs are forthcoming to document the implementation and behavior of these features. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152137 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-01Make CodeGenFunction::EmitBlockCopyAndAutorelease actually do what its name ↵Eli Friedman
says. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151853 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-01Implement "optimization" for lambda-to-block conversion which inlines the ↵Eli Friedman
generated block literal for lambdas which are immediately converted to block pointer type. This simplifies the AST, avoids an unnecessary copy of the lambda and makes it much easier to avoid copying the result onto the heap. Note that this transformation has a substantial semantic effect outside of ARC: it gives the converted lambda lifetime semantics similar to a block literal. With ARC, the effect is much less obvious because the lifetime of blocks is already managed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151797 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-28Basic coverage test for conversion-to-block-pointer for lambda expressions.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151616 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-21No need to go to object file, -emit-llvm is sufficient to see if clangEric Christopher
itself crashes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151095 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-21Redirect the output to /dev/null. This prevents the output from clutteringRichard Trieu
up the build enviroment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151087 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-21Add a test case for r150976.Nico Weber
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151027 91177308-0d34-0410-b5e6-96231b3b80d8