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