https://gitlab.onelab.info/gmsh/gmsh/-/commit/e7cd675083f72c6c01701cb0f16d1639aca121ba
https://bugs.gentoo.org/800536

From: Tristan Carel <tristan.carel@epfl.ch>
Date: Wed, 28 Jul 2021 10:55:40 +0200
Subject: [PATCH] Fix symbol conflict in picojson with GCC 11 internal macro

Build issue on MacOS with GCC 11 from brew:
```
/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11/gcc/x86_64-apple-darwin20/11.1.0/include/serializeintrin.h:37: note: macro "_serialize" defined here
   37 | #define _serialize()    __builtin_ia32_serialize ()
      |
```
--- a/Common/picojson.h
+++ b/Common/picojson.h
@@ -186,8 +186,8 @@ public:
 private:
   template <typename T> value(const T *); // intentionally defined to block implicit conversion of pointer to bool
   template <typename Iter> static void _indent(Iter os, int indent);
-  template <typename Iter> void _serialize(Iter os, int indent) const;
-  std::string _serialize(int indent) const;
+  template <typename Iter> void serialize_(Iter os, int indent) const;
+  std::string serialize_(int indent) const;
   void clear();
 };
 
@@ -549,11 +549,11 @@ template <typename Iter> void serialize_str(const std::string &s, Iter oi) {
 }
 
 template <typename Iter> void value::serialize(Iter oi, bool prettify) const {
-  return _serialize(oi, prettify ? 0 : -1);
+  return serialize_(oi, prettify ? 0 : -1);
 }
 
 inline std::string value::serialize(bool prettify) const {
-  return _serialize(prettify ? 0 : -1);
+  return serialize_(prettify ? 0 : -1);
 }
 
 template <typename Iter> void value::_indent(Iter oi, int indent) {
@@ -563,7 +563,7 @@ template <typename Iter> void value::_indent(Iter oi, int indent) {
   }
 }
 
-template <typename Iter> void value::_serialize(Iter oi, int indent) const {
+template <typename Iter> void value::serialize_(Iter oi, int indent) const {
   switch (type_) {
   case string_type:
     serialize_str(*u_.string_, oi);
@@ -580,7 +580,7 @@ template <typename Iter> void value::_serialize(Iter oi, int indent) const {
       if (indent != -1) {
         _indent(oi, indent);
       }
-      i->_serialize(oi, indent);
+      i->serialize_(oi, indent);
     }
     if (indent != -1) {
       --indent;
@@ -608,7 +608,7 @@ template <typename Iter> void value::_serialize(Iter oi, int indent) const {
       if (indent != -1) {
         *oi++ = ' ';
       }
-      i->second._serialize(oi, indent);
+      i->second.serialize_(oi, indent);
     }
     if (indent != -1) {
       --indent;
@@ -628,9 +628,9 @@ template <typename Iter> void value::_serialize(Iter oi, int indent) const {
   }
 }
 
-inline std::string value::_serialize(int indent) const {
+inline std::string value::serialize_(int indent) const {
   std::string s;
-  _serialize(std::back_inserter(s), indent);
+  serialize_(std::back_inserter(s), indent);
   return s;
 }
 
GitLab
