Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 474096 - sys-devel/llvm-3.3 with VIDEO_CARDS=radeon and USE=debug fails to compile in R600MachineScheduler.cpp
Summary: sys-devel/llvm-3.3 with VIDEO_CARDS=radeon and USE=debug fails to compile in ...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Core system (show other bugs)
Hardware: All Linux
: Normal major (vote)
Assignee: Bernard Cafarelli
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-06-22 01:53 UTC by Francisco Blas Izquierdo Riera
Modified: 2013-06-24 14:42 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
Patch solving the issue (llvm-3.3_fix_R600MachineScheduler_iterator.patch,909 bytes, patch)
2013-06-22 01:57 UTC, Francisco Blas Izquierdo Riera (RETIRED)
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Francisco Blas Izquierdo Riera (RETIRED) gentoo-dev 2013-06-22 01:53:03 UTC
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
Comment 1 Francisco Blas Izquierdo Riera (RETIRED) gentoo-dev 2013-06-22 01:57:14 UTC
Created attachment 351616 [details, diff]
Patch solving the issue

This patch fixes the issue by using a multiset instead of a set iterator.
Comment 2 Francisco Blas Izquierdo Riera (RETIRED) gentoo-dev 2013-06-22 01:59:18 UTC
Hi guys, since you are the llvm maintainers I'm assigning this to you. A patch fixing the issue is already provided.
Comment 3 Bernard Cafarelli gentoo-dev 2013-06-24 14:42:38 UTC
Nice catch, added in current 3.3 ebuild :) Code was already rewritten upstream in -9999, so no need to fix it there