On arm-none-eabi, g++.dg/vect/pr115278.cc fails with:
FAIL: g++.dg/vect/pr115278.cc -std=c++14 (test for excess errors)
Excess errors:
/path/to/gcc.git/gcc/testsuite/g++.dg/vect/pr115278.cc:24:28: error: invalid
conversion from 'volatile unsigned int*' to 'volatile uint32_t*' {aka 'volatile
long unsigned int*'} [-fpermissive]
g++.dg/vect/pr115278.cc -std=c++14 : dump file does not exist
UNRESOLVED: g++.dg/vect/pr115278.cc -std=c++14 scan-tree-dump-times optimized
"\\*WRITE[^\r\n]* ={v} " 2
The problem is that the cast used to initialize the WRITE variable
doesn't match the underlying type of uint32_t. Fix by using
__UINT32_TYPE__ instead.
Verified that after this change, the test still fails when reverting the
fix for PR115278.
Tested on:
- Host x86_64-linux-gnu, target arm-unknown-eabi
- Native armv8l-linux-gnueabihf
- Native aarch64-linux-gnu
- Native x86_64-linux-gnu
gcc/testsuite/
* g++.dg/vect/pr115278.cc: Use __UINT32_TYPE__ in cast used to
initialize WRITE.
---
gcc/testsuite/g++.dg/vect/pr115278.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/testsuite/g++.dg/vect/pr115278.cc
b/gcc/testsuite/g++.dg/vect/pr115278.cc
index 331075fb2781..39a7537a3e6a 100644
--- a/gcc/testsuite/g++.dg/vect/pr115278.cc
+++ b/gcc/testsuite/g++.dg/vect/pr115278.cc
@@ -2,6 +2,7 @@
// { dg-require-effective-target c++11 }
// { dg-additional-options "-fdump-tree-optimized" }
+#include <climits>
#include <cstdint>
const int runs = 92;
@@ -21,7 +22,7 @@ union BitfieldStructUnion {
BitfieldStructUnion(uint32_t value_low, uint32_t value_high) :
value_low(value_low), value_high(value_high) {}
};
-volatile uint32_t *WRITE = (volatile unsigned*)0x42;
+volatile uint32_t *WRITE = (volatile __UINT32_TYPE__*)0x42;
void buggy() {
for (int i = 0; i < runs; i++) {