https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68281
--- Comment #2 from Josh Stone <jistone at redhat dot com> ---
This may also be significant:
bool
base_query::get_number_param(literal_map_t const & params,
interned_string k, long & v)
{
int64_t value;
bool present = derived_probe_builder::get_param (params, k, value);
v = (long) value;
return present;
}
We're entering here with v uninit, and clearly value is uninit. If get_param()
returns false, then value will still be uninit when it's copied to v.
If I just make that assignment conditional:
if (present) v = (long) value;
then the code for line 1002's '&&' no longer reverses the checks.
Does that assignment trigger undefined behavior? Or is it just coincidence?