GCC Wikia
Advertisement

このページを編集する際は,編集に関する方針に従ってください.[]

概要[]

引数[]

概要[]

526 /* Ditto, but narrowest signed type.  */
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 

  • flagを元に型を求める

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 }



リンク元

Advertisement