// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=dynamic-bifurcate -verify -analyzer-config eagerly-assume=false %s
void ;
void ;
// Test inlining of ObjC class methods.
typedef signed char BOOL;
typedef struct objc_class *Class;
typedef struct objc_object * id;
// Vanila: ObjC class method is called by name.
// The definition is defined by the parent. Make sure we find it and inline.
// ObjC class method is called by name. Definition is in the category.
int
// ObjC class method is called by name. Definition is in the parent category.
int
// There is no declaration in the class but there is one in the parent. Make
// sure we pick the definition from the class and not the parent.
// ObjC class method is called by unknown class declaration (passed in as a
// parameter). We should not inline in such case.
// ObjC class method call through a decl with a known type.
// Note, [self class] could be a subclass. Do we still want to inline here?
// Another false negative due to us not reasoning about self, which in this
// case points to the object of the class in the call site and should be equal
// to [MyParent class].
int
// TODO: We do not inline 'getNum' in the following case, where the value of
// 'self' in call '[self getNum]' is available and evaualtes to
// 'SelfUsedInParentChild' if it's called from fooA.
// Self region should get created before we call foo and yje call to super
// should keep it live.
int
void
int