asan_test_utils.h revision 5092682c3a6902e460a6e439cf48b3dc7d48dc65
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(_WIN32)
18typedef unsigned __int8  uint8_t;
19typedef unsigned __int16 uint16_t;
20typedef unsigned __int32 uint32_t;
21typedef unsigned __int64 uint64_t;
22typedef __int8           int8_t;
23typedef __int16          int16_t;
24typedef __int32          int32_t;
25typedef __int64          int64_t;
26# define NOINLINE __declspec(noinline)
27#else  // defined(_WIN32)
28# define NOINLINE __attribute__((noinline))
29#endif  // defined(_WIN32)
30
31#if !defined(__has_feature)
32#define __has_feature(x) 0
33#endif
34
35#ifndef __WORDSIZE
36#if __LP64__ || defined(_WIN64)
37#define __WORDSIZE 64
38#else
39#define __WORDSIZE 32
40#endif
41#endif
42
43// Make the compiler think that something is going on there.
44extern "C" void break_optimization(void *arg);
45
46// This function returns its parameter but in such a way that compiler
47// can not prove it.
48template<class T>
49NOINLINE
50static T Ident(T t) {
51  T ret = t;
52  break_optimization(&ret);
53  return ret;
54}
55
56#endif  // ASAN_TEST_UTILS_H
57