[flang] Add lowering TODO for separate module procedures
authorValentin Clement <clementval@gmail.com>
Thu, 23 Jun 2022 12:57:24 +0000 (14:57 +0200)
committerValentin Clement <clementval@gmail.com>
Thu, 23 Jun 2022 12:57:58 +0000 (14:57 +0200)
MODULE FUNCTION and MODULE SUBROUTINE currently cause lowering crash:
"symbol is not mapped to any IR value" because special care is needed
to handle their interface.

Add a TODO for now.

Example of program that crashed and will hit the TODO:

```
module mod
  interface
    module subroutine sub
    end subroutine
  end interface
contains
  module subroutine sub
    x = 42
  end subroutine
end module
```

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: jeanPerier

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
flang/lib/Lower/Bridge.cpp

index 3ac788e..facd664 100644 (file)
@@ -2839,10 +2839,10 @@ private:
     if (!funit.isMainProgram()) {
       const Fortran::semantics::Symbol &procSymbol =
           funit.getSubprogramSymbol();
-      if (procSymbol.owner().IsSubmodule()) {
+      if (procSymbol.owner().IsSubmodule())
         TODO(toLocation(), "support for submodules");
-        return;
-      }
+      if (Fortran::semantics::IsSeparateModuleProcedureInterface(&procSymbol))
+        TODO(toLocation(), "separate module procedure");
     }
     setCurrentPosition(funit.getStartingSourceLoc());
     for (int entryIndex = 0, last = funit.entryPointList.size();