summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExprObjC.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add support for C++ namespace-aware typo correction, e.g., correctingDouglas Gregor2011-06-281-13/+15
| | | | | | | | | | | | | | | vector<int> to std::vector<int> Patch by Kaelyn Uhrain, with minor tweaks + PCH support from me. Fixes PR5776/<rdar://problem/8652971>. Thanks Kaelyn! llvm-svn: 134007
* Provide fix-it for '.' <-> '->' for Objective-C ivar/property access.Fariborz Jahanian2011-06-281-3/+12
| | | | | | // rdar://7811841 llvm-svn: 133970
* objc-arc: Allow unbridged cast of retainable object toFariborz Jahanian2011-06-221-1/+1
| | | | | | | integral as it is not transferring ownership.. // rdar://9619861 llvm-svn: 133622
* objc-arc: Add support for unbridged cast of Fariborz Jahanian2011-06-211-19/+39
| | | | | | | | __builtin___CFStringMakeConstantString and CF typed function calls with explicit cf_returns_retained/cf_returns_not_retained attributes. // rdar://9544832 llvm-svn: 133535
* objc-arc: CodeGen part of unbridged cast of CF types.Fariborz Jahanian2011-06-211-5/+41
| | | | | | // rdar://9474349 llvm-svn: 133525
* Make more use of llvm::StringRef in various APIs. In particular, don'tJay Foad2011-06-211-1/+1
| | | | | | use the deprecated forms of llvm::StringMap::GetOrCreateValue(). llvm-svn: 133515
* objc-arc: allow explicit unbridged casts if the source of the cast is aFariborz Jahanian2011-06-201-0/+10
| | | | | | | message sent to an objc method (or property access) // rdar://9474349 llvm-svn: 133469
* Initialize a couple of variables to shut GCC up.John McCall2011-06-171-1/+1
| | | | llvm-svn: 133246
* For the purpose of @encode'ing, accept 'void' typeFariborz Jahanian2011-06-161-1/+2
| | | | | | | (even though it is incomplete type) because gcc says so. // rdar://9622422 llvm-svn: 133208
* Automatic Reference Counting.John McCall2011-06-151-11/+398
| | | | | | | | | | 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. llvm-svn: 133103
* Implement Objective-C Related Result Type semantics.Douglas Gregor2011-06-111-13/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Related result types apply Cocoa conventions to the type of message sends and property accesses to Objective-C methods that are known to always return objects whose type is the same as the type of the receiving class (or a subclass thereof), such as +alloc and -init. This tightens up static type safety for Objective-C, so that we now diagnose mistakes like this: t.m:4:10: warning: incompatible pointer types initializing 'NSSet *' with an expression of type 'NSArray *' [-Wincompatible-pointer-types] NSSet *array = [[NSArray alloc] init]; ^ ~~~~~~~~~~~~~~~~~~~~~~ /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1: note: instance method 'init' is assumed to return an instance of its receiver type ('NSArray *') - (id)init; ^ It also means that we get decent type inference when writing code in Objective-C++0x: auto array = [[NSMutableArray alloc] initWithObjects:@"one", @"two",nil]; // ^ now infers NSMutableArray* rather than id llvm-svn: 132868
* Emit an error when trying to @encode an incomplete type.Argyrios Kyrtzidis2011-05-141-1/+7
| | | | | | | | There are APIs, e.g. [NSValue valueWithBytes:objCType:], which use the encoding to find out the size of an object pointed to by a pointer. Make things safer by making it illegal to @encode incomplete types. llvm-svn: 131364
* "note" location of forward class used as receiver ofFariborz Jahanian2011-04-231-2/+3
| | | | | | | a 'deprecated' selector in the diagnostics for the selector. // rdar://9309223 llvm-svn: 130062
* Fix a crash-on-invalid involving non-identifier names in a memberDouglas Gregor2011-04-201-0/+7
| | | | | | | access expression that appears to be a property reference. Fixes <rdar://problem/8985943>. llvm-svn: 129865
* Enforce nonnull __attribute__ on Objective-C method calls.Fariborz Jahanian2011-04-151-0/+6
| | | | | | // rdar://9287695 llvm-svn: 129615
* Add a flag to StringLiteral to keep track of whether the string is a pascal ↵Anders Carlsson2011-04-141-1/+2
| | | | | | string or not. llvm-svn: 129488
* Use ExprResult& instead of Expr *& in SemaJohn Wiegley2011-04-081-26/+39
| | | | | | | | | | | | | | | | | | | | | | | | | This patch authored by Eric Niebler. Many methods on the Sema class (e.g. ConvertPropertyForRValue) take Expr pointers as in/out parameters (Expr *&). This is especially true for the routines that apply implicit conversions to nodes in-place. This design is workable only as long as those conversions cannot fail. If they are allowed to fail, they need a way to report their failures. The typical way of doing this in clang is to use an ExprResult, which has an extra bit to signal a valid/invalid state. Returning ExprResult is de riguour elsewhere in the Sema interface. We suggest changing the Expr *& parameters in the Sema interface to ExprResult &. This increases interface consistency and maintainability. This interface change is important for work supporting MS-style C++ properties. For reasons explained here <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-February/013180.html>, seemingly trivial operations like rvalue/lvalue conversions that formerly could not fail now can. (The reason is that given the semantics of the feature, getter/setter method lookup cannot happen until the point of use, at which point it may be found that the method does not exist, or it may have the wrong type, or overload resolution may fail, or it may be inaccessible.) llvm-svn: 129143
* Fix lookup for class messages sent to qualified-classFariborz Jahanian2011-04-061-30/+44
| | | | | | | types such that protocols are seached first. Fixes // rdar://9224670 llvm-svn: 129016
* Implements property of reference types. AddingFariborz Jahanian2011-03-281-0/+1
| | | | | | | an executable test to llvm test suite. // rdar://9070460. llvm-svn: 128435
* Also 'self' in blocks need be handled specially.Fariborz Jahanian2011-03-281-1/+4
| | | | | | // rdar://9181463 llvm-svn: 128410
* 'self' is objective-c's 'self' objc pointer only inFariborz Jahanian2011-03-271-0/+3
| | | | | | an objc method. Fixes // rdar://9181463 llvm-svn: 128389
* Property setter/getter must be looked up in property type'sFariborz Jahanian2011-03-091-17/+16
| | | | | | list of protocols as well. // rdar://9078584 llvm-svn: 127367
* Lookup selector in protocol list of qualified objc typeFariborz Jahanian2011-03-091-0/+17
| | | | | | to avoid a bogus warning. // rdar:// 9072298 llvm-svn: 127355
* Warn on usage of unavailable objc 'class' inFariborz Jahanian2011-03-081-1/+1
| | | | | | varienty of cases. // rdar://9092208 llvm-svn: 127257
* Improve diagnostics on missing property decl.Fariborz Jahanian2011-02-171-1/+1
| | | | llvm-svn: 125752
* Improve diagnostics when property names an object type ofFariborz Jahanian2011-02-171-0/+16
| | | | | | a forward class. // rdar://8851803 llvm-svn: 125699
* Support for objc use of property-dot syntax as receiverFariborz Jahanian2011-02-081-0/+4
| | | | | | | in liu of a class method getter. objc++ uses a different code path and is more involved (TBD). llvm-svn: 125061
* A few more tweaks to the blocks AST representation: John McCall2011-02-071-3/+10
| | | | | | | | | | | | | | | | | - BlockDeclRefExprs always store VarDecls - BDREs no longer store copy expressions - BlockDecls now store a list of captured variables, information about how they're captured, and a copy expression if necessary With that in hand, change IR generation to use the captures data in blocks instead of walking the block independently. Additionally, optimize block layout by emitting fields in descending alignment order, with a heuristic for filling in words when alignment of the end of the block header is insufficient for the most aligned field. llvm-svn: 125005
* Capture a few implicit references to 'self'.John McCall2011-02-031-3/+37
| | | | llvm-svn: 124786
* Tweak diagnostic:Ted Kremenek2011-01-231-1/+2
| | | | | | | | | | | | | error: no super class declared in @interface for 'XXX' to be: error: 'X' cannot use 'super' because it is a root class The latter explains what the user actually did wrong. Fixes: <rdar://problem/8904409> llvm-svn: 124074
* Remove unused store to variable 'Name'. Found by clang static analyzer.Ted Kremenek2011-01-141-1/+0
| | | | llvm-svn: 123482
* Ensure that the result type of an Objective-C class message send isDouglas Gregor2011-01-111-5/+9
| | | | | | | complete. However, if it returns a reference type, don't require the type it refers to to be complete. Fixes <rdar://problem/8807070>. llvm-svn: 123214
* Complain on missing property getter method onlyFariborz Jahanian2010-12-221-4/+11
| | | | | | | if property-dot expression is decidedly an rvalue. // rdar://8155806. llvm-svn: 122430
* Warn when message is sent to receiver ofFariborz Jahanian2010-12-211-3/+5
| | | | | | | | unknown type and there is a possibility that at runtime method is resolved to a deprecated or unavailable method. Addreses // rdar://8769853 llvm-svn: 122294
* Improve diagnostics when property being looked upFariborz Jahanian2010-12-161-0/+6
| | | | | | in a forward @class object. // rdar://8774513 llvm-svn: 121933
* Keep the source location of the selector in ObjCMessageExpr.Argyrios Kyrtzidis2010-12-101-24/+27
| | | | llvm-svn: 121516
* Although we currently have explicit lvalue-to-rvalue conversions, they'reJohn McCall2010-12-041-0/+3
| | | | | | | | | | | | | | | | | | | not actually frequently used, because ImpCastExprToType only creates a node if the types differ. So explicitly create an ICE in the lvalue-to-rvalue conversion code in DefaultFunctionArrayLvalueConversion() as well as several other new places, and consistently deal with the consequences throughout the compiler. In addition, introduce a new cast kind for loading an ObjCProperty l-value, and make sure we emit those nodes whenever an ObjCProperty l-value appears that's not on the LHS of an assignment operator. This breaks a couple of rewriter tests, which I've x-failed until future development occurs on the rewriter. Ted Kremenek kindly contributed the analyzer workarounds in this patch. llvm-svn: 120890
* Diagnose when accessing property in a class method andFariborz Jahanian2010-12-031-2/+2
| | | | | | | no property accessor class method to be found, instead of crashing in IRGen. // rdar://8703553 llvm-svn: 120855
* Simplify the ASTs by consolidating ObjCImplicitGetterSetterExpr and ↵John McCall2010-12-021-8/+11
| | | | | | | | ObjCPropertyRefExpr into the latter. llvm-svn: 120643
* When unknown method is sent to a receiver ofFariborz Jahanian2010-12-011-1/+3
| | | | | | | 'Class' type, disgnostic should refere to a class method. Fixes // rdar://8592156 llvm-svn: 120517
* Add an assertion, fix a whole bunch of bugs, comment the assertionJohn McCall2010-11-181-10/+21
| | | | | | out because there are still bugs left. llvm-svn: 119722
* Calculate the value kind of an expression when it's created andJohn McCall2010-11-181-21/+36
| | | | | | | | | | | | | store it on the expression node. Also store an "object kind", which distinguishes ordinary "addressed" l-values (like variable references and pointer dereferences) and bitfield, @property, and vector-component l-values. Currently we're not using these for much, but I aim to switch pretty much everything calculating l-valueness over to them. For now they shouldn't necessarily be trusted. llvm-svn: 119685
* Introduce a null-to-pointer implicit cast kind.John McCall2010-11-131-2/+6
| | | | llvm-svn: 118966
* No really, we don't have a retain/release system for statements/expressionsJohn McCall2010-10-261-3/+1
| | | | | | anymore. llvm-svn: 117357
* This patch implements Next's IRGen for -fconstant-string-class=class-name.Fariborz Jahanian2010-10-191-1/+8
| | | | | | PR6056, //rdar: //8564463 llvm-svn: 116819
* When performing typo correction, look through the set of knownDouglas Gregor2010-10-141-5/+7
| | | | | | | | | | | | | | | | | | | | identifiers to determine good typo-correction candidates. Once we've identified those candidates, we perform name lookup on each of them and the consider the results. This optimization makes typo correction > 2x faster on a benchmark example using a single typo (NSstring) in a tiny file that includes Cocoa.h from a precompiled header, since we are deserializing far less information now during typo correction. There is a semantic change here, which is interesting. The presence of a similarly-named entity that is not visible can now affect typo correction. This is both good (you won't get weird corrections if the thing you wanted isn't in scope) and bad (you won't get good corrections if there is a similarly-named-but-completely-unrelated thing). Time will tell whether it was a good choice or not. llvm-svn: 116528
* Eliminate usage of ObjCSuperExpr used forFariborz Jahanian2010-10-141-11/+31
| | | | | | | 'super' as receiver of property or a setter/getter methods. //rdar: //8525788 llvm-svn: 116483
* Patch implements passing arrays to functions expectingFariborz Jahanian2010-09-241-1/+2
| | | | | | vla. Implements pr7827. llvm-svn: 114737
* Implement automatic bracket insertion for Objective-C class messageDouglas Gregor2010-09-161-1/+1
| | | | | | | | | | | | | | | | sends. These are far trickier than instance messages, because we typically have something like NSArray alloc] where it appears to be a declaration of a variable named "alloc" up until we see the ']' (or a ':'), and at that point we can't backtrace. So, we use a combination of syntactic and semantic disambiguation to treat this as a message send only when the type is an Objective-C type and it has the syntax of a class message send (which would otherwise be ill-formed). llvm-svn: 114057
* Handle bracket insertion for Objective-C class messages in a veryDouglas Gregor2010-09-151-6/+6
| | | | | | | | | | | narrow, almost useless case where we're inside a parenthesized expression, e.g., (NSArray alloc]) The solution to the general case still eludes me. llvm-svn: 114039
OpenPOWER on IntegriCloud