re PR fortran/79894 (ICE in gfc_add_modify_loc, at fortran/trans.c:159)
authorRichard Biener <rguenther@suse.de>
Mon, 6 Mar 2017 12:48:54 +0000 (12:48 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 6 Mar 2017 12:48:54 +0000 (12:48 +0000)
2017-03-06  Richard Biener  <rguenther@suse.de>

PR fortran/79894
* trans.c (gfc_add_modify_loc): Weaken assert.

From-SVN: r245919

gcc/fortran/ChangeLog
gcc/fortran/trans.c

index 8640646127c1fbccd28f197f90d254792ed91444..5c99ca70f48a7df78c91db0e17ad3759c811b7cc 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-06  Richard Biener  <rguenther@suse.de>
+
+       PR fortran/79894
+       * trans.c (gfc_add_modify_loc): Weaken assert.
+
 2017-03-05  Andre Vehreschild  <vehre@gcc.gnu.org>,
            Alessandro Fanfarillo  <fanfarillo.gcc@gmail.com>
 
index e25ccaa258a6caf58ba1bfa93d87afa2e259cf48..2323e0abe3d19db0cba247e633574725085eb4d3 100644 (file)
@@ -151,11 +151,11 @@ gfc_add_modify_loc (location_t loc, stmtblock_t * pblock, tree lhs, tree rhs)
   tree t1, t2;
   t1 = TREE_TYPE (rhs);
   t2 = TREE_TYPE (lhs);
-  /* Make sure that the types of the rhs and the lhs are the same
+  /* Make sure that the types of the rhs and the lhs are compatible
      for scalar assignments.  We should probably have something
      similar for aggregates, but right now removing that check just
      breaks everything.  */
-  gcc_checking_assert (t1 == t2
+  gcc_checking_assert (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)
                       || AGGREGATE_TYPE_P (TREE_TYPE (lhs)));
 
   tmp = fold_build2_loc (loc, MODIFY_EXPR, void_type_node, lhs,