diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ffaf4aa2c25..c7a4bed57fb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-04-26 Alexandre Oliva + + * gcc.dg/enum1.c: New test. + 2002-04-26 Mark Mitchell PR c++/6497 diff --git a/gcc/testsuite/g++.dg/abi/enum1.C b/gcc/testsuite/g++.dg/abi/enum1.C index 13138bd645b..32e52fe0f5e 100644 --- a/gcc/testsuite/g++.dg/abi/enum1.C +++ b/gcc/testsuite/g++.dg/abi/enum1.C @@ -9,7 +9,7 @@ enum foo foo3 = 0xf0fffffffffffffeULL }; -int main (int i) +int main () { if (sizeof (enum foo) != sizeof (unsigned long long)) std::abort (); diff --git a/gcc/testsuite/gcc.dg/enum1.c b/gcc/testsuite/gcc.dg/enum1.c new file mode 100644 index 00000000000..0f4587ff656 --- /dev/null +++ b/gcc/testsuite/gcc.dg/enum1.c @@ -0,0 +1,23 @@ +/* { dg-do run } */ +/* { dg-options "-std=gnu89" } */ + +/* In standard C, enumeration constants always have type int. If they + are not representables are int, they're ill-formed. In GNU C, we + give such ill-formed constructs well-defined meaning. Make sure it + works. */ + +#include + +enum foo +{ + foo1 = 0, + foo2 = 0xffffffffffffffffULL, + foo3 = 0xf0fffffffffffffeULL +}; + +int main () +{ + if (sizeof (enum foo) != sizeof (unsigned long long)) + abort (); + exit (0); +}