|  |  | 
|  |  | 
|  |  | 
|  | typedef int T; | 
|  | void OBSCURE(func)(int x) { | 
|  | OBSCURE(T) DECORATION value; | 
|  | } | 
|  |  | 
|  |  | 
|  | // Without PCH | 
|  | // RUN: c-index-test -cursor-at=%s.h:1:11 \ | 
|  | // RUN:              -cursor-at=%s.h:2:14 \ | 
|  | // RUN:              -cursor-at=%s.h:4:5 \ | 
|  | // RUN:              -cursor-at=%s.h:5:5 \ | 
|  | // RUN:              -cursor-at=%s.h:5:14 \ | 
|  | // RUN:              -cursor-at=%s:5:7 \ | 
|  | // RUN:              -cursor-at=%s:6:6 \ | 
|  | // RUN:              -cursor-at=%s:6:19 \ | 
|  | // RUN:     -include %s.h %s | FileCheck %s | 
|  |  | 
|  | // With PCH | 
|  | // RUN: c-index-test -write-pch %t.h.pch %s.h -Xclang -detailed-preprocessing-record | 
|  | // RUN: c-index-test -cursor-at=%s.h:1:11 \ | 
|  | // RUN:              -cursor-at=%s.h:2:14 \ | 
|  | // RUN:              -cursor-at=%s.h:4:5 \ | 
|  | // RUN:              -cursor-at=%s.h:5:5 \ | 
|  | // RUN:              -cursor-at=%s.h:5:14 \ | 
|  | // RUN:              -cursor-at=%s:5:7 \ | 
|  | // RUN:              -cursor-at=%s:6:6 \ | 
|  | // RUN:              -cursor-at=%s:6:19 \ | 
|  | // RUN:     -include %t.h %s | FileCheck %s | 
|  |  | 
|  | // From header | 
|  | // CHECK: macro definition=OBSCURE | 
|  | // CHECK: macro definition=DECORATION | 
|  | // CHECK: macro expansion=DECORATION:2:9 | 
|  | // CHECK: macro expansion=OBSCURE:1:9 | 
|  | // CHECK: macro expansion=DECORATION:2:9 | 
|  |  | 
|  | // From main file | 
|  | // CHECK: macro expansion=OBSCURE:1:9 | 
|  | // CHECK: macro expansion=OBSCURE:1:9 | 
|  | // CHECK: macro expansion=DECORATION:2:9 |