brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 6bd63d0 Raw
157 lines · plain
1// Ensure we get the virtual module map path for a module whose implementation2// file we are compiling.3 4// RUN: rm -rf %t5// RUN: split-file %s %t6 7//--- real/A.modulemap8framework module A { umbrella header "A.h" }9//--- real/A.private.modulemap10framework module A_Private { umbrella header "A_Private.h" }11 12//--- frameworks/A.framework/Headers/A.h13struct A { int x; };14//--- frameworks/A.framework/PrivateHeaders/A_Private.h15#import <A/A.h>16 17//--- frameworks/B.framework/Headers/B.h18#import <A/A.h>19//--- frameworks/B.framework/Modules/module.modulemap20framework module B { umbrella header "B.h" }21 22//--- overlay.json.template23{24  "case-sensitive": "false",25  "version": 0,26  "roots": [27    {28      "external-contents": "DIR/real/A.modulemap",29      "name": "DIR/frameworks/A.framework/Modules/module.modulemap",30      "type": "file"31    },32    {33      "external-contents": "DIR/real/A.private.modulemap",34      "name": "DIR/frameworks/A.framework/Modules/module.private.modulemap",35      "type": "file"36    },37  ]38}39 40//--- cdb.json.template41[42{43  "file": "DIR/tu1.m",44  "directory": "DIR",45  "command": "clang -fmodules -fmodules-cache-path=DIR/cache -fmodule-name=A -ivfsoverlay DIR/overlay.json -F DIR/frameworks -fsyntax-only DIR/tu1.m"46},47{48  "file": "DIR/tu2.m",49  "directory": "DIR",50  "command": "clang -fmodules -fmodules-cache-path=DIR/cache -fmodule-name=A -ivfsoverlay DIR/overlay.json -F DIR/frameworks -fsyntax-only DIR/tu2.m"51},52{53  "file": "DIR/tu3.m",54  "directory": "DIR",55  "command": "clang -fmodules -fmodules-cache-path=DIR/cache -fmodule-name=A -ivfsoverlay DIR/overlay.json -F DIR/frameworks -fsyntax-only DIR/tu3.m"56}57]58 59//--- tu1.m60#import <A/A.h>61 62//--- tu2.m63#import <A/A_Private.h>64 65//--- tu3.m66#import <B/B.h>67// The following code triggers a note diagnostic pointing to A.h which is68// resolved relative to the module base directory, which is affected by the69// modulemap path.70struct A { float x; }; // expected-error {{incompatible definitions}} expected-note {{type 'float' here}}71// expected-note@frameworks/A.framework/Headers/A.h:1 {{type 'int' here}}72 73// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json74// RUN: sed -e "s|DIR|%/t|g" %t/overlay.json.template > %t/overlay.json75 76// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full -j 1 > %t/result.json77// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t78// CHECK:      {79// CHECK:        "modules": [80// CHECK:          {81// CHECK:            "clang-module-deps": []82// CHECK:            "command-line": [83// CHECK:              "-x"84// CHECK-NEXT:         "objective-c"85// CHECK-NEXT:         "[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap"86// CHECK:            ]87// CHECK:            "name": "A"88// CHECK:          }89// CHECK:          {90// CHECK:            "clang-module-deps": [91// CHECK:              {92// CHECK:                "module-name": "A"93// CHECK:              }94// CHECK:            ]95// CHECK:            "command-line": [96// CHECK:              "-fmodule-map-file=[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap",97// CHECK:              "-x"98// CHECK-NEXT:         "objective-c"99// CHECK-NEXT:         "[[PREFIX]]/frameworks/B.framework/Modules/module.modulemap"100// CHECK:            ]101// CHECK:            "name": "B"102// CHECK:          }103 104// CHECK:        "translation-units": [105// CHECK-NEXT:     {106// CHECK-NEXT:       "commands": [107// CHECK:              {108// CHECK:                "command-line": [109// CHECK:                  "-fmodule-map-file=[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap"110// CHECK:                  "-fmodule-name=A"111// CHECK:                ],112// CHECK:                "input-file": "[[PREFIX]]/tu1.m"113// CHECK-NEXT:         }114// CHECK:            ]115// CHECK:          }116// CHECK-NEXT:     {117// CHECK-NEXT:       "commands": [118// CHECK:              {119// CHECK:                "command-line": [120// CHECK:                  "-fmodule-map-file=[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap"121// CHECK:                  "-fmodule-name=A"122// CHECK:                ],123// CHECK:                "input-file": "[[PREFIX]]/tu2.m"124// CHECK-NEXT:         }125// CHECK:            ]126// CHECK:          }127// CHECK-NEXT:     {128// CHECK-NEXT:       "commands": [129// CHECK:              {130// CHECK:                "clang-module-deps": [131// CHECK:                  {132// CHECK:                    "module-name": "B"133// CHECK:                  }134// CHECK:                ]135// CHECK:                "command-line": [136// CHECK:                  "-fmodule-map-file=[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap"137// CHECK:                  "-fmodule-map-file=[[PREFIX]]/frameworks/B.framework/Modules/module.modulemap"138// CHECK:                  "-fmodule-name=A"139// CHECK:                ],140// CHECK:                "input-file": "[[PREFIX]]/tu3.m"141// CHECK-NEXT:         }142// CHECK:            ]143// CHECK:          }144 145// RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu1.rsp146// RUN: %clang @%t/tu1.rsp147 148// RUN: %deps-to-rsp %t/result.json --tu-index=1 > %t/tu2.rsp149// RUN: %clang @%t/tu2.rsp150 151// RUN: %deps-to-rsp %t/result.json --module-name A > %t/A.rsp152// RUN: %deps-to-rsp %t/result.json --module-name B > %t/B.rsp153// RUN: %deps-to-rsp %t/result.json --tu-index=2 > %t/tu3.rsp154// RUN: %clang @%t/A.rsp155// RUN: %clang @%t/B.rsp156// RUN: %clang @%t/tu3.rsp -verify157