llvm-project/clang/test/Modules/implicit-private-with-submodule-explicit.m
Ben Langmuir 8ec36e6956 [clang][modules] Handle explicit modules when checking for .Private -> _Private
While we eventually want to remove the mapping from .Private to _Private
modules, until we do, ensure that it behaves the same for explicit
modules.

rdar://107449872

Differential Revision: https://reviews.llvm.org/D147477
2023-04-04 08:12:10 -07:00

31 lines
1.1 KiB
Objective-C

// Checks that the use of .Private to refer to _Private modules works with an
// explicit module.
// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: %clang_cc1 -x objective-c -fmodules -fno-implicit-modules -emit-module -fmodule-name=A %t/module.modulemap -o %t/A.pcm
// RUN: %clang_cc1 -x objective-c -fmodules -fno-implicit-modules -emit-module -fmodule-name=A_Private %t/module.modulemap -o %t/A_Private.pcm
// Check lazily-loaded module
// RUN: %clang_cc1 -x objective-c -verify -fmodules -fno-implicit-modules -fmodule-file=A=%t/A.pcm -fmodule-file=A_Private=%t/A_Private.pcm -fsyntax-only %t/tu.m
// Check eagerly-loaded module
// RUN: %clang_cc1 -x objective-c -verify -fmodules -fno-implicit-modules -fmodule-file=%t/A.pcm -fmodule-file=%t/A_Private.pcm -fsyntax-only %t/tu.m
//--- module.modulemap
module A { header "a.h" }
module A_Private { header "priv.h" }
//--- a.h
//--- priv.h
void priv(void);
//--- tu.m
@import A.Private; // expected-warning{{no submodule named 'Private' in module 'A'; using top level 'A_Private'}}
// expected-note@*:* {{defined here}}
void tu(void) {
priv();
}