diff options
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -5598,6 +5598,9 @@ need_assembler_name_p (tree decl) && decl == TYPE_NAME (TREE_TYPE (decl)) && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl) && !TYPE_ARTIFICIAL (TREE_TYPE (decl)) + && ((TREE_CODE (TREE_TYPE (decl)) != RECORD_TYPE + && TREE_CODE (TREE_TYPE (decl)) != UNION_TYPE) + || TYPE_CXX_ODR_P (TREE_TYPE (decl))) && (type_with_linkage_p (TREE_TYPE (decl)) || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE) && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE)) @@ -13881,7 +13884,10 @@ verify_type_variant (const_tree t, tree tv) Ada also builds variants of types with different TYPE_CONTEXT. */ if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0) verify_variant_match (TYPE_CONTEXT); - verify_variant_match (TYPE_STRING_FLAG); + if (TREE_CODE (t) == ARRAY_TYPE || TREE_CODE (t) == INTEGER_TYPE) + verify_variant_match (TYPE_STRING_FLAG); + if (TREE_CODE (t) == RECORD_TYPE || TREE_CODE (t) == UNION_TYPE) + verify_variant_match (TYPE_CXX_ODR_P); if (TYPE_ALIAS_SET_KNOWN_P (t)) { error ("type variant with %<TYPE_ALIAS_SET_KNOWN_P%>"); @@ -14627,12 +14633,6 @@ verify_type (const_tree t) error ("%<TYPE_CACHED_VALUES_P%> is set while it should not be"); error_found = true; } - if (TYPE_STRING_FLAG (t) - && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE) - { - error ("%<TYPE_STRING_FLAG%> is set on wrong type code"); - error_found = true; - } /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns |