https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120472

            Bug ID: 120472
           Summary: Wtype-limits warning in semaphore_base.h on Cygwin
           Product: gcc
           Version: 15.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zmajeed at sbcglobal dot net
  Target Milestone: ---

This is a follow-up to bug 120449,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120449

__platform_wait_t is unsigned long on Cygwin and causes type-limits warning in
semaphore_base.h

Testfile typelimits.cpp

#include <semaphore>

-----------------

With the fix from bug 120449
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120449#c6

g++ -c -Wtype-limits -std=c++20 -Wsystem-headers typelimits.cpp

In file included from libstdc++-v3/include/bits/requires_hosted.h:31,
                 from libstdc++-v3/include/semaphore:36,
                 from typelimits.cpp:1:
libstdc++-v3/include/bits/semaphore_base.h: In constructor
β€˜std::__atomic_semaphore::__atomic_semaphore(std::__detail::__platform_wait_t)’:
semaphore_base.h:178:7: warning: comparison of unsigned expression in β€˜>= 0’ is
always true [-Wtype-limits]
  178 |       __glibcxx_assert(__count >= 0 && __count <= _S_max);

-----------------

Warning could be fixed with something like

__glibcxx_assert((__count > 0 || __count == 0) && __count <= _S_max);

or also check for unsigned type

__glibcxx_assert((is_unsigned_v<decltype(__count)> || __count > 0 || __count ==
0) && __count <= _S_max);

Reply via email to