Skip to content
Snippets Groups Projects
Commit c51e31a0 authored by Marek Polacek's avatar Marek Polacek
Browse files

c++: Extend -Wrange-loop-construct for binding-to-temp [PR94695]

This patch finishes the second half of -Wrange-loop-construct I promised
to implement: it warns when a loop variable in a range-based for-loop is
initialized with a value of a different type resulting in a copy.  For
instance:

  int arr[10];
  for (const double &x : arr) { ... }

where in every iteration we have to create and destroy a temporary value
of type double, to which we bind the reference.  This could negatively
impact performance.

As per Clang, this doesn't warn when the range returns a copy, hence the
glvalue_p check.

gcc/ChangeLog:

	PR c++/94695
	* doc/invoke.texi: Update the -Wrange-loop-construct description.

gcc/cp/ChangeLog:

	PR c++/94695
	* parser.c (warn_for_range_copy): Warn when the loop variable is
	initialized with a value of a different type resulting in a copy.

gcc/testsuite/ChangeLog:

	PR c++/94695
	* g++.dg/warn/Wrange-loop-construct2.C: New test.
parent 6f20c42c
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment