libstdc++ 11.1.0 redeclares failed_assertion multiple times and that results in the
function declared with conflicting set of attributes when we include <complex>
with host__ device attributes force-applied to all functions.
In order to work around the issue, we rename __failed_assertion within the
region with forced attributes.
See https://bugs.llvm.org/show_bug.cgi?id=50383 for the details.
Not sure I understand what the push of __failed_assert is for..? can't find any reference to __failed_assert anywhere... did you mean to write __failed_assertion?