diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-10-22 06:15:08 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-10-22 06:15:08 -0400 |
commit | 9ed7b339c97dffd6f491aeb7052d6601b9d01ae0 (patch) | |
tree | bc88d3161fd03dcb02592309e5ac5c27f2a031dd /gcc | |
parent | b7f2cfbf0fc7bcd5c1e60fca354de8bf60f9acfa (diff) | |
download | gcc-9ed7b339c97dffd6f491aeb7052d6601b9d01ae0.zip gcc-9ed7b339c97dffd6f491aeb7052d6601b9d01ae0.tar.gz gcc-9ed7b339c97dffd6f491aeb7052d6601b9d01ae0.tar.bz2 |
analyzer: add some C++ test coverage
gcc/testsuite/ChangeLog:
* g++.dg/analyzer/ctor-dtor-1.C: New test.
* g++.dg/analyzer/dyncast-1.C: New test.
* g++.dg/analyzer/vfunc-1.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C | 26 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/analyzer/dyncast-1.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/analyzer/vfunc-1.C | 14 |
3 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C b/gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C new file mode 100644 index 0000000..440ac4d --- /dev/null +++ b/gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C @@ -0,0 +1,26 @@ +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +int foo_count; + +struct foo +{ + foo () __attribute__((noinline)) + { + foo_count++; + } + ~foo () __attribute__((noinline)) + { + foo_count--; + } +}; + +int main () +{ + __analyzer_eval (foo_count == 0); // { dg-warning "TRUE" } + { + foo f; + __analyzer_eval (foo_count == 1); // { dg-warning "TRUE" } + } + __analyzer_eval (foo_count == 0); // { dg-warning "TRUE" } + return 0; +} diff --git a/gcc/testsuite/g++.dg/analyzer/dyncast-1.C b/gcc/testsuite/g++.dg/analyzer/dyncast-1.C new file mode 100644 index 0000000..14acb91 --- /dev/null +++ b/gcc/testsuite/g++.dg/analyzer/dyncast-1.C @@ -0,0 +1,21 @@ +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +struct base +{ + virtual ~base () {} +}; +struct sub : public base +{ + int m_field; +}; + +int +test_1 (base *p) +{ + if (sub *q = dynamic_cast <sub*> (p)) + { + __analyzer_dump_path (); // { dg-message "path" } + return q->m_field; + } + return 0; +} diff --git a/gcc/testsuite/g++.dg/analyzer/vfunc-1.C b/gcc/testsuite/g++.dg/analyzer/vfunc-1.C new file mode 100644 index 0000000..349ab33 --- /dev/null +++ b/gcc/testsuite/g++.dg/analyzer/vfunc-1.C @@ -0,0 +1,14 @@ +struct base +{ + virtual int fn () const; +}; +struct sub : public base +{ + int fn () const; +}; + +int +test_1 (base *p) +{ + return p->fn (); +} |