1 1.10 rillig /* $NetBSD: d_lint_assert.c,v 1.10 2023/08/02 18:51:25 rillig Exp $ */ 2 1.1 rillig # 3 "d_lint_assert.c" 3 1.1 rillig 4 1.1 rillig /* 5 1.1 rillig * Trigger the various assertions in the lint1 code. Several of them are 6 1.1 rillig * just hard to trigger, but not impossible. 7 1.1 rillig */ 8 1.1 rillig 9 1.7 rillig /* lint1-extra-flags: -X 351 */ 10 1.7 rillig 11 1.1 rillig enum { 12 1.2 rillig // Before decl.c 1.118 from 2021-01-10: 13 1.1 rillig // lint: assertion "sym->s_scl == EXTERN || sym->s_scl == STATIC" 14 1.1 rillig // failed in check_global_variable at decl.c:3135 15 1.1 rillig // near d_lint_assert.c:14 16 1.2 rillig A = +++ 17 1.5 rillig }; 18 1.5 rillig /* expect-1: error: syntax error '}' [249] */ 19 1.4 rillig 20 1.4 rillig /* 21 1.4 rillig * Before decl.c 1.196 from 2021-07-10, lint ran into an assertion failure 22 1.10 rillig * for 'sym->s_type != NULL' in declare_argument (now declare_parameter). 23 1.4 rillig */ 24 1.6 rillig /* expect+1: warning: old-style declaration; add 'int' [1] */ 25 1.4 rillig c(void()); 26 1.8 rillig 27 1.8 rillig 28 1.9 rillig // As of 2023-07-15, replacing 'const' with 'unknown_type_modifier' leads to a 29 1.9 rillig // crash. When the '}' from the 'switch' statement is processed, symbols that 30 1.9 rillig // are already freed are still in the symbol table. To reproduce the crash, 31 1.9 rillig // run: 32 1.9 rillig // make -s -DDEBUG DBG="-O0 -g" 33 1.9 rillig // MALLOC_OPTIONS='JA' MALLOC_CONF='junk:true' ./lint1 -Sy \ 34 1.9 rillig // ../../../tests/usr.bin/xlint/lint1/d_lint_assert.c 35 1.9 rillig static inline void 36 1.9 rillig f(void) 37 1.9 rillig { 38 1.9 rillig int i = 3; 39 1.9 rillig 40 1.9 rillig for (const char *p = "";; ) { 41 1.9 rillig switch (i) { 42 1.9 rillig case 3:; 43 1.9 rillig } 44 1.9 rillig } 45 1.9 rillig } 46