// 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