blob: df916cc4e76793d6685c7e84b280b1c6f00a41ce [file] [log] [blame]
Artem Dergachev647804a2017-03-28 15:43:26 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=debug.AnalysisOrder -analyzer-config debug.AnalysisOrder:Bind=true -analyzer-config debug.AnalysisOrder:RegionChanges=true %s 2>&1 | FileCheck %s
2
3struct Super {
4 virtual void m();
5};
6struct Sub : Super {
7 virtual void m() {}
8};
9
10void testTemporaries() {
11 // This triggers RegionChanges twice:
12 // - Once for zero-initialization of the structure.
13 // - Once for creating a temporary region and copying the structure there.
14 // FIXME: This code shouldn't really produce the extra temporary, however
15 // that's how we behave for now.
16 Sub().m();
17}
18
19void seeIfCheckBindWorks() {
20 // This should trigger checkBind. The rest of the code shouldn't.
21 // This also triggers checkRegionChanges after that.
22 // Note that this function is analyzed first, so the messages would be on top.
23 int x = 1;
24}
25
26// seeIfCheckBindWorks():
27// CHECK: Bind
28// CHECK-NEXT: RegionChanges
29
30// testTemporaries():
31// CHECK-NEXT: RegionChanges
32// CHECK-NEXT: RegionChanges
33
34// Make sure there's no further output.
35// CHECK-NOT: Bind
36// CHECK-NOT: RegionChanges