David Blaikie
dd58d4ca8f
Handle redundant 'typename' on base class specifications.
...
llvm-svn: 142937
2011-10-25 18:46:41 +00:00
David Blaikie
afa155fb88
Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug's feedback.
...
llvm-svn: 142935
2011-10-25 18:17:58 +00:00
David Blaikie
b75951f477
Initialize the BaseLoc for decltype base type specifications.
...
llvm-svn: 142929
2011-10-25 17:14:10 +00:00
David Blaikie
1cd50022b2
Fix cases where the optional nested-name-specifier erroneously preceeded a decltype-specification when specifying a base type.
...
llvm-svn: 142928
2011-10-25 17:10:12 +00:00
David Blaikie
00ee7a081d
Support the use of decltype for specifying base types. Fixes PR11216.
...
llvm-svn: 142926
2011-10-25 15:01:20 +00:00
Douglas Gregor
43edb32f1f
Rework Microsoft __if_exists/__if_not_exists parsing and semantic
...
analysis to separate dependent names from non-dependent names. For
dependent names, we'll behave differently from Visual C++:
- For __if_exists/__if_not_exists at class scope, we'll just warn
and then ignore them.
- For __if_exists/__if_not_exists in statements, we'll treat the
inner statement as a compound statement, which we only instantiate
in templates where the dependent name (after instantiation)
exists. This behavior is different from VC++, but it's as close as
we can get without encroaching ridiculousness.
The latter part (dependent statements) is not yet implemented.
llvm-svn: 142864
2011-10-24 22:31:10 +00:00
Richard Smith
b15c11c819
Add -Wc++98-compat warnings for uses of the new keywords 'alignof', 'char16_t',
...
'char32_t', 'constexpr', 'decltype', 'noexcept', 'nullptr' and 'static_assert'.
llvm-svn: 142302
2011-10-17 23:06:20 +00:00
Douglas Gregor
50cefbf212
When we end up having to parse the initializer of a C++ member early
...
in -fms-extensions mode, make sure we actually use that initializer
after having handled the declaration. Fixes PR11150.
llvm-svn: 142195
2011-10-17 17:09:53 +00:00
Erik Verbruggen
fd979b1eaf
Fixed merge-mistake where ActOnAccessSpecifier was called twice for every access specifier. The testcase has been changed to catch this too.
...
llvm-svn: 142186
2011-10-17 09:54:52 +00:00
Richard Smith
5d164bc5e0
Implement -Wc++98-compat warnings for the parser.
...
llvm-svn: 142056
2011-10-15 05:09:34 +00:00
Richard Smith
da2611199b
Refactor: remove redundant check for 'final' specifier when parsing class/struct definition.
...
llvm-svn: 142054
2011-10-15 04:21:46 +00:00
Richard Smith
bffe88027c
Rename an ExtWarn to ext_ for consistency.
...
llvm-svn: 142049
2011-10-15 03:55:17 +00:00
Richard Smith
2db9652b5a
Don't warn about use of 'final' in ill-formed C++98 code which didn't use
...
'final', and don't accept (then silently discard) braced init lists in C++98
new-expressions.
llvm-svn: 142048
2011-10-15 03:38:41 +00:00
Richard Smith
f679b5b6a6
-Wc++98-compat: warn on C++11 attributes and alignas.
...
llvm-svn: 141999
2011-10-14 20:48:27 +00:00
Erik Verbruggen
ca98f2a63f
Allow for annotate attributes after access specifiers. When such
...
attributes are found, propagate them to subsequent declarations.
llvm-svn: 141861
2011-10-13 09:41:32 +00:00
David Blaikie
eba32c2229
Fix crash-on-invalid, improve error recovery, and test coverage for missing colon after access specifiers in C++
...
llvm-svn: 141852
2011-10-13 06:08:43 +00:00
Douglas Gregor
e7a8e3b612
Introduce BalancedDelimiterTracker, to better track open/close
...
delimiter pairs and detect when we exceed the implementation limit for
nesting depth, from Aaron Ballman!
llvm-svn: 141782
2011-10-12 16:37:45 +00:00
Kaelyn Uhrain
4dc695daea
Move some bool flags out of function parameter lists.
...
llvm-svn: 141610
2011-10-11 00:28:45 +00:00
Douglas Gregor
728d00b8e7
Parse the initializer for a class member after handling its
...
declarator, so that the declarator is in scope for the
initializer. Fixes PR9989.
llvm-svn: 141539
2011-10-10 14:49:18 +00:00
Douglas Gregor
6f981006f6
Add braces around do-while body. The lack of them gives me the chills
...
llvm-svn: 141411
2011-10-07 20:35:25 +00:00
John McCall
a55902bf98
Parse attributes written in an ObjC method parameter type as
...
attributes on the parameter declaration.
llvm-svn: 140944
2011-10-01 09:56:14 +00:00
Peter Collingbourne
2f3cf4b158
Add support for alignment-specifiers in C1X and C++11, remove
...
support for the C++0x draft [[align]] attribute and add the C1X
standard header file stdalign.h
llvm-svn: 140796
2011-09-29 18:04:28 +00:00
Peter Collingbourne
49eedecd70
Add support for parsing an attribute-specifier-seq containing multiple
...
attribute-specifiers
llvm-svn: 140794
2011-09-29 18:04:05 +00:00
Douglas Gregor
882a61a640
Diagnose attempts to use 'using typename' with a non-identifier name,
...
from Stepan Dyatkovskiy. Fixes PR10925.
llvm-svn: 140528
2011-09-26 14:30:28 +00:00
Sebastian Redl
a74948d347
Correctly parse braced member initializers (even in delayed parsing) and correctly pass
...
the information on to Sema. There's still an incorrectness in the way template instantiation
works now, but that is due to a far larger underlying representational problem.
Also add a test case for various list initialization cases of scalars, which test this
commit as well as the previous one.
llvm-svn: 140460
2011-09-24 17:48:25 +00:00
Douglas Gregor
0745ac8016
Fix up comment now that 'new' is no longer a virt-specifier, from Aaron Ballman
...
llvm-svn: 140389
2011-09-23 16:58:49 +00:00
Francois Pichet
0706d203cf
Rename LangOptions::Microsoft to LangOptions::MicrosoftExt to make it clear that this flag must be used only for Microsoft extensions and not emulation; to avoid confusion with the new LangOptions::MicrosoftMode flag.
...
Many of the code now under LangOptions::MicrosoftExt will eventually be moved under the LangOptions::MicrosoftMode flag.
llvm-svn: 139987
2011-09-17 17:15:52 +00:00
Douglas Gregor
3c7cd6a0c4
Specializations cannot be module-hidden. Diagnose attempts to do so.
...
llvm-svn: 139406
2011-09-09 20:53:38 +00:00
Douglas Gregor
2820e6923a
__module_private__ is inherited by redeclarations of an entity, and
...
must also be present of the first declaration of that entity.
llvm-svn: 139384
2011-09-09 19:05:14 +00:00
Douglas Gregor
26701a4371
Modules: introduce the __module_private__ declaration specifier, which
...
indicates that a declaration is only visible within the module it is
declared in.
llvm-svn: 139348
2011-09-09 02:06:17 +00:00
Caitlin Sadowski
9385dd7415
Thread Safety: Patch to implement delayed parsing of attributes within a
...
class scope.
This patch was also written by DeLesley Hutchins.
llvm-svn: 139301
2011-09-08 17:42:22 +00:00
Sebastian Redl
e9c4e84f8e
Add test case for defaulted copy and move structure validation.
...
Fix bug this uncovered.
Address minor comments from Doug.
Enable cxx_implicit_moves feature.
llvm-svn: 139101
2011-09-04 18:14:28 +00:00
Argyrios Kyrtzidis
5cec2aea3f
Support code-completion for C++ inline methods and ObjC buffering methods.
...
Previously we would cut off the source file buffer at the code-completion
point; this impeded code-completion inside C++ inline methods and,
recently, with buffering ObjC methods.
Have the code-completion inserted into the source buffer so that it can
be buffered along with a method body. When we actually hit the code-completion
point the cut-off lexing or parsing.
Fixes rdar://10056932&8319466
llvm-svn: 139086
2011-09-04 03:32:15 +00:00
Fariborz Jahanian
4bf8262a43
objc - Simplify switing objc decl context by using
...
a context switching object.
llvm-svn: 138248
2011-08-22 17:59:19 +00:00
Fariborz Jahanian
8d382dc781
Restore patch I reversed in r138040. Known buildbot
...
failures are resolved.
llvm-svn: 138234
2011-08-22 15:54:49 +00:00
Richard Smith
a77a0a6bf2
Track in the AST whether a function is constexpr.
...
llvm-svn: 137653
2011-08-15 21:04:07 +00:00
Douglas Gregor
db0b9f1264
Parsing of C++0x lambda expressions, from John Freeman with help from
...
David Blaikie!
llvm-svn: 136876
2011-08-04 15:30:47 +00:00
Douglas Gregor
df445f0ae1
Turn off __has_feature(is_empty) and __has_feature(is_pod) if the
...
libstdc++ hack has reverted these type traits to keywords. Icky, but
fixes <rdar://problem/9836262>.
llvm-svn: 136560
2011-07-30 07:01:49 +00:00
Chris Lattner
0e62c1cc0b
remove unneeded llvm:: namespace qualifiers on some core types now that LLVM.h imports
...
them into the clang namespace.
llvm-svn: 135852
2011-07-23 10:55:15 +00:00
Richard Smith
7b8c3c91f4
PR10359: Template declarations which define classes are not permitted to also contain declarators. Previously we would accept code like this:
...
template<typename T> struct S { } f() { return 0; }
This case now produces a missing ';' diagnostic, since that seems like a much more likely error than an attempt to declare a function or variable in addition to the class template.
Treat this
llvm-svn: 135195
2011-07-14 21:35:26 +00:00
Richard Smith
cd1c055528
Fix AST representations of alias-declarations which define tag types. Inside classes, the tag types need to have an associated access specifier, and inside function definitions, they need to be included in the declarations of the DeclStmt. These issues manifested as assertions during template instantiation, and also in a WIP constexpr patch.
...
llvm-svn: 134250
2011-07-01 19:46:12 +00:00
Douglas Gregor
c15b0cfc1f
When deciding how to parse "= something" as part of a member
...
declaration, determine whether the declaration will end up declaring a
function using semantic criteria (e.g., it will have function type)
rather than purely syntactic criteria (e.g., it has the form of a
function declarator). Fixes <rdar://problem/9670557>.
llvm-svn: 133854
2011-06-25 00:56:27 +00:00
Argyrios Kyrtzidis
c0c5dd2651
Introduce DelayedCleanupPool useful for simplifying clean-up of certain resources that, while their
...
lifetime is well-known and restricted, cleaning them up manually is easy to miss and cause a leak.
Use it to plug the leaking of TemplateIdAnnotation objects. rdar://9634138.
llvm-svn: 133610
2011-06-22 06:09:49 +00:00
Richard Smith
4a4beec7b0
Don't assert on initialized typedef declarations in classes:
...
struct {
typedef int A = 0;
};
According to the C++11 standard, this is not ill-formed, but does not have any ascribed meaning. We can't reasonably accept it, so treat it as ill-formed.
Also switch C++ from an incorrect 'fields can only be initialized in constructors' diagnostic for this case to C's 'illegal initializer (only variables can be initialized)'
llvm-svn: 132890
2011-06-12 11:43:46 +00:00
Richard Smith
938f40b5aa
Implement support for C++11 in-class initialization of non-static data members.
...
llvm-svn: 132878
2011-06-11 17:19:42 +00:00
Sebastian Redl
3da3489e49
Parse C++0x generalized initializers.
...
llvm-svn: 132662
2011-06-05 12:23:16 +00:00
Benjamin Kramer
f546f411b0
Silence sign compare warning.
...
llvm-svn: 132146
2011-05-26 21:32:30 +00:00
Richard Trieu
61384cb8bd
Add a fix-it and better error recovery for improperly nested namespaces. This will give a better error message for cases such as "namespace foo::bar::baz {}" and a suggested fix-it of "namespace foo { namespace bar { namespace baz {} } }"
...
llvm-svn: 132138
2011-05-26 20:11:09 +00:00
Francois Pichet
8f981d5964
Add support for Microsoft __if_exists, __if_not_exists extension at class scope.
...
Example:
typedef int TYPE;
class C {
__if_exists(TYPE) {
TYPE a;
}
__if_not_exists(TYPE) {
this will never be parsed.
}
};
llvm-svn: 132052
2011-05-25 10:19:49 +00:00
Alexis Hunt
e852b100e2
Implement a new type node, UnaryTransformType, designed to represent a
...
type that turns one type into another. This is used as the basis to
implement __underlying_type properly - with TypeSourceInfo and proper
behavior in the face of templates.
llvm-svn: 132017
2011-05-24 22:41:36 +00:00