[PATCH] D112663: [clang-repl] Allow Interpreter::getSymbolAddress to take a mangled name.

Richard Smith - zygoloid via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 27 14:45:49 PDT 2021


rsmith added inline comments.


================
Comment at: clang/include/clang/Interpreter/Interpreter.h:70
   llvm::Expected<llvm::JITTargetAddress>
-  getSymbolAddress(llvm::StringRef UnmangledName) const;
+  getSymbolAddress(llvm::StringRef Name, bool IsMangled = false) const;
 };
----------------
I find this flag name to be very confusing, given what "mangling" usually means within Clang. I think `IsMangled = false` means "this is a symbol name of the same kind that Clang would emit in IR", and `IsMangled = true` means "this is a symbol name of the same kind that would appear in an object file's symbol table" -- and the former is a mangled name in the sense in which the term is used in Clang.

Perhaps `enum { IRName, LinkerName }` instead of a bool flag would be clearer? But I'm not sure whether this flag is motivated given that your test case below wants / is testing the `IsMangled = false` behavior.

I wonder if a better interface here generally would be:

```
llvm::Expected<llvm::JITTargetAddress> getSymbolAddress(GlobalDecl GD) const;
```

... which could internally form the proper symbol name for the given `GlobalDecl` (or perhaps reuse `CodeGen`'s decl -> mangling map rather than redoing the name mangling step).


================
Comment at: clang/unittests/Interpreter/InterpreterTest.cpp:131-138
+static std::string MangleName(NamedDecl *ND) {
+  ASTContext &C = ND->getASTContext();
+  std::unique_ptr<MangleContext> MangleC(C.createMangleContext());
+  std::string mangledName;
+  llvm::raw_string_ostream RawStr(mangledName);
+  MangleC->mangleName(ND, RawStr);
+  return RawStr.str();
----------------
This function produces names that are not mangled in the sense that `getSymbolAddress`'s `IsMangled = true` means. I would expect this test to fail on MacOS for that reason.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112663/new/

https://reviews.llvm.org/D112663



More information about the cfe-commits mailing list