Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Parser] Emit descriptive diagnostic for misplaced pragma
If a class or struct or union declaration contains a pragma that is not valid in this context, compiler issues generic error like "expected member name or ';' after declaration specifiers". With this change the error tells that this pragma cannot appear in this declaration. Differential Revision: https://reviews.llvm.org/D64932 llvm-svn: 367779
- Loading branch information
Showing
6 changed files
with
63 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// RUN: %clang_cc1 -fsyntax-only -verify %s | ||
|
||
void f1(void) { | ||
int x = 0; | ||
/* expected-error@+1 {{'#pragma fp_contract' can only appear at file scope or at the start of a compound statement}} */ | ||
#pragma STDC FP_CONTRACT ON | ||
} | ||
|
||
void f2(void) { | ||
#pragma STDC FP_CONTRACT OFF | ||
#pragma STDC FP_CONTRACT ON | ||
} | ||
|
||
struct S1 { | ||
// expected-error@+1 {{this pragma cannot appear in struct declaration}} | ||
#pragma STDC FP_CONTRACT ON | ||
float f1; | ||
}; | ||
|
||
union U1 { | ||
float f1; | ||
float f2; | ||
// expected-error@+1 {{this pragma cannot appear in union declaration}} | ||
#pragma STDC FP_CONTRACT ON | ||
}; | ||
|
||
class C1 { | ||
float f1; | ||
// expected-error@+1 {{this pragma cannot appear in class declaration}} | ||
#pragma STDC FP_CONTRACT ON | ||
float f2; | ||
}; |