1 /* Copyright (C) 2001 Free Software Foundation, Inc. */ 2 3 /* { dg-do run } */ 4 /* { dg-options "-Wno-multichar -fsigned-char" } */ 5 6 /* This tests how overly-long multichar charconsts are truncated, and 7 whether "short" multichar charconsts are incorrectly sign extended 8 (regardless of char signedness). Preprocessor is used so that we 9 have only one place where the too long warning is generated, so 10 that the test works for all targets. 11 12 Neil Booth, 8 May 2002. */ 13 14 #include <limits.h> 15 16 extern void abort (void); 17 18 #if INT_MAX == 32767 19 # define LONG_CHARCONST '!\234a' 20 # define SHORT_CHARCONST '\234a' 21 # define POS_CHARCONST '\1' 22 #elif INT_MAX == 2147483647 23 # define LONG_CHARCONST '!\234abc' 24 # define SHORT_CHARCONST '\234abc' 25 # define POS_CHARCONST '\234a' 26 #elif INT_MAX == 9223372036854775807 27 # define LONG_CHARCONST '!\234abcdefg' 28 # define SHORT_CHARCONST '\234abcdefg' 29 # define POS_CHARCONST '\234a' 30 #else 31 /* Target int size not handled, do something that won't fail. */ 32 # define LONG_CHARCONST '\234a' 33 # define SHORT_CHARCONST '\234a' 34 # define POS_CHARCONST '\1' 35 #endif 36 37 #if POS_CHARCONST < 0 38 # error Charconst incorrectly sign-extended 39 #endif 40 41 #if LONG_CHARCONST != SHORT_CHARCONST /* { dg-warning "too long" } */ 42 # error Overly long charconst truncates wrongly for preprocessor 43 #endif 44 main()45int main () 46 { 47 if (POS_CHARCONST < 0) 48 abort (); 49 if (LONG_CHARCONST != SHORT_CHARCONST) /* { dg-warning "too long" } */ 50 abort (); 51 return 0; 52 } 53