# HG changeset patch # User vromero # Date 1539006761 25200 # Node ID 957de5be48bcefaaec7caeda778f8c755c50b118 # Parent d2a6c3cbc110ce4a3ac38149e29ff13da0999148 8209407: VerifyError is thrown for inner class with lambda Reviewed-by: mcimadamore diff -r d2a6c3cbc110 -r 957de5be48bc src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Mon Oct 08 14:48:12 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Mon Oct 08 06:52:41 2018 -0700 @@ -1130,10 +1130,14 @@ make.at(tree.pos); return makeLit(sym.type, cv); } - // Otherwise replace the variable by its proxy. - sym = proxies.get(sym); - Assert.check(sym != null && (sym.flags_field & FINAL) != 0); - tree = make.at(tree.pos).Ident(sym); + if (lambdaTranslationMap != null && lambdaTranslationMap.get(sym) != null) { + return make.at(tree.pos).Ident(lambdaTranslationMap.get(sym)); + } else { + // Otherwise replace the variable by its proxy. + sym = proxies.get(sym); + Assert.check(sym != null && (sym.flags_field & FINAL) != 0); + tree = make.at(tree.pos).Ident(sym); + } } JCExpression base = (tree.hasTag(SELECT)) ? ((JCFieldAccess) tree).selected : null; switch (sym.kind) { diff -r d2a6c3cbc110 -r 957de5be48bc test/langtools/tools/javac/lambda/T8209407/VerifierErrorInnerPlusLambda.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/langtools/tools/javac/lambda/T8209407/VerifierErrorInnerPlusLambda.java Mon Oct 08 06:52:41 2018 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2018, 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 8209407 + * @summary VerifyError is thrown for inner class with lambda + */ + +import java.util.function.Supplier; + +public class VerifierErrorInnerPlusLambda { + public static void main(String[] args) { + Object a = new Object(); + class Local { Object ref = a; } + new Object() { + void unused() { + Supplier s = () -> new Local(); + } + }; + } +}