[cfe-dev] Correct way to generate IR code with Frontend?
Peter Saunderson via cfe-dev
cfe-dev at lists.llvm.org
Thu Mar 2 14:28:31 PST 2017
Hi,
I would like to use the clang Frontend api to build a file and output
the IR code. I have found that I can set the TargetInfo on the
CompilerInstance but I cant seem to set the LangStandard to c++11.
Instead I have to provide an argument and call
CompilerInvocation::CreateFromArgs to get the LangStandard setting.
What am I doing wrong in my code (see
https://github.com/peteasa/llvm-env/blob/master/proj/first-steps/src/main/src/main.cxx
for the full listing)?
In my code the following does not work:
clang::CompilerInvocation &compInvocation = compInst.getInvocation();
clang::TargetOptions &targetOptions = compInvocation.getTargetOpts();
targetOptions.Triple = llvm::sys::getDefaultTargetTriple();
llvm::Triple llvmTriple(compInvocation.getTargetOpts().Triple);
std::shared_ptr<clang::TargetOptions> pTargetOptions =
std::make_shared<clang::TargetOptions>(targetOptions);
clang::TargetInfo *pTargetInfo =
clang::TargetInfo::CreateTargetInfo(
compInst.getDiagnostics(),
pTargetOptions);
compInst.setTarget(pTargetInfo); // this works ok setting the
TargetInfo
clang::LangOptions langOpts;
langOpts.GNUMode = 1;
langOpts.CXXExceptions = 1;
langOpts.RTTI = 1;
langOpts.Bool = 1;
langOpts.CPlusPlus11 = 1;
clang::PreprocessorOptions &PreprocOpts =
compInst.getPreprocessorOpts();
compInvocation.setLangDefaults(
langOpts,
clang::IK_CXX,
llvmTriple,
PreprocOpts,
clang::LangStandard::lang_cxx11); // this does not work,
instead I have to set -std=c++11 and CreateFromArgs()
I have been looking at the tutorials and other document but so far have
not found a good description of how to do this.
Thanks in advance for any assistance you can provide.
Peter.
More information about the cfe-dev
mailing list