http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52974
Bug #: 52974 Summary: Canonicalize include paths in diagnostics Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: r...@gcc.gnu.org CC: m...@gcc.gnu.org #include <algorithm> void f() { std::sort(1); } The diagnostics caused by misuse of the standard library are ridiculous: t.cc: In function 'void f()': t.cc:2:23: error: no matching function for call to 'sort(int)' t.cc:2:23: note: candidates are: In file included from /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/algorithm:63:0, from t.cc:1: /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/bits/stl_algo.h:5420:5: note: template<class _RAIter> void std::sort(_RAIter, _RAIter) /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/bits/stl_algo.h:5420:5: note: template argument deduction/substitution failed: t.cc:2:23: note: candidate expects 2 arguments, 1 provided In file included from /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/algorithm:63:0, from t.cc:1: /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/bits/stl_algo.h:5456:5: note: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare) /home/redi/gcc/4.x/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0/bits/stl_algo.h:5456:5: note: template argument deduction/substitution failed: t.cc:2:23: note: candidate expects 3 arguments, 1 provided Users don't care that the include path is $PREFIX/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/../../../../include/c++/4.8.0 The paths should be canonicalized using realpath(3) to simply /home/redi/gcc/4.x/include/c++/4.8.0/algorithm and /home/redi/gcc/4.x/include/c++/4.8.0/bits/stl_algo.h This probably isn't a good idea for user headers, as the include path they use with -I should be preserved so they recognise it, but for GCC's own C++ headers (and possibly all system headers?) it would be a huge improvement.