This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi again.
[...]
>
> I haven't figured a fix for the initial test case yet:
>
> === cut here ===
> public class myBug
> {
> final static int myConst = 200;
>
> public static void bug() { myConst++; /* ICE */ }
> }
> === cut here ===
>
> A good place to emit an error would be in check-init.c(check_init), because
> that's there that we get an error if myConst is not declared static. From
> my investigation, it looks like we currently don't see that myConst is
> final because it has been constant fold, and we get an INTEGER_CST. Is
> there a way to get back to the declaration from there? I guess that adding
> a check for INTEGER_CST in check_init would fix the problem, but I wonder
> if it's a "good" solution...
The attached patch completely solves the PR by calling 'java_complete_lhs'
instead of 'java_complete_tree' on the operand of '++' or '--' expression in
'java_complete_lhs'. This change guarantees that the operand will never be
resolved to its value. Thanks to this, check_init emits an error instead of
an ICE when we compile the PR's initial test case.
I also attach two test cases (they're not merged because the "1++" situation
is detected in the parser, whereas the "static final++" situation is detected
later on).
Boostrapped and regtested on i686-pc-linux-gnu. Is it OK? If so, could someone
commit it for me?
Thanks in advance.
Best regards,
Simon
Attachment:
CL_8923_2
Description: Text document
Attachment:
pr8923_2.patch
Description: Text document
Attachment:
pr8923_1.java
Description: Text document
Attachment:
pr8923_2.java
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |