From db88edfa1ee5a1aa2fd06361381bb31c8a6954c1 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 31 Jul 2026 16:09:48 -0400 Subject: [PATCH] Disable RTTI in the toolchain (#7552) This reduces object sizes which is desirable for linking speed. zygoloid did some analysis to determine if any of our code requires RTTI for `dynamic_cast` here: https://github.com/carbon-language/carbon-lang/pull/7532#discussion_r3611196721: > The only thing I found is that libc++ requires dynamic_cast in order for std::print to correctly write Unicode to terminals on Windows We use `llvm::print` functionality, not `std::print`, so this doesn't affect our toolchain. Note that libc++ and libc++abi are built with RTTI enabled. It is explicitly allowed to use different compiler flags when building these libraries even though they share some headers with users of the libraries, so this does not cause ODR violations. --- bazel/cc_toolchains/cc_toolchain_cpp_features.bzl | 1 + toolchain/install/BUILD | 3 +++ 2 files changed, 4 insertions(+) diff --git a/bazel/cc_toolchains/cc_toolchain_cpp_features.bzl b/bazel/cc_toolchains/cc_toolchain_cpp_features.bzl index 29c1105ed4c1..44a243f4cb5e 100644 --- a/bazel/cc_toolchains/cc_toolchain_cpp_features.bzl +++ b/bazel/cc_toolchains/cc_toolchain_cpp_features.bzl @@ -67,6 +67,7 @@ clang_feature = feature( actions = ACTION_NAME_GROUPS.all_cpp_compile_actions, flag_groups = [flag_group(flags = [ "-fno-exceptions", + "-fno-rtti", "-std=c++20", ])], ), diff --git a/toolchain/install/BUILD b/toolchain/install/BUILD index 0e418c994adf..5d445c0ae72f 100644 --- a/toolchain/install/BUILD +++ b/toolchain/install/BUILD @@ -574,6 +574,9 @@ cc_library( # than the client (our toolchain) uses, even though they both include # the same headers from the libraries. "-fexceptions", + # Like exceptions, these libraries are built internally with RTTI + # enabled, while the toolchain is built without. + "-frtti", ], hdrs_check = "strict", includes = [