OSDN Git Service

Allow StringRef to be constructed from a null pointer.
authorZachary Turner <zturner@google.com>
Mon, 26 Sep 2016 20:08:05 +0000 (20:08 +0000)
committerZachary Turner <zturner@google.com>
Mon, 26 Sep 2016 20:08:05 +0000 (20:08 +0000)
Differential Revision: https://reviews.llvm.org/D24904

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282433 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/StringRef.h

index d3683c7..a053b41 100644 (file)
@@ -73,14 +73,14 @@ namespace llvm {
     /// Construct an empty string ref.
     /*implicit*/ StringRef() : Data(nullptr), Length(0) {}
 
+    /// Disable conversion from nullptr.  This prevents things like
+    /// if (S == nullptr)
     StringRef(std::nullptr_t) = delete;
 
     /// Construct a string ref from a cstring.
+    LLVM_ATTRIBUTE_ALWAYS_INLINE
     /*implicit*/ StringRef(const char *Str)
-      : Data(Str) {
-        assert(Str && "StringRef cannot be built from a NULL argument");
-        Length = ::strlen(Str); // invoking strlen(NULL) is undefined behavior
-      }
+        : Data(Str), Length(Str ? ::strlen(Str) : 0) {}
 
     /// Construct a string ref from a pointer and length.
     LLVM_ATTRIBUTE_ALWAYS_INLINE