diff options
author | Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | 2024-08-16 14:43:41 +0200 |
---|---|---|
committer | Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | 2024-08-16 16:50:24 +0200 |
commit | 479dab62b828f93d6be48241178dbf654bdd33e7 (patch) | |
tree | a8ff5923ae92e2926e838ec24e23c2484b1488b5 /gcc | |
parent | 10bf0357750972e20dc702997f2930eab1c1be17 (diff) | |
download | gcc-479dab62b828f93d6be48241178dbf654bdd33e7.zip gcc-479dab62b828f93d6be48241178dbf654bdd33e7.tar.gz gcc-479dab62b828f93d6be48241178dbf654bdd33e7.tar.bz2 |
testsuite: Verify -fshort-enums and -fno-short-enums in pr33738.C
For some targets, like Cortex-M on arm-none-eabi, the -fshort-enums is
enabled by default. For these targets, the test case fails as
sizeof(Alpha) < sizeof(int).
To make the test case behave identical for targets that does enable
-fshort-enums and those that does not, add -fno-short-enums in the test
case and verify that the warning is not emitted. Then also create a copy
and run the test with -fshort-enums and verify that the warning is
emitted.
Regtested on x86_64-pc-linux-gnu and arm-none-eabi.
gcc/testsuite/ChangeLog:
* g++.dg/warn/pr33738.C: Added -fno-short-enums.
* g++.dg/warn/pr33738-2.C: Duplicate g++.dg/warn/pr33738.C with
-fshort-enums and removed xfail.
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/warn/pr33738-2.C | 27 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/pr33738.C | 3 |
2 files changed, 29 insertions, 1 deletions
diff --git a/gcc/testsuite/g++.dg/warn/pr33738-2.C b/gcc/testsuite/g++.dg/warn/pr33738-2.C new file mode 100644 index 0000000..84bbdae --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/pr33738-2.C @@ -0,0 +1,27 @@ +// { dg-do run } +// { dg-options "-O2 -Wtype-limits -fstrict-enums -fshort-enums" } +extern void link_error (void); + +enum Alpha { + ZERO = 0, ONE, TWO, THREE +}; + +Alpha a2; + +int m1 = -1; +int GetM1() { + return m1; +} + +int main() { + a2 = static_cast<Alpha>(GetM1()); + if (a2 == -1) { // { dg-warning "always false due" } */ + link_error (); + } + a2 = static_cast<Alpha>(GetM1()); + if (-1 == a2) { // { dg-warning "always false due" } */ + link_error (); + } + return 0; +} + diff --git a/gcc/testsuite/g++.dg/warn/pr33738.C b/gcc/testsuite/g++.dg/warn/pr33738.C index 73e98d5..d899f91 100644 --- a/gcc/testsuite/g++.dg/warn/pr33738.C +++ b/gcc/testsuite/g++.dg/warn/pr33738.C @@ -1,5 +1,6 @@ // { dg-do run } -// { dg-options "-O2 -Wtype-limits -fstrict-enums" } +// { dg-prune-output "use of enum values across objects may fail" } +// { dg-options "-O2 -Wtype-limits -fstrict-enums -fno-short-enums" } extern void link_error (void); enum Alpha { |