harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Cornwall (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-5611) [classlib][pack200] IcTuple parsing broken: IcTuple.C can equal IcTuple.C2?
Date Tue, 18 Mar 2008 16:55:24 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-5611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12579922#action_12579922
] 

Andrew Cornwall commented on HARMONY-5611:
------------------------------------------

And I *am* reading the spec wrong:

If a tuple has an entry in the ic_outer_class and ic_name bands, these specify its outer class
and simple name. (They are represented respectively as a possibly null cp_Class reference
and a possibly null cp_Utf8 reference.) Otherwise, the tuple's outer class and name are said
to be predicted. In this case, they must be correctly predictable from the name of the nested
class itself, by parsing its spelling.

So I can't use ic_flags to determine whether or not the class name is predicted.

> [classlib][pack200] IcTuple parsing broken: IcTuple.C can equal IcTuple.C2?
> ---------------------------------------------------------------------------
>
>                 Key: HARMONY-5611
>                 URL: https://issues.apache.org/jira/browse/HARMONY-5611
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>         Environment: Pack200 head
>            Reporter: Andrew Cornwall
>            Assignee: Sian January
>             Fix For: 5.0M6
>
>
> I've run into a case where IcTuple.C is equal to IcTuple.C2. In my case, I have an IcTuple.C
of "com/ibm/micro/eventlog/LogDestination$1" and IcTuple.C2 of "com/ibm/micro/eventlog/LogDestination$1".
This causes a failure later on, because the algorithm used to determine what class the inner
class belongs to fails.
> I've sent a (confidential) test case to Sian. This problem can be exposed by modifying
the end of IcBands.unpack() as follows:
>         // Construct IC tuples
>         icAll = new IcTuple[icThisClass.length];
>         int index = 0;
>         for (int i = 0; i < icThisClass.length; i++) {
>             icAll[i] = new IcTuple();
>             icAll[i].C = icThisClass[i];
>             // TODO: remove debug code
>             if(icAll[i].C.matches(".*LogDestination.*")) {
>                 System.out.println("self halt");
>             }
>             icAll[i].F = icFlags[i];
>             if((icFlags[i] & 1<<16) != 0) {
>                 if(icOuterClass[index].equals(icAll[i].C)) {
>                     throw new Error("Inner class equals outer class");
>                 }
>                 icAll[i].C2 = icOuterClass[index];
>                 icAll[i].N = icName[index];
>                 index++;
>             }
>         }
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message