(I was attempted to push this via our obvious role, and IIRC Richi 
pre-approved such changes a few years ago. At the same time I'm 
wondering why nobody else picked this up earlier?)

We currently issue a good deal of warnings of the following kind:

  In file included from /scratch/tmp/gerald/GCC-HEAD/gcc/coretypes.h:500:
  .../GCC-HEAD/gcc/poly-int.h:378:1: warning: 'poly_int' defined as a
  struct template here but previously declared as a class template; this
  is valid, but may result in linker errors under the Microsoft C++ ABI
  [-Wmismatched-tags]
    378 | struct poly_int
        | ^
  .../GCC-HEAD/gcc/poly-int.h:32:38: note: did you mean struct here?
     32 | template<unsigned int N, typename T> class poly_int;
        |                                      ^~~~~
        |                                      struct

A `grep "'poly_int' defined as a struct template" | cut -d: -f1 | uniq -c`
shows 749 issue for a typical bootstrap. 

Addressing this brings down the bootstrap log by 8.5% - from 80454 lines 
down to 73613.

Gerald

---
 gcc/poly-int.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/poly-int.h b/gcc/poly-int.h
index 77f78752e74..d99f63b671f 100644
--- a/gcc/poly-int.h
+++ b/gcc/poly-int.h
@@ -374,7 +374,7 @@ template<> struct poly_int_fullness<true> { using type = 
poly_int_full; };
 /* A class containing polynomial integers.  The polynomial has N coefficients
    of type C, and N - 1 indeterminates.  */
 template<unsigned int N, typename C>
-struct poly_int
+class poly_int
 {
 public:
   poly_int () = default;
-- 
2.51.1

Reply via email to