17c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin10 -o - %s | FileCheck %s
27c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
37c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor// PR6024
47c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorextern int i;
57c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: define dereferenceable({{[0-9]+}}) i32* @_Z16lvalue_noop_castv() [[NUW:#[0-9]+]]
77c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst int &lvalue_noop_cast() {
87c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
97c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i32 17, i32*
107c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const int&)17;
117c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
127c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i32 17, i32*
137c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const int&>(17);
147c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i32 17, i32*
157c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return 17;
167c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
177c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16* @_Z20lvalue_integral_castv()
197c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst short &lvalue_integral_cast() {
207c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
217c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i16 17, i16*
227c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const short&)17;
237c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
247c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i16 17, i16*
257c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const short&>(17);
267c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i16 17, i16*
277c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return 17;
287c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
297c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16* @_Z29lvalue_floating_integral_castv()
317c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst short &lvalue_floating_integral_cast() {
327c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
337c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i16 17, i16*
347c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const short&)17.5;
357c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
367c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i16 17, i16*
377c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const short&>(17.5);
387c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i16 17, i16*
397c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return 17.5;
407c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
417c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float* @_Z29lvalue_integral_floating_castv()
437c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst float &lvalue_integral_floating_cast() {
447c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
452b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer    // CHECK: store float 1.700000e+{{0*}}1, float*
467c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const float&)17;
477c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
482b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer    // CHECK: store float 1.700000e+{{0*}}1, float*
497c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const float&>(17);
502b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer  // CHECK: store float 1.700000e+{{0*}}1, float*
517c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return 17;
527c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
537c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float* @_Z20lvalue_floating_castv()
557c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst float &lvalue_floating_cast() {
567c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
572b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer    // CHECK: store float 1.700000e+{{0*}}1, float*
587c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const float&)17.0;
597c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
602b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer    // CHECK: store float 1.700000e+{{0*}}1, float*
617c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const float&>(17.0);
622b02f7a051b092ebbae436026565fee52683972fBenjamin Kramer  // CHECK: store float 1.700000e+{{0*}}1, float*
637c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return 17.0;
647c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
657c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
667c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorint get_int();
677c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z24lvalue_integer_bool_castv()
697c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst bool &lvalue_integer_bool_cast() {
707c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
717c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call i32 @_Z7get_intv()
727c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
737c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const bool&)get_int();
747c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
757c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call i32 @_Z7get_intv()
767c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
777c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const bool&>(get_int());
787c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: call i32 @_Z7get_intv()
797c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8
807c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return get_int();
817c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
827c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
837c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorfloat get_float();
847c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
85176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z25lvalue_floating_bool_castv()
867c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst bool &lvalue_floating_bool_cast() {
877c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
887c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call float @_Z9get_floatv()
897c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fcmp une float
907c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
917c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const bool&)get_float();
927c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
937c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call float @_Z9get_floatv()
947c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fcmp une float
957c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
967c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const bool&>(get_float());
977c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: call float @_Z9get_floatv()
987c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: fcmp une float
997c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8
1007c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return get_float();
1017c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
1027c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
1037c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorstruct X { };
1047c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregortypedef int X::*pm;
1057c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregortypedef int (X::*pmf)(int);
1067c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
1077c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorpm get_pointer_to_member_data();
1087c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorpmf get_pointer_to_member_function();
1097c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z26lvalue_ptrmem_to_bool_castv()
1117c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst bool &lvalue_ptrmem_to_bool_cast() {
1127c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
1137c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call i64 @_Z26get_pointer_to_member_datav()
1147c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
1157c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8*
1167c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const bool&)get_pointer_to_member_data();
1177c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
1187c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: call i64 @_Z26get_pointer_to_member_datav()
1197c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
1207c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8*
1217c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const bool&>(get_pointer_to_member_data());
1227c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: call i64 @_Z26get_pointer_to_member_datav()
1237c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8
1247c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8*
1257c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return get_pointer_to_member_data();
1267c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
1277c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
128176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z27lvalue_ptrmem_to_bool_cast2v
1297c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst bool &lvalue_ptrmem_to_bool_cast2() {
1307c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
1317c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
1327c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
1337c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8*
1347c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const bool&)get_pointer_to_member_function();
1357c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
1367c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
1377c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8
1387c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store i8*
1397c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const bool&>(get_pointer_to_member_function());
1407c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
1417c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8
1427c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store i8*
1437c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return get_pointer_to_member_function();
1447c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
1457c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
1467c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor_Complex double get_complex_double();
1477c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor
1487c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor// CHECK: {{define.*_Z2f1v}}
1497c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregorconst _Complex float &f1() {
1507c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  if (i == 0)
1517c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: {{call.*_Z18get_complex_doublev}}
1527c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fptrunc
1537c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fptrunc
1547c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store float
1557c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store float
1567c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return (const _Complex float&)get_complex_double();
1577c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  else if (i == 1)
1587c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: {{call.*_Z18get_complex_doublev}}
1597c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fptrunc
1607c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: fptrunc
1617c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store float
1627c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    // CHECK: store float
1637c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor    return static_cast<const _Complex float&>(get_complex_double());
1647c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: {{call.*_Z18get_complex_doublev}}
1657c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: fptrunc
1667c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: fptrunc
1677c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store float
1687c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  // CHECK: store float
1697c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor  return get_complex_double();
1707c7a79303b62f51c1ff02f9ce41d81211a69d3b4Douglas Gregor}
1713f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor
17293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define i32 @_Z7pr10592RKi(i32*
1733f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregorunsigned pr10592(const int &v) {
1743f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  // CHECK: [[VADDR:%[a-zA-Z0-9.]+]] = alloca i32*
1753f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  // CHECK-NEXT: [[REFTMP:%[a-zA-Z0-9.]+]] = alloca i32
1763f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  // CHECK-NEXT: store i32* [[V:%[a-zA-Z0-9.]+]], i32** [[VADDR]]
1773ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK-NEXT: [[VADDR_1:%[a-zA-Z0-9.]+]] = load i32*, i32** [[VADDR]]
1783ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK-NEXT: [[VVAL:%[a-zA-Z0-9.]+]] = load i32, i32* [[VADDR_1]]
1793f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  // CHECK-NEXT: store i32 [[VVAL]], i32* [[REFTMP]]
1803ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK-NEXT: [[VVAL_I:%[a-zA-Z0-9.]+]] = load i32, i32* [[REFTMP]]
1813f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  // CHECK-NEXT: ret i32 [[VVAL_I]]
1823f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor  return static_cast<const unsigned &>(v);
1833f86ce1dc64a46d9cd3675787b8af32c9158abe6Douglas Gregor}
184ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman
185ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedmannamespace PR10650 {
186ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman  struct Helper {
187ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman    unsigned long long id();
188ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman  };
189ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman  unsigned long long test(Helper *obj) {
190ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman    return static_cast<const unsigned long long&>(obj->id());
191ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman  }
19293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define i64 @_ZN7PR106504testEPNS_6HelperE
193ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman  // CHECK: store i64
194ec24b0ed9ccf8b34986eadeb98dd0b4a0a50f6f2Eli Friedman}
195f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling
196be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK: attributes [[NUW]] = { nounwind{{.*}} }
197