Skip to content

Commit 7bc02d6

Browse files
committed
Improve some diagnostic with @_implementationOnly violations from internal bridging headers
1 parent 30bdb6b commit 7bc02d6

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,8 +2702,8 @@ NOTE(module_imported_here,none,
27022702
NOTE(decl_import_via_here,none,
27032703
"%kind0 imported as "
27042704
"'%select{private|fileprivate|internal|package|%ERROR|%ERROR}1' "
2705-
"from %2 here",
2706-
(const Decl *, AccessLevel, const ModuleDecl*))
2705+
"from %select{%2 here|bridging header}3",
2706+
(const Decl *, AccessLevel, const ModuleDecl*, bool))
27072707
NOTE(decl_import_via_local,none,
27082708
"%kind0 is imported by this file as "
27092709
"'%select{private|fileprivate|internal|package|%ERROR|%ERROR}1' "

lib/Sema/ResilienceDiagnostics.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ bool TypeChecker::diagnoseInlinableDeclRefAccess(SourceLoc loc,
133133
Context.Diags.diagnose(problematicImport->importLoc,
134134
diag::decl_import_via_here, D,
135135
problematicImport->accessLevel,
136-
problematicImport->module.importedModule);
136+
problematicImport->module.importedModule,
137+
problematicImport->module.importedModule
138+
->isClangHeaderImportModule());
137139
}
138140

139141
return (downgradeToWarning == DowngradeToWarning::No);
@@ -213,7 +215,9 @@ static bool diagnoseTypeAliasDeclRefExportability(SourceLoc loc,
213215
ctx.Diags.diagnose(limitImport->importLoc,
214216
diag::decl_import_via_here, D,
215217
limitImport->accessLevel,
216-
limitImport->module.importedModule);
218+
limitImport->module.importedModule,
219+
limitImport->module.importedModule
220+
->isClangHeaderImportModule());
217221
}
218222

219223
return true;
@@ -368,7 +372,9 @@ static bool diagnoseValueDeclRefExportability(SourceLoc loc, const ValueDecl *D,
368372
ctx.Diags.diagnose(import->importLoc,
369373
diag::decl_import_via_here, D,
370374
import->accessLevel,
371-
import->module.importedModule);
375+
import->module.importedModule,
376+
import->module.importedModule
377+
->isClangHeaderImportModule());
372378
}
373379

374380
return true;
@@ -454,7 +460,9 @@ TypeChecker::diagnoseConformanceExportability(SourceLoc loc,
454460
ctx.Diags.diagnose(limitImport->importLoc,
455461
diag::decl_import_via_here, ext,
456462
limitImport->accessLevel,
457-
limitImport->module.importedModule);
463+
limitImport->module.importedModule,
464+
limitImport->module.importedModule
465+
->isClangHeaderImportModule());
458466
}
459467

460468
return true;

lib/Sema/TypeCheckAccess.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,9 @@ static void noteLimitingImport(const Decl *userDecl, ASTContext &ctx,
461461
if (limitImport->importLoc.isValid())
462462
ctx.Diags.diagnose(limitImport->importLoc, diag::decl_import_via_here,
463463
complainDecl, limitImport->accessLevel,
464-
limitImport->module.importedModule);
464+
limitImport->module.importedModule,
465+
limitImport->module.importedModule
466+
->isClangHeaderImportModule());
465467
} else if (limitImport->importLoc.isValid()) {
466468
ctx.Diags.diagnose(limitImport->importLoc, diag::module_imported_here,
467469
limitImport->module.importedModule,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: mkdir -p %t/tmp
3+
4+
// Test with the normal bridging header.
5+
// RUN: %target-typecheck-verify-swift -internal-import-bridging-header %S/../Inputs/c-bridging-header.h -sdk %clang-importer-sdk -verify-ignore-unknown
6+
7+
// RUN: not %target-swift-frontend -typecheck -internal-import-bridging-header %S/../Inputs/c-bridging-header.h -sdk %clang-importer-sdk %s 2>&1 | %FileCheck %s
8+
9+
// Test with a precompiled bridging header.
10+
// RUN: %target-swift-frontend -emit-pch -o %t/c-bridging-header.pch %S/../Inputs/c-bridging-header.h -sdk %clang-importer-sdk
11+
// RUN: %target-typecheck-verify-swift -internal-import-bridging-header %t/c-bridging-header.pch -sdk %clang-importer-sdk -verify-ignore-unknown
12+
13+
14+
@inlinable
15+
public func f() -> Any {
16+
return red
17+
// expected-error@-1{{var 'red' is internal and cannot be referenced from an '@inlinable' function}}
18+
// expected-warning@-2{{getter for var 'red' is internal and should not be referenced from an '@inlinable' function}}
19+
}
20+
21+
// CHECK: var 'red' imported as 'internal' from bridging header

0 commit comments

Comments
 (0)