annotate clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp @ 252:1f2b6ac9f198 llvm-original

LLVM16-1
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 18 Aug 2023 09:04:13 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===- ExpandModularHeadersPPCallbacks.h - clang-tidy -----------*- C++ -*-===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #include "ExpandModularHeadersPPCallbacks.h"
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
10 #include "clang/Basic/FileManager.h"
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
11 #include "clang/Basic/TargetInfo.h"
150
anatofuz
parents:
diff changeset
12 #include "clang/Frontend/CompilerInstance.h"
anatofuz
parents:
diff changeset
13 #include "clang/Lex/PreprocessorOptions.h"
anatofuz
parents:
diff changeset
14 #include "clang/Serialization/ASTReader.h"
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
15 #include <optional>
150
anatofuz
parents:
diff changeset
16
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
17 #define DEBUG_TYPE "clang-tidy"
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
18
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
19 namespace clang::tooling {
150
anatofuz
parents:
diff changeset
20
anatofuz
parents:
diff changeset
21 class ExpandModularHeadersPPCallbacks::FileRecorder {
anatofuz
parents:
diff changeset
22 public:
anatofuz
parents:
diff changeset
23 /// Records that a given file entry is needed for replaying callbacks.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
24 void addNecessaryFile(const FileEntry *File) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
25 // Don't record modulemap files because it breaks same file detection.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
26 if (!(File->getName().endswith("module.modulemap") ||
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
27 File->getName().endswith("module.private.modulemap") ||
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
28 File->getName().endswith("module.map") ||
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
29 File->getName().endswith("module_private.map")))
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
30 FilesToRecord.insert(File);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
31 }
150
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 /// Records content for a file and adds it to the FileSystem.
anatofuz
parents:
diff changeset
34 void recordFileContent(const FileEntry *File,
anatofuz
parents:
diff changeset
35 const SrcMgr::ContentCache &ContentCache,
anatofuz
parents:
diff changeset
36 llvm::vfs::InMemoryFileSystem &InMemoryFs) {
anatofuz
parents:
diff changeset
37 // Return if we are not interested in the contents of this file.
anatofuz
parents:
diff changeset
38 if (!FilesToRecord.count(File))
anatofuz
parents:
diff changeset
39 return;
anatofuz
parents:
diff changeset
40
anatofuz
parents:
diff changeset
41 // FIXME: Why is this happening? We might be losing contents here.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
42 std::optional<StringRef> Data = ContentCache.getBufferDataIfLoaded();
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
43 if (!Data)
150
anatofuz
parents:
diff changeset
44 return;
anatofuz
parents:
diff changeset
45
anatofuz
parents:
diff changeset
46 InMemoryFs.addFile(File->getName(), /*ModificationTime=*/0,
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
47 llvm::MemoryBuffer::getMemBufferCopy(*Data));
150
anatofuz
parents:
diff changeset
48 // Remove the file from the set of necessary files.
anatofuz
parents:
diff changeset
49 FilesToRecord.erase(File);
anatofuz
parents:
diff changeset
50 }
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 /// Makes sure we have contents for all the files we were interested in. Ideally
anatofuz
parents:
diff changeset
53 /// `FilesToRecord` should be empty.
anatofuz
parents:
diff changeset
54 void checkAllFilesRecorded() {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
55 LLVM_DEBUG({
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
56 for (auto FileEntry : FilesToRecord)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
57 llvm::dbgs() << "Did not record contents for input file: "
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
58 << FileEntry->getName() << "\n";
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
59 });
150
anatofuz
parents:
diff changeset
60 }
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 private:
anatofuz
parents:
diff changeset
63 /// A set of files whose contents are to be recorded.
anatofuz
parents:
diff changeset
64 llvm::DenseSet<const FileEntry *> FilesToRecord;
anatofuz
parents:
diff changeset
65 };
anatofuz
parents:
diff changeset
66
anatofuz
parents:
diff changeset
67 ExpandModularHeadersPPCallbacks::ExpandModularHeadersPPCallbacks(
anatofuz
parents:
diff changeset
68 CompilerInstance *CI,
anatofuz
parents:
diff changeset
69 IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS)
anatofuz
parents:
diff changeset
70 : Recorder(std::make_unique<FileRecorder>()), Compiler(*CI),
anatofuz
parents:
diff changeset
71 InMemoryFs(new llvm::vfs::InMemoryFileSystem),
anatofuz
parents:
diff changeset
72 Sources(Compiler.getSourceManager()),
anatofuz
parents:
diff changeset
73 // Forward the new diagnostics to the original DiagnosticConsumer.
anatofuz
parents:
diff changeset
74 Diags(new DiagnosticIDs, new DiagnosticOptions,
anatofuz
parents:
diff changeset
75 new ForwardingDiagnosticConsumer(Compiler.getDiagnosticClient())),
anatofuz
parents:
diff changeset
76 LangOpts(Compiler.getLangOpts()) {
anatofuz
parents:
diff changeset
77 // Add a FileSystem containing the extra files needed in place of modular
anatofuz
parents:
diff changeset
78 // headers.
anatofuz
parents:
diff changeset
79 OverlayFS->pushOverlay(InMemoryFs);
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 Diags.setSourceManager(&Sources);
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
82 // FIXME: Investigate whatever is there better way to initialize DiagEngine
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
83 // or whatever DiagEngine can be shared by multiple preprocessors
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
84 ProcessWarningOptions(Diags, Compiler.getDiagnosticOpts());
150
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 LangOpts.Modules = false;
anatofuz
parents:
diff changeset
87
anatofuz
parents:
diff changeset
88 auto HSO = std::make_shared<HeaderSearchOptions>();
anatofuz
parents:
diff changeset
89 *HSO = Compiler.getHeaderSearchOpts();
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 HeaderInfo = std::make_unique<HeaderSearch>(HSO, Sources, Diags, LangOpts,
anatofuz
parents:
diff changeset
92 &Compiler.getTarget());
anatofuz
parents:
diff changeset
93
anatofuz
parents:
diff changeset
94 auto PO = std::make_shared<PreprocessorOptions>();
anatofuz
parents:
diff changeset
95 *PO = Compiler.getPreprocessorOpts();
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 PP = std::make_unique<clang::Preprocessor>(PO, Diags, LangOpts, Sources,
anatofuz
parents:
diff changeset
98 *HeaderInfo, ModuleLoader,
anatofuz
parents:
diff changeset
99 /*IILookup=*/nullptr,
anatofuz
parents:
diff changeset
100 /*OwnsHeaderSearch=*/false);
anatofuz
parents:
diff changeset
101 PP->Initialize(Compiler.getTarget(), Compiler.getAuxTarget());
anatofuz
parents:
diff changeset
102 InitializePreprocessor(*PP, *PO, Compiler.getPCHContainerReader(),
anatofuz
parents:
diff changeset
103 Compiler.getFrontendOpts());
anatofuz
parents:
diff changeset
104 ApplyHeaderSearchOptions(*HeaderInfo, *HSO, LangOpts,
anatofuz
parents:
diff changeset
105 Compiler.getTarget().getTriple());
anatofuz
parents:
diff changeset
106 }
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 ExpandModularHeadersPPCallbacks::~ExpandModularHeadersPPCallbacks() = default;
anatofuz
parents:
diff changeset
109
anatofuz
parents:
diff changeset
110 Preprocessor *ExpandModularHeadersPPCallbacks::getPreprocessor() const {
anatofuz
parents:
diff changeset
111 return PP.get();
anatofuz
parents:
diff changeset
112 }
anatofuz
parents:
diff changeset
113
anatofuz
parents:
diff changeset
114 void ExpandModularHeadersPPCallbacks::handleModuleFile(
anatofuz
parents:
diff changeset
115 serialization::ModuleFile *MF) {
anatofuz
parents:
diff changeset
116 if (!MF)
anatofuz
parents:
diff changeset
117 return;
anatofuz
parents:
diff changeset
118 // Avoid processing a ModuleFile more than once.
anatofuz
parents:
diff changeset
119 if (VisitedModules.count(MF))
anatofuz
parents:
diff changeset
120 return;
anatofuz
parents:
diff changeset
121 VisitedModules.insert(MF);
anatofuz
parents:
diff changeset
122
anatofuz
parents:
diff changeset
123 // Visit all the input files of this module and mark them to record their
anatofuz
parents:
diff changeset
124 // contents later.
anatofuz
parents:
diff changeset
125 Compiler.getASTReader()->visitInputFiles(
anatofuz
parents:
diff changeset
126 *MF, true, false,
anatofuz
parents:
diff changeset
127 [this](const serialization::InputFile &IF, bool /*IsSystem*/) {
anatofuz
parents:
diff changeset
128 Recorder->addNecessaryFile(IF.getFile());
anatofuz
parents:
diff changeset
129 });
anatofuz
parents:
diff changeset
130 // Recursively handle all transitively imported modules.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
131 for (auto *Import : MF->Imports)
150
anatofuz
parents:
diff changeset
132 handleModuleFile(Import);
anatofuz
parents:
diff changeset
133 }
anatofuz
parents:
diff changeset
134
anatofuz
parents:
diff changeset
135 void ExpandModularHeadersPPCallbacks::parseToLocation(SourceLocation Loc) {
anatofuz
parents:
diff changeset
136 // Load all source locations present in the external sources.
anatofuz
parents:
diff changeset
137 for (unsigned I = 0, N = Sources.loaded_sloc_entry_size(); I != N; ++I) {
anatofuz
parents:
diff changeset
138 Sources.getLoadedSLocEntry(I, nullptr);
anatofuz
parents:
diff changeset
139 }
anatofuz
parents:
diff changeset
140 // Record contents of files we are interested in and add to the FileSystem.
anatofuz
parents:
diff changeset
141 for (auto It = Sources.fileinfo_begin(); It != Sources.fileinfo_end(); ++It) {
anatofuz
parents:
diff changeset
142 Recorder->recordFileContent(It->getFirst(), *It->getSecond(), *InMemoryFs);
anatofuz
parents:
diff changeset
143 }
anatofuz
parents:
diff changeset
144 Recorder->checkAllFilesRecorded();
anatofuz
parents:
diff changeset
145
anatofuz
parents:
diff changeset
146 if (!StartedLexing) {
anatofuz
parents:
diff changeset
147 StartedLexing = true;
anatofuz
parents:
diff changeset
148 PP->Lex(CurrentToken);
anatofuz
parents:
diff changeset
149 }
anatofuz
parents:
diff changeset
150 while (!CurrentToken.is(tok::eof) &&
anatofuz
parents:
diff changeset
151 Sources.isBeforeInTranslationUnit(CurrentToken.getLocation(), Loc)) {
anatofuz
parents:
diff changeset
152 PP->Lex(CurrentToken);
anatofuz
parents:
diff changeset
153 }
anatofuz
parents:
diff changeset
154 }
anatofuz
parents:
diff changeset
155
anatofuz
parents:
diff changeset
156 void ExpandModularHeadersPPCallbacks::FileChanged(
anatofuz
parents:
diff changeset
157 SourceLocation Loc, FileChangeReason Reason,
anatofuz
parents:
diff changeset
158 SrcMgr::CharacteristicKind FileType, FileID PrevFID = FileID()) {
anatofuz
parents:
diff changeset
159 if (!EnteredMainFile) {
anatofuz
parents:
diff changeset
160 EnteredMainFile = true;
anatofuz
parents:
diff changeset
161 PP->EnterMainSourceFile();
anatofuz
parents:
diff changeset
162 }
anatofuz
parents:
diff changeset
163 }
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 void ExpandModularHeadersPPCallbacks::InclusionDirective(
anatofuz
parents:
diff changeset
166 SourceLocation DirectiveLoc, const Token &IncludeToken,
anatofuz
parents:
diff changeset
167 StringRef IncludedFilename, bool IsAngled, CharSourceRange FilenameRange,
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
168 OptionalFileEntryRef IncludedFile, StringRef SearchPath,
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
169 StringRef RelativePath, const Module *Imported,
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
170 SrcMgr::CharacteristicKind FileType) {
150
anatofuz
parents:
diff changeset
171 if (Imported) {
anatofuz
parents:
diff changeset
172 serialization::ModuleFile *MF =
anatofuz
parents:
diff changeset
173 Compiler.getASTReader()->getModuleManager().lookup(
anatofuz
parents:
diff changeset
174 Imported->getASTFile());
anatofuz
parents:
diff changeset
175 handleModuleFile(MF);
anatofuz
parents:
diff changeset
176 }
anatofuz
parents:
diff changeset
177 parseToLocation(DirectiveLoc);
anatofuz
parents:
diff changeset
178 }
anatofuz
parents:
diff changeset
179
anatofuz
parents:
diff changeset
180 void ExpandModularHeadersPPCallbacks::EndOfMainFile() {
anatofuz
parents:
diff changeset
181 while (!CurrentToken.is(tok::eof))
anatofuz
parents:
diff changeset
182 PP->Lex(CurrentToken);
anatofuz
parents:
diff changeset
183 }
anatofuz
parents:
diff changeset
184
anatofuz
parents:
diff changeset
185 // Handle all other callbacks.
anatofuz
parents:
diff changeset
186 // Just parse to the corresponding location to generate the same callback for
anatofuz
parents:
diff changeset
187 // the PPCallbacks registered in our custom preprocessor.
anatofuz
parents:
diff changeset
188 void ExpandModularHeadersPPCallbacks::Ident(SourceLocation Loc, StringRef) {
anatofuz
parents:
diff changeset
189 parseToLocation(Loc);
anatofuz
parents:
diff changeset
190 }
anatofuz
parents:
diff changeset
191 void ExpandModularHeadersPPCallbacks::PragmaDirective(SourceLocation Loc,
anatofuz
parents:
diff changeset
192 PragmaIntroducerKind) {
anatofuz
parents:
diff changeset
193 parseToLocation(Loc);
anatofuz
parents:
diff changeset
194 }
anatofuz
parents:
diff changeset
195 void ExpandModularHeadersPPCallbacks::PragmaComment(SourceLocation Loc,
anatofuz
parents:
diff changeset
196 const IdentifierInfo *,
anatofuz
parents:
diff changeset
197 StringRef) {
anatofuz
parents:
diff changeset
198 parseToLocation(Loc);
anatofuz
parents:
diff changeset
199 }
anatofuz
parents:
diff changeset
200 void ExpandModularHeadersPPCallbacks::PragmaDetectMismatch(SourceLocation Loc,
anatofuz
parents:
diff changeset
201 StringRef,
anatofuz
parents:
diff changeset
202 StringRef) {
anatofuz
parents:
diff changeset
203 parseToLocation(Loc);
anatofuz
parents:
diff changeset
204 }
anatofuz
parents:
diff changeset
205 void ExpandModularHeadersPPCallbacks::PragmaDebug(SourceLocation Loc,
anatofuz
parents:
diff changeset
206 StringRef) {
anatofuz
parents:
diff changeset
207 parseToLocation(Loc);
anatofuz
parents:
diff changeset
208 }
anatofuz
parents:
diff changeset
209 void ExpandModularHeadersPPCallbacks::PragmaMessage(SourceLocation Loc,
anatofuz
parents:
diff changeset
210 StringRef,
anatofuz
parents:
diff changeset
211 PragmaMessageKind,
anatofuz
parents:
diff changeset
212 StringRef) {
anatofuz
parents:
diff changeset
213 parseToLocation(Loc);
anatofuz
parents:
diff changeset
214 }
anatofuz
parents:
diff changeset
215 void ExpandModularHeadersPPCallbacks::PragmaDiagnosticPush(SourceLocation Loc,
anatofuz
parents:
diff changeset
216 StringRef) {
anatofuz
parents:
diff changeset
217 parseToLocation(Loc);
anatofuz
parents:
diff changeset
218 }
anatofuz
parents:
diff changeset
219 void ExpandModularHeadersPPCallbacks::PragmaDiagnosticPop(SourceLocation Loc,
anatofuz
parents:
diff changeset
220 StringRef) {
anatofuz
parents:
diff changeset
221 parseToLocation(Loc);
anatofuz
parents:
diff changeset
222 }
anatofuz
parents:
diff changeset
223 void ExpandModularHeadersPPCallbacks::PragmaDiagnostic(SourceLocation Loc,
anatofuz
parents:
diff changeset
224 StringRef,
anatofuz
parents:
diff changeset
225 diag::Severity,
anatofuz
parents:
diff changeset
226 StringRef) {
anatofuz
parents:
diff changeset
227 parseToLocation(Loc);
anatofuz
parents:
diff changeset
228 }
anatofuz
parents:
diff changeset
229 void ExpandModularHeadersPPCallbacks::HasInclude(SourceLocation Loc, StringRef,
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
230 bool, OptionalFileEntryRef,
150
anatofuz
parents:
diff changeset
231 SrcMgr::CharacteristicKind) {
anatofuz
parents:
diff changeset
232 parseToLocation(Loc);
anatofuz
parents:
diff changeset
233 }
anatofuz
parents:
diff changeset
234 void ExpandModularHeadersPPCallbacks::PragmaOpenCLExtension(
anatofuz
parents:
diff changeset
235 SourceLocation NameLoc, const IdentifierInfo *, SourceLocation StateLoc,
anatofuz
parents:
diff changeset
236 unsigned) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
237 // FIXME: Figure out whether it's the right location to parse to.
150
anatofuz
parents:
diff changeset
238 parseToLocation(NameLoc);
anatofuz
parents:
diff changeset
239 }
anatofuz
parents:
diff changeset
240 void ExpandModularHeadersPPCallbacks::PragmaWarning(SourceLocation Loc,
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
241 PragmaWarningSpecifier,
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
242 ArrayRef<int>) {
150
anatofuz
parents:
diff changeset
243 parseToLocation(Loc);
anatofuz
parents:
diff changeset
244 }
anatofuz
parents:
diff changeset
245 void ExpandModularHeadersPPCallbacks::PragmaWarningPush(SourceLocation Loc,
anatofuz
parents:
diff changeset
246 int) {
anatofuz
parents:
diff changeset
247 parseToLocation(Loc);
anatofuz
parents:
diff changeset
248 }
anatofuz
parents:
diff changeset
249 void ExpandModularHeadersPPCallbacks::PragmaWarningPop(SourceLocation Loc) {
anatofuz
parents:
diff changeset
250 parseToLocation(Loc);
anatofuz
parents:
diff changeset
251 }
anatofuz
parents:
diff changeset
252 void ExpandModularHeadersPPCallbacks::PragmaAssumeNonNullBegin(
anatofuz
parents:
diff changeset
253 SourceLocation Loc) {
anatofuz
parents:
diff changeset
254 parseToLocation(Loc);
anatofuz
parents:
diff changeset
255 }
anatofuz
parents:
diff changeset
256 void ExpandModularHeadersPPCallbacks::PragmaAssumeNonNullEnd(
anatofuz
parents:
diff changeset
257 SourceLocation Loc) {
anatofuz
parents:
diff changeset
258 parseToLocation(Loc);
anatofuz
parents:
diff changeset
259 }
anatofuz
parents:
diff changeset
260 void ExpandModularHeadersPPCallbacks::MacroExpands(const Token &MacroNameTok,
anatofuz
parents:
diff changeset
261 const MacroDefinition &,
anatofuz
parents:
diff changeset
262 SourceRange Range,
anatofuz
parents:
diff changeset
263 const MacroArgs *) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
264 // FIXME: Figure out whether it's the right location to parse to.
150
anatofuz
parents:
diff changeset
265 parseToLocation(Range.getBegin());
anatofuz
parents:
diff changeset
266 }
anatofuz
parents:
diff changeset
267 void ExpandModularHeadersPPCallbacks::MacroDefined(const Token &MacroNameTok,
anatofuz
parents:
diff changeset
268 const MacroDirective *MD) {
anatofuz
parents:
diff changeset
269 parseToLocation(MD->getLocation());
anatofuz
parents:
diff changeset
270 }
anatofuz
parents:
diff changeset
271 void ExpandModularHeadersPPCallbacks::MacroUndefined(
anatofuz
parents:
diff changeset
272 const Token &, const MacroDefinition &, const MacroDirective *Undef) {
anatofuz
parents:
diff changeset
273 if (Undef)
anatofuz
parents:
diff changeset
274 parseToLocation(Undef->getLocation());
anatofuz
parents:
diff changeset
275 }
anatofuz
parents:
diff changeset
276 void ExpandModularHeadersPPCallbacks::Defined(const Token &MacroNameTok,
anatofuz
parents:
diff changeset
277 const MacroDefinition &,
anatofuz
parents:
diff changeset
278 SourceRange Range) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
279 // FIXME: Figure out whether it's the right location to parse to.
150
anatofuz
parents:
diff changeset
280 parseToLocation(Range.getBegin());
anatofuz
parents:
diff changeset
281 }
anatofuz
parents:
diff changeset
282 void ExpandModularHeadersPPCallbacks::SourceRangeSkipped(
anatofuz
parents:
diff changeset
283 SourceRange Range, SourceLocation EndifLoc) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
284 // FIXME: Figure out whether it's the right location to parse to.
150
anatofuz
parents:
diff changeset
285 parseToLocation(EndifLoc);
anatofuz
parents:
diff changeset
286 }
anatofuz
parents:
diff changeset
287 void ExpandModularHeadersPPCallbacks::If(SourceLocation Loc, SourceRange,
anatofuz
parents:
diff changeset
288 ConditionValueKind) {
anatofuz
parents:
diff changeset
289 parseToLocation(Loc);
anatofuz
parents:
diff changeset
290 }
anatofuz
parents:
diff changeset
291 void ExpandModularHeadersPPCallbacks::Elif(SourceLocation Loc, SourceRange,
anatofuz
parents:
diff changeset
292 ConditionValueKind, SourceLocation) {
anatofuz
parents:
diff changeset
293 parseToLocation(Loc);
anatofuz
parents:
diff changeset
294 }
anatofuz
parents:
diff changeset
295 void ExpandModularHeadersPPCallbacks::Ifdef(SourceLocation Loc, const Token &,
anatofuz
parents:
diff changeset
296 const MacroDefinition &) {
anatofuz
parents:
diff changeset
297 parseToLocation(Loc);
anatofuz
parents:
diff changeset
298 }
anatofuz
parents:
diff changeset
299 void ExpandModularHeadersPPCallbacks::Ifndef(SourceLocation Loc, const Token &,
anatofuz
parents:
diff changeset
300 const MacroDefinition &) {
anatofuz
parents:
diff changeset
301 parseToLocation(Loc);
anatofuz
parents:
diff changeset
302 }
anatofuz
parents:
diff changeset
303 void ExpandModularHeadersPPCallbacks::Else(SourceLocation Loc, SourceLocation) {
anatofuz
parents:
diff changeset
304 parseToLocation(Loc);
anatofuz
parents:
diff changeset
305 }
anatofuz
parents:
diff changeset
306 void ExpandModularHeadersPPCallbacks::Endif(SourceLocation Loc,
anatofuz
parents:
diff changeset
307 SourceLocation) {
anatofuz
parents:
diff changeset
308 parseToLocation(Loc);
anatofuz
parents:
diff changeset
309 }
anatofuz
parents:
diff changeset
310
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
311 } // namespace clang::tooling