blob: 2c26ec53a0ae1e1ee4d0349a767ee169edffe02f [file] [log] [blame]
Eli Friedman4df6ec12009-12-30 00:20:14 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Andy Gibbs8e8fb3b2012-10-19 12:44:48 +00002// expected-no-diagnostics
Eli Friedman4df6ec12009-12-30 00:20:14 +00003
4// PR5908
5template <typename Iterator>
6void Test(Iterator it) {
7 *(it += 1);
8}
Douglas Gregor501edb62010-01-15 16:21:02 +00009
10namespace PR6045 {
11 template<unsigned int r>
12 class A
13 {
14 static const unsigned int member = r;
15 void f();
16 };
17
18 template<unsigned int r>
19 const unsigned int A<r>::member;
20
21 template<unsigned int r>
22 void A<r>::f()
23 {
24 unsigned k;
25 (void)(k % member);
26 }
27}
Douglas Gregorfb2db462010-05-22 17:12:29 +000028
29namespace PR7198 {
30 struct A
31 {
32 ~A() { }
33 };
34
35 template<typename T>
36 struct B {
37 struct C : A {};
38 void f()
39 {
40 C c = C();
41 }
42 };
43}
Eli Friedman787b0942010-07-27 19:14:53 +000044
45namespace PR7724 {
46 template<typename OT> int myMethod()
47 { return 2 && sizeof(OT); }
48}
John McCalla21e06c2010-11-26 10:57:22 +000049
50namespace test4 {
51 template <typename T> T *addressof(T &v) {
52 return reinterpret_cast<T*>(
53 &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
54 }
55}
John McCall9b4b9d62010-11-30 02:05:44 +000056
57namespace test5 {
58 template <typename T> class chained_map {
59 int k;
60 void lookup() const {
61 int &v = (int &)k;
62 }
63 };
64}
Douglas Gregor14af91a2010-12-21 07:22:56 +000065
66namespace PR8795 {
67 template <class _CharT> int test(_CharT t)
68 {
69 int data [] = {
70 sizeof(_CharT) > sizeof(char)
71 };
72 return data[0];
73 }
74}
Eli Friedmanf91e86c2013-09-19 01:12:33 +000075
76template<typename T> struct CastDependentIntToPointer {
77 static void* f() {
78 T *x;
79 return ((void*)(((unsigned long)(x)|0x1ul)));
80 }
81};
Bill Wendling45c2eed2013-11-27 05:27:22 +000082
83// Regression test for crasher in r194540.
84namespace PR10837 {
85 typedef void t(int);
86 template<typename> struct A {
87 void f();
88 static t g;
89 };
90 t *p;
91 template<typename T> void A<T>::f() {
92 p = g;
93 }
94 template struct A<int>;
95}