[
https://issues.apache.org/jira/browse/BCEL-192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14351838#comment-14351838
]
Emmanuel Bourg commented on BCEL-192:
-------------------------------------
I get a test failure:
{code}
testInvalidUninitializedObjectAccess(org.apache.bcel.verifier.VerifierUninitializedTestCase)
Time elapsed: 0.127 sec <<< ERROR!
org.apache.bcel.verifier.exc.AssertionViolatedException: INTERNAL ERROR: Some
RuntimeException occured while verify()ing class
'org.apache.bcel.verifier.tests.TestUninitialized04', method 'public void
<init>()'. Original RuntimeException's stack trace:
---
org.apache.bcel.verifier.exc.AssertionViolatedException: INTERNAL ERROR: Field
'o' not found in org.apache.bcel.verifier.tests.TestUninitialized04
at
org.apache.bcel.verifier.structurals.InstConstraintVisitor.visitPUTFIELD(InstConstraintVisitor.java:2647)
at org.apache.bcel.generic.PUTFIELD.accept(PUTFIELD.java:85)
at
org.apache.bcel.generic.InstructionHandle.accept(InstructionHandle.java:291)
at
org.apache.bcel.verifier.structurals.ControlFlowGraph$InstructionContextImpl.execute(ControlFlowGraph.java:196)
at
org.apache.bcel.verifier.structurals.Pass3bVerifier.circulationPump(Pass3bVerifier.java:206)
at
org.apache.bcel.verifier.structurals.Pass3bVerifier.do_verify(Pass3bVerifier.java:360)
{code}
I suspect BCEL-189 has to be fixed first.
> Verification error when defining an inner class
> -----------------------------------------------
>
> Key: BCEL-192
> URL: https://issues.apache.org/jira/browse/BCEL-192
> Project: Commons BCEL
> Issue Type: Bug
> Components: Verifier
> Affects Versions: 6.0
> Reporter: Jérôme Leroux
> Attachments: BCEL-192.patch, BCEL-192.zip
>
>
> The verification of the following code fails:
> {code:java}
> public void test(){
> new Runnable() {
>
> @Override
> public void run() {
> }
> };
> }
> {code}
> The cause is a wrong verification of field modification on uninitialized
> object. The modification of an uninitialized object is allowed in a
> constructor if this object is the receiver of the constructor.
> Here is the explanation from the §4.9.4 of _The Java Virtual Machine
> Specification, Second Edition_:
> {quote}
> The instance initialization method (§3.9) for class myClass sees the new
> uninitialized object as its this argument in local variable 0. Before that
> method invokes another instance initialization method of myClass or its
> direct superclass on this, the only operation the method can perform on this
> is assigning fields declared within myClass.
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)