msg_342.c revision 1.2
11.2Srillig/* $NetBSD: msg_342.c,v 1.2 2021/07/25 22:31:22 rillig Exp $ */ 21.1Srillig# 3 "msg_341.c" 31.1Srillig 41.1Srillig// Test for message: argument to '%s' must be cast to 'unsigned char', not to '%s' [342] 51.1Srillig 61.1Srillig/* 71.1Srillig * Ensure that the functions from <ctype.h> are called with the correct 81.1Srillig * argument. 91.1Srillig */ 101.1Srillig 111.1Srillig/* NetBSD 9.99.81, <ctype.h> */ 121.1Srilligextern const unsigned short *_ctype_tab_; 131.1Srilligextern const short *_tolower_tab_; 141.1Srilligextern const short *_toupper_tab_; 151.2Srilligint isalnum(int); 161.2Srilligint isalpha(int); 171.2Srilligint isblank(int); 181.2Srilligint iscntrl(int); 191.2Srilligint isdigit(int); 201.2Srilligint isgraph(int); 211.2Srilligint islower(int); 221.2Srilligint isprint(int); 231.2Srilligint ispunct(int); 241.1Srilligint isspace(int); 251.2Srilligint isupper(int); 261.2Srilligint isxdigit(int); 271.2Srilligint tolower(int); 281.2Srilligint toupper(int); 291.1Srillig 301.1Srilligvoid sink(int); 311.1Srillig 321.1Srilligvoid 331.2Srilligcover_is_ctype_function(char c) 341.2Srillig{ 351.2Srillig /* expect+1: warning: argument to 'isalnum' must be 'unsigned char' or EOF, not 'char' [341] */ 361.2Srillig isalnum(c); 371.2Srillig /* expect+1: warning: argument to 'isalpha' must be 'unsigned char' or EOF, not 'char' [341] */ 381.2Srillig isalpha(c); 391.2Srillig /* expect+1: warning: argument to 'isblank' must be 'unsigned char' or EOF, not 'char' [341] */ 401.2Srillig isblank(c); 411.2Srillig /* expect+1: warning: argument to 'iscntrl' must be 'unsigned char' or EOF, not 'char' [341] */ 421.2Srillig iscntrl(c); 431.2Srillig /* expect+1: warning: argument to 'isdigit' must be 'unsigned char' or EOF, not 'char' [341] */ 441.2Srillig isdigit(c); 451.2Srillig /* expect+1: warning: argument to 'isgraph' must be 'unsigned char' or EOF, not 'char' [341] */ 461.2Srillig isgraph(c); 471.2Srillig /* expect+1: warning: argument to 'islower' must be 'unsigned char' or EOF, not 'char' [341] */ 481.2Srillig islower(c); 491.2Srillig /* expect+1: warning: argument to 'isprint' must be 'unsigned char' or EOF, not 'char' [341] */ 501.2Srillig isprint(c); 511.2Srillig /* expect+1: warning: argument to 'ispunct' must be 'unsigned char' or EOF, not 'char' [341] */ 521.2Srillig ispunct(c); 531.2Srillig /* expect+1: warning: argument to 'isspace' must be 'unsigned char' or EOF, not 'char' [341] */ 541.2Srillig isspace(c); 551.2Srillig /* expect+1: warning: argument to 'isupper' must be 'unsigned char' or EOF, not 'char' [341] */ 561.2Srillig isupper(c); 571.2Srillig /* expect+1: warning: argument to 'isxdigit' must be 'unsigned char' or EOF, not 'char' [341] */ 581.2Srillig isxdigit(c); 591.2Srillig /* expect+1: warning: argument to 'tolower' must be 'unsigned char' or EOF, not 'char' [341] */ 601.2Srillig tolower(c); 611.2Srillig /* expect+1: warning: argument to 'toupper' must be 'unsigned char' or EOF, not 'char' [341] */ 621.2Srillig toupper(c); 631.2Srillig} 641.2Srillig 651.2Srilligvoid 661.1Srilligfunction_call_char(char c) 671.1Srillig{ 681.1Srillig 691.1Srillig /* expect+1: argument to 'isspace' must be 'unsigned char' or EOF, not 'char' */ 701.1Srillig (isspace)(c); 711.1Srillig 721.1Srillig /* This is the only allowed form. */ 731.1Srillig isspace((unsigned char)c); 741.1Srillig 751.1Srillig /* The cast to 'int' is redundant, it doesn't hurt though. */ 761.1Srillig isspace((int)(unsigned char)c); 771.1Srillig 781.1Srillig /* expect+1: argument to 'isspace' must be cast to 'unsigned char', not to 'int' */ 791.1Srillig isspace((int)c); 801.1Srillig 811.1Srillig /* expect+1: argument to 'isspace' must be cast to 'unsigned char', not to 'unsigned int' */ 821.1Srillig isspace((unsigned int)c); 831.1Srillig} 841.1Srillig 851.1Srillig/* 861.1Srillig * If the expression starts with type 'unsigned char', it can be cast to any 871.1Srillig * other type. Chances are low enough that the cast is to 'char', which would 881.1Srillig * be the only bad type. 891.1Srillig */ 901.1Srilligvoid 911.1Srilligfunction_call_unsigned_char(unsigned char c) 921.1Srillig{ 931.1Srillig 941.1Srillig (isspace)(c); 951.1Srillig isspace((unsigned char)c); 961.1Srillig isspace((int)c); 971.1Srillig isspace((unsigned int)c); 981.1Srillig} 991.1Srillig 1001.1Srillig/* When used in a loop of fgetc, the type is already 'int'. That's fine. */ 1011.1Srilligvoid 1021.1Srilligfunction_call_int(int c) 1031.1Srillig{ 1041.1Srillig 1051.1Srillig isspace(c); 1061.1Srillig} 1071.1Srillig 1081.1Srilligvoid 1091.1Srilligmacro_invocation_NetBSD(char c) 1101.1Srillig{ 1111.1Srillig 1121.1Srillig /* expect+1: argument to 'function from <ctype.h>' must be 'unsigned char' or EOF, not 'char' */ 1131.1Srillig sink(((int)((_ctype_tab_ + 1)[(c)] & 0x0040))); 1141.1Srillig 1151.1Srillig /* This is the only allowed form. */ 1161.1Srillig sink(((int)((_ctype_tab_ + 1)[((unsigned char)c)] & 0x0040))); 1171.1Srillig 1181.1Srillig /* expect+1: argument to 'function from <ctype.h>' must be cast to 'unsigned char', not to 'int' */ 1191.1Srillig sink(((int)((_ctype_tab_ + 1)[((int)c)] & 0x0040))); 1201.1Srillig 1211.1Srillig /* expect+1: argument to 'function from <ctype.h>' must be cast to 'unsigned char', not to 'unsigned int' */ 1221.1Srillig sink(((int)((_ctype_tab_ + 1)[((unsigned int)c)] & 0x0040))); 1231.1Srillig} 124