--- old/src/share/classes/java/lang/Throwable.java 2013-04-11 18:16:13.000000000 -0700 +++ new/src/share/classes/java/lang/Throwable.java 2013-04-11 18:16:13.000000000 -0700 @@ -1039,7 +1039,7 @@ */ public final synchronized void addSuppressed(Throwable exception) { if (exception == this) - throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE); + throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE, exception); if (exception == null) throw new NullPointerException(NULL_CAUSE_MESSAGE); --- old/test/java/lang/Throwable/SuppressedExceptions.java 2013-04-11 18:16:14.000000000 -0700 +++ new/test/java/lang/Throwable/SuppressedExceptions.java 2013-04-11 18:16:14.000000000 -0700 @@ -26,7 +26,7 @@ /* * @test - * @bug 6911258 6962571 6963622 6991528 7005628 + * @bug 6911258 6962571 6963622 6991528 7005628 8012044 * @summary Basic tests of suppressed exceptions * @author Joseph D. Darcy */ @@ -48,7 +48,9 @@ throwable.addSuppressed(throwable); throw new RuntimeException("IllegalArgumentException for self-suppresion not thrown."); } catch (IllegalArgumentException iae) { - ; // Expected + // Expected to be here + if (iae.getCause() != throwable) + throw new RuntimeException("Bad cause after self-suppresion."); } }