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