1*9e211f35Srillig /* $NetBSD: msg_351.c,v 1.8 2024/03/01 17:22:55 rillig Exp $ */ 2b2baa501Srillig # 3 "msg_351.c" 3b2baa501Srillig 4*9e211f35Srillig // Test for message: missing%s header declaration for '%s' [351] 5b2baa501Srillig 60878a3d7Srillig /* 762962fdeSrillig * Warn about declarations or definitions for functions or objects that are 862962fdeSrillig * visible outside the current translation unit but do not have a previous 90878a3d7Srillig * declaration in a header file. 100878a3d7Srillig * 110878a3d7Srillig * All symbols that are used across translation units should be declared in a 120878a3d7Srillig * header file, to ensure consistent types. 130878a3d7Srillig * 140878a3d7Srillig * Since the storage class 'extern' is redundant for functions but not for 1562962fdeSrillig * objects, the diagnostic omits it for functions. 160878a3d7Srillig * 170878a3d7Srillig * https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmissing-declarations 180878a3d7Srillig */ 190878a3d7Srillig 2062962fdeSrillig /* expect+1: warning: missing header declaration for 'func_decl' [351] */ 2162962fdeSrillig void func_decl(void); 2262962fdeSrillig /* expect+1: warning: missing header declaration for 'extern_func_decl' [351] */ 2362962fdeSrillig extern void extern_func_decl(void); 2462962fdeSrillig static int static_func_decl(void); 25b2baa501Srillig 26e6298b92Srillig /* expect+3: warning: missing header declaration for 'func_def' [351] */ 2762962fdeSrillig void func_def(void)2862962fdeSrilligfunc_def(void) 2962962fdeSrillig { 3062962fdeSrillig } 3162962fdeSrillig 32e6298b92Srillig /* expect+3: warning: missing header declaration for 'extern_func_def' [351] */ 3362962fdeSrillig extern void extern_func_def(void)3462962fdeSrilligextern_func_def(void) 3562962fdeSrillig { 3662962fdeSrillig } 3762962fdeSrillig 3862962fdeSrillig /* expect+2: warning: static function 'static_func_def' unused [236] */ 3962962fdeSrillig static void static_func_def(void)4062962fdeSrilligstatic_func_def(void) 4162962fdeSrillig { 4262962fdeSrillig } 4362962fdeSrillig 4462962fdeSrillig /* expect+1: warning: missing 'extern' header declaration for 'obj_decl' [351] */ 4562962fdeSrillig extern int obj_decl; 4662962fdeSrillig /* expect+1: warning: missing 'extern' header declaration for 'obj_def' [351] */ 4762962fdeSrillig int obj_def; 4862962fdeSrillig static int static_obj_def; 49b2baa501Srillig 50b2baa501Srillig 51b2baa501Srillig # 18 "header.h" 1 3 4 52b2baa501Srillig 5362962fdeSrillig void func_decl(void); 5462962fdeSrillig extern void extern_func_decl(void); 5562962fdeSrillig static int static_func_decl(void); 56b2baa501Srillig 5762962fdeSrillig void func_def(void); 5862962fdeSrillig extern void extern_func_def(void); 5962962fdeSrillig static void static_func_def(void); 60b2baa501Srillig 6162962fdeSrillig void func_def_ok(void); 6262962fdeSrillig extern void extern_func_def_ok(void); 6362962fdeSrillig static void static_func_def_ok(void); 64da9016a3Srillig 6562962fdeSrillig extern int obj_decl; 6662962fdeSrillig int obj_def; 6762962fdeSrillig static int static_obj_def; 6862962fdeSrillig 6962962fdeSrillig # 70 "msg_351.c" 2 7062962fdeSrillig 7162962fdeSrillig void func_decl(void); 7262962fdeSrillig extern void extern_func_decl(void); 7362962fdeSrillig /* expect+1: warning: static function 'static_func_decl' declared but not defined [290] */ 7462962fdeSrillig static int static_func_decl(void); 7562962fdeSrillig 7662962fdeSrillig void func_def_ok(void)7762962fdeSrilligfunc_def_ok(void) 7862962fdeSrillig { 7962962fdeSrillig } 8062962fdeSrillig 8162962fdeSrillig extern void extern_func_def_ok(void)8262962fdeSrilligextern_func_def_ok(void) 8362962fdeSrillig { 8462962fdeSrillig } 8562962fdeSrillig 8662962fdeSrillig /* expect+2: warning: static function 'static_func_def_ok' unused [236] */ 8762962fdeSrillig static void static_func_def_ok(void)8862962fdeSrilligstatic_func_def_ok(void) 8962962fdeSrillig { 9062962fdeSrillig } 9162962fdeSrillig 9262962fdeSrillig extern int obj_decl; 9362962fdeSrillig int obj_def; 9462962fdeSrillig /* expect+1: warning: static variable 'static_obj_def' unused [226] */ 9562962fdeSrillig static int static_obj_def; 9662962fdeSrillig 9762962fdeSrillig 9862962fdeSrillig /* 9962962fdeSrillig * Do not warn about the temporary identifier generated for the object from the 10062962fdeSrillig * compound literal. 10162962fdeSrillig */ 1020878a3d7Srillig /* expect+1: warning: missing 'extern' header declaration for 'dbl_ptr' [351] */ 103da9016a3Srillig double *dbl_ptr = &(double) { 0.0 }; 104