Hi Joseph, > Code that directly uses _Decimal* types on architectures not > supporting DFP is properly diagnosed ("error: decimal floating-point > not supported for this target"), via a call to > targetm.decimal_float_supported_p, if the _Decimal32, _Decimal64 or > _Decimal128 keywords are used to access it. Use via mode attributes > is also diagnosed ("unable to emulate 'SD'"); so is use of the > FLOAT_CONST_DECIMAL64 pragma. However, it is possible to access those > types via typeof applied to constants or built-in functions without > such an error. I expect that there are ways to get an ICE from this; > certainly it uses a completely undefined ABI. > > This patch arranges for the types not to exist in the compiler at all > when DFP is not supported. As is done with unsupported _FloatN / > _FloatNx types, the global tree nodes are left as NULL_TREE, and the > built-in function machinery is made to use error_mark_node for them in > that case in builtin-types.def, so that the built-in functions are > unavailable. Code handling constants is adjusted to give an error, > and other code that might not work with the global tree nodes being > NULL_TREE is also updated. > > Bootstrapped with no regressions for x86_64-pc-linux-gnu. Also tested > with no regressions for cross to aarch64-linux-gnu, as a configuration > without DFP support. OK to commit (the changes that aren't C front-end > changes)?
AFAICS this caused +FAIL: libstdc++-abi/abi_check on Solaris. In libstdc++.log I find # of added symbols: 0 # of missing symbols: 9 # of undesignated symbols: 0 # of incompatible symbols: 9 9 missing symbols 0 _ZTIDf typeinfo for decimal32 version status: unversioned type: object type size: 8 status: subtracted [...] and a few more, all DFP related. They used to be emitted by g++ for __fundamental_type_info in libsupc++/fundamental_type_info.cc and lived in the CXXABI_1.3.4 version. However, since Solaris *does* lack DFP support, that's no longer the case. I'm uncertain how best to deal with this, however. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University