Sema: Allow 'constexpr' variables in range loops
authorMeador Inge <meadori@codesourcery.com>
Tue, 17 Feb 2015 21:02:56 +0000 (21:02 +0000)
committerMeador Inge <meadori@codesourcery.com>
Tue, 17 Feb 2015 21:02:56 +0000 (21:02 +0000)
This fixes PR22492, which is in response to CWG issue #1204.
Per the CWG issue 'contexpr' variables are now allowed in
for range loops.

llvm-svn: 229543

clang/lib/Sema/SemaDecl.cpp
clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp

index 7ff91cd..dbc4f2c 100644 (file)
@@ -9366,8 +9366,6 @@ void Sema::ActOnCXXForRangeDecl(Decl *D) {
   case SC_OpenCLWorkGroupLocal:
     llvm_unreachable("Unexpected storage class");
   }
-  if (VD->isConstexpr())
-    Error = 5;
   if (Error != -1) {
     Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class)
       << VD->getDeclName() << Error;
index c23cd28..11898df 100644 (file)
@@ -118,7 +118,7 @@ void g() {
   for (extern int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'extern'}}
   for (static int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'static'}}
   for (register int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'register'}} expected-warning {{deprecated}}
-  for (constexpr int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'constexpr'}}
+  for (constexpr int a : A()) {} // OK per CWG issue #1204.
 
   for (auto u : X::NoBeginADL()) { // expected-error {{invalid range expression of type 'X::NoBeginADL'; no viable 'begin' function available}}
   }