public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/51757] New: friend defined inside class and declared inside main linker error
@ 2012-01-04 22:38 neotheone222 at gmail dot com
  2012-01-05  1:34 ` [Bug c++/51757] " redi at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: neotheone222 at gmail dot com @ 2012-01-04 22:38 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

             Bug #: 51757
           Summary: friend defined inside class and declared inside main
                    linker error
    Classification: Unclassified
           Product: gcc
           Version: 4.5.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: neotheone222@gmail.com


--------------------------------------------------------------------------------
gcc -v:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.5 --enable-shared --enable-multiarch
--with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu
--enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default
--with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686
--with-tune=generic --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 

gcc command: g++ 1.cpp

gcc output: 

/tmp/cc9Q9mFy.o: In function `main':
1.cpp:(.text+0x5): undefined reference to `func()'
collect2: ld returned 1 exit status

--------------------------------------------------------------------------------

Here is the program that fails to link:

                                //1.cpp
#include <iostream>

class A
{
  public:
    friend void
    func()
    {
      std::cout << "Called" << std::endl;
    }
};

int
main()
{
  void
  func();

  func();   //linker error undefined reference to `func()'

  return 0;
}


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
@ 2012-01-05  1:34 ` redi at gcc dot gnu.org
  2012-01-05  9:39 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2012-01-05  1:34 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-01-05 01:34:21 UTC ---
Curious. It still fails even if there is a declaration of func at namespace
scope.

It works with -fkeep-inline-functions


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
  2012-01-05  1:34 ` [Bug c++/51757] " redi at gcc dot gnu.org
@ 2012-01-05  9:39 ` rguenth at gcc dot gnu.org
  2012-01-05 10:36 ` redi at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-01-05  9:39 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-05 09:39:28 UTC ---
Hm?  How should it _not_ fail to link?  You declare void func() inside
main which puts it in ::, but there is no definition.  Obviously
A::func() is not found by lookup - why should it?


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
  2012-01-05  1:34 ` [Bug c++/51757] " redi at gcc dot gnu.org
  2012-01-05  9:39 ` rguenth at gcc dot gnu.org
@ 2012-01-05 10:36 ` redi at gcc dot gnu.org
  2012-01-05 10:43 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2012-01-05 10:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
   Last reconfirmed|                            |2012-01-05
         Resolution|INVALID                     |
     Ever Confirmed|0                           |1

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-01-05 10:35:56 UTC ---
There is no A::func, that's a friend not a member function. 

[class.friend]

-6-  A function can be defined in a friend declaration of a class if and only
if the class is a non-local class (9.8), the function name is unqualified, and
the function has namespace scope. [ Example:
class M {
  friend void f() { } // definition of global f, a friend of M,
                      // not the definition of a member function
};
—end example ]
-7- Such a function is implicitly inline. A friend function defined in a class
is in the (lexical) scope of the class in which it is defined. A friend
function defined outside the class is not (3.4.1).


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
                   ` (2 preceding siblings ...)
  2012-01-05 10:36 ` redi at gcc dot gnu.org
@ 2012-01-05 10:43 ` redi at gcc dot gnu.org
  2021-01-18 19:23 ` language.lawyer at gmail dot com
  2024-04-06  3:45 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2012-01-05 10:43 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-01-05 10:42:56 UTC ---
Also, if there's no definition, why would it link when -fkeep-inline-functions
is used?  My guess would be that the call in main doesn't mark the inline
function as used, so it is not emitted.

For the record, Solaris CC fails in the same way, it links OK with clang++


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
                   ` (3 preceding siblings ...)
  2012-01-05 10:43 ` redi at gcc dot gnu.org
@ 2021-01-18 19:23 ` language.lawyer at gmail dot com
  2024-04-06  3:45 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: language.lawyer at gmail dot com @ 2021-01-18 19:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

Language Lawyer <language.lawyer at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |language.lawyer at gmail dot com

--- Comment #6 from Language Lawyer <language.lawyer at gmail dot com> ---
No linker error in GCC 11.0.0 20210117 (experimental)
https://wandbox.org/permlink/EXabQxhTzbDzvbvr

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug c++/51757] friend defined inside class and declared inside main linker error
  2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
                   ` (4 preceding siblings ...)
  2021-01-18 19:23 ` language.lawyer at gmail dot com
@ 2024-04-06  3:45 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-04-06  3:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51757

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |11.0
         Resolution|---                         |FIXED
             Status|REOPENED                    |RESOLVED

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Fixed by r11-3699-g4e62aca0e0520e4e .

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-04-06  3:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-04 22:38 [Bug c++/51757] New: friend defined inside class and declared inside main linker error neotheone222 at gmail dot com
2012-01-05  1:34 ` [Bug c++/51757] " redi at gcc dot gnu.org
2012-01-05  9:39 ` rguenth at gcc dot gnu.org
2012-01-05 10:36 ` redi at gcc dot gnu.org
2012-01-05 10:43 ` redi at gcc dot gnu.org
2021-01-18 19:23 ` language.lawyer at gmail dot com
2024-04-06  3:45 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).