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

            Bug ID: 118135
           Summary: undefined std::bit_cast for bool is not detected
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
  Target Milestone: ---

Take:
```
#include <bit>

 auto c = (char)('A'&~0x1);
int main()
{
  bool t1 = std::bit_cast<bool>(c);
   __builtin_printf("%s\n", t1 ? "true" : "false");
}
```

-fsanitize=undefined should detect an invalid value for bool but currently does
not.

If we do:
```
#include <bit>

 auto c = (char)('A'&~0x1);
bool t;
int main()
{
  bool t1 = std::bit_cast<bool>(c);
  t = t1;
   __builtin_printf("%s\n", t ? "true" : "false");
}
```

Then GCC is able to detect it.

Reply via email to