[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#278310: g++-3.3: external linkage of functions declared in an anonymous namespace



Package: g++-3.3
Version: 1:3.3.5-2
Severity: normal

Here are 3 functions and a dummy main:

--begin--
int one() { return 1; }

static int two() { return 2; }

namespace
{
  int three() { return 3; }
}

int main()
{
  return one() + two() + three();
}
--end--

i was expecting that g++ handled two() and three() the same way, that
is to say generated object-code with internal linkage.
 
But g++ doesn't. three() has external linkage, just like one(). TCPPPL
says that an anonymous namespace is a namespace with a unique
name. Fine. Then why g++ does not optimize this ?  The previous
program returns 6. g++ outputs a definition for three(), but it is
obvious that two() and three() definitions are no longer needed
because they've been inlined. That's why g++ doesn't output a
definition for two(). In the end, i get a never-used definition of
three() ...

Thanks

-- System Information:
Debian Release: 3.1
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: powerpc (ppc)
Kernel: Linux 2.6.8-powerpc
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to fr_FR.UTF-8)

Versions of packages g++-3.3 depends on:
ii  gcc-3.3                     1:3.3.5-2    The GNU C compiler
ii  gcc-3.3-base                1:3.3.5-2    The GNU Compiler Collection (base 
ii  libc6                       2.3.2.ds1-18 GNU C Library: Shared libraries an
ii  libstdc++5-3.3-dev          1:3.3.5-2    The GNU Standard C++ Library v3 (d

-- no debconf information



Reply to: