Skip to content
  • Alexey Bataev's avatar
    Fix for PR28523: unexpected compilation error. · 57621b50
    Alexey Bataev authored
    Clang emits error message for the following code:
    ```
    template <class F> void parallel_loop(F &&f) { f(0); }
    
    int main() {
      int x;
      parallel_loop([&](auto y) {
        {
          x = y;
        };
      });
    }
    ```
    
    $ clang++ --std=gnu++14 clang_test.cc -o clang_test
    clang_test.cc:9:7: error: reference to local variable 'x' declared in enclosing function 'main'
          x = y;
                ^
    clang_test.cc:2:48: note: in instantiation of function template specialization 'main()::(anonymous class)::operator()<int>' requested here
                template <class F> void parallel_loop(F &&f) { f(0); }
                                                               ^
    clang_test.cc:6:3: note: in instantiation of function template specialization 'parallel_loop<(lambda at clang_test.cc:6:17)>' requested here parallel_loop([&](auto y) {
               ^
    clang_test.cc:5:7: note: 'x' declared here
          int x;
              ^
    1 error generated.
    
    Patch fixes this issue.
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286584 91177308-0d34-0410-b5e6-96231b3b80d8
    57621b50