PING: Re: Fix build failure with JAVAC_MAX_WARNINGS=true in sun/nio/cs

Andrew John Hughes ahughes at redhat.com
Thu Jun 10 21:35:16 UTC 2010


On 9 June 2010 18:22, Xueming Shen <xueming.shen at oracle.com> wrote:
> Andrew John Hughes wrote:
>>
>> On 9 June 2010 07:55, Florian Weimer <fweimer at bfk.de> wrote:
>>
>>>
>>> * Andrew John Hughes:
>>>
>>>
>>>>
>>>> On 7 June 2010 23:04, Xueming Shen <xueming.shen at oracle.com> wrote:
>>>>
>>>>>
>>>>> Hi Andrew,
>>>>>
>>>>> 6959197: When building with JAVAC_MAX_WARNINGS=true, the build fails in
>>>>> sun/nio/cs due to the use of -Werror
>>>>>
>>>>> (1)sun/io/ByteTocharISO2022JP.java
>>>>>  #129,  #151
>>>>>
>>>>>  if ((byte1 & (byte)0x80) != 0){
>>>>>
>>>>>      if ((byte2 & (byte)0x80) != 0){
>>>>>
>>>>>
>>>>> (byte) casting is not necessary as well?
>>>>>
>>>>>
>>>>
>>>> It's necessary.  0x80 is an integer literal
>>>>
>>>> (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.1)
>>>> which requires a lossy narrowing conversion to byte
>>>>
>>>> (http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.3)
>>>>
>>>
>>> Doesn't the & operator promote its arguments to int anyway?  I don't
>>> think the cast to byte makes a difference here because it does not
>>> matter if 0x80 is sign-extended or zero-extended.
>>>
>>> It might be more efficient to use "byte1 < 0" and "byte2 < 0" instead.
>>>
>>>
>>
>> You're right.  I think I mentally read that as an assignment, not an
>> and operation.
>>
>> If I'm reading it right now, it would seem to just be testing the sign
>> bit.  byte1 < 0 would be clearer if not faster, and I'd be for
>> changing that, though that probably should be a separate patch.
>>
>> Sherman, does the new webrev look ok to push?
>>
>>
>
> (1)ByteToCharJISAutoDetect.java
>   It appears we should move the maskTable1/2 initialization code out of the
> constructor block.
>
>  37     private static byte[] maskTable1 = JISAutoDetect.getByteMask1();
>  38     private static byte[] maskTable2 = JISAutoDetect.getByteMask2();
>

Done.  I also made them final.

> (2)EUC_JP_Open.java
>
> 137             j0208Index1 = JIS_X_0208_Solaris_Encoder.getIndex1();
> 138             j0208Index2 = JIS_X_0208_Solaris_Encoder.getIndex2();
>
>  can be moved out of the constructor as you do for the decoder. better to
>  keep them consistent (as well as the code in EUC_JP_LINUX)
>

Done.  I made both sets private, static and final as well, and updated
EUC_JP, EUC_JP_LINUX, PCK and SJIS in the same way.

>
> (3)sun/nio/cs/ext/HKSCS.java
>
> -            this.big5Dec = big5Dec;
> +            Decoder.big5Dec = big5Dec;
>
> Dave is absolutely right here. big5Dec definitely should be an instance
> field instead of static, it's my bug in the original code. It should be
>
>        private DoubleByte.Decoder big5Dec;
>
>        protected Decoder(Charset cs,
>                          DoubleByte.Decoder big5Dec,
>                          char[][] b2cBmp, char[][] b2cSupp)
>        {
>            // super(cs, 0.5f, 1.0f);
>            // need to extends DoubleByte.Decoder so the
>            // sun.io can use it. this implementation
>            super(cs, 0.5f, 1.0f, null, null, 0, 0);
>            this.big5Dec = big5Dec;
>            this.b2cBmp = b2cBmp;
>            this.b2cSupp = b2cSupp;
>        }
>

Cool.  One latent bug fixed too :-)


>
> Thanks,
> Sherman
>
>
>
>
>

New webrev: http://cr.openjdk.java.net/~andrew/warnings/webrev.05/

Ok to push?

Thanks,
-- 
Andrew :-)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net

PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint: F8EF F1EA 401E 2E60 15FA  7927 142C 2591 94EF D9D8



More information about the core-libs-dev mailing list