Name: ssT124754 Date: 01/24/2001
The new javac from 1.3 compiles illegal code.
E.g.:
public class IllegalExpressionTest
{
public static void main(String[] args)
{
(System.out.println());
// I don't see a valid production for this statement in the Java grammar
}
}
javac from 1.3 compiles this code as if the parentheses were not present:
% javac IllegalExpressionTest.java
% javap -c IllegalExpressionTest
Compiled from IllegalExpressionTest.java
public class IllegalExpressionTest extends java.lang.Object {
public IllegalExpressionTest();
public static void main(java.lang.String[]);
}
Method IllegalExpressionTest()
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 return
Method void main(java.lang.String[])
0 getstatic #2 <Field java.io.PrintStream out>
3 invokevirtual #3 <Method void println()>
6 return
oldjavac, gcj, jikes and javadoc correctly issue an error message:
% oldjavac IllegalExpressionTest.java
IllegalExpressionTest.java:5: Invalid expression statement.
(System.out.println());
^
1 error
% gcj IllegalExpressionTest.java
IllegalExpressionTest.java:5: Invalid expression statement.
(System.out.println());
^
1 error
% jikes IllegalExpressionTest.java
Found 1 syntax error in "IllegalExpressionTest.java":
5. (System.out.println());
^
*** Syntax Error: ++ expected after this token
% javadoc IllegalExpressionTest.java
Loading source file IllegalExpressionTest.java...
IllegalExpressionTest.java:5: Invalid expression statement.
(System.out.println());
^
1 error
(Review ID: 111407)
======================================================================
- duplicates
-
JDK-4408036 Compiler incorrectly accepts "(i=2);" as a valid expession statement.
-
- Closed
-