Bug 34351 - Please get us the "volatile register" warning back
Summary: Please get us the "volatile register" warning back
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c (show other bugs)
Version: 4.1.2
: P3 normal
Target Milestone: 4.4.0
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-12-05 19:32 UTC by Joerg Wunsch
Modified: 2008-02-26 14:06 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-12-13 13:03:53


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joerg Wunsch 2007-12-05 19:32:34 UTC
Microcontroller programmers tend to fall into the trap of trying to
bind a variable to a CPU register, and declare it "volatile" so they
could e.g. use it to communicate between the main context and an ISR.

Previous GCC versions issued a warning:

volatile register variables don't work as you might wish

This warning has been removed without making volatile register variables
work the way an innocent programmer would assume.

Please re-enable that warning at least for -Wall and/or -Wextra.
Comment 1 Andrew Pinski 2007-12-09 02:06:17 UTC
use -Wvolatile-register-var
Comment 2 Joerg Wunsch 2007-12-09 07:37:40 UTC
> use -Wvolatile-register-var

Could we have that at least as part of one of the "standard"
warning switch combinations, either -Wall or -Wextra?  I
remember a statement from the developer who introduced the
change that he wouldn't mind if it were enabled by -Wall.
Comment 3 Manuel López-Ibáñez 2007-12-13 13:03:50 UTC
Moreover, the option is defined in common.opt when it is C/C++ specific.

Untested patch:

Index: gcc/common.opt
===================================================================
--- gcc/common.opt	(revision 130605)
+++ gcc/common.opt	(working copy)
@@ -213,10 +213,6 @@
 Common Var(warn_unused_variable) Warning
 Warn when a variable is unused
 
-Wvolatile-register-var
-Common Var(warn_register_var) Warning
-Warn when a register variable is declared volatile
-
 Wcoverage-mismatch
 Common RejectNegative Var(warn_coverage_mismatch) Warning
 Warn instead of error in case profiles in -fprofile-use do not match
Index: gcc/c.opt
===================================================================
--- gcc/c.opt	(revision 130605)
+++ gcc/c.opt	(working copy)
@@ -465,6 +465,10 @@
 C ObjC C++ ObjC++ Var(warn_vla) Init(-1) Warning
 Warn if a variable length array is used
 
+Wvolatile-register-var
+C ObjC C++ ObjC++ Var(warn_volatile_register_var) Warning
+Warn when a register variable is declared volatile
+
 Wwrite-strings
 C ObjC C++ ObjC++ Var(warn_write_strings) Warning
 In C++, nonzero means warn about deprecated conversion from string literals to `char *'.  In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard.
Index: gcc/c-opts.c
===================================================================
--- gcc/c-opts.c	(revision 130605)
+++ gcc/c-opts.c	(working copy)
@@ -405,6 +405,7 @@
       warn_address = value;
       warn_strict_overflow = value;
       warn_array_bounds = value;
+      warn_volatile_register_var = value;
 
       /* Only warn about unknown pragmas that are not in system
 	 headers.  */
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 130605)
+++ gcc/doc/invoke.texi	(working copy)
@@ -2656,6 +2656,7 @@
 -Wunused-label     @gol
 -Wunused-value     @gol
 -Wunused-variable  @gol
+-Wvolatile-register-var @gol
 }
 
 Note that some warning flags are not implied by @option{-Wall}.  Some of
@@ -3902,7 +3903,8 @@
 @opindex Wno-volatile-register-var
 Warn if a register variable is declared volatile.  The volatile
 modifier does not inhibit all optimizations that may eliminate reads
-and/or writes to register variables.
+and/or writes to register variables.  This warning is enabled by
+@option{-Wall}.
 
 @item -Wdisabled-optimization
 @opindex Wdisabled-optimization
Comment 4 Manuel López-Ibáñez 2008-02-26 14:04:57 UTC
Subject: Bug 34351

Author: manu
Date: Tue Feb 26 14:04:09 2008
New Revision: 132675

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132675
Log:
2008-02-26  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

	PR 34351
	* doc/invoke.texi (-Wall): Add -Wvolatile-register-var.
	* c-opts.c (c_common_handle_option): Wall enables
	Wvolatile-register-var.
	* common.opt: Move Wvolatile-register-var to...
	* c.opt: ...here.
testsuite/
	* gcc.dg/pr34351.c: New.

Added:
    trunk/gcc/testsuite/gcc.dg/pr34351.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-opts.c
    trunk/gcc/c.opt
    trunk/gcc/common.opt
    trunk/gcc/doc/invoke.texi
    trunk/gcc/testsuite/ChangeLog

Comment 5 Manuel López-Ibáñez 2008-02-26 14:06:18 UTC
Fixed in 4.4.