https://github.com/Sirraide created https://github.com/llvm/llvm-project/pull/149079
For more context, see https://github.com/llvm/llvm-project/pull/119269#issuecomment-3075444493, but briefly, when removing ARCMigrate, I also removed some symbols in libclang, which constitutes an ABI break that we don’t want, so this pr reintroduces the removed symbols; the declarations are marked as deprecated for future removal, and the implementations print an error and do nothing, which is what we used to do when ARCMigrate was disabled. >From c9b28116f0caed28c58b2cf5e3df14170998f8c7 Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Tue, 15 Jul 2025 23:04:29 +0200 Subject: [PATCH 1/3] Reintroduce obsolete symbols --- clang/tools/libclang/CMakeLists.txt | 1 + clang/tools/libclang/Obsolete.cpp | 46 +++++++++++++++++++ .../secondary/clang/tools/libclang/BUILD.gn | 1 + 3 files changed, 48 insertions(+) create mode 100644 clang/tools/libclang/Obsolete.cpp diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index b6662b66206b2..2b1e266f07392 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -42,6 +42,7 @@ set(SOURCES Indexing.cpp FatalErrorHandler.cpp Rewrite.cpp + Obsolete.cpp ADDITIONAL_HEADERS CIndexDiagnostic.h diff --git a/clang/tools/libclang/Obsolete.cpp b/clang/tools/libclang/Obsolete.cpp new file mode 100644 index 0000000000000..0790e5b5e9ac9 --- /dev/null +++ b/clang/tools/libclang/Obsolete.cpp @@ -0,0 +1,46 @@ +//===- Obsolete.cpp - Obsolete libclang functions and types -------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--------------------------------------------------------------------===// +// +// This file contains libclang symbols whose underlying functionality has been +// removed from Clang, but which need to be kept around so as to retain ABI +// compatibility. +// +//===--------------------------------------------------------------------===// + +#include "clang-c/CXString.h" +#include "clang-c/Platform.h" +#include "llvm/Support/raw_ostream.h" + +// The functions below used to be part of the C API for ARCMigrate, which has +// since been removed from Clang; they already used to print an error if Clang +// was compiled without arcmt support, so we continue doing so. +typedef void *CXRemapping; +CINDEX_LINKAGE CXRemapping clang_getRemappings(const char *) { + llvm::errs() << "error: ARCMigrate has been removed from Clang"; + return nullptr; +} + +CINDEX_LINKAGE +CXRemapping clang_getRemappingsFromFileList(const char **, unsigned) { + llvm::errs() << "error: ARCMigrate has been removed from Clang"; + return nullptr; +} + +CINDEX_LINKAGE unsigned clang_remap_getNumFiles(CXRemapping) { + llvm::errs() << "error: ARCMigrate has been removed from Clang"; + return 0; +} + +CINDEX_LINKAGE void clang_remap_getFilenames(CXRemapping, unsigned, CXString *, + CXString *) { + llvm::errs() << "error: ARCMigrate has been removed from Clang"; +} + +CINDEX_LINKAGE void clang_remap_dispose(CXRemapping) { + llvm::errs() << "error: ARCMigrate has been removed from Clang"; +} diff --git a/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn b/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn index 8f7beea152ab7..30b8bb61184bd 100644 --- a/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn @@ -87,6 +87,7 @@ shared_library("libclang") { "Index_Internal.h", "Indexing.cpp", "Rewrite.cpp", + "Obsolete.cpp", ] if (host_os == "mac") { ldflags = [ >From c93e0cf4b8d04002bb091d464286f43bac9e3bcb Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Tue, 15 Jul 2025 23:08:18 +0200 Subject: [PATCH 2/3] forgot to add extern C ... --- clang/tools/libclang/Obsolete.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang/tools/libclang/Obsolete.cpp b/clang/tools/libclang/Obsolete.cpp index 0790e5b5e9ac9..32102afdd8858 100644 --- a/clang/tools/libclang/Obsolete.cpp +++ b/clang/tools/libclang/Obsolete.cpp @@ -16,6 +16,8 @@ #include "clang-c/Platform.h" #include "llvm/Support/raw_ostream.h" +extern "C" { + // The functions below used to be part of the C API for ARCMigrate, which has // since been removed from Clang; they already used to print an error if Clang // was compiled without arcmt support, so we continue doing so. @@ -44,3 +46,5 @@ CINDEX_LINKAGE void clang_remap_getFilenames(CXRemapping, unsigned, CXString *, CINDEX_LINKAGE void clang_remap_dispose(CXRemapping) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; } + +} // extern "C" >From 35a03baf6819836f82df3c4434db85db76de5a51 Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Wed, 16 Jul 2025 13:44:05 +0200 Subject: [PATCH 3/3] Reintroduce declarations and mark them as deprecated --- clang/include/clang-c/Index.h | 15 +++++++++++++++ clang/tools/libclang/Obsolete.cpp | 12 +++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index c35311c886413..b929585205aee 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -6953,6 +6953,21 @@ clang_getCursorUnaryOperatorKind(CXCursor cursor); * @} */ +CINDEX_DEPRECATED +typedef void *CXRemapping; + +CINDEX_DEPRECATED CINDEX_LINKAGE CXRemapping clang_getRemappings(const char *); + +CINDEX_DEPRECATED CINDEX_LINKAGE CXRemapping +clang_getRemappingsFromFileList(const char **, unsigned); + +CINDEX_DEPRECATED CINDEX_LINKAGE unsigned clang_remap_getNumFiles(CXRemapping); + +CINDEX_DEPRECATED CINDEX_LINKAGE void +clang_remap_getFilenames(CXRemapping, unsigned, CXString *, CXString *); + +CINDEX_DEPRECATED CINDEX_LINKAGE void clang_remap_dispose(CXRemapping); + LLVM_CLANG_C_EXTERN_C_END #endif diff --git a/clang/tools/libclang/Obsolete.cpp b/clang/tools/libclang/Obsolete.cpp index 32102afdd8858..3596f76e1be6f 100644 --- a/clang/tools/libclang/Obsolete.cpp +++ b/clang/tools/libclang/Obsolete.cpp @@ -13,6 +13,7 @@ //===--------------------------------------------------------------------===// #include "clang-c/CXString.h" +#include "clang-c/Index.h" #include "clang-c/Platform.h" #include "llvm/Support/raw_ostream.h" @@ -21,29 +22,26 @@ extern "C" { // The functions below used to be part of the C API for ARCMigrate, which has // since been removed from Clang; they already used to print an error if Clang // was compiled without arcmt support, so we continue doing so. -typedef void *CXRemapping; -CINDEX_LINKAGE CXRemapping clang_getRemappings(const char *) { +CXRemapping clang_getRemappings(const char *) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; return nullptr; } -CINDEX_LINKAGE CXRemapping clang_getRemappingsFromFileList(const char **, unsigned) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; return nullptr; } -CINDEX_LINKAGE unsigned clang_remap_getNumFiles(CXRemapping) { +unsigned clang_remap_getNumFiles(CXRemapping) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; return 0; } -CINDEX_LINKAGE void clang_remap_getFilenames(CXRemapping, unsigned, CXString *, - CXString *) { +void clang_remap_getFilenames(CXRemapping, unsigned, CXString *, CXString *) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; } -CINDEX_LINKAGE void clang_remap_dispose(CXRemapping) { +void clang_remap_dispose(CXRemapping) { llvm::errs() << "error: ARCMigrate has been removed from Clang"; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits