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