1*cc55754aSAlex Lorenz // RUN: clang-refactor extract -selection=test:%s %s -- -std=c++14 2>&1 | grep -v CHECK | FileCheck %s 27fe441b2SAlex Lorenz 37fe441b2SAlex Lorenz simpleExtractNoCaptures()47fe441b2SAlex Lorenzvoid simpleExtractNoCaptures() { 57fe441b2SAlex Lorenz int i = /*range=->+0:33*/1 + 2; 67fe441b2SAlex Lorenz } 77fe441b2SAlex Lorenz 87fe441b2SAlex Lorenz // CHECK: 1 '' results: 97fe441b2SAlex Lorenz // CHECK: static int extracted() { 107fe441b2SAlex Lorenz // CHECK-NEXT: return 1 + 2;{{$}} 117fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}} 127fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractNoCaptures() { 137fe441b2SAlex Lorenz // CHECK-NEXT: int i = /*range=->+0:33*/extracted();{{$}} 147fe441b2SAlex Lorenz // CHECK-NEXT: } 157fe441b2SAlex Lorenz simpleExtractStmtNoCaptures()167fe441b2SAlex Lorenzvoid simpleExtractStmtNoCaptures() { 177fe441b2SAlex Lorenz /*range astatement=->+1:13*/int a = 1; 187fe441b2SAlex Lorenz int b = 2; 197fe441b2SAlex Lorenz } 207fe441b2SAlex Lorenz // CHECK: 1 'astatement' results: 217fe441b2SAlex Lorenz // CHECK: static void extracted() { 227fe441b2SAlex Lorenz // CHECK-NEXT: int a = 1; 23ebbbb812SAlex Lorenz // CHECK-NEXT: int b = 2;{{$}} 247fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}} 257fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractStmtNoCaptures() { 26ebbbb812SAlex Lorenz // CHECK-NEXT: /*range astatement=->+1:13*/extracted();{{$}} 277fe441b2SAlex Lorenz // CHECK-NEXT: } 287fe441b2SAlex Lorenz 297fe441b2SAlex Lorenz blankRangeNoExtraction()307fe441b2SAlex Lorenzvoid blankRangeNoExtraction() { 317fe441b2SAlex Lorenz int i = /*range blank=*/1 + 2; 327fe441b2SAlex Lorenz } 337fe441b2SAlex Lorenz 347fe441b2SAlex Lorenz // CHECK: 1 'blank' results: 357fe441b2SAlex Lorenz // CHECK-NEXT: the provided selection does not overlap with the AST nodes of interest 367fe441b2SAlex Lorenz 377fe441b2SAlex Lorenz int outOfBodyCodeNoExtraction = /*range out_of_body_expr=->+0:72*/1 + 2; 387fe441b2SAlex Lorenz 397fe441b2SAlex Lorenz struct OutOfBodyStuff { 407fe441b2SAlex Lorenz int FieldInit = /*range out_of_body_expr=->+0:58*/1 + 2; 417fe441b2SAlex Lorenz 427fe441b2SAlex Lorenz void foo(int x =/*range out_of_body_expr=->+0:58*/1 + 2); 437fe441b2SAlex Lorenz }; 447fe441b2SAlex Lorenz inFunctionOutOfBody()45*cc55754aSAlex Lorenzauto inFunctionOutOfBody() -> decltype(/*range out_of_body_expr=->+0:79*/1 + 2) { 46*cc55754aSAlex Lorenz struct OutOfBodyStuff { 47*cc55754aSAlex Lorenz int FieldInit = /*range out_of_body_expr=->+0:60*/1 + 2; 48*cc55754aSAlex Lorenz 49*cc55754aSAlex Lorenz void foo(int x =/*range out_of_body_expr=->+0:60*/1 + 2); 50*cc55754aSAlex Lorenz }; 51*cc55754aSAlex Lorenz enum E { 52*cc55754aSAlex Lorenz X = /*range out_of_body_expr=->+0:48*/1 + 2 53*cc55754aSAlex Lorenz }; 54*cc55754aSAlex Lorenz int x = 0; 55*cc55754aSAlex Lorenz using T = decltype(/*range out_of_body_expr=->+0:61*/x + 3); 56*cc55754aSAlex Lorenz return x; 57*cc55754aSAlex Lorenz } 58*cc55754aSAlex Lorenz 59*cc55754aSAlex Lorenz // CHECK: 8 'out_of_body_expr' results: 607fe441b2SAlex Lorenz // CHECK: the selected code is not a part of a function's / method's body 617fe441b2SAlex Lorenz simpleExpressionNoExtraction()627fe441b2SAlex Lorenzvoid simpleExpressionNoExtraction() { 637fe441b2SAlex Lorenz int i = /*range simple_expr=->+0:41*/1 + /*range simple_expr=->+0:76*/(2); 647fe441b2SAlex Lorenz (void) /*range simple_expr=->+0:40*/i; 657fe441b2SAlex Lorenz (void)/*range simple_expr=->+0:47*/"literal"; 667fe441b2SAlex Lorenz (void)/*range simple_expr=->+0:41*/'c'; 677fe441b2SAlex Lorenz } 687fe441b2SAlex Lorenz 697fe441b2SAlex Lorenz // CHECK: 5 'simple_expr' results: 707fe441b2SAlex Lorenz // CHECK-NEXT: the selected expression is too simple to extract 71