poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] pkl: Disallow labels in pinned structs


From: Jose E. Marchesi
Subject: Re: [PATCH 2/2] pkl: Disallow labels in pinned structs
Date: Tue, 18 Jan 2022 13:37:54 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Mohammad.

This is OK for master.
Thanks!

> 2022-01-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pkl-typify.c (pkl_typify1_ps_type_struct): Disallow
>       labels in pinned structs.
>       * doc/poke.texi (Pinned Structs): Update.
>       * testsuite/poke.pkl/scons-label-diag-1.pk: New test.
>       * testsuite/Makefile.am (EXTRA_DIST): Update.
> ---
>  ChangeLog                                |  8 ++++++++
>  doc/poke.texi                            |  1 +
>  libpoke/pkl-typify.c                     | 21 ++++++++++++++++++++-
>  testsuite/Makefile.am                    |  1 +
>  testsuite/poke.pkl/scons-label-diag-1.pk |  7 +++++++
>  5 files changed, 37 insertions(+), 1 deletion(-)
>  create mode 100644 testsuite/poke.pkl/scons-label-diag-1.pk
>
> diff --git a/ChangeLog b/ChangeLog
> index 1778c324..5cb20652 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,11 @@
> +2022-01-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pkl-typify.c (pkl_typify1_ps_type_struct): Disallow
> +     labels in pinned structs.
> +     * doc/poke.texi (Pinned Structs): Update.
> +     * testsuite/poke.pkl/scons-label-diag-1.pk: New test.
> +     * testsuite/Makefile.am (EXTRA_DIST): Update.
> +
>  2022-01-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pkl-typify.c (pkl_typify1_ps_type_struct): Disallow
> diff --git a/doc/poke.texi b/doc/poke.texi
> index 6e221f03..88e2996e 100644
> --- a/doc/poke.texi
> +++ b/doc/poke.texi
> @@ -10810,6 +10810,7 @@ type Ctf_Stype_V1 =
>  @end example
>  
>  Note that integral structs cannot be pinned.  @xref{Integral Structs}.
> +And field labels are not allowed in pinned structs.
>  
>  @node The OFFSET variable
>  @subsection The OFFSET variable
> diff --git a/libpoke/pkl-typify.c b/libpoke/pkl-typify.c
> index b9609cec..411e6392 100644
> --- a/libpoke/pkl-typify.c
> +++ b/libpoke/pkl-typify.c
> @@ -1786,7 +1786,7 @@ PKL_PHASE_END_HANDLER
>  
>     Pinned unions are not allowed.
>  
> -   Labels are not allowed in integral structs.
> +   Labels are not allowed in integral structs and pinned structs.
>     Optional fields are not allowed in integral structs.  */
>  
>  PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_type_struct)
> @@ -1876,6 +1876,25 @@ PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_type_struct)
>        PKL_TYPIFY_PAYLOAD->errors++;
>        PKL_PASS_ERROR;
>      }
> +
> +  if (PKL_AST_TYPE_S_PINNED_P (struct_type))
> +    {
> +      for (field = PKL_AST_TYPE_S_ELEMS (struct_type);
> +           field;
> +           field = PKL_AST_CHAIN (field))
> +        {
> +          if (PKL_AST_CODE (field) != PKL_AST_STRUCT_TYPE_FIELD)
> +            continue;
> +
> +          if (PKL_AST_STRUCT_TYPE_FIELD_LABEL (field))
> +            {
> +              PKL_ERROR (PKL_AST_LOC (field),
> +                         "labels are not allowed in pinned structs");
> +              PKL_TYPIFY_PAYLOAD->errors++;
> +              PKL_PASS_ERROR;
> +            }
> +        }
> +    }
>  }
>  PKL_PHASE_END_HANDLER
>  
> diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
> index 357897ba..24f75ea8 100644
> --- a/testsuite/Makefile.am
> +++ b/testsuite/Makefile.am
> @@ -1788,6 +1788,7 @@ EXTRA_DIST = \
>    poke.pkl/scons-int-struct-4.pk \
>    poke.pkl/scons-int-struct-5.pk \
>    poke.pkl/scons-label-1.pk \
> +  poke.pkl/scons-label-diag-1.pk \
>    poke.pkl/scons-offset-1.pk \
>    poke.pkl/scons-offset-2.pk \
>    poke.pkl/scons-offset-3.pk \
> diff --git a/testsuite/poke.pkl/scons-label-diag-1.pk 
> b/testsuite/poke.pkl/scons-label-diag-1.pk
> new file mode 100644
> index 00000000..b20704c5
> --- /dev/null
> +++ b/testsuite/poke.pkl/scons-label-diag-1.pk
> @@ -0,0 +1,7 @@
> +/* { dg-do compile } */
> +
> +type T = pinned struct
> +  {
> +    uint32 x;
> +    uint16 y @ 2#B; /* { dg-error "pinned" } */
> +  };



reply via email to

[Prev in Thread] Current Thread [Next in Thread]