[critical libstdc++ regression]: Duplicate definitions with -On, n > 1

Andreas Jaeger aj@suse.de
Thu May 24 12:54:00 GMT 2001


Gabriel Dos Reis <gdr@codesourcery.com> writes:

> Gabriel Dos Reis <gdr@codesourcery.com> writes:
> 
> | Both GCC-3.0 and GCC-3.1 fail to translate the program below when
> 
> Fixed with this.

Thanks a lot for looking into this.  Is it really correct that glibc
should not define those macros?  In that case we could change glibc's
inline functions also.  Or is it this just a workaround for an even
bigger problem?

Can you tell me exactly which inline functions glibc is allowed to
declare in C++?  glibc has also a number of string inline functions.

Andreas

> -- Gaby
> 
> 2001-05-24  Gabriel Dos Reis  <gdr@codesourcery.com>
> 
> 	* include/bits/c++config (__NO_MATH_INLINES): New macro.
>  	* testsuite/26_numerics/fabs_inline.cc (main): New test.
> 
> Index: libstdc++-v3/include/bits/c++config
> ===================================================================
> RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/c++config,v
> retrieving revision 1.8.6.3
> diff -p -r1.8.6.3 c++config
> *** c++config	2001/05/18 07:29:32	1.8.6.3
> --- c++config	2001/05/24 18:33:12
> ***************
> *** 33,38 ****
> --- 33,43 ----
>   // Pick up any OS-specific definitions.
>   #include <bits/os_defines.h>
>   
> + // Tell Glibc not to try to provide its own inline versions of
> + // some math functions.  Those cause assembly-time clashes with
> + // our definitions.
> + #define __NO_MATH_INLINES
> + 
>   // The current version of the C++ library in compressed ISO date format.
>   #define __GLIBCPP__ 20010517
>   
> Index: libstdc++-v3/testsuite/26_numerics/fabs_inline.cc
> ===================================================================
> RCS file: fabs_inline.cc
> diff -N fabs_inline.cc
> *** /dev/null	Tue May  5 13:32:27 1998
> --- fabs_inline.cc	Thu May 24 11:33:12 2001
> ***************
> *** 0 ****
> --- 1,37 ----
> + // Copyright (C) 1999 Free Software Foundation, Inc.
> + //
> + // This file is part of the GNU ISO C++ Library.  This library is free
> + // software; you can redistribute it and/or modify it under the
> + // terms of the GNU General Public License as published by the
> + // Free Software Foundation; either version 2, or (at your option)
> + // any later version.
> + 
> + // This library is distributed in the hope that it will be useful,
> + // but WITHOUT ANY WARRANTY; without even the implied warranty of
> + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + // GNU General Public License for more details.
> + 
> + // You should have received a copy of the GNU General Public License along
> + // with this library; see the file COPYING.  If not, write to the Free
> + // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> + // USA.
> + 
> + // Test to see whether the host provides its own (inline) view of fabs.
> + // Origin: Kurt Garloff <kurt@garloff.de>, 2001-05-24
> + // dg-do link
> + 
> + #include <cmath>
> + #include <cstdio>
> + 
> + typedef double (*realfn) (double);
> + 
> + using std::fabs;
> + 
> + int main ()
> + {
> +   double a = fabs (-2.4);
> +   realfn myfn = fabs;
> +   double b = myfn (-2.5);
> +   printf ("%f, %f, %p\n", a, b, myfn);
> +   return 0;
> + }
> 

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj



More information about the Gcc-patches mailing list