return-noreturn.cpp revision c5aff4497e5bfd7523e00b87560c1a5aa65136cc
18b3b3db2f6eef4080c9c99c3c3af582f9e8fa41eTed Kremenek// RUN: %clang_cc1 %s -fsyntax-only -verify -Wreturn-type -Wmissing-noreturn -Wno-unreachable-code 200e9cbb13d3e5deb8ee27288e0ed816266ec9e5bChandler Carruth 38b3b3db2f6eef4080c9c99c3c3af582f9e8fa41eTed Kremenek// A destructor may be marked noreturn and should still influence the CFG. 4c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekvoid pr6884_abort() __attribute__((noreturn)); 500e9cbb13d3e5deb8ee27288e0ed816266ec9e5bChandler Carruth 6c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekstruct pr6884_abort_struct { 7c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek pr6884_abort_struct() {} 8c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek ~pr6884_abort_struct() __attribute__((noreturn)) { pr6884_abort(); } 9c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek}; 10c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek 11c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekint pr6884_f(int x) { 12c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek switch (x) { default: pr6884_abort(); } 13c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek} 14c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek 15c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekint pr6884_g(int x) { 16c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek switch (x) { default: pr6884_abort_struct(); } 17c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek} 18c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek 19c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekint pr6884_g_positive(int x) { 20c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek switch (x) { default: ; } 21c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek} // expected-warning {{control reaches end of non-void function}} 228b3b3db2f6eef4080c9c99c3c3af582f9e8fa41eTed Kremenek 23c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenekint pr6884_h(int x) { 24c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek switch (x) { 25c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek default: { 26c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek pr6884_abort_struct a; 27c9f8f5a726bbb562e4b2d4b19d66e6202dcb2657Ted Kremenek } 288b3b3db2f6eef4080c9c99c3c3af582f9e8fa41eTed Kremenek } 298b3b3db2f6eef4080c9c99c3c3af582f9e8fa41eTed Kremenek} 30697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek 31697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek// PR9380 32697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenekstruct PR9380 { 33697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek ~PR9380(); 34697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek}; 35697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenekstruct PR9380_B : public PR9380 { 36697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek PR9380_B( const PR9380& str ); 37697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek}; 38697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenekvoid test_PR9380(const PR9380& aKey) { 39697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek const PR9380& flatKey = PR9380_B(aKey); 40697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek} 41697d42db6cba7a5994d955ce31be2c097902cf0cTed Kremenek 42c5aff4497e5bfd7523e00b87560c1a5aa65136ccTed Kremenek// Array of objects with destructors. This is purely a coverage test case. 43c5aff4497e5bfd7523e00b87560c1a5aa65136ccTed Kremenekvoid test_array() { 44c5aff4497e5bfd7523e00b87560c1a5aa65136ccTed Kremenek PR9380 a[2]; 45c5aff4497e5bfd7523e00b87560c1a5aa65136ccTed Kremenek} 46