asan_test_utils.h revision 1e172b4bdec57329bf904f063a29f99cddf2d85f
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 171e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// Make the compiler think that something is going on there. 181e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanyextern "C" void break_optimization(void *); 191e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 201e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This function returns its parameter but in such a way that compiler 211e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// can not prove it. 221e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanytemplate<class T> 231e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany__attribute__((noinline)) 241e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanystatic T Ident(T t) { 251e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany T ret = t; 261e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany break_optimization(&ret); 271e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany return ret; 281e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany} 291e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 301e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#endif // ASAN_TEST_UTILS_H 31