blob: 650af873ee17c5a7d0d1bc336381b33b9a02d93f [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
--- a/src/google/protobuf/port_def.inc
+++ b/src/google/protobuf/port_def.inc
@@ -435,13 +435,15 @@
# endif
#else
-# if defined(__cpp_constinit) && !defined(__CYGWIN__)
+// Emscripten's libc++ std::string is not constexpr-constructible (heap alloc).
+# if defined(__cpp_constinit) && !defined(__CYGWIN__) && !defined(__EMSCRIPTEN__)
# define PROTOBUF_CONSTINIT constinit
# define PROTOBUF_CONSTEXPR constexpr
# define PROTOBUF_CONSTINIT_DEFAULT_INSTANCES
// Some older Clang versions incorrectly raise an error about
// constant-initializing weak default instance pointers. Versions 12.0 and
// higher seem to work, except that XCode 12.5.1 shows the error even though it
// uses Clang 12.0.5.
-#elif !defined(__CYGWIN__) && !defined(__MINGW32__) && \
+#elif !defined(__CYGWIN__) && !defined(__MINGW32__) && \
+ !defined(__EMSCRIPTEN__) && \
ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization) && \
((defined(__APPLE__) && PROTOBUF_CLANG_MIN(13, 0)) || \
(!defined(__APPLE__) && PROTOBUF_CLANG_MIN(12, 0)))