GCC Wikia
Advertisement

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

概要[]

  • gcc-4.1.0/gcc/tree.cにて定義
  • TYPEの計算の部分がPLACEHOLDER_EXPRを含むならば真を返す
    • サイズ、境界、予選(QUAL_UNION_TYPEのために)とフィールド位置を含む

引数[]

実装[]

 2096 /* Return true if any part of the computation of TYPE involves a
 2097    PLACEHOLDER_EXPR.  This includes size, bounds, qualifiers
 2098    (for QUAL_UNION_TYPE) and field positions.  */
2099 
2100 static bool
2101 type_contains_placeholder_1 (tree type)
2102 {

~

 2103   /* If the size contains a placeholder or the parent type (component type in
 2104      the case of arrays) type involves a placeholder, this type does.  */
2105   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2106       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2107       || (TREE_TYPE (type) != 0
2108           && type_contains_placeholder_p (TREE_TYPE (type))))
2109     return true;
2110 

~
~

 2111   /* Now do type-specific checks.  Note that the last part of the check above
 2112      greatly limits what we have to do below.  */
2113   switch (TREE_CODE (type))
2114     {
2115     case [[VOID_TYPE>enum tree_code]]:
2116     case [[COMPLEX_TYPE>enum tree_code]]:
2117     case [[ENUMERAL_TYPE>enum tree_code]]:
2118     case [[BOOLEAN_TYPE>enum tree_code]]:
2119     case [[CHAR_TYPE>enum tree_code]]:
2120     case [[POINTER_TYPE>enum tree_code]]:
2121     case [[OFFSET_TYPE>enum tree_code]]:
2122     case [[REFERENCE_TYPE>enum tree_code]]:
2123     case [[METHOD_TYPE>enum tree_code]]:
2124     case [[FUNCTION_TYPE>enum tree_code]]:
2125     case [[VECTOR_TYPE>enum tree_code]]:
2126       return false;
2127 

~

2128     case [[INTEGER_TYPE>enum tree_code]]:
2129     case [[REAL_TYPE>enum tree_code]]:
 2130       /* Here we just check the bounds.  */
2131       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2132               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2133 

~

2134     case [[ARRAY_TYPE>enum tree_code]]:
 2135       /* We're already checked the component type (TREE_TYPE), so just check
 2136          the index type.  */
2137       return type_contains_placeholder_p (TYPE_DOMAIN (type));
2138 

~

2139     case [[RECORD_TYPE>enum tree_code]]:
2140     case [[UNION_TYPE>enum tree_code]]:
2141     case [[QUAL_UNION_TYPE>enum tree_code]]:
2142       {
2143         tree field;
2144 
2145         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2146           if (TREE_CODE (field) == [[FIELD_DECL>enum tree_code]]
2147               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2148                   || (TREE_CODE (type) == [[QUAL_UNION_TYPE>enum tree_code]]
2149                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2150                   || type_contains_placeholder_p (TREE_TYPE (field))))
2151             return true;
2152 
2153         return false;
2154       }
2155 

~

2156     default:
2157       gcc_unreachable ();
2158     }
2159 }


リンク元

Advertisement