: diag::note_previous_decl) << D->getDeclName();
}
else {
- if (!UnknownObjCClass)
+ if (!UnknownObjCClass) {
Diag(Loc, diag::warn_deprecated) << D->getDeclName();
+ Diag(D->getLocation(),
+ isa<ObjCMethodDecl>(D) ? diag::note_method_declared_at
+ : diag::note_previous_decl) << D->getDeclName();
+ }
else {
Diag(Loc, diag::warn_deprecated_fwdclass_message) << D->getDeclName();
Diag(UnknownObjCClass->getLocation(), diag::note_forward_class);
typedef void (*IOServiceMatchingCallback)( void * refcon, io_iterator_t iterator );
io_service_t IOServiceGetMatchingService( mach_port_t masterPort, CFDictionaryRef matching );
kern_return_t IOServiceGetMatchingServices( mach_port_t masterPort, CFDictionaryRef matching, io_iterator_t * existing );
-kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated));
+kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' declared here}}
kern_return_t IOServiceAddMatchingNotification( IONotificationPortRef notifyPort, const io_name_t notificationType, CFDictionaryRef matching, IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification );
CFMutableDictionaryRef IOServiceMatching( const char * name );
CFMutableDictionaryRef IOServiceNameMatching( const char * name );
// RUN: %clang_cc1 %s -verify -fsyntax-only
-int f() __attribute__((deprecated));
+int f() __attribute__((deprecated)); // expected-note {{declared here}}
void g() __attribute__((deprecated));
-void g();
+void g(); // expected-note {{declared here}}
-extern int var __attribute__((deprecated));
+extern int var __attribute__((deprecated)); // expected-note {{declared here}}
int a() {
int (*ptr)() = f; // expected-warning {{'f' is deprecated}}
}
// test if attributes propagate to variables
-extern int var;
+extern int var; // expected-note {{declared here}}
int w() {
return var; // expected-warning {{'var' is deprecated}}
}
struct foo {
- int x __attribute__((deprecated));
+ int x __attribute__((deprecated)); // expected-note {{declared here}}
};
void test1(struct foo *F) {
struct foo f2 = { 17 }; // expected-warning {{'x' is deprecated}}
}
-typedef struct foo foo_dep __attribute__((deprecated));
+typedef struct foo foo_dep __attribute__((deprecated)); // expected-note 3 {{declared here}}
foo_dep *test2; // expected-warning {{'foo_dep' is deprecated}}
struct __attribute__((deprecated,
// rdar://problem/8518751
enum __attribute__((deprecated)) Test20 {
- test20_a __attribute__((deprecated)),
- test20_b
+ test20_a __attribute__((deprecated)), // expected-note {{declared here}}
+ test20_b // expected-note {{declared here}}
};
void test20() {
enum Test20 f; // expected-warning {{'Test20' is deprecated}}
// rdar://10201690
enum foo {
a = 1,
- b __attribute__((deprecated())) = 2,
+ b __attribute__((deprecated())) = 2, // expected-note {{declared here}}
c = 3
}__attribute__((deprecated()));
// RUN: %clang_cc1 %s -verify -fsyntax-only
class A {
- void f() __attribute__((deprecated));
+ void f() __attribute__((deprecated)); // expected-note 2 {{declared here}}
void g(A* a);
void h(A* a) __attribute__((deprecated));
- int b __attribute__((deprecated));
+ int b __attribute__((deprecated)); // expected-note 2 {{declared here}}
};
void A::g(A* a)
}
struct B {
- virtual void f() __attribute__((deprecated));
+ virtual void f() __attribute__((deprecated)); // expected-note 4 {{declared here}}
void g();
};
// Overloaded namespace members.
namespace test1 {
- void foo(int) __attribute__((deprecated));
+ void foo(int) __attribute__((deprecated)); // expected-note {{declared here}}
void test1() { foo(10); } // expected-warning {{deprecated}}
- void foo(short) __attribute__((deprecated));
+ void foo(short) __attribute__((deprecated)); // expected-note {{declared here}}
void test2(short s) { foo(s); } // expected-warning {{deprecated}}
void foo(long);
void test3(long l) { foo(l); }
struct A {
- friend void foo(A*) __attribute__((deprecated));
+ friend void foo(A*) __attribute__((deprecated)); // expected-note {{declared here}}
};
void test4(A *a) { foo(a); } // expected-warning {{deprecated}}
namespace ns {
struct Foo {};
- void foo(const Foo &f) __attribute__((deprecated));
+ void foo(const Foo &f) __attribute__((deprecated)); // expected-note {{declared here}}
}
void test5() {
foo(ns::Foo()); // expected-warning {{deprecated}}
// Overloaded class members.
namespace test2 {
struct A {
- void foo(int) __attribute__((deprecated));
+ void foo(int) __attribute__((deprecated)); // expected-note 2 {{declared here}}
void foo(long);
- static void bar(int) __attribute__((deprecated));
+ static void bar(int) __attribute__((deprecated)); // expected-note 3 {{declared here}}
static void bar(long);
void test2(int i, long l);
namespace test3 {
struct A {
void operator*(const A &);
- void operator*(int) __attribute__((deprecated));
+ void operator*(int) __attribute__((deprecated)); // expected-note {{declared here}}
void operator-(const A &) const;
};
void operator+(const A &, const A &);
- void operator+(const A &, int) __attribute__((deprecated));
- void operator-(const A &, int) __attribute__((deprecated));
+ void operator+(const A &, int) __attribute__((deprecated)); // expected-note {{declared here}}
+ void operator-(const A &, int) __attribute__((deprecated)); // expected-note {{declared here}}
void test() {
A a, b;
struct A {
typedef void (*intfn)(int);
typedef void (*unintfn)(unsigned);
- operator intfn() __attribute__((deprecated));
+ operator intfn() __attribute__((deprecated)); // expected-note {{declared here}}
operator unintfn();
- void operator ()(A &) __attribute__((deprecated));
+ void operator ()(A &) __attribute__((deprecated)); // expected-note {{declared here}}
void operator ()(const A &);
};
namespace test5 {
struct A {
- operator int() __attribute__((deprecated));
+ operator int() __attribute__((deprecated)); // expected-note 2 {{declared here}}
operator long();
};
void test1(A a) {
// rdar://problem/8518751
namespace test6 {
- enum __attribute__((deprecated)) A {
- a0
+ enum __attribute__((deprecated)) A { // expected-note {{declared here}}
+ a0 // expected-note {{declared here}}
};
void testA() {
A x; // expected-warning {{'A' is deprecated}}
}
enum B {
- b0 __attribute__((deprecated)),
+ b0 __attribute__((deprecated)), // expected-note {{declared here}}
b1
};
void testB() {
}
template <class T> struct C {
- enum __attribute__((deprecated)) Enum {
- c0
+ enum __attribute__((deprecated)) Enum { // expected-note {{declared here}}
+ c0 // expected-note {{declared here}}
};
};
void testC() {
template <class T> struct D {
enum Enum {
d0,
- d1 __attribute__((deprecated)),
+ d1 __attribute__((deprecated)), // expected-note {{declared here}}
};
};
void testD() {
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
@interface A {
- int X __attribute__((deprecated));
+ int X __attribute__((deprecated)); // expected-note 2 {{declared here}}
}
-+ (void)F __attribute__((deprecated));
-- (void)f __attribute__((deprecated));
++ (void)F __attribute__((deprecated)); // expected-note 2 {{declared here}}
+- (void)f __attribute__((deprecated)); // expected-note 4 {{declared here}}
@end
@implementation A
@end
@protocol P
-- (void)p __attribute__((deprecated));
+- (void)p __attribute__((deprecated)); // expected-note {{declared here}}
@end
void t1(A *a)
@interface Bar
-@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated));
+@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated)); // expected-note 2 {{declared here}}
- (void) MySetter : (int) value;
@end
__attribute ((deprecated))
-@interface DEPRECATED {
+@interface DEPRECATED { // expected-note 2 {{declared here}}
@public int ivar;
DEPRECATED *ivar2; // no warning.
}
@interface Test2
-@property int test2 __attribute__((deprecated));
+@property int test2 __attribute__((deprecated)); // expected-note 4 {{declared here}}
@end
void test(Test2 *foo) {
Class <FwProto> cFw = 0; // expected-error {{'FwProto' is unavailable}}
-__attribute ((deprecated)) @protocol MyProto1
+__attribute ((deprecated)) @protocol MyProto1 // expected-note 5 {{declared here}}
@end
@protocol Proto2 <MyProto1> // expected-warning {{'MyProto1' is deprecated}}
// rdar://10268422
__attribute ((deprecated))
-@interface DEPRECATED
+@interface DEPRECATED // expected-note {{declared here}}
+(id)new;
@end
@end
__attribute__((deprecated))
-@interface CL // expected-note 2 {{class declared here}}
+@interface CL // expected-note 2 {{class declared here}} // expected-note 2 {{declared here}}
@end
@implementation CL // expected-warning {{Implementing deprecated class}}