This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/51983] New: Wrong line number in an uninitialized variable warning
- From: "Greta.Yorsh at arm dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 24 Jan 2012 19:44:07 +0000
- Subject: [Bug c/51983] New: Wrong line number in an uninitialized variable warning
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51983
Bug #: 51983
Summary: Wrong line number in an uninitialized variable warning
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: Greta.Yorsh@arm.com
CC: ramana@gcc.gnu.org
For uninitialized variables of type _Complex, arm and x86 compilers report
different line numbers in warning messages:
* if only the real part of a complex variable is uninitialized, arm compiler
reports the line number where the variable is declared.
* if only the imaginary part of a complex variable is uninitialized, arm
compiler reports the line number where the variable is used.
* if only one of the parts of a complex variable is uninitialized, x86 compiler
reports the line where the other part is initialized.
* if both parts of a complex variable are uninitialized, both arm and x86
compilers (correctly) report the line where the variable is used.
This behaviour causes a failure in gcc.dg/uninit-13.c test on arm target.
Note that in this test, dg-warning directive expects the warning message about
uninitialized variable to report the line in which the imaginary part of the
complex variable is initialized, and not the line where the uninitialized
variable is used. That is, the test passes on x86 target, even thought the line
number in the message is not what one would (perhaps naively) expect, based on
the behaviour of the compiler for other types of uninitialized variables.
I don't know if the problem is in the frontend, middle-end, target, or
testsuite.
----------------------------------------
$ cat -n /work/tmp/unin1.c
1 typedef _Complex float C;
2 C foo(int *p)
3 {
4 C f;
5 int a = *p;
6 *p = 42 * a;
7 __imag__ f = 0;
8 return f;
9 }
$ arm-none-eabi-gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin1.c
/work/tmp/unin1.c: In function 'foo':
/work/tmp/unin1.c:4:5: warning: '__real__ f' is used uninitialized in this
function [-Wuninitialized]
$ gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin1.c
/work/tmp/unin1.c: In function âfooâ:
/work/tmp/unin1.c:7: warning: â__real__ fâ is used uninitialized in this
function
----------------------------------------
$ cat -n /work/tmp/unin2.c
1 typedef _Complex float C;
2 C foo(int *p)
3 {
4 C f;
5 int a = *p;
6 *p = 42 * a;
7 __real__ f = 0;
8 return f;
9 }
$ arm-none-eabi-gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin2.c
/work/tmp/unin2.c: In function 'foo':
/work/tmp/unin2.c:8:3: warning: '__imag__ f' is used uninitialized in this
function [-Wuninitialized]
$ gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin2.c
/work/tmp/unin2.c: In function âfooâ:
/work/tmp/unin2.c:7: warning: â__imag__ fâ is used uninitialized in this
function
----------------------------------------
$ cat -n /work/tmp/unin3.c
1 typedef _Complex float C;
2 C foo(int *p)
3 {
4 C f;
5 int a = *p;
6 *p = 42 * a;
7
8 return f;
9 }
$ arm-none-eabi-gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin3.c
/work/tmp/unin3.c: In function 'foo':
/work/tmp/unin3.c:8:3: warning: 'f' is used uninitialized in this function
[-Wuninitialized]
$ gcc -O -Wuninitialized -S -o tmp.s /work/tmp/unin3.c
/work/tmp/unin3.c: In function âfooâ:
/work/tmp/unin3.c:8: warning: âfâ is used uninitialized in this function