[Bug sanitizer/71962] error: ‘((& x) != 0u)’ is not a constant expression with f sanitize=undefined

hello at bjornpagen dot com via Gcc-bugs <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71962

Bjorn Pagen <hello at bjornpagen dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hello at bjornpagen dot com

--- Comment #20 from Bjorn Pagen <hello at bjornpagen dot com> ---
This bug also affects C++26 reflection and consteval code in GCC 16.1.0.

This standalone testcase reproduces the std::string(ptr, size) failure over
vague-linkage storage:

#include <string>

inline constexpr char text[] = "x";

consteval auto check() -> bool {
  auto value = std::string{text, 1};
  return value == "x";
}

static_assert(check());

Command:

g++-16 -std=c++26 -fsanitize=undefined -c repro.cc

GCC rejects the static assertion. The final diagnostic is:

bits/basic_string.h:713:17: error: '(((const char*)(& text)) == 0)' is not a
constant expression

The same command succeeds without -fsanitize=undefined.

Reflection APIs can expose text through compiler-generated storage with the
same linkage property. This bug therefore blocks required constant evaluation
in reflection code.

Attachment 65251, added on 2026-08-05, addresses the same separation between
constant evaluation and null-check optimization. This testcase can extend its
regression coverage.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.