Jakub, Great result! Ideally, I would like to limit the differences from upstream. I'll put some of your changes upstream, for others I'd ask you to consider other choices.
-#include "gtest/gtest.h" +#include "dejagnu-gtest.h" Maybe like this? #if ASAN_USE_DEJAGNU_GTEST #include "dejagnu-gtest.h" #else #include "gtest/gtest.h" #endif Can we have gcc_asan_test.C which will #include the unchanged (modulo the comment header) asan_test.cc and have dejagnu lines there? Like this: // { dg-do run { target { mmap && pthread } } } ... #include asan_test.cc +#elif defined(__SANITIZE_ADDRESS__) + bool asan = 1; I'll put this upstream. +#ifdef __SANITIZE_ADDRESS__ + // Avoid this test during dejagnu testing, it is too expensive + if (getenv ("GCC_TEST_RUN_EXPENSIVE") == NULL) + return; +#endif I'd prefer to simply put this w/o ifdef. -# error "please define ASAN_HAS_BLACKLIST" +//# error "please define ASAN_HAS_BLACKLIST" You can add -DASAN_HAS_BLACKLIST=0 to the command line. If/when gcc gets blacklist support, we'll redefine it to 1 +#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) this is upstreamable +#ifdef __GNUC__ +# define break_optimization(arg) __asm__ __volatile__ ("" : : "r" (arg) : "memory") +#endif + That's a nice piece of magic, let me use this too. Cool! --kcc On Fri, Nov 30, 2012 at 12:46 AM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > On Wed, Nov 28, 2012 at 03:13:14PM +0400, Konstantin Serebryany wrote: >> That's a bit scary (and will be slower than with gtest). >> But if we can limit the changes by replacing >> asan/tests/asan_test_config.h (and maybe some minimal other changes) >> that may work. > > So, here is a rough port of asan_test.cc (haven't added the few smaller > other tests yet until this one is resolved). > > I'm attaching both gcc patch and diff between the current llvm files > and the files added in the patch to make it clear what changes were done. > Primarily it is replacing the gtest/gtest.h include with new dejagnu-gtest.h > header that contains needed macros, adding some tcl stuff around it and > a few dejagnu lines at the beginning. > > I've disabled the ManyThreads test, because it seems to be almost completely > library bound and was very slow (order of minutes), many people run make > check for gcc with very high -jN factors and having some test spawn 1000 > threads and in each allocate lots of memory is undersirable for normal > testing. > > Attaching also make check-g++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} > asan.exp' > result, there are some failures that need analysis (some of it might be > because of the missing __asan_handle_no_return instrumentation from GCC, > waiting there for review of the prerequisite patch, another thing is > instrumentation of bitfields). > But for -m32/-m64 together that is still: > > # of expected passes 2301 > # of unexpected failures 61 > # of unsupported tests 18 > > so not that bad. Both -m32 and -m64 testing together took around 90 seconds > (without the ManyThreads tests, with it (GCC_TEST_RUN_EXPENSIVE=1 in > environment) more than 4 minutes). > > Jakub