/* * @test /nodynamiccopyright/ * @bug 4092958 * @summary The compiler was too permissive in its parsing of conditional * expressions. * @author turnidge * * @compile/fail/ref=ParseConditional.out -XDrawDiagnostics ParseConditional.java */ public class ParseConditional { public static void main(String[] args) { boolean condition = true; int a = 1; int b = 2; int c = 3; int d = 4; // The following line should give an error because the conditional ?: operator // is higher priority than the final assignment operator, between c and d. // As such, the correct parsing is: // a = (condition ? b = c : c) = d; // and it is illegal to try and assign to the value of the conditional expression. a = condition ? b = c : c = d; } }