Hi Joseph,

On Wed, Oct 16, 2024 at 10:30:36AM GMT, Joseph Myers wrote:
> On Wed, 16 Oct 2024, Alejandro Colomar wrote:
> 
> > +  if (type_code != ARRAY_TYPE)
> > +    {
> > +      error_at (loc, "invalid application of %<countof%> to type %qT", 
> > type);
> > +      return error_mark_node;
> > +    }
> > +  if (!COMPLETE_TYPE_P (type))
> > +    {
> > +      error_at (loc,
> > +           "invalid application of %<countof%> to incomplete type %qT",
> 
> It is never appropriate, regardless of the actual operator naming, for a 
> diagnostic to refer to an operator name that doesn't exist at all (such as 
> countof instead of __countof__ in this patch).

Thanks.  I'll fix that.

Cheers,
Alex

> 
> > @@ -8992,12 +8992,17 @@ start_struct (location_t loc, enum tree_code code, 
> > tree name,
> >       within a statement expr used within sizeof, et. al.  This is not
> >       terribly serious as C++ doesn't permit statement exprs within
> >       sizeof anyhow.  */
> > -  if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
> > +  if (warn_cxx_compat
> > +      && (in_sizeof || in_typeof || in_alignof || in_countof))
> >      warning_at (loc, OPT_Wc___compat,
> >             "defining type in %qs expression is invalid in C++",
> >             (in_sizeof
> >              ? "sizeof"
> > -            : (in_typeof ? "typeof" : "alignof")));
> > +            : (in_typeof
> > +               ? "typeof"
> > +               : (in_alignof
> > +                  ? "alignof"
> > +                  : "countof"))));
> 
> Likewise.
> 
> > @@ -10135,12 +10140,17 @@ start_enum (location_t loc, struct 
> > c_enum_contents *the_enum, tree name,
> >    /* FIXME: This will issue a warning for a use of a type defined
> >       within sizeof in a statement expr.  This is not terribly serious
> >       as C++ doesn't permit statement exprs within sizeof anyhow.  */
> > -  if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
> > +  if (warn_cxx_compat
> > +      && (in_sizeof || in_typeof || in_alignof || in_countof))
> >      warning_at (loc, OPT_Wc___compat,
> >             "defining type in %qs expression is invalid in C++",
> >             (in_sizeof
> >              ? "sizeof"
> > -            : (in_typeof ? "typeof" : "alignof")));
> > +            : (in_typeof
> > +               ? "typeof"
> > +               : (in_alignof
> > +                  ? "alignof"
> > +                  : "countof"))));
> 
> Likewise.
> 
> >  static struct c_expr
> > -c_parser_sizeof_expression (c_parser *parser)
> > +c_parser_sizeof_or_countof_expression (c_parser *parser, enum rid rid)
> >  {
> > +  const char *op_name = (rid == RID_COUNTOF) ? "countof" : "sizeof";
> 
> Likewise.
> 
> > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
> > index 302c3299ede..82f31668e37 100644
> > --- a/gcc/doc/extend.texi
> > +++ b/gcc/doc/extend.texi
> > @@ -10555,6 +10555,36 @@ If the operand of the @code{__alignof__} 
> > expression is a function,
> >  the expression evaluates to the alignment of the function which may
> >  be specified by attribute @code{aligned} (@pxref{Common Function 
> > Attributes}).
> >  
> > +@node countof
> > +@section Determining the Number of Elements of Arrays
> > +@cindex countof
> > +@cindex number of elements
> 
> Likewise, for node name and index entry.
> 
> -- 
> Joseph S. Myers
> [email protected]
> 

-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to