asan_test_utils.h revision 5092682c3a6902e460a6e439cf48b3dc7d48dc65
11e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===-- asan_test_utils.h ------------*- C++ -*-===// 21e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 31e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// The LLVM Compiler Infrastructure 41e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 51e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is distributed under the University of Illinois Open Source 61e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// License. See LICENSE.TXT for details. 71e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 81e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 91e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 101e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is a part of AddressSanitizer, an address sanity checker. 111e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 121e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 131e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 141e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#ifndef ASAN_TEST_UTILS_H 151e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#define ASAN_TEST_UTILS_H 161e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 17938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#if defined(_WIN32) 18938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef unsigned __int8 uint8_t; 19938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef unsigned __int16 uint16_t; 20938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef unsigned __int32 uint32_t; 21938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef unsigned __int64 uint64_t; 22938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef __int8 int8_t; 23938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef __int16 int16_t; 24938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef __int32 int32_t; 25938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovtypedef __int64 int64_t; 26938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov# define NOINLINE __declspec(noinline) 27938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#else // defined(_WIN32) 28938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov# define NOINLINE __attribute__((noinline)) 29938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#endif // defined(_WIN32) 30938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov 31938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#if !defined(__has_feature) 32938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#define __has_feature(x) 0 33938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#endif 34938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov 35938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#ifndef __WORDSIZE 36938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#if __LP64__ || defined(_WIN64) 37938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#define __WORDSIZE 64 38938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#else 39938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#define __WORDSIZE 32 40938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#endif 41938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#endif 42938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov 431e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// Make the compiler think that something is going on there. 445092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonovextern "C" void break_optimization(void *arg); 451e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 461e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This function returns its parameter but in such a way that compiler 471e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// can not prove it. 481e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanytemplate<class T> 49938106753364d96cedc11cbdc35a15030fb44d0cTimur IskhodzhanovNOINLINE 501e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanystatic T Ident(T t) { 511e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany T ret = t; 521e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany break_optimization(&ret); 531e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany return ret; 541e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany} 551e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 561e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#endif // ASAN_TEST_UTILS_H 57