When building tests, we get this warning:

tst-mmap.hh:76:19: warning: dereferencing type-punned pointer will break 
strict-aliasing rules [-Wstrict-aliasing]
   76 |     char byte = **(volatile char**)&func;
      |                   ^~~~~~~~~~~~~~~~~~~~~~

I think this code was actually wrong... func is a function pointer, not
a function, so its name already points to the function's code - there is no
reason to take &func. I'm not even sure how this works.

After this patch, the warning is gone, and the relevant test
(tst-elf-permissions.so) still passes.

Refs #976

Signed-off-by: Nadav Har'El <[email protected]>
---
 tests/tst-mmap.hh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/tst-mmap.hh b/tests/tst-mmap.hh
index fed718ca..dcd2ea5d 100644
--- a/tests/tst-mmap.hh
+++ b/tests/tst-mmap.hh
@@ -73,8 +73,8 @@ static inline bool try_write(void *addr)
 static inline bool try_write(int (*func)())
 {
     catch_segv();
-    char byte = **(volatile char**)&func;
-    **(volatile char**)&func = byte;
+    char byte = *(volatile char*)func;
+    *(volatile char*)func = byte;
     return !caught_segv();
 }
 
-- 
2.21.0

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20191128082723.1313-1-nyh%40scylladb.com.

Reply via email to