From: https://github.com/iovisor/bcc/commit/8c5c96ad3beeed2fa827017f451a952306826974 From: yonghong-song Date: Mon, 14 Jul 2025 20:21:59 -0700 Subject: [PATCH] Fix a build failure with clang21 (#5369) The build error message: src/cc/frontends/clang/loader.cc:400:73: error: no matching function for call to ‘clang::TextDiagnosticPrinter::TextDiagnosticPrinter( llvm::raw_fd_ostream&, clang::DiagnosticOptions*)’ 400 | auto diag_client = new TextDiagnosticPrinter(llvm::errs(), &*diag_opts); | ^ The llvm commit https://github.com/llvm/llvm-project/pull/139584 caused the build failure. Adjust the code properly and the error is fixed. --- src/cc/frontends/clang/loader.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cc/frontends/clang/loader.cc b/src/cc/frontends/clang/loader.cc index 07dc9d6ab019..6f8387aaf017 100644 --- a/src/cc/frontends/clang/loader.cc +++ b/src/cc/frontends/clang/loader.cc @@ -396,11 +396,19 @@ int ClangLoader::do_compile( flags_cstr_rem.end()); // set up the error reporting class +#if LLVM_VERSION_MAJOR >= 21 + DiagnosticOptions diag_opts; + auto diag_client = new TextDiagnosticPrinter(llvm::errs(), diag_opts); + + IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); + DiagnosticsEngine diags(DiagID, diag_opts, diag_client); +#else IntrusiveRefCntPtr diag_opts(new DiagnosticOptions()); auto diag_client = new TextDiagnosticPrinter(llvm::errs(), &*diag_opts); IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); DiagnosticsEngine diags(DiagID, &*diag_opts, diag_client); +#endif // set up the command line argument wrapper