forked from OSchip/llvm-project
First part of PR9968: the __range variable in a dependent C++11 for-range statement is implicitly used by that statement.
llvm-svn: 133572
This commit is contained in:
parent
889ed86d73
commit
f9603354ea
|
@ -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,
|
||||
|
|
|
@ -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 <typename T>
|
||||
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<int> vector;
|
||||
vector.doIt(); // expected-note {{requested here}}
|
||||
}
|
Loading…
Reference in New Issue