decl.c (finish_enum_value_list): Use the specified mode.
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Thu, 19 May 2016 12:27:31 +0000 (12:27 +0000)
committerBernd Edlinger <edlinger@gcc.gnu.org>
Thu, 19 May 2016 12:27:31 +0000 (12:27 +0000)
2016-05-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * decl.c (finish_enum_value_list): Use the specified mode.

testsuite:
2016-05-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * c-c++-common/pr69669.c: Check the used mode.

From-SVN: r236458

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr69669.c

index 81baa89a30d18b98f1c28d22d15615d12d9a38a0..66c04a6f359c9971bac4d411b1823a754c4c9d1a 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * decl.c (finish_enum_value_list): Use the specified mode.
+
 2016-05-18  Jason Merrill  <jason@redhat.com>
 
        * pt.c (value_dependent_expression_p): Tweak new cases to better
index d493a776a0c26f40d3b00084e0d5f2b408bc4193..7eabf53847f07405fe308c03cca0dc1b899c4346 100644 (file)
@@ -13346,6 +13346,19 @@ finish_enum_value_list (tree enumtype)
       use_short_enum = flag_short_enums
         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
 
+      /* If the precision of the type was specified with an attribute and it
+        was too small, give an error.  Otherwise, use it.  */
+      if (TYPE_PRECISION (enumtype))
+       {
+         if (precision > TYPE_PRECISION (enumtype))
+           error ("specified mode too small for enumeral values");
+         else
+           {
+             use_short_enum = true;
+             precision = TYPE_PRECISION (enumtype);
+           }
+       }
+
       for (itk = (use_short_enum ? itk_char : itk_int);
            itk != itk_none;
            itk++)
index 4f20c2cd63edfc75843a2bc139c9808c1a66e4df..037d1401e3a84cfda1ebfef47e72b87e3b10b6e3 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * c-c++-common/pr69669.c: Check the used mode.
+
 2016-05-19  Maxim Ostapenko  <m.ostapenko@samsung.com>
 
        PR sanitizer/64354
index 9940afe8ffb8a67cccde8db1146852da01a69379..ebeb4109ffa122752fddf1f08fec6ab6092ea609 100644 (file)
@@ -1,5 +1,6 @@
 /* PR c/69669 */
 /* { dg-do compile } */
+/* { dg-options "-fdump-rtl-final" } */
 
 enum __attribute__((mode(QI))) E { F = 1 };
 
@@ -8,3 +9,5 @@ foo (enum E *x, int y)
 {
   *x = (enum E) y;
 }
+
+/* { dg-final { scan-rtl-dump-times "mem:QI" 1 "final" } } */