aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>2024-08-16 14:43:41 +0200
committerTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>2024-08-16 16:50:24 +0200
commit479dab62b828f93d6be48241178dbf654bdd33e7 (patch)
treea8ff5923ae92e2926e838ec24e23c2484b1488b5 /gcc
parent10bf0357750972e20dc702997f2930eab1c1be17 (diff)
downloadgcc-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.C27
-rw-r--r--gcc/testsuite/g++.dg/warn/pr33738.C3
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 {