https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117010
Bug ID: 117010
Summary: [nvptx] Incorrect ptx code-gen for C++ code with
templates
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: prathamesh3492 at gcc dot gnu.org
Target Milestone: ---
Hi,
For the test-case adapted from pr96390.C:
template<int Dim> struct V
{
int version_called; V ()
{
version_called = 1;
}
};
void foo()
{
V<0> v;
}
int
main ()
{
#pragma omp target
{
foo ();
}
return 0;
}
Compiling with -O0 -fopenmp -foffload=nvptx-none -foffload=-malias
-foffload=-mptx=6.3, results in following error:
ptxas ./a.xnvptx-none.mkoffload.o, line 45; error : Call to '_ZN1VILi0EEC1Ev'
requires call prototype
ptxas ./a.xnvptx-none.mkoffload.o, line 45; error : Unknown symbol
'_ZN1VILi0EEC1Ev'
ptxas fatal : Ptx assembly aborted due to errors
nvptx-as: ptxas returned 255 exit status
The reason this happens is because in PTX code-gen, we call _ZN1VILi0EEC1Ev
from _Z3foov, however _ZN1VILi0EEC1Ev is not defined anywhere. Instead it
contains the following definition:
// BEGIN FUNCTION DECL: _ZN1VILi0EEC2Ev
.func _ZN1VILi0EEC2Ev (.param.u64 %in_ar0);
where _ZN1VILi0EEC1Ev is an (implicit) alias for _ZN1VILi0EEC2Ev in callgraph.
Thanks,
Prathamesh