Skip to content

Commit 83a54e7

Browse files
authored
[clang] Implement -Wmissing-include-dirs (#94827)
Implements -Wmissing-include-dirs #92015 This is my first contribution and would love some feedback. Thanks!
1 parent f3afdc4 commit 83a54e7

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed

clang/include/clang/Basic/DiagnosticDriverKinds.td

+3
Original file line numberDiff line numberDiff line change
@@ -809,4 +809,7 @@ def warn_android_unversioned_fallback : Warning<
809809

810810
def err_drv_triple_version_invalid : Error<
811811
"version '%0' in target triple '%1' is invalid">;
812+
813+
def warn_missing_include_dirs : Warning<
814+
"no such include directory: '%0'">, InGroup<MissingIncludeDirs>, DefaultIgnore;
812815
}

clang/include/clang/Basic/DiagnosticGroups.td

+1-1
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def MaxUnsignedZero : DiagGroup<"max-unsigned-zero">;
506506
def MissingBraces : DiagGroup<"missing-braces">;
507507
def MissingDeclarations: DiagGroup<"missing-declarations">;
508508
def : DiagGroup<"missing-format-attribute">;
509-
def : DiagGroup<"missing-include-dirs">;
509+
def MissingIncludeDirs : DiagGroup<"missing-include-dirs">;
510510
def MissingNoreturn : DiagGroup<"missing-noreturn">;
511511
def MultiChar : DiagGroup<"multichar">;
512512
def : DiagGroup<"nested-externs">;

clang/lib/Driver/Driver.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -1271,6 +1271,14 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
12711271
if (VFS->setCurrentWorkingDirectory(WD->getValue()))
12721272
Diag(diag::err_drv_unable_to_set_working_directory) << WD->getValue();
12731273

1274+
// Check for missing include directories.
1275+
if (!Diags.isIgnored(diag::warn_missing_include_dirs, SourceLocation())) {
1276+
for (auto IncludeDir : Args.getAllArgValues(options::OPT_I_Group)) {
1277+
if (!VFS->exists(IncludeDir))
1278+
Diag(diag::warn_missing_include_dirs) << IncludeDir;
1279+
}
1280+
}
1281+
12741282
// FIXME: This stuff needs to go into the Compilation, not the driver.
12751283
bool CCCPrintPhases;
12761284

clang/test/Driver/warning-options.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@
66
// Check that -isysroot warns on nonexistent paths.
77
// RUN: %clang -### -c -target i386-apple-darwin10 -isysroot %t/warning-options %s 2>&1 | FileCheck --check-prefix=CHECK-ISYSROOT %s
88
// CHECK-ISYSROOT: warning: no such sysroot directory: '{{.*}}/warning-options'
9+
10+
// Check for proper warning with -Wmissing-include-dirs
11+
// RUN: %clang -### -Wmissing-include-dirs -I %t/warning-options %s 2>&1 | FileCheck --check-prefix=CHECK-MISSING-INCLUDE-DIRS %s
12+
// CHECK-MISSING-INCLUDE-DIRS: warning: no such include directory: '{{.*}}/warning-options'

0 commit comments

Comments
 (0)