[gcc/devel/omp/gcc-9] c++: avoid ICE with __builtin_memset (PR90997).

Tobias Burnus burnus@gcc.gnu.org
Thu Mar 5 14:58:00 GMT 2020


https://gcc.gnu.org/g:831d4a690053599d2d0aa9713642b8513fdf8f5b

commit 831d4a690053599d2d0aa9713642b8513fdf8f5b
Author: Jason Merrill <jason@redhat.com>
Date:   Wed Mar 4 17:30:58 2020 -0500

    c++: avoid ICE with __builtin_memset (PR90997).
    
    warn_for_memset calls fold_for_warn, which calls fold_non_dependent_expr, so
    also calling instantiate_non_dependent_expr here is undesirable.
    
    gcc/cp/ChangeLog
    2020-03-04  Jason Merrill  <jason@redhat.com>
    
    	PR c++/90997
    	* semantics.c (finish_call_expr): Don't call
    	instantiate_non_dependent_expr before warn_for_memset.

Diff:
---
 gcc/cp/ChangeLog                     | 6 ++++++
 gcc/cp/semantics.c                   | 1 -
 gcc/testsuite/g++.dg/ext/builtin14.C | 4 ++++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 614844e..da873da 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-04  Jason Merrill  <jason@redhat.com>
+
+	PR c++/90997
+	* semantics.c (finish_call_expr): Don't call
+	instantiate_non_dependent_expr before warn_for_memset.
+
 2020-03-02  Jason Merrill  <jason@redhat.com>
 
 	PR c++/86917
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 0c727ea..4bfb5d1 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2577,7 +2577,6 @@ finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
 	      tree arg2 = (*orig_args)[2];
 	      int literal_mask = ((literal_integer_zerop (arg1) << 1)
 				  | (literal_integer_zerop (arg2) << 2));
-	      arg2 = instantiate_non_dependent_expr (arg2);
 	      warn_for_memset (input_location, arg0, arg2, literal_mask);
 	    }
 
diff --git a/gcc/testsuite/g++.dg/ext/builtin14.C b/gcc/testsuite/g++.dg/ext/builtin14.C
new file mode 100644
index 0000000..38d5a39
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/builtin14.C
@@ -0,0 +1,4 @@
+// PR c++/90997
+
+template<class> void f ()
+{ __builtin_memset (0, 0, int(0.)); }



More information about the Gcc-cvs mailing list