From: Jason Merrill Date: Tue, 18 Nov 2014 13:36:38 +0000 (-0500) Subject: * tree.c (warn_deprecated_use): Show declaration with inform. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=59f1d0db7ae9ccc8049eb2933ff631dab77e1c17;p=gcc.git * tree.c (warn_deprecated_use): Show declaration with inform. From-SVN: r217714 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0bce05ab317..66a2fd36392 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2014-11-18 Jason Merrill + + * tree.c (warn_deprecated_use): Show declaration with inform. + 2014-11-18 Richard Biener PR tree-optimization/63914 diff --git a/gcc/testsuite/g++.dg/warn/deprecated-3.C b/gcc/testsuite/g++.dg/warn/deprecated-3.C index 8b4378c410b..b65beb15bc6 100644 --- a/gcc/testsuite/g++.dg/warn/deprecated-3.C +++ b/gcc/testsuite/g++.dg/warn/deprecated-3.C @@ -10,5 +10,5 @@ struct Foo void g(void) { Foo f; - (int)f; // { dg-warning "'Foo::operator int\\(\\)' is deprecated \\(declared at" } + (int)f; // { dg-warning "'Foo::operator int\\(\\)' is deprecated" } } diff --git a/gcc/testsuite/g++.dg/warn/deprecated-6.C b/gcc/testsuite/g++.dg/warn/deprecated-6.C index 8ce6ac02d52..4afb2841a74 100644 --- a/gcc/testsuite/g++.dg/warn/deprecated-6.C +++ b/gcc/testsuite/g++.dg/warn/deprecated-6.C @@ -5,16 +5,16 @@ typedef int INT1 __attribute__((deprecated("Please avoid INT1"))); typedef INT1 INT2 __attribute__ ((__deprecated__("Please avoid INT2"))); -typedef INT1 INT1a; /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ +typedef INT1 INT1a; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ -INT1 should_be_unavailable; /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ +INT1 should_be_unavailable; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ INT1a should_not_be_deprecated; INT1 f1(void) __attribute__ ((deprecated("Please avoid f1"))); -INT1 f2(void) { return 0; } /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ +INT1 f2(void) { return 0; } /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ INT2 f3(void) __attribute__ ((__deprecated__("Please avoid f3"))); -INT2 f4(void) { return 0; } /* { dg-warning "'INT2' is deprecated .declared at \[^\n\]*: Please avoid INT2" "" } */ +INT2 f4(void) { return 0; } /* { dg-warning "'INT2' is deprecated: Please avoid INT2" "" } */ int f5(INT2 x); /* { dg-warning "'INT2' is deprecated" "" } */ int f6(INT2 x) __attribute__ ((__deprecated__("Please avoid f6"))); @@ -23,7 +23,7 @@ typedef enum Color {red, green, blue} Color __attribute__((deprecated("Please av int g1; int g2 __attribute__ ((deprecated("Please avoid g2"))); int g3 __attribute__ ((__deprecated__("Please avoid g3"))); -Color k; /* { dg-warning "'Color' is deprecated .declared at \[^\n\]*: Please avoid Color" "" } */ +Color k; /* { dg-warning "'Color' is deprecated: Please avoid Color" "" } */ typedef struct { int field1; @@ -44,17 +44,17 @@ typedef struct { int func1() { - INT1 w; /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ + INT1 w; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ int x __attribute__ ((deprecated("Please avoid x"))); int y __attribute__ ((__deprecated__("Please avoid y"))); int z; - int (*pf)() = f1; /* { dg-warning "'INT1 f1\\(\\)' is deprecated .declared at \[^\n\]*: Please avoid f1" "" } */ + int (*pf)() = f1; /* { dg-warning "'INT1 f1\\(\\)' is deprecated: Please avoid f1" "" } */ - z = w + x + y + g1 + g2 + g3; /* { dg-warning "'x' is deprecated .declared at \[^\n\]*: Please avoid x" "" } */ - /* { dg-warning "'y' is deprecated .declared at \[^\n\]*: Please avoid y" "y" { target *-*-* } 53 } */ - /* { dg-warning "'g2' is deprecated .declared at \[^\n\]*: Please avoid g2" "g2" { target *-*-* } 53 } */ - /* { dg-warning "'g3' is deprecated .declared at \[^\n\]*: Please avoid g3" "g3" { target *-*-* } 53 } */ - return f1(); /* { dg-warning "'INT1 f1\\(\\)' is deprecated .declared at \[^\n\]*: Please avoid f1" "f1" } */ + z = w + x + y + g1 + g2 + g3; /* { dg-warning "'x' is deprecated: Please avoid x" "" } */ + /* { dg-warning "'y' is deprecated: Please avoid y" "y" { target *-*-* } 53 } */ + /* { dg-warning "'g2' is deprecated: Please avoid g2" "g2" { target *-*-* } 53 } */ + /* { dg-warning "'g3' is deprecated: Please avoid g3" "g3" { target *-*-* } 53 } */ + return f1(); /* { dg-warning "'INT1 f1\\(\\)' is deprecated: Please avoid f1" "f1" } */ } int func2(S1 *p) @@ -62,29 +62,29 @@ int func2(S1 *p) S1 lp; if (p->field1) - return p->field2; /* { dg-warning "'S1::field2' is deprecated .declared at \[^\n\]*: Please avoid field2" "" } */ - else if (lp.field4) /* { dg-warning "'S1::field4' is deprecated .declared at \[^\n\]*: Please avoid field4" "" } */ + return p->field2; /* { dg-warning "'S1::field2' is deprecated: Please avoid field2" "" } */ + else if (lp.field4) /* { dg-warning "'S1::field4' is deprecated: Please avoid field4" "" } */ return p->field3; p->u1.field5 = g1 + p->field7; - p->u2.field9; /* { dg-warning "'S1::u2' is deprecated .declared at \[^\n\]*: Please avoid u2" "" } */ - return p->u1.field6 + p->field8; /* { dg-warning "'S1::::field6' is deprecated .declared at \[^\n\]*: Please avoid field6" "" } */ - /* { dg-warning "'S1::field8' is deprecated .declared at \[^\n\]*: Please avoid field8" "field8" { target *-*-* } 71 } */ + p->u2.field9; /* { dg-warning "'S1::u2' is deprecated: Please avoid u2" "" } */ + return p->u1.field6 + p->field8; /* { dg-warning "'S1::::field6' is deprecated: Please avoid field6" "" } */ + /* { dg-warning "'S1::field8' is deprecated: Please avoid field8" "field8" { target *-*-* } 71 } */ } struct SS1 { int x; - INT1 y; /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ + INT1 y; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ } __attribute__ ((deprecated("Please avoid SS1"))); -struct SS1 *p1; /* { dg-warning "'SS1' is deprecated .declared at \[^\n\]*: Please avoid SS1" "" } */ +struct SS1 *p1; /* { dg-warning "'SS1' is deprecated: Please avoid SS1" "" } */ struct __attribute__ ((__deprecated__("Please avoid SS2"))) SS2 { int x; - INT1 y; /* { dg-warning "'INT1' is deprecated .declared at \[^\n\]*: Please avoid INT1" "" } */ + INT1 y; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ }; -struct SS2 *p2; /* { dg-warning "'SS2' is deprecated .declared at \[^\n\]*: Please avoid SS2" "" } */ +struct SS2 *p2; /* { dg-warning "'SS2' is deprecated: Please avoid SS2" "" } */ class T { public: @@ -94,17 +94,17 @@ class T { int x; } __attribute__ ((deprecated("Please avoid T"))); -T *p3; // { dg-warning "'T' is deprecated .declared at \[^\n\]*: Please avoid T" } +T *p3; // { dg-warning "'T' is deprecated: Please avoid T" } inline void T::member1(int) {} -int T::member3(T *p) // { dg-warning "'T' is deprecated .declared at \[^\n\]*: Please avoid T" } +int T::member3(T *p) // { dg-warning "'T' is deprecated: Please avoid T" } { - p->member1(1); /* { dg-warning "'void T::member1\\(int\\)' is deprecated .declared at \[^\n\]*: Please avoid member1" "" } */ - (*p).member1(2); /* { dg-warning "'void T::member1\\(int\\)' is deprecated .declared at \[^\n\]*: Please avoid member1" "" } */ - p->member2(1); /* { dg-warning "'void T::member2\\(INT1\\)' is deprecated .declared at \[^\n\]*: Please avoid member2" "" } */ - (*p).member2(2); /* { dg-warning "'void T::member2\\(INT1\\)' is deprecated .declared at \[^\n\]*: Please avoid member2" "" } */ + p->member1(1); /* { dg-warning "'void T::member1\\(int\\)' is deprecated: Please avoid member1" "" } */ + (*p).member1(2); /* { dg-warning "'void T::member1\\(int\\)' is deprecated: Please avoid member1" "" } */ + p->member2(1); /* { dg-warning "'void T::member2\\(INT1\\)' is deprecated: Please avoid member2" "" } */ + (*p).member2(2); /* { dg-warning "'void T::member2\\(INT1\\)' is deprecated: Please avoid member2" "" } */ p->member3(p); (*p).member3(p); - return f1(); /* { dg-warning "'INT1 f1\\(\\)' is deprecated .declared at \[^\n\]*: Please avoid f1" "" } */ + return f1(); /* { dg-warning "'INT1 f1\\(\\)' is deprecated: Please avoid f1" "" } */ } diff --git a/gcc/testsuite/gcc.dg/deprecated-4.c b/gcc/testsuite/gcc.dg/deprecated-4.c index f36dbdf9af1..152d65cbfbf 100644 --- a/gcc/testsuite/gcc.dg/deprecated-4.c +++ b/gcc/testsuite/gcc.dg/deprecated-4.c @@ -24,7 +24,7 @@ typedef enum {red, green, blue} Color __attribute__((deprecated("Please avoid Co int g1; int g2 __attribute__ ((deprecated("Please avoid g2"))); int g3 __attribute__ ((__deprecated__("Please avoid g3"))); -Color k; /* { dg-warning "'Color' is deprecated .declared at \[^\n\]*: Please avoid Color" "" } */ +Color k; /* { dg-warning "'Color' is deprecated: Please avoid Color" "" } */ typedef struct { int field1; @@ -49,13 +49,13 @@ int func1() int x __attribute__ ((deprecated("Avoid x"))); int y __attribute__ ((__deprecated__("Bad y"))); int z; - int (*pf)() = f1; /* { dg-warning "'f1' is deprecated .declared at \[^\n\]*: Please avoid f1" "" } */ + int (*pf)() = f1; /* { dg-warning "'f1' is deprecated: Please avoid f1" "" } */ - z = w + x + y + g1 + g2 + g3; /* { dg-warning "'x' is deprecated .declared at \[^\n\]*: Avoid x" "" } */ - /* { dg-warning "'y' is deprecated .declared at \[^\n\]*: Bad y" "y" { target *-*-* } 54 } */ - /* { dg-warning "'g2' is deprecated .declared at \[^\n\]*: Please avoid g2" "g2" { target *-*-* } 54 } */ - /* { dg-warning "'g3' is deprecated .declared at \[^\n\]*: Please avoid g3" "g3" { target *-*-* } 54 } */ - return f1(); /* { dg-warning "'f1' is deprecated .declared at \[^\n\]*: Please avoid f1" "" } */ + z = w + x + y + g1 + g2 + g3; /* { dg-warning "'x' is deprecated: Avoid x" "" } */ + /* { dg-warning "'y' is deprecated: Bad y" "y" { target *-*-* } 54 } */ + /* { dg-warning "'g2' is deprecated: Please avoid g2" "g2" { target *-*-* } 54 } */ + /* { dg-warning "'g3' is deprecated: Please avoid g3" "g3" { target *-*-* } 54 } */ + return f1(); /* { dg-warning "'f1' is deprecated: Please avoid f1" "" } */ } int func2(S1 *p) @@ -63,14 +63,14 @@ int func2(S1 *p) S1 lp; if (p->field1) - return p->field2; /* { dg-warning "'field2' is deprecated .declared at \[^\n\]*: Please avoid field2" "" } */ - else if (lp.field4) /* { dg-warning "'field4' is deprecated .declared at \[^\n\]*: Please avoid field4" "" } */ + return p->field2; /* { dg-warning "'field2' is deprecated: Please avoid field2" "" } */ + else if (lp.field4) /* { dg-warning "'field4' is deprecated: Please avoid field4" "" } */ return p->field3; p->u1.field5 = g1 + p->field7; - p->u2.field9; /* { dg-warning "'u2' is deprecated .declared at \[^\n\]*: Please avoid u2" "" } */ - return p->u1.field6 + p->field8; /* { dg-warning "'field6' is deprecated .declared at \[^\n\]*: Please avoid field6" "" } */ - /* { dg-warning "'field8' is deprecated .declared at \[^\n\]*: Please avoid field8" "field8" { target *-*-* } 72 } */ + p->u2.field9; /* { dg-warning "'u2' is deprecated: Please avoid u2" "" } */ + return p->u1.field6 + p->field8; /* { dg-warning "'field6' is deprecated: Please avoid field6" "" } */ + /* { dg-warning "'field8' is deprecated: Please avoid field8" "field8" { target *-*-* } 72 } */ } struct SS1 { @@ -78,11 +78,11 @@ struct SS1 { INT1 y; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ } __attribute__ ((deprecated("Please avoid SS1"))); -struct SS1 *p1; /* { dg-warning "'SS1' is deprecated .declared at \[^\n\]*: Please avoid SS1" "" } */ +struct SS1 *p1; /* { dg-warning "'SS1' is deprecated: Please avoid SS1" "" } */ struct __attribute__ ((__deprecated__("Please avoid SS2"))) SS2 { int x; INT1 y; /* { dg-warning "'INT1' is deprecated: Please avoid INT1" "" } */ }; -struct SS2 *p2; /* { dg-warning "'SS2' is deprecated .declared at \[^\n\]*: Please avoid SS2" "" } */ +struct SS2 *p2; /* { dg-warning "'SS2' is deprecated: Please avoid SS2" "" } */ diff --git a/gcc/testsuite/gcc.dg/deprecated-5.c b/gcc/testsuite/gcc.dg/deprecated-5.c index 133e60e4057..a757c4a3dcb 100644 --- a/gcc/testsuite/gcc.dg/deprecated-5.c +++ b/gcc/testsuite/gcc.dg/deprecated-5.c @@ -4,4 +4,4 @@ /* { dg-options "" } */ struct { int a; } __attribute__((deprecated ("Do not use"))) x; /* { dg-warning "type is deprecated" } */ -typeof(x) y; /* { dg-warning "type is deprecated .declared at .*.: Do not use" } */ +typeof(x) y; /* { dg-warning "type is deprecated: Do not use" } */ diff --git a/gcc/testsuite/gcc.dg/deprecated-6.c b/gcc/testsuite/gcc.dg/deprecated-6.c index 874e1a68e07..a361050dbf3 100644 --- a/gcc/testsuite/gcc.dg/deprecated-6.c +++ b/gcc/testsuite/gcc.dg/deprecated-6.c @@ -7,5 +7,5 @@ void func(void); void func(void) __attribute__((deprecated ("Do not use"))); void f(void) { - func(); /* { dg-warning "'func' is deprecated .declared at .*.: Do not use" } */ + func(); /* { dg-warning "'func' is deprecated: Do not use" } */ } diff --git a/gcc/testsuite/obj-c++.dg/attributes/method-attribute-3.mm b/gcc/testsuite/obj-c++.dg/attributes/method-attribute-3.mm index 3993c5f1765..48cec44117e 100644 --- a/gcc/testsuite/obj-c++.dg/attributes/method-attribute-3.mm +++ b/gcc/testsuite/obj-c++.dg/attributes/method-attribute-3.mm @@ -20,5 +20,5 @@ int foo (void) { obj *p = [obj new]; - return [p vargsn:0]; /* { dg-warning "'vargsn:' is deprecated .declared at" } */ + return [p vargsn:0]; /* { dg-warning "'vargsn:' is deprecated" } */ } diff --git a/gcc/testsuite/objc.dg/attributes/method-attribute-3.m b/gcc/testsuite/objc.dg/attributes/method-attribute-3.m index 1af1d117db4..48cec44117e 100644 --- a/gcc/testsuite/objc.dg/attributes/method-attribute-3.m +++ b/gcc/testsuite/objc.dg/attributes/method-attribute-3.m @@ -20,5 +20,5 @@ int foo (void) { obj *p = [obj new]; - return [p vargsn:0]; /* { dg-warning "'vargsn:' is deprecated .declared at " } */ + return [p vargsn:0]; /* { dg-warning "'vargsn:' is deprecated" } */ } diff --git a/gcc/tree.c b/gcc/tree.c index 3f801af5344..091a4d093fc 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -12034,17 +12034,17 @@ warn_deprecated_use (tree node, tree attr) else msg = NULL; + bool w; if (DECL_P (node)) { - expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node)); if (msg) - warning (OPT_Wdeprecated_declarations, - "%qD is deprecated (declared at %r%s:%d%R): %s", - node, "locus", xloc.file, xloc.line, msg); + w = warning (OPT_Wdeprecated_declarations, + "%qD is deprecated: %s", node, msg); else - warning (OPT_Wdeprecated_declarations, - "%qD is deprecated (declared at %r%s:%d%R)", - node, "locus", xloc.file, xloc.line); + w = warning (OPT_Wdeprecated_declarations, + "%qD is deprecated", node); + if (w) + inform (DECL_SOURCE_LOCATION (node), "declared here"); } else if (TYPE_P (node)) { @@ -12062,30 +12062,26 @@ warn_deprecated_use (tree node, tree attr) if (decl) { - expanded_location xloc - = expand_location (DECL_SOURCE_LOCATION (decl)); if (what) { if (msg) - warning (OPT_Wdeprecated_declarations, - "%qE is deprecated (declared at %r%s:%d%R): %s", - what, "locus", xloc.file, xloc.line, msg); + w = warning (OPT_Wdeprecated_declarations, + "%qE is deprecated: %s", what, msg); else - warning (OPT_Wdeprecated_declarations, - "%qE is deprecated (declared at %r%s:%d%R)", - what, "locus", xloc.file, xloc.line); + w = warning (OPT_Wdeprecated_declarations, + "%qE is deprecated", what); } else { if (msg) - warning (OPT_Wdeprecated_declarations, - "type is deprecated (declared at %r%s:%d%R): %s", - "locus", xloc.file, xloc.line, msg); + w = warning (OPT_Wdeprecated_declarations, + "type is deprecated: %s", msg); else - warning (OPT_Wdeprecated_declarations, - "type is deprecated (declared at %r%s:%d%R)", - "locus", xloc.file, xloc.line); + w = warning (OPT_Wdeprecated_declarations, + "type is deprecated"); } + if (w) + inform (DECL_SOURCE_LOCATION (decl), "declared here"); } else {