From: guido Date: Wed, 10 Jul 2002 07:55:48 +0000 (+0000) Subject: workaround for gcc 3.1.0 bug X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a67c35d8caf68a73d01bb4674621881b557cd2f2;p=dealii-svn.git workaround for gcc 3.1.0 bug git-svn-id: https://svn.dealii.org/trunk@6239 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/source/legendre.cc b/deal.II/base/source/legendre.cc index 83bd1ee069..68926d5858 100644 --- a/deal.II/base/source/legendre.cc +++ b/deal.II/base/source/legendre.cc @@ -46,6 +46,13 @@ namespace }; +// See polynomial.cc for an expalanation of this + +#if ((__GNUC__ == 3) && (__GNUC_MINOR__ == 1)) +#define SHIFT_TYPE double +#else +#define SHIFT_TYPE long double +#endif template void @@ -97,9 +104,9 @@ Legendre::compute_coefficients (const unsigned int k_) c0 = new std::vector(*c0); c1 = new std::vector(*c1); - Polynomial::shift(*c0, (long double) -1.); + Polynomial::shift(*c0, (SHIFT_TYPE) -1.); Polynomial::scale(*c0, 2.); - Polynomial::shift(*c1, (long double) -1.); + Polynomial::shift(*c1, (SHIFT_TYPE) -1.); Polynomial::scale(*c1, 2.); Polynomial::multiply(*c1, std::sqrt(3.)); shifted_coefficients[0]=c0; @@ -141,7 +148,7 @@ Legendre::compute_coefficients (const unsigned int k_) // and compute the // coefficients for [0,1] ck = new std::vector(*ck); - shift(*ck,(long double) -1.); + shift(*ck,(SHIFT_TYPE) -1.); Polynomial::scale(*ck, 2.); Polynomial::multiply(*ck, std::sqrt(2.*k+1.)); shifted_coefficients[k] = ck; diff --git a/deal.II/base/source/polynomial.cc b/deal.II/base/source/polynomial.cc index 4ab8f8bc81..e4a26f0bda 100644 --- a/deal.II/base/source/polynomial.cc +++ b/deal.II/base/source/polynomial.cc @@ -464,7 +464,15 @@ template class Polynomial; template void Polynomial::shift(const float offset); template void Polynomial::shift(const double offset); -template void Polynomial::shift(const long double offset); template void Polynomial::shift(const double offset); -template void Polynomial::shift(const long double offset); template void Polynomial::shift(const long double offset); + +// gcc 3.1 crashes withan internal error when trying to instantiate +// these functions. + +#if ((__GNUC__ == 3) && (__GNUC_MINOR__ == 1)) +#warning Polynomial::shift with long double has been disabled in gcc 3.1 +#else +template void Polynomial::shift(const long double offset); +template void Polynomial::shift(const long double offset); +#endif