From dff8943f5465569db3d9f46ceea5ff193c7a5654 Mon Sep 17 00:00:00 2001 From: Dimitris Papavasiliou Date: Mon, 12 May 2014 19:12:27 +0000 Subject: [PATCH] invoke.texi: Document new switches -Wno-shadow-ivar, -fno-local-ivars and -fivar-visibility. 2014-05-12 Dimitris Papavasiliou * 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 | 7 +++++++ gcc/c-family/c.opt | 2 +- gcc/doc/invoke.texi | 35 ++++++++++++++++++++++++++++++----- gcc/testsuite/ChangeLog | 13 +++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b56192..8f87b69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-05-12 Dimitris Papavasiliou + + * 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 * doc/tm.texi: Remove reference to deleted macro. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 7aa9e23..c586e65 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 3fe9d5f..da9694c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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} diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a73f1f5..1bd84cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2014-05-12 Dimitris Papavasiliou + + * 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 PR fortran/60127 -- 2.7.4