1274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek// expected-no-diagnostics 3274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek 4274b20863a728cc6a31ee75c670e3733600c1531Ted Kremeneknamespace PR10622 { 5274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek struct foo { 6274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek const int first; 7274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek foo(const foo&) = default; 8274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek }; 9274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek void find_or_insert(const foo& __obj) { 10274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek foo x(__obj); 11274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek } 12274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek 13274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek struct bar : foo { 140c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek bar(const bar&) = default; 150c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek }; 160c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek void test_bar(const bar &obj) { 17274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek bar obj2(obj); 18274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek } 190c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek} 200c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek 210c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremeneknamespace PR11418 { 220c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek template<typename T> 230c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek T may_throw() { 240c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek return T(); 250c6a77bc1f52f282a969538f139ebde429076ed3Ted Kremenek } 26274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek 27274b20863a728cc6a31ee75c670e3733600c1531Ted Kremenek template<typename T> T &&declval() noexcept; 287b78b7c6d96deb1e63f8d0655ee6fa53de0b65efTed Kremenek 29268ee7016a2811803989487c0ad3799486092c63Ted Kremenek struct NonPOD { 30e5680f3cd678014cf0872d34726dc804b0cbbdd4Ted Kremenek NonPOD(); 31e5680f3cd678014cf0872d34726dc804b0cbbdd4Ted Kremenek NonPOD(const NonPOD &) noexcept; 32e5680f3cd678014cf0872d34726dc804b0cbbdd4Ted Kremenek NonPOD(NonPOD &&) noexcept; 33e5680f3cd678014cf0872d34726dc804b0cbbdd4Ted Kremenek }; 345ff4317536dbd7f03332bb250c8b35ec04a6f5dbChris Lattner 35da9d61c96c412f6babc7f824152609562f302388Chris Lattner struct X { 36da9d61c96c412f6babc7f824152609562f302388Chris Lattner NonPOD np = may_throw<NonPOD>(); 37da9d61c96c412f6babc7f824152609562f302388Chris Lattner }; 38da9d61c96c412f6babc7f824152609562f302388Chris Lattner 39da9d61c96c412f6babc7f824152609562f302388Chris Lattner static_assert(noexcept(declval<X>()), "noexcept isn't working at all"); 40da9d61c96c412f6babc7f824152609562f302388Chris Lattner static_assert(noexcept(X(declval<X&>())), "copy constructor can't throw"); 415ff4317536dbd7f03332bb250c8b35ec04a6f5dbChris Lattner static_assert(noexcept(X(declval<X>())), "move constructor can't throw"); 42f15674c680730c652a37a16a5d3f3ff429b0c308Chris Lattner} 43f15674c680730c652a37a16a5d3f3ff429b0c308Chris Lattner