xref: /llvm-project/clang/test/CodeGenCXX/instantiate-init.cpp (revision 3b9de993c9dffd0941ad79c80a2cb7785bc63f03)
1*3b9de993SRichard Smith // RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -emit-llvm -o - | FileCheck %s
2*3b9de993SRichard Smith // RUN: %clang_cc1 -triple x86_64-linux -std=c++17 %s -emit-llvm -o - | FileCheck %s
3cde8d2fdSRichard Smith 
4cde8d2fdSRichard Smith namespace std {
5cde8d2fdSRichard Smith   template<typename T> class initializer_list {
6cde8d2fdSRichard Smith     const T *data;
7cde8d2fdSRichard Smith     __SIZE_TYPE__ size;
8cde8d2fdSRichard Smith 
9cde8d2fdSRichard Smith   public:
10cde8d2fdSRichard Smith     initializer_list();
11cde8d2fdSRichard Smith   };
12cde8d2fdSRichard Smith }
13cde8d2fdSRichard Smith 
14cde8d2fdSRichard Smith namespace ParenBraceInitList {
15cde8d2fdSRichard Smith   struct Vector {
16cde8d2fdSRichard Smith     Vector(std::initializer_list<int>);
17cde8d2fdSRichard Smith     ~Vector();
18cde8d2fdSRichard Smith   };
19cde8d2fdSRichard Smith 
BaseParenBraceInitList::Base20cde8d2fdSRichard Smith   struct Base { Base(Vector) {} };
21cde8d2fdSRichard Smith 
22cde8d2fdSRichard Smith   // CHECK: define {{.*}}18ParenBraceInitList1fILi0EE
f()23cde8d2fdSRichard Smith   template<int> void f() {
24cde8d2fdSRichard Smith     // CHECK: call {{.*}}18ParenBraceInitList6VectorC1
25cde8d2fdSRichard Smith     // CHECK: call {{.*}}18ParenBraceInitList6VectorD1
26cde8d2fdSRichard Smith     Base({0});
27cde8d2fdSRichard Smith   }
28cde8d2fdSRichard Smith   template void f<0>();
29cde8d2fdSRichard Smith }
30