From 6ac4e2f4b2ca9980670e7d3815a9140730df1005 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Tue, 17 Sep 2024 16:58:37 -0400 Subject: c++: tweak for -Wrange-loop-construct [PR116731] This PR reports that the warning would be better off using a check for trivially constructible rather than trivially copyable. LLVM accepted a similar fix: https://github.com/llvm/llvm-project/issues/47355 PR c++/116731 gcc/cp/ChangeLog: * parser.cc (warn_for_range_copy): Check if TYPE is trivially constructible, not copyable. gcc/testsuite/ChangeLog: * g++.dg/warn/Wrange-loop-construct3.C: New test. Reviewed-by: Jason Merrill --- gcc/cp/parser.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'gcc/cp/parser.cc') diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 6d3be94..f50534f 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -14394,11 +14394,13 @@ warn_for_range_copy (tree decl, tree expr) else if (!CP_TYPE_CONST_P (type)) return; - /* Since small trivially copyable types are cheap to copy, we suppress the - warning for them. 64B is a common size of a cache line. */ + /* Since small trivially constructible types are cheap to construct, we + suppress the warning for them. 64B is a common size of a cache line. */ + tree vec = make_tree_vec (1); + TREE_VEC_ELT (vec, 0) = TREE_TYPE (expr); if (TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST || (tree_to_uhwi (TYPE_SIZE_UNIT (type)) <= 64 - && trivially_copyable_p (type))) + && is_trivially_xible (INIT_EXPR, type, vec))) return; /* If we can initialize a reference directly, suggest that to avoid the -- cgit v1.1