From: Ben Langmuir Date: Mon, 14 Jul 2014 19:45:12 +0000 (+0000) Subject: Fix case-sensitivity of inferred framework modules X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=74261e38efaa174d256fe35156859ce35b5e2db7;p=clang Fix case-sensitivity of inferred framework modules Just because we can open a directory named "COcoa.framework" doesn't mean we should provide a "COcoa" module on a case-insensitive filesystem. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212975 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp index a6d1d82a36..8fae9c933d 100644 --- a/lib/Lex/ModuleMap.cpp +++ b/lib/Lex/ModuleMap.cpp @@ -624,6 +624,12 @@ ModuleMap::inferFrameworkModule(StringRef ModuleName, StringRef FrameworkDirName = SourceMgr.getFileManager().getCanonicalName(FrameworkDir); + // In case this is a case-insensitive filesystem, make sure the canonical + // directory name matches ModuleName exactly. Modules are case-sensitive. + // FIXME: we should be able to give a fix-it hint for the correct spelling. + if (llvm::sys::path::stem(FrameworkDirName) != ModuleName) + return nullptr; + bool canInfer = false; if (llvm::sys::path::has_parent_path(FrameworkDirName)) { // Figure out the parent path. diff --git a/test/Modules/inferred-framework-case.m b/test/Modules/inferred-framework-case.m new file mode 100644 index 0000000000..0443bedcaf --- /dev/null +++ b/test/Modules/inferred-framework-case.m @@ -0,0 +1,5 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -F %S/Inputs %s -verify -DA + +@import MOdule; // expected-error{{module 'MOdule' not found}} +@import Module;