16d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
26d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
36d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <stdio.h>
46d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <stdlib.h>
56d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
66d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesclass Logger {
76d1862363c88c183b0ed7740fca876342cf0474bStephen Hines public:
86d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  Logger() {
96d1862363c88c183b0ed7740fca876342cf0474bStephen Hines    fprintf(stderr, "Logger ctor\n");
106d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  }
116d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
126d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  ~Logger() {
136d1862363c88c183b0ed7740fca876342cf0474bStephen Hines    fprintf(stderr, "Logger dtor\n");
146d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  }
156d1862363c88c183b0ed7740fca876342cf0474bStephen Hines};
166d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
176d1862363c88c183b0ed7740fca876342cf0474bStephen HinesLogger logger;
186d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
196d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesvoid log_from_atexit() {
206d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  fprintf(stderr, "In log_from_atexit\n");
216d1862363c88c183b0ed7740fca876342cf0474bStephen Hines}
226d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
236d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesint main() {
246d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  atexit(log_from_atexit);
256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines}
266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
276d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: Logger ctor
286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: In log_from_atexit
296d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: Logger dtor
30