Abramo Bagnara
1cd8368eb2
Fixed TypeofExpr AST and code generation.
...
llvm-svn: 147730
2012-01-07 10:52:36 +00:00
Douglas Gregor
e57e752b71
Switch NamespaceDecl from its own hand-rolled redeclaration chain over
...
to Redeclarable<NamespaceDecl>, so that we benefit from the improveed
redeclaration deserialization and merging logic provided by
Redeclarable<T>. Otherwise, no functionality change.
As a drive-by fix, collapse the "inline" bit into the low bit of the
original namespace/anonymous namespace, saving 8 bytes per
NamespaceDecl on x86_64.
llvm-svn: 147729
2012-01-07 09:11:48 +00:00
Eli Friedman
73a040906d
More lambda work: semantic analysis of capturing 'this'. It's a bit complicated, but we have to be careful about when exactly captures are marked given PotentiallyPotentiallyEvaluated contexts. (Actually, it's not 100% correct yet, but it's close enough for the moment.)
...
llvm-svn: 147723
2012-01-07 04:59:52 +00:00
Eli Friedman
44803326d4
Lambdas: semantic analysis of explicit captures.
...
This patch (and some of my other commits related to lambdas) is heavily based off of John Freeman's work-in-progress patches.
llvm-svn: 147706
2012-01-07 01:08:17 +00:00
Matt Beaumont-Gay
7a57adab83
Suppress -Wunused-value within macros from system headers.
...
Along the way, move a helper function from SemaChecking.cpp to a more
accessible home in SourceManager.
llvm-svn: 147692
2012-01-06 22:43:58 +00:00
Douglas Gregor
5407920f82
During name lookup, use redecl_iterator to walk over the redeclaration
...
chain to determine whether any declaration of the given entity is
visible, eliminating the redundant (and less efficient)
getPreviousDeclaration() implementation.
This tweak uncovered an omission in the handling of
RedeclarableTemplateDecl, where we weren't making sure to search for
additional redeclarations of a template in other module files. Things
would be cleaner if RedeclarableTemplateDecl actually used Redeclarable.
llvm-svn: 147687
2012-01-06 22:05:37 +00:00
Rafael Espindola
7c23b0891b
Improvements to the uninitialized variable warning: Check if the constructor
...
call is elidable or if the constructor is trivial instead of checking if it
is user declared.
llvm-svn: 147652
2012-01-06 04:54:01 +00:00
Eli Friedman
4817cf72f6
More lambda work. Fixes a minor bug Richard pointed out, makes lookup for lambda parameters work correctly, recording more information into the AST.
...
llvm-svn: 147650
2012-01-06 03:05:34 +00:00
Richard Smith
b3851f5ca1
David Blaikie and Chandler would like us to diagnose
...
int f();
in function scopes under -Wvexing-parse, so now we do.
llvm-svn: 147649
2012-01-06 02:30:50 +00:00
Richard Smith
d069d2f6ac
Tweak to r147599 for PR10828: Move the check from the parser into sema, and use
...
the Semantic Powers to only warn on class types (or dependent types), where the
constructor or destructor could do something interesting.
llvm-svn: 147642
2012-01-06 01:31:20 +00:00
Eli Friedman
5c5e3b7e84
Minor refactoring of sentinel warning on blocks. Add a test for this warning.
...
llvm-svn: 147641
2012-01-06 01:23:10 +00:00
Ted Kremenek
0c2c90b1ad
After further discussion, rename attribute 'objc_disable_automatic_synthesis' to 'objc_requires_property_definitions'.
...
llvm-svn: 147622
2012-01-05 22:47:47 +00:00
Eli Friedman
de30e523b4
Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization. Fixes PR11712.
...
llvm-svn: 147620
2012-01-05 22:34:08 +00:00
Eli Friedman
71c8055f8e
More lambda work. Tweak the Sema interface slightly. Start adding the pieces to build the lambda class and its call operator. Create an actual scope for the lambda body.
...
llvm-svn: 147595
2012-01-05 03:35:19 +00:00
Douglas Gregor
5c193c7ed6
When we're performing name lookup for a tag, we still allow ourselves
...
to see hidden declarations because every tag lookup is effectively a
redeclaration lookup. For example, image that
struct foo;
is declared in a submodule that is known but hasn't been imported. If
someone later writes
struct foo *foo_p;
then "struct foo" is either a reference or a redeclaration. To keep
the redeclaration chains sound, we treat it like a redeclaration for
name-lookup purposes.
llvm-svn: 147588
2012-01-05 01:11:47 +00:00
Eli Friedman
de958784d6
Minor cleanup; no functional change.
...
llvm-svn: 147582
2012-01-05 00:49:17 +00:00
John McCall
a59dc2f8f0
The value of a const weak variable is not an integer constant.
...
llvm-svn: 147575
2012-01-05 00:13:19 +00:00
Ted Kremenek
dec9d12fc4
Rename attribute 'objc_suppress_autosynthesis' to 'objc_disable_automatic_synthesis'.
...
llvm-svn: 147567
2012-01-04 23:51:09 +00:00
Douglas Gregor
eb90e83085
Store the submodules of a module in source order, as they are stored
...
in the module map. This provides a bit more predictability for the
user, as well as eliminating the need to sort the submodules when
serializing them.
llvm-svn: 147564
2012-01-04 23:32:19 +00:00
Fariborz Jahanian
783ffde6d3
objc: When issuing warning for missing synthesis for
...
properties in classes declared with objc_suppress_autosynthesis
attribute, pinpoint location of the said class in a note.
llvm-svn: 147562
2012-01-04 23:16:13 +00:00
Eli Friedman
fd5e54da2d
Add an APValue representation for the difference between two address-of-label expressions. Add support to Evaluate and CGExprConstant for generating/handling them. Remove the special-case for such differences in Expr::isConstantInitializer.
...
With that done, remove a bunch of buggy code from CGExprConstant for handling scalar expressions which is no longer necessary.
Fixes PR11705.
llvm-svn: 147561
2012-01-04 23:13:47 +00:00
Douglas Gregor
9b7b39116e
Implement declaration merging for typedefs loaded from disjoint
...
modules, so long as the typedefs refer to the same underlying
type. This ensures that the typedefs end up in the same redeclaration
chain.
To test this, fix name lookup for C/Objective-C to properly deal with
multiple declarations with the same name in the same scope.
llvm-svn: 147533
2012-01-04 16:44:10 +00:00
Rafael Espindola
2aa7acfadb
Process attributes in explicit function template instantiations. Fixes part of
...
PR11690.
llvm-svn: 147523
2012-01-04 05:40:59 +00:00
Eli Friedman
36d129435e
Add an explicit LambdaExprContext to Declarator, to parallel BlockLiteralContext. Use it to ensure semantic analysis of types isn't confused by the lack of a type specifier.
...
llvm-svn: 147522
2012-01-04 04:41:38 +00:00
Eli Friedman
c7c97144af
Stub out the Sema interface for lambda expressions, and change the parser to use it. Unconditionally error on lambda expressions because they don't work in any meaningful way yet.
...
llvm-svn: 147515
2012-01-04 02:40:39 +00:00
Fariborz Jahanian
1fc1c6c307
In non-gc, non-arc mode, property of 'Class' type
...
variety is treated as a 'void *'. No need to issue
warning reserved for objc object properties.
// rdar://10565506
llvm-svn: 147504
2012-01-04 00:31:53 +00:00
Douglas Gregor
6aeecf1791
Minor tweak to name lookup for C/Objective-C: after the first name, still consider whether this is a redeclaration lookup when determining whether to look for the visible declaration
...
llvm-svn: 147499
2012-01-03 23:34:23 +00:00
Douglas Gregor
b59643baf6
Test "merging" of typedef types across distinct modules. At present,
...
the AST reader doesn't actually perform a merge, because name lookup
knows how to merge identical typedefs together.
As part of this, teach C/Objective-C name lookup to return multiple
results in all cases, rather than first digging through the attributes
to see if the value is overloadable. This way, we'll catch ambiguous
lookups in C/Objective-C.
llvm-svn: 147498
2012-01-03 23:26:26 +00:00
Fariborz Jahanian
7249e36704
objc: diagnose misplacement of objc_suppress_autosynthesis
...
attribute.
llvm-svn: 147490
2012-01-03 22:52:32 +00:00
Fariborz Jahanian
3c9707bd90
objc: use objc_suppress_autosynthesis attribute on classes
...
which should not be default synthesized.
llvm-svn: 147468
2012-01-03 19:46:00 +00:00
Fariborz Jahanian
9d4d20af55
objc: introduce objc_suppress_autosynthesis class
...
attributes for later use.
llvm-svn: 147457
2012-01-03 18:45:41 +00:00
Douglas Gregor
22d0974b40
Introduce a non-uglified syntax for module imports in Objective-C:
...
@import identifier [. identifier]* ;
llvm-svn: 147452
2012-01-03 18:04:46 +00:00
Rafael Espindola
0b0620776a
Process attributes in explicit template instatiation definitions. Fixes PR11690.
...
llvm-svn: 147441
2012-01-03 06:04:21 +00:00
Douglas Gregor
5dbf4eb66b
Diagnose cases where the definition of a particular type is required,
...
is known (to Clang), but is not visible because the module has not yet
been imported.
llvm-svn: 147436
2012-01-02 17:18:37 +00:00
Douglas Gregor
fe620daefa
Eliminate ObjCProtocolDecl's end-of-definition location. It is not
...
used anywhere.
llvm-svn: 147422
2012-01-02 02:22:52 +00:00
Douglas Gregor
1bd9617671
Move ObjCProtocolDecl::EndLoc into its DefinitionData, and give
...
ObjCProtocolDecl proper source-range information.
llvm-svn: 147420
2012-01-02 01:18:16 +00:00
Douglas Gregor
05a1f4d60b
Eliminate the ForwardDecl/InitiallyForwardDecl bits from ObjCProtocolDecl. They are no longer needed
...
llvm-svn: 147419
2012-01-01 22:06:18 +00:00
Douglas Gregor
f610267581
Eliminate ObjCForwardProtocolDecl, which is redundant now that
...
ObjCProtocolDecl modules forward declarations properly.
llvm-svn: 147415
2012-01-01 21:23:57 +00:00
Douglas Gregor
42ff1bb922
Eliminate ASTMutationListener::UpdatedAttributeList, which is no
...
longer needed now that we aren't back-patching ObjCProtocolDecls.
llvm-svn: 147413
2012-01-01 20:33:24 +00:00
Douglas Gregor
32c1757730
Wire up redeclaration chains for Objective-C protocols, so that both
...
forward declarations and definitions of an Objective-C protocol are
represented within a single chain of ObjCProtocolDecls.
llvm-svn: 147412
2012-01-01 20:30:41 +00:00
Douglas Gregor
a715bfff98
Introduce the core infrastructure needed to model redeclaration chains
...
for Objective-C protocols, including:
- Using the first declaration as the canonical declaration
- Using the definition as the primary DeclContext
- Making sure that all declarations have a pointer to the definition
data, and that we know which declaration is the definition
- Serialization support for redeclaration chains and for adding
definitions to already-serialized declarations.
However, note that we're not taking advantage of much of this code
yet, because we're still re-using ObjCProtocolDecls.
llvm-svn: 147410
2012-01-01 19:51:50 +00:00
Douglas Gregor
e6e48b1490
Move the data that corresponds to the definition of a protocol into a
...
separately-allocated DefinitionData structure. Introduce various
functions that will help with the separation of declarations from
definitions (isThisDeclarationADefinition(), hasDefinition(),
getDefinition()).
llvm-svn: 147408
2012-01-01 19:29:29 +00:00
Rafael Espindola
01fb1135d6
Use hasSameType.
...
llvm-svn: 147407
2012-01-01 18:36:59 +00:00
Richard Smith
e434590bd9
Change the diagnostics which said 'accepted as an extension' to instead say
...
'is an extension'. The former is inappropriate and confusing when building with
-Werror/-pedantic-errors.
llvm-svn: 147357
2011-12-29 21:57:33 +00:00
Richard Smith
5fab0c9e1a
Small refactoring and simplification of constant evaluation and some of its
...
clients. No functionality change.
llvm-svn: 147318
2011-12-28 19:48:30 +00:00
Douglas Gregor
deafd0b2a4
Eliminate ObjCClassDecl, which is redundant now that ObjCInterfaceDecl
...
covers both declarations (@class ) and definitions (@interface) of an
Objective-C class.
llvm-svn: 147299
2011-12-27 22:43:10 +00:00
Rafael Espindola
cde2c8f7d2
Delay checking of typedefs of dependent types. Fixes PR11630.
...
llvm-svn: 147281
2011-12-26 22:42:47 +00:00
Richard Smith
f0215fe898
Fix constexpr handling to allow 'extern constexpr' variable declarations. We no
...
longer have access to the source locations we need to produce the
'replace constexpr with const' fixits, so they're gone for now.
llvm-svn: 147273
2011-12-25 21:17:58 +00:00
Rafael Espindola
65e025cad5
Remove unused variables.
...
llvm-svn: 147260
2011-12-25 01:18:52 +00:00
Richard Smith
966c1fb0c8
Always implicitly declare move assignment operations for dynamic classes, in
...
case they override virtual functions from a base class. Also fix -print-stats
counting of move assignment/construction.
llvm-svn: 147258
2011-12-24 21:56:24 +00:00