This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How do I find when the diagnostic pragmas first came into gcc?


Thank you Jonathan. I came up with this (if you have any improvements please comment):

First, the following code will have a warning about signed vs unsigned comparison when compiling.


#include <iostream> int main() { size_t a = 7; int b = -3; if(a < b){ std::cout << "a<b\n"; }else{ std::cout << "a!<b\n"; } return 0; }

$ g++ -Wall -o testit testit.cpp
testit.cpp:7:12: warning: comparison between signed and unsigned integer expressions
$


Compiling with -fdiagnostics-show-option results in the diagnostic:

$ g++ -Wall -fdiagnostics-show-option -o testit testit.cpp
testit.cpp:7:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
$


Knowing the argument controlling this error now is -Wsign-compare, we can rewrite like the following to get rid of the warning:

#include <iostream>
int
main()
{
size_t a = 7;
int b = -3;
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsign-compare"
#endif
if(a < b){
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#pragma GCC diagnostic pop
#endif
std::cout << "a<b\n";
}else{
std::cout << "a!<b\n";
}
return 0;
}


When compiling again the warning is suppressed:

$ g++ -Wall -o testit testit.cpp
$

Ugly but effective. I still say fix all the warnings. Thank you.

Patrick


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]