Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
MIR Parser: Use source locations for MBB naming errors.
Browse files Browse the repository at this point in the history
This commit changes the type of the field 'Name' in the struct
'yaml::MachineBasicBlock' from 'std::string' to 'yaml::StringValue'. This change
allows the MIR parser to report errors related to the MBB name with the proper
source locations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241718 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
hyp committed Jul 8, 2015
1 parent ea64a51 commit 31512fe
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 9 deletions.
4 changes: 2 additions & 2 deletions include/llvm/CodeGen/MIRYamlMapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ namespace yaml {

struct MachineBasicBlock {
unsigned ID;
std::string Name;
StringValue Name;
unsigned Alignment = 0;
bool IsLandingPad = false;
bool AddressTaken = false;
Expand All @@ -97,7 +97,7 @@ template <> struct MappingTraits<MachineBasicBlock> {
static void mapping(IO &YamlIO, MachineBasicBlock &MBB) {
YamlIO.mapRequired("id", MBB.ID);
YamlIO.mapOptional("name", MBB.Name,
std::string()); // Don't print out an empty name.
StringValue()); // Don't print out an empty name.
YamlIO.mapOptional("alignment", MBB.Alignment);
YamlIO.mapOptional("isLandingPad", MBB.IsLandingPad);
YamlIO.mapOptional("addressTaken", MBB.AddressTaken);
Expand Down
22 changes: 18 additions & 4 deletions lib/CodeGen/MIRParser/MIRParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ class MIRParserImpl {
/// Always returns true.
bool error(const Twine &Message);

/// Report an error with the given message at the given location.
///
/// Always returns true.
bool error(SMLoc Loc, const Twine &Message);

/// Report a given error with the location translated from the location in an
/// embedded string literal to a location in the MIR file.
///
Expand Down Expand Up @@ -124,6 +129,12 @@ bool MIRParserImpl::error(const Twine &Message) {
return true;
}

bool MIRParserImpl::error(SMLoc Loc, const Twine &Message) {
Context.diagnose(DiagnosticInfoMIRParser(
DS_Error, SM.GetMessage(Loc, SourceMgr::DK_Error, Message)));
return true;
}

bool MIRParserImpl::error(const SMDiagnostic &Error, SMRange SourceRange) {
assert(Error.getKind() == SourceMgr::DK_Error && "Expected an error");
reportDiagnostic(diagFromMIStringDiag(Error, SourceRange));
Expand Down Expand Up @@ -239,12 +250,15 @@ bool MIRParserImpl::initializeMachineFunction(MachineFunction &MF) {
const auto &F = *MF.getFunction();
for (const auto &YamlMBB : YamlMF.BasicBlocks) {
const BasicBlock *BB = nullptr;
if (!YamlMBB.Name.empty()) {
const yaml::StringValue &Name = YamlMBB.Name;
if (!Name.Value.empty()) {
BB = dyn_cast_or_null<BasicBlock>(
F.getValueSymbolTable().lookup(YamlMBB.Name));
F.getValueSymbolTable().lookup(Name.Value));
if (!BB)
return error(Twine("basic block '") + YamlMBB.Name +
"' is not defined in the function '" + MF.getName() + "'");
return error(Name.SourceRange.Start,
Twine("basic block '") + Name.Value +
"' is not defined in the function '" + MF.getName() +
"'");
}
auto *MBB = MF.CreateMachineBasicBlock(BB);
MF.insert(MF.end(), MBB);
Expand Down
4 changes: 2 additions & 2 deletions lib/CodeGen/MIRPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,9 @@ void MIRPrinter::convert(ModuleSlotTracker &MST,
YamlMBB.ID = (unsigned)MBB.getNumber();
// TODO: Serialize unnamed BB references.
if (const auto *BB = MBB.getBasicBlock())
YamlMBB.Name = BB->hasName() ? BB->getName() : "<unnamed bb>";
YamlMBB.Name.Value = BB->hasName() ? BB->getName() : "<unnamed bb>";
else
YamlMBB.Name = "";
YamlMBB.Name.Value = "";
YamlMBB.Alignment = MBB.getAlignment();
YamlMBB.AddressTaken = MBB.hasAddressTaken();
YamlMBB.IsLandingPad = MBB.isLandingPad();
Expand Down
2 changes: 1 addition & 1 deletion test/CodeGen/MIR/machine-basic-block-unknown-name.mir
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
---
name: foo
body:
# CHECK: basic block 'entrie' is not defined in the function 'foo'
# CHECK: [[@LINE+2]]:18: basic block 'entrie' is not defined in the function 'foo'
- id: 0
name: entrie
...

0 comments on commit 31512fe

Please sign in to comment.