зеркало из 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;
|
||||
bool IsScopedUsingClassTag = false;
|
||||
|
||||
// In C++11, recognize 'enum class' and 'enum struct'.
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
(Tok.is(tok::kw_class) || Tok.is(tok::kw_struct))) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_scoped_enum);
|
||||
IsScopedUsingClassTag = Tok.is(tok::kw_class);
|
||||
ScopedEnumKWLoc = ConsumeToken();
|
||||
|
||||
// Attributes are not allowed between these keywords. Diagnose,
|
||||
// but then just treat them like they appeared in the right place.
|
||||
ProhibitAttributes(attrs);
|
||||
// Recovery: assume that the attributes came after the tag.
|
||||
|
||||
// They are allowed afterwards, though.
|
||||
MaybeParseGNUAttributes(attrs);
|
||||
MaybeParseCXX0XAttributes(attrs);
|
||||
while (Tok.is(tok::kw___declspec))
|
||||
ParseMicrosoftDeclSpec(attrs);
|
||||
}
|
||||
|
||||
// C++11 [temp.explicit]p12:
|
||||
|
|
|
@ -207,3 +207,8 @@ void baz () {
|
|||
for ([[]] int n : { 1, 2, 3 }) {
|
||||
}
|
||||
}
|
||||
|
||||
enum class __attribute__((visibility("hidden"))) SecretKeepers {
|
||||
one, /* rest are deprecated */ two, three
|
||||
};
|
||||
enum class [[]] EvenMoreSecrets {};
|
||||
|
|
Загрузка…
Ссылка в новой задаче