return-noreturn.cpp revision c5aff4497e5bfd7523e00b87560c1a5aa65136cc
1// RUN: %clang_cc1 %s -fsyntax-only -verify -Wreturn-type -Wmissing-noreturn -Wno-unreachable-code 2 3// A destructor may be marked noreturn and should still influence the CFG. 4void pr6884_abort() __attribute__((noreturn)); 5 6struct pr6884_abort_struct { 7 pr6884_abort_struct() {} 8 ~pr6884_abort_struct() __attribute__((noreturn)) { pr6884_abort(); } 9}; 10 11int pr6884_f(int x) { 12 switch (x) { default: pr6884_abort(); } 13} 14 15int pr6884_g(int x) { 16 switch (x) { default: pr6884_abort_struct(); } 17} 18 19int pr6884_g_positive(int x) { 20 switch (x) { default: ; } 21} // expected-warning {{control reaches end of non-void function}} 22 23int pr6884_h(int x) { 24 switch (x) { 25 default: { 26 pr6884_abort_struct a; 27 } 28 } 29} 30 31// PR9380 32struct PR9380 { 33 ~PR9380(); 34}; 35struct PR9380_B : public PR9380 { 36 PR9380_B( const PR9380& str ); 37}; 38void test_PR9380(const PR9380& aKey) { 39 const PR9380& flatKey = PR9380_B(aKey); 40} 41 42// Array of objects with destructors. This is purely a coverage test case. 43void test_array() { 44 PR9380 a[2]; 45} 46