File tree Expand file tree Collapse file tree 1 file changed +15
-4
lines changed Expand file tree Collapse file tree 1 file changed +15
-4
lines changed Original file line number Diff line number Diff line change @@ -506,6 +506,20 @@ class MetadataReader {
506
506
return result;
507
507
}
508
508
509
+ // / Demangle a mangled name from a potentially temporary std::string. The
510
+ // / demangler may produce pointers into the string data, so this copies the
511
+ // / string into the demangler's allocation first.
512
+ Demangle::NodePointer demangle (uint64_t remoteAddress,
513
+ const std::string &mangledName,
514
+ MangledNameKind kind,
515
+ Demangler &dem) {
516
+ size_t stringSize = mangledName.size () + 1 ; // + 1 for terminating NUL.
517
+
518
+ char *copiedString = dem.Allocate <char >(stringSize);
519
+ memcpy (copiedString, mangledName.data (), stringSize);
520
+ return demangle (RemoteRef<char >(remoteAddress, copiedString), kind, dem);
521
+ }
522
+
509
523
// / Given a demangle tree, attempt to turn it into a type.
510
524
TypeLookupErrorOr<typename BuilderType::BuiltType>
511
525
decodeMangledType (NodePointer Node) {
@@ -2344,10 +2358,7 @@ class MetadataReader {
2344
2358
// We're done.
2345
2359
break ;
2346
2360
}
2347
-
2348
- return demangle (RemoteRef<char >(address.getAddressData (),
2349
- mangledName.data ()),
2350
- kind, dem);
2361
+ return demangle (address.getAddressData (), mangledName, kind, dem);
2351
2362
}
2352
2363
2353
2364
// / Read and demangle the name of an anonymous context.
You can’t perform that action at this time.
0 commit comments