blob: df916cc4e76793d6685c7e84b280b1c6f00a41ce [file] [log] [blame]
// 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
struct Super {
virtual void m();
};
struct Sub : Super {
virtual void m() {}
};
void testTemporaries() {
// This triggers RegionChanges twice:
// - Once for zero-initialization of the structure.
// - Once for creating a temporary region and copying the structure there.
// FIXME: This code shouldn't really produce the extra temporary, however
// that's how we behave for now.
Sub().m();
}
void seeIfCheckBindWorks() {
// This should trigger checkBind. The rest of the code shouldn't.
// This also triggers checkRegionChanges after that.
// Note that this function is analyzed first, so the messages would be on top.
int x = 1;
}
// seeIfCheckBindWorks():
// CHECK: Bind
// CHECK-NEXT: RegionChanges
// testTemporaries():
// CHECK-NEXT: RegionChanges
// CHECK-NEXT: RegionChanges
// Make sure there's no further output.
// CHECK-NOT: Bind
// CHECK-NOT: RegionChanges