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