Skip to content

Commit f383607

Browse files
committed
[Heavy] Fix mangle parsing for module file
1 parent c8b8f7c commit f383607

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

heavy/lib/Mangle.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,13 @@ bool consumeNameSegment(llvm::StringRef& Buf) {
235235
// but is undefined and may trigger assertions.
236236
llvm::StringRef Mangler::parseModulePrefix(llvm::StringRef Name) {
237237
llvm::StringRef Ending = Name.drop_front(getManglePrefix().size());
238+
size_t PrevEndingSize = 0;
238239
while (Ending.size() > 0) {
240+
// Check for progress.
241+
if (Ending.size() == PrevEndingSize)
242+
return {};
243+
PrevEndingSize = Ending.size();
244+
239245
switch (Ending[0]) {
240246
case 'V': case 'F': case 'A':
241247
// Break from the loop
@@ -244,6 +250,12 @@ llvm::StringRef Mangler::parseModulePrefix(llvm::StringRef Name) {
244250
// Library name
245251
Ending = Ending.drop_front(1);
246252
continue;
253+
case '_': {
254+
llvm::StringRef ModuleFile("__module_file");
255+
if (Ending.starts_with(ModuleFile))
256+
Ending.consume_front(ModuleFile);
257+
continue;
258+
}
247259
default:
248260
if (!consumeNameSegment(Ending))
249261
return {}; // Something was invalid.

heavy/lib/OpEval.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,9 @@ class OpEvalImpl {
408408
llvm::StringRef ModuleName = Mangler::parseModulePrefix(MangledName);
409409
auto M = dyn_cast_or_null<mlir::ModuleOp>(
410410
TopModuleOp.lookupSymbol(ModuleName));
411-
auto F = dyn_cast_or_null<heavy::FuncOp>(M.lookupSymbol(MangledName));
411+
heavy::FuncOp F;
412+
if (M)
413+
F = dyn_cast_or_null<heavy::FuncOp>(M.lookupSymbol(MangledName));
412414
if (!F) {
413415
String* ErrMsg = Context.CreateString(
414416
"undefined reference to function ", MangledName);

0 commit comments

Comments
 (0)