File tree 3 files changed +27
-22
lines changed
regression/ansi-c/gcc_attributes13 3 files changed +27
-22
lines changed Original file line number Diff line number Diff line change @@ -7,13 +7,20 @@ int main()
7
7
int x ;
8
8
switch (x )
9
9
{
10
- case 1 :
11
- x = 2 ;
10
+ case 1 :
11
+ x = 2 ;
12
12
#ifdef __GNUC__
13
- __attribute__((fallthrough ));
13
+ __attribute__((fallthrough ));
14
14
#endif
15
- case 2 :
16
- x = 3 ;
15
+ case 2 :
16
+ {
17
+ x = 3 ;
18
+ #ifdef __GNUC__
19
+ __attribute__((__fallthrough__ ));
20
+ #endif
21
+ }
22
+ case 3 :
23
+ break ;
17
24
}
18
25
19
26
return 0 ;
Original file line number Diff line number Diff line change @@ -1634,6 +1634,11 @@ gcc_attribute:
1634
1634
{
1635
1635
init ($$);
1636
1636
}
1637
+ | TOK_GCC_ATTRIBUTE_FALLTHROUGH
1638
+ {
1639
+ // attribute ignored
1640
+ init ($$);
1641
+ }
1637
1642
| gcc_type_attribute
1638
1643
;
1639
1644
@@ -2299,19 +2304,7 @@ declaration_statement:
2299
2304
;
2300
2305
2301
2306
labeled_statement :
2302
- identifier_or_typedef_name ' :' gcc_attribute_specifier ' ;'
2303
- {
2304
- /* Only semicolons permitted after the attribute:
2305
- https://gcc.gnu.org/onlinedocs/gcc/Label-Attributes.html */
2306
- $$ =$2 ;
2307
- statement ($$, ID_label);
2308
- irep_idt identifier=PARSER.lookup_label(parser_stack($1 ).get(ID_C_base_name));
2309
- parser_stack ($$).set(ID_label, identifier);
2310
- // attribute ignored
2311
- statement ($3 , ID_skip);
2312
- mto ($$, $3 );
2313
- }
2314
- | identifier_or_typedef_name ' :' statement
2307
+ identifier_or_typedef_name ' :' statement
2315
2308
{
2316
2309
$$ =$2 ;
2317
2310
statement ($$, ID_label);
@@ -2346,10 +2339,14 @@ labeled_statement:
2346
2339
;
2347
2340
2348
2341
statement_attribute :
2349
- TOK_GCC_ATTRIBUTE ' ( ' ' ( ' TOK_GCC_ATTRIBUTE_FALLTHROUGH ' ) ' ' ) ' ' ; ' labeled_statement
2342
+ gcc_attribute_specifier ' ; '
2350
2343
{
2351
- // attribute ignored
2352
- $$ =$8 ;
2344
+ // Really should only be TOK_GCC_ATTRIBUTE_FALLTHROUGH or a label
2345
+ // attribute. Only semicolons permitted after the attribute:
2346
+ // https://gcc.gnu.org/onlinedocs/gcc/Label-Attributes.html
2347
+ // We ignore all such attributes.
2348
+ $$ =$1 ;
2349
+ statement ($$, ID_skip);
2353
2350
}
2354
2351
;
2355
2352
Original file line number Diff line number Diff line change @@ -1697,7 +1697,8 @@ __decltype { if(PARSER.cpp98 &&
1697
1697
" destructor" |
1698
1698
" __destructor__" { BEGIN (GCC_ATTRIBUTE3); loc (); return TOK_GCC_ATTRIBUTE_DESTRUCTOR; }
1699
1699
1700
- " fallthrough" { BEGIN (GCC_ATTRIBUTE3); loc (); return TOK_GCC_ATTRIBUTE_FALLTHROUGH; }
1700
+ " fallthrough" |
1701
+ " __fallthrough__" { BEGIN (GCC_ATTRIBUTE3); loc (); return TOK_GCC_ATTRIBUTE_FALLTHROUGH; }
1701
1702
1702
1703
" used" |
1703
1704
" __used__" { BEGIN (GCC_ATTRIBUTE3); loc (); return TOK_GCC_ATTRIBUTE_USED; }
You can’t perform that action at this time.
0 commit comments