| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 242744
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Clang used to silently ignore __declspec(novtable). It is implemented
now, but leaving the vtable uninitialized does not work when using the
Itanium ABI, where the class layout for complex class hierarchies is
stored in the vtable. It might be possible to honor the novtable
attribute in some simple cases and either report an error or ignore
it in more complex situations, but it’s not clear if that would be
worthwhile. There is also value in having a simple and predictable
behavior, so this changes clang to simply ignore novtable when not using
the Microsoft C++ ABI.
llvm-svn: 242730
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a lambda used as default argument in a method declaration contained
a local class, that class was incorrectly recognized as nested class.
In this case compiler tried to postpone parsing of this class until
the enclosing class is finished, which caused crashes in some cases.
This change fixes PR13987.
Differential Revision: http://reviews.llvm.org/D11006
llvm-svn: 242132
|
|
|
|
|
|
|
|
|
|
|
|
| |
attribute blocks"
This reverts commit r239846 and r239879. They caused clang's
-fms-extensions behavior to incorrectly parse lambdas and includes a
testcase to ensure we don't regress again.
This issue was found in PR24027.
llvm-svn: 241668
|
|
|
|
|
|
| |
the class.
llvm-svn: 241425
|
|
|
|
|
|
| |
parse-merging.
llvm-svn: 241180
|
|
|
|
|
|
| |
clang\lib\Parse\ParseDeclCXX.cpp(2396): error C3486: a parameter for a lambda cannot have a default argument
llvm-svn: 241046
|
|
|
|
|
|
| |
disambiguation in the parser rather than trying to do it in Sema.
llvm-svn: 241032
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a function containing a local class is instantiated, instantiate
all of local class member, including default arguments and exception
specifications.
This change fixes PR21332 and thus implements DR1484.
Differential Revision: http://reviews.llvm.org/D9990
llvm-svn: 240974
|
|
|
|
|
|
| |
is().
llvm-svn: 240008
|
|
|
|
|
|
|
|
|
|
|
| |
MS attributes do not permit empty attribute blocks. Correctly diagnose those.
We continue to parse to ensure that we recover correctly. Because the block is
empty, we do not need to skip any tokens.
Bonus: tweak the comment that I updated but forgot to remove the function name
in a previous commit.
llvm-svn: 239846
|
|
|
|
|
|
|
|
| |
Switch to using BalancedDelimiterTracker to get better diagnostics for
unbalanced delimiters. This still does not handle any of the attributes, simply
improves the parsing.
llvm-svn: 239758
|
|
|
|
|
|
| |
with a base-specifier inside a namespace.
llvm-svn: 239569
|
|
|
|
| |
llvm-svn: 237835
|
|
|
|
|
|
| |
definition into an imported but hidden definition.
llvm-svn: 237612
|
|
|
|
|
|
| |
imported but not visible definition.
llvm-svn: 236690
|
|
|
|
|
|
|
|
|
|
|
|
| |
__declspec(align(...)) is unlike all other attributes in that it is not
applied to a variable if it appears before the class-key. If the
tag in question isn't part of a variable declaration, it is not ignored.
Instead, the alignment attribute is applied to the tag.
This fixes PR18024.
llvm-svn: 235272
|
|
|
|
|
|
|
|
|
| |
Take advantage of the delayed typo no longer being eagerly corrected to
a keyword to filter out keyword corrections (and other things like
unresolved & overloaded expressions, which have placeholder types) when
correcting typos inside of a decltype().
llvm-svn: 234623
|
|
|
|
|
|
|
|
| |
attributes.
Found by afl-fuzz.
llvm-svn: 233499
|
|
|
|
|
|
|
|
| |
non-visible definition, skip the new definition and make the old one visible
instead of trying to parse it again and failing horribly. C++'s ODR allows
us to assume that the two definitions are identical.
llvm-svn: 233250
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
hints
Summary: Follow-up to the fix of PR22075.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D7012
llvm-svn: 233161
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: This fixes PR22075.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D6828
llvm-svn: 233160
|
|
|
|
|
|
|
|
| |
fixit hints"
This reverts commit 2131e63e2fdff7c831ab3bfe31facf2e3ebab03d.
llvm-svn: 233074
|
|
|
|
|
|
|
|
| |
generate fixit hints"
This reverts commit 49079d45966a3f57cd82edb35bde2e8e88fccf40.
llvm-svn: 233073
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
hints
Summary: Follow-up to the fix of PR22075.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D7012
llvm-svn: 233070
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: This fixes PR22075.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D6828
llvm-svn: 233069
|
|
|
|
|
|
|
|
|
|
| |
All ParseCXXInlineMethodDef does with it is assign it on the ParsingDeclarator.
Since that is passed in as well, the (single) caller may as well set the
DefinitionKind, thus simplifying the code.
No change in functionality.
llvm-svn: 233043
|
|
|
|
|
|
| |
This was an omission from r232229.
llvm-svn: 232554
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
scope ends
Previously, we would error out on this code because the default argument
wasn't parsed until the end of Outer:
struct __declspec(dllexport) Outer {
struct __declspec(dllexport) Inner {
Inner(void *p = 0);
};
};
Now we do the checking on the closing brace of Outer instead of Inner.
llvm-svn: 232519
|
|
|
|
|
|
|
|
|
|
|
|
| |
Using declarations which are aliases to struct types have their name
used as the struct type's name for linkage purposes. Otherwise, make
sure to give an anonymous struct defined inside a using declaration a
mangling number to disambiguate it from other anonymous structs in the
same context.
This fixes PR22809.
llvm-svn: 231909
|
|
|
|
| |
llvm-svn: 231573
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sema::MergeCXXFunctionDecl: propagate hasUnparsedDefaultArg to new decl.
Parser::HandleMemberFunctionDeclDelays: check hasUnparsedDefaultArg
flag.
Parser::ParseLexedMethodDeclaration: handle inherited unparsed default
arg case.
llvm-svn: 229852
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the case that we diagnosed an invalid attribute due to missing or present
arguments, we would return false, indicating to the caller that the parsing
failed. However, we would have added the attribute in ParseAttributeArgsCommon
(which may have been called indirectly through ParseGNUAttributeArgs).
Returning true in this case ensures that a second copy of the attribute is not
added.
I haven't added a test case for this as the existing test will cover this with
the next commit which diagnoses a C++14 attribute applied in C++11 mode. Rather
than duplicating the existing test case, allow the tree to remain without a test
between this and the next change. We would see double warnings in the
[[deprecated()]] applied to a declaration in C++11 mode, which will cause an
error in the cxx0x-attributes test.
llvm-svn: 229446
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The first part of that line doesn't parse correctly and ParseClassSpecifier() for
some reason skips to tok::comma to recover, and then
ParseDeclarationSpecifiers() sees the next struct and calls
ParseClassSpecifier() again with the same DeclSpec object.
However, the first call already called ActOnCXXGlobalScopeSpecifier() on the
DeclSpec's CXXScopeSpec, and sema gets confused when this gets called again.
As a fix, let ParseClassSpecifier() (and ParseEnumSpecifier()) call
ParseOptionalCXXScopeSpec() with a temporary CXXScopeSpec object, and only
copy it into the DeclSpec if things work out. (This is also how all the other
functions that set the DeclSpec's TypeSpecScope set it.)
Found by SLi's bot.
llvm-svn: 229288
|
|
|
|
| |
llvm-svn: 227024
|
|
|
|
| |
llvm-svn: 226363
|
|
|
|
| |
llvm-svn: 226307
|
|
|
|
|
|
|
|
|
|
|
| |
There was already an explicit check for that for the first decl. Move that
to a different place so that it's called for the following decls too. Also
don't randomly set the BitfieldSize ExprResult to true (this sets a pointer to
true internally).
Found by SLi's bot.
llvm-svn: 226306
|
|
|
|
|
|
|
|
|
|
| |
Sorry for the noise, I managed to miss a bunch of recent regressions of
include orderings here. This should actually sort all the includes for
Clang. Again, no functionality changed, this is just a mechanical
cleanup that I try to run periodically to keep the #include lines as
regular as possible across the project.
llvm-svn: 225979
|
|
|
|
|
|
|
| |
No functionality change intended, just moving code around to make it
simpler.
llvm-svn: 225763
|
|
|
|
|
|
| |
the tokens around so we can diagnose an error rather than silently discarding them.
llvm-svn: 225755
|
|
|
|
|
|
|
|
| |
Similar to r225619, use a special EOF token to mark the end of the
exception specification instead of cxx_exceptspec_end. Use the current
scope as the marker.
llvm-svn: 225622
|
|
|
|
|
|
|
| |
It's not safe to blindly call getIdentifierInfo without checking the
token is not an annotation token.
llvm-svn: 225533
|
|
|
|
|
|
|
|
|
|
|
| |
This is a follow-up to r224915. This adds a bit more line noise to the tests
added in that revision to make sure the parser is ready for a toplevel decl
after each incorrect line. Use this to move the tests up to where they belong.
This uncovered that the early return was missing a call to
ActOnTagDefinitionError(), so add that. (Also fixes at least one of the crashes
on SLi's bot.)
llvm-svn: 224958
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
r168626 added nicer diagnostics for attributes in the wrong places, such as
after the `final` on a class. To do this, it added code that did high-level
pattern matching for e.g. 'final' 'alignas' '(' and then skipped until the
closing ')'. If it saw that, it then went down the regular class parsing
path and then called MaybeParseCXX11Attributes() to parse the attribute after
the 'final' using real attribute parsing code. On invalid attributes, the
real attribute parsing code could eat more tokens than the pattern matching
code and for example skip past the '{' starting the class, which would then
lead to an assert. To prevent this, check for a good state after calling
MaybeParseCXX11Attributes() (which morphed into CheckMisplacedCXX11Attribute()
in r175575) and bail out if things look bleak.
Found by SLi's afl bot.
llvm-svn: 224915
|
|
|
|
|
|
|
|
| |
Clang has a hack to accept definitions of structs with tag names which
have the same name as intrinsics. However, this hack didn't guard
against annotation tokens showing up in the token stream.
llvm-svn: 224909
|
|
|
|
|
|
| |
when we diagnose this as an error.
llvm-svn: 224595
|
|
|
|
|
|
|
|
|
| |
We would crash trying to treat a property member as a field. These
shoudl be forbidden anyway, reject programs which contain them.
This fixes PR21840.
llvm-svn: 224193
|
|
|
|
|
|
|
|
| |
The __unaligned keyword can appear after a struct definition:
struct foo {...} __unaligned *x;
llvm-svn: 223412
|
|
|
|
|
|
|
|
|
| |
Sema::ActOnIdExpression to use the new functionality.
Among other things, this allows recovery in several cases where it
wasn't possible before (e.g. correcting a mistyped static_cast<>).
llvm-svn: 222464
|