[compiler-rt] r357449 - [compiler-rt][test] Make instrprof-set-dir-mode test tolerant of group ID

Matt Davis via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 1 20:24:12 PDT 2019


Author: mattd
Date: Mon Apr  1 20:24:12 2019
New Revision: 357449

URL: http://llvm.org/viewvc/llvm-project?rev=357449&view=rev
Log:
[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

Modified:
    compiler-rt/trunk/test/profile/instrprof-set-dir-mode.c

Modified: compiler-rt/trunk/test/profile/instrprof-set-dir-mode.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/instrprof-set-dir-mode.c?rev=357449&r1=357448&r2=357449&view=diff
==============================================================================
--- compiler-rt/trunk/test/profile/instrprof-set-dir-mode.c (original)
+++ compiler-rt/trunk/test/profile/instrprof-set-dir-mode.c Mon Apr  1 20:24:12 2019
@@ -25,11 +25,15 @@ static int test(unsigned Mode, const cha
   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;




More information about the llvm-commits mailing list