[clang-tools-extra] [clangd] Log environment variables that influence compilation at startup (PR #204990)
Akshay Kumar Dubey via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 21 09:38:51 PDT 2026
https://github.com/akshaydubey05 updated https://github.com/llvm/llvm-project/pull/204990
>From b1d3a777edf662990fc05c4259908e5645c49af5 Mon Sep 17 00:00:00 2001
From: akshaydubey05 <akshaydubey05 at gmail.com>
Date: Sun, 21 Jun 2026 21:57:09 +0530
Subject: [PATCH 1/2] [clangd] Log environment variables that influence
compilation at startup
Print env vars like INCLUDE, CPATH, LIBRARY_PATH etc. at startup to help
diagnose missing system include issues, especially on Windows.
Fixes https://github.com/clangd/clangd/issues/2657
---
clang-tools-extra/clangd/tool/ClangdMain.cpp | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp
index 549b1ae8d7980..af6022856339b 100644
--- a/clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -912,6 +912,18 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var
log("argv[{0}]: {1}", I, argv[I]);
if (auto EnvFlags = llvm::sys::Process::GetEnv(FlagsEnvVar))
log("{0}: {1}", FlagsEnvVar, *EnvFlags);
+ // Log environment variables that influence how clangd finds system headers.
+ // This helps diagnose missing-include issues, especially on Windows.
+ for (const char *EnvVar : {
+ // MSVC environment variables (set by vcvarsall.bat)
+ "INCLUDE", "LIB", "LIBPATH", "CL", "_CL_",
+ // GCC/Clang environment variables
+ "CPATH", "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+ "OBJC_INCLUDE_PATH", "LIBRARY_PATH", "GCC_EXEC_PREFIX",
+ }) {
+ if (auto Val = llvm::sys::Process::GetEnv(EnvVar))
+ log("Env {0}: {1}", EnvVar, *Val);
+ }
ClangdLSPServer::Options Opts;
Opts.UseDirBasedCDB = (CompileArgsFrom == FilesystemCompileArgs);
>From 39108cbfae6dd92bb4c9dd00335ede2c0941c6a3 Mon Sep 17 00:00:00 2001
From: akshaydubey05 <akshaydubey05 at gmail.com>
Date: Sun, 21 Jun 2026 22:08:40 +0530
Subject: [PATCH 2/2] clang-format: put each env var string on its own line
---
clang-tools-extra/clangd/tool/ClangdMain.cpp | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp
index af6022856339b..13fe4d3911731 100644
--- a/clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -916,10 +916,18 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var
// This helps diagnose missing-include issues, especially on Windows.
for (const char *EnvVar : {
// MSVC environment variables (set by vcvarsall.bat)
- "INCLUDE", "LIB", "LIBPATH", "CL", "_CL_",
+ "INCLUDE",
+ "LIB",
+ "LIBPATH",
+ "CL",
+ "_CL_",
// GCC/Clang environment variables
- "CPATH", "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
- "OBJC_INCLUDE_PATH", "LIBRARY_PATH", "GCC_EXEC_PREFIX",
+ "CPATH",
+ "C_INCLUDE_PATH",
+ "CPLUS_INCLUDE_PATH",
+ "OBJC_INCLUDE_PATH",
+ "LIBRARY_PATH",
+ "GCC_EXEC_PREFIX",
}) {
if (auto Val = llvm::sys::Process::GetEnv(EnvVar))
log("Env {0}: {1}", EnvVar, *Val);
More information about the cfe-commits
mailing list