diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2013-06-10 20:45:12 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2013-06-10 20:45:12 +0000 |
| commit | 6a0372513edbc473b538d2f724efac50405d6fef (patch) | |
| tree | 8f7776b7310bebaf415ac5b69e46e9f928c37144 /test/Analysis/enum.cpp | |
| parent | 809500fc2c13c8173a16b052304d983864e4a1e1 (diff) | |
Notes
Diffstat (limited to 'test/Analysis/enum.cpp')
| -rw-r--r-- | test/Analysis/enum.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Analysis/enum.cpp b/test/Analysis/enum.cpp new file mode 100644 index 0000000000000..571fa7ba228d8 --- /dev/null +++ b/test/Analysis/enum.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -analyze -std=c++11 -analyzer-checker=debug.ExprInspection %s + +void clang_analyzer_eval(bool); + +enum class Foo { + Zero +}; + +bool pr15703(int x) { + return Foo::Zero == (Foo)x; // don't crash +} + +void testCasting(int i) { + Foo f = static_cast<Foo>(i); + int j = static_cast<int>(f); + if (i == 0) + { + clang_analyzer_eval(f == Foo::Zero); // expected-warning{{TRUE}} + clang_analyzer_eval(j == 0); // expected-warning{{TRUE}} + } + else + { + clang_analyzer_eval(f == Foo::Zero); // expected-warning{{FALSE}} + clang_analyzer_eval(j == 0); // expected-warning{{FALSE}} + } +} |
