[llvm] [NFC][Offload] Fix possible edge cases in offload-tblgen (PR #146511)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 1 04:41:27 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-offload
Author: Callum Fare (callumfare)
<details>
<summary>Changes</summary>
Fix a couple of unhandled edge cases in offload-tblgen that were found by static analysis
* `LineStart` may wrap around to 0 when processing multi-line strings. The value is not actually being used in that case, but still better to explicitly handle it
* Possible unchecked nullptr when processing parameter flags
---
Full diff: https://github.com/llvm/llvm-project/pull/146511.diff
2 Files Affected:
- (modified) offload/tools/offload-tblgen/APIGen.cpp (+2-1)
- (modified) offload/tools/offload-tblgen/RecordTypes.hpp (+8-3)
``````````diff
diff --git a/offload/tools/offload-tblgen/APIGen.cpp b/offload/tools/offload-tblgen/APIGen.cpp
index 800c9cadfe38b..35b080e3c8011 100644
--- a/offload/tools/offload-tblgen/APIGen.cpp
+++ b/offload/tools/offload-tblgen/APIGen.cpp
@@ -34,7 +34,8 @@ static std::string MakeComment(StringRef in) {
}
out += std::string("/// ") +
in.substr(LineStart, LineBreak - LineStart).str() + "\n";
- LineStart = LineBreak + 1;
+ if (LineBreak != std::string::npos)
+ LineStart = LineBreak + 1;
}
return out;
diff --git a/offload/tools/offload-tblgen/RecordTypes.hpp b/offload/tools/offload-tblgen/RecordTypes.hpp
index bb7c06c643da5..075b006eda451 100644
--- a/offload/tools/offload-tblgen/RecordTypes.hpp
+++ b/offload/tools/offload-tblgen/RecordTypes.hpp
@@ -157,9 +157,14 @@ class ParamRec {
bool isHandleType() const { return getType().ends_with("_handle_t"); }
bool isFptrType() const { return getType().ends_with("_cb_t"); }
StringRef getDesc() const { return rec->getValueAsString("desc"); }
- bool isIn() const { return dyn_cast<BitInit>(flags->getBit(0))->getValue(); }
- bool isOut() const { return dyn_cast<BitInit>(flags->getBit(1))->getValue(); }
- bool isOpt() const { return dyn_cast<BitInit>(flags->getBit(2))->getValue(); }
+ bool getFlagBit(unsigned int Bit) const {
+ if (auto *BitValue = dyn_cast<BitInit>(flags->getBit(Bit)))
+ return BitValue->getValue();
+ return false;
+ }
+ bool isIn() const { return getFlagBit(0); }
+ bool isOut() const { return getFlagBit(1); }
+ bool isOpt() const { return getFlagBit(2); }
const Record *getRec() const { return rec; }
std::optional<std::pair<StringRef, StringRef>> getRange() const {
``````````
</details>
https://github.com/llvm/llvm-project/pull/146511
More information about the llvm-commits
mailing list