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