// RUN: %clangxx_profgen -fcoverage-mapping -Wno-comment -o %t %s
// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
// RUN: llvm-profdata merge -o %t.profdata %t.profraw
// RUN: llvm-cov show %t -instr-profile %t.profdata 2>&1 | FileCheck %s

int main() {                           // CHECK:       [[# @LINE]]| 1|int main() {
    /* comment */ int x = 0;           // CHECK-NEXT:  [[# @LINE]]| 1|
    int y = 0; /* comment */           // CHECK-NEXT:  [[# @LINE]]| 1|
    int z = 0; // comment              // CHECK-NEXT:  [[# @LINE]]| 1|
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    x = 0; /*                          // CHECK-NEXT:  [[# @LINE]]| 1|
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */                                 // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    /*                                 // CHECK-NEXT:  [[# @LINE]]|  |
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */ x = 0;                          // CHECK-NEXT:  [[# @LINE]]| 1|
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    z =                                // CHECK-NEXT:  [[# @LINE]]| 1|
    x // comment                       // CHECK-NEXT:  [[# @LINE]]| 1|
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
    + /*                               // CHECK-NEXT:  [[# @LINE]]| 1|
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */                                 // CHECK-NEXT:  [[# @LINE]]|  |
    /*                                 // CHECK-NEXT:  [[# @LINE]]|  |
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */y;                               // CHECK-NEXT:  [[# @LINE]]| 1|
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    // Comments inside directives.     // CHECK-NEXT:  [[# @LINE]]|  |
    #if 0 //comment                    // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */ x = 0;               // CHECK-NEXT:  [[# @LINE]]|  |
    y = 0; /* comment */               // CHECK-NEXT:  [[# @LINE]]|  |
    z = 0; // comment                  // CHECK-NEXT:  [[# @LINE]]|  |
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    x = 0; /*                          // CHECK-NEXT:  [[# @LINE]]|  |
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */                                 // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  | 
    /*                                 // CHECK-NEXT:  [[# @LINE]]|  |
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */ x = 0;                          // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    #endif // comment                  // CHECK-NEXT:  [[# @LINE]]|  |
    #if 1 // comment                   // CHECK-NEXT:  [[# @LINE]]| 1|
    /* comment */ x = 0;               // CHECK-NEXT:  [[# @LINE]]| 1|
    y = 0; /* comment */               // CHECK-NEXT:  [[# @LINE]]| 1|
    z = 0; // comment                  // CHECK-NEXT:  [[# @LINE]]| 1|
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    x = 0; /*                          // CHECK-NEXT:  [[# @LINE]]| 1|
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */                                 // CHECK-NEXT:  [[# @LINE]]|  |
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    /*                                 // CHECK-NEXT:  [[# @LINE]]|  |
    comment                            // CHECK-NEXT:  [[# @LINE]]|  |
    */ x = 0;                          // CHECK-NEXT:  [[# @LINE]]| 1|
                                       // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    // comment                         // CHECK-NEXT:  [[# @LINE]]|  |
    /* comment */                      // CHECK-NEXT:  [[# @LINE]]|  |
    #endif //comment                   // CHECK-NEXT:  [[# @LINE]]| 1|
    return 0;                          // CHECK-NEXT:  [[# @LINE]]| 1|
}                                      // CHECK-NEXT:  [[# @LINE]]| 1|
