llvm-3.3 fails to compile in R600MachineScheduler.cpp with the following error: llvm[3]: Compiling R600MachineScheduler.cpp for Debug+Asserts+Checks build R600MachineScheduler.cpp: En la función miembro ‘llvm::SUnit* llvm::R600SchedStrategy::PopInst(std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>&)’: R600MachineScheduler.cpp:293:63: error: se solicitó la conversión desde ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >}’ al tipo no escalar ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ R600MachineScheduler.cpp:293:76: error: se solicitó la conversión desde ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >}’ al tipo no escalar ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ R600MachineScheduler.cpp:299:17: error: no se encontró una función coincidente para la llamada a ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::erase(std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator&)’ R600MachineScheduler.cpp:299:17: nota: los candidatos son: In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/set:35:0, from /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/set:66, from /var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/include/llvm/ADT/SmallSet.h:19, from /var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/include/llvm/Target/TargetInstrInfo.h:17, from AMDGPUInstrInfo.h:21, from R600InstrInfo.h:18, from R600MachineScheduler.h:18, from R600MachineScheduler.cpp:18: /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:248:7: nota: void std::__debug::multiset<_Key, _Compare, _Allocator>::erase(std::__debug::multiset<_Key, _Compare, _Allocator>::iterator) [with _Key = llvm::SUnit*; _Compare = llvm::CompareSUnit; _Allocator = std::allocator<llvm::SUnit*>; std::__debug::multiset<_Key, _Compare, _Allocator>::iterator = __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >; typename std::__cxx1998::multiset<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<llvm::SUnit*>] /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:248:7: nota: no hay una conversión conocida para el argumento 1 de ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ a ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >}’ /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:257:7: nota: std::__debug::multiset<_Key, _Compare, _Allocator>::size_type std::__debug::multiset<_Key, _Compare, _Allocator>::erase(const key_type&) [with _Key = llvm::SUnit*; _Compare = llvm::CompareSUnit; _Allocator = std::allocator<llvm::SUnit*>; std::__debug::multiset<_Key, _Compare, _Allocator>::size_type = long unsigned int; std::__debug::multiset<_Key, _Compare, _Allocator>::key_type = llvm::SUnit*] /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:257:7: nota: no hay una conversión conocida para el argumento 1 de ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ a ‘llvm::SUnit* const&’ /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:292:7: nota: void std::__debug::multiset<_Key, _Compare, _Allocator>::erase(std::__debug::multiset<_Key, _Compare, _Allocator>::iterator, std::__debug::multiset<_Key, _Compare, _Allocator>::iterator) [with _Key = llvm::SUnit*; _Compare = llvm::CompareSUnit; _Allocator = std::allocator<llvm::SUnit*>; std::__debug::multiset<_Key, _Compare, _Allocator>::iterator = __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >; typename std::__cxx1998::multiset<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<llvm::SUnit*>] /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.2/include/g++-v4/debug/multiset.h:292:7: nota: el candidato espera 2 argumentos, se proporcionaron 1 /bin/rm: no se puede borrar «/var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/lib/Target/R600/Debug+Asserts+Checks/R600MachineScheduler.d.tmp»: No existe el fichero o el directorio make[3]: *** [/var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/lib/Target/R600/Debug+Asserts+Checks/R600MachineScheduler.o] Error 1 For gcc-4.6.2 (stable the output is similar: R600MachineScheduler.cpp: En la función miembro ‘llvm::SUnit* llvm::R600SchedStrategy::PopInst(std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>&)’: R600MachineScheduler.cpp:293:63: error: se solicitó la conversión desde ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >}’ al tipo no escalar ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ R600MachineScheduler.cpp:293:76: error: se solicitó la conversión desde ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >}’ al tipo no escalar ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ R600MachineScheduler.cpp:299:17: error: no se encontró una función coincidente para la llamada a ‘std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit>::erase(std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator&)’ R600MachineScheduler.cpp:299:17: nota: los candidatos son: /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:248:7: nota: void std::__debug::multiset<_Key, _Compare, _Allocator>::erase(std::__debug::multiset<_Key, _Compare, _Allocator>::iterator) [with _Key = llvm::SUnit*, _Compare = llvm::CompareSUnit, _Allocator = std::allocator<llvm::SUnit*>, std::__debug::multiset<_Key, _Compare, _Allocator>::iterator = __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >, typename std::__cxx1998::multiset<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<llvm::SUnit*>] /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:248:7: nota: no hay una conversión conocida para el argumento 1 de ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ a ‘__gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >’ /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:257:7: nota: std::__debug::multiset<_Key, _Compare, _Allocator>::size_type std::__debug::multiset<_Key, _Compare, _Allocator>::erase(const key_type&) [with _Key = llvm::SUnit*, _Compare = llvm::CompareSUnit, _Allocator = std::allocator<llvm::SUnit*>, std::__debug::multiset<_Key, _Compare, _Allocator>::size_type = long unsigned int, std::__debug::multiset<_Key, _Compare, _Allocator>::key_type = llvm::SUnit*] /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:257:7: nota: no hay una conversión conocida para el argumento 1 de ‘std::__debug::set<llvm::SUnit*, llvm::CompareSUnit>::iterator {aka __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::set<llvm::SUnit*, llvm::CompareSUnit> >}’ a ‘llvm::SUnit* const&’ /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:292:7: nota: void std::__debug::multiset<_Key, _Compare, _Allocator>::erase(std::__debug::multiset<_Key, _Compare, _Allocator>::iterator, std::__debug::multiset<_Key, _Compare, _Allocator>::iterator) [with _Key = llvm::SUnit*, _Compare = llvm::CompareSUnit, _Allocator = std::allocator<llvm::SUnit*>, std::__debug::multiset<_Key, _Compare, _Allocator>::iterator = __gnu_debug::_Safe_iterator<std::_Rb_tree_const_iterator<llvm::SUnit*>, std::__debug::multiset<llvm::SUnit*, llvm::CompareSUnit> >, typename std::__cxx1998::multiset<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<llvm::SUnit*>] /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4/debug/multiset.h:292:7: nota: el candidato espera 2 argumentos, se proporcionaron 1 /bin/rm: no se puede borrar «/var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/lib/Target/R600/Debug+Asserts+Checks/R600MachineScheduler.d.tmp»: No existe el fichero o el directorio make[3]: *** [/var/tmp/portage/sys-devel/llvm-3.3/work/llvm-3.3.src/lib/Target/R600/Debug+Asserts+Checks/R600MachineScheduler.o] Error 1 Reproducible: Always
Created attachment 351616 [details, diff] Patch solving the issue This patch fixes the issue by using a multiset instead of a set iterator.
Hi guys, since you are the llvm maintainers I'm assigning this to you. A patch fixing the issue is already provided.
Nice catch, added in current 3.3 ebuild :) Code was already rewritten upstream in -9999, so no need to fix it there