summaryrefslogtreecommitdiffstats
path: root/flang/include/flang/Parser/char-block.h
diff options
context:
space:
mode:
Diffstat (limited to 'flang/include/flang/Parser/char-block.h')
-rw-r--r--flang/include/flang/Parser/char-block.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/flang/include/flang/Parser/char-block.h b/flang/include/flang/Parser/char-block.h
index fc5de2607b51..acd8aee98bf8 100644
--- a/flang/include/flang/Parser/char-block.h
+++ b/flang/include/flang/Parser/char-block.h
@@ -129,6 +129,13 @@ public:
private:
int Compare(const CharBlock &that) const {
+ // "memcmp" in glibc has "nonnull" attributes on the input pointers.
+ // Avoid passing null pointers, since it would result in an undefined
+ // behavior.
+ if (size() == 0)
+ return that.size() == 0 ? 0 : -1;
+ if (that.size() == 0)
+ return 1;
std::size_t bytes{std::min(size(), that.size())};
int cmp{std::memcmp(static_cast<const void *>(begin()),
static_cast<const void *>(that.begin()), bytes)};