diff options
author | Gabor Marton <gabor.marton@ericsson.com> | 2019-07-04 11:39:00 +0000 |
---|---|---|
committer | Gabor Marton <gabor.marton@ericsson.com> | 2019-07-04 11:39:00 +0000 |
commit | e712295f11bb90d38c8749a338293eaba06d96a5 (patch) | |
tree | 71dfdb6eed06a5defa3e5327bfa7d768e03bae84 /clang/test/Analysis/ctu-main.cpp | |
parent | 04531ba3a288086fc01e469af2fa07191df8edd0 (diff) | |
download | bcm5719-llvm-e712295f11bb90d38c8749a338293eaba06d96a5.tar.gz bcm5719-llvm-e712295f11bb90d38c8749a338293eaba06d96a5.zip |
[CTU] Add support for virtual functions
Reviewers: Szelethus, xazax.hun
Subscribers: rnkovacs, dkrupp, gamesh411, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D63920
llvm-svn: 365133
Diffstat (limited to 'clang/test/Analysis/ctu-main.cpp')
-rw-r--r-- | clang/test/Analysis/ctu-main.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/clang/test/Analysis/ctu-main.cpp b/clang/test/Analysis/ctu-main.cpp index a5de18bb3ec..1cb0d4a9d77 100644 --- a/clang/test/Analysis/ctu-main.cpp +++ b/clang/test/Analysis/ctu-main.cpp @@ -45,6 +45,7 @@ public: class mycls { public: int fcl(int x); + virtual int fvcl(int x); static int fscl(int x); class embed_cls2 { @@ -53,6 +54,11 @@ public: }; }; +class derived : public mycls { +public: + virtual int fvcl(int x) override; +}; + namespace chns { int chf1(int x); } @@ -98,6 +104,14 @@ union U { }; extern U extU; +void test_virtual_functions(mycls* obj) { + // The dynamic type is known. + clang_analyzer_eval(mycls().fvcl(1) == 8); // expected-warning{{TRUE}} + clang_analyzer_eval(derived().fvcl(1) == 9); // expected-warning{{TRUE}} + // We cannot decide about the dynamic type. + clang_analyzer_eval(obj->fvcl(1) == 8); // expected-warning{{FALSE}} expected-warning{{TRUE}} +} + int main() { clang_analyzer_eval(f(3) == 2); // expected-warning{{TRUE}} clang_analyzer_eval(f(4) == 3); // expected-warning{{TRUE}} @@ -116,7 +130,7 @@ int main() { clang_analyzer_eval(fun_using_anon_struct(8) == 8); // expected-warning{{TRUE}} clang_analyzer_eval(other_macro_diag(1) == 1); // expected-warning{{TRUE}} - // expected-warning@Inputs/ctu-other.cpp:80{{REACHABLE}} + // expected-warning@Inputs/ctu-other.cpp:93{{REACHABLE}} MACRODIAG(); // expected-warning{{REACHABLE}} clang_analyzer_eval(extInt == 2); // expected-warning{{TRUE}} |