mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 00:01:21 +08:00
flag-types.h (enum ivar_visibility): Add.
2014-04-24 Dimitris Papavasiliou <dpapavas@gmail.com> * flag-types.h (enum ivar_visibility): Add. c-family: * c.opt (Wshadow-ivar, flocal-ivars, fivar-visibility): Add. objc: * objc-act.c (objc_ivar_visibility, objc_default_ivar_visibility): Add. (objc_init): Initialize objc_default_ivar_visibility. (objc_start_class_interface): Use objc_default_ivar_visibility. (objc_start_class_implementation): Likewise. (objc_lookup_ivar): Implement -fno-local-ivars. From-SVN: r209753
This commit is contained in:
parent
07fb62554c
commit
dcaaa5a04a
@ -1,3 +1,7 @@
|
||||
2014-04-24 Dimitris Papavasiliou <dpapavas@gmail.com>
|
||||
|
||||
* flag-types.h (enum ivar_visibility): Add.
|
||||
|
||||
2014-04-24 Trevor Saunders <tsaunders@mozilla.com>
|
||||
|
||||
* config/sh/sh_treg_combine.c (sh_treg_combine::execute): Take
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-04-24 Dimitris Papavasiliou <dpapavas@gmail.com>
|
||||
|
||||
* c.opt (Wshadow-ivar, flocal-ivars, fivar-visibility): Add.
|
||||
|
||||
2014-04-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
* c-common.c (handle_tm_wrap_attribute): Tweak error message.
|
||||
|
@ -684,6 +684,10 @@ Wselector
|
||||
ObjC ObjC++ Var(warn_selector) Warning
|
||||
Warn if a selector has multiple methods
|
||||
|
||||
Wshadow-ivar
|
||||
ObjC ObjC++ Var(warn_shadow_ivar) Init(-1) Warning
|
||||
Warn if a local declaration hides an instance variable
|
||||
|
||||
Wsequence-point
|
||||
C ObjC C++ ObjC++ Var(warn_sequence_point) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
|
||||
Warn about possible violations of sequence point rules
|
||||
@ -1038,6 +1042,29 @@ fnil-receivers
|
||||
ObjC ObjC++ Var(flag_nil_receivers) Init(1)
|
||||
Assume that receivers of Objective-C messages may be nil
|
||||
|
||||
flocal-ivars
|
||||
ObjC ObjC++ Var(flag_local_ivars) Init(1)
|
||||
Allow access to instance variables as if they were local declarations within instance method implementations.
|
||||
|
||||
fivar-visibility=
|
||||
ObjC ObjC++ Joined RejectNegative Enum(ivar_visibility) Var(default_ivar_visibility) Init(IVAR_VISIBILITY_PROTECTED)
|
||||
-fvisibility=[private|protected|public|package] Set the default symbol visibility
|
||||
|
||||
Enum
|
||||
Name(ivar_visibility) Type(enum ivar_visibility) UnknownError(unrecognized ivar visibility value %qs)
|
||||
|
||||
EnumValue
|
||||
Enum(ivar_visibility) String(private) Value(IVAR_VISIBILITY_PRIVATE)
|
||||
|
||||
EnumValue
|
||||
Enum(ivar_visibility) String(protected) Value(IVAR_VISIBILITY_PROTECTED)
|
||||
|
||||
EnumValue
|
||||
Enum(ivar_visibility) String(public) Value(IVAR_VISIBILITY_PUBLIC)
|
||||
|
||||
EnumValue
|
||||
Enum(ivar_visibility) String(package) Value(IVAR_VISIBILITY_PACKAGE)
|
||||
|
||||
fnonansi-builtins
|
||||
C++ ObjC++ Var(flag_no_nonansi_builtin, 0)
|
||||
|
||||
|
@ -104,6 +104,16 @@ enum symbol_visibility
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Enumerate Objective-c instance variable visibility settings. */
|
||||
|
||||
enum ivar_visibility
|
||||
{
|
||||
IVAR_VISIBILITY_PRIVATE,
|
||||
IVAR_VISIBILITY_PROTECTED,
|
||||
IVAR_VISIBILITY_PUBLIC,
|
||||
IVAR_VISIBILITY_PACKAGE
|
||||
};
|
||||
|
||||
/* The stack reuse level. */
|
||||
enum stack_reuse_level
|
||||
{
|
||||
|
@ -1,3 +1,11 @@
|
||||
2014-04-24 Dimitris Papavasiliou <dpapavas@gmail.com>
|
||||
|
||||
* objc-act.c (objc_ivar_visibility, objc_default_ivar_visibility): Add.
|
||||
(objc_init): Initialize objc_default_ivar_visibility.
|
||||
(objc_start_class_interface): Use objc_default_ivar_visibility.
|
||||
(objc_start_class_implementation): Likewise.
|
||||
(objc_lookup_ivar): Implement -fno-local-ivars.
|
||||
|
||||
2014-01-31 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59963
|
||||
|
@ -226,7 +226,7 @@ struct imp_entry *imp_list = 0;
|
||||
int imp_count = 0; /* `@implementation' */
|
||||
int cat_count = 0; /* `@category' */
|
||||
|
||||
objc_ivar_visibility_kind objc_ivar_visibility;
|
||||
objc_ivar_visibility_kind objc_ivar_visibility, objc_default_ivar_visibility;
|
||||
|
||||
/* Use to generate method labels. */
|
||||
static int method_slot = 0;
|
||||
@ -394,6 +394,22 @@ objc_init (void)
|
||||
if (!ok)
|
||||
return false;
|
||||
|
||||
/* Determine the default visibility for instance variables. */
|
||||
switch (default_ivar_visibility)
|
||||
{
|
||||
case IVAR_VISIBILITY_PRIVATE:
|
||||
objc_default_ivar_visibility = OBJC_IVAR_VIS_PRIVATE;
|
||||
break;
|
||||
case IVAR_VISIBILITY_PUBLIC:
|
||||
objc_default_ivar_visibility = OBJC_IVAR_VIS_PUBLIC;
|
||||
break;
|
||||
case IVAR_VISIBILITY_PACKAGE:
|
||||
objc_default_ivar_visibility = OBJC_IVAR_VIS_PACKAGE;
|
||||
break;
|
||||
default:
|
||||
objc_default_ivar_visibility = OBJC_IVAR_VIS_PROTECTED;
|
||||
}
|
||||
|
||||
/* Generate general types and push runtime-specific decls to file scope. */
|
||||
synth_module_prologue ();
|
||||
|
||||
@ -568,7 +584,7 @@ objc_start_class_interface (tree klass, tree super_class,
|
||||
objc_interface_context
|
||||
= objc_ivar_context
|
||||
= start_class (CLASS_INTERFACE_TYPE, klass, super_class, protos, attributes);
|
||||
objc_ivar_visibility = OBJC_IVAR_VIS_PROTECTED;
|
||||
objc_ivar_visibility = objc_default_ivar_visibility;
|
||||
}
|
||||
|
||||
void
|
||||
@ -646,7 +662,7 @@ objc_start_class_implementation (tree klass, tree super_class)
|
||||
= objc_ivar_context
|
||||
= start_class (CLASS_IMPLEMENTATION_TYPE, klass, super_class, NULL_TREE,
|
||||
NULL_TREE);
|
||||
objc_ivar_visibility = OBJC_IVAR_VIS_PROTECTED;
|
||||
objc_ivar_visibility = objc_default_ivar_visibility;
|
||||
}
|
||||
|
||||
void
|
||||
@ -9366,6 +9382,12 @@ objc_lookup_ivar (tree other, tree id)
|
||||
&& other && other != error_mark_node)
|
||||
return other;
|
||||
|
||||
/* Don't look up the ivar if the user has explicitly advised against
|
||||
it with -fno-local-ivars. */
|
||||
|
||||
if (!flag_local_ivars)
|
||||
return other;
|
||||
|
||||
/* Look up the ivar, but do not use it if it is not accessible. */
|
||||
ivar = is_ivar (objc_ivar_chain, id);
|
||||
|
||||
@ -9382,8 +9404,11 @@ objc_lookup_ivar (tree other, tree id)
|
||||
&& !DECL_FILE_SCOPE_P (other))
|
||||
#endif
|
||||
{
|
||||
warning (0, "local declaration of %qE hides instance variable", id);
|
||||
|
||||
if (warn_shadow_ivar == 1 || (warn_shadow && warn_shadow_ivar != 0)) {
|
||||
warning (warn_shadow_ivar ? OPT_Wshadow_ivar : OPT_Wshadow,
|
||||
"local declaration of %qE hides instance variable", id);
|
||||
}
|
||||
|
||||
return other;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user