Skip to content

Commit 3c51e90

Browse files
committed
update cfe
1 parent 3f5553c commit 3c51e90

File tree

1 file changed

+55
-9
lines changed

1 file changed

+55
-9
lines changed

tooling/cfe/main.cc

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "llvm/ADT/IntrusiveRefCntPtr.h"
1+
#include "llvm/ADT/StringMap.h"
22
#include "llvm/Support/CommandLine.h"
33
#include "llvm/Support/Host.h"
44
#include "clang/AST/ASTContext.h"
@@ -16,41 +16,87 @@
1616
#include "clang/Lex/Preprocessor.h"
1717
#include "clang/Parse/Parser.h"
1818
#include "clang/Parse/ParseAST.h"
19-
#include <iostream>
19+
2020
using namespace llvm;
2121
using namespace clang;
2222
static cl::opt<std::string> FileName(cl::Positional, cl::desc("Input file"),
2323
cl::Required);
24+
2425
int main(int argc, char **argv) {
2526
cl::ParseCommandLineOptions(argc, argv, "My simple front end\n");
2627
CompilerInstance CI;
2728
DiagnosticOptions diagnosticOptions;
28-
CI.createDiagnostics();
29-
// IntrusiveRefCntPtr<TargetOptions> PTO(new TargetOptions());
29+
CI.createDiagnostics(nullptr, true);
3030
auto PTO = std::make_shared<TargetOptions>(TargetOptions());
3131
PTO->Triple = sys::getDefaultTargetTriple();
32+
{
33+
llvm::errs() << "targetTriple:" << sys::getDefaultTargetTriple() << '\n'
34+
<< "cpu name: " << sys::getHostCPUName() << '\n'
35+
<< "process triple: " << sys::getProcessTriple() << '\n'
36+
<< "Big endian: " << sys::IsBigEndianHost << '\n';
37+
StringMap<bool> strMap;
38+
bool succeed = sys::getHostCPUFeatures(strMap);
39+
if (succeed) {
40+
errs() << "features: ";
41+
for (auto &feature : strMap) {
42+
errs() << feature.getKey() << ": " << feature.getValue();
43+
}
44+
}
45+
}
3246
TargetInfo *PTI = TargetInfo::CreateTargetInfo(CI.getDiagnostics(), PTO);
3347
CI.setTarget(PTI);
3448

3549
CI.createFileManager();
36-
CI.createSourceManager(CI.getFileManager());
50+
FileManager &filemgr = CI.getFileManager();
51+
CI.createSourceManager(filemgr);
3752
CI.createPreprocessor(TranslationUnitKind::TU_Complete);
3853
CI.getPreprocessorOpts().UsePredefines = false;
3954
ASTConsumer *astConsumer = CreateASTPrinter(NULL, "");
4055
CI.setASTConsumer(astConsumer);
4156
CI.createASTContext();
4257
CI.createSema(TU_Complete, NULL);
58+
{
59+
errs() << "hasdiagnostics: " << CI.hasDiagnostics() << '\n';
60+
errs() << "hasinvocation: " << CI.hasInvocation() << '\n';
61+
{
62+
auto &headerSearchOpts = CI.getHeaderSearchOpts();
63+
errs() << "sysroot: " << headerSearchOpts.Sysroot << '\n';
64+
errs() << "resourceDir: " << headerSearchOpts.ResourceDir << '\n';
65+
errs() << "ModuleUserBuildPath: " << headerSearchOpts.ModuleUserBuildPath
66+
<< '\n';
67+
errs() << "header user entries:\t";
68+
for (auto &entry : headerSearchOpts.UserEntries) {
69+
errs() << entry.Path << " ";
70+
}
71+
errs() << '\n';
72+
errs() << "system header entries:\t";
73+
for (auto &entry : headerSearchOpts.SystemHeaderPrefixes) {
74+
errs() << entry.Prefix << ": " << entry.IsSystemHeader << '\t';
75+
}
76+
errs() << '\n';
77+
for (auto &ignoredMacro : headerSearchOpts.ModulesIgnoreMacros) {
78+
errs() << ignoredMacro << '\n';
79+
}
80+
}
81+
}
4382
FileEntry const *pFile = CI.getFileManager().getFile(FileName);
4483
if (!pFile) {
45-
std::cerr << "File not found: " << FileName << std::endl;
84+
errs() << "File not found: " << FileName << '\n';
4685
return 1;
4786
}
87+
{
88+
errs() << "name: " << pFile->getName() << '\n';
89+
errs() << "dir: " << pFile->getDir()->getName() << '\n';
90+
errs() << "size: " << pFile->getSize() << '\n';
91+
errs() << "uid:" << pFile->getUID() << " uniqueID: " << pFile->getUID()
92+
<< '\n';
93+
}
4894
SourceManager &sm = CI.getSourceManager();
49-
sm.createFileID(pFile, SourceLocation(), SrcMgr::C_User);
95+
sm.setMainFileID(sm.createFileID(pFile, SourceLocation(), SrcMgr::C_User));
5096
CI.getDiagnosticClient().BeginSourceFile(CI.getLangOpts(), 0);
51-
ParseAST(CI.getSema());
97+
/// ParseAST(CI.getSema());
5298
// Print AST statistics
53-
CI.getASTContext().PrintStats();
99+
/// CI.getASTContext().PrintStats();
54100
CI.getASTContext().Idents.PrintStats();
55101
return 0;
56102
}

0 commit comments

Comments
 (0)