From: g0dil Date: Mon, 26 Apr 2010 11:28:47 +0000 (+0000) Subject: Fix spurious warnings and workaround possible aliasing porblems (-fno-strict-aliasing) X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=42993f284009a951b77718ece3e7a2747041c566;p=senf.git Fix spurious warnings and workaround possible aliasing porblems (-fno-strict-aliasing) git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1606 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/SConstruct b/SConstruct index 579a0ad..17e18b6 100644 --- a/SConstruct +++ b/SConstruct @@ -97,7 +97,7 @@ env.Append( INLINE_OPTS_NORMAL = [ '-finline-limit=5000' ], INLINE_OPTS = [ '$INLINE_OPTS_NORMAL' ], CXXFLAGS = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long', '$INLINE_OPTS', - '-pipe', '$CXXFLAGS_' ], + '-pipe', '$CXXFLAGS_', '-fno-strict-aliasing' ], CXXFLAGS_ = senfutil.BuildTypeOptions('CXXFLAGS'), CXXFLAGS_final = [ '-O3' ], CXXFLAGS_normal = [ '-O2', '-g' ], diff --git a/senf/Scheduler/FIFORunner.cc b/senf/Scheduler/FIFORunner.cc index 2d8f706..ec93559 100644 --- a/senf/Scheduler/FIFORunner.cc +++ b/senf/Scheduler/FIFORunner.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -45,7 +45,7 @@ ///////////////////////////////cc.p//////////////////////////////////////// prefix_ senf::scheduler::detail::FIFORunner::FIFORunner() - : tasks_ (), next_ (tasks_.end()), watchdogRunning_ (false), watchdogMs_ (1000), + : tasks_ (), next_ (tasks_.end()), watchdogRunning_ (false), watchdogMs_ (1000), watchdogAbort_ (false), watchdogCount_(0), hangCount_ (0), yield_ (false) { struct sigevent ev; @@ -89,7 +89,7 @@ prefix_ void senf::scheduler::detail::FIFORunner::startWatchdog() timer.it_interval.tv_nsec = (watchdogMs_ % 1000) * 1000000ul; timer.it_value.tv_sec = timer.it_interval.tv_sec; timer.it_value.tv_nsec = timer.it_interval.tv_nsec; - + if (timer_settime(watchdogId_, 0, &timer, 0) < 0) SENF_THROW_SYSTEM_EXCEPTION("timer_settime()"); @@ -153,12 +153,12 @@ prefix_ void senf::scheduler::detail::FIFORunner::run() f = l; ++f; l = TaskList::current(normalPriorityEnd_); - run(f, l); + run(f, l); if (yield_) { yield_ = false; continue; } - + f = l; ++f; l = tasks_.end(); run(f, l); @@ -193,10 +193,10 @@ prefix_ void senf::scheduler::detail::FIFORunner::run(TaskList::iterator f, Task using namespace boost::lambda; ScopeExit atExit (( - var(watchdogCount_) = 0, + var(watchdogCount_) = 0, var(next_) = l )); - + while (next_ != end) { TaskInfo & task (*next_); if (task.runnable_) { @@ -223,11 +223,11 @@ prefix_ senf::scheduler::detail::FIFORunner::TaskList::iterator senf::scheduler::detail::FIFORunner::priorityEnd(TaskInfo::Priority p) { switch (p) { - case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_LOW : + case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_LOW : return tasks_.end(); - case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_NORMAL : + case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_NORMAL : return TaskList::current(normalPriorityEnd_); - case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_HIGH : + case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_HIGH : return TaskList::current(highPriorityEnd_); } return tasks_.begin(); @@ -250,33 +250,34 @@ prefix_ void senf::scheduler::detail::FIFORunner::watchdogError() static char const hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; static void * entries[SENF_DEBUG_BACKTRACE_NUMCALLERS]; - - write(1, "\n\n*** Scheduler task hanging (pid ",34); + + // We don't care if the write commands below fail, we just give our best to inform the user + (void) write(1, "\n\n*** Scheduler task hanging (pid ",34); static char pid[7]; ::snprintf(pid, 7, "%6d", ::getpid()); pid[6] = 0; - write(1, pid, 6); - write(1, "): ", 3); - write(1, runningName_.c_str(), runningName_.size()); - write(1, " at\n ", 3); + (void) write(1, pid, 6); + (void) write(1, "): ", 3); + (void) write(1, runningName_.c_str(), runningName_.size()); + (void) write(1, " at\n ", 3); #ifdef SENF_DEBUG unsigned nEntries( ::backtrace(entries, SENF_DEBUG_BACKTRACE_NUMCALLERS) ); for (unsigned i (0); i < nEntries; ++i) { write(1, " 0x", 3); for (unsigned j (sizeof(void*)); j > 0; --j) { uintptr_t v ( reinterpret_cast(entries[i]) >> (8*(j-1)) ); - write(1, &(hex[ (v >> 4) & 0x0f ]), 1); - write(1, &(hex[ (v ) & 0x0f ]), 1); + (void) write(1, &(hex[ (v >> 4) & 0x0f ]), 1); + (void) write(1, &(hex[ (v ) & 0x0f ]), 1); } } #endif - write(1, "\n", 1); - + (void) write(1, "\n", 1); + #ifdef SENF_DEBUG - write(1, "Task was initialized at\n", 24); - write(1, runningBacktrace_.c_str(), runningBacktrace_.size()); + (void) write(1, "Task was initialized at\n", 24); + (void) write(1, runningBacktrace_.c_str(), runningBacktrace_.size()); #endif - write(1, "\n", 1); + (void) write(1, "\n", 1); if (watchdogAbort_) assert(false); } @@ -285,7 +286,7 @@ prefix_ void senf::scheduler::detail::FIFORunner::watchdogError() #undef prefix_ //#include "FIFORunner.mpp" - + // Local Variables: // mode: c++ // fill-column: 100 diff --git a/senf/Scheduler/SignalEvent.cc b/senf/Scheduler/SignalEvent.cc index cf6128e..93b9bb0 100644 --- a/senf/Scheduler/SignalEvent.cc +++ b/senf/Scheduler/SignalEvent.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -59,7 +59,7 @@ prefix_ void senf::scheduler::detail::SignalDispatcher::add(SignalEvent & event) { SignalSet::iterator i (handlers_.find(event)); if (i != handlers_.end()) - throw DuplicateSignalRegistrationException() + throw DuplicateSignalRegistrationException() << " for signal " << signalName(event.signal_) << " (" << event.signal_ << ")"; handlers_.insert(event); @@ -114,9 +114,9 @@ prefix_ void senf::scheduler::detail::SignalDispatcher::sigHandler(int signal, : { SENF_ASSERT( alive() ); // The manpage says, si_signo is unused in linux so we set it here - siginfo->si_signo = signal; + siginfo->si_signo = signal; // We can't do much on error anyway so we ignore errors here - write(instance().sigPipe_[1], siginfo, sizeof(*siginfo)); + (void) write(instance().sigPipe_[1], siginfo, sizeof(*siginfo)); } prefix_ void senf::scheduler::SignalEvent::v_run() @@ -140,7 +140,7 @@ prefix_ std::string senf::scheduler::SignalEvent::v_info() #undef prefix_ //#include "SignalEvent.mpp" - + // Local Variables: // mode: c++ // fill-column: 100 diff --git a/senf/Scheduler/TimerSource.cc b/senf/Scheduler/TimerSource.cc index df05438..34f34c3 100644 --- a/senf/Scheduler/TimerSource.cc +++ b/senf/Scheduler/TimerSource.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -52,7 +52,7 @@ prefix_ senf::scheduler::detail::POSIXTimerSource::POSIXTimerSource() SENF_THROW_SYSTEM_EXCEPTION("pipe()"); senf::scheduler::detail::FdManager::instance().set( timerPipe_[0], detail::FdManager::EV_READ, this); - + sigemptyset(&sigSet_); sigaddset(&sigSet_, SIGALRM); sigprocmask(SIG_BLOCK, &sigSet_, 0); @@ -126,14 +126,17 @@ prefix_ void senf::scheduler::detail::POSIXTimerSource::sigHandler(int, if (siginfo->si_value.sival_ptr == 0) return; static char data = '\xD0'; - write(static_cast(siginfo->si_value.sival_ptr)->timerPipe_[1], - &data, sizeof(data)); + // If the write fails there's not much we can do anyways ... + (void) write(static_cast(siginfo->si_value.sival_ptr)->timerPipe_[1], + &data, sizeof(data)); } prefix_ void senf::scheduler::detail::POSIXTimerSource::signal(int events) { char data; - read(timerPipe_[0], &data, sizeof(data)); + // This should never fail since we are reading a single character from a signaled + // filedescriptor + (void) read(timerPipe_[0], &data, sizeof(data)); timeoutEnabled_ = false; } @@ -249,7 +252,8 @@ prefix_ bool senf::scheduler::detail::TimerFDTimerSource::haveTimerFD() prefix_ void senf::scheduler::detail::TimerFDTimerSource::signal(int events) { uint64_t expirations (0); - read(timerfd_, &expirations, sizeof(expirations)); + // We ignore the return value since we ignore the value read anyways + (void) read(timerfd_, &expirations, sizeof(expirations)); } prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule() @@ -270,7 +274,7 @@ prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule() #undef prefix_ //#include "TimerSource.mpp" - + // Local Variables: // mode: c++ // fill-column: 100 diff --git a/senf/Socket/Protocols/BSDSocketAddress.cci b/senf/Socket/Protocols/BSDSocketAddress.cci index 4c4084f..fb15e6e 100644 --- a/senf/Socket/Protocols/BSDSocketAddress.cci +++ b/senf/Socket/Protocols/BSDSocketAddress.cci @@ -187,12 +187,12 @@ senf::GenericBSDSocketAddress::operator=(const GenericBSDSocketAddress& other) prefix_ struct sockaddr const * senf::GenericBSDSocketAddress::sockaddr_p() const { - return reinterpret_cast(& addr_); + return static_cast(static_cast(& addr_)); } prefix_ struct sockaddr * senf::GenericBSDSocketAddress::sockaddr_p() { - return reinterpret_cast(& addr_); + return static_cast(static_cast(& addr_)); } /////////////////////////////cci.e/////////////////////////////////////// diff --git a/senf/Socket/Protocols/INet/INet4Address.cci b/senf/Socket/Protocols/INet/INet4Address.cci index 1fd97b3..26a92ee 100644 --- a/senf/Socket/Protocols/INet/INet4Address.cci +++ b/senf/Socket/Protocols/INet/INet4Address.cci @@ -46,13 +46,13 @@ prefix_ senf::INet4Address senf::INet4Address::from_inaddr(inaddr_type v) prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref() { - return *reinterpret_cast(&(*this)[0]); + return *static_cast(static_cast((&(*this)[0]))); } prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref() const { - return *reinterpret_cast(&(*this)[0]); + return *static_cast(static_cast(&(*this)[0])); } prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr() diff --git a/senf/Socket/Protocols/INet/TCPSocketHandle.test.cc b/senf/Socket/Protocols/INet/TCPSocketHandle.test.cc index 7e1d051..ce26756 100644 --- a/senf/Socket/Protocols/INet/TCPSocketHandle.test.cc +++ b/senf/Socket/Protocols/INet/TCPSocketHandle.test.cc @@ -69,7 +69,7 @@ namespace { int n = read(sock,buffer,1024); if (n == 4 && strncmp(buffer,"QUIT",4) == 0) break; - write(sock,buffer,n); + (void) write(sock,buffer,n); } if (shutdown(sock, SHUT_RDWR) < 0) fail("server_v4","shutdown()"); @@ -99,7 +99,7 @@ namespace { int n = read(sock,buffer,1024); if (n == 4 && strncmp(buffer,"QUIT",4) == 0) break; - write(sock,buffer,n); + (void) write(sock,buffer,n); } if (shutdown(sock, SHUT_RDWR) < 0) fail("server_v6","shutdown()"); @@ -260,7 +260,7 @@ namespace { int n = read(sock,buffer,1024); if (n == 4 && strncmp(buffer,"QUIT",4) == 0) break; - write(sock,buffer,n); + (void) write(sock,buffer,n); } if (shutdown(sock, SHUT_RDWR) < 0) fail("client_v4","shutdown()"); @@ -284,7 +284,7 @@ namespace { int n = read(sock,buffer,1024); if (n == 4 && strncmp(buffer,"QUIT",4) == 0) break; - write(sock,buffer,n); + (void) write(sock,buffer,n); } if (shutdown(sock, SHUT_RDWR) < 0) fail("client_v6","shutdown()"); diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index 4a56ac2..246f72e 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -79,7 +79,7 @@ def SetupForSENF(env, senf_path = []): env.Append( LIBS = [ 'rt' ], - CXXFLAGS = [ '-Wno-long-long', '$CXXFLAGS_' ], + CXXFLAGS = [ '-Wno-long-long', '$CXXFLAGS_', '-fno-strict-aliasing' ], CXXFLAGS_ = BuildTypeOptions('CXXFLAGS'), CPPDEFINES = [ '$expandLogOption', '$CPPDEFINES_' ],