diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-22 23:33:58 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-22 23:33:58 +0000 |
commit | 376a8a773e38fdcd9102a40e08ab1e0661d645d9 (patch) | |
tree | 5c14492d6267298447ea064f3fcd5f786a33cc0d /include/llvm/TableGen/Error.h | |
parent | 6c6237f8dce6787e550a3e243e22a085a2859fe8 (diff) | |
download | llvm-376a8a773e38fdcd9102a40e08ab1e0661d645d9.tar.gz llvm-376a8a773e38fdcd9102a40e08ab1e0661d645d9.tar.bz2 llvm-376a8a773e38fdcd9102a40e08ab1e0661d645d9.tar.xz |
Print out the location of expanded multiclass defs in TableGen errors.
When reporting an error for a defm, we would previously only report the
location of the outer defm, which is not always where the error is.
Now we also print the location of the expanded multiclass defs:
lib/Target/X86/X86InstrSSE.td:2902:12: error: foo
defm ADD : basic_sse12_fp_binop_s<0x58, "add", fadd, SSE_ALU_ITINS_S>,
^
lib/Target/X86/X86InstrSSE.td:2801:11: note: instantiated from multiclass
defm PD : sse12_fp_packed<opc, !strconcat(OpcodeStr, "pd"), OpNode, VR128,
^
lib/Target/X86/X86InstrSSE.td:194:5: note: instantiated from multiclass
def rm : PI<opc, MRMSrcMem, (outs RC:$dst), (ins RC:$src1, x86memop:$src2),
^
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162409 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/TableGen/Error.h')
-rw-r--r-- | include/llvm/TableGen/Error.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/include/llvm/TableGen/Error.h b/include/llvm/TableGen/Error.h index fd5f805ffc..5c1c3adf7e 100644 --- a/include/llvm/TableGen/Error.h +++ b/include/llvm/TableGen/Error.h @@ -20,21 +20,22 @@ namespace llvm { class TGError { - SMLoc Loc; + SmallVector<SMLoc, 4> Locs; std::string Message; public: - TGError(SMLoc loc, const std::string &message) : Loc(loc), Message(message) {} + TGError(ArrayRef<SMLoc> locs, const std::string &message) + : Locs(locs.begin(), locs.end()), Message(message) {} - SMLoc getLoc() const { return Loc; } + ArrayRef<SMLoc> getLoc() const { return Locs; } const std::string &getMessage() const { return Message; } }; -void PrintWarning(SMLoc WarningLoc, const Twine &Msg); +void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg); void PrintWarning(const char *Loc, const Twine &Msg); void PrintWarning(const Twine &Msg); void PrintWarning(const TGError &Warning); -void PrintError(SMLoc ErrorLoc, const Twine &Msg); +void PrintError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg); void PrintError(const char *Loc, const Twine &Msg); void PrintError(const Twine &Msg); void PrintError(const TGError &Error); |