This is the mail archive of the mailing list for the libstdc++ project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: __atomic_futex_unsigned::_M_load_when_not_equal has a 'return' statement with no value, in function returning unsigned int

On 22/07/15 22:30 -0400, Patrick Palka wrote:
Specifically, line 149 of atomix_futex.h has a bare "return;"
statement, but the function is marked as returning non-void.  This was
caught while working on PR c++/18969.  Vanilla G++ does not catch this
error because return statements inside templates are currently only
analyzed during instantiation time.

Ouch. Luckily that function is never called, so it's not doing any

Torvald, assuming we want to keep that unused function, is this the
right fix?

diff --git a/libstdc++-v3/include/bits/atomic_futex.h b/libstdc++-v3/include/bits/atomic_futex.h
index ca3260d..5b126c8 100644
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
     _M_load_when_not_equal(unsigned __val, memory_order __mo)
       unsigned __i = _M_load(__mo);
-      if ((__i & ~_Waiter_bit) != __val) return;
+      if ((__i & ~_Waiter_bit) != __val)
+	return (__i & ~_Waiter_bit);
       // TODO Spin-wait first.
       return _M_load_and_test(__i, __val, false, __mo);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]