1 1.8 rillig /* $NetBSD: msg_351.c,v 1.8 2024/03/01 17:22:55 rillig Exp $ */ 2 1.1 rillig # 3 "msg_351.c" 3 1.1 rillig 4 1.8 rillig // Test for message: missing%s header declaration for '%s' [351] 5 1.1 rillig 6 1.4 rillig /* 7 1.6 rillig * Warn about declarations or definitions for functions or objects that are 8 1.6 rillig * visible outside the current translation unit but do not have a previous 9 1.4 rillig * declaration in a header file. 10 1.4 rillig * 11 1.4 rillig * All symbols that are used across translation units should be declared in a 12 1.4 rillig * header file, to ensure consistent types. 13 1.4 rillig * 14 1.4 rillig * Since the storage class 'extern' is redundant for functions but not for 15 1.6 rillig * objects, the diagnostic omits it for functions. 16 1.4 rillig * 17 1.4 rillig * https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmissing-declarations 18 1.4 rillig */ 19 1.4 rillig 20 1.6 rillig /* expect+1: warning: missing header declaration for 'func_decl' [351] */ 21 1.6 rillig void func_decl(void); 22 1.6 rillig /* expect+1: warning: missing header declaration for 'extern_func_decl' [351] */ 23 1.6 rillig extern void extern_func_decl(void); 24 1.6 rillig static int static_func_decl(void); 25 1.6 rillig 26 1.7 rillig /* expect+3: warning: missing header declaration for 'func_def' [351] */ 27 1.6 rillig void 28 1.6 rillig func_def(void) 29 1.6 rillig { 30 1.6 rillig } 31 1.6 rillig 32 1.7 rillig /* expect+3: warning: missing header declaration for 'extern_func_def' [351] */ 33 1.6 rillig extern void 34 1.6 rillig extern_func_def(void) 35 1.6 rillig { 36 1.6 rillig } 37 1.6 rillig 38 1.6 rillig /* expect+2: warning: static function 'static_func_def' unused [236] */ 39 1.6 rillig static void 40 1.6 rillig static_func_def(void) 41 1.6 rillig { 42 1.6 rillig } 43 1.6 rillig 44 1.6 rillig /* expect+1: warning: missing 'extern' header declaration for 'obj_decl' [351] */ 45 1.6 rillig extern int obj_decl; 46 1.6 rillig /* expect+1: warning: missing 'extern' header declaration for 'obj_def' [351] */ 47 1.6 rillig int obj_def; 48 1.6 rillig static int static_obj_def; 49 1.1 rillig 50 1.1 rillig 51 1.1 rillig # 18 "header.h" 1 3 4 52 1.2 rillig 53 1.6 rillig void func_decl(void); 54 1.6 rillig extern void extern_func_decl(void); 55 1.6 rillig static int static_func_decl(void); 56 1.6 rillig 57 1.6 rillig void func_def(void); 58 1.6 rillig extern void extern_func_def(void); 59 1.6 rillig static void static_func_def(void); 60 1.6 rillig 61 1.6 rillig void func_def_ok(void); 62 1.6 rillig extern void extern_func_def_ok(void); 63 1.6 rillig static void static_func_def_ok(void); 64 1.6 rillig 65 1.6 rillig extern int obj_decl; 66 1.6 rillig int obj_def; 67 1.6 rillig static int static_obj_def; 68 1.6 rillig 69 1.6 rillig # 70 "msg_351.c" 2 70 1.6 rillig 71 1.6 rillig void func_decl(void); 72 1.6 rillig extern void extern_func_decl(void); 73 1.6 rillig /* expect+1: warning: static function 'static_func_decl' declared but not defined [290] */ 74 1.6 rillig static int static_func_decl(void); 75 1.6 rillig 76 1.6 rillig void 77 1.6 rillig func_def_ok(void) 78 1.6 rillig { 79 1.6 rillig } 80 1.6 rillig 81 1.6 rillig extern void 82 1.6 rillig extern_func_def_ok(void) 83 1.6 rillig { 84 1.6 rillig } 85 1.6 rillig 86 1.6 rillig /* expect+2: warning: static function 'static_func_def_ok' unused [236] */ 87 1.6 rillig static void 88 1.6 rillig static_func_def_ok(void) 89 1.6 rillig { 90 1.6 rillig } 91 1.6 rillig 92 1.6 rillig extern int obj_decl; 93 1.6 rillig int obj_def; 94 1.6 rillig /* expect+1: warning: static variable 'static_obj_def' unused [226] */ 95 1.6 rillig static int static_obj_def; 96 1.6 rillig 97 1.6 rillig 98 1.6 rillig /* 99 1.6 rillig * Do not warn about the temporary identifier generated for the object from the 100 1.6 rillig * compound literal. 101 1.6 rillig */ 102 1.4 rillig /* expect+1: warning: missing 'extern' header declaration for 'dbl_ptr' [351] */ 103 1.2 rillig double *dbl_ptr = &(double) { 0.0 }; 104