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

            Bug ID: 66696
           Summary: confusing diagnostic on a friend main definition
                    returning void
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

When main is defined with the wrong return type, GCC issues a clear message
pointing out the error:

$ cat u.c && ~/bin/gcc-5.1.0/bin/g++ -c -fno-diagnostics-show-caret -o/dev/null
u.c
void main (void) { }

u.c:1:16: error: ‘::main’ must return ‘int’

But when main is defined to return void as a friend function of a class GCC
issues the following cryptic error message.  In addition, in this case GCC
makes it possible to demote the error to a warning via -fpermissive.

GCC should treat these cases the same way (as Clang does).

$ cat u.c && ~/bin/gcc-5.1.0/bin/g++ -c -o/dev/null u.cstruct S {
    friend void main (void) { }
};

u.c: In function ‘void main()’:
u.c:2:31: error: return-statement with a value, in function returning 'void'
[-fpermissive]
     friend void main (void) { }
                               ^

Reply via email to