[cfe-users] compile error

Jean-Daniel Dupas devlists at shadowlab.org
Tue Jul 16 05:42:26 PDT 2013


Argh, forget my previous comment.

As the OS X interceptor is based on dyld interposition, it uses symbols directly (and not symbol name string), so the compiler should also alias the readdir interceptor and replace it by readdir$INODE64 as expected.

Le 16 juil. 2013 à 14:35, Jean-Daniel Dupas <devlists at shadowlab.org> a écrit :

> Hi,
> 
> I also encounter this issue and I think your fix will not work.
> 
> While it fixes compilation, it introduce a latent bug as now the structure definition in asan no longer match the one readdir expects.
> 
> When  compiling for 10.6 and later, OS X implicitly replace call to readdir (and other functions) by readdir$INODE64 call which properly handle the 64bit structure, but call to readdir will always use the old structure.
> 
> So if using 64 bit version of the dirent struct, ASAN should interpose readdir$INODE64 and not readdir symbol.
> 
> 
> Le 16 juil. 2013 à 13:58, Alexey Samsonov <samsonov at google.com> a écrit :
> 
>> Hi Emmanuel!
>> 
>> I found out what the problem was: we defined dirent structure for Mac OS X 10.5, and in your case the runtime was compiled with -mmacosx-version-min=10.7.
>> This problem should be fixed by r186404.
>> 
>> 
>> On Sat, Jul 13, 2013 at 10:25 PM, Emmanuel Thivierge <monamimani at gmail.com> wrote:
>> Hi,
>> 
>> Thanks a lot for your help.
>> 
>> My version of osX is 10.8.4
>> And the define __DARWIN_64_BIT_INO_T is define to 1.
>> 
>> I hope this help.
>> 
>> The reason I am compiling Address sanitizer is that I might need it is i run into problems while developing.
>> 
>> Thanks again
>> 
>> Emmanuel
>> 
>> On 2013-07-12, at 9:05 AM, Alexey Samsonov <samsonov at google.com> wrote:
>> 
>>> Hi!
>>> 
>>> On Fri, Jul 12, 2013 at 4:34 AM, Mani <monamimani at gmail.com> wrote:
>>> Hi all,
>>> 
>>> i have been compiling clang for months without problems, until about last week. Since then I can't compile.
>>> 
>>> usually delete CMakeCache.txt then run
>>> cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_C_COMPILER=/usr/local/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/bin/clang++ -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_SHARED_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_WERROR=OFF -DLLVM_BUILD_TOOLS=ON -DLLVM_BUILD_EXAMPLES=OFF -DCLANG_BUILD_EXAMPLES=OFF -DLLVM_APPEND_VC_REV=ON /Users/Mani/Development/Projects/llvm/source
>>> ln -s $PWD/compile_commands.json /Users/Mani/Development/Projects/llvm/source
>>> 
>>> and then run
>>> make -j10 ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1
>>> 
>>> Here is what i get.
>>> 
>>> [ 15%] [ 16%] Built target clang_rt.x86_64
>>> Built target clang_rt.i386
>>> [ 16%] /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:799:1: error: 'assertion_failed__799'
>>>       declared as an array with a negative size
>>> CHECK_SIZE_AND_OFFSET(dirent, d_ino);
>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:726:3: note: expanded from macro
>>>       'CHECK_SIZE_AND_OFFSET'
>>>   COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
>>>   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h:239:30: note: expanded from macro 'COMPILER_CHECK'
>>> #define COMPILER_CHECK(pred) IMPL_COMPILER_ASSERT(pred, __LINE__)
>>>                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h:245:57: note: expanded from macro
>>>       'IMPL_COMPILER_ASSERT'
>>>     typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1]
>>>                                                         ^~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:803:1: error: 'assertion_failed__803'
>>>       declared as an array with a negative size
>>> CHECK_SIZE_AND_OFFSET(dirent, d_reclen);
>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:728:3: note: expanded from macro
>>>       'CHECK_SIZE_AND_OFFSET'
>>>   COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==          \
>>>   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h:239:30: note: expanded from macro 'COMPILER_CHECK'
>>> #define COMPILER_CHECK(pred) IMPL_COMPILER_ASSERT(pred, __LINE__)
>>>                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> /Users/Mani/Development/Projects/llvm/source/projects/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h:245:57: note: expanded from macro
>>>       'IMPL_COMPILER_ASSERT'
>>>     typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1]
>>>                                                         ^~~~~~~~~~~~~~~
>>> 2 errors generated.
>>> Built target RTLSanCommon.osx
>>> make[2]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_posix.cc.o] Error 1
>>> make[1]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/all] Error 2
>>> make[1]: *** Waiting for unfinished jobs….
>>> 
>>> Anybody know what going on?
>>> 
>>> You've got a problem with compiling AddressSanitizer runtime: it incorrectly defines "dirent" structure (normally it comes from /usr/include/sys/dirent.h).
>>> 1) Which OS X version do you use?
>>> 2) What is the value of __DARWIN_64_BIT_INO_T on your system? (you may check it by including sys/cdefs.h and looking at the value of this definition).
>>>  
>>> Note that if you're not interested in ASan, you may just build clang as follows:
>>> "make -j10 ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1 clang"
>>> 
>>> 
>>> Thanks
>>> Emmanuel
>>> _______________________________________________
>>> cfe-users mailing list
>>> cfe-users at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users
>>> 
>>> 
>>> 
>>> -- 
>>> Alexey Samsonov, MSK
>> 
>> 
>> 
>> 
>> -- 
>> Alexey Samsonov, MSK
>> _______________________________________________
>> cfe-users mailing list
>> cfe-users at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users
> 
> -- Jean-Daniel
> 
> 
> 
> 
> _______________________________________________
> cfe-users mailing list
> cfe-users at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users

-- Jean-Daniel




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20130716/f288a95d/attachment.html>


More information about the cfe-users mailing list