| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
// rdar://7811841
llvm-svn: 133970
|
|
|
|
|
|
|
| |
integral as it is not transferring ownership..
// rdar://9619861
llvm-svn: 133622
|
|
|
|
|
|
|
|
| |
__builtin___CFStringMakeConstantString and CF typed function calls
with explicit cf_returns_retained/cf_returns_not_retained attributes.
// rdar://9544832
llvm-svn: 133535
|
|
|
|
|
|
| |
// rdar://9474349
llvm-svn: 133525
|
|
|
|
|
|
| |
use the deprecated forms of llvm::StringMap::GetOrCreateValue().
llvm-svn: 133515
|
|
|
|
|
|
|
| |
message sent to an objc method (or property access)
// rdar://9474349
llvm-svn: 133469
|
|
|
|
| |
llvm-svn: 133246
|
|
|
|
|
|
|
| |
(even though it is incomplete type) because gcc
says so. // rdar://9622422
llvm-svn: 133208
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
a 'deprecated' selector in the diagnostics for the
selector. // rdar://9309223
llvm-svn: 130062
|
|
|
|
|
|
|
| |
access expression that appears to be a property reference. Fixes
<rdar://problem/8985943>.
llvm-svn: 129865
|
|
|
|
|
|
| |
// rdar://9287695
llvm-svn: 129615
|
|
|
|
|
|
| |
string or not.
llvm-svn: 129488
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
types such that protocols are seached first. Fixes
// rdar://9224670
llvm-svn: 129016
|
|
|
|
|
|
|
| |
an executable test to llvm test suite.
// rdar://9070460.
llvm-svn: 128435
|
|
|
|
|
|
| |
// rdar://9181463
llvm-svn: 128410
|
|
|
|
|
|
| |
an objc method. Fixes // rdar://9181463
llvm-svn: 128389
|
|
|
|
|
|
| |
list of protocols as well. // rdar://9078584
llvm-svn: 127367
|
|
|
|
|
|
| |
to avoid a bogus warning. // rdar:// 9072298
llvm-svn: 127355
|
|
|
|
|
|
| |
varienty of cases. // rdar://9092208
llvm-svn: 127257
|
|
|
|
| |
llvm-svn: 125752
|
|
|
|
|
|
| |
a forward class. // rdar://8851803
llvm-svn: 125699
|
|
|
|
|
|
|
| |
in liu of a class method getter. objc++ uses a different
code path and is more involved (TBD).
llvm-svn: 125061
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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
|
|
|
|
| |
llvm-svn: 124786
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 123482
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
if property-dot expression is decidedly
an rvalue. // rdar://8155806.
llvm-svn: 122430
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
in a forward @class object. // rdar://8774513
llvm-svn: 121933
|
|
|
|
| |
llvm-svn: 121516
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
no property accessor class method to be found, instead of
crashing in IRGen. // rdar://8703553
llvm-svn: 120855
|
|
|
|
|
|
|
|
| |
ObjCPropertyRefExpr
into the latter.
llvm-svn: 120643
|
|
|
|
|
|
|
| |
'Class' type, disgnostic should refere to a
class method. Fixes // rdar://8592156
llvm-svn: 120517
|
|
|
|
|
|
| |
out because there are still bugs left.
llvm-svn: 119722
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 118966
|
|
|
|
|
|
| |
anymore.
llvm-svn: 117357
|
|
|
|
|
|
| |
PR6056, //rdar: //8564463
llvm-svn: 116819
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
'super' as receiver of property or a setter/getter
methods. //rdar: //8525788
llvm-svn: 116483
|
|
|
|
|
|
| |
vla. Implements pr7827.
llvm-svn: 114737
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|