<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/64200>64200</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Flang] Dangling references when building with the latest gcc
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ceseo
      </td>
    </tr>
</table>

<pre>
    When building Flang with the most current gcc (top of the tree), I'm seeing:

```
FAILED: tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/ConvertCall.cpp.o 
/usr/local/bin/c++ -DFLANG_INCLUDE_TESTS=1 -DFLANG_LITTLE_ENDIAN=1 -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D_LIBCPP_ENABLE_HARDENED_MODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/lib/Lower -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Lower -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/clang/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../clang/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -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 -Werror -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -O3 -DNDEBUG -fno-semantic-interposition  -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -std=c++17 -MD -MT tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/ConvertCall.cpp.o -MF tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/ConvertCall.cpp.o.d -o tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/ConvertCall.cpp.o -c /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Lower/ConvertCall.cpp
../llvm-project/flang/lib/Lower/ConvertCall.cpp: In member function ‘bool {anonymous}::ElementalUserCallBuilder::canLoadActualArgumentBeforeLoop(unsigned int) const’:
../llvm-project/flang/lib/Lower/ConvertCall.cpp:1700:17: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
 1700 |     const auto &arg = caller.getPassedArguments()[argIdx];
      |                 ^~~
../llvm-project/flang/lib/Lower/ConvertCall.cpp:1700:57: note: the temporary was destroyed at the end of the full expression ‘(&((const {anonymous}::ElementalUserCallBuilder*)this)->{anonymous}::ElementalUserCallBuilder::caller)->Fortran::lower::CallerInterface::<anonymous>.Fortran::lower::CallInterface<Fortran::lower::CallerInterface>::getPassedArguments().llvm::ArrayRef<Fortran::lower::CallInterface<Fortran::lower::CallerInterface>::PassedEntity>::operator[](((size_t)argIdx))’
 1700 |     const auto &arg = caller.getPassedArguments()[argIdx];
      |                                                         ^
cc1plus: all warnings being treated as errors
972.047 [110/3/6232] Building CXX object tools/flang/lib/Semantics/CMakeFiles/obj.FortranSemantics.dir/runtime-type-info.cpp.o
FAILED: tools/flang/lib/Semantics/CMakeFiles/obj.FortranSemantics.dir/runtime-type-info.cpp.o 
/usr/local/bin/c++ -DFLANG_INCLUDE_TESTS=1 -DFLANG_LITTLE_ENDIAN=1 -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D_LIBCPP_ENABLE_HARDENED_MODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/lib/Semantics -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Semantics -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/clang/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../clang/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -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 -Werror -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -O3 -DNDEBUG -fno-semantic-interposition  -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -std=c++17 -MD -MT tools/flang/lib/Semantics/CMakeFiles/obj.FortranSemantics.dir/runtime-type-info.cpp.o -MF tools/flang/lib/Semantics/CMakeFiles/obj.FortranSemantics.dir/runtime-type-info.cpp.o.d -o tools/flang/lib/Semantics/CMakeFiles/obj.FortranSemantics.dir/runtime-type-info.cpp.o -c /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Semantics/runtime-type-info.cpp
../llvm-project/flang/lib/Semantics/runtime-type-info.cpp: In function ‘Fortran::semantics::SomeExpr Fortran::semantics::SaveDerivedPointerTarget(Scope&, SourceName, std::vector<Fortran::evaluate::StructureConstructor>&&, Fortran::evaluate::ConstantSubscripts&&)’:
../llvm-project/flang/lib/Semantics/runtime-type-info.cpp:205:17: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
  205 |     const auto &derivedType{x.front().GetType().GetDerivedTypeSpec()};
      |                 ^~~~~~~~~~~
../llvm-project/flang/lib/Semantics/runtime-type-info.cpp:205:67: note: the temporary was destroyed at the end of the full expression ‘(&(& x)->std::vector<Fortran::evaluate::StructureConstructor>::front())->Fortran::evaluate::StructureConstructor::GetType().Fortran::evaluate::DynamicType::GetDerivedTypeSpec()’
  205 |     const auto &derivedType{x.front().GetType().GetDerivedTypeSpec()};
      |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
cc1plus: all warnings being treated as errors
1056.665 [110/2/6233] Building CXX object tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/OpenMP.cpp.o
FAILED: tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/OpenMP.cpp.o 
/usr/local/bin/c++ -DFLANG_INCLUDE_TESTS=1 -DFLANG_LITTLE_ENDIAN=1 -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D_LIBCPP_ENABLE_HARDENED_MODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/lib/Lower -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Lower -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/flang/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/include -I/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/mlir/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/tools/clang/include -isystem /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/llvm/../clang/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -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 -Werror -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-strict-aliasing -fno-semantic-interposition -O3 -DNDEBUG -fno-semantic-interposition  -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -std=c++17 -MD -MT tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/OpenMP.cpp.o -MF tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/OpenMP.cpp.o.d -o tools/flang/lib/Lower/CMakeFiles/obj.FortranLower.dir/OpenMP.cpp.o -c /home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/llvm-project/flang/lib/Lower/OpenMP.cpp
../llvm-project/flang/lib/Lower/OpenMP.cpp: In function ‘bool checkForSymbolMatch(const Fortran::parser::AssignmentStmt&)’:
../llvm-project/flang/lib/Lower/OpenMP.cpp:2193:37: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
 2193 |   const Fortran::semantics::Symbol &varSymbol =
      |                                     ^~~~~~~~~
../llvm-project/flang/lib/Lower/OpenMP.cpp:2194:52: note: the temporary was destroyed at the end of the full expression ‘(& Fortran::evaluate::GetSymbolVector(const A&) [with A = Expr<SomeType>; SymbolVector = std::vector<Fortran::common::Reference<const Fortran::semantics::Symbol> >]().std::vector<Fortran::common::Reference<const Fortran::semantics::Symbol> >::front())->Fortran::common::Reference<const Fortran::semantics::Symbol>::operator std::conditional_t<true, const Fortran::semantics::Symbol&, void>()’
 2194 |       Fortran::evaluate::GetSymbolVector(*v).front();
      |                                                    ^
cc1plus: all warnings being treated as errors
```

