#2534 closed Bugs (fixed)
Removing gcc warning
Reported by: | Owned by: | chris_kohlhoff | |
---|---|---|---|
Milestone: | Boost 1.38.0 | Component: | asio |
Version: | Boost 1.37.0 | Severity: | Cosmetic |
Keywords: | gcc warning | Cc: |
Description
The function
boost::asio::detail::pipe_select_interrupter::interupt()
in <boost/asio/detail/pipe_select_interrupter.hpp> produces the following warning in gcc 4.3.2 / glibc 2.8 when compiled with -O1 or higher. The warning occurs even without any -W options.
./boost/asio/detail/pipe_select_interrupter.hpp:75:
warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result
As the message implies, gcc issues this warning whenever a function declared with attribute((warn_unused_result)); it appears that gcc implicitly places this attribute on ::write as the glibc header doesn't contain it. A short test case is:
#include <unistd.h> int main() { ::write(1, 0, 0); }
To suppress the warning, the function interupt() function can be altered as follows:
#include <boost/concept_check.hpp>
void interrupt() {
char byte = 0; ignore_unused_variable_warning( ::write(write_descriptor_, &byte, 1) );
}
Is there any chance of making a change along these lines?
Apologies if this is a know issue: a quick search of the mailing list didn't turn anything up.
Change History (5)
comment:1 by , 14 years ago
Keywords: | gcc warning added |
---|---|
Severity: | Problem → Cosmetic |
follow-up: 5 comment:2 by , 14 years ago
This happens also in boost_1_37_0/boost/asio/detail/eventfd_select_interrupter.hpp.
Is the workaround suggested here safe? The warning is there for a good reason, I presume.
These are my details:
uname -a
Linux compilator 2.6.27-9-server #1 SMP Thu Nov 20 22:53:41 UTC 2008 i686 GNU/Linux
g++ -c -o myxxxfile.o -O3 -I../boost_1_37_0/ -MP -MD myxxxfile.cpp In file included from ../boost_1_37_0/boost/asio/detail/select_interrupter.hpp:24, from ../boost_1_37_0/boost/asio/detail/epoll_reactor.hpp:42, from ../boost_1_37_0/boost/asio/impl/io_service.ipp:25, from ../boost_1_37_0/boost/asio/io_service.hpp:550, from ../boost_1_37_0/boost/asio/basic_io_object.hpp:20, from ../boost_1_37_0/boost/asio/basic_socket.hpp:24, from ../boost_1_37_0/boost/asio/basic_datagram_socket.hpp:25, from ../boost_1_37_0/boost/asio.hpp:20, from stdafx.h:22, from myxxxfile.cpp:1: ../boost_1_37_0/boost/asio/detail/eventfd_select_interrupter.hpp: In member function 'void boost::asio::detail::eventfd_select_interrupter::interrupt()': ../boost_1_37_0/boost/asio/detail/eventfd_select_interrupter.hpp:89: warning: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result
comment:3 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:4 by , 14 years ago
(In [51004]) Merged revisions 50943-50950,50961-50964,50987 via svnmerge from https://svn.boost.org/svn/boost/trunk
........
r50943 | chris_kohlhoff | 2009-02-01 22:37:18 +1100 (Sun, 01 Feb 2009) | 2 lines
Need to specify socket lib to link correctly on QNX. Fixes #2504.
........
r50944 | chris_kohlhoff | 2009-02-01 22:42:09 +1100 (Sun, 01 Feb 2009) | 2 lines
Use correct size for IP_MULTICAST_LOOP option on QNX. Fixes #2530.
........
r50945 | chris_kohlhoff | 2009-02-01 22:57:01 +1100 (Sun, 01 Feb 2009) | 2 lines
Improve warning message when _WIN32_WINNT is not correctly defined. Fixes #2541.
........
r50946 | chris_kohlhoff | 2009-02-01 23:28:12 +1100 (Sun, 01 Feb 2009) | 2 lines
Suppress unused result warning. Fixes #2534.
........
r50947 | chris_kohlhoff | 2009-02-01 23:41:01 +1100 (Sun, 01 Feb 2009) | 3 lines
Ensure arguments to windows::overlapped_ptr::complete() are passed through to the completion handler. Fixes #2614.
........
r50948 | chris_kohlhoff | 2009-02-01 23:50:08 +1100 (Sun, 01 Feb 2009) | 2 lines
Add include of <cstring> to fix a compile error on Solaris 10. Fixes #2607.
........
r50949 | chris_kohlhoff | 2009-02-02 00:25:05 +1100 (Mon, 02 Feb 2009) | 3 lines
Clear the last error following a successful Windows API call, since some socket providers may leave last error set even when the call succeeds.
........
r50950 | chris_kohlhoff | 2009-02-02 00:42:33 +1100 (Mon, 02 Feb 2009) | 2 lines
Fix errors in SSL overview and add a note about handshaking. Fixes #2617 and #2619.
........
r50961 | chris_kohlhoff | 2009-02-02 17:18:59 +1100 (Mon, 02 Feb 2009) | 2 lines
Use a pipe if eventfd is not supported at runtime. Fixes #2683.
........
r50962 | chris_kohlhoff | 2009-02-02 18:06:00 +1100 (Mon, 02 Feb 2009) | 2 lines
Add link to asio wiki.
........
r50963 | chris_kohlhoff | 2009-02-02 20:36:11 +1100 (Mon, 02 Feb 2009) | 4 lines
Use the workaround syntax for specifying a return type with boost::bind. Needed for the SSL support to work on some older compilers (in particular, g++ 3.4.5 as used with MinGW).
........
r50964 | chris_kohlhoff | 2009-02-02 20:37:10 +1100 (Mon, 02 Feb 2009) | 2 lines
Update asio version number.
........
r50987 | chris_kohlhoff | 2009-02-03 22:00:39 +1100 (Tue, 03 Feb 2009) | 2 lines
Fix generated documentation where the overloads of a function have different brief descriptions.
........
comment:5 by , 13 years ago
Replying to anonymous:
Is the workaround suggested here safe? The warning is there for a good reason, I presume.
AFAIK, the result of a write() should always be checked: the socket or NFS may have gone down, the drive could be full, etc. If this case is just debugging information, or some kind of optional output, ignoring the status might be fine, but IMHO it needs comments to explicitly explain why it is safe.
"confirm" bjam-output of my project:
Only occurs on release-mode, debug-mode works fine.
not important but would be nice to fix..
MfG