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()45 int 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