1 1.16 rillig /* $NetBSD: msg_249.c,v 1.16 2024/11/13 04:32:49 rillig Exp $ */ 2 1.1 rillig # 3 "msg_249.c" 3 1.1 rillig 4 1.1 rillig // Test for message: syntax error '%s' [249] 5 1.1 rillig 6 1.14 rillig /* lint1-extra-flags: -X 351 */ 7 1.14 rillig 8 1.3 rillig /* 9 1.4 rillig * Cover the grammar rule 'top_level_declaration: error T_SEMI'. 10 1.4 rillig */ 11 1.12 rillig /* expect+1: error: syntax error '"' [249] */ 12 1.4 rillig "syntax error in top_level_declaration"; 13 1.4 rillig 14 1.4 rillig /* XXX: This is necessary to recover the yacc parser. */ 15 1.4 rillig int recover_from_semi; 16 1.4 rillig 17 1.4 rillig /* 18 1.4 rillig * Cover the grammar rule 'top_level_declaration: error T_RBRACE'. 19 1.4 rillig */ 20 1.12 rillig /* expect+1: error: syntax error '"' [249] */ 21 1.4 rillig "syntax error in top_level_declaration"} 22 1.4 rillig 23 1.4 rillig /* XXX: This is necessary to recover the yacc parser. */ 24 1.4 rillig int recover_from_rbrace; 25 1.4 rillig 26 1.4 rillig /* 27 1.3 rillig * Before func.c 1.110 from 2021-06-19, lint ran into this: 28 1.3 rillig * assertion "cstmt->c_kind == kind" failed in end_control_statement 29 1.3 rillig */ 30 1.3 rillig void 31 1.3 rillig function(void) 32 1.3 rillig { 33 1.3 rillig if (0) 34 1.16 rillig /* expect+1: warning: 'empty' statement not reached [193] */ 35 1.3 rillig ; 36 1.11 rillig /* expect+1: error: syntax error ')' [249] */ 37 1.11 rillig ); 38 1.3 rillig } 39 1.4 rillig 40 1.5 rillig /* XXX: It is unexpected that this error is not detected. */ 41 1.5 rillig "This syntax error is not detected."; 42 1.5 rillig 43 1.4 rillig /* XXX: This is necessary to recover the yacc parser. */ 44 1.5 rillig double recover_from_rparen; 45 1.5 rillig 46 1.5 rillig /* Ensure that the declaration after the syntax error is processed. */ 47 1.5 rillig double * 48 1.5 rillig access_declaration_after_syntax_error(void) 49 1.5 rillig { 50 1.5 rillig return &recover_from_rparen; 51 1.5 rillig } 52 1.6 rillig 53 1.6 rillig struct cover_member_declaration { 54 1.6 rillig /* cover 'noclass_declmods ... notype_member_decls' */ 55 1.6 rillig const noclass_declmods; 56 1.6 rillig 57 1.6 rillig /* cover 'noclass_declspecs ...' */ 58 1.6 rillig const int noclass_declspecs; 59 1.6 rillig 60 1.8 rillig /* cover 'add_type_qualifier_list end_type' */ 61 1.7 rillig /* expect+1: error: syntax error 'member without type' [249] */ 62 1.6 rillig const; 63 1.6 rillig }; 64 1.10 rillig 65 1.10 rillig /* 66 1.10 rillig * At this point, lint assumes that the following code is still in the 67 1.10 rillig * function 'access_declaration_after_syntax_error'. 68 1.10 rillig */ 69 1.10 rillig 70 1.10 rillig int gcc_statement_expression_1 = ({ 71 1.10 rillig unused_label: 72 1.10 rillig 1; 73 1.10 rillig 1; 74 1.15 rillig /* expect+2: error: syntax error 'labels are only valid inside a function' [249] */ 75 1.15 rillig /* expect+1: error: non-constant initializer [177] */ 76 1.10 rillig }); 77 1.10 rillig 78 1.10 rillig /* Even another function definition does not help. */ 79 1.10 rillig void 80 1.10 rillig try_to_recover(void) 81 1.10 rillig { 82 1.10 rillig } 83 1.10 rillig 84 1.10 rillig int gcc_statement_expression_2 = ({ 85 1.10 rillig unused_label: 86 1.10 rillig 1; 87 1.10 rillig 1; 88 1.15 rillig /* expect+2: error: syntax error 'labels are only valid inside a function' [249] */ 89 1.15 rillig /* expect+1: error: non-constant initializer [177] */ 90 1.10 rillig }); 91