Don't define _HAS_EXCEPTIONS to 0 with libc++. libc++ uses a predefined macro to control whether to use exceptions, so defining this macro is unnecessary. Defining _HAS_EXCEPTIONS to 0 also breaks libc++ because it depends on MSVC headers that only provide certain declarations if _HAS_EXCEPTIONS is 1. Bug: chromium:801780 Change-Id: I0d0c04e55e1e91c3ce7fe90d15b55de0cd7a21ac Reviewed-on: https://swiftshader-review.googlesource.com/16688 Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Peter Collingbourne <pcc@google.com>
diff --git a/BUILD.gn b/BUILD.gn index 9404d0b..7af9f6a 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/config/c++/c++.gni") import("//build/config/compiler/compiler.gni") config("swiftshader_config") { @@ -26,8 +27,18 @@ "/Gd", # Default calling convention ] + if (!use_custom_libcxx) { + # Disable EH usage in STL headers. + # libc++ uses a predefined macro to control whether to use exceptions, so + # defining this macro is unnecessary. Defining _HAS_EXCEPTIONS to 0 also + # breaks libc++ because it depends on MSVC headers that only provide + # certain declarations if _HAS_EXCEPTIONS is 1. + defines += [ + "_HAS_EXCEPTIONS=0", + ] + } + defines += [ - "_HAS_EXCEPTIONS=0", # Disable EH usage in STL headers "_CRT_SECURE_NO_DEPRECATE", "NOMINMAX", "_WINDLL",