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