[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] pkl: emit error for `int<1>' types
From: |
Mohammad-Reza Nabipoor |
Subject: |
[PATCH] pkl: emit error for `int<1>' types |
Date: |
Mon, 23 Jan 2023 22:41:14 +0100 |
For signed integers, we need, at least, two bits: one for sign and
one for the magnitude.
2023-01-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-typify.c (pkl_typify1_ps_type_integral): Reject
`int<1>' as invalid type.
* testsuite/poke.cmd/sdiff-10.pk: s/int<1>/uint<1>/.
* testsuite/poke.map/maps-int-structs-6.pk: Likewise.
* testsuite/poke.map/maps-int-structs-11.pk: Likewise.
* testsuite/poke.pkl/cast-integers-12.pk: Likewise.
* testsuite/poke.pkl/eq-integers-5.pk: Likewise.
* testsuite/poke.pkl/eq-offsets-8.pk: Likewise.
* testsuite/poke.pkl/mod-offsets-3.pk: Likewise.
* testsuite/poke.pkl/mod-offsets-4.pk: Likewise.
* testsuite/poke.pkl/int-type.pk: Remove `int<1>'.
* testsuite/poke.pkl/int-type-diag-4.pk: New test.
* testsuite/Makefile.am (EXTRA_DIST): Add new test.
---
ChangeLog | 16 ++++++++++++++++
libpoke/pkl-typify.c | 7 +++++--
testsuite/Makefile.am | 1 +
testsuite/poke.cmd/sdiff-10.pk | 2 +-
testsuite/poke.map/maps-int-structs-11.pk | 6 +++---
testsuite/poke.map/maps-int-structs-6.pk | 6 +++---
testsuite/poke.pkl/cast-integers-12.pk | 8 ++++----
testsuite/poke.pkl/eq-integers-5.pk | 4 ++--
testsuite/poke.pkl/eq-offsets-8.pk | 4 ++--
testsuite/poke.pkl/int-type-diag-4.pk | 4 ++++
testsuite/poke.pkl/int-type.pk | 1 -
testsuite/poke.pkl/mod-offsets-3.pk | 2 +-
testsuite/poke.pkl/mod-offsets-4.pk | 2 +-
13 files changed, 43 insertions(+), 20 deletions(-)
create mode 100644 testsuite/poke.pkl/int-type-diag-4.pk
diff --git a/ChangeLog b/ChangeLog
index 4365991e..65cff30d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2023-01-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
+
+ * libpoke/pkl-typify.c (pkl_typify1_ps_type_integral): Reject
+ `int<1>' as invalid type.
+ * testsuite/poke.cmd/sdiff-10.pk: s/int<1>/uint<1>/.
+ * testsuite/poke.map/maps-int-structs-6.pk: Likewise.
+ * testsuite/poke.map/maps-int-structs-11.pk: Likewise.
+ * testsuite/poke.pkl/cast-integers-12.pk: Likewise.
+ * testsuite/poke.pkl/eq-integers-5.pk: Likewise.
+ * testsuite/poke.pkl/eq-offsets-8.pk: Likewise.
+ * testsuite/poke.pkl/mod-offsets-3.pk: Likewise.
+ * testsuite/poke.pkl/mod-offsets-4.pk: Likewise.
+ * testsuite/poke.pkl/int-type.pk: Remove `int<1>'.
+ * testsuite/poke.pkl/int-type-diag-4.pk: New test.
+ * testsuite/Makefile.am (EXTRA_DIST): Add new test.
+
2023-01-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* poked/poked.c (poked_version): Don't use year range.
diff --git a/libpoke/pkl-typify.c b/libpoke/pkl-typify.c
index e4173386..7df71a63 100644
--- a/libpoke/pkl-typify.c
+++ b/libpoke/pkl-typify.c
@@ -1696,12 +1696,15 @@ PKL_PHASE_END_HANDLER
PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_type_integral)
{
pkl_ast_node type = PKL_PASS_NODE;
+ int signed_p = PKL_AST_TYPE_I_SIGNED_P (type);
+ int width_min = signed_p ? 2 : 1;
- if (PKL_AST_TYPE_I_SIZE (type) < 1
+ if (PKL_AST_TYPE_I_SIZE (type) < width_min
|| PKL_AST_TYPE_I_SIZE (type) > 64)
{
PKL_ERROR (PKL_AST_LOC (type),
- "the width of an integral type should be in the [1,64]
range");
+ "the width of %s integral type should be in the [%d,64] "
+ "range", signed_p ? "a signed" : "an unsigned", width_min);
PKL_TYPIFY_PAYLOAD->errors++;
PKL_PASS_ERROR;
}
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 7afd92e2..cff03d63 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -1595,6 +1595,7 @@ EXTRA_DIST = \
poke.pkl/int-type-diag-1.pk \
poke.pkl/int-type-diag-2.pk \
poke.pkl/int-type-diag-3.pk \
+ poke.pkl/int-type-diag-4.pk \
poke.pkl/int-type.pk \
poke.pkl/int-union-1.pk \
poke.pkl/int-union-2.pk \
diff --git a/testsuite/poke.cmd/sdiff-10.pk b/testsuite/poke.cmd/sdiff-10.pk
index 6abab82a..8dfcf340 100644
--- a/testsuite/poke.cmd/sdiff-10.pk
+++ b/testsuite/poke.cmd/sdiff-10.pk
@@ -2,7 +2,7 @@
/* { dg-data {c*} {0x00 0x27 0x28 0x00 0x22 0x33 0x44 0xbc} foo } */
/* { dg-data {c*} {0x01 0x29 0x30 0x31 0x00 0x33 0x9a 0xbc} bar } */
-type Foo = struct { int<2> a; int<2> b; int<3> c; int<1> d; };
+type Foo = struct { int<2> a; int<2> b; int<3> c; uint<1> d; };
type Bar = struct { byte x; Foo y; };
/* { dg-command {.file foo} } */
diff --git a/testsuite/poke.map/maps-int-structs-11.pk
b/testsuite/poke.map/maps-int-structs-11.pk
index d8b52a61..73e03071 100644
--- a/testsuite/poke.map/maps-int-structs-11.pk
+++ b/testsuite/poke.map/maps-int-structs-11.pk
@@ -6,7 +6,7 @@
type Foo =
struct int<16>
{
- int<1> s;
+ uint<1> s;
offset<uint<15>,3> m;
};
@@ -14,8 +14,8 @@ type Foo =
/* { dg-command { .set endian little } } */
/* { dg-command { Foo @ 0#B } } */
-/* { dg-output "Foo {s=\\(int<1>\\) 0b0,m=\\(uint<15>\\) 0b010001110000000#3}"
} */
+/* { dg-output "Foo {s=\\(uint<1>\\) 0b0,m=\\(uint<15>\\)
0b010001110000000#3}" } */
/* { dg-command { .set endian big } } */
/* { dg-command { Foo @ 0#B } } */
-/* { dg-output "\nFoo {s=\\(int<1>\\) 0b1,m=\\(uint<15>\\)
0b000000000100011#3}" } */
+/* { dg-output "\nFoo {s=\\(uint<1>\\) 0b1,m=\\(uint<15>\\)
0b000000000100011#3}" } */
diff --git a/testsuite/poke.map/maps-int-structs-6.pk
b/testsuite/poke.map/maps-int-structs-6.pk
index a4f58019..547b597e 100644
--- a/testsuite/poke.map/maps-int-structs-6.pk
+++ b/testsuite/poke.map/maps-int-structs-6.pk
@@ -6,7 +6,7 @@
type Foo =
struct int<16>
{
- int<1> s;
+ uint<1> s;
uint<15> m;
};
@@ -14,8 +14,8 @@ type Foo =
/* { dg-command { .set endian little } } */
/* { dg-command { Foo @ 0#B } } */
-/* { dg-output "Foo {s=\\(int<1>\\) 0b0,m=\\(uint<15>\\) 0b010001110000000}" }
*/
+/* { dg-output "Foo {s=\\(uint<1>\\) 0b0,m=\\(uint<15>\\) 0b010001110000000}"
} */
/* { dg-command { .set endian big } } */
/* { dg-command { Foo @ 0#B } } */
-/* { dg-output "\nFoo {s=\\(int<1>\\) 0b1,m=\\(uint<15>\\) 0b000000000100011}"
} */
+/* { dg-output "\nFoo {s=\\(uint<1>\\) 0b1,m=\\(uint<15>\\)
0b000000000100011}" } */
diff --git a/testsuite/poke.pkl/cast-integers-12.pk
b/testsuite/poke.pkl/cast-integers-12.pk
index c89f15b5..2db0e8ad 100644
--- a/testsuite/poke.pkl/cast-integers-12.pk
+++ b/testsuite/poke.pkl/cast-integers-12.pk
@@ -2,9 +2,9 @@
var x = 0;
-/* { dg-command { x as int<1> } } */
-/* { dg-output "\\(int<1>\\) 0" } */
+/* { dg-command { x as uint<1> } } */
+/* { dg-output "\\(uint<1>\\) 0" } */
/* For constant folding: */
-/* { dg-command { 0 as int<1> } } */
-/* { dg-output "\n\\(int<1>\\) 0" } */
+/* { dg-command { 0 as uint<1> } } */
+/* { dg-output "\n\\(uint<1>\\) 0" } */
diff --git a/testsuite/poke.pkl/eq-integers-5.pk
b/testsuite/poke.pkl/eq-integers-5.pk
index f8997b15..cf8f78ea 100644
--- a/testsuite/poke.pkl/eq-integers-5.pk
+++ b/testsuite/poke.pkl/eq-integers-5.pk
@@ -3,9 +3,9 @@
var x = 10U;
var y = 10U;
-/* { dg-command { x as int<1> == y } } */
+/* { dg-command { x as uint<1> == y } } */
/* { dg-output "0" } */
/* For constant folding: */
-/* { dg-command { 10U as int<1> == 10U } } */
+/* { dg-command { 10U as uint<1> == 10U } } */
/* { dg-output "\n0" } */
diff --git a/testsuite/poke.pkl/eq-offsets-8.pk
b/testsuite/poke.pkl/eq-offsets-8.pk
index 783370f1..b5b6c4ac 100644
--- a/testsuite/poke.pkl/eq-offsets-8.pk
+++ b/testsuite/poke.pkl/eq-offsets-8.pk
@@ -3,9 +3,9 @@
var x = 10U#B;
var y = 10U#B;
-/* { dg-command { x as offset<int<1>,B> == y } } */
+/* { dg-command { x as offset<uint<1>,B> == y } } */
/* { dg-output "0" } */
/* For constant folding: */
-/* { dg-command { 10U#B as offset<int<1>,B> == 10U#B } } */
+/* { dg-command { 10U#B as offset<uint<1>,B> == 10U#B } } */
/* { dg-output "\n0" } */
diff --git a/testsuite/poke.pkl/int-type-diag-4.pk
b/testsuite/poke.pkl/int-type-diag-4.pk
new file mode 100644
index 00000000..3844bb9e
--- /dev/null
+++ b/testsuite/poke.pkl/int-type-diag-4.pk
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+
+type int1 =
+ int<1>; /* { dg-error "width of a signed integral.*.2,64. range" } */
diff --git a/testsuite/poke.pkl/int-type.pk b/testsuite/poke.pkl/int-type.pk
index b234a04e..c7612e12 100644
--- a/testsuite/poke.pkl/int-type.pk
+++ b/testsuite/poke.pkl/int-type.pk
@@ -2,7 +2,6 @@
/* Type constructor. */
-type int1 = int<1>;
type uint1 = uint<1>;
type int2 = int<2>;
diff --git a/testsuite/poke.pkl/mod-offsets-3.pk
b/testsuite/poke.pkl/mod-offsets-3.pk
index fcf02060..4aeb064b 100644
--- a/testsuite/poke.pkl/mod-offsets-3.pk
+++ b/testsuite/poke.pkl/mod-offsets-3.pk
@@ -1,6 +1,6 @@
/* { dg-do run } */
-type Packet = struct { int<1>[5]; };
+type Packet = struct { uint<1>[5]; };
var x = 2#Packet;
/* { dg-command { x % 1#B } } */
diff --git a/testsuite/poke.pkl/mod-offsets-4.pk
b/testsuite/poke.pkl/mod-offsets-4.pk
index 3be900a9..653fe2cf 100644
--- a/testsuite/poke.pkl/mod-offsets-4.pk
+++ b/testsuite/poke.pkl/mod-offsets-4.pk
@@ -1,6 +1,6 @@
/* { dg-do run } */
-type Packet = struct { int<1>[5]; };
+type Packet = struct { uint<1>[5]; };
type Byte = byte;
var x = 2#Packet;
--
2.39.1
- [PATCH] pkl: emit error for `int<1>' types,
Mohammad-Reza Nabipoor <=