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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm.

(gdb) p alias_set_subset_of (3, 2)
$52 = false
(gdb) p alias_set_subset_of (2, 3)
$54 = true

but

(gdb) p alias_sets_conflict_p (2, 3)
$55 = 0
(gdb) p alias_sets_conflict_p (3, 2)
$56 = 0

ah, the former is because ->has_zero_child which the latter doesn't check.
So the question is why we don't record the children.  Ah, it's because
we record alias-set zero for InnerType and thus when recording the
subsets of Optional we "stop" and have no subsets of InnerType.

Bah.

So the causing rev was broken, tho reverting will pessimize some stuff.
It's also odd things break on the GCC 8 branch even though it doesn't have
the respective rev.

Martin - can you bisect again?  As said, use

void __attribute__((noipa)) foo(Optional<>& x) { __asm__ volatile
("":::"memory"); }

(and ignore the noipa warning)

Reply via email to