http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60600

--- Comment #5 from lucdanton at free dot fr ---
(In reply to Martin Jambor from comment #2)
> Well, this is ICE on code with undefined behavior.  Function test
> calls itself with a parameter which is a reference to an object of
> type child2 and then static_casts it to a reference to child1.  These
> are non-PODs, neither of these types is an ancestor of the other and
> thus the use of static_cast is not allowed by the C++ standard.
> […]

I must apologise for the peculiar testcase I produced. I normally try to write
a sensible program or fragment, but in this case I couldn’t figure out where
the problematic behaviour was. In the end I resigned myself to (almost
mechanically) discard bits and bits of the original TU until I was left with
those things that triggered the ICE and nothing else.

(I can’t help but notice that if the testcase is made a complete program by
e.g. adding an empty main then strictly speaking there is no UB as control flow
never reaches the invalid cast — with the ICE still happening.)

For the record, and as best as I can tell, the original code was carefully
performing the downcasts inside a (type)case, with no overlap or fallthrough.
And if I do apply the patch you supplied, GCC does compile the library without
issue.

Reply via email to