brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · c69a215 Raw
298 lines · plain
1// This checks that clang-scan-deps properly outputs named module dependencies 2// when using the the scanning output format 'experimental-full'.3//4// See PR #72304.5// UNSUPPORTED: target={{.*}}-aix{{.*}}6//7// RUN: rm -fr %t8// RUN: mkdir -p %t9// RUN: split-file %s %t10//11// Check the separated dependency format.12// RUN: sed "s|DIR|%/t|g" %t/compile_commands.json.in > %t/compile_commands.json13// RUN: clang-scan-deps -format=experimental-full \14// RUN:   -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t %t/M.cppm -o %t/M.o \15// RUN:   | sed 's:\\\\\?:/:g' \16// RUN:   | FileCheck %t/M.cppm -DPREFIX=%/t17// RUN: clang-scan-deps -format=experimental-full \18// RUN:   -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t %t/Impl.cpp -o %t/Impl.o \19// RUN:   | sed 's:\\\\\?:/:g' \20// RUN:   | FileCheck %t/Impl.cpp -DPREFIX=%/t21// RUN: clang-scan-deps -format=experimental-full \22// RUN:   -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t %t/impl_part.cppm -o %t/impl_part.o \23// RUN:   | sed 's:\\\\\?:/:g' \24// RUN:   | FileCheck %t/impl_part.cppm -DPREFIX=%/t25// RUN: clang-scan-deps -format=experimental-full \26// RUN:   -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t %t/interface_part.cppm -o %t/interface_part.o \27// RUN:   | sed 's:\\\\\?:/:g' \28// RUN:   | FileCheck %t/interface_part.cppm -DPREFIX=%/t29// RUN: clang-scan-deps -format=experimental-full \30// RUN:   -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t %t/User.cpp -o %t/User.o \31// RUN:   | sed 's:\\\\\?:/:g' \32// RUN:   | FileCheck %t/User.cpp -DPREFIX=%/t33//34// Check the combined dependency format.35// RUN: clang-scan-deps -compilation-database %t/compile_commands.json -format=experimental-full \36// RUN:   | sed 's:\\\\\?:/:g' \37// RUN:   | FileCheck %t/Checks.cpp -DPREFIX=%/t38// RUN: clang-scan-deps --mode=preprocess-dependency-directives -compilation-database %t/compile_commands.json -format=experimental-full \39// RUN:   | sed 's:\\\\\?:/:g' \40// RUN:   | FileCheck %t/Checks.cpp -DPREFIX=%/t41 42//--- compile_commands.json.in43[44{45  "directory": "DIR",46  "command": "clang++ -std=c++20 DIR/M.cppm -c -o DIR/M.o -MT DIR/M.o.ddi -MD -MF DIR/P1689.dep",47  "file": "DIR/M.cppm",48  "output": "DIR/M.o"49},50{51  "directory": "DIR",52  "command": "clang++ -std=c++20 DIR/Impl.cpp -c -o DIR/Impl.o -MT DIR/Impl.o.ddi -MD -MF DIR/P1689.dep",53  "file": "DIR/Impl.cpp",54  "output": "DIR/Impl.o"55},56{57  "directory": "DIR",58  "command": "clang++ -std=c++20 DIR/impl_part.cppm -c -o DIR/impl_part.o -MT DIR/impl_part.o.ddi -MD -MF DIR/P1689.dep",59  "file": "DIR/impl_part.cppm",60  "output": "DIR/impl_part.o"61},62{63  "directory": "DIR",64  "command": "clang++ -std=c++20 DIR/interface_part.cppm -c -o DIR/interface_part.o -MT DIR/interface_part.o.ddi -MD -MF DIR/P1689.dep",65  "file": "DIR/interface_part.cppm",66  "output": "DIR/interface_part.o"67},68{69  "directory": "DIR",70  "command": "clang++ -std=c++20 DIR/User.cpp -c -o DIR/User.o -MT DIR/User.o.ddi -MD -MF DIR/P1689.dep",71  "file": "DIR/User.cpp",72  "output": "DIR/User.o"73}74]75 76//--- M.cppm77export module M;78export import :interface_part;79import :impl_part;80export void Hello();81 82// CHECK:       {83// CHECK:         "modules": []84// CHECK:         "translation-units": [85// CHECK-NEXT:      {86// CHECK:             "commands": [87// CHECK-NEXT:          {88// CHECK:                 "named-module": "M"89// CHECK-NEXT:            "named-module-deps": [90// CHECK-NEXT:              "M:interface_part",91// CHECK-NEXT:              "M:impl_part"92// CHECK-NEXT:             ]93// CHECK:                 "command-line": [94// CHECK:                   "-o",95// CHECK-NEXT:              "{{.*}}/M.o"96// CHECK:                 ]97// CHECK:                 "input-file": "[[PREFIX]]/M.cppm"98// CHECK:               }99// CHECK:             ]100// CHECK:           }101// CHECK:         ]102// CHECK:       }103 104//--- Impl.cpp105module;106#include "header.mock"107module M;108void Hello() {109    std::cout << "Hello ";110}111 112// CHECK:       {113// CHECK:         "modules": []114// CHECK:         "translation-units": [115// CHECK-NEXT:      {116// CHECK:             "commands": [117// CHECK-NEXT:          {118// CHECK-NOT:             "named-module":119// CHECK:                 "named-module-deps": [120// CHECK-NEXT:              "M"121// CHECK-NEXT:             ]122// CHECK:                 "command-line": [123// CHECK:                   "-o",124// CHECK-NEXT:              "[[PREFIX]]/Impl.o"125// CHECK:                 ]126// CHECK:                 "input-file": "[[PREFIX]]/Impl.cpp"127// CHECK:               }128// CHECK:             ]129// CHECK:           }130// CHECK:         ]131// CHECK:       }132 133//--- impl_part.cppm134module;135#include "header.mock"136module M:impl_part;137import :interface_part;138 139std::string W = "World.";140void World() {141    std::cout << W << std::endl;142}143 144// CHECK:       {145// CHECK:         "modules": [],146// CHECK:         "translation-units": [147// CHECK-NEXT:      {148// CHECK:             "commands": [149// CHECK-NEXT:          {150// CHECK:                 "named-module": "M:impl_part"151// CHECK-NEXT:            "named-module-deps": [152// CHECK-NEXT:              "M:interface_part"153// CHECK-NEXT:             ]154// CHECK:                 "command-line": [155// CHECK:                   "-o",156// CHECK-NEXT:              "{{.*}}/impl_part.o",157// CHECK:                 ]158// CHECK:                 "input-file": "[[PREFIX]]/impl_part.cppm"159// CHECK:               }160// CHECK:             ]161// CHECK:           }162// CHECK:         ]163// CHECK:       }164 165//--- interface_part.cppm166export module M:interface_part;167export void World();168 169// CHECK:       {170// CHECK:         "modules": []171// CHECK:         "translation-units": [172// CHECK-NEXT:      {173// CHECK:             "commands": [174// CHECK-NEXT:          {175// CHECK:                 "named-module": "M:interface_part"176// CHECK-NOT:             "named-module-deps": []177// CHECK:                 "command-line": [178// CHECK:                   "-o",179// CHECK-NEXT:              "{{.*}}/interface_part.o",180// CHECK:                 ]181// CHECK:                 "input-file": "[[PREFIX]]/interface_part.cppm"182// CHECK:               }183// CHECK:             ]184// CHECK:           }185// CHECK:         ]186// CHECK:       }187 188//--- User.cpp189import M;190import third_party_module;191int main() {192    Hello();193    World();194    return 0;195}196 197// CHECK:       {198// CHECK-NEXT:    "modules": []199// CHECK-NEXT:    "translation-units": [200// CHECK-NEXT:      {201// CHECK-NEXT:        "commands": [202// CHECK-NEXT:          {203// CHECK-NOT:             "named-module":204// CHECK:                 "named-module-deps": [205// CHECK-NEXT:              "M"206// CHECK-NEXT:              "third_party_module"207// CHECK-NEXT:             ]208// CHECK:                 "command-line": [209// CHECK:                   "-o",210// CHECK-NEXT:              "[[PREFIX]]/User.o",211// CHECK:                 ]212// CHECK:                 "input-file": "[[PREFIX]]/User.cpp213// CHECK:               }214// CHECK:             ]215// CHECK-NEXT:      }216// CHECK-NEXT:    ]217// CHECK:       }218 219//--- header.mock220  221//--- Checks.cpp222// CHECK:       {223// CHECK:         "modules": []224// CHECK:         "translation-units": [225// CHECK-NEXT:      {226// CHECK:             "commands": [227// CHECK-NEXT:          {228// CHECK:                 "named-module": "M"229// CHECK-NEXT:            "named-module-deps": [230// CHECK-NEXT:              "M:interface_part",231// CHECK-NEXT:              "M:impl_part"232// CHECK-NEXT:             ]233// CHECK:                 "command-line": [234// CHECK:                   "-o",235// CHECK-NEXT:              "{{.*}}/M.o"236// CHECK:                 ]237// CHECK:                 "input-file": "[[PREFIX]]/M.cppm"238// CHECK:               },239// CHECK:               {240// CHECK-NOT:             "named-module":241// CHECK:                 "named-module-deps": [242// CHECK-NEXT:              "M"243// CHECK-NEXT:             ]244// CHECK:                 "command-line": [245// CHECK:                   "-o",246// CHECK-NEXT:              "[[PREFIX]]/Impl.o"247// CHECK:                 ]248// CHECK:                 "input-file": "[[PREFIX]]/Impl.cpp"249// CHECK:               }250// CHECK:             ]251// CHECK-NEXT:      },252// CHECK-NEXT:      {253// CHECK:             "commands": [254// CHECK-NEXT:          {255// CHECK:                 "named-module": "M:impl_part"256// CHECK-NEXT:            "named-module-deps": [257// CHECK-NEXT:              "M:interface_part"258// CHECK-NEXT:             ]259// CHECK:                 "command-line": [260// CHECK:                   "-o",261// CHECK-NEXT:              "{{.*}}/impl_part.o",262// CHECK:                 ]263// CHECK:                 "input-file": "[[PREFIX]]/impl_part.cppm"264// CHECK:               }265// CHECK:             ]266// CHECK-NEXT:      },267// CHECK-NEXT:      {268// CHECK:             "commands": [269// CHECK-NEXT:          {270// CHECK:                 "named-module": "M:interface_part"271// CHECK-NOT:             "named-module-deps": []272// CHECK:                 "command-line": [273// CHECK:                   "-o",274// CHECK-NEXT:              "{{.*}}/interface_part.o",275// CHECK:                 ]276// CHECK:                 "input-file": "[[PREFIX]]/interface_part.cppm"277// CHECK:               }278// CHECK:             ]279// CHECK-NEXT:      },280// CHECK-NEXT:      {281// CHECK:             "commands": [282// CHECK-NEXT:          {283// CHECK-NOT:             "named-module":284// CHECK:                 "named-module-deps": [285// CHECK-NEXT:              "M"286// CHECK-NEXT:              "third_party_module"287// CHECK-NEXT:             ]288// CHECK:                 "command-line": [289// CHECK:                   "-o",290// CHECK-NEXT:              "[[PREFIX]]/User.o",291// CHECK:                 ]292// CHECK:                 "input-file": "[[PREFIX]]/User.cpp293// CHECK:               } 294// CHECK:             ]295// CHECK:           }296// CHECK:         ]297// CHECK:       }298