On 6/15/20 9:20 PM, Marek Polacek wrote:
On Thu, Jun 11, 2020 at 03:32:14PM -0400, Jason Merrill wrote:
On 6/10/20 5:11 PM, Marek Polacek wrote:
Another indication that perhaps this warning is emitted too early.  We
crash because same_type_p gets a null type: we have an enumerator
without a fixed underlying type and finish_enum_value_list hasn't yet
run.  So check if the type is null before calling same_type_p.

Hmm, I wonder why we use NULL_TREE for the type of uninitialized enumerators
in a template; why not give them integer_type_node temporarily?

That breaks enum22.C:

   template <class T>
   struct A {
     enum e_ : unsigned char { Z_, E_=sizeof(Z_) };
   };

   static_assert ( A<double>::E_ == 1, "E_ should be 1");

If we give 'Z_' a type, it's no longer instantiation-dependent, so sizeof(Z_)
immediately evaluates to 4.  Whereas if it doesn't have a type, in the template
we create a SIZEOF_EXPR and only evaluate when instantiating (to 1).

This sounded like a problem big enough for me not to pursue this any further.
Do you want me to try anything else or is the original patch ok?

The original patch is OK, thanks.

Jason

Reply via email to