/* { dg-do compile } */ /* { dg-additional-options "-Wreturn-type" } */ /* The location of the right brace within the macro expansion can be an adhoc location, because the frontend attached custom data to it. In order for the diagnostic pragma to correctly understand that the diagnostic pop occurs after the function and not before, linemap_location_before_p needs to handle adhoc locations within a macro map, which was broken until fixed by r10-325. Verify that we get it right, both when the brace is a macro token and when it is part of the macro expansion. */ #define ENDFUNC1 \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ } /* { dg-bogus {-Wreturn-type} } */ \ _Pragma("GCC diagnostic pop") int f1 () { ENDFUNC1 /* { dg-bogus {in expansion of macro 'ENDFUNC1' } } */ #define ENDFUNC2(term) \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ term /* { dg-bogus {in definition of macro 'ENDFUNC2'} } */ \ _Pragma("GCC diagnostic pop") int f2 () { ENDFUNC2(}) /* { dg-bogus {-Wreturn-type} } */