invoke.texi: Document new switches -Wno-shadow-ivar, -fno-local-ivars and -fivar-visibility.
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. Now, actuatally add the files.... From-SVN: r210339
This commit is contained in:
parent
16e60fff0b
commit
f636f886d2
24
gcc/testsuite/objc.dg/ivar-scope-1.m
Normal file
24
gcc/testsuite/objc.dg/ivar-scope-1.m
Normal file
@ -0,0 +1,24 @@
|
||||
/* Test instance variable scope. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MyClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
- (void) test;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
- (void) test
|
||||
{
|
||||
int a;
|
||||
|
||||
/* Make sure instance variables do have local scope when
|
||||
-fno-local-ivar isn't specified. */
|
||||
|
||||
a = self->someivar; /* No warning or error. */
|
||||
a = someivar; /* No error. */
|
||||
}
|
||||
@end
|
34
gcc/testsuite/objc.dg/ivar-scope-2.m
Normal file
34
gcc/testsuite/objc.dg/ivar-scope-2.m
Normal file
@ -0,0 +1,34 @@
|
||||
/* Test instance variable scope. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fno-local-ivars" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MyClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
- (void) testscope;
|
||||
- (void) testshadowing;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
- (void) testscope
|
||||
{
|
||||
int a;
|
||||
|
||||
a = self->someivar; /* No warning or error. */
|
||||
a = someivar; /* { dg-error ".someivar. undeclared" } */
|
||||
}
|
||||
|
||||
- (void) testshadowing
|
||||
{
|
||||
int someivar = 1;
|
||||
int a;
|
||||
|
||||
/* Since instance variables don't have local scope no shadowing
|
||||
should occur. */
|
||||
|
||||
a = someivar; /* No warning. */
|
||||
}
|
||||
@end
|
60
gcc/testsuite/objc.dg/ivar-scope-3.m
Normal file
60
gcc/testsuite/objc.dg/ivar-scope-3.m
Normal file
@ -0,0 +1,60 @@
|
||||
/* Test instance variable scope. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-additional-options "-Wno-shadow-ivar" } */
|
||||
#include "../objc-obj-c++-shared/TestsuiteObject.m"
|
||||
#include <objc/objc.h>
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
int someivar = 1;
|
||||
|
||||
@interface MyClass: TestsuiteObject
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
- (int) get;
|
||||
- (int) getHidden;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
- init
|
||||
{
|
||||
someivar = 2;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (int) get
|
||||
{
|
||||
return someivar;
|
||||
}
|
||||
|
||||
- (int) getHidden
|
||||
{
|
||||
int someivar = 3;
|
||||
|
||||
return someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
int main(void)
|
||||
{
|
||||
MyClass *object;
|
||||
|
||||
object = [[MyClass alloc] init];
|
||||
|
||||
/* Check whether the instance variable hides the global variable. */
|
||||
|
||||
if ([object get] != 2) {
|
||||
abort();
|
||||
}
|
||||
|
||||
/* Check whether the local variable hides the instance variable. */
|
||||
|
||||
if ([object getHidden] != 3) {
|
||||
abort();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
83
gcc/testsuite/objc.dg/ivar-scope-4.m
Normal file
83
gcc/testsuite/objc.dg/ivar-scope-4.m
Normal file
@ -0,0 +1,83 @@
|
||||
/* Test instance variable scope. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-additional-options "-Wno-shadow-ivar -fno-local-ivars" } */
|
||||
#include "../objc-obj-c++-shared/runtime.h"
|
||||
#include <objc/objc.h>
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
int someivar = 1;
|
||||
|
||||
/* The testsuite object depends on local variable scope so we need to
|
||||
implement our own minimal base object here. */
|
||||
|
||||
@interface MyClass
|
||||
{
|
||||
Class isa;
|
||||
int someivar;
|
||||
}
|
||||
|
||||
+ (id) alloc;
|
||||
- (id) init;
|
||||
- (int) getGlobal;
|
||||
- (int) getInstance;
|
||||
- (int) getHidden;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
+ (id) alloc
|
||||
{
|
||||
return class_createInstance (self, 0);
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
self->someivar = 2;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (int) getGlobal
|
||||
{
|
||||
return someivar;
|
||||
}
|
||||
|
||||
- (int) getInstance
|
||||
{
|
||||
return self->someivar;
|
||||
}
|
||||
|
||||
- (int) getHidden
|
||||
{
|
||||
int someivar = 3;
|
||||
|
||||
return someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
int main(void)
|
||||
{
|
||||
id object;
|
||||
|
||||
object = [[MyClass alloc] init];
|
||||
|
||||
/* Check for aliasing between instance variable and global
|
||||
variable. */
|
||||
|
||||
if ([object getGlobal] != 1) {
|
||||
abort();
|
||||
}
|
||||
|
||||
if ([object getInstance] != 2) {
|
||||
abort();
|
||||
}
|
||||
|
||||
/* Check whether the local variable hides the instance variable. */
|
||||
|
||||
if ([object getHidden] != 3) {
|
||||
abort();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
33
gcc/testsuite/objc.dg/ivar-visibility-1.m
Normal file
33
gcc/testsuite/objc.dg/ivar-visibility-1.m
Normal file
@ -0,0 +1,33 @@
|
||||
/* Test instance variable visibility. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MySuperClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MySuperClass
|
||||
@end
|
||||
|
||||
|
||||
@interface MyClass : MySuperClass
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
@end
|
||||
|
||||
@interface MyOtherClass
|
||||
- (void) test: (MyClass *) object;
|
||||
@end
|
||||
|
||||
@implementation MyOtherClass
|
||||
- (void) test: (MyClass *) object
|
||||
{
|
||||
int a;
|
||||
|
||||
a = object->someivar; /* { dg-error "instance variable .someivar. is declared protected" } */
|
||||
}
|
||||
@end
|
34
gcc/testsuite/objc.dg/ivar-visibility-2.m
Normal file
34
gcc/testsuite/objc.dg/ivar-visibility-2.m
Normal file
@ -0,0 +1,34 @@
|
||||
/* Test instance variable visibility. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fivar-visibility=protected" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MySuperClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MySuperClass
|
||||
@end
|
||||
|
||||
|
||||
@interface MyClass : MySuperClass
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
@end
|
||||
|
||||
@interface MyOtherClass
|
||||
- (void) test: (MyClass *) object;
|
||||
@end
|
||||
|
||||
@implementation MyOtherClass
|
||||
- (void) test: (MyClass *) object
|
||||
{
|
||||
int a;
|
||||
|
||||
a = object->someivar; /* { dg-error "instance variable .someivar. is declared protected" } */
|
||||
}
|
||||
@end
|
34
gcc/testsuite/objc.dg/ivar-visibility-3.m
Normal file
34
gcc/testsuite/objc.dg/ivar-visibility-3.m
Normal file
@ -0,0 +1,34 @@
|
||||
/* Test instance variable visibility. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fivar-visibility=private" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MySuperClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MySuperClass
|
||||
@end
|
||||
|
||||
|
||||
@interface MyClass : MySuperClass
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
@end
|
||||
|
||||
@interface MyOtherClass
|
||||
- (void) test: (MyClass *) object;
|
||||
@end
|
||||
|
||||
@implementation MyOtherClass
|
||||
- (void) test: (MyClass *) object
|
||||
{
|
||||
int a;
|
||||
|
||||
a = object->someivar; /* { dg-error "instance variable .someivar. is declared private" } */
|
||||
}
|
||||
@end
|
36
gcc/testsuite/objc.dg/ivar-visibility-4.m
Normal file
36
gcc/testsuite/objc.dg/ivar-visibility-4.m
Normal file
@ -0,0 +1,36 @@
|
||||
/* Test instance variable visibility. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fivar-visibility=public" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MySuperClass
|
||||
{
|
||||
int someivar;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MySuperClass
|
||||
@end
|
||||
|
||||
|
||||
@interface MyClass : MySuperClass
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
@end
|
||||
|
||||
@interface MyOtherClass
|
||||
- (void) test: (MyClass *) object;
|
||||
@end
|
||||
|
||||
@implementation MyOtherClass
|
||||
- (void) test: (MyClass *) object
|
||||
{
|
||||
int a;
|
||||
|
||||
/* someivar is public so we shouldn't get any errors here. */
|
||||
|
||||
a = object->someivar;
|
||||
}
|
||||
@end
|
33
gcc/testsuite/objc.dg/shadow-1.m
Normal file
33
gcc/testsuite/objc.dg/shadow-1.m
Normal file
@ -0,0 +1,33 @@
|
||||
/* Test disabling of warnings for shadowing instance variables. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-Wno-shadow-ivar" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MyClass
|
||||
{
|
||||
@private
|
||||
int private;
|
||||
|
||||
@protected
|
||||
int protected;
|
||||
|
||||
@public
|
||||
int public;
|
||||
}
|
||||
- (void) test;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
- (void) test
|
||||
{
|
||||
int private = 12;
|
||||
int protected = 12;
|
||||
int public = 12;
|
||||
int a;
|
||||
|
||||
a = private; /* No warning. */
|
||||
a = protected; /* No warning. */
|
||||
a = public; /* No warning. */
|
||||
}
|
||||
@end
|
33
gcc/testsuite/objc.dg/shadow-2.m
Normal file
33
gcc/testsuite/objc.dg/shadow-2.m
Normal file
@ -0,0 +1,33 @@
|
||||
/* Test disabling of warnings for shadowing instance variables. */
|
||||
/* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-Wno-shadow" } */
|
||||
#include <objc/objc.h>
|
||||
|
||||
@interface MyClass
|
||||
{
|
||||
@private
|
||||
int private;
|
||||
|
||||
@protected
|
||||
int protected;
|
||||
|
||||
@public
|
||||
int public;
|
||||
}
|
||||
- (void) test;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
- (void) test
|
||||
{
|
||||
int private = 12;
|
||||
int protected = 12;
|
||||
int public = 12;
|
||||
int a;
|
||||
|
||||
a = private; /* No warning. */
|
||||
a = protected; /* No warning. */
|
||||
a = public; /* No warning. */
|
||||
}
|
||||
@end
|
Loading…
Reference in New Issue
Block a user