diff options
author | Martin Liska <mliska@suse.cz> | 2022-12-02 11:37:41 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2023-02-01 15:42:34 +0100 |
commit | 8a7196977f6e91ad12c209cb2e3dbfe9f0fd3c3b (patch) | |
tree | 76c91f937f9fbf76c62c55b8d611a6fe4d7fc0bc | |
parent | 881bf8de9b07fb501d61ade8f521f1cc9dbe712e (diff) | |
download | gcc-8a7196977f6e91ad12c209cb2e3dbfe9f0fd3c3b.zip gcc-8a7196977f6e91ad12c209cb2e3dbfe9f0fd3c3b.tar.gz gcc-8a7196977f6e91ad12c209cb2e3dbfe9f0fd3c3b.tar.bz2 |
ipa: silent -Wodr notes with -w
If -w is used, warn_odr properly sets *warned = false and
so it should be preserved when calling warn_types_mismatch.
Noticed that during a LTO reduction where I used -w.
gcc/ChangeLog:
* ipa-devirt.cc (odr_types_equivalent_p): Respect *warned
value if set.
-rw-r--r-- | gcc/ipa-devirt.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc index 5e27e4a..e26266e 100644 --- a/gcc/ipa-devirt.cc +++ b/gcc/ipa-devirt.cc @@ -1300,7 +1300,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, NULL, NULL, warn, warned, G_("it is defined as a pointer to different type " "in another translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_TYPE (t1), TREE_TYPE (t2), loc1, loc2); return false; @@ -1315,7 +1315,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, NULL, NULL, warn, warned, G_("a different type is defined " "in another translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_TYPE (t1), TREE_TYPE (t2), loc1, loc2); return false; } @@ -1333,7 +1333,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, NULL, NULL, warn, warned, G_("a different type is defined in another " "translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_TYPE (t1), TREE_TYPE (t2), loc1, loc2); } gcc_assert (TYPE_STRING_FLAG (t1) == TYPE_STRING_FLAG (t2)); @@ -1375,7 +1375,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, NULL, NULL, warn, warned, G_("has different return value " "in another translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_TYPE (t1), TREE_TYPE (t2), loc1, loc2); return false; } @@ -1398,7 +1398,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, NULL, NULL, warn, warned, G_("has different parameters in another " "translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_VALUE (parms1), TREE_VALUE (parms2), loc1, loc2); return false; @@ -1484,7 +1484,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, warn_odr (t1, t2, f1, f2, warn, warned, G_("a field of same name but different type " "is defined in another translation unit")); - if (warn && warned) + if (warn && (warned == NULL || *warned)) warn_types_mismatch (TREE_TYPE (f1), TREE_TYPE (f2), loc1, loc2); return false; } |