1060ddb0173ba91cd400f073ed0bd1f9b9c3a4d50Nuno Lopes// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm -o - %s | FileCheck %s
2f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
3f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregornamespace PR11418 {
4f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  struct NonPOD {
5f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    NonPOD();
6f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    NonPOD(const NonPOD &);
7f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    NonPOD(NonPOD &&);
8f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  };
9f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
10f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  struct X {
11f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    NonPOD np;
12f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    int a = 17;
13f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  };
14f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
15f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  void check_copy(X x) {
16f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    X x2(x);
17f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  }
18f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
19f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  void check_move(X x) {
20f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor    X x3(static_cast<X&&>(x));
21f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  }
22f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
23f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: define linkonce_odr void @_ZN7PR114181XC2EOS0_
24f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
25f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: call void @_ZN7PR114186NonPODC1EOS0_
26f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
27f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: load i32*
28f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
29f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: store i32
30f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
31f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: ret
32f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor
33f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: define linkonce_odr void @_ZN7PR114181XC2ERKS0_
34f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
35f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: call void @_ZN7PR114186NonPODC1ERKS0_
36f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
37f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: load i32*
38f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
39f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: store i32
40f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK-NOT: 17
41f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor  // CHECK: ret
42f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor}
43