| // Without PCH | 
 | // RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin10 -fobjc-arc %s -include %s -include %s | 
 |  | 
 | // With PCH | 
 | // RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin10 -fobjc-arc %s -chain-include %s -chain-include %s | 
 |  | 
 | // expected-no-diagnostics | 
 |  | 
 | #ifndef HEADER1 | 
 | #define HEADER1 | 
 | //===----------------------------------------------------------------------===// | 
 | // Primary header | 
 |  | 
 | @interface I | 
 | +(void)meth; | 
 | @end | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | #elif !defined(HEADER2) | 
 | #define HEADER2 | 
 | #if !defined(HEADER1) | 
 | #error Header inclusion order messed up | 
 | #endif | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | // Dependent header | 
 |  | 
 | @interface I() | 
 | @property (assign) id prop; | 
 | +(void)meth2; | 
 | @end | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | #else | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | void foo(I *i) { | 
 |   [I meth]; | 
 |   [I meth2]; | 
 |   i.prop = 0; | 
 | } | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | #endif |