On 12/4/19 5:43 PM, Marek Polacek wrote:
@@ -2222,12 +2243,24 @@ reduced_constant_expression_p (tree t)
            return false;
          if (field)
            {
+         retry:
              if (idx != field)
-               return false;
+               {
+                 /* Empty class field may or may not have an initializer.  */
+                 if (is_really_empty_class (TREE_TYPE (field),
+                                            /*ignore_vptr*/false))
+                   {
+                     field = next_initializable_field (DECL_CHAIN (field));
+                     goto retry;
+                   }
+                 else
+                   return false;
+               }

I'm not as anti-goto as many people, but it would be shorter to write this as a loop:

for (; idx != field;
     field = next_initializable_field (DECL_CHAIN (field))
  if (!is_really_empty_class (TREE_TYPE (field), false))
    return false;

              field = next_initializable_field (DECL_CHAIN (field));
            }
        }
-      if (field)
+      if (field && !is_really_empty_class (TREE_TYPE (field),
+                                          /*ignore_vptr*/false))
        return false;

And I think we should loop here, too, in case there's a non-empty field at the end.

Jason

Reply via email to