test/langtools/tools/javac/lvti/SelfRefTest.java
author mcimadamore
Fri, 24 Nov 2017 16:14:33 +0000
changeset 47934 6373d9a0ad82
parent 47268 48ec75306997
permissions -rw-r--r--
8191834: Assigning a void expression to a "var" crashes the compiler Summary: local variable type inference should give error on void initializers Reviewed-by: sundar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     1
/*
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     2
 * @test /nodynamiccopyright/
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     3
 * @bug 8177466
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     4
 * @summary Add compiler support for local variable type-inference
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     5
 * @compile/fail/ref=SelfRefTest.out -XDrawDiagnostics SelfRefTest.java
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     6
 */
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     7
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     8
import java.util.function.Function;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     9
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    10
class SelfRefTest {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    11
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    12
        int q() { return 42; }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    13
    int m(int t) { return t; }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    14
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    15
    void test(boolean cond) {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    16
       var x = cond ? x : x; //error - self reference
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    17
       var y = (Function<Integer, Integer>)(Integer y) -> y; //error - bad shadowing
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    18
       var z = (Runnable)() -> { int z2 = m(z); }; //error - self reference
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    19
       var w = new Object() { int w = 42; void test() { int w2 = w; } }; //ok
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    20
       int u = u; //ok
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    21
       int q = q(); //ok
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    22
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    23
}