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