mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 11:36:46 +00:00

This patch provides more information to the `PPCallbacks::InclusionDirective()` hook. We now always pass the suggested module, regardless of whether it was actually imported or not. The extra `bool ModuleImported` parameter then denotes whether the header `#include` will be automatically translated into import the the module. The main change is in `clang/lib/Lex/PPDirectives.cpp`, where we take care to not modify `SuggestedModule` after it's been populated by `LookupHeaderIncludeOrImport()`. We now exclusively use the `SM` (`ModuleToImport`) variable instead, which has been equivalent to `SuggestedModule` until now. This allows us to use the original non-modified `SuggestedModule` for the callback itself. (This patch turns out to be necessary for https://github.com/apple/llvm-project/pull/8011).
151 lines
6.3 KiB
C++
151 lines
6.3 KiB
C++
// RUN: pp-trace %s -- -undef -target x86_64 -std=c++11 | FileCheck --strict-whitespace %s
|
|
|
|
#include "Inputs/Level1A.h"
|
|
#include "Inputs/Level1B.h"
|
|
|
|
// CHECK: ---
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: (invalid)
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "<built-in>:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}pp-trace-include.cpp"
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "<built-in>:1:1"
|
|
// CHECK-NEXT: Reason: RenameFile
|
|
// CHECK-NEXT: FileType: C_System
|
|
// CHECK-NEXT: PrevFID: (invalid)
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK: MacroNameTok: __STDC__
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK: MacroNameTok: __STDC_HOSTED__
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK: MacroNameTok: __cplusplus
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK: MacroNameTok: __STDC_UTF_16__
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK: MacroNameTok: __STDC_UTF_32__
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "<command line>:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: (invalid)
|
|
// CHECK: - Callback: MacroDefined
|
|
// CHECK: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "<built-in>:1:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: (invalid)
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:1:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: (getFileEntryForID failed)
|
|
// CHECK-NEXT: - Callback: InclusionDirective
|
|
// CHECK-NEXT: HashLoc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:3:1"
|
|
// CHECK-NEXT: IncludeTok: include
|
|
// CHECK-NEXT: FileName: "Inputs/Level1A.h"
|
|
// CHECK-NEXT: IsAngled: false
|
|
// CHECK-NEXT: FilenameRange: "Inputs/Level1A.h"
|
|
// CHECK-NEXT: File: "{{.*}}{{[/\\]}}Inputs/Level1A.h"
|
|
// CHECK-NEXT: SearchPath: "{{.*}}{{[/\\]}}pp-trace"
|
|
// CHECK-NEXT: RelativePath: "Inputs/Level1A.h"
|
|
// CHECK-NEXT: SuggestedModule: (null)
|
|
// CHECK-NEXT: ModuleImported: false
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level1A.h:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}pp-trace-include.cpp"
|
|
// CHECK-NEXT: - Callback: InclusionDirective
|
|
// CHECK-NEXT: HashLoc: "{{.*}}{{[/\\]}}Inputs/Level1A.h:1:1"
|
|
// CHECK-NEXT: IncludeTok: include
|
|
// CHECK-NEXT: FileName: "Level2A.h"
|
|
// CHECK-NEXT: IsAngled: false
|
|
// CHECK-NEXT: FilenameRange: "Level2A.h"
|
|
// CHECK-NEXT: File: "{{.*}}{{[/\\]}}Inputs/Level2A.h"
|
|
// CHECK-NEXT: SearchPath: "{{.*}}{{[/\\]}}Inputs"
|
|
// CHECK-NEXT: RelativePath: "Level2A.h"
|
|
// CHECK-NEXT: SuggestedModule: (null)
|
|
// CHECK-NEXT: ModuleImported: false
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level2A.h:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level1A.h"
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK-NEXT: MacroNameTok: MACRO_2A
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level1A.h:2:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level2A.h"
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK-NEXT: MacroNameTok: MACRO_1A
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:4:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level1A.h"
|
|
// CHECK-NEXT: - Callback: InclusionDirective
|
|
// CHECK-NEXT: HashLoc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:4:1"
|
|
// CHECK-NEXT: IncludeTok: include
|
|
// CHECK-NEXT: FileName: "Inputs/Level1B.h"
|
|
// CHECK-NEXT: IsAngled: false
|
|
// CHECK-NEXT: FilenameRange: "Inputs/Level1B.h"
|
|
// CHECK-NEXT: File: "{{.*}}{{[/\\]}}Inputs/Level1B.h"
|
|
// CHECK-NEXT: SearchPath: "{{.*}}{{[/\\]}}pp-trace"
|
|
// CHECK-NEXT: RelativePath: "Inputs/Level1B.h"
|
|
// CHECK-NEXT: SuggestedModule: (null)
|
|
// CHECK-NEXT: ModuleImported: false
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level1B.h:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}pp-trace-include.cpp"
|
|
// CHECK-NEXT: - Callback: InclusionDirective
|
|
// CHECK-NEXT: HashLoc: "{{.*}}{{[/\\]}}Inputs/Level1B.h:1:1"
|
|
// CHECK-NEXT: IncludeTok: include
|
|
// CHECK-NEXT: FileName: "Level2B.h"
|
|
// CHECK-NEXT: IsAngled: false
|
|
// CHECK-NEXT: FilenameRange: "Level2B.h"
|
|
// CHECK-NEXT: File: "{{.*}}{{[/\\]}}Inputs/Level2B.h"
|
|
// CHECK-NEXT: SearchPath: "{{.*}}{{[/\\]}}Inputs"
|
|
// CHECK-NEXT: RelativePath: "Level2B.h"
|
|
// CHECK-NEXT: SuggestedModule: (null)
|
|
// CHECK-NEXT: ModuleImported: false
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level2B.h:1:1"
|
|
// CHECK-NEXT: Reason: EnterFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level1B.h"
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK-NEXT: MacroNameTok: MACRO_2B
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}Inputs/Level1B.h:2:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level2B.h"
|
|
// CHECK-NEXT: - Callback: MacroDefined
|
|
// CHECK-NEXT: MacroNameTok: MACRO_1B
|
|
// CHECK-NEXT: MacroDirective: MD_Define
|
|
// CHECK-NEXT: - Callback: FileChanged
|
|
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-include.cpp:5:1"
|
|
// CHECK-NEXT: Reason: ExitFile
|
|
// CHECK-NEXT: FileType: C_User
|
|
// CHECK-NEXT: PrevFID: "{{.*}}{{[/\\]}}Inputs/Level1B.h"
|
|
// CHECK-NEXT: - Callback: EndOfMainFile
|
|
// CHECK-NEXT: ...
|