The following (legitimate) code will generate a warning when both -O2 and
-Wconversion is enabled but not when only -Wconversion is enabled.
Code:
#include <arpa/inet.h>
// Nonsense code to illustrate problem
int main(void) {
uint16_t portnbr=0;
uint16_t n_portnbr = htons(portnbr);
exit(0);
}
With optimization
$> gcc -std=gnu99 -Wconversion -Werror -O2 -c tsthtons.c
cc1: warnings being treated as errors
tsthtons.c: In function ‘main’:
tsthtons.c:6: error: conversion to ‘short unsigned int’ from ‘int’ may alter its value
The following (legitimate) code will generate a warning when both -O2 and
-Wconversion is enabled but not when only -Wconversion is enabled.
Code:
#include <arpa/inet.h>
// Nonsense code to illustrate problem
int main(void) {
uint16_t portnbr=0;
uint16_t n_portnbr = htons(portnbr);
exit(0);
}
With optimization
$> gcc -std=gnu99 -Wconversion -Werror -O2 -c tsthtons.c
cc1: warnings being treated as errors
tsthtons.c: In function ‘main’:
tsthtons.c:6: error: conversion to ‘short unsigned int’ from ‘int’ may alter its value
and without
$>gcc -std=gnu99 -Wconversion -Werror -c tsthtons.c
$>
in both cases
gcc --version
gcc (SUSE Linux) 4.4.1 [gcc-4_4-branch revision 150839]
Copyright (C) 2009 Free Software Foundation, Inc.
and gnu clib v2.10.1