On Wed, Mar 16, 2016 at 2:45 AM, Bernhard Reutner-Fischer <rep.dot....@gmail.com> wrote: > On March 16, 2016 3:17:20 AM GMT+01:00, "H.J. Lu" <hjl.to...@gmail.com> wrote: > >>> Where is the current definition of empty types you're proposing for >>use in >>> GCC? Is the behavior of this case clear from that definition? >> >>https://gcc.gnu.org/ml/gcc/2016-03/msg00071.html >> >>Jason's patch follows it. Here is a test for struct with zero-size >>array of empty type, which is treated as empty type. > > index 0000000..489eb3a > --- /dev/null > +++ b/gcc/testsuite/g++.dg/abi/empty19.C > @@ -0,0 +1,17 @@ > +// PR c++/60336 > +// { dg-do run } > +// { dg-options "-Wabi=9 -x c" } > +// { dg-additional-sources "empty14a.c" } > > 14a ? Not 19a ? > Thanks > >
Here is the updated patch. -- H.J.
From d7da4b56dddbd75da163b9fd3cc9ff4241be6ca9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Tue, 15 Mar 2016 19:14:30 -0700 Subject: [PATCH] Add a test for struct with zero-size array of empty type --- gcc/testsuite/g++.dg/abi/empty19.C | 17 +++++++++++++++++ gcc/testsuite/g++.dg/abi/empty19.h | 10 ++++++++++ gcc/testsuite/g++.dg/abi/empty19a.c | 6 ++++++ 3 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.dg/abi/empty19.C create mode 100644 gcc/testsuite/g++.dg/abi/empty19.h create mode 100644 gcc/testsuite/g++.dg/abi/empty19a.c diff --git a/gcc/testsuite/g++.dg/abi/empty19.C b/gcc/testsuite/g++.dg/abi/empty19.C new file mode 100644 index 0000000..e3e855a --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty19.C @@ -0,0 +1,17 @@ +// PR c++/60336 +// { dg-do run } +// { dg-options "-Wabi=9 -x c" } +// { dg-additional-sources "empty19a.c" } +// { dg-prune-output "command line option" } + +#include "empty19.h" +extern "C" void fun(struct dummy, struct foo); + +int main() +{ + struct dummy d; + struct foo f = { -1, -2, -3, -4, -5 }; + + fun(d, f); // { dg-warning "empty" } + return 0; +} diff --git a/gcc/testsuite/g++.dg/abi/empty19.h b/gcc/testsuite/g++.dg/abi/empty19.h new file mode 100644 index 0000000..616b87b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty19.h @@ -0,0 +1,10 @@ +struct dummy0 { }; +struct dummy { struct dummy0 d[0]; }; +struct foo +{ + int i1; + int i2; + int i3; + int i4; + int i5; +}; diff --git a/gcc/testsuite/g++.dg/abi/empty19a.c b/gcc/testsuite/g++.dg/abi/empty19a.c new file mode 100644 index 0000000..767b1eb --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/empty19a.c @@ -0,0 +1,6 @@ +#include "empty19.h" +void fun(struct dummy d, struct foo f) +{ + if (f.i1 != -1) + __builtin_abort(); +} -- 2.5.0