[OpaquePtr][Clang] Add CLANG_ENABLE_OPAQUE_POINTERS cmake option
This option controls whether -opaque-pointers or -no-opaque-pointers
is the default. Once opaque pointers are enabled by default, this
will provide a simple way to temporarily opt-out of the change.
Differential Revision: https://reviews.llvm.org/D123122
GitOrigin-RevId: 5390606aa963a7b415da65aa8120efbbafd30401
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 931eecd..3a77e7b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -247,6 +247,17 @@
option(CLANG_DEFAULT_PIE_ON_LINUX "Default to -fPIE and -pie on linux-gnu" ON)
+# Manually handle default so we can change the meaning of a cached default.
+set(CLANG_ENABLE_OPAQUE_POINTERS "DEFAULT" CACHE STRING
+ "Enable opaque pointers by default")
+if(CLANG_ENABLE_OPAQUE_POINTERS STREQUAL "DEFAULT")
+ set(CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL OFF)
+elseif(CLANG_ENABLE_OPAQUE_POINTERS)
+ set(CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL ON)
+else()
+ set(CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL OFF)
+endif()
+
# TODO: verify the values against LangStandards.def?
set(CLANG_DEFAULT_STD_C "" CACHE STRING
"Default standard to use for C/ObjC code (IDENT from LangStandards.def, empty for platform default)")
diff --git a/include/clang/Config/config.h.cmake b/include/clang/Config/config.h.cmake
index 10a9329..680cc73 100644
--- a/include/clang/Config/config.h.cmake
+++ b/include/clang/Config/config.h.cmake
@@ -89,4 +89,7 @@
/* Spawn a new process clang.exe for the CC1 tool invocation, when necessary */
#cmakedefine01 CLANG_SPAWN_CC1
+/* Whether to enable opaque pointers by default */
+#cmakedefine01 CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL
+
#endif
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index 4862765..0f7cfa7 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -5507,7 +5507,7 @@
defm opaque_pointers : BoolOption<"",
"opaque-pointers",
CodeGenOpts<"OpaquePointers">,
- DefaultFalse,
+ Default<"CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL">,
PosFlag<SetTrue, [], "Enable">,
NegFlag<SetFalse, [], "Disable">,
BothFlags<[], " opaque pointers">>;