[cfe-dev] Function declaration not seen

Andrea D'Amore and.damore at macports.org
Mon Mar 31 14:03:44 PDT 2014


Hello,
I'm building neovim [1] on OS X 10.9.2 using clang from XCode 5.1, the
--version output is:
  > clang --version
  Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
  Target: x86_64-apple-darwin13.1.0
  Thread model: posix

When building the repo at the specific revision in [2] I'm getting the
following error when makefile tries to compile src/os/input.c:

### START OF PASTE
[ 95%] Building C object src/CMakeFiles/nvim.dir/os/input.c.o
cd /tmp/neovim-git/build/src && /usr/bin/cc  -DHAVE_CONFIG_H -g
-I/opt/local/include -I/tmp/neovim-git/.deps/usr/include
-I/tmp/neovim-git/.deps/usr/include/luajit-2.0
-I/tmp/neovim-git/build/config -I/tmp/neovim-git/src
-I/tmp/neovim-git/src/proto    -Werror -Wall -Wextra -pedantic
-Wno-unused-parameter -std=gnu99 -o CMakeFiles/nvim.dir/os/input.c.o
-c /tmp/neovim-git/src/os/input.c
/tmp/neovim-git/src/os/input.c:194:3: error: implicit declaration of
function 'settmode' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
  settmode(TMODE_COOK);
  ^
/tmp/neovim-git/src/os/input.c:194:3: note: did you mean 'setmode'?
/usr/include/unistd.h:695:7: note: 'setmode' declared here
void    *setmode(const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6,
__IPHONE_2_0, __DARWIN_ALIAS(setmode));
         ^
1 error generated.
make[3]: *** [src/CMakeFiles/nvim.dir/os/input.c.o] Error 1
make[2]: *** [src/CMakeFiles/nvim.dir/all] Error 2
make[1]: *** [all] Error 2
make: *** [nvim] Error 2
### END OF PASTE


Function   void setterm(int)   is correctly declared in src/term.h and
defined in src/term.c, also input.c is including src/term.h but if
-I/opt/local/include comes before -I/tmp/neovim-git/src clang cannot
see the setterm() declaration at all, also it suggest that it may be a
typo for seterm() in unistd.h instead.

If I move  -I/opt/local/include   after   -I/tmp/neovim-git/src   then
input.c source file is correctly compiled.

Is it correct for clang to not check in directories specified with
following -I args for an exact match for the function prototype?
Is the likeness of   seterm()   name tricking clang?


Best regards

[1] http://neovim.org/
[2] https://github.com/neovim/neovim/tree/54782ecf

-- 
Andrea



More information about the cfe-dev mailing list