aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/iresolve.cc
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@baylibre.com>2025-03-19 12:18:26 +0100
committerThomas Schwinge <tschwinge@baylibre.com>2025-03-21 15:35:18 +0100
commit618c42d23726be6e2086d452d6718abe5e0daca8 (patch)
treeb4631443ee87a65332e3360fea5c5068ef24ba91 /gcc/fortran/iresolve.cc
parentf7f6a3dd8251421f873dc99be4acb70ae277d509 (diff)
downloadgcc-618c42d23726be6e2086d452d6718abe5e0daca8.zip
gcc-618c42d23726be6e2086d452d6718abe5e0daca8.tar.gz
gcc-618c42d23726be6e2086d452d6718abe5e0daca8.tar.bz2
C++: Adjust implicit '__cxa_bad_cast' prototype to reality
In 2001 Subversion r40924 (Git commit 52a11cbfcf0cfb32628b6953588b6af4037ac0b6) "IA-64 ABI Exception Handling", '__cxa_bad_cast' changed from 'void *' to 'void' return type: --- libstdc++-v3/libsupc++/exception_support.cc +++ /dev/null @@ -1,388 +0,0 @@ -[...] -// Helpers for rtti. Although these don't return, we give them return types so -// that the type system is not broken. -extern "C" void * -__cxa_bad_cast () -{ - [...] -} -[...] --- /dev/null +++ libstdc++-v3/libsupc++/unwind-cxx.h @@ -0,0 +1,163 @@ +[...] +extern "C" void __cxa_bad_cast (); +[...] --- /dev/null +++ libstdc++-v3/libsupc++/eh_aux_runtime.cc @@ -0,0 +1,56 @@ +[...] +extern "C" void +__cxa_bad_cast () +{ + [...] +} +[...] The implicit prototype in the C++ front end however wasn't likewise adjusted, and so for nvptx we generate code for 'void *' return type: // BEGIN GLOBAL FUNCTION DECL: __cxa_bad_cast .extern .func (.param .u64 %value_out) __cxa_bad_cast; { .param .u64 %value_in; call (%value_in),__cxa_bad_cast; trap; // (noreturn) exit; // (noreturn) ld.param.u64 %r30,[%value_in]; } ..., which is in conflict with the library code with 'void' return type: // BEGIN GLOBAL FUNCTION DECL: __cxa_bad_cast .visible .func __cxa_bad_cast; // BEGIN GLOBAL FUNCTION DEF: __cxa_bad_cast .visible .func __cxa_bad_cast { [...] } ..., and we thus get execution test FAIL for 'g++.dg/rtti/dyncast2.C': error : Prototype doesn't match for '__cxa_bad_cast' in 'input file 7 at offset 51437', first defined in 'input file 7 at offset 51437' nvptx-run: cuLinkAddData failed: device kernel image is invalid (CUDA_ERROR_INVALID_SOURCE, 300) With this patched, we get the expected: // BEGIN GLOBAL FUNCTION DECL: __cxa_bad_cast -.extern .func (.param .u64 %value_out) __cxa_bad_cast; +.extern .func __cxa_bad_cast; { -.param .u64 %value_in; -call (%value_in),__cxa_bad_cast; +call __cxa_bad_cast; trap; // (noreturn) exit; // (noreturn) -ld.param.u64 %r30,[%value_in]; } ..., and execution test PASS. gcc/cp/ * rtti.cc (throw_bad_cast): Adjust implicit '__cxa_bad_cast' prototype to reality.
Diffstat (limited to 'gcc/fortran/iresolve.cc')
0 files changed, 0 insertions, 0 deletions