AC_CHECK_DECLS vs. Clang

Noah Misch <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <[email protected]>
The Clang compiler furnishes implicit declarations for built-in functions,
even when the identifier in question is not used as a function designator.
This thwarts AC_CHECK_DECLS:

configure:11565: checking whether strlcpy is declared
configure:11565: clang -c -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -g -O2  -D_GNU_SOURCE -I/usr/include/libxml2  conftest.c >&5
conftest.c:166:10: warning: implicitly declaring library function 'strlcpy' with type 'unsigned long (char *, const char *, unsigned long)'
  (void) strlcpy;
         ^
conftest.c:166:10: note: please include the header <string.h> or explicitly provide a declaration for 'strlcpy'
1 warning generated.
configure:11565: $? = 0
configure:11565: result: yes


Full config.log:
http://buildfarm.postgresql.org/cgi-bin/show_stage_log.pl?nm=treepie&dt=2015-03-07%2006%3A22%3A38&stg=config

Clang has always behaved this way, but strlcpy() and strlcat() were unaffected
until Clang 3.0 added them as builtins.  To fix this, I plan to introduce
ac_c_decl_warn_flag by analogy to ac_c_preproc_warn_flag.  With no explicit
declarations, a typical compiler (ac_c_decl_warn_flag='') reports an error for
"(void) strchr;".  Clang (ac_c_decl_warn_flag=yes) reports a warning, but
adding a declaration silences the warning.  A compiler that emits some warning
with or without a declaration is unusable.  Is that a reasonable plan?

Thanks,
nm
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.