File tree Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -235,7 +235,13 @@ bool consumeNameSegment(llvm::StringRef& Buf) {
235235// but is undefined and may trigger assertions.
236236llvm::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.
Original file line number Diff line number Diff 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);
You can’t perform that action at this time.
0 commit comments