http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60083
--- Comment #1 from Chengnian Sun <chengniansun at gmail dot com> ---
I think the following case is similar to the reported case. The only difference
is the message content. The following case also triggers "gcc -O0" to emit two
duplicate warnings. But "gcc -O1" emits only one warning.
$: cat s.c
extern short fn2(short, short);
unsigned long g;
void fn1() {
int const l = 0;
fn2(((g = l != 0) < 10LL) | 91608LL, 0);
}
$: gcc-trunk -c -Wconversion -std=c99 s.c
s.c: In function ‘fn1’:
s.c:5:7: warning: conversion to ‘short int’ alters ‘long long int’ constant
value [-Wconversion]
fn2(((g = l != 0) < 10LL) | 91608LL, 0);
^
s.c:5:7: warning: conversion to ‘short int’ alters ‘long long int’ constant
value [-Wconversion]
$: gcc-trunk -c -Wconversion -std=c99 s.c -O1
s.c: In function ‘fn1’:
s.c:5:7: warning: conversion to ‘short int’ from ‘long long int’ may alter its
value [-Wconversion]
fn2(((g = l != 0) < 10LL) | 91608LL, 0);
^
$: