1*1d0bd8e5SJennifer Yu // RUN: %clang_cc1 -fcxx-exceptions -triple=x86_64-windows-msvc -emit-llvm %s -o - | FileCheck %s
2*1d0bd8e5SJennifer Yu
3*1d0bd8e5SJennifer Yu class F {
4*1d0bd8e5SJennifer Yu public:
5*1d0bd8e5SJennifer Yu F(wchar_t *);
6*1d0bd8e5SJennifer Yu };
7*1d0bd8e5SJennifer Yu using a = F;
8*1d0bd8e5SJennifer Yu struct A {};
9*1d0bd8e5SJennifer Yu struct b {
10*1d0bd8e5SJennifer Yu b(a, F, A);
11*1d0bd8e5SJennifer Yu };
12*1d0bd8e5SJennifer Yu template <typename, typename> struct c : b {
cc13*1d0bd8e5SJennifer Yu c(const a &p1, const A &d) : b(p1, 0, d) {}
14*1d0bd8e5SJennifer Yu };
15*1d0bd8e5SJennifer Yu template <typename e> struct B : c<e, b> {
16*1d0bd8e5SJennifer Yu using c<e, b>::c;
17*1d0bd8e5SJennifer Yu };
18*1d0bd8e5SJennifer Yu class f {
19*1d0bd8e5SJennifer Yu public:
20*1d0bd8e5SJennifer Yu f(...);
21*1d0bd8e5SJennifer Yu }
22*1d0bd8e5SJennifer Yu
23*1d0bd8e5SJennifer Yu typedef g;
24*1d0bd8e5SJennifer Yu class C {
25*1d0bd8e5SJennifer Yu public:
26*1d0bd8e5SJennifer Yu C(g, f);
27*1d0bd8e5SJennifer Yu };
28*1d0bd8e5SJennifer Yu static wchar_t h;
29*1d0bd8e5SJennifer Yu class D {
30*1d0bd8e5SJennifer Yu public:
31*1d0bd8e5SJennifer Yu static C E();
32*1d0bd8e5SJennifer Yu };
33*1d0bd8e5SJennifer Yu
E()34*1d0bd8e5SJennifer Yu C D::E() {
35*1d0bd8e5SJennifer Yu C i(B<bool>(&h, {}), f());
36*1d0bd8e5SJennifer Yu return i;
37*1d0bd8e5SJennifer Yu }
38*1d0bd8e5SJennifer Yu
39*1d0bd8e5SJennifer Yu // Inheriting ctor has internal linkage without comdat.
40*1d0bd8e5SJennifer Yu
41*1d0bd8e5SJennifer Yu // CHECK-LABEL: define internal noundef ptr @"??0?$B@_N@@QEAA@AEBVF@@AEBUA@@@Z"
42*1d0bd8e5SJennifer Yu // CHECK-NOT:comdat
43*1d0bd8e5SJennifer Yu // CHECK-SAME: {{\{$}}
44*1d0bd8e5SJennifer Yu
45*1d0bd8e5SJennifer Yu // non-inheriting ctro should has linkonce_odr with comdat attribute.
46*1d0bd8e5SJennifer Yu
47*1d0bd8e5SJennifer Yu // CHECK-LABEL: define linkonce_odr dso_local noundef ptr @"??0?$c@_NUb@@@@QEAA@AEBVF@@AEBUA@@@Z"
48*1d0bd8e5SJennifer Yu // CHECK:comdat
49*1d0bd8e5SJennifer Yu // CHECK-SAME: {{\{$}}
50