Bug 205251 - <rpc/clnt.h> and rpc_createerr macro
Summary: <rpc/clnt.h> and rpc_createerr macro
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 10.2-RELEASE
Hardware: i386 Any
: --- Affects Many People
Assignee: freebsd-bugs (Nobody)
Depends on:
Reported: 2015-12-11 20:33 UTC by Jerry Heyman
Modified: 2015-12-11 22:47 UTC (History)
1 user (show)

See Also:


Note You need to log in before you can comment on or make changes to this bug.
Description Jerry Heyman 2015-12-11 20:33:51 UTC
I've just installed FreeBSD 10.2 in order to determine the portability of my companies code.  Built gcc4.6 out of the ports/lang area, but see the same issue using /usr/bin/cc (clang 3.4.1).

in /usr/include/rpc/clnt.h the following snippet:

* If a creation fails, the following allows the user to figure out why.
struct rpc_createerr {
        enum clnt_stat cf_stat;
        struct rpc_err cf_error;  /* userful when cf_stat == RPC_PMAPFAILURE */ };

extern struct rpc_createerr    *__rpc_createeer(void); __END_DECLS #define rpc_createerr          (*(__rpc_createeerr()))

Note that the #define becomes active once the file is included, and in my source code I have multiple

   struct rpc_createerr *ce;

declarations.  Both cc and gcc cite this as an error, though for different reasons.

gcc complains that a '(' is found where a '{' is expected.
The cc error message is 'error: declaration of anyonymous struct must be a definition'.

My other ports - Linux, AIX, Solaris, Mac OSX, do not have the #define in /usr/include/rpc/clnt.h.
The HP-UX does, but it is encapsulated within a #ifdef _REENTRANT / #endif block.

Is this an actual error, or is there something on FreeBSD that I need to do that is different than the other platforms?
Comment 1 Enji Cooper freebsd_committer 2015-12-11 22:47:05 UTC
Hi Jerry: could you please attach a sample rpc client so I can verify it (I feel free to email me internally via coopeg3@emc.com/gcooper@isilon.com if it's sensitive material).