xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_351.c (revision 9e211f359920a7b95ff05505ca6ee27fa088acb5)
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)2862962fdeSrillig func_def(void)
2962962fdeSrillig {
3062962fdeSrillig }
3162962fdeSrillig 
32e6298b92Srillig /* expect+3: warning: missing header declaration for 'extern_func_def' [351] */
3362962fdeSrillig extern void
extern_func_def(void)3462962fdeSrillig extern_func_def(void)
3562962fdeSrillig {
3662962fdeSrillig }
3762962fdeSrillig 
3862962fdeSrillig /* expect+2: warning: static function 'static_func_def' unused [236] */
3962962fdeSrillig static void
static_func_def(void)4062962fdeSrillig static_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)7762962fdeSrillig func_def_ok(void)
7862962fdeSrillig {
7962962fdeSrillig }
8062962fdeSrillig 
8162962fdeSrillig extern void
extern_func_def_ok(void)8262962fdeSrillig extern_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)8862962fdeSrillig static_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