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