Bug 18821 - Please add warning if bits thrown away in integral conversions
Summary: Please add warning if bits thrown away in integral conversions
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.2.3
: P2 enhancement
Target Milestone: 4.3.0
Assignee: Not yet assigned to anyone
URL:
Keywords: diagnostic
Depends on:
Blocks:
 
Reported: 2004-12-04 01:16 UTC by Eric Nadler
Modified: 2006-11-26 14:03 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-02-26 19:52:16


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Nadler 2004-12-04 01:16:02 UTC
I'd like to get a warning for code like this:

#include <iostream>
using namespace std;
int main()
{
   unsigned long four = 400000;
   unsigned short two;

   two = four;
   cout << two << endl;
}

/home/enadler/test/compilerwarnings $ g++ -Werror -Wall -Wconversion -ansi
gccbugreport.cc && a.out
6784

I think GCC is doing the right thing by allowing this code uncasted, and
it is described this way in Bjarne's C++ Programming Language, Special
Edition C.6.2.1.

However, it seems reasonable to me that a warning option should be available
to notify the programmer that data is being thrown away.

Thanks!
Eric
Comment 1 Eric Nadler 2004-12-04 01:20:05 UTC
Installed Red Hat Advanced Server 3.0, update 1
Dell PowerEdge 1750: Intel Xeon 2.4GHz

Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-24)

Comment 2 Andrew Pinski 2004-12-06 05:14:11 UTC
Confirmed, I thought I saw a bug about this before.
Comment 3 Joseph S. Myers 2005-02-01 21:10:25 UTC
The example given is in C++, not C; the C version is bug 2707.
Comment 4 Manuel López-Ibáñez 2006-11-26 13:57:52 UTC
This will be fixed by the new Wconversion option. Actually, it has been fixed already for gcc version 4.3.0 20061124 (experimental).

manuel@gcc05:~$ local/bin/g++  -c -Wconversion pr18821.C
pr18821.C: In function ‘int main()’:
pr18821.C:8: warning: conversion to ‘short unsigned int’ from ‘long unsigned int’ may alter its value

I hope this makes you happy! 

It is a shame that I missed this bug in the Changelog. Should I modify the Changelog or what is done is done ?
Comment 5 Manuel López-Ibáñez 2006-11-26 13:59:14 UTC
For reference:

Author: manu
Date: Fri Nov 24 01:50:33 2006
New Revision: 119143

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=119143
Log:
2006-11-24  Manuel Lopez-Ibanez <manu@gcc.gnu.org>

        PR c/2707
        PR c++/26167
        * c-common.c (conversion_warning): New.
        (convert_and_check): Call conversion_warning unless there is an
        overflow warning.
        * doc/invoke.texi (-Wconversion): Update description.

testsuite/

        * gcc.dg/Wconversion-integer.c: New. Supersedes 
        Wconversion-negative-constants.c 
        * gcc.dg/Wconversion-real.c: New.
        * gcc.dg/Wconversion-real-integer.c: New.
        * gcc.dg/Wconversion-negative-constants.c: Deleted.
        * g++.dg/warn/Wconversion1.C: Modified.


Added:
    trunk/gcc/testsuite/gcc.dg/Wconversion-integer.c
    trunk/gcc/testsuite/gcc.dg/Wconversion-real-integer.c
    trunk/gcc/testsuite/gcc.dg/Wconversion-real.c
Removed:
    trunk/gcc/testsuite/gcc.dg/Wconversion-negative-constants.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-common.c
    trunk/gcc/doc/invoke.texi
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/warn/Wconversion1.C