mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-29 00:08:59 -04:00

We use findModuleForHeader() in several places, but in header search we were not calling it when a framework module didn't show up with the expected name, which would then lead to unexpected non-modular includes. Now we will find the module unconditionally for frameworks. For regular frameworks, we use the spelling of the module name from the module map file, and for inferred ones we use the canonical directory name. In the future we might want to lock down framework modules sufficiently that these name mismatches cannot happen. rdar://problem/20465870 llvm-svn: 241258
34 lines
2.1 KiB
Objective-C
34 lines
2.1 KiB
Objective-C
// REQUIRES: shell
|
|
// RUN: rm -rf %t.mcp %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: ln -s %S/Inputs/NameInDir2.framework %t/NameInImport.framework
|
|
// RUN: ln -s %S/Inputs/NameInDirInferred.framework %t/NameInImportInferred.framework
|
|
// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t.mcp -fimplicit-module-maps -I %S/Inputs -F %S/Inputs -F %t -Wauto-import -verify %s
|
|
|
|
// Sanity check that we won't somehow find non-canonical module names or
|
|
// modules where we shouldn't search the framework.
|
|
// RUN: echo '@import NameInModMap' | not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.mcp -F %S/Inputs -F %t -Wauto-import -x objective-c - 2>&1 | FileCheck %s
|
|
// RUN: echo '@import NameInDir' | not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.mcp -F %S/Inputs -F %t -Wauto-import -x objective-c - 2>&1 | FileCheck %s
|
|
// RUN: echo '@import NameInImport' | not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.mcp -F %S/Inputs -F %t -Wauto-import -x objective-c - 2>&1 | FileCheck %s
|
|
// RUN: echo '@import NameInImportInferred' | not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.mcp -F %S/Inputs -F %t -Wauto-import -x objective-c - 2>&1 | FileCheck %s
|
|
// CHECK: module '{{.*}}' not found
|
|
|
|
// FIXME: We might want to someday lock down framework modules so that these
|
|
// name mismatches are disallowed. However, as long as we *don't* prevent them
|
|
// it's important that they map correctly to module imports.
|
|
|
|
// The module map name doesn't match the directory name.
|
|
#import <NameInDir/NameInDir.h> // expected-warning {{import of module 'NameInModMap'}}
|
|
|
|
// The name in the import doesn't match the module name.
|
|
#import <NameInImport/NameInDir2.h> // expected-warning {{import of module 'NameInDir2'}}
|
|
@import NameInDir2; // OK
|
|
|
|
// The name in the import doesn't match the module name (inferred framework module).
|
|
#import <NameInImportInferred/NameInDirInferred.h> // expected-warning {{import of module 'NameInDirInferred'}}
|
|
|
|
@import ImportNameInDir;
|
|
#ifdef NAME_IN_DIR
|
|
#error NAME_IN_DIR should be undef'd
|
|
#endif
|