From: Nathan Sidwell Date: Thu, 27 Feb 2020 14:34:23 +0000 (-0800) Subject: Fix broken type comparison assert X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=da5f369df6dc500183737e251eb19d91f899b92d;p=gcc.git Fix broken type comparison assert In implementing Jason's suggested direction for 93933, the compiler exploded in a surprising way. Turns out an assert had been passing NULLS to comptypes, and therefore not checking what it intended. Further comptypes, could silently accept such nulls under most circumstances. * class.c (adjust_clone_args): Correct arg-checking assert. * typeck.c (comptypes): Assert not nulls. --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b2d952d8220..5e9eeec17ee 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2020-02-27 Nathan Sidwell + + * class.c (adjust_clone_args): Correct arg-checking assert. + * typeck.c (comptypes): Assert not nulls. + 2020-02-26 Marek Polacek PR c++/93789 - ICE with invalid array bounds. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 6b779da0495..b3787f75d7b 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -4900,8 +4900,8 @@ adjust_clone_args (tree decl) break; } - gcc_assert (same_type_p (TREE_TYPE (decl_parms), - TREE_TYPE (clone_parms))); + gcc_checking_assert (same_type_p (TREE_VALUE (decl_parms), + TREE_VALUE (clone_parms))); if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms)) { diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 103a1a439ec..42d0b47cf1b 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1483,10 +1483,13 @@ structural_comptypes (tree t1, tree t2, int strict) bool comptypes (tree t1, tree t2, int strict) { + gcc_checking_assert (t1 && t2); + if (strict == COMPARE_STRICT && comparing_specializations && (t1 != TYPE_CANONICAL (t1) || t2 != TYPE_CANONICAL (t2))) /* If comparing_specializations, treat dependent aliases as distinct. */ strict = COMPARE_STRUCTURAL; + if (strict == COMPARE_STRICT) { if (t1 == t2)