blob: c609a7dcbc80ec11190c9dcb6f1f9255ca801170 [file] [log] [blame]
// Test current directory pruning when computing the context hash.
// REQUIRES: shell
// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: sed -e "s|DIR|%/t|g" %t/cdb0.json.in > %t/cdb0.json
// RUN: sed -e "s|DIR|%/t|g" %t/cdb1.json.in > %t/cdb1.json
// RUN: sed -e "s|DIR|%/t|g" %t/cdb3.json.in > %t/cdb3.json
// RUN: sed -e "s|DIR|%/t|g" %t/cdb4.json.in > %t/cdb4.json
// RUN: sed -e "s|DIR|%/t|g" %t/cdb5.json.in > %t/cdb5.json
// RUN: clang-scan-deps -compilation-database %t/cdb0.json -format experimental-full -optimize-args=all > %t/result0.json
// RUN: clang-scan-deps -compilation-database %t/cdb1.json -format experimental-full -optimize-args=all > %t/result1.json
// It is not a typo to use cdb1.json for result2. We intend to use the same
// compilation database, but different clang-scan-deps optimize-args options.
// RUN: clang-scan-deps -compilation-database %t/cdb1.json -format experimental-full -optimize-args=header-search,system-warnings,vfs,canonicalize-macros > %t/result2.json
// RUN: clang-scan-deps -compilation-database %t/cdb3.json -format experimental-full -optimize-args=all > %t/result3.json
// RUN: clang-scan-deps -compilation-database %t/cdb4.json -format experimental-full -optimize-args=all > %t/result4.json
// RUN: clang-scan-deps -compilation-database %t/cdb5.json -format experimental-full -optimize-args=all > %t/result5.json
// RUN: cat %t/result0.json %t/result1.json | FileCheck %s
// RUN: cat %t/result0.json %t/result2.json | FileCheck %s -check-prefix=SKIPOPT
// RUN: cat %t/result3.json %t/result4.json | FileCheck %s -check-prefix=RELPATH
// RUN: cat %t/result0.json %t/result5.json | FileCheck %s
//--- cdb0.json.in
[{
"directory": "DIR",
"command": "clang -c DIR/tu.c -fmodules -fmodules-cache-path=DIR/cache -IDIR/include/ -o DIR/tu.o",
"file": "DIR/tu.c"
}]
//--- cdb1.json.in
[{
"directory": "DIR/a",
"command": "clang -c DIR/tu.c -fmodules -fmodules-cache-path=DIR/cache -IDIR/include/ -o DIR/tu.o",
"file": "DIR/tu.c"
}]
// cdb2 is skipped because we reuse cdb1.
//--- cdb3.json.in
[{
"directory": "DIR",
"command": "clang -c DIR/tu.c -fmodules -fmodules-cache-path=DIR/cache -fprebuilt-module-path=.././module -IDIR/include/ -o DIR/tu.o ",
"file": "DIR/tu.c"
}]
//--- cdb4.json.in
[{
"directory": "DIR/a/",
"command": "clang -c DIR/tu.c -fmodules -fmodules-cache-path=DIR/cache -fprebuilt-module-path=.././module -IDIR/include/ -o DIR/tu.o ",
"file": "DIR/tu.c"
}]
//--- cdb5.json.in
[{
"directory": "DIR",
"command": "clang -c DIR/tu.c -fmodules -fmodules-cache-path=DIR/cache -IDIR/include/ -Xclang -working-directory=DIR/a/ -o DIR/tu.o",
"file": "DIR/tu.c"
}]
//--- include/module.modulemap
module mod {
header "mod.h"
}
//--- include/mod.h
//--- tu.c
#include "mod.h"
// Check that result0 and result1/result5 compute the same hash with
// optimization on. The only difference between result0 and result1/result5 is
// the compiler's working directory.
// CHECK: {
// CHECK-NEXT: "modules": [
// CHECK-NEXT: {
// CHECK-NEXT: "clang-module-deps": [],
// CHECK: "context-hash": "[[HASH:.*]]",
// CHECK: }
// CHECK: "translation-units": [
// CHECK: {
// CHECK: "commands": [
// CHECK: {
// CHECK-NEXT: "clang-context-hash": "{{.*}}",
// CHECK-NEXT: "clang-module-deps": [
// CHECK-NEXT: {
// CHECK-NEXT: "context-hash": "[[HASH]]",
// CHECK-NEXT: "module-name": "mod"
// CHECK: }
// CHECK: ],
// CHECK: {
// CHECK-NEXT: "modules": [
// CHECK-NEXT: {
// CHECK-NEXT: "clang-module-deps": [],
// CHECK: "context-hash": "[[HASH]]",
// CHECK: }
// CHECK: "translation-units": [
// CHECK: {
// CHECK: "commands": [
// CHECK: {
// CHECK-NEXT: "clang-context-hash": "{{.*}}",
// CHECK-NEXT: "clang-module-deps": [
// CHECK-NEXT: {
// CHECK-NEXT: "context-hash": "[[HASH]]",
// CHECK-NEXT: "module-name": "mod"
// CHECK: }
// CHECK: ],
// Check that result0 and result2 compute different hashes because
// the working directory optmization is turned off for result2.
// SKIPOPT: {
// SKIPOPT-NEXT: "modules": [
// SKIPOPT-NEXT: {
// SKIPOPT-NEXT: "clang-module-deps": [],
// SKIPOPT: "context-hash": "[[HASH0:.*]]",
// SKIPOPT: }
// SKIPOPT: "translation-units": [
// SKIPOPT: {
// SKIPOPT: "commands": [
// SKIPOPT: {
// SKIPOPT-NEXT: "clang-context-hash": "{{.*}}",
// SKIPOPT-NEXT: "clang-module-deps": [
// SKIPOPT-NEXT: {
// SKIPOPT-NEXT: "context-hash": "[[HASH0]]",
// SKIPOPT-NEXT: "module-name": "mod"
// SKIPOPT: }
// SKIPOPT: ],
// SKIPOPT: {
// SKIPOPT-NEXT: "modules": [
// SKIPOPT-NEXT: {
// SKIPOPT-NEXT: "clang-module-deps": [],
// SKIPOPT-NOT: "context-hash": "[[HASH0]]",
// SKIPOPT: "context-hash": "[[HASH2:.*]]",
// SKIPOPT: }
// SKIPOPT: "translation-units": [
// SKIPOPT: {
// SKIPOPT: "commands": [
// SKIPOPT: {
// SKIPOPT-NEXT: "clang-context-hash": "{{.*}}",
// SKIPOPT-NEXT: "clang-module-deps": [
// SKIPOPT-NEXT: {
// SKIPOPT-NOT: "context-hash": "[[HASH0]]",
// SKIPOPT-NEXT: "context-hash": "[[HASH2]]"
// SKIPOPT-NEXT: "module-name": "mod"
// SKIPOPT: }
// SKIPOPT: ],
// Check that result3 and result4 contain different hashes because
// both have a same relative path as a command line input, and
// they are produced using different compiler working directories.
// RELPATH: {
// RELPATH-NEXT: "modules": [
// RELPATH-NEXT: {
// RELPATH-NEXT: "clang-module-deps": [],
// RELPATH: "context-hash": "[[HASH3:.*]]",
// RELPATH: }
// RELPATH: "translation-units": [
// RELPATH: {
// RELPATH: "commands": [
// RELPATH: {
// RELPATH-NEXT: "clang-context-hash": "{{.*}}",
// RELPATH-NEXT: "clang-module-deps": [
// RELPATH-NEXT: {
// RELPATH-NEXT: "context-hash": "[[HASH3]]",
// RELPATH-NEXT: "module-name": "mod"
// RELPATH: }
// RELPATH: ],
// RELPATH: {
// RELPATH-NEXT: "modules": [
// RELPATH-NEXT: {
// RELPATH-NEXT: "clang-module-deps": [],
// RELPATH-NOT: "context-hash": "[[HASH3]]",
// RELPATH: "context-hash": "[[HASH4:.*]]",
// RELPATH: }
// RELPATH: "translation-units": [
// RELPATH: {
// RELPATH: "commands": [
// RELPATH: {
// RELPATH-NEXT: "clang-context-hash": "{{.*}}",
// RELPATH-NEXT: "clang-module-deps": [
// RELPATH-NEXT: {
// RELPATH-NOT: "context-hash": "[[HASH3]]",
// RELPATH-NEXT: "context-hash": "[[HASH4]]"
// RELPATH-NEXT: "module-name": "mod"
// RELPATH: }
// RELPATH: ],