提交 ecca161c 编写于 作者: R rpatil

8066871: java.lang.VerifyError: Bad local variable type - local final String

Summary: baseType() erroneously called on MethodResultInfo causes lack of constant type info
Reviewed-by: jlahoda, mcimadamore
上级 44225572
/*
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -249,6 +249,7 @@ public class Attr extends JCTree.Visitor {
* are correct.
*
* @param tree The tree whose kind and type is checked
* @param found The computed type of the tree
* @param ownkind The computed kind of the tree
* @param resultInfo The expected result of the tree
*/
......
/*
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -1007,7 +1007,7 @@ public class Resolve {
DeferredType dt = (DeferredType)found;
return dt.check(this);
} else {
Type uResult = U(found.baseType());
Type uResult = U(found);
Type capturedType = pos == null || pos.getTree() == null ?
types.capture(uResult) :
checkContext.inferenceContext()
......
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8066871
* @summary java.lang.VerifyError: Bad local variable type - local final String
* @author Srikanth Sankaran
*
* @compile -g:none ConditionalWithFinalStrings.java
* @run main ConditionalWithFinalStrings
*/
public class ConditionalWithFinalStrings {
interface I {
String foo();
}
static class Tmp {
private String value;
public void setValue(String tmpStr) {
this.value = tmpStr;
if (!this.value.equals("YES"))
throw new AssertionError();
}
}
void goo(I i) {
if (!i.foo().equals("YES"))
throw new AssertionError();
}
public void test() {
final String y = "YES";
final String n = "NO";
Tmp tmp = new Tmp();
tmp.setValue(true ? y : n);
goo (() -> y);
}
public static void main(String[] args) {
new ConditionalWithFinalStrings().test();
if (!id("Hello!").equals("Hello!"))
throw new AssertionError();
}
static <Z> Z id(Z z) { return z; }
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册