[Sanitizers, test] Fix sanitizer tests on Solaris (PR 33274)
authorKamil Rytarowski <n54@gmx.com>
Wed, 17 Jan 2018 12:26:04 +0000 (12:26 +0000)
committerKamil Rytarowski <n54@gmx.com>
Wed, 17 Jan 2018 12:26:04 +0000 (12:26 +0000)
commit3efd1c516c6f85daccb8670b627ecd32091c8d7a
tree15b77d70e2e9e11fb58965c697218b5f81478106
parent4527f13a106467c9010c9238426d6bc7f2e84941
[Sanitizers, test] Fix sanitizer tests on Solaris (PR 33274)

Summary:
This patch (on top of the previous two (https://reviews.llvm.org/D40898 and
https://reviews.llvm.org/D40899) complete the compiler-rt side of the the Solaris
sanitizer port.

It contains the following sets of changes:

* For the time being, the port is for 32-bit x86 only, so reject the various tests on
  x86_64.

* When compiling as C++, <setjmp.h> resp. <iso/setjmp_iso.h> only declares
  _setjmp and _longjmp inside namespace std.

* MAP_FILE is a Windows feature.  While e.g. Linux <sys/mman.h> provides a
  no-op compat define, Solaris does not.

* test/asan/TestCases/Posix/coverage.cc was initially failing like this:

/vol/gcc/src/llvm/llvm/local/projects/compiler-rt/lib/sanitizer_common/scripts/sancov.py: 4 files merged; 2 PCs total
rm: cannot remove '/var/gcc/llvm/local/projects/compiler-rt/test/asan/I386SunOSConfig/TestCases/Posix/Output/coverage': Invalid argument

  Further digging revealed that the rm was trying to remove the running test's working
  directory which failed as observed.  cd'ing out of the dir before let the test pass.

* Two tests needed a declaration of alloca. I've now copied the existing code from
  test/asan/TestCases/alloca_constant_size.cc, but it may be more profitable and
  maintainable to have a common testsuite header where such code is collected.

* Similarly, Solaris' printf %p format doesn't include the leading 0x.

* In test/asan/TestCases/malloc-no-intercept.c, I had to undef __EXTENSIONS__
  (predefined by clang for no apparent reason) to avoid conflicting declarations
  for memalign.

* test/ubsan/TestCases/Float/cast-overflow.cpp has different platform dependent
  ways to define BYTE_ORDER and friends.  Why not just use __BYTE_ORDER__ and
  friends as predefined by clang and gcc?

Patch by Rainer Orth.

Reviewers: kcc, alekseyshl

Reviewed By: alekseyshl

Subscribers: srhines, kubamracek, mgorny, krytarowski, fedor.sergeev, JDevlieghere, llvm-commits, #sanitizers

Tags: #sanitizers

Differential Revision: https://reviews.llvm.org/D40900

llvm-svn: 322635
20 files changed:
compiler-rt/lib/asan/tests/CMakeLists.txt
compiler-rt/lib/asan/tests/asan_test.cc
compiler-rt/lib/sanitizer_common/tests/sanitizer_test_utils.h
compiler-rt/test/asan/CMakeLists.txt
compiler-rt/test/asan/TestCases/Posix/asan-sigbus.cpp
compiler-rt/test/asan/TestCases/Posix/coverage.cc
compiler-rt/test/asan/TestCases/Posix/ioctl.cc
compiler-rt/test/asan/TestCases/alloca_constant_size.cc
compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cc
compiler-rt/test/asan/TestCases/alloca_vla_interact.cc
compiler-rt/test/asan/TestCases/debug_double_free.cc
compiler-rt/test/asan/TestCases/debug_report.cc
compiler-rt/test/asan/TestCases/malloc-no-intercept.c
compiler-rt/test/asan/lit.cfg
compiler-rt/test/lit.common.cfg
compiler-rt/test/sanitizer_common/CMakeLists.txt
compiler-rt/test/ubsan/CMakeLists.txt
compiler-rt/test/ubsan/TestCases/Float/cast-overflow.cpp
compiler-rt/test/ubsan/lit.common.cfg
compiler-rt/test/ubsan_minimal/CMakeLists.txt