ordinary-name.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. struct X { int x; };
  2. void z(int);
  3. typedef struct t TYPEDEF;
  4. void foo() {
  5. int y = 17;
  6. // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:14 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
  7. // CHECK-CC1: COMPLETION: bool
  8. // CHECK-CC1-NEXT: COMPLETION: char
  9. // CHECK-CC1-NEXT: COMPLETION: class
  10. // CHECK-CC1-NEXT: COMPLETION: const
  11. // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
  12. // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#>
  13. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
  14. // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#>
  15. // CHECK-CC1: COMPLETION: double
  16. // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)
  17. // CHECK-CC1-NEXT: COMPLETION: enum
  18. // CHECK-CC1-NEXT: COMPLETION: extern
  19. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false
  20. // CHECK-CC1-NEXT: COMPLETION: float
  21. // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo()
  22. // CHECK-CC1-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){
  23. // CHECK-CC1: COMPLETION: Pattern : goto <#label#>
  24. // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#>
  25. // CHECK-CC1: COMPLETION: int
  26. // CHECK-CC1-NEXT: COMPLETION: long
  27. // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
  28. // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
  29. // CHECK-CC1-NEXT: COMPLETION: operator
  30. // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
  31. // CHECK-CC1-NEXT: COMPLETION: Pattern : return
  32. // CHECK-CC1-NEXT: COMPLETION: short
  33. // CHECK-CC1-NEXT: COMPLETION: signed
  34. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
  35. // CHECK-CC1-NEXT: COMPLETION: static
  36. // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
  37. // CHECK-CC1-NEXT: COMPLETION: struct
  38. // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){
  39. // CHECK-CC1: COMPLETION: t : t
  40. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>
  41. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true
  42. // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#>
  43. // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF
  44. // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
  45. // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)
  46. // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
  47. // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#>
  48. // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)
  49. // CHECK-CC1-NEXT: COMPLETION: union
  50. // CHECK-CC1-NEXT: COMPLETION: unsigned
  51. // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
  52. // CHECK-CC1-NEXT: COMPLETION: void
  53. // CHECK-CC1-NEXT: COMPLETION: volatile
  54. // CHECK-CC1-NEXT: COMPLETION: wchar_t
  55. // CHECK-CC1-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#>
  56. // CHECK-CC1: COMPLETION: X : X
  57. // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y
  58. // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)
  59. // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:4:1 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
  60. // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>)
  61. // CHECK-CC2-NEXT: COMPLETION: bool
  62. // CHECK-CC2-NEXT: COMPLETION: char
  63. // CHECK-CC2-NEXT: COMPLETION: class
  64. // CHECK-CC2-NEXT: COMPLETION: const
  65. // CHECK-CC2-NEXT: COMPLETION: double
  66. // CHECK-CC2-NEXT: COMPLETION: enum
  67. // CHECK-CC2-NEXT: COMPLETION: extern
  68. // CHECK-CC2-NEXT: COMPLETION: float
  69. // CHECK-CC2-NEXT: COMPLETION: inline
  70. // CHECK-CC2-NEXT: COMPLETION: int
  71. // CHECK-CC2-NEXT: COMPLETION: long
  72. // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#>{<#declarations#>
  73. // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#>
  74. // CHECK-CC2-NEXT: COMPLETION: operator
  75. // CHECK-CC2-NEXT: COMPLETION: short
  76. // CHECK-CC2-NEXT: COMPLETION: signed
  77. // CHECK-CC2-NEXT: COMPLETION: static
  78. // CHECK-CC2-NEXT: COMPLETION: struct
  79. // CHECK-CC2-NEXT: COMPLETION: t : t
  80. // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#>
  81. // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>>
  82. // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF
  83. // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
  84. // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
  85. // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof <#expression#>
  86. // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#type#>)
  87. // CHECK-CC2-NEXT: COMPLETION: union
  88. // CHECK-CC2-NEXT: COMPLETION: unsigned
  89. // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
  90. // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>
  91. // CHECK-CC2-NEXT: COMPLETION: void
  92. // CHECK-CC2-NEXT: COMPLETION: volatile
  93. // CHECK-CC2-NEXT: COMPLETION: wchar_t
  94. // CHECK-CC2-NEXT: COMPLETION: X : X
  95. // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:1:19 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
  96. // CHECK-CC3: COMPLETION: bool
  97. // CHECK-CC3-NEXT: COMPLETION: char
  98. // CHECK-CC3-NEXT: COMPLETION: class
  99. // CHECK-CC3-NEXT: COMPLETION: const
  100. // CHECK-CC3-NEXT: COMPLETION: double
  101. // CHECK-CC3-NEXT: COMPLETION: enum
  102. // CHECK-CC3-NEXT: COMPLETION: explicit
  103. // CHECK-CC3-NEXT: COMPLETION: extern
  104. // CHECK-CC3-NEXT: COMPLETION: float
  105. // CHECK-CC3-NEXT: COMPLETION: friend
  106. // CHECK-CC3-NEXT: COMPLETION: inline
  107. // CHECK-CC3-NEXT: COMPLETION: int
  108. // CHECK-CC3-NEXT: COMPLETION: long
  109. // CHECK-CC3-NEXT: COMPLETION: mutable
  110. // CHECK-CC3-NEXT: COMPLETION: operator
  111. // CHECK-CC3-NEXT: COMPLETION: Pattern : private:
  112. // CHECK-CC3-NEXT: COMPLETION: Pattern : protected:
  113. // CHECK-CC3-NEXT: COMPLETION: Pattern : public:
  114. // CHECK-CC3-NEXT: COMPLETION: short
  115. // CHECK-CC3-NEXT: COMPLETION: signed
  116. // CHECK-CC3-NEXT: COMPLETION: static
  117. // CHECK-CC3-NEXT: COMPLETION: struct
  118. // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>>
  119. // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
  120. // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
  121. // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#>
  122. // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>)
  123. // CHECK-CC3-NEXT: COMPLETION: union
  124. // CHECK-CC3-NEXT: COMPLETION: unsigned
  125. // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>
  126. // CHECK-CC3-NEXT: COMPLETION: virtual
  127. // CHECK-CC3-NEXT: COMPLETION: void
  128. // CHECK-CC3-NEXT: COMPLETION: volatile
  129. // CHECK-CC3-NEXT: COMPLETION: wchar_t
  130. // CHECK-CC3-NEXT: COMPLETION: X : X
  131. // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:11 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
  132. // CHECK-CC4: COMPLETION: bool
  133. // CHECK-CC4-NEXT: COMPLETION: char
  134. // CHECK-CC4-NEXT: COMPLETION: class
  135. // CHECK-CC4-NEXT: COMPLETION: const
  136. // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
  137. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#>
  138. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
  139. // CHECK-CC4-NEXT: COMPLETION: double
  140. // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)
  141. // CHECK-CC4-NEXT: COMPLETION: enum
  142. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false
  143. // CHECK-CC4-NEXT: COMPLETION: float
  144. // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo()
  145. // CHECK-CC4-NEXT: COMPLETION: int
  146. // CHECK-CC4-NEXT: COMPLETION: long
  147. // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
  148. // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
  149. // CHECK-CC4-NEXT: COMPLETION: operator
  150. // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
  151. // CHECK-CC4-NEXT: COMPLETION: short
  152. // CHECK-CC4-NEXT: COMPLETION: signed
  153. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
  154. // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
  155. // CHECK-CC4-NEXT: COMPLETION: struct
  156. // CHECK-CC4-NEXT: COMPLETION: t : t
  157. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>
  158. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true
  159. // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF
  160. // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)
  161. // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
  162. // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#>
  163. // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>)
  164. // CHECK-CC4-NEXT: COMPLETION: union
  165. // CHECK-CC4-NEXT: COMPLETION: unsigned
  166. // CHECK-CC4-NEXT: COMPLETION: void
  167. // CHECK-CC4-NEXT: COMPLETION: volatile
  168. // CHECK-CC4-NEXT: COMPLETION: wchar_t
  169. // CHECK-CC4-NEXT: COMPLETION: X : X
  170. // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y
  171. // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>)
  172. // RUN: %clang_cc1 -fsyntax-only -fno-rtti -code-completion-patterns -code-completion-at=%s:6:14 %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s
  173. // CHECK-NO-RTTI: COMPLETION: bool
  174. // CHECK-NO-RTTI-NEXT: COMPLETION: char
  175. // CHECK-NO-RTTI-NEXT: COMPLETION: class
  176. // CHECK-NO-RTTI-NEXT: COMPLETION: const
  177. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
  178. // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#>
  179. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
  180. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do{<#statements#>
  181. // CHECK-NO-RTTI: COMPLETION: double
  182. // CHECK-NO-RTTI-NOT: dynamic_cast
  183. // CHECK-NO-RTTI: COMPLETION: enum
  184. // CHECK-NO-RTTI-NEXT: COMPLETION: extern
  185. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false
  186. // CHECK-NO-RTTI-NEXT: COMPLETION: float
  187. // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo()
  188. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){
  189. // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#>
  190. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#>
  191. // CHECK-NO-RTTI: COMPLETION: int
  192. // CHECK-NO-RTTI-NEXT: COMPLETION: long
  193. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
  194. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
  195. // CHECK-NO-RTTI-NEXT: COMPLETION: operator
  196. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
  197. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return
  198. // CHECK-NO-RTTI-NEXT: COMPLETION: short
  199. // CHECK-NO-RTTI-NEXT: COMPLETION: signed
  200. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
  201. // CHECK-NO-RTTI-NEXT: COMPLETION: static
  202. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
  203. // CHECK-NO-RTTI-NEXT: COMPLETION: struct
  204. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch(<#condition#>){
  205. // CHECK-NO-RTTI: COMPLETION: t : t
  206. // CHECK-NO-RTTI-NOT: throw
  207. // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true
  208. // CHECK-NO-RTTI-NOT: try
  209. // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF
  210. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
  211. // CHECK-NO-RTTI-NOT: typeid
  212. // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
  213. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#>
  214. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>)
  215. // CHECK-NO-RTTI-NEXT: COMPLETION: union
  216. // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned
  217. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
  218. // CHECK-NO-RTTI-NEXT: COMPLETION: void
  219. // CHECK-NO-RTTI-NEXT: COMPLETION: volatile
  220. // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t
  221. // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#>
  222. // CHECK-NO-RTTI: COMPLETION: X : X
  223. // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y
  224. // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>)