#791418 Compilation error for code including random, algorithm or limits.h

Package:
iwyu
Source:
iwyu
Description:
Analyze #includes in C and C++ source files
Submitter:
Rafael Stahl
Date:
2015-07-04 14:09:06 UTC
Severity:
normal
#791418#5
Date:
2015-07-04 14:06:38 UTC
From:
To:
Hello,

this bug is reported to debian, because it looks like a packaging issue
rather than a bug in iwyu itself.

When trying to compile a file containing the following headers iwyu
fails to compile the file:
- <random> introduced in C++11
- <algorithm> only in C++11 mode because it includes <random> there
- <limits.h>

GCC and clang are working fine on this system.

Rafael Stahl
--------------------------------------------------------------------------


Full output:

user1@debj:~/include-what-you-use$ cat main.cpp
#include <random>
int main() {}
user1@debj:~/include-what-you-use$ gcc -std=c++11 main.cpp
user1@debj:~/include-what-you-use$ clang -std=c++11 main.cpp
user1@debj:~/include-what-you-use$ iwyu -v --std=c++11 main.cpp
Debian clang version 3.4-2 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.2
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
clang invocation:
  "/usr/bin/include-what-you-use" "-cc1" "-triple" "x86_64-pc-linux-gnu"
"-fsyntax-only" "-disable-free" "-disable-llvm-verifier"
"-main-file-name" "main.cpp" "-mrelocation-model" "static"
"-mdisable-fp-elim" "-fmath-errno" "-masm-verbose"
"-mconstructor-aliases" "-munwind-tables" "-fuse-init-array"
"-target-cpu" "x86-64" "-target-linker-version" "2.24" "-v"
"-resource-dir" "/usr/bin/../lib/clang/3.4" "-internal-isystem"
"/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9"
"-internal-isystem"
"/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/x86_64-linux-gnu"
"-internal-isystem"
"/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/backward"
"-internal-isystem"
"/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9"
"-internal-isystem" "/usr/local/include" "-internal-isystem"
"/usr/bin/../lib/clang/3.4/include" "-internal-externc-isystem"
"/usr/lib/gcc/x86_64-linux-gnu/4.9/include" "-internal-externc-isystem"
"/usr/include/x86_64-linux-gnu" "-internal-externc-isystem" "/include"
"-internal-externc-isystem" "/usr/include" "--std=c++11"
"-fdeprecated-macro" "-fdebug-compilation-dir"
"/home/user1/include-what-you-use" "-ferror-limit" "19"
"-fmessage-length" "100" "-mstackrealign" "-fobjc-runtime=gcc"
"-fcxx-exceptions" "-fexceptions" "-fdiagnostics-show-option"
"-fcolor-diagnostics" "-vectorize-slp" "-x" "c++" "main.cpp"

clang -cc1 version 3.4 based upon LLVM 3.4 default target
x86_64-pc-linux-gnu
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/clang/3.4/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
  /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9
  /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/backward
  /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9
  /usr/local/include
  /usr/lib/gcc/x86_64-linux-gnu/4.9/include
  /usr/include/x86_64-linux-gnu
  /usr/include
End of search list.
In file included from main.cpp:1:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/random:50:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9/bits/opt_random.h:33:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:27:
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:41:10: error: use
of undeclared identifier
       '__builtin_ia32_bsrsi'
   return __builtin_ia32_bsrsi (__X);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:98:10: error: use
of undeclared identifier
       '__builtin_ia32_rdpmc'
   return __builtin_ia32_rdpmc (__S);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:106:10: error:
use of undeclared identifier
       '__builtin_ia32_rdtsc'
   return __builtin_ia32_rdtsc ();
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:114:10: error:
use of undeclared identifier
       '__builtin_ia32_rdtscp'
   return __builtin_ia32_rdtscp (__A);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:122:10: error:
