[cfe-dev] Clang inconsistency with gcc on Windows
Yaron Keren
yaron.keren at gmail.com
Sun May 31 21:21:37 PDT 2015
I'ts a good question wether __attribute__((dllimport)) should really be
ignored here but we'll probably want to in order to keep compatibility with
mingw. Could you file a bug report on this?
2015-06-01 3:20 GMT+03:00 Edward Diener <eldlistmailingz at tropicsoft.com>:
> On 5/31/2015 3:26 PM, Yaron Keren wrote:
>
>> Maybe gcc is more fogiving with checking redeclarations or some compiler
>> predefine is not the same. You can check this in depth by looking at
>> preprocess output (-E) and comparing how both compilers expand the
>> GetSystemTimeAsFileTime declaration.
>>
>
> Both compilers expand the different GetSystemTimeAsFileTime declaration in
> the internal Boost winapi headers and the mingw headers in exactly the same
> way.
>
> The preprocessed expansion in the internal Boost winapi header is:
>
> __attribute__((dllimport)) void __attribute__((__stdcall__))
> GetSystemTimeAsFileTime(FILETIME_* lpFileTime);
>
> and the preprocessed expansion in the mingw headers is:
>
> void __attribute__((__stdcall__)) GetSystemTimeAsFileTime(LPFILETIME);
>
> where FILETIME_ and LPFILETIME are the same structure.
>
> The gcc compiler sees these declarations as the same but the clang
> compiler sees them as different and therefore an error.
>
>
>>
>> 2015-05-31 21:50 GMT+03:00 Edward Diener
>> <eldlistmailingz at tropicsoft.com
>> <mailto:eldlistmailingz at tropicsoft.com>>:
>>
>> On 5/31/2015 2:05 PM, Yaron Keren wrote:
>>
>> Boost tries to supplies its own version of the Windows API to
>> avoid
>> including WIndows.h
>> Boost version of the API is not strictly identical to Windows.h,
>> so if
>> Windows.h do get included somehow such errors happen. I always
>> -DBOOST_USE_WINDOWS_H to force Boost to use Windows.h instead of
>> its own.
>>
>>
>> Thanks, that does work.
>>
>> I still would like to know why clang is giving errors in the
>> situation I describe in my OP and gcc is not. I am not saying that
>> clang is wrong to do so but clearly it is not being compatible with
>> gcc in this area.
>>
>>
>>
>>
>> 2015-05-31 20:48 GMT+03:00 Edward Diener
>> <eldlistmailingz at tropicsoft.com
>> <mailto:eldlistmailingz at tropicsoft.com>
>> <mailto:eldlistmailingz at tropicsoft.com
>>
>> <mailto:eldlistmailingz at tropicsoft.com>>>:
>>
>>
>> Compiling some Boost library code the latest clang has
>> produced an
>> inconsistency with gcc on Windows that is making it
>> impossible to
>> build Boost libraries successfully.
>>
>> The code in question, where clang is given an error:
>>
>> clang-linux.compile.c++.without-pth
>>
>>
>> ..\..\..\bin.v2\libs\context\build\clang-linux-3.7.0\debug\threading-multi\windows\stack_traits.obj
>> In file included from
>> ..\..\..\libs\context\src\windows\stack_traits.cpp:24:
>> In file included from ..\..\..\boost/thread.hpp:13:
>> In file included from
>> ..\..\..\boost/thread/thread.hpp:12:
>> In file included from
>> ..\..\..\boost/thread/thread_only.hpp:15:
>> In file included from
>> ..\..\..\boost/thread/win32/thread_data.hpp:10:
>> In file included from
>> ..\..\..\boost/thread/thread_time.hpp:10:
>> In file included from
>> ..\..\..\boost/date_time/microsec_time_clock.hpp:23:
>> ..\..\..\boost/date_time/filetime_functions.hpp:57:46:
>> error:
>> conflicting types for 'GetSystemTimeAsFileTime'
>> __declspec(dllimport) void __stdcall
>> GetSystemTimeAsFileTime(FILETIME* lpFileTime);
>> ^
>> /mingw/include\winbase.h:1397:24: note: previous
>> declaration is here
>> WINBASEAPI void WINAPI
>> GetSystemTimeAsFileTime(LPFILETIME);
>>
>> ^
>>
>> and more of the same in many places building Boost
>> libraries with clang.
>>
>> This is with the latest clang, which I build with
>> mingw/gcc-4.8.1 on
>> Windows.
>>
>> With gcc-4.8.1:
>>
>> gcc.compile.c++
>>
>>
>> ..\..\..\bin.v2\libs\context\build\gcc-mingw-4.8.1\debug\threading-multi\windows\stack_traits.o
>>
>>
>> With gcc-4.9.2
>>
>> gcc.compile.c++
>>
>>
>> ..\..\..\bin.v2\libs\context\build\gcc-mingw-4.9.2\debug\threading-multi\windows\stack_traits.o
>>
>>
>> This is happening extensively in Boost code which uses the
>> Windows
>> API when compiling under Windows.
>>
>> I do not know what WINBASEAPI is supposed to resove to
>> under mingw,
>> but clearly it should not be different for gcc and clang
>> under
>> Windows and gcc has no problems with this.
>>
>
>
> _______________________________________________
> 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/20150601/92498f76/attachment.html>
More information about the cfe-dev
mailing list