This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [C PATCH] warn for empty struct -Wc++-compat
- From: Marek Polacek <polacek at redhat dot com>
- To: Prathamesh Kulkarni <bilbotheelffriend at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, "Joseph S. Myers" <joseph at codesourcery dot com>
- Date: Tue, 11 Nov 2014 20:58:14 +0100
- Subject: Re: [C PATCH] warn for empty struct -Wc++-compat
- Authentication-results: sourceware.org; auth=none
- References: <CAJXstsAQ0GLXs7rYJeZTY1_ccgS84HXkU+X7pKKNfQPmh8TGHw at mail dot gmail dot com> <20141110220517 dot GF10852 at redhat dot com> <CAJXstsD3b4Ma7q1VpmOcDaVi5G5Tijk0O2S0ex6yCXrdiDPvWA at mail dot gmail dot com> <20141111110023 dot GG10852 at redhat dot com> <CAJXstsCF0B7x=BpK9uZv6usxS7nU6uYr265Hr0P3AgKPk06_rA at mail dot gmail dot com>
On Tue, Nov 11, 2014 at 11:27:21PM +0530, Prathamesh Kulkarni wrote:
> I tried the following:
> struct A { struct B {}; int x; } /* { dg-warning "empty struct has
> size 0 in C" } */
> /* { dg-bogus "delcaration
> does not declare anything" } */
> but it fails in excess errors.
> How do I resolve this ?
Try something like
/* { dg-warning "empty struct has size 0 in C|declaration does not declare anything" } */
> Index: gcc/c/c-decl.c
> ===================================================================
> --- gcc/c/c-decl.c (revision 217287)
> +++ gcc/c/c-decl.c (working copy)
> @@ -7506,12 +7506,28 @@
> /* Finish up struct info used by -Wc++-compat. */
>
> static void
> -warn_cxx_compat_finish_struct (tree fieldlist)
> +warn_cxx_compat_finish_struct (tree fieldlist, enum tree_code code, location_t record_loc)
This line is too long, please indent the last argument properly on
next line.
> unsigned int ix;
> tree x;
> struct c_binding *b;
>
> + if (fieldlist == NULL_TREE)
> + {
> + if (code == RECORD_TYPE)
> + {
> + warning_at (record_loc, OPT_Wc___compat,
> + "empty struct has size 0 in C, size 1 in C++");
> + }
> + else if (code == UNION_TYPE)
> + {
> + warning_at (record_loc, OPT_Wc___compat,
> + "empty union has size 0 in C, size 1 in C++");
> + }
Drop the { } around warning_at's.
> + else
> + gcc_unreachable ();
> + }
> +
I don't think this is needed.
Thanks,
Marek