public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] testsuite: Handle default_packed for gcc.dg/builtin-object-size-20.c
@ 2022-06-23 21:21 Dimitar Dimitrov
  2022-06-24  6:55 ` Richard Biener
  0 siblings, 1 reply; 2+ messages in thread
From: Dimitar Dimitrov @ 2022-06-23 21:21 UTC (permalink / raw)
  To: gcc-patches

The gcc.dg/builtin-object-size-20.c test case assumes that the target
inserts padding between structure members.  Obviously it fails for
targets which pack structures by default.

Split the cases into two tests, so that the ones requiring structure
padding can be skipped for default_packed targets.

Ok for trunk?

gcc/testsuite/ChangeLog:

	* gcc.dg/builtin-object-size-20.c: Remove cases which
	work on default_packed targets.
	* gcc.dg/builtin-object-size-22.c: New test with the cases
	removed above.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
---
 gcc/testsuite/gcc.dg/builtin-object-size-20.c | 64 +--------------
 gcc/testsuite/gcc.dg/builtin-object-size-22.c | 79 +++++++++++++++++++
 2 files changed, 81 insertions(+), 62 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/builtin-object-size-22.c

diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-20.c b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
index bed973c2c77..f40e3dcc1a9 100644
--- a/gcc/testsuite/gcc.dg/builtin-object-size-20.c
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
@@ -1,7 +1,8 @@
 /* PR middle-end/92815 - spurious -Wstringop-overflow writing into
    a flexible array of an extern struct
    { dg-do compile }
-   { dg-options "-O -Wall -fdump-tree-optimized" } */
+   { dg-options "-O -Wall -fdump-tree-optimized" }
+   { dg-skip-if "test assumes that structs have padding" { default_packed } } */
 
 #define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
 #define bos0(expr) __builtin_object_size (expr, 1)
@@ -18,44 +19,6 @@ typedef __SIZE_TYPE__  size_t;
 extern void fail (int);
 
 
-/* Verify sizes of a struct with a flexible array member and no padding.  */
-
-struct ACX { char n, a[]; };
-
-struct ACX ac0 = { };
-struct ACX ac1 = { 1, { 1 } };
-struct ACX ac2 = { 2, { 1, 2 } };
-struct ACX ac3 = { 3, { 1, 2, 3 } };
-
-extern struct ACX eacx;
-
-void facx (void)
-{
-  ASSERT (bos0 (&ac0) == sizeof ac0);
-  ASSERT (bos0 (&ac1) == 2);
-  ASSERT (bos0 (&ac2) == 3);
-  ASSERT (bos0 (&ac3) == 4);
-  ASSERT (bos0 (&eacx) == (size_t)-1);
-
-  ASSERT (bos1 (&ac0) == sizeof ac0);
-  ASSERT (bos1 (&ac1) == 2);
-  ASSERT (bos1 (&ac2) == 3);
-  ASSERT (bos1 (&ac3) == 4);
-  ASSERT (bos1 (&eacx) == (size_t)-1);
-
-  ASSERT (bos2 (&ac0) == sizeof ac0);
-  ASSERT (bos2 (&ac1) == 2);
-  ASSERT (bos2 (&ac2) == 3);
-  ASSERT (bos2 (&ac3) == 4);
-  ASSERT (bos2 (&eacx) == sizeof eacx);
-
-  ASSERT (bos3 (&ac0) == sizeof ac0);
-  ASSERT (bos3 (&ac1) == 2);
-  ASSERT (bos3 (&ac2) == 3);
-  ASSERT (bos3 (&ac3) == 4);
-  ASSERT (bos3 (&eacx) == sizeof eacx);
-}
-
 
 
 /* Verify sizes of a struct with a flexible array member and 1 byte
@@ -289,27 +252,4 @@ void fai64cx (void)
   ASSERT (bos3 (&eai64cx) == sizeof eai64cx);
 }
 
-
-/* Also verify sizes of a struct with a zero length array member.  */
-
-struct A0C0 { char n, a[0]; };
-
-struct A0C0 a0c0 = { };
-extern struct A0C0 ea0c0;
-
-void fa0c0 (void)
-{
-  ASSERT (bos0 (&a0c0) == sizeof a0c0);
-  ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
-
-  ASSERT (bos1 (&a0c0) == sizeof a0c0);
-  ASSERT (bos1 (&a0c0) == sizeof ea0c0);
-
-  ASSERT (bos2 (&a0c0) == sizeof a0c0);
-  ASSERT (bos2 (&a0c0) == sizeof ea0c0);
-
-  ASSERT (bos3 (&a0c0) == sizeof a0c0);
-  ASSERT (bos3 (&a0c0) == sizeof ea0c0);
-}
-
 /* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-22.c b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
new file mode 100644
index 00000000000..1e55229c949
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
@@ -0,0 +1,79 @@
+/* PR middle-end/92815 - a variant of gcc.dg/builtin-object-size-20.c
+   prepared for all targets, irregardless if they pack or not
+   the structs by default.
+   { dg-do compile }
+   { dg-options "-O -Wall -fdump-tree-optimized" } */
+
+#define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
+#define bos0(expr) __builtin_object_size (expr, 1)
+#define bos1(expr) __builtin_object_size (expr, 1)
+#define bos2(expr) __builtin_object_size (expr, 2)
+#define bos3(expr) __builtin_object_size (expr, 3)
+
+typedef __SIZE_TYPE__  size_t;
+
+
+extern void fail (int);
+
+
+/* Verify sizes of a struct with a flexible array member and no padding.  */
+
+struct ACX { char n, a[]; };
+
+struct ACX ac0 = { };
+struct ACX ac1 = { 1, { 1 } };
+struct ACX ac2 = { 2, { 1, 2 } };
+struct ACX ac3 = { 3, { 1, 2, 3 } };
+
+extern struct ACX eacx;
+
+void facx (void)
+{
+  ASSERT (bos0 (&ac0) == sizeof ac0);
+  ASSERT (bos0 (&ac1) == 2);
+  ASSERT (bos0 (&ac2) == 3);
+  ASSERT (bos0 (&ac3) == 4);
+  ASSERT (bos0 (&eacx) == (size_t)-1);
+
+  ASSERT (bos1 (&ac0) == sizeof ac0);
+  ASSERT (bos1 (&ac1) == 2);
+  ASSERT (bos1 (&ac2) == 3);
+  ASSERT (bos1 (&ac3) == 4);
+  ASSERT (bos1 (&eacx) == (size_t)-1);
+
+  ASSERT (bos2 (&ac0) == sizeof ac0);
+  ASSERT (bos2 (&ac1) == 2);
+  ASSERT (bos2 (&ac2) == 3);
+  ASSERT (bos2 (&ac3) == 4);
+  ASSERT (bos2 (&eacx) == sizeof eacx);
+
+  ASSERT (bos3 (&ac0) == sizeof ac0);
+  ASSERT (bos3 (&ac1) == 2);
+  ASSERT (bos3 (&ac2) == 3);
+  ASSERT (bos3 (&ac3) == 4);
+  ASSERT (bos3 (&eacx) == sizeof eacx);
+}
+
+/* Also verify sizes of a struct with a zero length array member.  */
+
+struct A0C0 { char n, a[0]; };
+
+struct A0C0 a0c0 = { };
+extern struct A0C0 ea0c0;
+
+void fa0c0 (void)
+{
+  ASSERT (bos0 (&a0c0) == sizeof a0c0);
+  ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
+
+  ASSERT (bos1 (&a0c0) == sizeof a0c0);
+  ASSERT (bos1 (&a0c0) == sizeof ea0c0);
+
+  ASSERT (bos2 (&a0c0) == sizeof a0c0);
+  ASSERT (bos2 (&a0c0) == sizeof ea0c0);
+
+  ASSERT (bos3 (&a0c0) == sizeof a0c0);
+  ASSERT (bos3 (&a0c0) == sizeof ea0c0);
+}
+
+/* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
-- 
2.36.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] testsuite: Handle default_packed for gcc.dg/builtin-object-size-20.c
  2022-06-23 21:21 [PATCH] testsuite: Handle default_packed for gcc.dg/builtin-object-size-20.c Dimitar Dimitrov
@ 2022-06-24  6:55 ` Richard Biener
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2022-06-24  6:55 UTC (permalink / raw)
  To: Dimitar Dimitrov; +Cc: GCC Patches

