このページを編集する際は,編集に関する方針に従ってください.[]
概要[]
- gcc-4.1.0/gcc/tree.cにて定義
- TYPEの計算の部分がPLACEHOLDER_EXPRを含むならば真を返す
- サイズ、境界、予選(QUAL_UNION_TYPEのために)とフィールド位置を含む
引数[]
- tree 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 }