summaryrefslogtreecommitdiff
path: root/0041-Port-fixes-in-icp-to-GCC-12.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
committerCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
commit73127104a245052cd5cf29cdaaca3e5c32c70348 (patch)
tree8e28b63e478c43c252f18b49836dff7313affe54 /0041-Port-fixes-in-icp-to-GCC-12.patch
parent49d3feaf4665cdb07576fc1a2382a4d82a612d35 (diff)
automatic import of gccopeneuler24.03_LTS_SP1
Diffstat (limited to '0041-Port-fixes-in-icp-to-GCC-12.patch')
-rw-r--r--0041-Port-fixes-in-icp-to-GCC-12.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/0041-Port-fixes-in-icp-to-GCC-12.patch b/0041-Port-fixes-in-icp-to-GCC-12.patch
new file mode 100644
index 0000000..723f8b0
--- /dev/null
+++ b/0041-Port-fixes-in-icp-to-GCC-12.patch
@@ -0,0 +1,100 @@
+From aaa117a9ff58fb208e8c8859e075ca425f995f63 Mon Sep 17 00:00:00 2001
+From: Diachkov Ilia <diachkov.ilia1@huawei-partners.com>
+Date: Tue, 27 Feb 2024 07:43:57 +0800
+Subject: [PATCH 07/18] Port fixes in icp to GCC 12
+
+---
+ gcc/ipa-devirt.cc | 37 ++++++++++++++++++++++++++++++-------
+ 1 file changed, 30 insertions(+), 7 deletions(-)
+
+diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc
+index 383839189..318535d06 100644
+--- a/gcc/ipa-devirt.cc
++++ b/gcc/ipa-devirt.cc
+@@ -4431,6 +4431,11 @@ print_type_set(unsigned ftype_uid, type_alias_map *map)
+ if (!map->count (ftype_uid))
+ return;
+ type_set* s = (*map)[ftype_uid];
++ if (!s)
++ {
++ fprintf (dump_file, "%d (no set)", ftype_uid);
++ return;
++ }
+ for (type_set::const_iterator it = s->begin (); it != s->end (); it++)
+ fprintf (dump_file, it == s->begin () ? "%d" : ", %d", *it);
+ }
+@@ -4696,12 +4701,19 @@ maybe_register_aliases (tree type1, tree type2)
+ if (register_ailas_type (type1, type2, ta_map))
+ analyze_pointees (type1, type2);
+ }
++ unsigned type1_uid = TYPE_UID (type1);
++ unsigned type2_uid = TYPE_UID (type2);
++ if (type_uid_map->count (type1_uid) == 0)
++ (*type_uid_map)[type1_uid] = type1;
++ if (type_uid_map->count (type2_uid) == 0)
++ (*type_uid_map)[type2_uid] = type2;
++
+ /* If function and non-function type pointers alias,
+ the function type is unsafe. */
+ if (FUNCTION_POINTER_TYPE_P (type1) && !FUNCTION_POINTER_TYPE_P (type2))
+- unsafe_types->insert (TYPE_UID (type1));
++ unsafe_types->insert (type1_uid);
+ if (FUNCTION_POINTER_TYPE_P (type2) && !FUNCTION_POINTER_TYPE_P (type1))
+- unsafe_types->insert (TYPE_UID (type2));
++ unsafe_types->insert (type2_uid);
+
+ /* Try to figure out with pointers to incomplete types. */
+ if (POINTER_TYPE_P (type1) && POINTER_TYPE_P (type2))
+@@ -4825,10 +4837,12 @@ compare_block_and_init_type (tree block, tree t1)
+ static void
+ analyze_global_var (varpool_node *var)
+ {
+- var->get_constructor();
+ tree decl = var->decl;
+- if (TREE_CODE (decl) == SSA_NAME || !DECL_INITIAL (decl)
+- || integer_zerop (DECL_INITIAL (decl)))
++ if (decl || !DECL_INITIAL (decl))
++ return;
++ var->get_constructor ();
++ if (TREE_CODE (decl) == SSA_NAME || integer_zerop (DECL_INITIAL (decl))
++ || TREE_CODE (DECL_INITIAL (decl)) == ERROR_MARK)
+ return;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+@@ -4998,7 +5012,9 @@ analyze_assign_stmt (gimple *stmt)
+ {
+ rhs = TREE_OPERAND (rhs, 0);
+ if (VAR_OR_FUNCTION_DECL_P (rhs) || TREE_CODE (rhs) == STRING_CST
+- || TREE_CODE (rhs) == ARRAY_REF || TREE_CODE (rhs) == PARM_DECL)
++ || TREE_CODE (rhs) == ARRAY_REF || TREE_CODE (rhs) == PARM_DECL
++ || TREE_CODE (rhs) == LABEL_DECL || TREE_CODE (rhs) == CONST_DECL
++ || TREE_CODE (rhs) == RESULT_DECL)
+ rhs_type = build_pointer_type (TREE_TYPE (rhs));
+ else if (TREE_CODE (rhs) == COMPONENT_REF)
+ {
+@@ -5012,7 +5028,12 @@ analyze_assign_stmt (gimple *stmt)
+ gcc_assert (POINTER_TYPE_P (rhs_type));
+ }
+ else
+- gcc_unreachable();
++ {
++ fprintf (dump_file, "\nUnsupported rhs type %s in assign stmt: ",
++ get_tree_code_name (TREE_CODE (rhs)));
++ print_gimple_stmt (dump_file, stmt, 0);
++ gcc_unreachable ();
++ }
+ }
+ else
+ rhs_type = TREE_TYPE (rhs);
+@@ -5710,6 +5731,8 @@ merge_fs_map_for_ftype_aliases ()
+ decl_set *d_set = it1->second;
+ tree type = (*type_uid_map)[it1->first];
+ type_set *set = (*fta_map)[it1->first];
++ if (!set)
++ continue;
+ for (type_set::const_iterator it2 = set->begin ();
+ it2 != set->end (); it2++)
+ {
+--
+2.33.0
+