hokein updated this revision to Diff 534507. hokein added a comment. address comments:
- add unittest for llvm::writeToOutput API - refine the llvm-dwarfutil tool lit test Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153652/new/ https://reviews.llvm.org/D153652 Files: llvm/lib/Support/raw_ostream.cpp llvm/test/tools/llvm-dwarfutil/ELF/X86/mirror-permissions-unix.test llvm/unittests/Support/raw_ostream_test.cpp Index: llvm/unittests/Support/raw_ostream_test.cpp =================================================================== --- llvm/unittests/Support/raw_ostream_test.cpp +++ llvm/unittests/Support/raw_ostream_test.cpp @@ -495,6 +495,10 @@ ASSERT_FALSE(sys::fs::createTemporaryFile("foo", "bar", FD, Path)); FileRemover Cleanup(Path); + ErrorOr<llvm::sys::fs::perms> Perms = llvm::sys::fs::getPermissions(Path); + ASSERT_TRUE(!!Perms); + EXPECT_EQ(0, *Perms & llvm::sys::fs::all_exe); + ASSERT_THAT_ERROR(writeToOutput(Path, [](raw_ostream &Out) -> Error { Out << "HelloWorld"; @@ -502,6 +506,10 @@ }), Succeeded()); checkFileData(Path, "HelloWorld"); + // No exe bit set by the writeToOutput API. + Perms = llvm::sys::fs::getPermissions(Path); + ASSERT_TRUE(!!Perms); + EXPECT_EQ(0, *Perms & llvm::sys::fs::all_exe); } TEST(raw_ostreamTest, writeToNonexistingPath) { Index: llvm/test/tools/llvm-dwarfutil/ELF/X86/mirror-permissions-unix.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-dwarfutil/ELF/X86/mirror-permissions-unix.test @@ -0,0 +1,51 @@ +## The Unix version of this test must use umask(1) because +## llvm-darfutil respects the umask in setting output permissions. +## Setting the umask to 0 ensures deterministic permissions across +## test environments. +# UNSUPPORTED: system-windows +# REQUIRES: shell + +# RUN: touch %t +# RUN: chmod 0777 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0777 +# RUN: chmod 0666 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0666 +# RUN: chmod 0640 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0640 + +## Set umask to be permissive of all permissions, +## only test mirroring of permissions. +# RUN: umask 0 + +# RUN: yaml2obj %s -o %t + +# RUN: chmod 0777 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0777 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0777 + +# RUN: chmod 0666 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0666 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0666 + +# RUN: chmod 0640 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0640 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0640 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 Index: llvm/lib/Support/raw_ostream.cpp =================================================================== --- llvm/lib/Support/raw_ostream.cpp +++ llvm/lib/Support/raw_ostream.cpp @@ -1007,7 +1007,7 @@ return Write(Out); } - unsigned Mode = sys::fs::all_read | sys::fs::all_write | sys::fs::all_exe; + unsigned Mode = sys::fs::all_read | sys::fs::all_write; Expected<sys::fs::TempFile> Temp = sys::fs::TempFile::create(OutputFileName + ".temp-stream-%%%%%%", Mode); if (!Temp)
Index: llvm/unittests/Support/raw_ostream_test.cpp =================================================================== --- llvm/unittests/Support/raw_ostream_test.cpp +++ llvm/unittests/Support/raw_ostream_test.cpp @@ -495,6 +495,10 @@ ASSERT_FALSE(sys::fs::createTemporaryFile("foo", "bar", FD, Path)); FileRemover Cleanup(Path); + ErrorOr<llvm::sys::fs::perms> Perms = llvm::sys::fs::getPermissions(Path); + ASSERT_TRUE(!!Perms); + EXPECT_EQ(0, *Perms & llvm::sys::fs::all_exe); + ASSERT_THAT_ERROR(writeToOutput(Path, [](raw_ostream &Out) -> Error { Out << "HelloWorld"; @@ -502,6 +506,10 @@ }), Succeeded()); checkFileData(Path, "HelloWorld"); + // No exe bit set by the writeToOutput API. + Perms = llvm::sys::fs::getPermissions(Path); + ASSERT_TRUE(!!Perms); + EXPECT_EQ(0, *Perms & llvm::sys::fs::all_exe); } TEST(raw_ostreamTest, writeToNonexistingPath) { Index: llvm/test/tools/llvm-dwarfutil/ELF/X86/mirror-permissions-unix.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-dwarfutil/ELF/X86/mirror-permissions-unix.test @@ -0,0 +1,51 @@ +## The Unix version of this test must use umask(1) because +## llvm-darfutil respects the umask in setting output permissions. +## Setting the umask to 0 ensures deterministic permissions across +## test environments. +# UNSUPPORTED: system-windows +# REQUIRES: shell + +# RUN: touch %t +# RUN: chmod 0777 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0777 +# RUN: chmod 0666 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0666 +# RUN: chmod 0640 %t +# RUN: ls -l %t | cut -f 1 -d ' ' > %t.0640 + +## Set umask to be permissive of all permissions, +## only test mirroring of permissions. +# RUN: umask 0 + +# RUN: yaml2obj %s -o %t + +# RUN: chmod 0777 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0777 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0777 + +# RUN: chmod 0666 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0666 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0666 + +# RUN: chmod 0640 %t +# RUN: llvm-dwarfutil --no-garbage-collection %t %t1 +# RUN: ls -l %t1 | cut -f 1 -d ' ' > %t1.perms +# RUN: cmp %t1.perms %t.0640 +# RUN: llvm-dwarfutil --garbage-collection --separate-debug-file %t %t2 +# RUN: ls -l %t2 | cut -f 1 -d ' ' > %t2.perms +# RUN: cmp %t2.perms %t.0640 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 Index: llvm/lib/Support/raw_ostream.cpp =================================================================== --- llvm/lib/Support/raw_ostream.cpp +++ llvm/lib/Support/raw_ostream.cpp @@ -1007,7 +1007,7 @@ return Write(Out); } - unsigned Mode = sys::fs::all_read | sys::fs::all_write | sys::fs::all_exe; + unsigned Mode = sys::fs::all_read | sys::fs::all_write; Expected<sys::fs::TempFile> Temp = sys::fs::TempFile::create(OutputFileName + ".temp-stream-%%%%%%", Mode); if (!Temp)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits