1/* { dg-shouldfail "tsan" } */ 2 3#include <stdlib.h> 4 5void __attribute__((noinline)) foo(int *mem) { 6 free(mem); 7} 8 9void __attribute__((noinline)) bar(int *mem) { 10 mem[0] = 42; 11} 12 13int main() { 14 int *mem =(int*)malloc (100); 15 foo(mem); 16 bar(mem); 17 return 0; 18} 19 20/* { dg-output "WARNING: ThreadSanitizer: heap-use-after-free.*(\n|\r\n|\r)" } */ 21/* { dg-output " Write of size 4 at.* by main thread:(\n|\r\n|\r)" } */ 22/* { dg-output " #0 bar.*(\n|\r\n|\r)" } */ 23/* { dg-output " #1 main.*(\n|\r\n|\r)" } */ 24/* { dg-output " Previous write of size 8 at.* by main thread:(\n|\r\n|\r)" } */ 25/* { dg-output " #0 free.*(\n|\r\n|\r)" } */ 26/* { dg-output " #\(1|2\) foo.*(\n|\r\n|\r)" } */ 27/* { dg-output " #\(2|3\) main.*(\n|\r\n|\r)" } */ 28