Search code examples
c++g++compiler-warningssuppress-warningscompiler-bug

trying to silence -Waggregate-return only in a macro for g++ - buggy compiler?


using g++ and compiling with -Waggregate-return

#define DOCTEST_CHECK(expr)                                      \
    do {                                                         \
        _Pragma("GCC diagnostic push");                          \
        _Pragma("GCC diagnostic ignored \"-Waggregate-return\"");\
        if(Result failed = (ExpressionDecomposer() << expr))     \
            printf("%s\n", failed.m_decomposition.c_str());      \
        _Pragma("GCC diagnostic pop");                           \
    } while(false)

DOCTEST_CHECK(true == false); // produces warnings

but the unrolled by hand version does not produce any warnings:

do {                                                                                           
    _Pragma("GCC diagnostic push");                                                            
    _Pragma("GCC diagnostic ignored \"-Waggregate-return\"");                                  
    if(Result failed = (ExpressionDecomposer() << true == false))     
        printf("%s\n", failed.m_decomposition.c_str());                                        
    _Pragma("GCC diagnostic pop");                                                             
} while(false);

Shouldn't the behavior be the same?

I don't think the Result and ExpressionDecomposer types matter - just classes.

I'm trying to get expression decomposition working like here (things have been renamed a bit).

EDIT: >> here << is a live demo of the problem using the lest library

My question is: why? how can I be warning free in the first case using the macro? I cannot afford silencing the warning globally.


Solution

  • These bugs look relevant:

    So it might have to do with line number comparisons, or some similar issue within the parser, and it might be fixed in some future version.