brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.3 KiB · 80250e6 Raw
492 lines · cpp
1// RUN: cp %s %t2// RUN: %clang_cc1 -x c++ -Wunused-lambda-capture -Wno-unused-value -std=c++1z -fixit %t3// RUN: grep -v CHECK %t | FileCheck %s4// RUN: %clang_cc1 -x c++ -Wunused-lambda-capture -Wno-unused-value -std=c++1z -fsyntax-only %s 2>&1 | FileCheck --match-full-lines --strict-whitespace --check-prefix POINTER %s5 6 7#define MACRO_CAPTURE(...) __VA_ARGS__8#define M_A a9#define M_B b10 11int main() {12    int a = 0, b = 0, c = 0, d = 0;13    auto F0 = [a, &b]() mutable {14    // CHECK: auto F0 = [a]()15         // POINTER:{{^.*}}|     auto F0 = [a, &b]() mutable {16    // POINTER-NEXT:{{^.*}}|                 ~~~^17 18        a++;19    };20 21    auto F1 = [&a, &b]() {22    // CHECK: auto F1 = []() {23         // POINTER:{{^.*}}|     auto F1 = [&a, &b]() {24    // POINTER-NEXT:{{^.*}}|                ~^~25         // POINTER:{{^.*}}|     auto F1 = [&a, &b]() {26    // POINTER-NEXT:{{^.*}}|                  ~~~^27    };28 29    auto F2 = [&a, b]() {30    // CHECK: auto F2 = []() {31         // POINTER:{{^.*}}|     auto F2 = [&a, b]() {32    // POINTER-NEXT:{{^.*}}|                ~^~33         // POINTER:{{^.*}}|     auto F2 = [&a, b]() {34    // POINTER-NEXT:{{^.*}}|                  ~~^35    };36 37    auto F3 = [&a,38         &b]() {39    // CHECK: auto F3 = []() {40         // POINTER:{{^.*}}|     auto F3 = [&a,41    // POINTER-NEXT:{{^.*}}|                ~^~42    // POINTER-NEXT:{{^.*}}|          &b]() {43         // POINTER:{{^.*}}|     auto F3 = [&a,44    // POINTER-NEXT:{{^.*}}|                  ~45    // POINTER-NEXT:{{^.*}}|          &b]() {46    // POINTER-NEXT:{{^.*}}|          ~^47 48    };49 50    auto F4 = [&a51        , &b]() {52    // CHECK: auto F4 = []() {53         // POINTER:{{^.*}}|     auto F4 = [&a54    // POINTER-NEXT:{{^.*}}|                ~^55    // POINTER-NEXT:{{^.*}}|         , &b]() {56    // POINTER-NEXT:{{^.*}}|         ~57         // POINTER:{{^.*}}|     auto F4 = [&a58    // POINTER-NEXT:{{^.*}}|                  {{$}}59    // POINTER-NEXT:{{^.*}}|         , &b]() {60    // POINTER-NEXT:{{^.*}}|         ~~~^61    };62    auto F5 = [&a ,&b]()  {63    // CHECK: auto F5 = []() {64         // POINTER:{{^.*}}|     auto F5 = [&a ,&b]()  {65    // POINTER-NEXT:{{^.*}}|                ~^~~66         // POINTER:{{^.*}}|     auto F5 = [&a ,&b]()  {67    // POINTER-NEXT:{{^.*}}|                   ~~^68    };69 70    auto F0a = [a, &b]() mutable {71    // CHECK: auto F0a = [a]() mutable {72         // POINTER:{{^.*}}|     auto F0a = [a, &b]() mutable {73    // POINTER-NEXT:{{^.*}}|                  ~~~^74        a++;75    };76 77    auto F1a = [&a, &b]() {78    // CHECK: auto F1a = [&a]() {79         // POINTER:{{^.*}}|     auto F1a = [&a, &b]() {80    // POINTER-NEXT:{{^.*}}|                   ~~~^81        a++;82    };83 84    auto F2a = [&a, b]() {85    // CHECK: auto F2a = [&a]() {86         // POINTER:{{^.*}}|     auto F2a = [&a, b]() {87    // POINTER-NEXT:{{^.*}}|                   ~~^88        a++;89    };90 91    auto F3a = [&a,92         &b]() {93    // CHECK: auto F3a = [&a]() {94         // POINTER:{{^.*}}|     auto F3a = [&a,95    // POINTER-NEXT:{{^.*}}|                   ~96    // POINTER-NEXT:{{^.*}}|          &b]() {97    // POINTER-NEXT:{{^.*}}|          ~^98        a++;99    };100 101    auto F4a = [&a102        , &b]() {103    // CHECK: auto F4a = [&a]() {104         // POINTER:{{^.*}}|     auto F4a = [&a105    // POINTER-NEXT:{{^.*}}|                   {{$}}106    // POINTER-NEXT:{{^.*}}|         , &b]() {107    // POINTER-NEXT:{{^.*}}|         ~~~^108        a++;109    };110 111    auto F5a = [&a ,&b]() {112    // CHECK: auto F5a = [&a]() {113         // POINTER:{{^.*}}|     auto F5a = [&a ,&b]() {114    // POINTER-NEXT:{{^.*}}|                    ~~^115        a++;116    };117    auto F0b = [a, &b]() mutable {118    // CHECK: auto F0b = [ &b]() mutable119         // POINTER:{{^.*}}|     auto F0b = [a, &b]() mutable {120    // POINTER-NEXT:{{^.*}}|                 ^~121 122        b++;123    };124 125    auto F1b = [&a, &b]() {126    // CHECK: auto F1b = [ &b]() {127         // POINTER:{{^.*}}|     auto F1b = [&a, &b]() {128    // POINTER-NEXT:{{^.*}}|                 ~^~129        b++;130    };131 132    auto F2b = [&a, b]() mutable {133    // CHECK: auto F2b = [ b]() mutable {134         // POINTER:{{^.*}}|     auto F2b = [&a, b]() mutable {135    // POINTER-NEXT:{{^.*}}|                 ~^~136        b++;137    };138 139    auto F3b = [&a,140         &b]() {141    // CHECK: auto F3b = [ &b]() {142         // POINTER:{{^.*}}|     auto F3b = [&a,143    // POINTER-NEXT:{{^.*}}|                 ~^~144    // POINTER-NEXT:{{^.*}}|          &b]() {145        b++;146    };147 148    auto F4b = [&a149        , &b]() {150    // CHECK: auto F4b = [ &b]() {151         // POINTER:{{^.*}}|     auto F4b = [&a152    // POINTER-NEXT:{{^.*}}|                 ~^153    // POINTER-NEXT:{{^.*}}|         , &b]() {154    // POINTER-NEXT:{{^.*}}|         ~155 156        b++;157    };158    auto F5b = [&a ,&b]() {159    // CHECK: auto F5b = [&b]() {160         // POINTER:{{^.*}}|     auto F5b = [&a ,&b]() {161    // POINTER-NEXT:{{^.*}}|                 ~^~~162        b++;163    };164 165    auto F6 = [&a, &b, &c]() {166    // CHECK: auto F6 = [&a, &b]() {167         // POINTER:{{^.*}}|     auto F6 = [&a, &b, &c]() {168    // POINTER-NEXT:{{^.*}}|                      ~~~^169        a++;170        b++;171    };172    auto F7 = [&a, &b, &c]() {173    // CHECK: auto F7 = [&a, &c]() {174         // POINTER:{{^.*}}|     auto F7 = [&a, &b, &c]() {175    // POINTER-NEXT:{{^.*}}|                  ~~~^176        a++;177        c++;178    };179    auto F8 = [&a, &b, &c]() {180    // CHECK: auto F8 = [ &b, &c]() {181         // POINTER:{{^.*}}|     auto F8 = [&a, &b, &c]() {182    // POINTER-NEXT:{{^.*}}|                ~^~183        b++;184        c++;185    };186    auto F9 = [&a, &b    , &c]() {187    // CHECK: auto F9 = [&a   , &c]() {188         // POINTER:{{^.*}}|     auto F9 = [&a, &b    , &c]() {189    // POINTER-NEXT:{{^.*}}|                  ~~~^190        a++;191        c++;192    };193    auto F10 = [&a,194         &b, &c]() {195    // CHECK: auto F10 = [&a, &c]() {196         // POINTER:{{^.*}}|     auto F10 = [&a,197    // POINTER-NEXT:{{^.*}}|                   ~198    // POINTER-NEXT:{{^.*}}|          &b, &c]() {199    // POINTER-NEXT:{{^.*}}|          ~^200        a++;201        c++;202    };203    auto F11 = [&a,  &b  ,204         &c]() {205    // CHECK: auto F11 = [&a ,206    // CHECK-NEXT:      &c]() {207         // POINTER:{{^.*}}|     auto F11 = [&a,  &b  ,208    // POINTER-NEXT:{{^.*}}|                   ~~~~^209        a++;210        c++;211    };212    auto F12 = [a = 0,  b  ,213         c]() mutable {214    // CHECK: auto F12 = [ b  ,215    // CHECK-NEXT:     c]() mutable {216         // POINTER:{{^.*}}|     auto F12 = [a = 0,  b  ,217    // POINTER-NEXT:{{^.*}}|                 ^~~~~~218        b++;219        c++;220    };221    auto F13 = [a,  b = 0 ,222         c]() mutable {223    // CHECK: auto F13 = [a ,224    // CHECK-NEXT:     c]() mutable {225         // POINTER:{{^.*}}|     auto F13 = [a,  b = 0 ,226    // POINTER-NEXT:{{^.*}}|                  ~~~^~~~~227        a++;228        c++;229    };230    auto F14 = [a,  b ,231         c232        = 0]() mutable {233    // CHECK: auto F14 = [a,  b]() mutable {234         // POINTER:{{^.*}}|     auto F14 = [a,  b ,235    // POINTER-NEXT:{{^.*}}|                       ~236    // POINTER-NEXT:{{^.*}}|          c237    // POINTER-NEXT:{{^.*}}|          ^238    // POINTER-NEXT:{{^.*}}|         = 0]() mutable {239    // POINTER-NEXT:{{^.*}}|         ~~~240        a++;241        b++;242    };243 244    // We want to remove everything including the comment245    // as well as the comma following the capture of `a`246    auto F15 = [&a /* comment */, &b]() {247    // CHECK: auto F15 = [ &b]() {248         // POINTER:{{^.*}}|     auto F15 = [&a /* comment */, &b]() {249    // POINTER-NEXT:{{^.*}}|                 ~^~~~~~~~~~~~~~~~250        b++;251    };252 253    // The comment preceding the first capture remains. This is more254    // by design of the fixit logic than anything else, but we should255    // consider the preceding comment might actually be a comment for256    // the entire capture set, so maybe we do want it to hang around257    auto F16 = [/* comment */ &a , &b]() {258    // CHECK: auto F16 = [/* comment */ &b]() {259         // POINTER:{{^.*}}|     auto F16 = [/* comment */ &a , &b]() {260    // POINTER-NEXT:{{^.*}}|                               ~^~~261        b++;262    };263 264    auto F16b = [&a ,    /* comment */ &b]() {265    // CHECK: auto F16b = [ /* comment */ &b]() {266         // POINTER:{{^.*}}|     auto F16b = [&a ,    /* comment */ &b]() {267    // POINTER-NEXT:{{^.*}}|                  ~^~~268        b++;269    };270 271    auto F17 = [&a /* comment */, &b]() {272    // CHECK: auto F17 = [&a]() {273         // POINTER:{{^.*}}|     auto F17 = [&a /* comment */, &b]() {274    // POINTER-NEXT:{{^.*}}|                    ~~~~~~~~~~~~~~~~^275 276        a++;277    };278 279    auto F18 = [&a , /* comment */ &b]() {280    // CHECK: auto F18 = [&a]() {281         // POINTER:{{^.*}}|     auto F18 = [&a , /* comment */ &b]() {282    // POINTER-NEXT:{{^.*}}|                    ~~~~~~~~~~~~~~~~~^283 284        a++;285    };286 287    auto F19 = [&a /* comment */, &b /* comment */]() {288    // CHECK: auto F19 = [&a /* comment */]() {289         // POINTER:{{^.*}}|     auto F19 = [&a /* comment */, &b /* comment */]() {290    // POINTER-NEXT:{{^.*}}|                    ~~~~~~~~~~~~~~~~^291 292        a++;293    };294 295    auto F20 = [MACRO_CAPTURE(&a, &b)]() {296    // CHECK: auto F20 = [MACRO_CAPTURE(&a, &b)]() {297         // POINTER:{{^.*}}|     auto F20 = [MACRO_CAPTURE(&a, &b)]() {298    // POINTER-NEXT:{{^.*}}|                               ~^299          // POINTER:{{^.*}}|     auto F20 = [MACRO_CAPTURE(&a, &b)]() {300    // POINTER-NEXT:{{^.*}}|                                   ~^301    };302 303    auto F21 = [MACRO_CAPTURE(&a), &b]() {304    // CHECK: auto F21 = []() {305         // POINTER:{{^.*}}|     auto F21 = [MACRO_CAPTURE(&a), &b]() {306    // POINTER-NEXT:{{^.*}}|                 ~~~~~~~~~~~~~~~^~~307         // POINTER:{{^.*}}|     auto F21 = [MACRO_CAPTURE(&a), &b]() {308    // POINTER-NEXT:{{^.*}}|                                  ~~~^309    };310 311    auto F22 = [MACRO_CAPTURE(&a,) &b]() {312    // CHECK: auto F22 = [MACRO_CAPTURE(&a,) &b]() {313         // POINTER:{{^.*}}|     auto F22 = [MACRO_CAPTURE(&a,) &b]() {314    // POINTER-NEXT:{{^.*}}|                               ~^315         // POINTER:{{^.*}}|     auto F22 = [MACRO_CAPTURE(&a,) &b]() {316    // POINTER-NEXT:{{^.*}}|                                    ~^317    };318    auto F23 = [&a MACRO_CAPTURE(, &b)]() {319    // CHECK: auto F23 = [&a]() {320         // POINTER:{{^.*}}|     auto F23 = [&a MACRO_CAPTURE(, &b)]() {321    // POINTER-NEXT:{{^.*}}|                 ~^322         // POINTER:{{^.*}}|     auto F23 = [&a MACRO_CAPTURE(, &b)]() {323    // POINTER-NEXT:{{^.*}}|                    ~~~~~~~~~~~~~~~~~^~324    };325    auto F24 = [&a, MACRO_CAPTURE(&b)]() {326    // CHECK: auto F24 = []() {327         // POINTER:{{^.*}}|     auto F24 = [&a, MACRO_CAPTURE(&b)]() {328    // POINTER-NEXT:{{^.*}}|                 ~^~329         // POINTER:{{^.*}}|     auto F24 = [&a, MACRO_CAPTURE(&b)]() {330    // POINTER-NEXT:{{^.*}}|                   ~~~~~~~~~~~~~~~~~^~331    };332 333    auto F20a = [MACRO_CAPTURE(&a, &b)]() {334    // CHECK: auto F20a = [MACRO_CAPTURE(&a, &b)]() {335         // POINTER:{{^.*}}|     auto F20a = [MACRO_CAPTURE(&a, &b)]() {336    // POINTER-NEXT:{{^.*}}|                                    ~^337      a++;338    };339 340    auto F21a = [MACRO_CAPTURE(&a), &b]() {341    // CHECK: auto F21a = [MACRO_CAPTURE(&a)]() {342         // POINTER:{{^.*}}|     auto F21a = [MACRO_CAPTURE(&a), &b]() {343    // POINTER-NEXT:{{^.*}}|                                   ~~~^344      a++;345    };346 347    auto F22a = [MACRO_CAPTURE(&a,) &b]() {348    // CHECK: auto F22a = [MACRO_CAPTURE(&a,) &b]() {349         // POINTER:{{^.*}}|     auto F22a = [MACRO_CAPTURE(&a,) &b]() {350    // POINTER-NEXT:{{^.*}}|                                     ~^351      a++;352    };353    auto F23a = [&a MACRO_CAPTURE(, &b)]() {354    // CHECK: auto F23a = [&a]() {355         // POINTER:{{^.*}}|     auto F23a = [&a MACRO_CAPTURE(, &b)]() {356    // POINTER-NEXT:{{^.*}}|                     ~~~~~~~~~~~~~~~~~^~357      a++;358    };359    auto F24a = [&a, MACRO_CAPTURE(&b)]() {360    // CHECK: auto F24a = [&a]() {361         // POINTER:{{^.*}}|     auto F24a = [&a, MACRO_CAPTURE(&b)]() {362    // POINTER-NEXT:{{^.*}}|                    ~~~~~~~~~~~~~~~~~^~363      a++;364    };365    auto F20b = [MACRO_CAPTURE(&a, &b)]() {366    // CHECK: auto F20b = [MACRO_CAPTURE(&a, &b)]() {367         // POINTER:{{^.*}}|     auto F20b = [MACRO_CAPTURE(&a, &b)]() {368    // POINTER-NEXT:{{^.*}}|                                ~^369      b++;370    };371 372    auto F21b = [MACRO_CAPTURE(&a), &b]() {373    // CHECK: auto F21b = [ &b]() {374         // POINTER:{{^.*}}|     auto F21b = [MACRO_CAPTURE(&a), &b]() {375    // POINTER-NEXT:{{^.*}}|                  ~~~~~~~~~~~~~~~^~~376      b++;377    };378 379    auto F22b = [MACRO_CAPTURE(&a,) &b]() {380    // CHECK: auto F22b = [MACRO_CAPTURE(&a,) &b]() {381         // POINTER:{{^.*}}|     auto F22b = [MACRO_CAPTURE(&a,) &b]() {382    // POINTER-NEXT:{{^.*}}|                                ~^383      b++;384    };385    auto F23b = [&a MACRO_CAPTURE(, &b)]() {386    // CHECK: auto F23b = [&a MACRO_CAPTURE(, &b)]() {387         // POINTER:{{^.*}}|     auto F23b = [&a MACRO_CAPTURE(, &b)]() {388    // POINTER-NEXT:{{^.*}}|                  ~^389      b++;390    };391    auto F24b = [&a, MACRO_CAPTURE(&b)]() {392    // CHECK: auto F24b = [ MACRO_CAPTURE(&b)]() {393         // POINTER:{{^.*}}|     auto F24b = [&a, MACRO_CAPTURE(&b)]() {394    // POINTER-NEXT:{{^.*}}|                  ~^~395      b++;396    };397 398    auto F25ma = [&M_A, &b]() {399    // CHECK:     auto F25ma = []() {400         // POINTER:{{^.*}}|     auto F25ma = [&M_A, &b]() {401    // POINTER-NEXT:{{^.*}}|                   ~^~~~402         // POINTER:{{^.*}}|     auto F25ma = [&M_A, &b]() {403    // POINTER-NEXT:{{^.*}}|                       ~~~^404    };405    auto F25mb = [&a, &M_B]() {406    // CHECK: auto F25mb = []() {407         // POINTER:{{^.*}}|     auto F25mb = [&a, &M_B]() {408    // POINTER-NEXT:{{^.*}}|                   ~^~409         // POINTER:{{^.*}}|     auto F25mb = [&a, &M_B]() {410    // POINTER-NEXT:{{^.*}}|                     ~~~^~~411    };412 413    auto F25mab = [&M_A, &b]() {414    // CHECK: auto F25mab = [ &b]() {415         // POINTER:{{^.*}}|     auto F25mab = [&M_A, &b]() {416    // POINTER-NEXT:{{^.*}}|                    ~^~~~417        b++;418    };419    auto F25amb = [&a, &M_B]() {420    //CHECK: auto F25amb = []() {421         // POINTER:{{^.*}}|     auto F25amb = [&a, &M_B]() {422    // POINTER-NEXT:{{^.*}}|                    ~^~423         // POINTER:{{^.*}}|     auto F25amb = [&a, &M_B]() {424    // POINTER-NEXT:{{^.*}}|                      ~~~^~~425    };426 427    auto F26 = [&a, &b, &c, &d]() {428    // CHECK: auto F26 = [&a, &b]() {429         // POINTER:{{^.*}}|     auto F26 = [&a, &b, &c, &d]() {430    // POINTER-NEXT:{{^.*}}|                       ~~~^431         // POINTER:{{^.*}}|     auto F26 = [&a, &b, &c, &d]() {432    // POINTER-NEXT:{{^.*}}|                           ~~~^433 434        (void)a;435        (void)b;436    };437 438    auto F27 = [&a, &b, &c, &d]() {439    // CHECK: auto F27 = [&a, &c]() {440         // POINTER:{{^.*}}|     auto F27 = [&a, &b, &c, &d]() {441    // POINTER-NEXT:{{^.*}}|                   ~~~^442         // POINTER:{{^.*}}|     auto F27 = [&a, &b, &c, &d]() {443    // POINTER-NEXT:{{^.*}}|                           ~~~^444 445        (void)a;446        (void)c;447    };448 449    auto F28 = [&a, &b, &c, &d]() {450        // CHECK: auto F28 = [&a, &d]() {451         // POINTER:{{^.*}}|     auto F28 = [&a, &b, &c, &d]() {452    // POINTER-NEXT:{{^.*}}|                   ~~~^453         // POINTER:{{^.*}}|     auto F28 = [&a, &b, &c, &d]() {454    // POINTER-NEXT:{{^.*}}|                       ~~~^455 456        (void)a;457        (void)d;458    };459 460    auto F29 = [&a, &b, &c, &d]() {461    // CHECK: auto F29 = [ &b, &c]() {462         // POINTER:{{^.*}}|     auto F29 = [&a, &b, &c, &d]() {463    // POINTER-NEXT:{{^.*}}|                 ~^~464         // POINTER:{{^.*}}|     auto F29 = [&a, &b, &c, &d]() {465    // POINTER-NEXT:{{^.*}}|                           ~~~^466 467        (void)b;468        (void)c;469    };470 471    auto F30 = [&a, &b, &c, &d]() {472    // CHECK: auto F30 = [ &b, &d]() {473         // POINTER:{{^.*}}|     auto F30 = [&a, &b, &c, &d]() {474    // POINTER-NEXT:{{^.*}}|                 ~^~475         // POINTER:{{^.*}}|     auto F30 = [&a, &b, &c, &d]() {476    // POINTER-NEXT:{{^.*}}|                       ~~~^477 478        (void)b;479        (void)d;480    };481 482    auto F31 = [&a, &b, &c, &d]() {483    // CHECK: auto F31 = [ &c, &d]() {484         // POINTER:{{^.*}}|     auto F31 = [&a, &b, &c, &d]() {485    // POINTER-NEXT:{{^.*}}|                 ~^~486         // POINTER:{{^.*}}|     auto F31 = [&a, &b, &c, &d]() {487    // POINTER-NEXT:{{^.*}}|                     ~^~488        (void)c;489        (void)d;490    };491}492