[mpich-discuss] [PATCH] config: change PAC_FUNC_NEEDS_DECL to check by assignment
Jed Brown
jedbrown at mcs.anl.gov
Sat May 18 13:24:20 CDT 2013
Pavan Balaji <balaji at mcs.anl.gov> writes:
> Eh? My point was that if AC_CHECK_DECLS is doing the same thing as
> PAC_FUNC_NEEDS_DECL, we might be able to discard that macro totally.
Fair enough, it appears to use the even simpler structure:
(void)the_symbol;
is perfectly adequate, but cannot be combined with a link test.
HWLOC_CHECK_DECL suffers from the same problem. I don't why
AC_CHECK_FUNCS appears to be calling HWLOC_CHECK_DECL, but that is the
only occurrence of this "int,long,int,long,..." string in either MPICH
or autoconf.
dnl HWLOC_CHECK_DECL
dnl
dnl Check declaration of given function by trying to call it with an insane
dnl number of arguments (10). Success means the compiler couldn't really check.
AC_DEFUN([_HWLOC_CHECK_DECL], [
AC_MSG_CHECKING([whether function $1 is declared])
AC_REQUIRE([AC_PROG_CC])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[AC_INCLUDES_DEFAULT([$4])
$1(int,long,int,long,int,long,int,long,int,long);],
[$1(1,2,3,4,5,6,7,8,9,10);])],
[AC_MSG_RESULT([no])
$3],
[AC_MSG_RESULT([yes])
$2]
)
])
## clang-3.2
configure:19533: checking for strncasecmp
configure:19533: clang -o conftest -O2 -I/home/jed/src/mpich/build-clang/src/mpl/include -I/home/jed/src/mpich/src/mpl/include -I/home/jed/src/mpich/src/openpa/src -I/
home/jed/src/mpich/build-clang/src/openpa/src -I/home/jed/src/mpich/build-clang/src/mpi/romio/include -lnsl conftest.c >&5
conftest.c:142:6: warning: incompatible redeclaration of library function 'strncasecmp'
char strncasecmp ();
^
conftest.c:142:6: note: 'strncasecmp' is a builtin with type 'int (const char *, const char *, unsigned long)'
1 warning generated.
configure:19533: $? = 0
configure:19533: result: yes
configure:19540: checking whether function strncasecmp is declared
configure:19555: clang -c -O2 -I/home/jed/src/mpich/build-clang/src/mpl/include -I/home/jed/src/mpich/src/mpl/include -I/home/jed/src/mpich/src/openpa/src -I/home/jed/src/mpich/build-clang/src/openpa/src -I/home/jed/src/mpich/build-clang/src/mpi/romio/include conftest.c >&5
conftest.c:153:2: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
strncasecmp(int,long,int,long,int,long,int,long,int,long);
^~~~~~~~~~~
conftest.c:153:2: warning: incompatible redeclaration of library function 'strncasecmp'
/usr/include/string.h:536:12: note: 'strncasecmp' is a builtin with type 'int (const char *, const char *, size_t)'
extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
^
2 warnings generated.
configure:19555: $? = 0
configure:19556: result: no
## gcc
configure:19536: checking for strncasecmp
configure:19536: gcc -o conftest -O2 -I/home/jed/src/mpich/build-gcc/src/mpl/include -I/home/jed/src/mpich/src/mpl/include -I/home/jed/src/mpich/src/openpa/src -I/home/jed/src/mpich/build-gcc/src/openpa/src -I/home/jed/src/mpich/build-gcc/src/mpi/romio/include -lnsl conftest.c >&5
conftest.c:142:6: warning: conflicting types for built-in function 'strncasecmp' [enabled by default]
char strncasecmp ();
^
configure:19536: $? = 0
configure:19536: result: yes
configure:19543: checking whether function strncasecmp is declared
configure:19558: gcc -c -O2 -I/home/jed/src/mpich/build-gcc/src/mpl/include -I/home/jed/src/mpich/src/mpl/include -I/home/jed/src/mpich/src/openpa/src -I/home/jed/src/mpich/build-gcc/src/openpa/src -I/home/jed/src/mpich/build-gcc/src/mpi/romio/include conftest.c >&5
conftest.c:153:2: warning: data definition has no type or storage class [enabled by default]
strncasecmp(int,long,int,long,int,long,int,long,int,long);
^
conftest.c:153:2: error: conflicting types for 'strncasecmp'
configure:19558: $? = 1
For the non-builtins, clang gives us the error we expect:
configure:20365: checking whether function sched_setaffinity is declared
configure:20384: clang -c -O2 -I/home/jed/src/mpich/build-clang/src/mpl/include -I/home/jed/src/mpich/src/mpl/include -I/home/jed/src/mpich/src/openpa/src -I/home/jed/
src/mpich/build-clang/src/openpa/src -I/home/jed/src/mpich/build-clang/src/mpi/romio/include conftest.c >&5
conftest.c:144:9: warning: '_GNU_SOURCE' macro redefined
#define _GNU_SOURCE
^
conftest.c:20:9: note: previous definition is here
#define _GNU_SOURCE 1
^
conftest.c:148:2: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
sched_setaffinity(int,long,int,long,int,long,int,long,int,long);
^~~~~~~~~~~~~~~~~
conftest.c:148:2: error: conflicting types for 'sched_setaffinity'
/usr/include/sched.h:117:12: note: previous declaration is here
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
^
conftest.c:152:25: error: too many arguments to function call, expected 3, have 10
sched_setaffinity(1,2,3,4,5,6,7,8,9,10);
~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~
/usr/include/sched.h:117:1: note: 'sched_setaffinity' declared here
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
^
2 warnings and 2 errors generated.
configure:20384: $? = 1
More information about the discuss
mailing list