public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use
@ 2012-12-10 20:40 dholbert at cs dot stanford.edu
  2012-12-10 20:41 ` [Bug c++/55643] " dholbert at cs dot stanford.edu
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: dholbert at cs dot stanford.edu @ 2012-12-10 20:40 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

             Bug #: 55643
           Summary: g++ 4.7 gives "warning: variable ‘myVar’ set but not
                    used [-Wunused-but-set-variable]" when an "enum
                    class"-typed variable is cast to double before use
    Classification: Unclassified
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: dholbert@cs.stanford.edu


When I compile the attached C++ source file with g++ 4.7.2, I get this build
warning:
> gcc-warning-test.cpp: In function ‘int main()’:
> gcc-warning-test.cpp:19:10: warning: variable ‘myVar’ set but
>  not used [-Wunused-but-set-variable]

I believe this is incorrect, because I _am_ using the variable -- I'm printing
out its value like so:
> printf("%f\n", (double)myVar);

If I instead cast it to an int or an unsigned value, I get no warning -- that
apparently counts as "using" it, from GCC's perspective.  But when I use
(float)myVar or (double)myVar, GCC apparently doesn't count that as "using".

NOTE: This only happens with "enum class" (a C++11 feature). If I instead just
use "enum", then I don't get a warning.

For comparison, clang yields expected results. (No warning -- and it does warn
if I remove the printf statements, indicating that it is doing some checking)

SYSTEM INFO:
 g++-4.7.real (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
 OS: Ubuntu 12.10
 Kernel: Linux 3.5.0-19-generic x86_64


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
@ 2012-12-10 20:41 ` dholbert at cs dot stanford.edu
  2012-12-10 20:42 ` dholbert at cs dot stanford.edu
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dholbert at cs dot stanford.edu @ 2012-12-10 20:41 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #1 from Daniel Holbert <dholbert at cs dot stanford.edu> 2012-12-10 20:41:00 UTC ---
Created attachment 28917
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28917
testcase cpp file


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
  2012-12-10 20:41 ` [Bug c++/55643] " dholbert at cs dot stanford.edu
@ 2012-12-10 20:42 ` dholbert at cs dot stanford.edu
  2012-12-10 20:44 ` dholbert at cs dot stanford.edu
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dholbert at cs dot stanford.edu @ 2012-12-10 20:42 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #2 from Daniel Holbert <dholbert at cs dot stanford.edu> 2012-12-10 20:42:03 UTC ---
The command I'm using to compile is:
>  g++-4.7 -Wall -std=c++11 gcc-warning-test.cpp


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
  2012-12-10 20:41 ` [Bug c++/55643] " dholbert at cs dot stanford.edu
  2012-12-10 20:42 ` dholbert at cs dot stanford.edu
@ 2012-12-10 20:44 ` dholbert at cs dot stanford.edu
  2012-12-10 21:17 ` [Bug c++/55643] [4.7/4.8 Regression] g++ incorrectly prints " jakub at gcc dot gnu.org
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dholbert at cs dot stanford.edu @ 2012-12-10 20:44 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #3 from Daniel Holbert <dholbert at cs dot stanford.edu> 2012-12-10 20:43:47 UTC ---
Created attachment 28918
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28918
testcase preprocessed file (from run w/ --save-temps)

For reference, here's the preprocessed .ii file from running
> g++-4.7 --save-temps -Wall -std=c++11 gcc-warning-test.cpp
per the last recommendation at http://gcc.gnu.org/bugs/#need


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] g++ incorrectly prints "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (2 preceding siblings ...)
  2012-12-10 20:44 ` dholbert at cs dot stanford.edu
@ 2012-12-10 21:17 ` jakub at gcc dot gnu.org
  2012-12-10 23:54 ` [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use pinskia at gcc dot gnu.org
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-10 21:17 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2012-12-10
                 CC|                            |jakub at gcc dot gnu.org
         AssignedTo|unassigned at gcc dot       |jakub at gcc dot gnu.org
                   |gnu.org                     |
   Target Milestone|---                         |4.7.3
            Summary|g++ 4.7 incorrectly prints  |[4.7/4.8 Regression] g++
                   |"warning: variable ‘myVar’  |incorrectly prints
                   |set but not used            |"warning: variable ‘myVar’
                   |[-Wunused-but-set-variable] |set but not used
                   |" when an "enum             |[-Wunused-but-set-variable]
                   |class"-typed variable is    |" when an "enum
                   |cast to double before use   |class"-typed variable is
                   |                            |cast to double before use
     Ever Confirmed|0                           |1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (3 preceding siblings ...)
  2012-12-10 21:17 ` [Bug c++/55643] [4.7/4.8 Regression] g++ incorrectly prints " jakub at gcc dot gnu.org
