Closed GoogleCodeExporter closed 9 years ago
Maybe it's a missing #include? It works for me, strangely. Maybe the
#includes in ToT clang got updated, and broke us. If you can figure it out,
feel free to send a patch.
Original comment by csilv...@gmail.com
on 26 Mar 2011 at 1:40
Ubuntu 10.10 64bit, llvm 128333 vs iwyu 86:
llvm[0]: Compiling iwyu_driver.cc for Debug+Asserts build
iwyu_driver.cc: In function ‘clang::CompilerInstance*
CreateCompilerInstance(int, const char**)’:
iwyu_driver.cc:161: error: no matching function for call to
‘clang::driver::Driver::BuildCompilation(size_t, const char**)’
/[..]/workspaces/llvm/tools/clang/tools/include-what-you-use-read-only/../../inc
lude/clang/Driver/Driver.h:219: note: candidates are:
clang::driver::Compilation*
clang::driver::Driver::BuildCompilation(llvm::ArrayRef<const char*>)
/bin/rm: cannot remove
`/[..]/workspaces/llvm/tools/clang/tools/include-what-you-use-read-only/Debug+As
serts/iwyu_driver.d.tmp': No such file or directory
make: ***
[/[..]/workspaces/llvm/tools/clang/tools/include-what-you-use-read-only/Debug+As
serts/iwyu_driver.o] Error 1
Original comment by daniel.v...@googlemail.com
on 26 Mar 2011 at 10:10
It looks like comment #3 is a separate issue, at issue 24.
Original comment by csilv...@gmail.com
on 26 Mar 2011 at 8:05
I started investigating the compile errors.
The first one (shown in the bug description) is because NestedNameSpecifierLoc
is undefined in iwyu_location_util.h:186:
(clang::SourceLocation GetLocation(const clang::NestedNameSpecifierLoc*
nnsloc);).
According to the internet it should be defined in
llvm/tools/clang/include/clang/AST/NestedNameSpecifier.h which is already
present as include directive in iwyu_location_util.h
However in llvm/tools/clang/include/clang/AST/NestedNameSpecifier.h
NestedNameSpecifierLoc is missing, only NestedNameSpecifier is defined.
I could think of 2 possible reasons :
1) iwyu r86 is not using llvm and clang r124350 as specified in a comment in
the Makefile but a different revision.
2)perhaps llvm and clang need to be given some configure/build options. I used
configure/make without any options.
Please advise.
Original comment by emarin...@gmail.com
on 28 Mar 2011 at 8:53
Ah, it's totally #1. The Makefile is wrong -- usually iwyu is working against
Top-of-tree. I should be updating the Makefile every time I submit but don't.
:-(
I think the best thing to do is to just remove the comment in the Makefile, and
say that you should sync to top-of-tree instead. Or maybe there's a way to
insert the current clang revision number in the Makefile automatically whenever
anyone commits a change to iwyu? Seems hard. Probably we should just tell
people to try to build from top-of-tree clang instead.
Original comment by csilv...@gmail.com
on 28 Mar 2011 at 9:10
Thanks, updating llvm and clang to top-of-tree right now.
Original comment by emarin...@gmail.com
on 28 Mar 2011 at 9:13
I'll update the Makefile instructions to be more robust.
Original comment by csilv...@gmail.com
on 28 Mar 2011 at 9:44
With the latest llvm/clang I am getting the compile error in comment 2:
llvm/tools/clang/tools/include-what-you-use/iwyu_driver.cc: In function
‘clang::CompilerInstance* CreateCompilerInstance(int, const char**)’:
llvm/tools/clang/tools/include-what-you-use/iwyu_driver.cc:161: error: no
matching function for call to
‘clang::driver::Driver::BuildCompilation(size_t, const char**)’
llvm-r124350/tools/clang/tools/include-what-you-use/../../include/clang/Driver/D
river.h:219: note: candidates are: clang::driver::Compilation*
clang::driver::Driver::BuildCompilation(llvm::ArrayRef<const char*>)
I guess it would be a good idea to have a doc that specifies something like
"iwyu revision XXX uses llvm/clang revision YYY".
If you type svn info in your llvm directory what revision does it say?
Original comment by emarin...@gmail.com
on 28 Mar 2011 at 10:42
Have you updated include-what-you-use as well? I checked in a fix to the above
problem yesterday.
Original comment by csilv...@gmail.com
on 28 Mar 2011 at 11:34
It looks like llvm/clang r128142 dated March 23 causes comment 8:
- Compilation *BuildCompilation(int argc, const char **argv);
+ Compilation *BuildCompilation(llvm::ArrayRef<const char *> Args);
I will try to update llvm/clang to r128141 to see if iwyu compiles.
Original comment by emarin...@gmail.com
on 28 Mar 2011 at 11:37
Sorry, I did not see comment 9 in time. I will update iwyu and try again.
Thanks!
Original comment by emarin...@gmail.com
on 28 Mar 2011 at 11:39
This is what I'm getting with revision 128142:
third_party/llvm/tools/clang/tools/include-what-you-use/iwyu_driver.cc: In
function ‘clang::CompilerInstance*
include_what_you_use::CreateCompilerInstance(int, const char**)’:
third_party/llvm/tools/clang/tools/include-what-you-use/iwyu_driver.cc:163:
error: no matching function for call to
‘clang::driver::Driver::BuildCompilation(llvm::SmallVector<const char*,
256u>&)’
third_party/llvm/tools/clang/tools/include-what-you-use/../../include/clang/Driv
er/Driver.h:218: note: candidates are: clang::driver::Compilation*
clang::driver::Driver::BuildCompilation(int, const char**)
I hope this can be fixed soon :)
Original comment by tfar...@chromium.org
on 29 Mar 2011 at 4:18
I am happy to report llvm/clang r128427 + iwyu r96 compiles :)
I have a usage question- is there as suppression file that iwyu uses? I would
like to suppress some errors in c++ standard header files. Or better yet - is
it possible to enable only messages about unused header files?
I am also working on bypassing this configure message in my project:
checking whether the C++ compiler (include-what-you-use ) works... no
Thanks!
Original comment by emarin...@gmail.com
on 29 Mar 2011 at 6:13
Glad to hear it's compiling. :-)
There's no suppression file, but iwyu does not report violations on most files
by default. It only reports on the .cc file you compile and its 'associated'
.h files. Ar eyou seeing something different? What is the exact command
you're running, and the output you're seeing that you want to suppress?
Original comment by csilv...@gmail.com
on 29 Mar 2011 at 6:22
These are errors I would like to suppress:
1. In c++ headers:
/usr/include/c++/4.1.2/x86_64-redhat-linux/bits/gthr-default.h:100:1: error:
weakref declaration must have internal linkage
__gthrw(pthread_once)
/usr/include/c++/4.1.2/x86_64-redhat-linux/bits/gthr-default.h:101:1: error:
weakref declaration must have internal linkage
__gthrw(pthread_getspecific)
2. In project files:
struct 'TimeSpec' was previously declared as a class [-Werror,-Wmismatched-tags]
struct TimeSpec ts;
^~~~~~
class
error: dependent using declaration resolved to type without 'typename'
I have got one more unrelated issue.
Running make -k CXX=include-what-you-use
invokes configure. For c++ autconf has this macro AC_PROG_CXX
It will check if the c++ compiler works. iwyu is failing with this messages:
checking for c++.. include-what-you-use
checking whether the C++ compiler (include-what-you-use ) works... no
configure: error: installation or configuration problem: C++ compiler cannot
create executables.
From config.log I can see it is failing with this:
configure:1239: include-what-you-use -o conftest conftest.C 1>&5
At the moment I dont have a proposed solution - still thinking about it. Should
I file it as a separate issue?
Original comment by emarin...@gmail.com
on 29 Mar 2011 at 8:14
These are clang warnings, not iwyu warnings. You'll have to bring this up with
the clang folks.
As for your configure script, it is acting exactly correctly.
include-what-you-use is a static anlaysis tool, not a compiler. It will not
create executables. You can follow the instructions here on how to run iwyu:
http://code.google.com/p/include-what-you-use/wiki/InstructionsForUsers
Original comment by csilv...@gmail.com
on 29 Mar 2011 at 8:35
Comment 7 addressed in r97.
Original comment by csilv...@gmail.com
on 6 Apr 2011 at 8:16
Original issue reported on code.google.com by
emarin...@gmail.com
on 25 Mar 2011 at 11:59