[gcc(refs/vendors/redhat/heads/gcc-10-branch)] Fix broken type comparison assert

Jakub Jelinek jakub@gcc.gnu.org
Wed Mar 11 22:54:28 GMT 2020


https://gcc.gnu.org/g:da5f369df6dc500183737e251eb19d91f899b92d

commit da5f369df6dc500183737e251eb19d91f899b92d
Author: Nathan Sidwell <nathan@acm.org>
Date:   Thu Feb 27 06:34:23 2020 -0800

    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:
---
 gcc/cp/ChangeLog | 5 +++++
 gcc/cp/class.c   | 4 ++--
 gcc/cp/typeck.c  | 3 +++
 3 files changed, 10 insertions(+), 2 deletions(-)

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  <nathan@acm.org>
+
+	* class.c (adjust_clone_args): Correct arg-checking assert.
+	* typeck.c (comptypes): Assert not nulls.
+
 2020-02-26  Marek Polacek  <polacek@redhat.com>
 
 	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)


More information about the Gcc-cvs mailing list