Home | History | Annotate | Line # | Download | only in lint1
msg_351.c revision 1.6
      1  1.6  rillig /*	$NetBSD: msg_351.c,v 1.6 2023/07/07 00:25:23 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_351.c"
      3  1.1  rillig 
      4  1.4  rillig // Test for message 351: 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.6  rillig // TODO: missing header declaration
     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.6  rillig // TODO: missing header declaration
     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