« 2007年7月29日 - 2007年8月4日 | トップページ | 2007年9月30日 - 2007年10月6日 »

2007年9月11日 (火)

コメントがおかしい?

昨日GCC Wikiaでソースを読んでいて、コメントが変じゃないかというところにぶつかった。
gcc/c-lex.cの513行目541行目の右にあるコメントが逆になると思う。

513行目を含む関数1つを下に載せます。

  527 static enum integer_type_kind
528 narrowest_signed_type (unsigned HOST_WIDE_INT low,
529                        unsigned HOST_WIDE_INT high, unsigned int flags)
530 {
531   enum integer_type_kind itk;
532
533   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
534     itk = itk_int;
535   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
536     itk = itk_long;
537   else
538     itk = itk_long_long;
539
540
541   for (; itk < itk_none; itk += 2 /* skip signed types */)
542     {
543       tree upper = TYPE_MAX_VALUE (integer_types[itk]);
544      
545       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
546           || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
547               && TREE_INT_CST_LOW (upper) >= low))
548         return itk;
549     }
550
551   return itk_none;
552 }

ちなみにGCC Wikiaでは
http://ja.gcc.wikia.com/wiki/Narrowest_unsigned_type

http://ja.gcc.wikia.com/wiki/Narrowest_signed_type

 

ここはフラグを元に型を決めている所の一部なのだけど、
513行目からのループはsignedのついた型にするために、
unsignedは不要なので2を加えることで一個とばしで進んでいる。
(enum integer_type_kindは同じ型の符号あり、なしが並んでいる。)

コメントは「singed型を飛ばす」と訳せると思う。
となると、本来の処理と逆なのではないか。と思うわけです。

間違っていたとしてどうしたらいいもんなんだろう。
パッチをメーリングリストに流すのが一番なのかぁ。
でもなんか変な感じがする。

よかったら
このコメントが間違っているかどうかの検証と
間違っていた場合の対策を教えてくれると嬉しいです。

| | コメント (1) | トラックバック (0)

« 2007年7月29日 - 2007年8月4日 | トップページ | 2007年9月30日 - 2007年10月6日 »