1*ba15d186SMark de Wever // RUN: %clang_cc1 -std=c++23 -fsyntax-only -fcxx-exceptions -verify %s 27d2d5a3aSMatheus Izvekov // RUN: %clang_cc1 -std=c++20 -fsyntax-only -fcxx-exceptions -verify %s 37d2d5a3aSMatheus Izvekov // RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions -verify %s 47d2d5a3aSMatheus Izvekov // expected-no-diagnostics 5fbee4a0cSYang Fan 6fbee4a0cSYang Fan // Throwing 7fbee4a0cSYang Fan namespace test_throwing { 8fbee4a0cSYang Fan class Widget { 9fbee4a0cSYang Fan public: 10fbee4a0cSYang Fan Widget(Widget &&); 11fbee4a0cSYang Fan Widget(const Widget &) = delete; 12fbee4a0cSYang Fan }; 13fbee4a0cSYang Fan seven(Widget w)14fbee4a0cSYang Fanvoid seven(Widget w) { 157d2d5a3aSMatheus Izvekov throw w; 16fbee4a0cSYang Fan } 17fbee4a0cSYang Fan } // namespace test_throwing 18fbee4a0cSYang Fan 19fbee4a0cSYang Fan // Non-constructor conversion 20fbee4a0cSYang Fan namespace test_non_constructor_conversion { 21fbee4a0cSYang Fan class Widget {}; 22fbee4a0cSYang Fan 23fbee4a0cSYang Fan struct To { 247d2d5a3aSMatheus Izvekov operator Widget() const & = delete; 25fbee4a0cSYang Fan operator Widget() &&; 26fbee4a0cSYang Fan }; 27fbee4a0cSYang Fan nine()28fbee4a0cSYang FanWidget nine() { 29fbee4a0cSYang Fan To t; 307d2d5a3aSMatheus Izvekov return t; 31fbee4a0cSYang Fan } 32fbee4a0cSYang Fan } // namespace test_non_constructor_conversion 33fbee4a0cSYang Fan 34fbee4a0cSYang Fan // By-value sinks 35fbee4a0cSYang Fan namespace test_by_value_sinks { 36fbee4a0cSYang Fan class Widget { 37fbee4a0cSYang Fan public: 38fbee4a0cSYang Fan Widget(); 39fbee4a0cSYang Fan Widget(Widget &&); 407d2d5a3aSMatheus Izvekov Widget(const Widget &) = delete; 41fbee4a0cSYang Fan }; 42fbee4a0cSYang Fan 43fbee4a0cSYang Fan struct Fowl { 447d2d5a3aSMatheus Izvekov Fowl(Widget); 45fbee4a0cSYang Fan }; 46fbee4a0cSYang Fan eleven()47fbee4a0cSYang FanFowl eleven() { 48fbee4a0cSYang Fan Widget w; 497d2d5a3aSMatheus Izvekov return w; 50fbee4a0cSYang Fan } 51fbee4a0cSYang Fan } // namespace test_by_value_sinks 52fbee4a0cSYang Fan 53fbee4a0cSYang Fan // Slicing 54fbee4a0cSYang Fan namespace test_slicing { 55fbee4a0cSYang Fan class Base { 56fbee4a0cSYang Fan public: 57fbee4a0cSYang Fan Base(); 58fbee4a0cSYang Fan Base(Base &&); 597d2d5a3aSMatheus Izvekov Base(Base const &) = delete; 60fbee4a0cSYang Fan }; 61fbee4a0cSYang Fan 62fbee4a0cSYang Fan class Derived : public Base {}; 63fbee4a0cSYang Fan thirteen()64fbee4a0cSYang FanBase thirteen() { 65fbee4a0cSYang Fan Derived result; 667d2d5a3aSMatheus Izvekov return result; 67fbee4a0cSYang Fan } 68fbee4a0cSYang Fan } // namespace test_slicing 69