https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117010

Thomas Schwinge <tschwinge at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |tschwinge at gcc dot 
gnu.org
             Status|NEW                         |ASSIGNED
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
   Last reconfirmed|2024-10-08 00:00:00         |2025-3-25

--- Comment #4 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
Jakub, Richi, C++/offloading question.  For the small test case posted here,
for 'V<0>::V()' I see in the '-O0' x86_64 host code:

            .section       
.text._ZN1VILi0EEC2Ev,"axG",@progbits,_ZN1VILi0EEC5Ev,comdat
            .align 2
            .weak   _ZN1VILi0EEC2Ev
            .type   _ZN1VILi0EEC2Ev, @function
    _ZN1VILi0EEC2Ev:
            [...]
            .size   _ZN1VILi0EEC2Ev, .-_ZN1VILi0EEC2Ev
            .weak   _ZN1VILi0EEC1Ev
            .set    _ZN1VILi0EEC1Ev,_ZN1VILi0EEC2Ev

That is, weak definitions of '_ZN1VILi0EEC2Ev' and its alias '_ZN1VILi0EEC1Ev'
(which gets called from 'foo').

Likewise, I see weak definitions, if compiling such code for GCN target:

        .section       
.text._ZN1VILi0EEC2Ev,"axG",@progbits,_ZN1VILi0EEC5Ev,comdat
        .align  4
        .weak   _ZN1VILi0EEC2Ev
        .type   _ZN1VILi0EEC2Ev,@function
_ZN1VILi0EEC2Ev:
[...]
        .size   _ZN1VILi0EEC2Ev, .-_ZN1VILi0EEC2Ev
        .weak   _ZN1VILi0EEC1Ev
        .set    _ZN1VILi0EEC1Ev,_ZN1VILi0EEC2Ev

..., so that appears consistent.

For nvptx target (with '-malias'), I see:

    .weak .func _ZN1VILi0EEC1Ev (.param.u64 %in_ar0)
    {
    [...]
    }

That is, it directly emits the (used) '_ZN1VILi0EEC1Ev' constructor, instead of
emitting '_ZN1VILi0EEC2Ev' and then aliasing the former to the latter.  (I'll
look into that, to understand why that's happening; maybe it does it this way,
because PTX doesn't support weak aliases.)

Now, the observation/question: compiling this code for offloading (as
originally reported), I see for GCN offloading:

            .text
    [...]
            .type   _ZN1VILi0EEC2Ev,@function
    _ZN1VILi0EEC2Ev:
    [...]
            .size   _ZN1VILi0EEC2Ev, .-_ZN1VILi0EEC2Ev
            .set    _ZN1VILi0EEC1Ev,_ZN1VILi0EEC2Ev

That is, '_ZN1VILi0EEC2Ev' and its alias '_ZN1VILi0EEC1Ev' are now strong
instead of weak definitions.  Is this expected, or unexpected, and potentially
problematic?

Reply via email to