blob: 9bf49acb450e5671635facb3920b720b9285bbf8 [file] [log] [blame]
// { dg-do compile }
// { dg-options "-finline-small-functions -findirect-inlining -finline-functions -O" }
typedef struct
{} __mpf_struct;
typedef __mpf_struct mpf_t[1];
typedef const __mpf_struct *mpf_srcptr;
typedef __mpf_struct *mpf_ptr;
extern "C" {
void __gmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
}
class _knumber
{
public:
enum NumType {SpecialType, IntegerType, FractionType, FloatType};
virtual NumType type(void) const = 0;
virtual _knumber * add(_knumber const & arg2) const = 0;
virtual operator long int(void) const = 0;
};
class _knumfloat : public _knumber
{
_knumfloat(double num = 1.0)
;
virtual NumType type(void) const ;
virtual _knumber * add(_knumber const & arg2) const;
virtual operator long int (void) const;
mpf_t _mpf;
};
_knumber *_knumfloat::add(_knumber const & arg2) const
{
if (arg2.type() == SpecialType)
return arg2.add(*this);
{
_knumfloat tmp_num(arg2);
return tmp_num.add(*this);
}
_knumfloat * tmp_num = new _knumfloat();
__gmpf_add(tmp_num->_mpf, _mpf,
dynamic_cast<_knumfloat const &>(arg2)._mpf);
}