On Thu, Jun 23, 2022 at 11:24 PM Dimitar Dimitrov <dimitar@dinux.eu> wrote:
>
> The gcc.dg/builtin-object-size-20.c test case assumes that the target
> inserts padding between structure members.  Obviously it fails for
> targets which pack structures by default.
>
> Split the cases into two tests, so that the ones requiring structure
> padding can be skipped for default_packed targets.
>
> Ok for trunk?

OK

> gcc/testsuite/ChangeLog:
>
>         * gcc.dg/builtin-object-size-20.c: Remove cases which
>         work on default_packed targets.
>         * gcc.dg/builtin-object-size-22.c: New test with the cases
>         removed above.
>
> Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
> ---
>  gcc/testsuite/gcc.dg/builtin-object-size-20.c | 64 +--------------
>  gcc/testsuite/gcc.dg/builtin-object-size-22.c | 79 +++++++++++++++++++
>  2 files changed, 81 insertions(+), 62 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.dg/builtin-object-size-22.c
>
> diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-20.c b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
> index bed973c2c77..f40e3dcc1a9 100644
> --- a/gcc/testsuite/gcc.dg/builtin-object-size-20.c
> +++ b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
> @@ -1,7 +1,8 @@
>  /* PR middle-end/92815 - spurious -Wstringop-overflow writing into
>     a flexible array of an extern struct
>     { dg-do compile }
> -   { dg-options "-O -Wall -fdump-tree-optimized" } */
> +   { dg-options "-O -Wall -fdump-tree-optimized" }
> +   { dg-skip-if "test assumes that structs have padding" { default_packed } } */
>
>  #define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
>  #define bos0(expr) __builtin_object_size (expr, 1)
> @@ -18,44 +19,6 @@ typedef __SIZE_TYPE__  size_t;
>  extern void fail (int);
>
>
> -/* Verify sizes of a struct with a flexible array member and no padding.  */
> -
> -struct ACX { char n, a[]; };
> -
> -struct ACX ac0 = { };
> -struct ACX ac1 = { 1, { 1 } };
> -struct ACX ac2 = { 2, { 1, 2 } };
> -struct ACX ac3 = { 3, { 1, 2, 3 } };
> -
> -extern struct ACX eacx;
> -
> -void facx (void)
> -{
> -  ASSERT (bos0 (&ac0) == sizeof ac0);
> -  ASSERT (bos0 (&ac1) == 2);
> -  ASSERT (bos0 (&ac2) == 3);
> -  ASSERT (bos0 (&ac3) == 4);
> -  ASSERT (bos0 (&eacx) == (size_t)-1);
> -
> -  ASSERT (bos1 (&ac0) == sizeof ac0);
> -  ASSERT (bos1 (&ac1) == 2);
> -  ASSERT (bos1 (&ac2) == 3);
> -  ASSERT (bos1 (&ac3) == 4);
> -  ASSERT (bos1 (&eacx) == (size_t)-1);
> -
> -  ASSERT (bos2 (&ac0) == sizeof ac0);
> -  ASSERT (bos2 (&ac1) == 2);
> -  ASSERT (bos2 (&ac2) == 3);
> -  ASSERT (bos2 (&ac3) == 4);
> -  ASSERT (bos2 (&eacx) == sizeof eacx);
> -
> -  ASSERT (bos3 (&ac0) == sizeof ac0);
> -  ASSERT (bos3 (&ac1) == 2);
> -  ASSERT (bos3 (&ac2) == 3);
> -  ASSERT (bos3 (&ac3) == 4);
> -  ASSERT (bos3 (&eacx) == sizeof eacx);
> -}
> -
>
>
>  /* Verify sizes of a struct with a flexible array member and 1 byte
> @@ -289,27 +252,4 @@ void fai64cx (void)
>    ASSERT (bos3 (&eai64cx) == sizeof eai64cx);
>  }
>
> -
> -/* Also verify sizes of a struct with a zero length array member.  */
> -
> -struct A0C0 { char n, a[0]; };
> -
> -struct A0C0 a0c0 = { };
> -extern struct A0C0 ea0c0;
> -
> -void fa0c0 (void)
> -{
> -  ASSERT (bos0 (&a0c0) == sizeof a0c0);
> -  ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
> -
> -  ASSERT (bos1 (&a0c0) == sizeof a0c0);
> -  ASSERT (bos1 (&a0c0) == sizeof ea0c0);
> -
> -  ASSERT (bos2 (&a0c0) == sizeof a0c0);
> -  ASSERT (bos2 (&a0c0) == sizeof ea0c0);
> -
> -  ASSERT (bos3 (&a0c0) == sizeof a0c0);
> -  ASSERT (bos3 (&a0c0) == sizeof ea0c0);
> -}
> -
>  /* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-22.c b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
> new file mode 100644
> index 00000000000..1e55229c949
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
> @@ -0,0 +1,79 @@
> +/* PR middle-end/92815 - a variant of gcc.dg/builtin-object-size-20.c
> +   prepared for all targets, irregardless if they pack or not
> +   the structs by default.
> +   { dg-do compile }
> +   { dg-options "-O -Wall -fdump-tree-optimized" } */
> +
> +#define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
> +#define bos0(expr) __builtin_object_size (expr, 1)
> +#define bos1(expr) __builtin_object_size (expr, 1)
> +#define bos2(expr) __builtin_object_size (expr, 2)
> +#define bos3(expr) __builtin_object_size (expr, 3)
> +
> +typedef __SIZE_TYPE__  size_t;
> +
> +
> +extern void fail (int);
> +
> +
> +/* Verify sizes of a struct with a flexible array member and no padding.  */
> +
> +struct ACX { char n, a[]; };
> +
> +struct ACX ac0 = { };
> +struct ACX ac1 = { 1, { 1 } };
> +struct ACX ac2 = { 2, { 1, 2 } };
> +struct ACX ac3 = { 3, { 1, 2, 3 } };
> +
> +extern struct ACX eacx;
> +
> +void facx (void)
> +{
> +  ASSERT (bos0 (&ac0) == sizeof ac0);
> +  ASSERT (bos0 (&ac1) == 2);
> +  ASSERT (bos0 (&ac2) == 3);
> +  ASSERT (bos0 (&ac3) == 4);
> +  ASSERT (bos0 (&eacx) == (size_t)-1);
> +
> +  ASSERT (bos1 (&ac0) == sizeof ac0);
> +  ASSERT (bos1 (&ac1) == 2);
> +  ASSERT (bos1 (&ac2) == 3);
> +  ASSERT (bos1 (&ac3) == 4);
> +  ASSERT (bos1 (&eacx) == (size_t)-1);
> +
> +  ASSERT (bos2 (&ac0) == sizeof ac0);
> +  ASSERT (bos2 (&ac1) == 2);
> +  ASSERT (bos2 (&ac2) == 3);
> +  ASSERT (bos2 (&ac3) == 4);
> +  ASSERT (bos2 (&eacx) == sizeof eacx);
> +
> +  ASSERT (bos3 (&ac0) == sizeof ac0);
> +  ASSERT (bos3 (&ac1) == 2);
> +  ASSERT (bos3 (&ac2) == 3);
> +  ASSERT (bos3 (&ac3) == 4);
> +  ASSERT (bos3 (&eacx) == sizeof eacx);
> +}
> +
> +/* Also verify sizes of a struct with a zero length array member.  */
> +
> +struct A0C0 { char n, a[0]; };
> +
> +struct A0C0 a0c0 = { };
> +extern struct A0C0 ea0c0;
> +
> +void fa0c0 (void)
> +{
> +  ASSERT (bos0 (&a0c0) == sizeof a0c0);
> +  ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
> +
> +  ASSERT (bos1 (&a0c0) == sizeof a0c0);
> +  ASSERT (bos1 (&a0c0) == sizeof ea0c0);
> +
> +  ASSERT (bos2 (&a0c0) == sizeof a0c0);
> +  ASSERT (bos2 (&a0c0) == sizeof ea0c0);
> +
> +  ASSERT (bos3 (&a0c0) == sizeof a0c0);
> +  ASSERT (bos3 (&a0c0) == sizeof ea0c0);
> +}
> +
> +/* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
> --
> 2.36.1
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-06-24  6:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-23 21:21 [PATCH] testsuite: Handle default_packed for gcc.dg/builtin-object-size-20.c Dimitar Dimitrov
2022-06-24  6:55 ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).