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

--- Comment #4 from Jan Hubicka <hubicka at ucw dot cz> ---
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92279
> 
> --- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
> Created attachment 47208
>   --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47208&action=edit
> Reproducer
> 
> So using a revision before it disappeared I see:
> 
> $ g++ -O2 -flto ice*.ii -c && gcc -O2 -flto *.i -c && g++ *.o -O2 -flto
> ...
> ice8.ii: In member function ‘MergeConvexHulls.constprop’:
> ice8.ii:883:6: error: non-trivial conversion in ‘constructor’
>   883 | void VHACD::MergeConvexHulls(const Parameters &params) {
>       |      ^
> struct Point64
> struct Point64

This means that types does not satisfy useless_type_conversion_p.
I would single step through, but I think for record types it boils down
to comparing main variants for equality. 

The ODR type still may get unmerged which is valid (but unfortunate,
in this case it is unmerged because its TYPE_CONTEXT is unmerged.)
You may try to figure out why it is different:

> context <record_type 0x7ffff76750a8 btConvexHullInternal>
...
> context <record_type 0x7ffff7675738 btConvexHullInternal>>

But whoever built the constructor with two differnt types did someting
wrong.

Honza
> 
> and where canonical types are the same as the types:
> 
> (gdb) p lhs_type->type_common.canonical
> $3 = (tree) 0x7ffff7688dc8
> (gdb) p rhs1_type->type_common.canonical
> $4 = (tree) 0x7ffff7675e70
> 
> This seems wrong as the types have same ODR name and have equal declaration.
> @Honza: Can you please help me with that?
> 
> -- 
> You are receiving this mail because:
> You are on the CC list for the bug.

Reply via email to