javac bug: comparing a primitive == object

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Jan 22 13:23:39 PST 2013


Neal,

Without getting into the merits of this case, I notice that the Bugtraq 
archive shows this issue as Reopened in state Defer, and that somehow 
this has become Closed, Future Project in the JBS changeover.  I agree 
the bug state is confusing, and should be fixed.

-- Jon


On 01/22/2013 12:57 PM, Neal Gafter wrote:
> This is very confusing.  Are you telling me that a "closed" bug is 
> used to indicate a known problem that may be fixed in the future?  It 
> isn't clear to me how someone reading the bug description will 
> understand that this particular problem (current spec vs compiler 
> disagreement described below) exists.  6212662 appears to request a 
> change in semantics for many cases, while the one issue described 
> below is simply a bug.
>
> In this case, I do not believe that javac can be made conforming 
> without breaking a substantial body of code.  I believe the language 
> specification must be changed to bring them in alignment.  That would 
> suggest that this "closed but open" bug is misclassified as a javac 
> issue (and that compiler-dev might not be the right forum, though 
> there is no other forum for language specification issues).  I also do 
> not believe that it should wait to be fixed until someone takes on the 
> project of overhauling the entire area of comparisons versus boxing 
> (i.e. never).
>
> Is the language spec really on life support?
>
> Cheers,
> Neal
>
> On Tue, Jan 22, 2013 at 12:32 PM, Alex Buckley 
> <alex.buckley at oracle.com <mailto:alex.buckley at oracle.com>> wrote:
>
>     It's still there as
>     http://bugs.sun.com/view_bug.do?bug_id=6212662, marked as "Future
>     Project".
>
>     Since JLS7 15.21 is unchanged from JLS3 15.21, I agree that javac
>     continues to be non-conforming.
>
>     Please direct all further comments to
>     compiler-dev at openjdk.java.net <mailto:compiler-dev at openjdk.java.net>.
>
>     Alex
>
>
>     On 1/21/2013 6:26 PM, Neal Gafter wrote:
>
>         Alex-
>
>         Is there a bug number for this issue, which we discussed a few
>         years
>         ago?  Neither javac nor the specification appear to have been
>         fixed.
>
>         Cheers,
>         Neal
>
>
>         p.s. To refresh your memory, here's the reduced test case:
>
>             Object a = 3.5;
>             System.out.println(3.5 == a);
>
>
>         And here is the JLS3 excerpt from 15.21 that requires it to be
>         an error:
>
>             The equality operators may be used to compare two operands
>         that are
>             convertible (§5.1.8) to numeric type, or two operands of type
>             boolean or Boolean, or two operands that are each of either
>             reference type or the null type. All other cases result in a
>             compile-time error.
>
>
>         In short, javac doesn't comply with its specification.
>
>         On Thu, Apr 30, 2009 at 2:08 PM, Alex Buckley
>         <Alex.Buckley at sun.com <mailto:Alex.Buckley at sun.com>
>         <mailto:Alex.Buckley at sun.com <mailto:Alex.Buckley at sun.com>>>
>         wrote:
>
>             Having inspected the history more closely, it turns out
>         that Joe
>             wrote the first eval in 2004 re: new objects, and Peter
>         closed it a
>             few days later. I think I came across it in 2007 as a
>         SeeAlso for
>             another old bug I was looking at. Anyway, the path is
>         clear now.
>
>             Alex
>
>             Neal Gafter wrote:
>
>                 Thanks!
>
>
>                 On Thu, Apr 30, 2009 at 1:24 PM, Alex Buckley
>                 <Alex.Buckley at sun.com <mailto:Alex.Buckley at sun.com>
>         <mailto:Alex.Buckley at sun.com <mailto:Alex.Buckley at sun.com>>
>                 <mailto:Alex.Buckley at sun.com
>         <mailto:Alex.Buckley at sun.com> <mailto:Alex.Buckley at sun.com
>         <mailto:Alex.Buckley at sun.com>>>> wrote:
>
>                      True, the complaint about flyweights confused the
>         issue,
>                 and neither
>                      Gilad nor I thought about == much. I'll fix up
>         the eval and
>                 move it
>                      to compiler.
>
>                      Alex
>
>
>                      Neal Gafter wrote:
>
>                          bug 6212662 was improperly closed as not a bug...
>
>                          the third edition of the JLS requires the
>         error that
>                 the bug
>                          report requests. Here's the reduced test case:
>
>                          Object a = 3.5;
>                          System.out.println(3.5 == a);
>
>                          And here is the JLS3 excerpt that requires it
>         to be an
>                 error:
>
>                          "The equality operators may be used to
>         compare two
>                 operands that
>                          are convertible
>                          (§5.1.8) to numeric type, or two operands of type
>                 boolean or
>                          Boolean, or
>                          two operands that are each of either
>         reference type or
>                 the null
>                          type. All other cases
>                          result in a compile-time error."
>
>                          In short, javac doesn't comply with its
>         specification.
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20130122/bfdb31f9/attachment.html 


More information about the compiler-dev mailing list