diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2016-05-19 12:27:31 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2016-05-19 12:27:31 +0000 |
commit | 4bf8dbe16aa168e50fa240d2d368d439e07208d8 (patch) | |
tree | cfecfd4d33a76c659210ab448d120749c7d863e1 /gcc | |
parent | f3510625cf2035e6876246a9689db10163e96830 (diff) | |
download | gcc-4bf8dbe16aa168e50fa240d2d368d439e07208d8.zip gcc-4bf8dbe16aa168e50fa240d2d368d439e07208d8.tar.gz gcc-4bf8dbe16aa168e50fa240d2d368d439e07208d8.tar.bz2 |
decl.c (finish_enum_value_list): Use the specified mode.
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr69669.c | 3 |
4 files changed, 24 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 81baa89..66c04a6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d493a77..7eabf53 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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++) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4f20c2c..037d140 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/c-c++-common/pr69669.c b/gcc/testsuite/c-c++-common/pr69669.c index 9940afe..ebeb410 100644 --- a/gcc/testsuite/c-c++-common/pr69669.c +++ b/gcc/testsuite/c-c++-common/pr69669.c @@ -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" } } */ |