Hi,

This patch has been backported, bootstrapped and regression tested on the
releases/gcc-9 and releases/gcc-10 branches.

Regards
Iain.

On 25/06/2020 17:38, Iain Buclaw wrote:
> Hi,
> 
> This patch fixes an ICE in uda_attribute_p when looking up an unknown
> attribute.  The target attribute table is not guaranteed to be set by
> all backends.
> 
> Bootstrapped and regression tested on x86_64-linux-gnu, and committed to
> mainline.
> 
> Regards
> Iain.
> 
> ---
> gcc/d/ChangeLog:
> 
>       PR d/95173
>       * d-attribs.cc (uda_attribute_p): Don't search target attribute table
>       if NULL.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR d/95173
>       * gdc.dg/pr95173.d: New test.
> ---
>  gcc/d/d-attribs.cc             |  9 ++++++---
>  gcc/testsuite/gdc.dg/pr95173.d | 10 ++++++++++
>  2 files changed, 16 insertions(+), 3 deletions(-)
>  create mode 100644 gcc/testsuite/gdc.dg/pr95173.d
> 
> diff --git a/gcc/d/d-attribs.cc b/gcc/d/d-attribs.cc
> index 964f59f96f4..f4086c0f0ee 100644
> --- a/gcc/d/d-attribs.cc
> +++ b/gcc/d/d-attribs.cc
> @@ -216,10 +216,13 @@ uda_attribute_p (const char *name)
>       return true;
>      }
>  
> -  for (const attribute_spec *p = targetm.attribute_table; p->name; p++)
> +  if (targetm.attribute_table)
>      {
> -      if (get_identifier (p->name) == ident)
> -     return true;
> +      for (const attribute_spec *p = targetm.attribute_table; p->name; p++)
> +     {
> +       if (get_identifier (p->name) == ident)
> +         return true;
> +     }
>      }
>  
>    return false;
> diff --git a/gcc/testsuite/gdc.dg/pr95173.d b/gcc/testsuite/gdc.dg/pr95173.d
> new file mode 100644
> index 00000000000..2a4b2ed8232
> --- /dev/null
> +++ b/gcc/testsuite/gdc.dg/pr95173.d
> @@ -0,0 +1,10 @@
> +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95173
> +// { dg-do compile }
> +// { dg-options "-Wattributes" }
> +
> +import gcc.attribute;
> +
> +@attribute("foo") // { dg-warning "unknown attribute .foo." }
> +void f95173() 
> +{
> +}
> 

Reply via email to