[clang] [llvm] [Clang] Reintroduce obsolete libclang symbols to avoid an ABI break (PR #149079)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 16 04:48:11 PDT 2025
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 <aeternalmail at 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 <aeternalmail at 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 <aeternalmail at 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";
}
More information about the llvm-commits
mailing list