https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119006
--- Comment #2 from Jeff Snyder <jeff-gcc at caffeinated dot me.uk> ---
Further simplified:
template<unsigned N> struct FixedString {
bool operator==(const char* rhs_) const { return rhs_ and not
__builtin_strcmp(_str, rhs_); }
bool operator!=(const char* rhs_) const { return !(*this == rhs_); }
char _str[N + 1];
};
int fixedString10User(const FixedString<10>& lhs, const char* rhs) {
return lhs == rhs;
}
void checkString(FixedString<127> reason_) {
if (reason_ != "StrOverTenChars") asm volatile("nop");
}
int main() {}
I also had to build with `-rdynamic` to repro without `checkString` being
omitted entirely. Observed on x86-64.