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++) {

Reply via email to