Hello,

The attached patch is a proposal to simply rename a template
type name in stl_map.h and stl_multimap.h in order to prevent
clashes with a macro name exposed by a system header on VxWorks.

The conflicting name is _C2, which in principle is "reserved"
for the system so having such a macro exposed by a system header
doesn't seem to be a bug per se.

I suppose that the libstdc++ headers can be considered part of
the system as well in a way, so it's not really a bug there either.

Fixing the OS headers is a major hassle on VxWorks, however,
especially with more recent versions of the system, so we arranged
not to rely on it at all up to now and a straightforward adjustment
in the libstdc++ headers offers a way smoother and simpler way
forward.

I'm not sure what "C2" was intended to refer to so I picked
an alternate name which seemed to match some aspects of the context
while keeping the very-short-identifier style used throughout.

This cures a lot of test failures with our gcc-9 based
toolchains for VwWorks 7 and applies cleanly on mainline.

I'm running a bootstrap & regression test cycle on x86_64-linux

Would this be OK to commit ?

Thanks in advance for your feedback,

Olivier


2020-01-09  Olivier Hainque  <hain...@adacore.com>

        libstdc++-v3/
        * include/bits/stl_map.h: Rename _C2 template typenames as _Mt.
        * include/bits/stl_multimap.h: Likewise.

diff --git a/libstdc++-v3/include/bits/stl_map.h 
b/libstdc++-v3/include/bits/stl_map.h
index 322d0a8290a..08170b91f00 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -635,30 +635,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       template<typename, typename>
        friend class std::_Rb_tree_merge_helper;
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(map<_Key, _Tp, _C2, _Alloc>& __source)
+       merge(map<_Key, _Tp, _Mt, _Alloc>& __source)
        {
-         using _Merge_helper = _Rb_tree_merge_helper<map, _C2>;
+         using _Merge_helper = _Rb_tree_merge_helper<map, _Mt>;
          _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
        }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
+       merge(map<_Key, _Tp, _Mt, _Alloc>&& __source)
        { merge(__source); }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
+       merge(multimap<_Key, _Tp, _Mt, _Alloc>& __source)
        {
-         using _Merge_helper = _Rb_tree_merge_helper<map, _C2>;
+         using _Merge_helper = _Rb_tree_merge_helper<map, _Mt>;
          _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
        }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
+       merge(multimap<_Key, _Tp, _Mt, _Alloc>&& __source)
        { merge(__source); }
 #endif // C++17
 
diff --git a/libstdc++-v3/include/bits/stl_multimap.h 
b/libstdc++-v3/include/bits/stl_multimap.h
index 4c4ccad3ac0..099f1c99cae 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -651,30 +651,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       template<typename, typename>
        friend class std::_Rb_tree_merge_helper;
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
+       merge(multimap<_Key, _Tp, _Mt, _Alloc>& __source)
        {
-         using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>;
+         using _Merge_helper = _Rb_tree_merge_helper<multimap, _Mt>;
          _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source));
        }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
+       merge(multimap<_Key, _Tp, _Mt, _Alloc>&& __source)
        { merge(__source); }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(map<_Key, _Tp, _C2, _Alloc>& __source)
+       merge(map<_Key, _Tp, _Mt, _Alloc>& __source)
        {
-         using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>;
+         using _Merge_helper = _Rb_tree_merge_helper<multimap, _Mt>;
          _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source));
        }
 
-      template<typename _C2>
+      template<typename _Mt>
        void
-       merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
+       merge(map<_Key, _Tp, _Mt, _Alloc>&& __source)
        { merge(__source); }
 #endif // C++17
 
-- 
2.17.1

Reply via email to