I cannot reproduce this when building with clang.

I wonder if this is a real problem or a gcc issue.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW11zIin3_zTkhsJqaTXxIhet3c5alZep6PwzdxbSR2WXhv4DbeJe7Gd_CrpNTCbJZBKd56ktu1JG4LzAOQc4P2iZtWKpAM5Rd4C66Qmr3Eqbcw4W9Mlc55vz2xUoPK-EzIVa4pFkaonvhFthtwJcaOswr4wB5fCSc4zomdMl1ovQ7AwAon1Eh3iM6GmBLYBQSxQnKEpRtP3sRc1fKI6S8UWWojjBTmtpER0tvFJER1LMER1d6DswiI6Gl-wvGAkJnkTP_2yNtHGGqdDeykWg0WoNxg2ZlC1eli2NG5V0VFlPIDVnEtHRXChERxzRAaIDTNLRRXL1ZTa-Gl58S7PZNJtMJyhO2w8tF-Pp9CKbZVfpOLlqWr54stkfyWR2M52OUZxGmKSzNBt8--K_fLkYD4bfv8-SySS7mY6vryah9urbbHL97WaY-ZIn-fp1ll0lg4ts9kdyk2ZXWTq7vE5D82wyTYez4fXVZJpcTWeXyfDmevLYMLq-uUx-rL4YX44fa8eIjla6AERHjt8tSXDtXDtER3fa_BVMGwxOGDN81esQyRxYR5ace0N5cs_7um8-rUPKdUFKo_8E7n6vCqG4rHI4mJX2LX9f8p6Zwxd3pQu7sQ4KfAglrRaio0KG6bpnhc-98Hu08Oe-Prj1ftC4-DoeYrJQmlgomHKCE6EcmFJb4YRWmCzWwoq5kMJtiFBSKLBkJfIcFCa3YIw2KE5z5oA4UUAtS4oF-BLJLWByy6T0tPfOMExulSaVqizkpGSGFeD8JL29M8IBsc4ItbSY3HJmHfn_ismaoxDWCrUkCwEyJ0IJJ5gUf4OxmJSQh57XlFKrZfjA5FYUpRRcOLJgUrqV0dVy1chjmzmQSj1KyusGpZWqZKOVS2YtKaBgnIO1daWBvFJeIyn0Guq6EqwVhfjbd_GxVmm451A64jalr8pBggOvgqyFcRWTJHfaj95Wy6V3oF6DMSJv-LkuCr9dbi0ggfmtlQiVg3Ks9s8tdyx_GI-tylIb50ezyAVbKm2d4JZwLb2ixaJS3PMRC-G_9XTMsZ1y7dRaaQ6lAc4c5ITrctN06zWFPoqcEdwRJgXz_no7tK5jTNKrZtt7g7BurG3Z9LlSd0LlxLG5BFu3G-cEJt-28qzLUZw2-3T7FJPLFJPL6UFSBXI5OoTcVo6JPkyH-X7XmFf69lRvnVCFdehD7HGCxwoXUMzB4G0gY5RRdBah_tlca4nR6YAprTaFriw69bkhipNMgp9HTH6zYLy4gR8smLqVe2OxPOF-QiZmWXnaASy0gQutS0TPKhVS3xwL5RDtY66VdVu9_Ycc9TMja59GUfjnR9msqgkutbViLjc4Z2op_XwysAADigN2GjPsoCi1YWaDUXewuxzX5OSBHHXTupPYa8LodIj9E0aCWeU0RrTHzBKjOMWcSQmmtQT3lVkL-dYoFtEzn6R3B8wsx_m9FxoPGrnh2crdfVA3--efvVmoGyyktIOQ93vo8GCDO2ZxDtYZvYEcMxeaQeVbkLHwCzvcl8av1ruhE8bVC59ntUl-LY5ogmjfrYRFtE9QnH0oCr3NG_5mDtctMpgkfB0GorFfHBeMQ12J4uGjsjhrvcW8wzp8t5Ksrn8tHFohwQgkiTFscwOLn0j_TC_qLmTKCbd5qNQlGOa0qaFp7UdEz6z4G2Z-xjbh6vFl_3He_pfmw3sf1M1qUZy3S-l9m2CfSd0xo0KSNPcI2SNnvz9jZut1w9ZM_VPaijqnfl1otyNERzGiox6NKeqmeLAF6cPv37Ge-5n4yjYzaXZk-8ZW80DTbDemUiH581kPEWqh603nfZh9jwqPCP6gCP7BC4dF8QdXc0TyRyR_RPJHJH9E8v8KJL_PBOJ1XL9HLW-h_L0O5qCYf7enL_bgvQjw54Lqc4AfDwCeQAn7ICYUJ7qA7L40-E0itoYUjFhD_lWHwJ0yswSH6NmE6xICRhziia4MhyvmDTnEITo99xq4hyDPIA2smayYa7DaxJmKu8rA0AMN_91zZEFwkP0Gb2Bhyk2queVGlB5-1Gz9j5xFvMfONOr-nkMJTKPuKyAsrx0y3ZSATgf3rYXRyjXI8wu4UP9QSh-JJyXwBp-dvvuYYvvs34i9A59b9PB9c3iwl4AMjTumfulg4j2SfMtTL70hIt0oVggeiLecL3v0GYb_Hwif3eefdz0-4D4B8NtRt9fq9bqPCJ_WCD_-NYT_KwfJ1yWoy6-_Auc_Kv2I3Y-370fMfsTsR8x-xOxHzP5vx-wfzhL2c_G-K3Jfd-5Pu_lbrtsfVf7qbesO52vgOtyu8xXwv0baTDbFXMtL5vjq4cb0SV5fMmO3N3lJeHHUT6WJK9zHAeuLnaXtfoziJD48RPWamsz_hQE_P0kIBvL4Y83MthCnH7ka3MGln7VUB8VJlx4Mh751ePEFXG2G_6tB6TZqkjoevBvCq8JJuHDN7kuPWye6gBoMZige4F0BgewnSNcv4Lr5fvPg0Hj4XvehOMNedXOj3G_9Jn3vwd570PX06vzRmFyrPKz8TM4ciofOVOGg692i65OstRZ5ONp6CbD7YNyZAb8UOIgma--NXQvt5db9cxfuz95Nrz_HmDOltMMGSqPzyq8_K2Hx3ZNX5UPkh-Sw9ZT5TqscDBaLmktYzLABJnFp9FxCgbXBLLxNL6ytoHWSn8d5P-6zEzhv9_pRt9uLaP9kdR4tItpj3bMO8H47jju8d7qADmu3F51Orx9HJ-KcRjSOTulZu9ONO_1WFPE57VM6j_uLfq-Xo04EBRMyvO3R0mZ5ElSe9zo0ik4km4O04acBlCq4q_uDKEXd9MSch9VqXi0t6kRSWGcfpTjhZPhNQfi9AOqmOP1hzX7RXn5BqvdIb4CTysjzlXNlCEU6QnS0FG5VzVtcF49p-LNlM_TSb-JhFP8JAAD___xXKO0">