Home | History | Annotate | Line # | Download | only in lint1
msg_132.c revision 1.6
      1  1.6  rillig /*	$NetBSD: msg_132.c,v 1.6 2021/08/25 22:04:52 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_132.c"
      3  1.1  rillig 
      4  1.1  rillig // Test for message: conversion from '%s' to '%s' may lose accuracy [132]
      5  1.1  rillig 
      6  1.3  rillig /*
      7  1.3  rillig  * NetBSD's default lint flags only include a single -a, which only flags
      8  1.3  rillig  * narrowing conversions from long.  To get warnings for all narrowing
      9  1.3  rillig  * conversions, -aa needs to be given more than once.
     10  1.3  rillig  *
     11  1.3  rillig  * https://gnats.netbsd.org/14531
     12  1.3  rillig  */
     13  1.3  rillig 
     14  1.3  rillig /* lint1-extra-flags: -aa */
     15  1.3  rillig 
     16  1.3  rillig typedef unsigned char u8;
     17  1.3  rillig typedef unsigned short u16;
     18  1.3  rillig typedef unsigned int u32;
     19  1.3  rillig typedef unsigned long long u64;
     20  1.3  rillig 
     21  1.3  rillig typedef signed char i8;
     22  1.3  rillig typedef signed short i16;
     23  1.3  rillig typedef signed int i32;
     24  1.3  rillig typedef signed long long i64;
     25  1.3  rillig 
     26  1.3  rillig void
     27  1.3  rillig convert_unsigned(u8 v8, u16 v16, u32 v32, u64 v64)
     28  1.3  rillig {
     29  1.3  rillig 	v8 = v16;		/* expect: 132 */
     30  1.3  rillig 	v8 = v32;		/* expect: 132 */
     31  1.3  rillig 	v8 = v64;		/* expect: 132 */
     32  1.3  rillig 
     33  1.3  rillig 	v16 = v8;
     34  1.3  rillig 	v16 = v32;		/* expect: 132 */
     35  1.3  rillig 	v16 = v64;		/* expect: 132 */
     36  1.3  rillig 
     37  1.3  rillig 	v32 = v8;
     38  1.3  rillig 	v32 = v16;
     39  1.3  rillig 	v32 = v64;		/* expect: 132 */
     40  1.3  rillig 
     41  1.3  rillig 	v64 = v8;
     42  1.3  rillig 	v64 = v16;
     43  1.3  rillig 	v64 = v32;
     44  1.3  rillig }
     45  1.3  rillig 
     46  1.3  rillig void
     47  1.3  rillig convert_signed(i8 v8, i16 v16, i32 v32, i64 v64)
     48  1.3  rillig {
     49  1.3  rillig 	v8 = v16;		/* expect: 132 */
     50  1.3  rillig 	v8 = v32;		/* expect: 132 */
     51  1.3  rillig 	v8 = v64;		/* expect: 132 */
     52  1.3  rillig 
     53  1.3  rillig 	v16 = v8;
     54  1.3  rillig 	v16 = v32;		/* expect: 132 */
     55  1.3  rillig 	v16 = v64;		/* expect: 132 */
     56  1.3  rillig 
     57  1.3  rillig 	v32 = v8;
     58  1.3  rillig 	v32 = v16;
     59  1.3  rillig 	v32 = v64;		/* expect: 132 */
     60  1.3  rillig 
     61  1.3  rillig 	v64 = v8;
     62  1.3  rillig 	v64 = v16;
     63  1.3  rillig 	v64 = v32;
     64  1.3  rillig }
     65  1.4  rillig 
     66  1.5  rillig /*
     67  1.5  rillig  * Before tree.c 1.268 from 2021-04-06, lint wrongly warned that conversion to
     68  1.5  rillig  * _Bool might lose accuracy.  C99 6.3.1.2 defines a special conversion rule
     69  1.5  rillig  * from scalar to _Bool though.
     70  1.5  rillig  */
     71  1.4  rillig _Bool
     72  1.4  rillig to_bool(long a, long b)
     73  1.4  rillig {
     74  1.4  rillig 	/* seen in fp_lib.h, function wideRightShiftWithSticky */
     75  1.5  rillig 	return a | b;
     76  1.4  rillig }
     77  1.6  rillig 
     78  1.6  rillig /* ARGSUSED */
     79  1.6  rillig const char *
     80  1.6  rillig cover_build_plus_minus(const char *arr, double idx)
     81  1.6  rillig {
     82  1.6  rillig 	/* expect+3: error: operands of '+' have incompatible types (pointer != double) [107] */
     83  1.6  rillig 	/* expect+2: warning: function 'cover_build_plus_minus' expects to return value [214] */
     84  1.6  rillig 	if (idx > 0.0)
     85  1.6  rillig 		return arr + idx;
     86  1.6  rillig 	return arr + (unsigned int)idx;
     87  1.6  rillig }
     88