129b95f05SJan Svoboda// This test checks that inferred frameworks/modules are accounted for in the 229b95f05SJan Svoboda// scanner and can be explicitly built by Clang. 37defab08SMichael Spencer 429b95f05SJan Svoboda// RUN: rm -rf %t 529b95f05SJan Svoboda// RUN: split-file %s %t 629b95f05SJan Svoboda 729b95f05SJan Svoboda//--- frameworks/Inferred.framework/Headers/Inferred.h 829b95f05SJan Svobodatypedef int inferred; 929b95f05SJan Svoboda 1029b95f05SJan Svoboda//--- frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h 1129b95f05SJan Svoboda 1229b95f05SJan Svoboda//--- frameworks/module.modulemap 1329b95f05SJan Svobodaframework module * {} 1429b95f05SJan Svoboda 1529b95f05SJan Svoboda//--- tu.m 167defab08SMichael Spencer#include <Inferred/Inferred.h> 177defab08SMichael Spencer 187defab08SMichael Spencerinferred a = 0; 197defab08SMichael Spencer 2029b95f05SJan Svoboda//--- cdb.json.template 2129b95f05SJan Svoboda[{ 2229b95f05SJan Svoboda "directory": "DIR", 2329b95f05SJan Svoboda "file": "DIR/tu.m", 2429b95f05SJan Svoboda "command": "clang -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/tu.m -o DIR/tu.o" 2529b95f05SJan Svoboda}] 2629b95f05SJan Svoboda 2729b95f05SJan Svoboda// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json 2829b95f05SJan Svoboda// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json 2929b95f05SJan Svoboda// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t 3029b95f05SJan Svoboda 31c4b13f7aSJan Svoboda// CHECK: { 327defab08SMichael Spencer// CHECK-NEXT: "modules": [ 337defab08SMichael Spencer// CHECK-NEXT: { 347defab08SMichael Spencer// CHECK-NEXT: "clang-module-deps": [], 3529b95f05SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/module.modulemap", 367defab08SMichael Spencer// CHECK-NEXT: "command-line": [ 377defab08SMichael Spencer// CHECK: ], 3829b95f05SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 397defab08SMichael Spencer// CHECK-NEXT: "file-deps": [ 40*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/module.modulemap", 4129b95f05SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Headers/Inferred.h", 42*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h" 437defab08SMichael Spencer// CHECK-NEXT: ], 4468eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [ 4568eb3b20SArtem Chikin// CHECK-NEXT: { 4668eb3b20SArtem Chikin// CHECK-NEXT: "isFramework": true, 4768eb3b20SArtem Chikin// CHECK-NEXT: "link-name": "Inferred" 4868eb3b20SArtem Chikin// CHECK-NEXT: } 4968eb3b20SArtem Chikin// CHECK-NEXT: ], 507defab08SMichael Spencer// CHECK-NEXT: "name": "Inferred" 517defab08SMichael Spencer// CHECK-NEXT: } 527defab08SMichael Spencer// CHECK-NEXT: ], 537defab08SMichael Spencer// CHECK-NEXT: "translation-units": [ 547defab08SMichael Spencer// CHECK-NEXT: { 5529b95f05SJan Svoboda// CHECK-NEXT: "commands": [ 5629b95f05SJan Svoboda// CHECK-NEXT: { 5729b95f05SJan Svoboda// CHECK-NEXT: "clang-context-hash": "{{.*}}", 587defab08SMichael Spencer// CHECK-NEXT: "clang-module-deps": [ 597defab08SMichael Spencer// CHECK-NEXT: { 6029b95f05SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 617defab08SMichael Spencer// CHECK-NEXT: "module-name": "Inferred" 627defab08SMichael Spencer// CHECK-NEXT: } 637defab08SMichael Spencer// CHECK-NEXT: ], 647defab08SMichael Spencer// CHECK-NEXT: "command-line": [ 65be795ee1SJan Svoboda// CHECK: ], 6683902c40SBen Langmuir// CHECK: "file-deps": [ 6729b95f05SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/tu.m" 687defab08SMichael Spencer// CHECK-NEXT: ], 6929b95f05SJan Svoboda// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" 707defab08SMichael Spencer// CHECK-NEXT: } 7129b95f05SJan Svoboda// CHECK: ] 7229b95f05SJan Svoboda// CHECK: } 7329b95f05SJan Svoboda// CHECK: ] 7429b95f05SJan Svoboda// CHECK: } 7529b95f05SJan Svoboda 7629b95f05SJan Svoboda// RUN: %deps-to-rsp %t/result.json --module-name=Inferred > %t/Inferred.cc1.rsp 7729b95f05SJan Svoboda// RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu.rsp 7829b95f05SJan Svoboda// RUN: %clang @%t/Inferred.cc1.rsp -pedantic -Werror 7929b95f05SJan Svoboda// RUN: %clang @%t/tu.rsp -pedantic -Werror 80