1*1e8a9c3eSKuba Mracek // RUN: %clangxx_tsan -O1 %s -o %t && %run %t %t.tmp 2>&1 | FileCheck %s
2*1e8a9c3eSKuba Mracek #include <stdio.h>
3*1e8a9c3eSKuba Mracek #include <assert.h>
4*1e8a9c3eSKuba Mracek #include <fcntl.h>
5*1e8a9c3eSKuba Mracek #include <unistd.h>
6*1e8a9c3eSKuba Mracek #include <sys/stat.h>
7*1e8a9c3eSKuba Mracek 
main(int argc,char * argv[])8*1e8a9c3eSKuba Mracek int main(int argc, char *argv[]) {
9*1e8a9c3eSKuba Mracek   fprintf(stderr, "Hello world.\n");
10*1e8a9c3eSKuba Mracek   assert(argv[1]);
11*1e8a9c3eSKuba Mracek   unlink(argv[1]);
12*1e8a9c3eSKuba Mracek   int fd = open(argv[1], O_RDWR | O_CREAT, 0600);
13*1e8a9c3eSKuba Mracek   assert(fd != -1);
14*1e8a9c3eSKuba Mracek   struct stat info;
15*1e8a9c3eSKuba Mracek   int result = fstat(fd, &info);
16*1e8a9c3eSKuba Mracek   fprintf(stderr, "permissions = 0%o\n", info.st_mode & ~S_IFMT);
17*1e8a9c3eSKuba Mracek   assert(result == 0);
18*1e8a9c3eSKuba Mracek   close(fd);
19*1e8a9c3eSKuba Mracek   fprintf(stderr, "Done.\n");
20*1e8a9c3eSKuba Mracek }
21*1e8a9c3eSKuba Mracek 
22*1e8a9c3eSKuba Mracek // CHECK: Hello world.
23*1e8a9c3eSKuba Mracek // CHECK: permissions = 0600
24*1e8a9c3eSKuba Mracek // CHECK: Done.
25