[Bug c++/85266] New: Inconsistent _Pragma behavior for macro with and without arguments
sdaniel.cole at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Apr 6 19:08:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85266
Bug ID: 85266
Summary: Inconsistent _Pragma behavior for macro with and
without arguments
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sdaniel.cole at gmail dot com
Target Milestone: ---
I'm trying to use the _Pragma operator to disable warnings for code inside a
macro. It seems to work when the macro has no arguments (without parenthesis),
but doesn't work when it has arguments (even having empty parenthesis causes
the change in behavior).
The following works as expected (shadow warning disabled for macro only):
struct RAII{
RAII();
~RAII();
};
#define RAII_BLOCK \
_Pragma("GCC diagnostic push \"-Wshadow\"") \
_Pragma("GCC diagnostic ignored \"-Wshadow\"") \
auto a = RAII(); \
_Pragma("GCC diagnostic pop")
void foo() {
RAII_BLOCK;
{
RAII_BLOCK;
}
}
The following doesn't work as expected (a warning is still generated):
struct RAII{
RAII();
~RAII();
};
#define RAII_BLOCK() \
_Pragma("GCC diagnostic push \"-Wshadow\"") \
_Pragma("GCC diagnostic ignored \"-Wshadow\"") \
auto a = RAII(); \
_Pragma("GCC diagnostic pop")
void foo() {
RAII_BLOCK();
{
RAII_BLOCK();
}
}
I compile the above using:
g++ -c test.cpp -Wshadow
https://godbolt.org/g/D22MYu
More information about the Gcc-bugs
mailing list