10231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//===-- msandr_test_so.cc  ------------------------------------------------===//
20231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//
30231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//                     The LLVM Compiler Infrastructure
40231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//
50231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov// This file is distributed under the University of Illinois Open Source
60231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov// License. See LICENSE.TXT for details.
70231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//
80231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//===----------------------------------------------------------------------===//
90231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//
100231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov// This file is a part of MemorySanitizer.
110231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//
120231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov// MemorySanitizer unit tests.
130231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov//===----------------------------------------------------------------------===//
140231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov
150231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov#include "msandr_test_so.h"
160231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov
170231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanovvoid dso_memfill(char* s, unsigned n) {
180231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  for (unsigned i = 0; i < n; ++i)
190231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov    s[i] = i;
200231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov}
210231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov
220231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanovint dso_callfn(int (*fn)(void)) {
230231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  volatile int x = fn();
240231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  return x;
250231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov}
260231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov
270231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanovint dso_callfn1(int (*fn)(long long, long long, long long)) {  //NOLINT
280231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  volatile int x = fn(1, 2, 3);
290231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  return x;
300231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov}
310231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov
320231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanovint dso_stack_store(void (*fn)(int*, int*), int x) {
330231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  int y = x + 1;
340231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  fn(&x, &y);
350231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov  return y;
360231c50f42e735739041f3b4b4ce17e1742bed69Evgeniy Stepanov}
3712c46937db2a5ab9237ce314c3f3a83636e8a575Evgeniy Stepanov
3812c46937db2a5ab9237ce314c3f3a83636e8a575Evgeniy Stepanovvoid break_optimization(void *x) {}
39