cxx-templates.cpp revision 0e0363866792b309d70e9c8e92b4c239773af89c
1dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// Test this without pch.
2a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis// RUN: %clang_cc1 -include %S/cxx-templates.h -verify %s -ast-dump 1>/dev/null
3a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis// RUN: %clang_cc1 -include %S/cxx-templates.h %s -emit-llvm -o - | FileCheck %s
490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis
5dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// Test with pch.
6dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// RUN: %clang_cc1 -x c++-header -emit-pch -o %t %S/cxx-templates.h
7a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis// RUN: %clang_cc1 -include-pch %t -verify %s -ast-dump  1>/dev/null
8a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis// RUN: %clang_cc1 -include-pch %t %s -emit-llvm -o - | FileCheck %s
9a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis
100e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis// CHECK: define weak_odr void @_ZN2S4IiE1mEv
11a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis// CHECK: define linkonce_odr void @_ZN2S3IiE1mEv
128dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
138dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisstruct A {
148dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  typedef int type;
158dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  static void my_f();
168dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  template <typename T>
178dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  static T my_templf(T x) { return x; }
188dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis};
19f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis
20f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidisvoid test() {
21b24e199fbd17af780ab000c5862d191e4daffc0fArgyrios Kyrtzidis  int x = templ_f<int, 5>(3);
22dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis
23dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis  S<char, float>::templ();
24dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis  S<int, char>::partial();
25dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis  S<int, float>::explicit_special();
268dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
278dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  Dep<A>::Ty ty;
288dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  Dep<A> a;
298dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  a.f();
30a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis
31a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis  S3<int> s3;
32a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis  s3.m();
33f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis}
340e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis
350e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidistemplate struct S4<int>;
36