|
From: | Paul Eggert |
Subject: | Re: Missing extern "C" in count-one-bits.h? |
Date: | Fri, 21 Feb 2020 12:59:55 -0800 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 |
On 2/20/20 12:15 PM, Simon Marchi wrote:
The disagreement between the symbol names between count-one-bits.o and arm-get-next-pcs.o seems to show that there is a missing `extern "C"` in the count-one-bits.h header?
Thanks, I'll take your word for it. (I don't use C++.) I installed the attached patch into Gnulib. Apparently these modules have been used by C code only, until now.
And apparently, gcc decided to compile the definition in the header and include it in arm-get-next-pcs.o, while clang did not. Is that the compiler's choice, or is it because the macros and preprocessor conditionals in count-one-bits.h evaluated to something different for the two compilers?
It's a compiler's choice whether a function is inlined. When I call count_one_bits in C, gcc -O2 doesn't create a function for count_one_bits in the calling module; it simply issues the popcnt insn, or calls the appropriate GCC library function on platforms that don't have a popcnt insn. Perhaps you were compiling with some other level of optimization, or perhaps C++ does this differently; but regardless of how the compiler does it the resulting code is supposed to work of course.
0001-Add-extern-C-to-count-one-bits.h-etc.patch
Description: Text Data
[Prev in Thread] | Current Thread | [Next in Thread] |