invoke.texi: Document new switches -Wno-shadow-ivar, -fno-local-ivars and -fivar...
authorDimitris Papavasiliou <dpapavas@gmail.com>
Mon, 12 May 2014 19:12:27 +0000 (19:12 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Mon, 12 May 2014 19:12:27 +0000 (19:12 +0000)
2014-05-12  Dimitris Papavasiliou  <dpapavas@gmail.com>

    * doc/invoke.texi: Document new switches -Wno-shadow-ivar,
    -fno-local-ivars and -fivar-visibility.
    * c-family/c.opt: Make -Wshadow also implicitly enable
    -Wshadow-ivar.

testsuite:
    * objc.dg/shadow-1.m: New test.
    * objc.dg/shadow-2.m: New test.
    * objc.dg/ivar-scope-1.m: New test.
    * objc.dg/ivar-scope-2.m: New test.
    * objc.dg/ivar-scope-3.m: New test.
    * objc.dg/ivar-scope-4.m: New test.
    * objc.dg/ivar-visibility-1.m: New test.
    * objc.dg/ivar-visibility-2.m: New test.
    * objc.dg/ivar-visibility-3.m: New test.
    * objc.dg/ivar-visibility-4.m: New test.

From-SVN: r210333

gcc/ChangeLog
gcc/c-family/c.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog

index 3b5619265ca5c17309c5e9120cff0d9b5dc4b5a9..8f87b69c2e2ee8c9bd4dd512a946bbca7c28ca7e 100644 (file)
@@ -1,3 +1,10 @@
+2014-05-12  Dimitris Papavasiliou  <dpapavas@gmail.com>
+
+       * doc/invoke.texi: Document new switches -Wno-shadow-ivar,
+       -fno-local-ivars and -fivar-visibility.
+       * c-family/c.opt: Make -Wshadow also implicitly enable
+       -Wshadow-ivar.
+
 2014-05-12  David Wohlferd <dw@LimeGreenSocks.com>
 
        * doc/tm.texi: Remove reference to deleted macro.
index 7aa9e23c10e4977ed4d7e37f5948557f1734d79f..c586e659e0f35cf0e9721c077e685d30786b059e 100644 (file)
@@ -690,7 +690,7 @@ ObjC ObjC++ Var(warn_selector) Warning
 Warn if a selector has multiple methods
 
 Wshadow-ivar
-ObjC ObjC++ Var(warn_shadow_ivar) Init(1) Warning
+ObjC ObjC++ Var(warn_shadow_ivar) EnabledBy(Wshadow) Init(1) Warning
 Warn if a local declaration hides an instance variable
 
 Wsequence-point
index 3fe9d5f302cc80da2ed383e857feac4b8489d433..da9694cbe7a06523e9e8c1e38df0f54fd1c66389 100644 (file)
@@ -216,6 +216,8 @@ Objective-C and Objective-C++ Dialects}.
 -fobjc-gc @gol
 -fobjc-nilcheck @gol
 -fobjc-std=objc1 @gol
+-fno-local-ivars @gol
+-fivar-visibility=@var{public|protected|private|package} @gol
 -freplace-objc-classes @gol
 -fzero-link @gol
 -gen-decls @gol
@@ -262,7 +264,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
 -Wredundant-decls  -Wno-return-local-addr @gol
--Wreturn-type  -Wsequence-point  -Wshadow @gol
+-Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
 -Wsign-compare  -Wsign-conversion -Wfloat-conversion @gol
 -Wsizeof-pointer-memaccess @gol
 -Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol
@@ -2977,6 +2979,22 @@ for individual class implementations to be modified during program execution.
 The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
 regardless of command-line options.
 
+@item -fno-local-ivars
+@opindex fno-local-ivars
+@opindex flocal-ivars
+By default instance variables in Objective-C can be accessed as if
+they were local variables from within the methods of the class they're
+declared in.  This can lead to shadowing between instance variables
+and other variables declared either locally inside a class method or
+globally with the same name.  Specifying the @option{-fno-local-ivars}
+flag disables this behavior thus avoiding variable shadowing issues.
+
+@item -fivar-visibility=@var{public|protected|private|package}
+@opindex fivar-visibility
+Set the default instance variable visibility to the specified option
+so that instance variables declared outside the scope of any access
+modifier directives default to the specified visibility.
+
 @item -gen-decls
 @opindex gen-decls
 Dump interface declarations for all classes seen in the source file to a
@@ -4360,10 +4378,17 @@ Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
 @item -Wshadow
 @opindex Wshadow
 @opindex Wno-shadow
-Warn whenever a local variable or type declaration shadows another variable,
-parameter, type, or class member (in C++), or whenever a built-in function
-is shadowed. Note that in C++, the compiler warns if a local variable
-shadows an explicit typedef, but not if it shadows a struct/class/enum.
+Warn whenever a local variable or type declaration shadows another
+variable, parameter, type, class member (in C++), or instance variable
+(in Objective-C) or whenever a built-in function is shadowed. Note
+that in C++, the compiler warns if a local variable shadows an
+explicit typedef, but not if it shadows a struct/class/enum.
+
+@item -Wno-shadow-ivar @r{(Objective-C only)}
+@opindex Wno-shadow-ivar
+@opindex Wshadow-ivar
+Do not warn whenever a local variable shadows an instance variable in an
+Objective-C method.
 
 @item -Wlarger-than=@var{len}
 @opindex Wlarger-than=@var{len}
index a73f1f5d8fdffdee5ca462dbbee75161be497a60..1bd84cfd9f1b2725e1a1de2652bb8cfd8467461f 100644 (file)
@@ -1,3 +1,16 @@
+2014-05-12  Dimitris Papavasiliou  <dpapavas@gmail.com>
+
+       * objc.dg/shadow-1.m: New test.
+       * objc.dg/shadow-2.m: New test.
+       * objc.dg/ivar-scope-1.m: New test.
+       * objc.dg/ivar-scope-2.m: New test.
+       * objc.dg/ivar-scope-3.m: New test.
+       * objc.dg/ivar-scope-4.m: New test.
+       * objc.dg/ivar-visibility-1.m: New test.
+       * objc.dg/ivar-visibility-2.m: New test.
+       * objc.dg/ivar-visibility-3.m: New test.
+       * objc.dg/ivar-visibility-4.m: New test.
+
 2014-05-12  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/60127