warn_for_memset calls fold_for_warn, which calls fold_non_dependent_expr, so
also calling instantiate_non_dependent_expr here is undesirable.

Tested x86_64-pc-linux-gnu, applying to trunk.

        PR c++/90997
        * semantics.c (finish_call_expr): Don't call
        instantiate_non_dependent_expr before warn_for_memset.
---
 gcc/cp/semantics.c                   | 1 -
 gcc/testsuite/g++.dg/ext/builtin14.C | 4 ++++
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/ext/builtin14.C

diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 3b88f1520bc..a489e2cf399 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2664,7 +2664,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 00000000000..38d5a39fd73
--- /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.)); }

base-commit: d0683c187f1806b887ff8b7e476edbde992310ef
-- 
2.18.1

Reply via email to