use of undeclared identifier
       '__builtin_ia32_rolqi'
   return __builtin_ia32_rolqi (__X, __C);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:130:10: error:
use of undeclared identifier
       '__builtin_ia32_rolhi'
   return __builtin_ia32_rolhi (__X, __C);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:146:10: error:
use of undeclared identifier
       '__builtin_ia32_rorqi'
   return __builtin_ia32_rorqi (__X, __C);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:154:10: error:
use of undeclared identifier
       '__builtin_ia32_rorhi'; did you mean '__builtin_ia32_por'?
   return __builtin_ia32_rorhi (__X, __C);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:41:10: note:
'__builtin_ia32_por' declared
       here
   return __builtin_ia32_bsrsi (__X);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:154:32: error:
cannot initialize a parameter
       of type '__attribute__((__vector_size__(1 * sizeof(long long))))
long long' with an lvalue of
       type 'unsigned short'
   return __builtin_ia32_rorhi (__X, __C);
                                ^~~
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:170:3: error: use
of undeclared identifier
       '__builtin_ia32_pause'
   __builtin_ia32_pause ();
   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:187:10: error:
use of undeclared identifier
       '__builtin_ia32_bsrdi'
   return __builtin_ia32_bsrdi (__X);
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:246:10: error:
use of undeclared identifier
       '__builtin_ia32_readeflags_u64'
   return __builtin_ia32_readeflags_u64 ();
          ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:254:3: error: use
of undeclared identifier
       '__builtin_ia32_writeeflags_u64'
   __builtin_ia32_writeeflags_u64 (X);
   ^
In file included from main.cpp:1:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/random:50:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9/bits/opt_random.h:33:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:31:
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:127:19: error: use
of undeclared identifier
       '__builtin_ia32_addss'
   return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:133:19: error: use
of undeclared identifier
       '__builtin_ia32_subss'
   return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:139:19: error: use
of undeclared identifier
       '__builtin_ia32_mulss'
   return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:145:19: error: use
of undeclared identifier
       '__builtin_ia32_divss'; did you mean '__builtin_ia32_minss'?
   return (__m128) __builtin_ia32_divss ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/ia32intrin.h:41:10: note:
'__builtin_ia32_minss' declared
       here
   return __builtin_ia32_bsrsi (__X);
          ^
In file included from main.cpp:1:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/random:50:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9/bits/opt_random.h:33:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:31:
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:183:19: error: use
of undeclared identifier
       '__builtin_ia32_addps'; did you mean '__builtin_ia32_haddps'?
   return (__m128) __builtin_ia32_addps ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:127:19: note:
'__builtin_ia32_haddps' declared
       here
   return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:189:19: error: use
of undeclared identifier
       '__builtin_ia32_subps'; did you mean '__builtin_ia32_hsubps'?
   return (__m128) __builtin_ia32_subps ((__v4sf)__A, (__v4sf)__B);
                   ^
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:133:19: note:
'__builtin_ia32_hsubps' declared
       here
   return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B);
                   ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

main.cpp should add these lines:

main.cpp should remove these lines:
- #include <random>  // lines 1-1

The full include-list for main.cpp:
---
-------------------------------------------------------------------------- With limits.h: user1@debj:~/include-what-you-use$ cat main.cpp #include <limits.h> int main() {} user1@debj:~/include-what-you-use$ iwyu main.cpp In file included from main.cpp:1: /usr/include/limits.h:123:16: fatal error: 'limits.h' file not found # include_next <limits.h> ^ main.cpp should add these lines: main.cpp should remove these lines: - #include <limits.h> // lines 1-1 The full include-list for main.cpp: ---
-------------------------------------------------------------------------- System Information: Debian 8.1 amd64 user1@debj:~/include-what-you-use$ gcc --version gcc (Debian 4.9.2-10) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. user1@debj:~/include-what-you-use$ clang --version Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0) Target: x86_64-pc-linux-gnu Thread model: posix