From f0218890367901a1e7d4353a7bf61b0099480a0c Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Sun, 27 May 2012 16:59:48 +0000 Subject: [PATCH] -Wdeprecated warning to include reference (as a note) to the declaration in this patch. // rdar://10893232 llvm-svn: 157537 --- clang/lib/Sema/SemaDeclAttr.cpp | 6 +++- clang/test/Analysis/retain-release.m | 2 +- clang/test/Sema/attr-deprecated.c | 16 ++++----- clang/test/Sema/attr-unavailable-message.c | 2 +- clang/test/SemaCXX/attr-deprecated.cpp | 42 +++++++++++----------- clang/test/SemaObjC/attr-deprecated.m | 14 ++++---- clang/test/SemaObjC/protocol-attribute.m | 2 +- clang/test/SemaObjC/special-dep-unavail-warning.m | 2 +- .../SemaObjC/warn-deprecated-implementations.m | 2 +- 9 files changed, 46 insertions(+), 42 deletions(-) diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index bc1c3af..4175ec1 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -4489,8 +4489,12 @@ void Sema::EmitDeprecationWarning(NamedDecl *D, StringRef Message, : diag::note_previous_decl) << D->getDeclName(); } else { - if (!UnknownObjCClass) + if (!UnknownObjCClass) { Diag(Loc, diag::warn_deprecated) << D->getDeclName(); + Diag(D->getLocation(), + isa(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); diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m index 1274b19..840f03c 100644 --- a/clang/test/Analysis/retain-release.m +++ b/clang/test/Analysis/retain-release.m @@ -199,7 +199,7 @@ typedef struct IONotificationPort * IONotificationPortRef; 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 ); diff --git a/clang/test/Sema/attr-deprecated.c b/clang/test/Sema/attr-deprecated.c index 4760dab..1c487d2 100644 --- a/clang/test/Sema/attr-deprecated.c +++ b/clang/test/Sema/attr-deprecated.c @@ -1,10 +1,10 @@ // 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}} @@ -17,7 +17,7 @@ int a() { } // 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}} } @@ -32,7 +32,7 @@ int old_fn() { struct foo { - int x __attribute__((deprecated)); + int x __attribute__((deprecated)); // expected-note {{declared here}} }; void test1(struct foo *F) { @@ -41,7 +41,7 @@ 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, @@ -103,8 +103,8 @@ foo_dep test17, // expected-warning {{'foo_dep' is 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}} diff --git a/clang/test/Sema/attr-unavailable-message.c b/clang/test/Sema/attr-unavailable-message.c index b2956d8..745ef14 100644 --- a/clang/test/Sema/attr-unavailable-message.c +++ b/clang/test/Sema/attr-unavailable-message.c @@ -30,7 +30,7 @@ void unavail(void) { // rdar://10201690 enum foo { a = 1, - b __attribute__((deprecated())) = 2, + b __attribute__((deprecated())) = 2, // expected-note {{declared here}} c = 3 }__attribute__((deprecated())); diff --git a/clang/test/SemaCXX/attr-deprecated.cpp b/clang/test/SemaCXX/attr-deprecated.cpp index 46568aa..2d9624e 100644 --- a/clang/test/SemaCXX/attr-deprecated.cpp +++ b/clang/test/SemaCXX/attr-deprecated.cpp @@ -1,10 +1,10 @@ // 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) @@ -26,7 +26,7 @@ void A::h(A* a) } struct B { - virtual void f() __attribute__((deprecated)); + virtual void f() __attribute__((deprecated)); // expected-note 4 {{declared here}} void g(); }; @@ -68,20 +68,20 @@ void f(D* d) { // 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}} @@ -91,9 +91,9 @@ namespace test1 { // 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); @@ -120,12 +120,12 @@ namespace test2 { 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; @@ -143,9 +143,9 @@ namespace test4 { 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 &); }; @@ -163,7 +163,7 @@ namespace test4 { namespace test5 { struct A { - operator int() __attribute__((deprecated)); + operator int() __attribute__((deprecated)); // expected-note 2 {{declared here}} operator long(); }; void test1(A a) { @@ -193,8 +193,8 @@ namespace test5 { // 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}} @@ -202,7 +202,7 @@ namespace test6 { } enum B { - b0 __attribute__((deprecated)), + b0 __attribute__((deprecated)), // expected-note {{declared here}} b1 }; void testB() { @@ -212,8 +212,8 @@ namespace test6 { } template struct C { - enum __attribute__((deprecated)) Enum { - c0 + enum __attribute__((deprecated)) Enum { // expected-note {{declared here}} + c0 // expected-note {{declared here}} }; }; void testC() { @@ -224,7 +224,7 @@ namespace test6 { template struct D { enum Enum { d0, - d1 __attribute__((deprecated)), + d1 __attribute__((deprecated)), // expected-note {{declared here}} }; }; void testD() { diff --git a/clang/test/SemaObjC/attr-deprecated.m b/clang/test/SemaObjC/attr-deprecated.m index db0b958..d6a56e5 100644 --- a/clang/test/SemaObjC/attr-deprecated.m +++ b/clang/test/SemaObjC/attr-deprecated.m @@ -1,10 +1,10 @@ // 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 @@ -42,7 +42,7 @@ @end @protocol P -- (void)p __attribute__((deprecated)); +- (void)p __attribute__((deprecated)); // expected-note {{declared here}} @end void t1(A *a) @@ -71,7 +71,7 @@ void t4(Class c) @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 @@ -83,7 +83,7 @@ int t5() { __attribute ((deprecated)) -@interface DEPRECATED { +@interface DEPRECATED { // expected-note 2 {{declared here}} @public int ivar; DEPRECATED *ivar2; // no warning. } @@ -107,7 +107,7 @@ __attribute ((deprecated)) @interface Test2 -@property int test2 __attribute__((deprecated)); +@property int test2 __attribute__((deprecated)); // expected-note 4 {{declared here}} @end void test(Test2 *foo) { diff --git a/clang/test/SemaObjC/protocol-attribute.m b/clang/test/SemaObjC/protocol-attribute.m index 178774c..a2414c4 100644 --- a/clang/test/SemaObjC/protocol-attribute.m +++ b/clang/test/SemaObjC/protocol-attribute.m @@ -6,7 +6,7 @@ __attribute ((unavailable)) Class cFw = 0; // expected-error {{'FwProto' is unavailable}} -__attribute ((deprecated)) @protocol MyProto1 +__attribute ((deprecated)) @protocol MyProto1 // expected-note 5 {{declared here}} @end @protocol Proto2 // expected-warning {{'MyProto1' is deprecated}} diff --git a/clang/test/SemaObjC/special-dep-unavail-warning.m b/clang/test/SemaObjC/special-dep-unavail-warning.m index 754bf5f..a179647 100644 --- a/clang/test/SemaObjC/special-dep-unavail-warning.m +++ b/clang/test/SemaObjC/special-dep-unavail-warning.m @@ -45,7 +45,7 @@ void test(C *c) { // rdar://10268422 __attribute ((deprecated)) -@interface DEPRECATED +@interface DEPRECATED // expected-note {{declared here}} +(id)new; @end diff --git a/clang/test/SemaObjC/warn-deprecated-implementations.m b/clang/test/SemaObjC/warn-deprecated-implementations.m index 919b221..5f7c2fd 100644 --- a/clang/test/SemaObjC/warn-deprecated-implementations.m +++ b/clang/test/SemaObjC/warn-deprecated-implementations.m @@ -20,7 +20,7 @@ @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}} -- 2.7.4