From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15402 invoked by alias); 13 Jul 2002 01:46:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15344 invoked by uid 71); 13 Jul 2002 01:46:01 -0000 Resent-Date: 13 Jul 2002 01:46:01 -0000 Resent-Message-ID: <20020713014601.15343.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, java-prs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jmr@fulcrummicro.com Received: (qmail 12679 invoked from network); 13 Jul 2002 01:40:03 -0000 Received: from unknown (HELO smtp.internal.avlsi.com) (65.119.15.68) by sources.redhat.com with SMTP; 13 Jul 2002 01:40:03 -0000 Received: from churchill.internal.avlsi.com (churchill.internal.avlsi.com [10.0.0.7]) by smtp.internal.avlsi.com (Postfix) with ESMTP id 1231917744C for ; Fri, 12 Jul 2002 18:40:03 -0700 (PDT) Received: (from jmr@localhost) by churchill.internal.avlsi.com (8.11.6/8.11.2) id g6D1e2121411; Fri, 12 Jul 2002 18:40:02 -0700 Message-Id: <200207130140.g6D1e2121411@churchill.internal.avlsi.com> Date: Fri, 12 Jul 2002 18:46:00 -0000 From: jmr@fulcrummicro.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: 3.113 Subject: java/7298: Can't call method of outer class from inner constructor X-SW-Source: 2002-07/txt/msg00406.txt.bz2 List-Id: >Number: 7298 >Category: java >Synopsis: Can't call method of outer class from inner constructor >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Fri Jul 12 18:46:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Jesse Rosenstock >Release: 3.2 20020710 (experimental) >Organization: >Environment: System: Linux churchill 2.4.3-12 #1 Fri Jun 8 15:05:56 EDT 2001 i686 unknown Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ./configure --prefix=/home/user/jmr/app/gcc >Description: A method of an outer class cannot be called from the inner class constructor before the constructor for the inner class's superclass has been called. The outer class has been constructed, so this should be allowed. >How-To-Repeat: X.java: public class X { Object f() { return null; } class XX { XX() { this(f()); } XX(Object o) { } } } gcj -v X.java yields: Reading specs from /home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs Reading specs from /home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/../../../libgcj.spec rename spec lib to liborig Configured with: ./configure --prefix=/home/user/jmr/app/gcc Thread model: single gcc version 3.2 20020710 (experimental) /home/user/jmr/app/gcc/lib/gcc-lib/i686-pc-linux-gnu/3.2/jc1 X.java -fno-use-divide-subroutine -fuse-boehm-gc -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase X.java -g1 -version -o /tmp/ccZQXE2X.s GNU Java version 3.2 20020710 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.1 2.96-85). Class path starts here: /home/user/jmr/gcj_test/inner2/ /home/user/jmr/app/gcc/share/java/libgcj-3.2.jar/ (system) (zip) X.java: In class `X$XX': X.java: In constructor `(X)': X.java:7: error: Can't reference `this' before the superclass constructor has been called. this(f()); ^ 1 error This works with javac. >Fix: This could be worked around by passing a reference to the outer class into the constructor. public class X { Object f() { return null; } class XX { XX(X x) { this(x.f()); } XX(Object o) { } } } >Release-Note: >Audit-Trail: >Unformatted: