java/5668: finit$ not called while using a constructor

toddastock@yahoo.com toddastock@yahoo.com
Tue Feb 12 09:56:00 GMT 2002


>Number:         5668
>Category:       java
>Synopsis:       finit$ not called while using a constructor
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 12 09:36:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        3.1 20020211 (experimental)
>Organization:
>Environment:
System: Linux escher 2.4.9-21 #1 Thu Jan 17 14:16:30 EST 2002 i686 unknown
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ./configure --enable-threads=posix --prefix=/home/tstock/local --disable-shared --enable-languages=c++,java
>Description:
If you have a constructor in your Java class the finit$ is not inserted after the super call.  If you omit the constructor all is fine.
>How-To-Repeat:
public class Test
  {
  Object o = new Object();

  Test ( )
    {
      if ( o == null )
        {
          System.err.println("Test failed\n");
        }
    }

  static public void main ( String argv[] )
    {
      new Test();
    }
  }
>Fix:
It's not clear that build_super_invocation is required to force the CAN_COMPLETE_NORMAL flag, however without it I am not sure what might happen in the patch_invoke function.
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/java/parse.y,v
retrieving revision 1.350
diff -r1.350 parse.y
10693c10693,10694
<   if (TREE_CODE (patch) == CALL_EXPR)
---
>   if (TREE_CODE (patch) == CALL_EXPR) {
>     int save_can_complete_normal = CAN_COMPLETE_NORMALLY(patch);
10695c10696,10697
<   else
---
>     CAN_COMPLETE_NORMALLY(patch) = save_can_complete_normal;
>   } else
12462a12465
>       CAN_COMPLETE_NORMALLY(super_wfl)=1;
12471c12474,12476
<       return build_method_invocation (super_wfl, a);
---
>       a=build_method_invocation (super_wfl, a);
>       CAN_COMPLETE_NORMALLY(a)=1;
>       return a;

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list