aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Davis <Matthew.Davis@sony.com>2019-04-02 03:24:12 +0000
committerMatt Davis <Matthew.Davis@sony.com>2019-04-02 03:24:12 +0000
commit60a8816c2fc8952251f635ea15dde678d186ea78 (patch)
tree4f68f5794495f9bc5ee70be47669939f46c31bc6
parentadb3ece2164105373a41b4e043dc0694d49ca0d8 (diff)
downloadllvm-60a8816c2fc8952251f635ea15dde678d186ea78.zip
llvm-60a8816c2fc8952251f635ea15dde678d186ea78.tar.gz
llvm-60a8816c2fc8952251f635ea15dde678d186ea78.tar.bz2
[compiler-rt][test] Make instrprof-set-dir-mode test tolerant of group ID
Patch from 'troyj': Hi, I ran into a problem with this test when the source was located in certain directories. The mkdir(2) man page states that the set-group-ID bit is inherited from the parent directory, but this test was written in such a way that it assumes the bit is unset. Whether that assumption is true depends on where the checkout lives, which leads to some people being able to reproduce the problem whereas others cannot. I think the correct fix is to exclude the bit from the check. Making probinson a reviewer since they reviewed the original test. Patch landed for troyj, thanks! Differential Revision: D53832 llvm-svn: 357449
-rw-r--r--compiler-rt/test/profile/instrprof-set-dir-mode.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler-rt/test/profile/instrprof-set-dir-mode.c b/compiler-rt/test/profile/instrprof-set-dir-mode.c
index 25eb29d..6bb8847 100644
--- a/compiler-rt/test/profile/instrprof-set-dir-mode.c
+++ b/compiler-rt/test/profile/instrprof-set-dir-mode.c
@@ -25,11 +25,15 @@ static int test(unsigned Mode, const char *TestDir) {
if (Mode != __llvm_profile_get_dir_mode())
Ret = -1;
else {
+ // From 'man mkdir':
+ // "If the parent directory has the set-group-ID bit set, then so will the
+ // newly created directory." So we mask off S_ISGID below; this test cannot
+ // control its parent directory.
const unsigned Expected = ~umask(0) & Mode;
struct stat DirSt;
if (stat(Dir, &DirSt) == -1)
Ret = -1;
- else if (DirSt.st_mode != Expected) {
+ else if ((DirSt.st_mode & ~S_ISGID) != Expected) {
printf("Modes do not match: Expected %o but found %o (%s)\n", Expected,
DirSt.st_mode, Dir);
Ret = -1;