From e1a04c522e421d78cb06fc355989a3d5cd722800 Mon Sep 17 00:00:00 2001 From: drchase Date: Tue, 22 Oct 2013 12:57:59 -0400 Subject: [PATCH] 8026818: Defmeth failures with -mode invoke Summary: Added test for IllegalAccessException -> IllegalAccessError path to check if root cause was AbstractMethodError Reviewed-by: jrose --- .../classes/java/lang/invoke/MethodHandleNatives.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/share/classes/java/lang/invoke/MethodHandleNatives.java b/src/share/classes/java/lang/invoke/MethodHandleNatives.java index 56cb245e6..fd5cac8cd 100644 --- a/src/share/classes/java/lang/invoke/MethodHandleNatives.java +++ b/src/share/classes/java/lang/invoke/MethodHandleNatives.java @@ -441,8 +441,13 @@ class MethodHandleNatives { assert(refKindIsValid(refKind)); return lookup.linkMethodHandleConstant((byte) refKind, defc, name, type); } catch (IllegalAccessException ex) { - Error err = new IllegalAccessError(ex.getMessage()); - throw initCauseFrom(err, ex); + Throwable cause = ex.getCause(); + if (cause instanceof AbstractMethodError) { + throw (AbstractMethodError) cause; + } else { + Error err = new IllegalAccessError(ex.getMessage()); + throw initCauseFrom(err, ex); + } } catch (NoSuchMethodException ex) { Error err = new NoSuchMethodError(ex.getMessage()); throw initCauseFrom(err, ex); -- GitLab