summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-12-12 19:13:53 +0000
committerDouglas Gregor <dgregor@apple.com>2011-12-12 19:13:53 +0000
commitc1aaf8cacbfa4ea27ac87efeb9adffdf309cdb59 (patch)
tree5f57ac2bb2e117b75d137e1acc3e9abf8de08858
parent6dd2488383bf559e3c67055280beb3b83342f165 (diff)
downloadbcm5719-llvm-c1aaf8cacbfa4ea27ac87efeb9adffdf309cdb59.tar.gz
bcm5719-llvm-c1aaf8cacbfa4ea27ac87efeb9adffdf309cdb59.zip
When we have an umbrella directory in a module map, recursively walk
the subdirectories to find headers in submodules. llvm-svn: 146398
-rw-r--r--clang/lib/Frontend/FrontendActions.cpp3
-rw-r--r--clang/test/Modules/Inputs/NoUmbrella.framework/Headers/SubDir/C.h1
-rw-r--r--clang/test/Modules/auto-module-import.m4
3 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp
index 5dabe819963..a97a32ba067 100644
--- a/clang/lib/Frontend/FrontendActions.cpp
+++ b/clang/lib/Frontend/FrontendActions.cpp
@@ -161,7 +161,8 @@ static void collectModuleHeaderIncludes(const LangOptions &LangOpts,
llvm::error_code EC;
llvm::SmallString<128> DirNative;
llvm::sys::path::native(UmbrellaDir->getName(), DirNative);
- for (llvm::sys::fs::directory_iterator Dir(DirNative.str(), EC), DirEnd;
+ for (llvm::sys::fs::recursive_directory_iterator Dir(DirNative.str(), EC),
+ DirEnd;
Dir != DirEnd && !EC; Dir.increment(EC)) {
// Check whether this entry has an extension typically associated with
// headers.
diff --git a/clang/test/Modules/Inputs/NoUmbrella.framework/Headers/SubDir/C.h b/clang/test/Modules/Inputs/NoUmbrella.framework/Headers/SubDir/C.h
new file mode 100644
index 00000000000..4a9351aaaab
--- /dev/null
+++ b/clang/test/Modules/Inputs/NoUmbrella.framework/Headers/SubDir/C.h
@@ -0,0 +1 @@
+int no_umbrella_C;
diff --git a/clang/test/Modules/auto-module-import.m b/clang/test/Modules/auto-module-import.m
index d59099f5de1..21e79687610 100644
--- a/clang/test/Modules/auto-module-import.m
+++ b/clang/test/Modules/auto-module-import.m
@@ -28,6 +28,10 @@ void testSubframeworkOther() {
#include <NoUmbrella/A.h> // expected-warning{{treating #include as an import of module 'NoUmbrella.A'}}
int getNoUmbrellaA() { return no_umbrella_A; }
+// Test umbrella-less submodule includes
+#include <NoUmbrella/SubDir/C.h> // expected-warning{{treating #include as an import of module 'NoUmbrella.SubDir.C'}}
+int getNoUmbrellaC() { return no_umbrella_C; }
+
// Test header cross-subframework include pattern.
#include <DependsOnModule/../Frameworks/SubFramework.framework/Headers/Other.h> // expected-warning{{treating #include as an import of module 'DependsOnModule.SubFramework.Other'}}
OpenPOWER on IntegriCloud