1// Note: the run lines follow their respective tests, since line/column 2// matter in this test. 3 4// pcherror-error@* {{PCH file contains compiler errors}} 5@import use_error_a; // notallowerror-error {{could not build module 'use_error_a'}} 6@import use_error_b; 7// expected-no-diagnostics 8 9void test(Error *x) { 10 funca(x); 11 funcb(x); 12 [x method]; 13} 14 15// RUN: rm -rf %t 16// RUN: mkdir %t 17// RUN: mkdir %t/prebuilt 18 19// RUN: %clang_cc1 -fmodules -fallow-pcm-with-compiler-errors \ 20// RUN: -fmodule-name=error -o %t/prebuilt/error.pcm \ 21// RUN: -x objective-c -emit-module %S/Inputs/error/module.modulemap 22// RUN: %clang_cc1 -fmodules -fallow-pcm-with-compiler-errors \ 23// RUN: -fmodule-file=error=%t/prebuilt/error.pcm \ 24// RUN: -fmodule-name=use_error_a -o %t/prebuilt/use_error_a.pcm \ 25// RUN: -x objective-c -emit-module %S/Inputs/error/module.modulemap 26// RUN: %clang_cc1 -fmodules -fallow-pcm-with-compiler-errors \ 27// RUN: -fmodule-file=error=%t/prebuilt/error.pcm \ 28// RUN: -fmodule-name=use_error_b -o %t/prebuilt/use_error_b.pcm \ 29// RUN: -x objective-c -emit-module %S/Inputs/error/module.modulemap 30 31// Prebuilt modules 32// RUN: %clang_cc1 -fsyntax-only -fmodules -fallow-pcm-with-compiler-errors \ 33// RUN: -fprebuilt-module-path=%t/prebuilt -fmodules-cache-path=%t \ 34// RUN: -ast-print %s | FileCheck %s 35// RUN: %clang_cc1 -fsyntax-only -fmodules \ 36// RUN: -fprebuilt-module-path=%t/prebuilt -fmodules-cache-path=%t \ 37// RUN: -verify=pcherror %s 38 39// Explicit prebuilt modules (loaded when needed) 40// RUN: %clang_cc1 -fsyntax-only -fmodules -fallow-pcm-with-compiler-errors \ 41// RUN: -fmodule-file=error=%t/prebuilt/error.pcm \ 42// RUN: -fmodule-file=use_error_a=%t/prebuilt/use_error_a.pcm \ 43// RUN: -fmodule-file=use_error_b=%t/prebuilt/use_error_b.pcm \ 44// RUN: -fmodules-cache-path=%t -ast-print %s | FileCheck %s 45// RUN: %clang_cc1 -fsyntax-only -fmodules \ 46// RUN: -fmodule-file=error=%t/prebuilt/error.pcm \ 47// RUN: -fmodule-file=use_error_a=%t/prebuilt/use_error_a.pcm \ 48// RUN: -fmodule-file=use_error_b=%t/prebuilt/use_error_b.pcm \ 49// RUN: -fmodules-cache-path=%t -verify=pcherror %s 50 51// Explicit prebuilt modules without name (always loaded) 52// RUN: %clang_cc1 -fsyntax-only -fmodules -fallow-pcm-with-compiler-errors \ 53// RUN: -fmodule-file=%t/prebuilt/error.pcm \ 54// RUN: -fmodule-file=%t/prebuilt/use_error_a.pcm \ 55// RUN: -fmodule-file=%t/prebuilt/use_error_b.pcm \ 56// RUN: -fmodules-cache-path=%t -ast-print %s | FileCheck %s 57// As the modules are always loaded, compiling will fail before even parsing 58// this file - this means that -verify can't be used, so do a grep instead. 59// RUN: not %clang_cc1 -fsyntax-only -fmodules \ 60// RUN: -fmodule-file=%t/prebuilt/error.pcm \ 61// RUN: -fmodule-file=%t/prebuilt/use_error_a.pcm \ 62// RUN: -fmodule-file=%t/prebuilt/use_error_b.pcm \ 63// RUN: -fmodules-cache-path=%t 2>&1 | \ 64// RUN: grep "PCH file contains compiler errors" 65 66// Shouldn't build the cached modules (that have errors) when not allowing 67// errors 68// RUN: not %clang_cc1 -fsyntax-only -fmodules \ 69// RUN: -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs/error \ 70// RUN: -x objective-c %s 71// RUN: find %t -name "error-*.pcm" | not grep error 72 73// Should build the cached modules when allowing errors 74// RUN: %clang_cc1 -fsyntax-only -fmodules -fallow-pcm-with-compiler-errors \ 75// RUN: -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs/error \ 76// RUN: -x objective-c -verify %s 77// RUN: find %t -name "error-*.pcm" | grep error 78// RUN: find %t -name "use_error_a-*.pcm" | grep use_error_a 79// RUN: find %t -name "use_error_b-*.pcm" | grep use_error_b 80 81// Check build when the modules are already cached 82// RUN: %clang_cc1 -fsyntax-only -fmodules -fallow-pcm-with-compiler-errors \ 83// RUN: -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs/error \ 84// RUN: -x objective-c -verify %s 85 86// Should rebuild the cached module if it had an error (if it wasn't rebuilt 87// the verify would fail as it would be the PCH error instead) 88// RUN: %clang_cc1 -fsyntax-only -fmodules \ 89// RUN: -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs/error \ 90// RUN: -x objective-c %s -verify=notallowerror 91 92// allow-pcm-with-compiler-errors should also allow errors in PCH 93// RUN: %clang_cc1 -fallow-pcm-with-compiler-errors -x objective-c \ 94// RUN: -o %t/check.pch -emit-pch %S/Inputs/error/error.h 95 96// CHECK: @interface Error 97// CHECK-NEXT: - (int)method; 98// CHECK-NEXT: - (id)method2; 99// CHECK-NEXT: @end 100// CHECK: void test(Error *x) 101 102// RUN: c-index-test -code-completion-at=%s:12:6 %s -fmodules -fmodules-cache-path=%t \ 103// RUN: -Xclang -fallow-pcm-with-compiler-errors -I %S/Inputs/error | FileCheck -check-prefix=COMPLETE %s 104// COMPLETE: ObjCInstanceMethodDecl:{ResultType int}{TypedText method} 105// COMPLETE: ObjCInstanceMethodDecl:{ResultType id}{TypedText method2} 106 107// RUN: c-index-test -test-load-source local %s -fmodules -fmodules-cache-path=%t \ 108// RUN: -Xclang -fallow-pcm-with-compiler-errors -I %S/Inputs/error | FileCheck -check-prefix=SOURCE %s 109// SOURCE: load-module-with-errors.m:9:6: FunctionDecl=test:9:6 (Definition) Extent=[9:1 - 13:2] 110// SOURCE: load-module-with-errors.m:9:18: ParmDecl=x:9:18 (Definition) Extent=[9:11 - 9:19] 111// SOURCE: load-module-with-errors.m:9:11: ObjCClassRef=Error:5:12 Extent=[9:11 - 9:16] 112// SOURCE: load-module-with-errors.m:9:21: CompoundStmt= Extent=[9:21 - 13:2] 113// SOURCE: load-module-with-errors.m:10:3: CallExpr=funca:3:6 Extent=[10:3 - 10:11] 114// SOURCE: load-module-with-errors.m:11:3: CallExpr=funcb:3:6 Extent=[11:3 - 11:11] 115// SOURCE: load-module-with-errors.m:12:3: ObjCMessageExpr=method:6:8 Extent=[12:3 - 12:13] 116