diff options
author | Tom Wood <wood@gnu.org> | 1993-05-01 10:48:31 +0000 |
---|---|---|
committer | Tom Wood <wood@gnu.org> | 1993-05-01 10:48:31 +0000 |
commit | a878dab7efe69318fa71d9c7249eaaf4e150b6c8 (patch) | |
tree | acd7a164e29bdbeee353718f6085a6347cc53882 | |
parent | 257e61ed70f52c514f9486ee4d37a501245a069b (diff) | |
download | gcc-a878dab7efe69318fa71d9c7249eaaf4e150b6c8.zip gcc-a878dab7efe69318fa71d9c7249eaaf4e150b6c8.tar.gz gcc-a878dab7efe69318fa71d9c7249eaaf4e150b6c8.tar.bz2 |
(build_ivar_reference): Warn when a class method
refers to an instance variable.
From-SVN: r4294
-rw-r--r-- | gcc/objc/objc-act.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 6a973b6..0968f1e 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -4739,7 +4739,20 @@ build_ivar_reference (id) tree id; { if (TREE_CODE (method_context) == CLASS_METHOD_DECL) - TREE_TYPE (self_decl) = instance_type; /* cast */ + { + /* Historically, a class method that produced objects (factory + method) would assign `self' to the instance that it + allocated. This would effectively turn the class method into + an instance method. Following this assignment, the instance + variables could be accessed. That practice, while safe, + violates the simple rule that a class method should not refer + to an instance variable. It's better to catch the cases + where this is done unknowingly than to support the above + paradigm. */ + warning ("instance variable `%s' accessed in class method", + IDENTIFIER_POINTER (id)); + TREE_TYPE (self_decl) = instance_type; /* cast */ + } return build_component_ref (build_indirect_ref (self_decl, "->"), id); } |