Suppress bogus GCC 12 -Waddress warnings for SKINOFFSETTOPTR
This appears to be a bug in GCC 12 due to more aggressive -Waddress warnings. According to the GCC documentation, the warning should be suppressed because the "problem" code is coming from a macro, but it doesn't happen for cases like "if(!SKINOFFSETTOPTR(...))" where the macro is negated. Assigning the result of SKINOFFSETTOPTR() to a temporary and checking that suppresses the warning. Change-Id: Ia37a1e06a454d29032bb8128a2f059b149ea2b83
This commit is contained in:
parent
bab8a41532
commit
972c8c0ab6
1 changed files with 13 additions and 2 deletions
|
@ -33,8 +33,19 @@ extern "C"
|
|||
/* Use this type and macro to convert a pointer from the
|
||||
* skin buffer to a useable pointer */
|
||||
typedef long skinoffset_t;
|
||||
#define SKINOFFSETTOPTR(base, offset) ((offset) < 0 ? NULL : ((void*)&base[offset]))
|
||||
#define PTRTOSKINOFFSET(base, pointer) ((pointer) ? ((void*)pointer-(void*)base) : -1)
|
||||
/*
|
||||
* The statement-expression here is needed to work around a
|
||||
* bogus -Waddress warning produced by GCC 12 when this macro
|
||||
* is used like "if (!SKINOFFSETTOPTR(...))".
|
||||
*
|
||||
* Related:
|
||||
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102967
|
||||
* https://godbolt.org/z/YEY4Yzdnf
|
||||
*/
|
||||
#define SKINOFFSETTOPTR(base, offset) \
|
||||
({ void *__p = ((offset) < 0 ? NULL : ((void*)&base[offset])); __p; })
|
||||
#define PTRTOSKINOFFSET(base, pointer) \
|
||||
((pointer) ? ((void*)pointer-(void*)base) : -1)
|
||||
/* Use this macro when declaring a variable to self-document the code.
|
||||
* type is the actual type being pointed to (i.e OFFSETTYPE(char*) foo )
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue