1// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
2#include <stdlib.h>
3
4void __attribute__((noinline)) foo(int *mem) {
5  free(mem);
6}
7
8void __attribute__((noinline)) bar(int *mem) {
9  mem[0] = 42;
10}
11
12int main() {
13  int *mem = (int*)malloc(100);
14  foo(mem);
15  bar(mem);
16  return 0;
17}
18
19// CHECK: WARNING: ThreadSanitizer: heap-use-after-free
20// CHECK:   Write of size 4 at {{.*}} by main thread:
21// CHECK:     #0 bar
22// CHECK:     #1 main
23// CHECK:   Previous write of size 8 at {{.*}} by main thread:
24// CHECK:     #0 free
25// CHECK:     #{{1|2}} foo
26// CHECK:     #{{2|3}} main
27