diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-04-30 13:09:55 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-04-30 13:09:55 +0000 |
commit | 123e04b8a8269a19d3c3c51d0576e6394bee21d9 (patch) | |
tree | ed444a596eb858d661c46e076e2793aee86a9256 /llvm/lib/TableGen/TGParser.cpp | |
parent | a7c2e580c7a6dbdaa071d5e256d3ec47bbe395ca (diff) | |
download | bcm5719-llvm-123e04b8a8269a19d3c3c51d0576e6394bee21d9.tar.gz bcm5719-llvm-123e04b8a8269a19d3c3c51d0576e6394bee21d9.zip |
[TableGen] Fix null pointer dereferencing in token parser.
Reported in https://www.viva64.com/en/b/0629/
llvm-svn: 359559
Diffstat (limited to 'llvm/lib/TableGen/TGParser.cpp')
-rw-r--r-- | llvm/lib/TableGen/TGParser.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp index 937de9e5c52..6a460870aa9 100644 --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/lib/TableGen/TGParser.cpp @@ -2189,14 +2189,15 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) { // Create a !strconcat() operation, first casting each operand to // a string if necessary. if (LHS->getType() != StringRecTy::get()) { - LHS = dyn_cast<TypedInit>( + auto CastLHS = dyn_cast<TypedInit>( UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get()) ->Fold(CurRec)); - if (!LHS) { - Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() + - "' to string"); + if (!CastLHS) { + Error(PasteLoc, + Twine("can't cast '") + LHS->getAsString() + "' to string"); return nullptr; } + LHS = CastLHS; } TypedInit *RHS = nullptr; @@ -2223,14 +2224,15 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) { } if (RHS->getType() != StringRecTy::get()) { - RHS = dyn_cast<TypedInit>( + auto CastRHS = dyn_cast<TypedInit>( UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get()) ->Fold(CurRec)); - if (!RHS) { - Error(PasteLoc, Twine("can't cast '") + RHS->getAsString() + - "' to string"); + if (!CastRHS) { + Error(PasteLoc, + Twine("can't cast '") + RHS->getAsString() + "' to string"); return nullptr; } + RHS = CastRHS; } break; |