forked from OSchip/llvm-project
[PR41247] Fixed parsing of private keyword in C++.
Fixed bug in C++ to prevent parsing 'private' as a valid address space qualifier. Differential Revision: https://reviews.llvm.org/D59874 llvm-svn: 357162
This commit is contained in:
parent
38a0616c1d
commit
314fab6d7f
|
@ -4791,7 +4791,6 @@ bool Parser::isTypeSpecifierQualifier() {
|
|||
|
||||
case tok::kw___kindof:
|
||||
|
||||
case tok::kw_private:
|
||||
case tok::kw___private:
|
||||
case tok::kw___local:
|
||||
case tok::kw___global:
|
||||
|
@ -4800,9 +4799,11 @@ bool Parser::isTypeSpecifierQualifier() {
|
|||
case tok::kw___read_only:
|
||||
case tok::kw___read_write:
|
||||
case tok::kw___write_only:
|
||||
|
||||
return true;
|
||||
|
||||
case tok::kw_private:
|
||||
return getLangOpts().OpenCL;
|
||||
|
||||
// C11 _Atomic
|
||||
case tok::kw__Atomic:
|
||||
return true;
|
||||
|
@ -4982,7 +4983,6 @@ bool Parser::isDeclarationSpecifier(bool DisambiguatingWithExpression) {
|
|||
|
||||
case tok::kw___kindof:
|
||||
|
||||
case tok::kw_private:
|
||||
case tok::kw___private:
|
||||
case tok::kw___local:
|
||||
case tok::kw___global:
|
||||
|
@ -4995,6 +4995,9 @@ bool Parser::isDeclarationSpecifier(bool DisambiguatingWithExpression) {
|
|||
#include "clang/Basic/OpenCLImageTypes.def"
|
||||
|
||||
return true;
|
||||
|
||||
case tok::kw_private:
|
||||
return getLangOpts().OpenCL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5196,6 +5199,9 @@ void Parser::ParseTypeQualifierListOpt(
|
|||
|
||||
// OpenCL qualifiers:
|
||||
case tok::kw_private:
|
||||
if (!getLangOpts().OpenCL)
|
||||
goto DoneWithTypeQuals;
|
||||
LLVM_FALLTHROUGH;
|
||||
case tok::kw___private:
|
||||
case tok::kw___global:
|
||||
case tok::kw___local:
|
||||
|
|
|
@ -1414,8 +1414,13 @@ Parser::isCXXDeclarationSpecifier(Parser::TPResult BracedCastResult,
|
|||
// cv-qualifier
|
||||
case tok::kw_const:
|
||||
case tok::kw_volatile:
|
||||
return TPResult::True;
|
||||
|
||||
// OpenCL address space qualifiers
|
||||
case tok::kw_private:
|
||||
if (!getLangOpts().OpenCL)
|
||||
return TPResult::False;
|
||||
LLVM_FALLTHROUGH;
|
||||
case tok::kw___private:
|
||||
case tok::kw___local:
|
||||
case tok::kw___global:
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// RUN: %clang_cc1 %s -pedantic -verify -fsyntax-only
|
||||
|
||||
// Test that 'private' is not parsed as an address space qualifier
|
||||
// in regular C++ mode.
|
||||
|
||||
struct B {
|
||||
virtual ~B() // expected-error{{expected ';' at end of declaration list}}
|
||||
private:
|
||||
void foo();
|
||||
private int* i; // expected-error{{expected ':'}}
|
||||
};
|
||||
|
||||
void bar(private int*); //expected-error{{variable has incomplete type 'void'}} expected-error{{expected expression}}
|
Loading…
Reference in New Issue