forked from OSchip/llvm-project
Fix crash when using __if_exists in C mode
llvm-svn: 222665
This commit is contained in:
parent
54891e047f
commit
dfff5d22e6
|
@ -1788,8 +1788,9 @@ bool Parser::ParseMicrosoftIfExistsCondition(IfExistsCondition& Result) {
|
|||
}
|
||||
|
||||
// Parse nested-name-specifier.
|
||||
ParseOptionalCXXScopeSpecifier(Result.SS, ParsedType(),
|
||||
/*EnteringContext=*/false);
|
||||
if (getLangOpts().CPlusPlus)
|
||||
ParseOptionalCXXScopeSpecifier(Result.SS, ParsedType(),
|
||||
/*EnteringContext=*/false);
|
||||
|
||||
// Check nested-name specifier.
|
||||
if (Result.SS.isInvalid()) {
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
// RUN: %clang_cc1 %s -fsyntax-only -Wmicrosoft -verify -fms-extensions
|
||||
// expected-no-diagnostics
|
||||
|
||||
struct Type {
|
||||
};
|
||||
|
||||
void test_if_exists_stmts() {
|
||||
int b = 0;
|
||||
__if_exists(Type) {
|
||||
b++;
|
||||
b++;
|
||||
}
|
||||
__if_exists(Type_not) {
|
||||
this will not compile.
|
||||
}
|
||||
__if_not_exists(Type) {
|
||||
this will not compile.
|
||||
}
|
||||
__if_not_exists(Type_not) {
|
||||
b++;
|
||||
b++;
|
||||
}
|
||||
}
|
||||
|
||||
int if_exists_creates_no_scope() {
|
||||
__if_exists(Type) {
|
||||
int x; // 'x' is declared in the parent scope.
|
||||
}
|
||||
__if_not_exists(Type_not) {
|
||||
x++;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
__if_exists(Type) {
|
||||
int var23;
|
||||
}
|
||||
|
||||
__if_exists(Type_not) {
|
||||
this will not compile.
|
||||
}
|
||||
|
||||
__if_not_exists(Type) {
|
||||
this will not compile.
|
||||
}
|
||||
|
||||
__if_not_exists(Type_not) {
|
||||
int var244;
|
||||
}
|
||||
|
||||
void test_if_exists_init_list() {
|
||||
|
||||
int array1[] = {
|
||||
0,
|
||||
__if_exists(Type) {2, }
|
||||
3
|
||||
};
|
||||
|
||||
int array2[] = {
|
||||
0,
|
||||
__if_exists(Type_not) { this will not compile }
|
||||
3
|
||||
};
|
||||
|
||||
int array3[] = {
|
||||
0,
|
||||
__if_not_exists(Type_not) {2, }
|
||||
3
|
||||
};
|
||||
|
||||
int array4[] = {
|
||||
0,
|
||||
__if_not_exists(Type) { this will not compile }
|
||||
3
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
void test_nested_if_exists() {
|
||||
__if_exists(Type) {
|
||||
int x = 42;
|
||||
__if_not_exists(Type_not) {
|
||||
x++;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue