aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-03-04 17:30:58 -0500
committerJason Merrill <jason@redhat.com>2020-03-04 17:33:10 -0500
commit831d4a690053599d2d0aa9713642b8513fdf8f5b (patch)
tree3c2b830cbbe6c47a7d7d4b4303ae17e164b23daf
parentbde2e6e59829f746f3b1191ca4bfedf3313ad6eb (diff)
downloadgcc-831d4a690053599d2d0aa9713642b8513fdf8f5b.zip
gcc-831d4a690053599d2d0aa9713642b8513fdf8f5b.tar.gz
gcc-831d4a690053599d2d0aa9713642b8513fdf8f5b.tar.bz2
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.
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c1
-rw-r--r--gcc/testsuite/g++.dg/ext/builtin14.C4
3 files changed, 10 insertions, 1 deletions
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.)); }