This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug objc/56044] Add dialect option to gobjc to prevent instance variables from posing as local variables inside methods.


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

--- Comment #7 from Dimitris Papavasiliou <dpapavas at gmail dot com> ---
I made a patch for this (as well as some other minor features) and submitted it
to the gcc-patches list but, since it was ignored there I'm also attaching it
here in case someone decides to look at it at some point.

The following is the message I posted in the list with the details of the
patch:

---------

First, let me say that I have consciously broken most of the rules mentioned
about patch submission at gcc.gnu.org but I have done so in order to spare
myself from wasting time to provide a proper patch in case the implemented
functionality is not deemed worthy of approval and adoption into GCC.  If any
of the implemented switches prove to be welcome I'll be more than happy to
split them into separate patches, add test-cases and add ChangLog entries as
needed.

Two of these switches are related to a feature request I submitted a while ago,
Bug 56044 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56044).  I won't
reproduce the entire argument here since it is available in the feature
request. The relevant functionality in the patch comes in the form of two
switches:

-Wshadow-ivars which controls the "local declaration of âsomevarâ hides
instance variable" warning which curiously is enabled by default instead of
being controlled at least by -Wshadow.  The patch changes it so that this
warning can be enabled and disabled specifically through -Wshadow-ivars as well
as with all other shadowing-related warnings through -Wshadow.

The reason for the extra switch is that, while searching through the Internet
for a solution to this problem I have found out that other people are
inconvenienced by this particular warning as well so it might be useful to be
able to turn it off while keeping all the other shadowing-related warnings
enabled.

-flocal-ivars which when true, as it is by default, treats instance variables
as having local scope.  If false (-fno-local-ivars) instance variables must
always be referred to as self->ivarname and references of ivarname resolve to
the local or global scope as usual.

I've also taken the opportunity of adding another switch unrelated to the above
but related to instance variables:

-fivar-visibility which can be set to either private, protected (the default),
public and package.  This sets the default instance variable visibility which
normally is implicitly protected.  My use-case for it is basically to be able
to set it to public and thus effectively disable this visibility mechanism
altogether which I find no use for and therefore have to circumvent.  I'm not
sure if anyone else feels the same way towards this but I figured it was worth
a try.

I'm attaching a preliminary patch against the current revision in case anyone
wants to have a look.  The changes are very small and any blatant mistakes
should be immediately obvious.  I have to admit to having virtually no
knowledge of the internals of GCC but I have tried to keep in line with
formatting guidelines and general style as well as looking up the particulars
of the way options are handled in the available documentation to avoid blind
copy-pasting.  I have also tried to test the functionality both in my own
(relatively large, or at least not too small) project and with small test
programs and everything works as expected.  Finallly, I tried running the tests
too but these fail to complete both in the patched and unpatched version,
possibly due to the way I've configured GCC.

------

Dimitris

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]