@ 2012-12-10 23:54 ` pinskia at gcc dot gnu.org
  2012-12-11  8:07 ` jakub at gcc dot gnu.org
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-12-10 23:54 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
            Version|unknown                     |4.7.2
            Summary|[4.7/4.8 Regression] g++    |[4.7/4.8 Regression]
                   |incorrectly prints          |[C++11] incorrect
                   |"warning: variable ‘myVar’  |"warning: variable ‘myVar’
                   |set but not used            |set but not used" with an
                   |[-Wunused-but-set-variable] |"enum class"-typed variable
                   |" when an "enum             |is casted to double for the
                   |class"-typed variable is    |use
                   |cast to double before use   |

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-12-10 23:54:04 UTC ---
Here is a small testcase without any includes:
enum class MyEnum
{
  eSomeValue = 123
};

void f(const char*, ...);

int main() {

  MyEnum myVar = MyEnum::eSomeValue;

  // As far as Wunused-but-set-variable is concerned, any of the following
  // will successfully "use" myVar:
  //  printf("%d\n", myVar);
  //  printf("%d\n", (int)myVar);
  //  printf("%u\n", (unsigned)myVar);

  // ...but these do not:
  f("%f\n", (double)myVar);
  f("%f\n", (float)myVar);

  return 0;
}


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (4 preceding siblings ...)
  2012-12-10 23:54 ` [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use pinskia at gcc dot gnu.org
@ 2012-12-11  8:07 ` jakub at gcc dot gnu.org
  2012-12-11 19:02 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-11  8:07 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-11 08:06:31 UTC ---
Created attachment 28922
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28922
gcc48-pr55643.patch

Untested fix.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (5 preceding siblings ...)
  2012-12-11  8:07 ` jakub at gcc dot gnu.org
@ 2012-12-11 19:02 ` jakub at gcc dot gnu.org
  2012-12-11 19:06 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-11 19:02 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-11 19:01:51 UTC ---
Author: jakub
Date: Tue Dec 11 19:01:45 2012
New Revision: 194415

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194415
Log:
    PR c++/55643
    * expr.c (mark_exp_read): Handle FLOAT_EXPR similarly to NOP_EXPR.

    * g++.dg/warn/Wunused-var-19.C: New test.

Added:
    trunk/gcc/testsuite/g++.dg/warn/Wunused-var-19.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/expr.c
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (6 preceding siblings ...)
  2012-12-11 19:02 ` jakub at gcc dot gnu.org
@ 2012-12-11 19:06 ` jakub at gcc dot gnu.org
  2012-12-11 19:08 ` jakub at gcc dot gnu.org
  2012-12-11 19:20 ` dholbert at cs dot stanford.edu
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-11 19:06 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-11 19:06:23 UTC ---
Author: jakub
Date: Tue Dec 11 19:06:19 2012
New Revision: 194416

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194416
Log:
    PR c++/55643
    * expr.c (mark_exp_read): Handle FLOAT_EXPR similarly to NOP_EXPR.

    * g++.dg/warn/Wunused-var-19.C: New test.

Added:
    branches/gcc-4_7-branch/gcc/testsuite/g++.dg/warn/Wunused-var-19.C
Modified:
    branches/gcc-4_7-branch/gcc/cp/ChangeLog
    branches/gcc-4_7-branch/gcc/cp/expr.c
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (7 preceding siblings ...)
  2012-12-11 19:06 ` jakub at gcc dot gnu.org
@ 2012-12-11 19:08 ` jakub at gcc dot gnu.org
  2012-12-11 19:20 ` dholbert at cs dot stanford.edu
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-11 19:08 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-11 19:07:41 UTC ---
Fixed.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect  "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use
  2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
                   ` (8 preceding siblings ...)
  2012-12-11 19:08 ` jakub at gcc dot gnu.org
@ 2012-12-11 19:20 ` dholbert at cs dot stanford.edu
  9 siblings, 0 replies; 11+ messages in thread
From: dholbert at cs dot stanford.edu @ 2012-12-11 19:20 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55643

--- Comment #9 from Daniel Holbert <dholbert at cs dot stanford.edu> 2012-12-11 19:20:34 UTC ---
Thanks for the quick turnaround!


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-12-11 19:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-10 20:40 [Bug c++/55643] New: g++ 4.7 gives "warning: variable ‘myVar’ set but not used [-Wunused-but-set-variable]" when an "enum class"-typed variable is cast to double before use dholbert at cs dot stanford.edu
2012-12-10 20:41 ` [Bug c++/55643] " dholbert at cs dot stanford.edu
2012-12-10 20:42 ` dholbert at cs dot stanford.edu
2012-12-10 20:44 ` dholbert at cs dot stanford.edu
2012-12-10 21:17 ` [Bug c++/55643] [4.7/4.8 Regression] g++ incorrectly prints " jakub at gcc dot gnu.org
2012-12-10 23:54 ` [Bug c++/55643] [4.7/4.8 Regression] [C++11] incorrect "warning: variable ‘myVar’ set but not used" with an "enum class"-typed variable is casted to double for the use pinskia at gcc dot gnu.org
2012-12-11  8:07 ` jakub at gcc dot gnu.org
2012-12-11 19:02 ` jakub at gcc dot gnu.org
2012-12-11 19:06 ` jakub at gcc dot gnu.org
2012-12-11 19:08 ` jakub at gcc dot gnu.org
2012-12-11 19:20 ` dholbert at cs dot stanford.edu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).