From: Richard Smith Date: Tue, 21 Jun 2011 23:07:19 +0000 (+0000) Subject: First part of PR9968: the __range variable in a dependent C++11 for-range statement... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd6f36693ed40cef8c8639c04438d865187c1f73;p=clang First part of PR9968: the __range variable in a dependent C++11 for-range statement is implicitly used by that statement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133572 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 9af9c8de1b..0ba4f99abc 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -1406,6 +1406,9 @@ Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation ColonLoc, if (LoopVar->isInvalidDecl()) NoteForRangeBeginEndFunction(*this, BeginExpr.get(), BEF_begin); } + } else { + // The range is implicitly used as a placeholder when it is dependent. + RangeVar->setUsed(); } return Owned(new (Context) CXXForRangeStmt(RangeDS, diff --git a/test/SemaCXX/for-range-unused.cpp b/test/SemaCXX/for-range-unused.cpp new file mode 100644 index 0000000000..7e26c786ed --- /dev/null +++ b/test/SemaCXX/for-range-unused.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x -Wunused + +// PR9968: We used to warn that __range is unused in a dependent for-range. + +template + struct Vector { + void doIt() { + // FIXME: PR10168: Only warn once for this! + int a; // expected-warning 2{{unused variable 'a'}} + + for (auto& e : elements) + ; + } + + T elements[10]; + }; + + +int main(int, char**) { + Vector vector; + vector.doIt(); // expected-note {{requested here}} +}