1 // RUN: %clang_cc1 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -fcomment-block-commands=foobar -verify %s 2 // RUN %clang_cc1 -std=c++11 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -fcomment-block-commands=foobar -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck -DATTRIBUTE="__attribute__((deprecated))" %s 3 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -fcomment-block-commands=foobar -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck --check-prefixes=CHECK,CHECK14 -DATTRIBUTE="[[deprecated]]" %s 4 5 // expected-warning@+1 {{parameter 'ZZZZZZZZZZ' not found in the function declaration}} expected-note@+1 {{did you mean 'a'?}} 6 /// \param ZZZZZZZZZZ Blah blah. 7 int test1(int a); 8 9 // expected-warning@+1 {{parameter 'aab' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}} 10 /// \param aab Blah blah. 11 int test2(int aaa, int bbb); 12 13 // expected-warning@+1 {{template parameter 'ZZZZZZZZZZ' not found in the template declaration}} expected-note@+1 {{did you mean 'T'?}} 14 /// \tparam ZZZZZZZZZZ Aaa 15 template<typename T> 16 void test3(T aaa); 17 18 // expected-warning@+1 {{template parameter 'SomTy' not found in the template declaration}} expected-note@+1 {{did you mean 'SomeTy'?}} 19 /// \tparam SomTy Aaa 20 /// \tparam OtherTy Bbb 21 template<typename SomeTy, typename OtherTy> 22 void test4(SomeTy aaa, OtherTy bbb); 23 24 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 25 /// \deprecated 26 void test_deprecated_1(); 27 28 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 29 /// \deprecated 30 void test_deprecated_2(int a); 31 32 struct test_deprecated_3 { 33 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 34 /// \deprecated 35 void test_deprecated_4(); 36 37 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 38 /// \deprecated test_deprecated_5test_deprecated_339 void test_deprecated_5() { 40 } 41 }; 42 43 template<typename T> 44 struct test_deprecated_6 { 45 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 46 /// \deprecated 47 void test_deprecated_7(); 48 49 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 50 /// \deprecated test_deprecated_8test_deprecated_651 void test_deprecated_8() { 52 } 53 }; 54 55 class PR43753 { 56 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 57 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 58 /// \deprecated 59 static void test_deprecated_static(); 60 61 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 62 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 63 /// \deprecated 64 static auto test_deprecated_static_trailing_return() -> int; 65 66 #if __cplusplus >= 201402L 67 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 68 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 69 /// \deprecated test_deprecated_static_decltype_auto()70 static decltype(auto) test_deprecated_static_decltype_auto() { return 1; } 71 #endif 72 73 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 74 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 75 /// \deprecated 76 void test_deprecated_const() const; 77 78 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 79 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 80 /// \deprecated 81 auto test_deprecated_trailing_return() -> int; 82 83 #if __cplusplus >= 201402L 84 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 85 // expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 86 /// \deprecated test_deprecated_decltype_auto() const87 decltype(auto) test_deprecated_decltype_auto() const { return a; } 88 89 private: 90 int a{0}; 91 #endif 92 }; 93 #define MY_ATTR_DEPRECATED __attribute__((deprecated)) 94 95 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 96 /// \deprecated 97 void test_deprecated_9(int a); 98 99 #if __cplusplus >= 201402L 100 #define ATTRIBUTE_DEPRECATED [[deprecated]] 101 102 // expected-warning@+1 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+2 {{add a deprecation attribute to the declaration to silence this warning}} 103 /// \deprecated 104 void test_deprecated_10(int a); 105 #endif 106 107 // rdar://12381408 108 // expected-warning@+2 {{unknown command tag name 'retur'; did you mean 'return'?}} 109 /// \brief testing fixit 110 /// \retur int in FooBar 111 int FooBar(); 112 113 // expected-warning@+1 {{unknown command tag name 'fooba'; did you mean 'foobar'?}} 114 /// \fooba bbb IS_DOXYGEN_END 115 int gorf(); 116 117 // expected-warning@+1 {{unknown command tag name}} 118 /// \t bbb IS_DOXYGEN_END 119 int Bar(); 120 121 // expected-warning@+2 {{unknown command tag name 'encode'; did you mean 'endcode'?}} 122 // expected-warning@+1 {{'\endcode' command does not terminate a verbatim text block}} 123 /// \encode PR18051 124 int PR18051(); 125 126 // CHECK: fix-it:"{{.*}}":{6:12-6:22}:"a" 127 // CHECK: fix-it:"{{.*}}":{10:12-10:15}:"aaa" 128 // CHECK: fix-it:"{{.*}}":{14:13-14:23}:"T" 129 // CHECK: fix-it:"{{.*}}":{19:13-19:18}:"SomeTy" 130 // CHECK: fix-it:"{{.*}}":{26:1-26:1}:"[[ATTRIBUTE]] " 131 // CHECK: fix-it:"{{.*}}":{30:1-30:1}:"[[ATTRIBUTE]] " 132 // CHECK: fix-it:"{{.*}}":{35:3-35:3}:"[[ATTRIBUTE]] " 133 // CHECK: fix-it:"{{.*}}":{39:3-39:3}:"[[ATTRIBUTE]] " 134 // CHECK: fix-it:"{{.*}}":{47:3-47:3}:"[[ATTRIBUTE]] " 135 // CHECK: fix-it:"{{.*}}":{51:3-51:3}:"[[ATTRIBUTE]] " 136 // CHECK: fix-it:"{{.*}}":{76:3-76:3}:"[[ATTRIBUTE]] " 137 // CHECK: fix-it:"{{.*}}":{81:3-81:3}:"[[ATTRIBUTE]] " 138 // CHECK14: fix-it:"{{.*}}":{87:3-87:3}:"[[ATTRIBUTE]] " 139 // CHECK: fix-it:"{{.*}}":{97:1-97:1}:"MY_ATTR_DEPRECATED " 140 // CHECK14: fix-it:"{{.*}}":{104:1-104:1}:"ATTRIBUTE_DEPRECATED " 141 // CHECK: fix-it:"{{.*}}":{110:6-110:11}:"return" 142 // CHECK: fix-it:"{{.*}}":{114:6-114:11}:"foobar" 143 // CHECK: fix-it:"{{.*}}":{123:6-123:12}:"endcode" 144