forked from OSchip/llvm-project
Verify that clang TargetInfo descriptions match DataLayout strings from LLVM
The backend string is only verified when available as it's possible to run clang IRGen for targets that haven't been built or don't exist in LLVM. llvm-svn: 198309
This commit is contained in:
parent
961728064e
commit
e83b9060cb
|
@ -33,8 +33,8 @@ namespace clang {
|
|||
|
||||
void EmitBackendOutput(DiagnosticsEngine &Diags, const CodeGenOptions &CGOpts,
|
||||
const TargetOptions &TOpts, const LangOptions &LOpts,
|
||||
llvm::Module *M,
|
||||
BackendAction Action, raw_ostream *OS);
|
||||
StringRef TDesc, llvm::Module *M, BackendAction Action,
|
||||
raw_ostream *OS);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -610,10 +610,23 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action, raw_ostream *OS) {
|
|||
void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
|
||||
const CodeGenOptions &CGOpts,
|
||||
const clang::TargetOptions &TOpts,
|
||||
const LangOptions &LOpts,
|
||||
Module *M,
|
||||
BackendAction Action, raw_ostream *OS) {
|
||||
const LangOptions &LOpts, StringRef TDesc,
|
||||
Module *M, BackendAction Action,
|
||||
raw_ostream *OS) {
|
||||
EmitAssemblyHelper AsmHelper(Diags, CGOpts, TOpts, LOpts, M);
|
||||
|
||||
AsmHelper.EmitAssembly(Action, OS);
|
||||
|
||||
// If an optional clang TargetInfo description string was passed in, use it to
|
||||
// verify the LLVM TargetMachine's DataLayout.
|
||||
if (AsmHelper.TM && !TDesc.empty()) {
|
||||
std::string DLDesc =
|
||||
AsmHelper.TM->getDataLayout()->getStringRepresentation();
|
||||
if (DLDesc != TDesc) {
|
||||
unsigned DiagID = Diags.getCustomDiagID(
|
||||
DiagnosticsEngine::Error, "backend data layout '%0' does not match "
|
||||
"expected target description '%1'");
|
||||
Diags.Report(DiagID) << DLDesc << TDesc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,6 +150,7 @@ namespace clang {
|
|||
Ctx.setInlineAsmDiagnosticHandler(InlineAsmDiagHandler, this);
|
||||
|
||||
EmitBackendOutput(Diags, CodeGenOpts, TargetOpts, LangOpts,
|
||||
C.getTargetInfo().getTargetDescription(),
|
||||
TheModule.get(), Action, AsmOutStream);
|
||||
|
||||
Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
|
||||
|
@ -420,10 +421,9 @@ void CodeGenAction::ExecuteAction() {
|
|||
TheModule->setTargetTriple(TargetOpts.Triple);
|
||||
}
|
||||
|
||||
EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(),
|
||||
TargetOpts, CI.getLangOpts(),
|
||||
TheModule.get(),
|
||||
BA, OS);
|
||||
EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(), TargetOpts,
|
||||
CI.getLangOpts(), CI.getTarget().getTargetDescription(),
|
||||
TheModule.get(), BA, OS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue