[PATCH] D23961: Avoid embedded preprocessor directives in __tree
Dimitry Andric via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 27 08:55:41 PDT 2016
dim created this revision.
dim added reviewers: mclow.lists, EricWF.
dim added subscribers: emaste, cfe-commits.
When I compile <map> as part of clang, with -pedantic enabled, I get the
following warnings:
In file included from /usr/include/c++/v1/map:442:
/usr/include/c++/v1/__tree:874:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#if _LIBCPP_STD_VER <= 11
^
/usr/include/c++/v1/__tree:877:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#endif
^
/usr/include/c++/v1/__tree:1392:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#if _LIBCPP_STD_VER <= 11
^
/usr/include/c++/v1/__tree:1395:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#endif
^
This is because the `#if`s are within the parameter list of a
`_NOEXCEPT_()` macro invocation. EricWF fixed something similar in
rL242623, by moving the `#if` outside the macro invocation.
https://reviews.llvm.org/D23961
Files:
include/__tree
Index: include/__tree
===================================================================
--- include/__tree
+++ include/__tree
@@ -1111,14 +1111,15 @@
void clear() _NOEXCEPT;
void swap(__tree& __t)
+#if _LIBCPP_STD_VER <= 11
_NOEXCEPT_(
__is_nothrow_swappable<value_compare>::value
-#if _LIBCPP_STD_VER <= 11
&& (!__node_traits::propagate_on_container_swap::value ||
__is_nothrow_swappable<__node_allocator>::value)
-#endif
);
-
+#else
+ _NOEXCEPT_(__is_nothrow_swappable<value_compare>::value);
+#endif
#ifndef _LIBCPP_CXX03_LANG
template <class _Key, class ..._Args>
@@ -1797,13 +1798,15 @@
template <class _Tp, class _Compare, class _Allocator>
void
__tree<_Tp, _Compare, _Allocator>::swap(__tree& __t)
+#if _LIBCPP_STD_VER <= 11
_NOEXCEPT_(
__is_nothrow_swappable<value_compare>::value
-#if _LIBCPP_STD_VER <= 11
&& (!__node_traits::propagate_on_container_swap::value ||
__is_nothrow_swappable<__node_allocator>::value)
-#endif
)
+#else
+ _NOEXCEPT_(__is_nothrow_swappable<value_compare>::value)
+#endif
{
using _VSTD::swap;
swap(__begin_node_, __t.__begin_node_);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23961.69492.patch
Type: text/x-patch
Size: 1250 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160827/1fd982e4/attachment.bin>
More information about the cfe-commits
mailing list