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
16extern 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
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