This fixes a dummy variable unused warning-to-error on gcc-6.4.
Details
- Reviewers
kib markj jilles - Commits
- rS367647: [tests] Fix unused variable warning in gcc
- compiled on gcc-6.4 amd64
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 34179 Build 31332: arc lint + arc unit
Event Timeline
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | This isn't the right way to cope with this issue. Please get kib@ or markj@ to sign off on this review. | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | Yeah, I've added them, I'll see how it goes! | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | I think you could get rid of dummy and write (void)*(volatile int *)p; If the compiler elides the load, I believe the test will fail. | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | Doesn't volatile int *p; and (void)*p; work fine? The other references do not dereference the pointer, and it isn't volatile int * volatile p. | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | I think the compiler will raise an error around munmap(p, sz); if p is volatile. | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | Maybe? munmap's first argument is void *; the behavior is well-defined, I don't know if GCC warns about that specific implicit cast to void *. | |
| tests/sys/vm/page_fault_signal.c | ||
|---|---|---|
| 119 | Ah, Clang gives a -Wincompatible-pointer-types-discards-qualifiers warning and GCC -Wdiscarded-qualifiers. Ok | |
Does anybody looked at the resulting asm to confirm that memory access is indeed generated ?
I confirmed on Godbolt:
Clang 11 amd64 -O3
main: # @main
pushq %rax
callq my_mmap
movl (%rax), %ecx <<< access
movq %rax, %rdi
callq my_unmap
xorl %eax, %eax
popq %rcx
retqGCC 10 amd64 -O3
main:
subq $8, %rsp
call my_mmap
movq %rax, %rdi
movl (%rdi), %eax <<< access
call my_unmap
xorl %eax, %eax
addq $8, %rsp
retvoid *my_mmap(void);
void my_unmap(void *p);
int
main(int argc, char **argv)
{
int *p;
p = my_mmap();
(void)*(volatile int *)p;
my_unmap(p);