[llvm] 6bad76c - [Demangle] fix windows tests

Nick Desaulniers via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 20 16:41:20 PDT 2023


Author: Nick Desaulniers
Date: 2023-04-20T16:41:09-07:00
New Revision: 6bad76c7ae93a94fbac39db08fee23ce46d97fdb

URL: https://github.com/llvm/llvm-project/commit/6bad76c7ae93a94fbac39db08fee23ce46d97fdb
DIFF: https://github.com/llvm/llvm-project/commit/6bad76c7ae93a94fbac39db08fee23ce46d97fdb.diff

LOG: [Demangle] fix windows tests

My reland of https://reviews.llvm.org/D148546 has caused a few windows
demangler tests to fail when run with -DLLVM_ENABLE_EXPENSIVE_CHECKS=ON
on windows.

I have a sneaking suspicion that MSVC's
std::string_view::iterator::operator* may be missing a nullptr check.

Link: https://lab.llvm.org/buildbot/#/builders/42/builds/9723/steps/7/logs/stdio

Reviewed By: ayzhao

Differential Revision: https://reviews.llvm.org/D148852

Added: 
    

Modified: 
    llvm/lib/Demangle/MicrosoftDemangle.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp
index 4013de7d954b4..828350076ba5e 100644
--- a/llvm/lib/Demangle/MicrosoftDemangle.cpp
+++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp
@@ -793,6 +793,7 @@ SymbolNode *Demangler::demangleMD5Name(std::string_view &MangledName) {
     return nullptr;
   }
   const char *Start = &*MangledName.begin();
+  const size_t StartSize = MangledName.size();
   MangledName.remove_prefix(MD5Last + 1);
 
   // There are two additional special cases for MD5 names:
@@ -807,7 +808,9 @@ SymbolNode *Demangler::demangleMD5Name(std::string_view &MangledName) {
   //    either.
   consumeFront(MangledName, "??_R4@");
 
-  std::string_view MD5(Start, &*MangledName.begin() - Start);
+  assert(MangledName.size() < StartSize);
+  const size_t Count = StartSize - MangledName.size();
+  std::string_view MD5(Start, Count);
   SymbolNode *S = Arena.alloc<SymbolNode>(NodeKind::Md5Symbol);
   S->Name = synthesizeQualifiedName(Arena, MD5);
 
@@ -2402,7 +2405,7 @@ char *llvm::microsoftDemangle(const char *MangledName, size_t *NMangled,
   std::string_view Name{MangledName};
   SymbolNode *AST = D.parse(Name);
   if (!D.Error && NMangled)
-    *NMangled = &*Name.begin() - MangledName;
+    *NMangled = Name.empty() ? 0 : &*Name.begin() - MangledName;
 
   if (Flags & MSDF_DumpBackrefs)
     D.dumpBackReferences();


        


More information about the llvm-commits mailing list