[cfe-dev] Tool oddity

Sean Silva chisophugis at gmail.com
Thu Mar 26 14:48:05 PDT 2015


Yeah, looks like the resource dir issue isn't it (btw you can pass the
-resource-dir option instead of -I in order to precisely match the
behavior, but -I is usually enough).

The problem appears to be due to __gnu_cxx::__numeric_traits_integer being
instantiated with a floating point type... can you look at that code path
to see how it is getting there? Maybe it is relying on a particular
compiler intrinsic that clang is not treating the same as GCC (or doesn't
support?)?

-- Sean Silva

On Thu, Mar 26, 2015 at 11:45 AM, Peter Stirling <peter at pjstirling.plus.com>
wrote:

>  Some tests that I've done:
>
> First to investigate what is said by -v:
>
> [peter at fred llvm]$ which clang++
> ~/Programming/unix-built/clang/bin/clang++
> [peter at fred llvm]$ clang++ -v
> clang version 3.7.0 (trunk 233281)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.9.2
> Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.9.2
> Candidate multilib: .;@m64
> Candidate multilib: 32;@m32
> Selected multilib: .;@m64
>
> [peter at fred llvm]$ which quaff
> ~/Programming/unix-built/clang/bin/quaff
> [peter at fred llvm]$ quaff -- -v
> clang version 3.7.0 (trunk 233281)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> Found candidate GCC installation: /../lib/gcc/x86_64-redhat-linux/4.9.2
> Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.9.2
> Selected GCC installation: /../lib/gcc/x86_64-redhat-linux/4.9.2
> Candidate multilib: .;@m64
> Candidate multilib: 32;@m32
> Selected multilib: .;@m64
>
> /lib is a symlink to /usr/lib, so there is really only one installation,
> but I'm not sure why they don't use the same list, either both should have
> one candidate, or both should have two.
>
>
> I then tried (with only failure to show for it) a bunch of combinations of
> -isystem, and -I for the directory
>
> /home/peter/Programming/unix-built/clang/lib/clang/3.7.0/include/
>
> Which should be the right path for the builtin includes, since I use the
> install prefix
>
> /home/peter/Programming/unix-built/clang/
>
>  (The contents certainly looks right)
>
> Any further suggestions?
>
>
> On 26/03/15 01:53, Sean Silva wrote:
>
> Although the errors don't look like it, could it be something like:
> http://clang.llvm.org/docs/FAQ.html#i-get-errors-about-some-headers-being-missing-stddef-h-stdarg-h ?
>
>
>
>  -- Sean Silva
>
> On Wed, Mar 25, 2015 at 6:37 PM, Peter Stirling <peter at pjstirling.plus.com
> > wrote:
>
>>  It doesn't, unfortunately (I had subsequently figured out where it was
>> creeping in from).
>>
>>
>> On 26/03/15 01:27, Sean Silva wrote:
>>
>> Does the error go away with '-fcolor-diagnostics' instead of
>> '-fcolor-diagnosticsoo'? If it does, then maybe '-fcolor-diagnosticsoo'
>> is generating an error that is not being handled correctly in the tool.
>>
>>  -- Sean Silva
>>
>> On Wed, Mar 25, 2015 at 10:32 AM, Peter Stirling <
>> peter at pjstirling.plus.com> wrote:
>>
>>> Hi,
>>>
>>> I'm seeing some odd behaviour that I hope someone can suggest a solution
>>> for:
>>>
>>> Recently, when I run my tool on my test file I get errors that I don't
>>> get if I run clang++ with equivalent options -
>>>
>>>
>>> In file included from
>>> /home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/dummy.cc:6:
>>> In file included from /usr/include/taglib/taglib.h:47:
>>> In file included from
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/string:40:
>>> In file included from
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/bits/char_traits.h:39:
>>> In file included from
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/bits/stl_algobase.h:63:
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:58:35:
>>> error: invalid operands to binary expression ('float' and 'unsigned long')
>>>       static const _Value __min = __glibcxx_min(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:48:35:
>>> note: expanded from macro '__glibcxx_min'
>>>   (__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0)
>>>                            ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:55:12:
>>> note: in instantiation of template class
>>> '__gnu_cxx::__numeric_traits_integer<float>' requested here
>>>     struct __numeric_traits_integer
>>>            ^
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:59:35:
>>> error: invalid operands to binary expression ('float' and 'unsigned long')
>>>       static const _Value __max = __glibcxx_max(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:52:15:
>>> note: expanded from macro '__glibcxx_max'
>>>    (((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0)
>>>        ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:58:35:
>>> error: invalid operands to binary expression ('double' and 'unsigned long')
>>>       static const _Value __min = __glibcxx_min(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:48:35:
>>> note: expanded from macro '__glibcxx_min'
>>>   (__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0)
>>>                            ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:55:12:
>>> note: in instantiation of template class
>>> '__gnu_cxx::__numeric_traits_integer<double>' requested here
>>>     struct __numeric_traits_integer
>>>            ^
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:59:35:
>>> error: invalid operands to binary expression ('double' and 'unsigned long')
>>>       static const _Value __max = __glibcxx_max(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:52:15:
>>> note: expanded from macro '__glibcxx_max'
>>>    (((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0)
>>>        ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:58:35:
>>> error: invalid operands to binary expression ('long double' and 'unsigned
>>> long')
>>>       static const _Value __min = __glibcxx_min(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:48:35:
>>> note: expanded from macro '__glibcxx_min'
>>>   (__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0)
>>>                            ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:55:12:
>>> note: in instantiation of template class
>>> '__gnu_cxx::__numeric_traits_integer<long double>' requested here
>>>     struct __numeric_traits_integer
>>>            ^
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:59:35:
>>> error: invalid operands to binary expression ('long double' and 'unsigned
>>> long')
>>>       static const _Value __max = __glibcxx_max(_Value);
>>>                                   ^~~~~~~~~~~~~~~~~~~~~
>>> /../lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/ext/numeric_traits.h:52:15:
>>> note: expanded from macro '__glibcxx_max'
>>>    (((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0)
>>>        ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> I extracted the command line produced by the FixedCompilationDatabase
>>> and printed it with quotes for extra paranoia:
>>>
>>> 'clang-tool' '-Wall' '-std=c++11' '-fcolor-diagnosticsoo'
>>> '/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/dummy.cc'
>>>
>>> First thing to observe is that -fcolor-diagnosticsoo seems a bit weird.
>>> Second is that running clang++ -Wall -std=c++11
>>> /home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/dummy.cc
>>> doesn't error.
>>>
>>> This is on a fedora box, if that makes a difference.
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150326/ca445d61/attachment.html>


More information about the cfe-dev mailing list