[Bug c++/30895] New: [4.1/4.2/4.3 regression] ICE with complex values in template parameter

reichelt at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Feb 20 21:03:00 GMT 2007


The following code snippet triggers an ICE since GCC 3.4.0:

=====================================
template<int> struct A {};

template<typename T> struct B
{
  A<T(0i)> a1;
  A<T(0i)> a2;
};
=====================================

bug.cc:6: internal compiler error: in cp_tree_equal, at cp/tree.c:1858
Please submit a full bug report, [etc.]

Before we got the message:
bug.cc:5: sorry, unimplemented: `complex_cst' not supported by dump_expr
bug.cc:5: sorry, unimplemented: `complex_cst' not supported by dump_expr
bug.cc:6: sorry, unimplemented: `complex_cst' not supported by dump_expr
bug.cc:6: sorry, unimplemented: `complex_cst' not supported by dump_expr

I'm not quite sure whether the code is valid or not.
It does compile with "0.0" instead of "0i".
So if we consider complex types as basic arithmetic types,
the code should be valid IMHO.
OTOH, we don't allow casts from complex int to int.
But if we don't instantiate B this shouldn't matter IMHO.


-- 
           Summary: [4.1/4.2/4.3 regression] ICE with complex values in
                    template parameter
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code, monitored
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: reichelt at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30895



More information about the Gcc-bugs mailing list