test/langtools/tools/javac/analyzer/AnalyzerNotQuiteSpeculative.java
author jlahoda
Fri, 30 Aug 2019 12:24:16 +0200
changeset 57963 ed7eb20871c5
permissions -rw-r--r--
8230105: -XDfind=diamond crashes Summary: Avoiding side-effects in Analyzer's speculative attribution. Reviewed-by: mcimadamore, vromero
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57963
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     1
/**
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     2
 * @test /nodynamiccopyright/
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     3
 * @bug 8230105
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     4
 * @summary Ensuring speculative analysis on behalf of Analyzers works reasonably.
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     5
 * @compile/ref=AnalyzerNotQuiteSpeculative.out -XDfind=diamond -XDrawDiagnostics AnalyzerNotQuiteSpeculative.java
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     6
 */
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     7
public class AnalyzerNotQuiteSpeculative {
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     8
    private void test() {
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
     9
        Subclass1 c1 = null;
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    10
        Subclass2 c2 = null;
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    11
        Base b = null;
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    12
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    13
        t(new C<Base>(c1).set(c2));
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    14
        t(new C<Base>(b).set(c2));
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    15
    }
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    16
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    17
    public static class Base {}
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    18
    public static class Subclass1 extends Base {}
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    19
    public static class Subclass2 extends Base {}
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    20
    public class C<T extends Base> {
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    21
        public C(T t) {}
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    22
        public C<T> set(T t) { return this; }
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    23
    }
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    24
    <T extends Base> void t(C<? extends Base> l) {}
ed7eb20871c5 8230105: -XDfind=diamond crashes
jlahoda
parents:
diff changeset
    25
}