зеркало из https://github.com/microsoft/clang-1.git
Recognize GNU attributes after 'enum class'. Fixes the libc++ build.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159089 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
33e6c2da2f
Коммит
1e12b3d777
|
@ -2976,15 +2976,22 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
||||||
SourceLocation ScopedEnumKWLoc;
|
SourceLocation ScopedEnumKWLoc;
|
||||||
bool IsScopedUsingClassTag = false;
|
bool IsScopedUsingClassTag = false;
|
||||||
|
|
||||||
|
// In C++11, recognize 'enum class' and 'enum struct'.
|
||||||
if (getLangOpts().CPlusPlus0x &&
|
if (getLangOpts().CPlusPlus0x &&
|
||||||
(Tok.is(tok::kw_class) || Tok.is(tok::kw_struct))) {
|
(Tok.is(tok::kw_class) || Tok.is(tok::kw_struct))) {
|
||||||
Diag(Tok, diag::warn_cxx98_compat_scoped_enum);
|
Diag(Tok, diag::warn_cxx98_compat_scoped_enum);
|
||||||
IsScopedUsingClassTag = Tok.is(tok::kw_class);
|
IsScopedUsingClassTag = Tok.is(tok::kw_class);
|
||||||
ScopedEnumKWLoc = ConsumeToken();
|
ScopedEnumKWLoc = ConsumeToken();
|
||||||
|
|
||||||
|
// Attributes are not allowed between these keywords. Diagnose,
|
||||||
|
// but then just treat them like they appeared in the right place.
|
||||||
ProhibitAttributes(attrs);
|
ProhibitAttributes(attrs);
|
||||||
// Recovery: assume that the attributes came after the tag.
|
|
||||||
|
// They are allowed afterwards, though.
|
||||||
|
MaybeParseGNUAttributes(attrs);
|
||||||
MaybeParseCXX0XAttributes(attrs);
|
MaybeParseCXX0XAttributes(attrs);
|
||||||
|
while (Tok.is(tok::kw___declspec))
|
||||||
|
ParseMicrosoftDeclSpec(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// C++11 [temp.explicit]p12:
|
// C++11 [temp.explicit]p12:
|
||||||
|
|
|
@ -207,3 +207,8 @@ void baz () {
|
||||||
for ([[]] int n : { 1, 2, 3 }) {
|
for ([[]] int n : { 1, 2, 3 }) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class __attribute__((visibility("hidden"))) SecretKeepers {
|
||||||
|
one, /* rest are deprecated */ two, three
|
||||||
|
};
|
||||||
|
enum class [[]] EvenMoreSecrets {};
|
||||||
|
|
Загрузка…
Ссылка в новой задаче