poke-devel
[Top][All Lists]
Advanced

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

[PATCH 1/2] pkl: Disallow pinned unions


From: Mohammad-Reza Nabipoor
Subject: [PATCH 1/2] pkl: Disallow pinned unions
Date: Tue, 18 Jan 2022 11:07:21 +0330

2022-01-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * libpoke/pkl-typify.c (pkl_typify1_ps_type_struct): Disallow
        pinned unions.
        * doc/poke.texi (Unions): Update.
        * testsuite/poke.pkl/pinned-union-1.pk: New test.
        * testsuite/Makefile.am (EXTRA_DIST): Update.
---
 ChangeLog                            |  8 ++++++++
 doc/poke.texi                        |  2 ++
 libpoke/pkl-typify.c                 | 11 +++++++++++
 testsuite/Makefile.am                |  1 +
 testsuite/poke.pkl/pinned-union-1.pk |  8 ++++++++
 5 files changed, 30 insertions(+)
 create mode 100644 testsuite/poke.pkl/pinned-union-1.pk

diff --git a/ChangeLog b/ChangeLog
index 7b8d8be2..1778c324 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
+       pinned unions.
+       * doc/poke.texi (Unions): Update.
+       * testsuite/poke.pkl/pinned-union-1.pk: New test.
+       * testsuite/Makefile.am (EXTRA_DIST): Update.
+
 2022-01-17  Jose E. Marchesi  <jemarch@gnu.org>
 
        * poke/pk-scrabble.pk (scrabble): Move variable declaration up to
diff --git a/doc/poke.texi b/doc/poke.texi
index ee9bbb57..6e221f03 100644
--- a/doc/poke.texi
+++ b/doc/poke.texi
@@ -11182,6 +11182,8 @@ means.  Alternatives are considered in turn, in written 
order, and the
 first alternative that can be used without triggering a constraint
 violation exception is selected.
 
+Note that, unlike structs, unions cannot be pinned.
+
 @node Union Constructors
 @subsection Union Constructors
 
diff --git a/libpoke/pkl-typify.c b/libpoke/pkl-typify.c
index 1b9fad18..b9609cec 100644
--- a/libpoke/pkl-typify.c
+++ b/libpoke/pkl-typify.c
@@ -1784,6 +1784,8 @@ PKL_PHASE_END_HANDLER
    The total size declared in the integral struct should exactly match
    the size of all the contained fields.
 
+   Pinned unions are not allowed.
+
    Labels are not allowed in integral structs.
    Optional fields are not allowed in integral structs.  */
 
@@ -1865,6 +1867,15 @@ PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_type_struct)
           PKL_PASS_ERROR;
         }
     }
+
+  if (PKL_AST_TYPE_S_PINNED_P (struct_type)
+      && PKL_AST_TYPE_S_UNION_P (struct_type))
+    {
+      PKL_ERROR (PKL_AST_LOC (struct_type),
+                 "unions are not allowed to be pinned");
+      PKL_TYPIFY_PAYLOAD->errors++;
+      PKL_PASS_ERROR;
+    }
 }
 PKL_PHASE_END_HANDLER
 
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 4a0b632d..357897ba 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -1532,6 +1532,7 @@ EXTRA_DIST = \
   poke.pkl/or-int-struct-2.pk \
   poke.pkl/or-int-struct-3.pk \
   poke.pkl/pinned-int-struct-1.pk \
+  poke.pkl/pinned-union-1.pk \
   poke.pkl/pos-diag-1.pk \
   poke.pkl/pos-integers-1.pk \
   poke.pkl/pos-integers-2.pk \
diff --git a/testsuite/poke.pkl/pinned-union-1.pk 
b/testsuite/poke.pkl/pinned-union-1.pk
new file mode 100644
index 00000000..008f4bf8
--- /dev/null
+++ b/testsuite/poke.pkl/pinned-union-1.pk
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+
+type Foo =
+  pinned union /* { dg-error "pinned" } */
+  {
+    int<16> hi;
+    uint<16> lo;
+  };
-- 
2.34.1




reply via email to

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