1// RUN: %clang -emit-llvm -g -S %s -o - | FileCheck %s
2
3//CHECK: TC<int>
4//CHECK: DW_TAG_template_type_parameter
5
6template<typename T>
7class TC {
8public:
9  TC(const TC &) {}
10  TC() {}
11};
12
13TC<int> tci;
14
15//CHECK: TU<2>
16//CHECK: DW_TAG_template_value_parameter
17template<unsigned >
18class TU {
19  int b;
20};
21
22TU<2> u2;
23
24// PR9600
25template<typename T> class vector {};
26class Foo;
27typedef vector<Foo*> FooVector[3];
28struct Test {
29  virtual void foo(FooVector *);
30};
31static Test test;
32
33// PR9608
34template <int i> struct TheTemplate {
35  struct Empty2 {};
36  typedef const Empty2 DependentType[i];
37  TheTemplate() {}
38};
39
40class TheTemplateTest : public TheTemplate<42> {
41  TheTemplateTest();
42  void method(const TheTemplate<42>::DependentType *) {}
43};
44
45TheTemplateTest::TheTemplateTest() : TheTemplate<42>() {}
46
47