diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-08-02 17:33:19 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-08-02 17:33:19 +0000 |
| commit | 005b7ed8f76756d94ef6266ded755ab7863cb936 (patch) | |
| tree | de2aa8f0c2f604d3b4f81a94dd20ea0c50bf1e68 /test/profile/instrprof-set-dir-mode.c | |
| parent | 93c1b73a09a52d4a265f683bf1954b08bb430049 (diff) | |
Vendor import of compiler-rt trunk r338536:vendor/compiler-rt/compiler-rt-trunk-r338536
Notes
svn path=/vendor/compiler-rt/dist/; revision=337141
svn path=/vendor/compiler-rt/compiler-rt-trunk-r338536/; revision=337142; tag=vendor/compiler-rt/compiler-rt-trunk-r338536
Diffstat (limited to 'test/profile/instrprof-set-dir-mode.c')
| -rw-r--r-- | test/profile/instrprof-set-dir-mode.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/profile/instrprof-set-dir-mode.c b/test/profile/instrprof-set-dir-mode.c new file mode 100644 index 000000000000..25eb29db533d --- /dev/null +++ b/test/profile/instrprof-set-dir-mode.c @@ -0,0 +1,48 @@ +// UNSUPPORTED: windows +// RUN: %clang_pgogen -o %t.bin %s -DTESTPATH=\"%t.dir\" +// RUN: rm -rf %t.dir +// RUN: %run %t.bin + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> + +void __llvm_profile_set_dir_mode(unsigned Mode); +unsigned __llvm_profile_get_dir_mode(void); +void __llvm_profile_recursive_mkdir(char *Path); + +static int test(unsigned Mode, const char *TestDir) { + int Ret = 0; + + /* Create a dir and set the mode accordingly. */ + char *Dir = strdup(TestDir); + if (!Dir) + return -1; + __llvm_profile_set_dir_mode(Mode); + __llvm_profile_recursive_mkdir(Dir); + + if (Mode != __llvm_profile_get_dir_mode()) + Ret = -1; + else { + const unsigned Expected = ~umask(0) & Mode; + struct stat DirSt; + if (stat(Dir, &DirSt) == -1) + Ret = -1; + else if (DirSt.st_mode != Expected) { + printf("Modes do not match: Expected %o but found %o (%s)\n", Expected, + DirSt.st_mode, Dir); + Ret = -1; + } + } + + free(Dir); + return Ret; +} + +int main(void) { + if (test(S_IFDIR | 0777, TESTPATH "/foo/bar/baz/") || + test(S_IFDIR | 0666, TESTPATH "/foo/bar/qux/")) + return -1; + return 0; +} |
