Discussion:
[Java PATCH] Generate declarations in jvgenmain.c
Marek Polacek
2014-10-06 09:54:00 UTC
Permalink
Java testsuite breaks with -std=gnu11 as a default and/or with
-Wimplicit-function-declaration on, since the jvgenmain.c program
that generates a C file containing 'main' function which calls either
'JvRunMainName' or 'JvRunMain' does not generate forward declarations
for these functions. The fix is obvious IMHO.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2014-10-06 Marek Polacek <***@redhat.com>

* jvgenmain.c: Generate forward declarations for JvRunMain{,Name}.

diff --git gcc/gcc/java/jvgenmain.c gcc/gcc/java/jvgenmain.c
index 5b14258..a786d31 100644
--- gcc/gcc/java/jvgenmain.c
+++ gcc/gcc/java/jvgenmain.c
@@ -127,6 +127,8 @@ main (int argc, char **argv)
/* At this point every element of ARGV from 1 to LAST_ARG is a `-D'
option. Process them appropriately. */
fprintf (stream, "extern const char **_Jv_Compiler_Properties;\n");
+ fprintf (stream, "extern void JvRunMain ();\n");
+ fprintf (stream, "extern void JvRunMainName ();\n");
fprintf (stream, "static const char *props[] =\n{\n");
for (i = 1; i < last_arg; ++i)
{

Marek
Mark Wielaard
2014-10-06 21:00:48 UTC
Permalink
Post by Marek Polacek
Java testsuite breaks with -std=gnu11 as a default and/or with
-Wimplicit-function-declaration on, since the jvgenmain.c program
that generates a C file containing 'main' function which calls either
'JvRunMainName' or 'JvRunMain' does not generate forward declarations
for these functions. The fix is obvious IMHO.
Bootstrapped/regtested on x86_64-linux, ok for trunk?
I cannot approve (java) patches, but it does look ok to me.
With one nitpick. JvRunMain is only used when -findirect-dispatch
is given, and otherwise JvRunMainName is used. So you could output
only the actually used forward declaration by checking if (indirect).

If no java maintainer responds, try CCing java-***@gcc.gnu.org
to draw their attention.

Cheers,

Mark
Andrew Haley
2014-10-07 08:07:52 UTC
Permalink
Post by Mark Wielaard
to draw their attention.
Please. I can't see the patch here.

Andrew.
Marek Polacek
2014-10-07 08:32:12 UTC
Permalink
Post by Mark Wielaard
Post by Marek Polacek
Java testsuite breaks with -std=gnu11 as a default and/or with
-Wimplicit-function-declaration on, since the jvgenmain.c program
that generates a C file containing 'main' function which calls either
'JvRunMainName' or 'JvRunMain' does not generate forward declarations
for these functions. The fix is obvious IMHO.
Bootstrapped/regtested on x86_64-linux, ok for trunk?
I cannot approve (java) patches, but it does look ok to me.
With one nitpick. JvRunMain is only used when -findirect-dispatch
is given, and otherwise JvRunMainName is used. So you could output
only the actually used forward declaration by checking if (indirect).
Yeah, that will be better.
Post by Mark Wielaard
to draw their attention.
Done (separate mail). Thanks.

Marek
Marek Polacek
2014-10-07 08:31:29 UTC
Permalink
[CCing java-patches now]

Java testsuite breaks with -std=gnu11 as a default and/or with
-Wimplicit-function-declaration on, since the jvgenmain.c program
that generates a C file containing 'main' function which calls either
'JvRunMainName' or 'JvRunMain' does not generate forward declarations
for these functions. The following patch generates such a declaration
depending on whether -findirect-dispatch is given.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2014-10-07 Marek Polacek <***@redhat.com>

* jvgenmain.c (main): Provide declaration for JvRunMain{,Name}.

diff --git gcc/java/jvgenmain.c gcc/java/jvgenmain.c
index 5b14258..82e468d 100644
--- gcc/java/jvgenmain.c
+++ gcc/java/jvgenmain.c
@@ -127,6 +127,10 @@ main (int argc, char **argv)
/* At this point every element of ARGV from 1 to LAST_ARG is a `-D'
option. Process them appropriately. */
fprintf (stream, "extern const char **_Jv_Compiler_Properties;\n");
+ if (indirect)
+ fprintf (stream, "extern void JvRunMainName ();\n");
+ else
+ fprintf (stream, "extern void JvRunMain ();\n");
fprintf (stream, "static const char *props[] =\n{\n");
for (i = 1; i < last_arg; ++i)
{

Marek
Andrew Haley
2014-10-07 12:21:13 UTC
Permalink
Post by Marek Polacek
Bootstrapped/regtested on x86_64-linux, ok for trunk?
OK, thanks.

Andrew.
Tom Tromey
2014-10-07 16:03:26 UTC
Permalink
Marek> [CCing java-patches now]
Marek> Java testsuite breaks with -std=gnu11 as a default and/or with
Marek> -Wimplicit-function-declaration on

I don't recall how one gets warnings when compiling this generated code,
but if it is generally possible then I think this:

Marek> + if (indirect)
Marek> + fprintf (stream, "extern void JvRunMainName ();\n");
Marek> + else
Marek> + fprintf (stream, "extern void JvRunMain ();\n");

... will fail with -Wstrict-prototypes, since in C those should
read "(void)" rather than "()".

If it's not possible then no big deal.

Tom
Marek Polacek
2014-10-07 16:15:19 UTC
Permalink
Post by Tom Tromey
Marek> [CCing java-patches now]
Marek> Java testsuite breaks with -std=gnu11 as a default and/or with
Marek> -Wimplicit-function-declaration on
I don't recall how one gets warnings when compiling this generated code,
I'm not sure I understand, but this piece of code gets compiled when
running the libjava testsuite. And when the warning triggers, we get
many fails.
Post by Tom Tromey
Marek> + if (indirect)
Marek> + fprintf (stream, "extern void JvRunMainName ();\n");
Marek> + else
Marek> + fprintf (stream, "extern void JvRunMain ();\n");
... will fail with -Wstrict-prototypes, since in C those should
read "(void)" rather than "()".
If it's not possible then no big deal.
I saw declarations of JvRunMain{,Name} with no parameters and with
some parameters. So I decided to make it prototype-less function
declaration for now. I think we don't have to worry about
-Wstrict-prototypes for now.

Marek
Tom Tromey
2014-10-07 16:40:01 UTC
Permalink
Marek> I saw declarations of JvRunMain{,Name} with no parameters and with
Marek> some parameters.

Oh yeah, duh.

Marek> So I decided to make it prototype-less function
Marek> declaration for now. I think we don't have to worry about
Marek> -Wstrict-prototypes for now.

Thanks for looking.

Tom

Loading...