1 // RUN: %clang %s -o %t && %run %t 2>&1 | FileCheck %s 2 3 #include <ctype.h> 4 #include <limits.h> 5 #include <locale.h> 6 #include <stddef.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 check_ctype(void)10void check_ctype(void) { 11 unsigned char c; 12 volatile size_t i = 0; /* a dummy variable to prevent optimizing code out */ 13 14 for (c = 0; c < UCHAR_MAX; c++) 15 i += !!isalpha(c); 16 for (c = 0; c < UCHAR_MAX; c++) 17 i += !!isascii(c); 18 for (c = 0; c < UCHAR_MAX; c++) 19 i += !!isblank(c); 20 for (c = 0; c < UCHAR_MAX; c++) 21 i += !!iscntrl(c); 22 for (c = 0; c < UCHAR_MAX; c++) 23 i += !!isdigit(c); 24 for (c = 0; c < UCHAR_MAX; c++) 25 i += !!isgraph(c); 26 for (c = 0; c < UCHAR_MAX; c++) 27 i += !!islower(c); 28 for (c = 0; c < UCHAR_MAX; c++) 29 i += !!isprint(c); 30 for (c = 0; c < UCHAR_MAX; c++) 31 i += !!ispunct(c); 32 for (c = 0; c < UCHAR_MAX; c++) 33 i += !!isspace(c); 34 for (c = 0; c < UCHAR_MAX; c++) 35 i += !!isupper(c); 36 for (c = 0; c < UCHAR_MAX; c++) 37 i += !!isxdigit(c); 38 for (c = 0; c < UCHAR_MAX; c++) 39 i += !!isalnum(c); 40 41 for (c = 0; c < UCHAR_MAX; c++) 42 i += !!tolower(c); 43 for (c = 0; c < UCHAR_MAX; c++) 44 i += !!toupper(c); 45 46 i += !!isalpha(EOF); 47 i += !!isascii(EOF); 48 i += !!isblank(EOF); 49 i += !!iscntrl(EOF); 50 i += !!isdigit(EOF); 51 i += !!isgraph(EOF); 52 i += !!islower(EOF); 53 i += !!isprint(EOF); 54 i += !!ispunct(EOF); 55 i += !!isspace(EOF); 56 i += !!isupper(EOF); 57 i += !!isxdigit(EOF); 58 i += !!isalnum(EOF); 59 60 i += !!tolower(EOF); 61 i += !!toupper(EOF); 62 63 if (i) 64 return; 65 else 66 return; 67 } 68 main(int argc,char ** argv)69int main(int argc, char **argv) { 70 check_ctype(); 71 72 setlocale(LC_ALL, ""); 73 74 check_ctype(); 75 76 setlocale(LC_ALL, "en_US.UTF-8"); 77 78 check_ctype(); 79 80 setlocale(LC_CTYPE, "pl_PL.UTF-8"); 81 82 check_ctype(); 83 84 printf("OK\n"); 85 86 // CHECK: OK 87 88 return 0; 89 } 90