asan_test_utils.h revision e2770623379f403ea8c0247cac9ce8c75167a886
1//===-- asan_test_utils.h ---------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of AddressSanitizer, an address sanity checker.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef ASAN_TEST_UTILS_H
15#define ASAN_TEST_UTILS_H
16
17#if !defined(ASAN_EXTERNAL_TEST_CONFIG)
18# define INCLUDED_FROM_ASAN_TEST_UTILS_H
19# include "asan_test_config.h"
20# undef INCLUDED_FROM_ASAN_TEST_UTILS_H
21#endif
22
23#if defined(_WIN32)
24typedef unsigned __int8  uint8_t;
25typedef unsigned __int16 uint16_t;
26typedef unsigned __int32 uint32_t;
27typedef unsigned __int64 uint64_t;
28typedef __int8           int8_t;
29typedef __int16          int16_t;
30typedef __int32          int32_t;
31typedef __int64          int64_t;
32# define NOINLINE __declspec(noinline)
33# define USED
34#else  // defined(_WIN32)
35# define NOINLINE __attribute__((noinline))
36# define USED __attribute__((used))
37#endif  // defined(_WIN32)
38
39#if !defined(__has_feature)
40#define __has_feature(x) 0
41#endif
42
43#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
44# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \
45    __attribute__((no_address_safety_analysis))
46#else
47# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
48#endif
49
50#if __LP64__ || defined(_WIN64)
51#  define SANITIZER_WORDSIZE 64
52#else
53#  define SANITIZER_WORDSIZE 32
54#endif
55
56// Make the compiler thinks that something is going on there.
57inline void break_optimization(void *arg) {
58  __asm__ __volatile__ ("" : : "r" (arg) : "memory");
59}
60
61// This function returns its parameter but in such a way that compiler
62// can not prove it.
63template<class T>
64NOINLINE
65static T Ident(T t) {
66  T ret = t;
67  break_optimization(&ret);
68  return ret;
69}
70
71// Check that pthread_create/pthread_join return success.
72#define PTHREAD_CREATE(a, b, c, d) ASSERT_EQ(0, pthread_create(a, b, c, d))
73#define PTHREAD_JOIN(a, b) ASSERT_EQ(0, pthread_join(a, b))
74
75#endif  // ASAN_TEST_UTILS_H
76