[flang-commits] [flang] [flang] Fix missing includes in lib/Lower/Support/Utils.cpp (PR #143196)

Michał Górny via flang-commits flang-commits at lists.llvm.org
Fri Jun 6 13:00:56 PDT 2025


mgorny wrote:

Without this, I'm seeing lots of errors (I guess pch hides them):

```
FAILED: lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o 
/usr/lib/ccache/bin/x86_64-pc-linux-gnu-g++ -DFLANG_INCLUDE_TESTS=1 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang_build/lib/Lower -I/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower -I/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include -I/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang_build/include -isystem /usr/lib/llvm/21/include  -O2 -pipe -march=native -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -std=c++17   -D_GNU_SOURCE -D_DEBUG -D_GLIBCXX_ASSERTIONS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -UNDEBUG -MD -MT lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o -MF lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o.d -o lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o -c /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp: In function ‘void Fortran::lower::copyFirstPrivateSymbol(AbstractConverter&, const Fortran::semantics::Symbol*, mlir::OpBuilder::InsertPoint*)’:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:643:5: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  643 |     converter.copyHostAssociateVar(*sym, copyAssignIP);
      |     ^~~~~~~~~
In file included from /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/Support/Utils.h:17,
                 from /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:13:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp: In function ‘void Fortran::lower::privatizeSymbol(AbstractConverter&, fir::FirOpBuilder&, SymMap&, llvm::SetVector<const Fortran::semantics::Symbol*>&, llvm::SmallSet<const Fortran::semantics::Symbol*, 16>&, const Fortran::semantics::Symbol*, OperandsStructType*)’:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:666:38: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  666 |                                    ? converter.shallowLookupSymbol(*sym)
      |                                      ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:667:38: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  667 |                                    : converter.lookupOneLevelUpSymbol(*sym);
      |                                      ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:683:7: error: there are no arguments to ‘TODO’ that depend on a template parameter, so a declaration of ‘TODO’ must be available [-fpermissive]
  683 |       TODO(symLoc, "create polymorphic host associated copy");
      |       ^~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:683:7: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:691:5: error: ‘hlfir’ has not been declared
  691 |     hlfir::Entity entity{hsb.getAddr()};
      |     ^~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:692:5: error: ‘entity’ was not declared in this scope
  692 |     entity = genVariableBox(symLoc, firOpBuilder, entity);
      |     ^~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:692:14: error: there are no arguments to ‘genVariableBox’ that depend on a template parameter, so a declaration of ‘genVariableBox’ must be available [-fpermissive]
  692 |     entity = genVariableBox(symLoc, firOpBuilder, entity);
      |              ^~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp: In lambda function:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:712:20: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  712 |         allocType, converter.getKindMap(),
      |                    ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:713:9: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  713 |         converter.mangleName(*sym) +
      |         ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:724:48: error: ‘omp’ is not a member of ‘mlir’; did you mean ‘llvm::omp’?
  724 |     if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                ^~~
In file included from /usr/lib/llvm/21/include/llvm/Frontend/OpenMP/OMP.h:16,
                 from /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Parser/parse-tree.h:29,
                 from /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Semantics/tools.h:21,
                 from /var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/Support/Utils.h:19:
/usr/lib/llvm/21/include/llvm/Frontend/OpenMP/OMP.h.inc:12:11: note: ‘llvm::omp’ declared here
   12 | namespace omp {
      |           ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:724:68: error: template argument 2 is invalid
  724 |     if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                                    ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:724:69: error: expected unqualified-id before ‘)’ token
  724 |     if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                                     ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:727:34: error: ‘mlir::omp’ has not been declared
  727 |           emitCopyRegion ? mlir::omp::DataSharingClauseType::FirstPrivate
      |                                  ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:728:34: error: ‘mlir::omp’ has not been declared
  728 |                          : mlir::omp::DataSharingClauseType::Private);
      |                                  ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:736:33: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  736 |     fir::ExtendedValue symExV = converter.getSymbolExtendedValue(*sym);
      |                                 ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:747:26: error: ‘hasDefaultInitialization’ is not a member of ‘Fortran::lower’
  747 |         (Fortran::lower::hasDefaultInitialization(sym->GetUltimate()) &&
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:748:30: error: ‘hlfir’ has not been declared
  748 |          (!emitCopyRegion || hlfir::mayHaveAllocatableComponent(allocType))) ||
      |                              ^~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:752:30: warning: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  752 |       lower::SymbolBox hsb = converter.lookupOneLevelUpSymbol(
      |                              ^~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:756:7: error: ‘hlfir’ has not been declared
  756 |       hlfir::Entity entity{hsb.getAddr()};
      |       ^~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:758:12: error: ‘entity’ was not declared in this scope
  758 |           !entity.mayHaveNonDefaultLowerBounds();
      |            ^~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:813:50: error: ‘omp’ is not a member of ‘mlir’; did you mean ‘llvm::omp’?
  813 |       if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                  ^~~
/usr/lib/llvm/21/include/llvm/Frontend/OpenMP/OMP.h.inc:12:11: note: ‘llvm::omp’ declared here
   12 | namespace omp {
      |           ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:813:70: error: template argument 2 is invalid
  813 |       if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                                      ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:813:71: error: expected unqualified-id before ‘)’ token
  813 |       if constexpr (std::is_same_v<OpType, mlir::omp::PrivateClauseOp>) {
      |                                                                       ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:814:35: error: ‘omp’ is not a member of ‘mlir’; did you mean ‘llvm::omp’?
  814 |         firOpBuilder.create<mlir::omp::YieldOp>(
      |                                   ^~~
/usr/lib/llvm/21/include/llvm/Frontend/OpenMP/OMP.h.inc:12:11: note: ‘llvm::omp’ declared here
   12 | namespace omp {
      |           ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:814:22: error: parse error in template argument list
  814 |         firOpBuilder.create<mlir::omp::YieldOp>(
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp: At global scope:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:840:23: error: ‘omp’ is not a member of ‘mlir’; did you mean ‘llvm::omp’?
  840 | privatizeSymbol<mlir::omp::PrivateClauseOp, mlir::omp::PrivateClauseOps>(
      |                       ^~~
/usr/lib/llvm/21/include/llvm/Frontend/OpenMP/OMP.h.inc:12:11: note: ‘llvm::omp’ declared here
   12 | namespace omp {
      |           ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:840:1: error: parse error in template argument list
  840 | privatizeSymbol<mlir::omp::PrivateClauseOp, mlir::omp::PrivateClauseOps>(
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:846:11: error: ‘mlir::omp’ has not been declared
  846 |     mlir::omp::PrivateClauseOps *clauseOps);
      |           ^~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:846:33: error: expected ‘,’ or ‘...’ before ‘*’ token
  846 |     mlir::omp::PrivateClauseOps *clauseOps);
      |                                 ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:840:1: error: template-id ‘privatizeSymbol<<expression error> >’ for ‘void Fortran::lower::privatizeSymbol(AbstractConverter&, fir::FirOpBuilder&, SymMap&, llvm::SetVector<const Fortran::semantics::Symbol*>&, llvm::SmallSet<const Fortran::semantics::Symbol*, 16>&, const Fortran::semantics::Symbol*, int)’ does not match any template declaration
  840 | privatizeSymbol<mlir::omp::PrivateClauseOp, mlir::omp::PrivateClauseOps>(
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:647:6: note: candidate is: ‘template<class OpType, class OperandsStructType> void Fortran::lower::privatizeSymbol(AbstractConverter&, fir::FirOpBuilder&, SymMap&, llvm::SetVector<const Fortran::semantics::Symbol*>&, llvm::SmallSet<const Fortran::semantics::Symbol*, 16>&, const Fortran::semantics::Symbol*, OperandsStructType*)’
  647 | void privatizeSymbol(
      |      ^~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp: In instantiation of ‘void Fortran::lower::privatizeSymbol(AbstractConverter&, fir::FirOpBuilder&, SymMap&, llvm::SetVector<const Fortran::semantics::Symbol*>&, llvm::SmallSet<const Fortran::semantics::Symbol*, 16>&, const Fortran::semantics::Symbol*, OperandsStructType*) [with OpType = fir::LocalitySpecifierOp; OperandsStructType = fir::LocalitySpecifierOperands]’:
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:855:46:   required from here
  855 |     fir::LocalitySpecifierOperands *clauseOps);
      |                                              ^
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:666:48: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  666 |                                    ? converter.shallowLookupSymbol(*sym)
      |                                      ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:667:48: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  667 |                                    : converter.lookupOneLevelUpSymbol(*sym);
      |                                      ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:683:11: error: ‘TODO’ was not declared in this scope
  683 |       TODO(symLoc, "create polymorphic host associated copy");
      |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:712:30: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  712 |         allocType, converter.getKindMap(),
      |                    ~~~~~~~~~~^~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:713:19: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  713 |         converter.mangleName(*sym) +
      |         ~~~~~~~~~~^~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:736:43: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  736 |     fir::ExtendedValue symExV = converter.getSymbolExtendedValue(*sym);
      |                                 ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/lib/Lower/Support/Utils.cpp:752:40: error: invalid use of incomplete type ‘class Fortran::lower::AbstractConverter’
  752 |       lower::SymbolBox hsb = converter.lookupOneLevelUpSymbol(
      |                              ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/llvm-core/flang-21.0.0.9999/work/flang/include/flang/Lower/IterationSpace.h:38:7: note: forward declaration of ‘class Fortran::lower::AbstractConverter’
   38 | class AbstractConverter;
      |       ^~~~~~~~~~~~~~~~~


https://github.com/llvm/llvm-project/pull/143196


More information about the flang-commits mailing list