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.
Applying this this to fix the original assert, and assert nulls never
make it to comptypes.
nathan
--
Nathan Sidwell
2020-02-27 Nathan Sidwell <nat...@acm.org>
* class.c (adjust_clone_args): Correct arg-checking assert.
* typeck.c (comptypes): Assert not nulls.
diff --git i/gcc/cp/class.c w/gcc/cp/class.c
index 6b779da0495..b3787f75d7b 100644
--- i/gcc/cp/class.c
+++ w/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 i/gcc/cp/typeck.c w/gcc/cp/typeck.c
index 103a1a439ec..42d0b47cf1b 100644
--- i/gcc/cp/typeck.c
+++ w/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)