Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Aug 2005 20:53:23 -0400
From:      Craig Rodrigues <rodrigc@crodrigues.org>
To:        freebsd-arch@freebsd.org
Subject:   [RFC] -Wredundant-decls: keep it or remove it?
Message-ID:  <20050810005323.GA42721@crodrigues.org>

next in thread | raw e-mail | index | archive | help
Hi,

In recent days, while trying to get the kernel in shape to
compile with GCC 4.0, I encountered some examples such as the
following in net/rtsock.c:

extern struct domain routedomain;               /* or at least forward */

static struct protosw routesw[] = {
{ SOCK_RAW,     &routedomain,   0,              PR_ATOMIC|PR_ADDR,
  0,            route_output,   raw_ctlinput,   0,
  0,
  raw_init,     0,              0,              0,
  &route_usrreqs
}
};

static struct domain routedomain =
    { PF_ROUTE, "route", 0, 0, 0,
      routesw, &routesw[sizeof(routesw)/sizeof(routesw[0])] };





It is illegal in ISO C to declare a struct as extern (implying external linkage)
, and then declare it as static (implying internal linkage).

I have two options to fix this.

OPTION 1:

Change routedomain to not be static:

extern struct domain routedomain;

....
struct domain routedomain = { ...... }




OPTION 2:

Forward declare routedomain as static, but remove -Wredundant-decls
from kernel makefiles:

static struct domain routedomain;

....
static struct domain routedomain = {  ..... }


For OPTION 2, it is necessary to remove -Wredundant-decls
because you will get a new compiler warning:

warning: redundant redeclaration of 'routedomain'
warnig: previous declaration was here ...


To fix this problem, is it better to go with OPTION 1
or OPTION 2?  I am a bit hesitant to remove -Wredundant-decls
from the kernel Makefiles, because it has been there for a long time.
Are there cases where the warnings are useful?

It seems to warn against legitimate C code in
the GCC documentation:

`-Wredundant-decls'
     Warn if anything is declared more than once in the same scope,
     even in cases where multiple declaration is valid and changes
     nothing.

Any feedback would be appreciated.

-- 
Craig Rodrigues        
rodrigc@crodrigues.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050810005323.GA42721>