<div dir="ltr">Hi Mehdi,<div><br></div><div>I think I downloaded source code on Thursday, I will try build again with latest source code. </div><div>Here is my current version where problem is reported:</div><div>[root@localhost llvm-project]# git log<br>commit b647de99254ca047748eded14b9d302912294bec<br>Author: Heejin Ahn <<a href="mailto:aheejin@gmail.com" target="_blank">aheejin@gmail.com</a>><br>Date:   Wed Apr 8 16:02:25 2020 -0700<br><br>    [WebAssembly] Use dummy debug info in Emscripten SjLj<br>   <br>    Summary:<br>    D74269 added debug info to newly created instructions, including calls<br>    to `malloc` and `free`, by taking debug info from existing instructions<br>    around, whose debug info may or may not be empty.<br>   <br>    But there are cases debug info is required by the IR verifier: when both<br>    the caller and the callee functions have DISubprograms, meaning we<br>    already have declarations to `malloc` or `free` with a DISubprogram<br>    attached, newly created calls to `malloc` and `free` should have<br>    non-empty debug info. This patch creates a non-empty dummy debug info in<br>    this case to those calls to make the IR verifier pass.<br>   <br>    Fixes <a href="https://bugs.llvm.org/show_bug.cgi?id=45461" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=45461</a>.<br>   <br>    Reviewers: dschuff<br>   <br>    Subscribers: aprantl, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits<br>   <br>    Tags: #llvm<br>   <br>    Differential Revision: <a href="https://reviews.llvm.org/D77784" target="_blank">https://reviews.llvm.org/D77784</a><br></div><div><br></div><div>--</div><div>Inder</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 14, 2020 at 3:03 AM Mehdi AMINI <<a href="mailto:joker.eph@gmail.com">joker.eph@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 13, 2020 at 10:54 AM Johannes Doerfert via flang-dev <<a href="mailto:flang-dev@lists.llvm.org" target="_blank">flang-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I stripped some text so the list accepts the message:<br>
<br>
<br>
On 4/13/20 12:42 PM, Johannes Doerfert wrote:<br>
> TBH, this looks like a MLIR problem to me as all the errors seem to <br>
> originate from the MLIR subfolder.<br>
><br>
> Did you try building without flang? If the error persists we need to <br>
> notify MLIR folks, if not it might<br>
><br>
> be our cmake.<br>
><br>
><br>
> Cheers,<br>
><br>
>   Johannes<br>
><br>
><br>
> On 4/13/20 1:36 AM, inderjeet kalra via flang-dev wrote:<br>
>> Hi,<br>
>><br>
>> I just did an llvm build from source and here's what I hit. I am <br>
>> trying to<br>
>> build  projects "mlir;clang;openmp;flang".<br></blockquote><div><br></div><div>Can you provide the git hash so that we ensure we are building the same revision?</div><div>The problem you mention seems like related to a patch I reverted on Friday.</div><div><br></div><div>-- </div><div>Mehdi</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
>><br>
>> Steps Followed:<br>
>> - git clone <a href="https://github.com/llvm/llvm-project.git" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project.git</a><br>
>> - cmake -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp;flang"<br>
>>   -DCMAKE_C_COMPILER=/usr/local/bin/gcc<br>
>> -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -G "Unix Makefiles"<br>
>> -DLLVM_USE_LINKER=gold -DCMAKE_BUILD_TYPE=Debug ../llvm/<br>
>> - make<br>
>><br>
>> [root@localhost build]# /usr/local/bin/g++ -v<br>
>> Using built-in specs.<br>
>> COLLECT_GCC=/usr/local/bin/g++<br>
>> COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.3.0/lto-wrapper <br>
>><br>
>> Target: x86_64-pc-linux-gnu<br>
>> Configured with: ./configure --disable-multilib<br>
>> --enable-languages=c,c++,fortran<br>
>> Thread model: posix<br>
>> gcc version 7.3.0 (GCC)<br>
>> [root@localhost build]# /usr/local/bin/gcc -v<br>
>> Using built-in specs.<br>
>> COLLECT_GCC=/usr/local/bin/gcc<br>
>> COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.3.0/lto-wrapper <br>
>><br>
>> Target: x86_64-pc-linux-gnu<br>
>> Configured with: ./configure --disable-multilib<br>
>> --enable-languages=c,c++,fortran<br>
>> Thread model: posix<br>
>> gcc version 7.3.0 (GCC)<br>
>> [root@localhost build]#<br>
>><br>
>><br>
>> Scanning dependencies of target MLIRAnalysis<br>
>> [ 71%] Building CXX object<br>
>> tools/mlir/lib/Analysis/CMakeFiles/MLIRAnalysis.dir/CallGraph.cpp.o<br>
>> [ 71%] Building CXX object<br>
>> tools/mlir/lib/Analysis/CMakeFiles/MLIRAnalysis.dir/Liveness.cpp.o<br>
>> [ 71%] Building CXX object<br>
>> tools/mlir/lib/Analysis/CMakeFiles/MLIRAnalysis.dir/SliceAnalysis.cpp.o<br>
>> [ 71%] Building CXX object<br>
>> tools/mlir/lib/Analysis/CMakeFiles/MLIRAnalysis.dir/Dominance.cpp.o<br>
>> In file included from<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:20:0, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/Support/STLExtras.h:18, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/StorageUniquerSupport.h:17, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/TypeSupport.h:17, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Types.h:12, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Value.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/BlockSupport.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Block.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Region.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/RegionGraphTraits.h:18, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/Analysis/Dominance.h:12, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/lib/Analysis/Dominance.cpp:14: <br>
>><br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/iterator.h: <br>
>><br>
>> In instantiation of ‘NodeRef& llvm::WrappedPairNodeDataIterator<ItType,<br>
>> NodeRef, DataRef>::operator*() const [with ItType =<br>
>> mlir::PredecessorIterator; NodeRef = std::pair<const<br>
>> llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>; DataRef = const<br>
>> llvm::GraphDiff<mlir::Block*, true>*]’:<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:315:36: <br>
>><br>
>>    required from ‘void llvm::filter_iterator_base<WrappedIteratorT,<br>
>> PredicateT, IterTag>::findNextValid() [with WrappedIteratorT =<br>
>> llvm::WrappedPairNodeDataIterator<mlir::PredecessorIterator,<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>, <br>
>> const<br>
>> llvm::GraphDiff<mlir::Block*, true>*>; PredicateT =<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::children(llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::NodeRef) [with GraphT = llvm::Inverse<mlir::Block*>; bool <br>
>> InverseGraph<br>
>> = true; bool InverseEdge = true; GT =<br>
>> llvm::GraphTraits<llvm::Inverse<mlir::Block*> >;<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge, GT>::NodeRef =<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>;<br>
>> typename GT::NodeRef =<br>
>> mlir::Block*]::<lambda(llvm::CFGViewChildren<llvm::Inverse<mlir::Block*>, <br>
>><br>
>> true, true, llvm::GraphTraits<llvm::Inverse<mlir::Block*> > <br>
>> >::NodeRef)>;<br>
>> IterTag = std::forward_iterator_tag]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:325:18: <br>
>><br>
>>    required from ‘llvm::filter_iterator_base<WrappedIteratorT, <br>
>> PredicateT,<br>
>> IterTag>::filter_iterator_base(WrappedIteratorT, WrappedIteratorT,<br>
>> PredicateT) [with WrappedIteratorT =<br>
>> llvm::WrappedPairNodeDataIterator<mlir::PredecessorIterator,<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>, <br>
>> const<br>
>> llvm::GraphDiff<mlir::Block*, true>*>; PredicateT =<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::children(llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::NodeRef) [with GraphT = llvm::Inverse<mlir::Block*>; bool <br>
>> InverseGraph<br>
>> = true; bool InverseEdge = true; GT =<br>
>> llvm::GraphTraits<llvm::Inverse<mlir::Block*> >;<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge, GT>::NodeRef =<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>;<br>
>> typename GT::NodeRef =<br>
>> mlir::Block*]::<lambda(llvm::CFGViewChildren<llvm::Inverse<mlir::Block*>, <br>
>><br>
>> true, true, llvm::GraphTraits<llvm::Inverse<mlir::Block*> > <br>
>> >::NodeRef)>;<br>
>> IterTag = std::forward_iterator_tag]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:348:31: <br>
>><br>
>>    required from ‘llvm::filter_iterator_impl<WrappedIteratorT, <br>
>> PredicateT,<br>
>> IterTag>::filter_iterator_impl(WrappedIteratorT, WrappedIteratorT,<br>
>> PredicateT) [with WrappedIteratorT =<br>
>> llvm::WrappedPairNodeDataIterator<mlir::PredecessorIterator,<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>, <br>
>> const<br>
>> llvm::GraphDiff<mlir::Block*, true>*>; PredicateT =<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::children(llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::NodeRef) [with GraphT = llvm::Inverse<mlir::Block*>; bool <br>
>> InverseGraph<br>
>> = true; bool InverseEdge = true; GT =<br>
>> llvm::GraphTraits<llvm::Inverse<mlir::Block*> >;<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge, GT>::NodeRef =<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>;<br>
>> typename GT::NodeRef =<br>
>> mlir::Block*]::<lambda(llvm::CFGViewChildren<llvm::Inverse<mlir::Block*>, <br>
>><br>
>> true, true, llvm::GraphTraits<llvm::Inverse<mlir::Block*> > <br>
>> >::NodeRef)>;<br>
>> IterTag = std::forward_iterator_tag]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:419:7: <br>
>><br>
>>    required from <br>
>> ‘llvm::iterator_range<llvm::filter_iterator_impl<decltype<br>
>> (std::begin(declval<RangeT&>())), PredicateT, typename<br>
>> llvm::detail::fwd_or_bidi_tag<decltype<br>
>> (std::begin(declval<RangeT&>()))>::type> ><br>
>> llvm::make_filter_range(RangeT&&, PredicateT) [with RangeT =<br>
>> llvm::iterator_range<llvm::WrappedPairNodeDataIterator<mlir::PredecessorIterator, <br>
>><br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>, <br>
>> const<br>
>> llvm::GraphDiff<mlir::Block*, true>*> >; PredicateT =<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::children(llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge,<br>
>> GT>::NodeRef) [with GraphT = llvm::Inverse<mlir::Block*>; bool <br>
>> InverseGraph<br>
>> = true; bool InverseEdge = true; GT =<br>
>> llvm::GraphTraits<llvm::Inverse<mlir::Block*> >;<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge, GT>::NodeRef =<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>;<br>
>> typename GT::NodeRef =<br>
>> mlir::Block*]::<lambda(llvm::CFGViewChildren<llvm::Inverse<mlir::Block*>, <br>
>><br>
>> true, true, llvm::GraphTraits<llvm::Inverse<mlir::Block*> > <br>
>> >::NodeRef)>;<br>
>> typename llvm::detail::fwd_or_bidi_tag<decltype<br>
>> (std::begin(declval<RangeT&>()))>::type = std::forward_iterator_tag;<br>
>> decltype (std::begin(declval<RangeT&>())) =<br>
>> llvm::WrappedPairNodeDataIterator<mlir::PredecessorIterator,<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>, <br>
>> const<br>
>> llvm::GraphDiff<mlir::Block*, true>*>]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/IR/CFGDiff.h:234:35: <br>
>><br>
>>    required from ‘static auto llvm::CFGViewChildren<GraphT, <br>
>> InverseGraph,<br>
>> InverseEdge, GT>::children(llvm::CFGViewChildren<GraphT, InverseGraph,<br>
>> InverseEdge, GT>::NodeRef) [with GraphT = <br>
>> llvm::Inverse<mlir::Block*>; bool<br>
>> InverseGraph = true; bool InverseEdge = true; GT =<br>
>> llvm::GraphTraits<llvm::Inverse<mlir::Block*> >;<br>
>> llvm::CFGViewChildren<GraphT, InverseGraph, InverseEdge, GT>::NodeRef =<br>
>> std::pair<const llvm::GraphDiff<mlir::Block*, true>*, mlir::Block*>;<br>
>> typename GT::NodeRef = mlir::Block*]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/IR/CFGDiff.h:255:20: <br>
>><br>
>>    [ skipping 4 instantiation contexts, use <br>
>> -ftemplate-backtrace-limit=0 to<br>
>> disable ]<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/Support/GenericDomTreeConstruction.h:885:59: <br>
>><br>
>>    required from<br>
>> ‘llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::DeleteEdge(DomTreeT&,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::BatchUpdatePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr)::<lambda(llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr, <br>
>><br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr)> [with DomTreeT =<br>
>> llvm::DominatorTreeBase<mlir::Block, true>;<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr = mlir::Block*]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/Support/GenericDomTreeConstruction.h:882:25: <br>
>><br>
>>    required from ‘struct<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::DeleteEdge(DomTreeT&,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::BatchUpdatePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr) [with DomTreeT =<br>
>> llvm::DominatorTreeBase<mlir::Block, true>;<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::BatchUpdatePtr =<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<llvm::DominatorTreeBase<mlir::Block,<br>
>> true> >::BatchUpdateInfo*;<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr =<br>
>> mlir::Block*]::<lambda(using NodePtr = using NodePtr = class <br>
>> mlir::Block*,<br>
>> using NodePtr = using NodePtr = class mlir::Block*)>’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/Support/GenericDomTreeConstruction.h:882:10: <br>
>><br>
>>    required from ‘static void<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::DeleteEdge(DomTreeT&,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::BatchUpdatePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr,<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr) [with DomTreeT =<br>
>> llvm::DominatorTreeBase<mlir::Block, true>;<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::BatchUpdatePtr =<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<llvm::DominatorTreeBase<mlir::Block,<br>
>> true> >::BatchUpdateInfo*;<br>
>> llvm::DomTreeBuilder::SemiNCAInfo<DomTreeT>::NodePtr = mlir::Block*]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/Support/GenericDomTreeConstruction.h:1540:36: <br>
>><br>
>>    required from ‘void llvm::DomTreeBuilder::DeleteEdge(DomTreeT&, <br>
>> typename<br>
>> DomTreeT::NodePtr, typename DomTreeT::NodePtr) [with DomTreeT =<br>
>> llvm::DominatorTreeBase<mlir::Block, true>; typename DomTreeT::NodePtr =<br>
>> mlir::Block*]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/Support/GenericDomTree.h:561:31: <br>
>><br>
>>    required from ‘void llvm::DominatorTreeBase<NodeT,<br>
>> IsPostDom>::deleteEdge(NodeT*, NodeT*) [with NodeT = mlir::Block; bool<br>
>> IsPostDom = true]’<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/lib/Analysis/Dominance.cpp:23:22: <br>
>><br>
>>    required from here<br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/iterator.h:366:17: <br>
>><br>
>> error: passing ‘const mlir::PredecessorIterator’ as ‘this’ argument<br>
>> discards qualifiers [-fpermissive]<br>
>>       NR.second = *this->I;<br>
>>                   ^~~~~~~~<br>
>> In file included from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/Support/STLExtras.h:18:0, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/StorageUniquerSupport.h:17, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/TypeSupport.h:17, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Types.h:12, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Value.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/BlockSupport.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Block.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/Region.h:16, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/IR/RegionGraphTraits.h:18, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/include/mlir/Analysis/Dominance.h:12, <br>
>><br>
>>                   from<br>
>> /root/LLVM/llvm-project-new/llvm-project/mlir/lib/Analysis/Dominance.cpp:14: <br>
>><br>
>> /root/LLVM/llvm-project-new/llvm-project/llvm/include/llvm/ADT/STLExtras.h:217:16: <br>
>><br>
>> note:   in call to ‘FuncReturnTy llvm::mapped_iterator<ItTy, FuncTy,<br>
>> FuncReturnTy>::operator*() [with ItTy =<br>
>> mlir::ValueUseIterator<mlir::BlockOperand>; FuncTy = mlir::Block*<br>
>> (*)(mlir::BlockOperand&); FuncReturnTy = mlir::Block*]’<br>
>>     FuncReturnTy operator*() { return F(*this->I); }<br>
_______________________________________________<br>
flang-dev mailing list<br>
<a href="mailto:flang-dev@lists.llvm.org" target="_blank">flang-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/flang-dev</a><br>
</blockquote></div></div>
</blockquote></div>