# Implicit Checkers

Even though the implicit checkers do not produce any warnings, they are used to support the analyzer core and model known APIs. See also Default Checkers and Experimental (Alpha) Checkers.

- Core Implicit Checkers
- OS X Implicit Checkers

### Core Implicit Checkers

Name, Description | Example

core.DynamicTypePropagation (C++, ObjC)
Generate dynamic type information.

    // C++
    class A {
    public:
      A(int x) {}
      virtual int foo();
    };

    class B: public A {
    public:
      B()
      :A(foo())
      // DynamicTypeInfo for 'this' rigion will wrap type 'A'
      // unless the base constructor call expression is processed
      {}
      virtual int foo();
    };

    // Objective-C
    @interface MyClass : NSObject {}
    @end

    @implementation MyClass
    + (void)foo {
      MyClass *x = [[self alloc] init];
      // DynamicTypeInfo from a cast: from 'id' to 'MyClass *'
    }
    @end

    void test() {
      MyClass *x = [MyClass alloc];
      // DynamicTypeInfo from a call to alloc:
      // from 'id' to 'MyClass *'
    }

core.builtin.BuiltinFunctions (C)
Evaluate compiler builtin functions (e.g., `alloca()`)

    void test(int x) {
      int *p = (int *)__builtin_alloca(8);
        // evaluates to AllocaRegion

      if(__builtin_expect(x > 10, 0)) // evaluates to 'x > 10'
        x = 0;
    }

core.builtin.NoReturnFunctions (C, ObjC)
Evaluate "panic" functions that are known to not return to the caller.

    // C
    void test() {
      panic(); // generate sink
    }

    // Objective-C
    @interface MyObj : NSObject {}
    - (void)foo;
    @end

    @implementation MyObj
    - (void)foo {
      [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd
                                           object:self
                                           file:(@"somefile.m")
                                           lineNumber:1
                                           description:(@"some text")];
        // generate sink
    }
    @end

### OS X Implicit Checkers

Name, Description | Example

osx.cocoa.Loops (ObjC)
Improved modeling of loops using Cocoa collection types.

    void test() {
      id x;
      for (x in [NSArray testObject]) {
        // assume the value of 'x' is non-nil
      }
    }

osx.cocoa.NonNilReturnValue (ObjC)
Model the APIs that are guaranteed to return a non-nil value.

    void test(NSArray *A) {
      id subscriptObj = A[1]; // assume the value is non-nil
    }