https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119737
Bug ID: 119737
Summary: GCN/C++ vs. 'as': 'LLVM ERROR: Size expression must be
absolute.'
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: tschwinge at gcc dot gnu.org
CC: ams at gcc dot gnu.org
Target Milestone: ---
Target: GCN
We've got cases of GCN/C++ offloading code (XFAILed test cases soon to appear),
where we fail assembly due to:
LLVM ERROR: Size expression must be absolute.
[...]
x86_64-pc-linux-gnu-accel-amdgcn-amdhsa-gcc: internal compiler error:
Aborted signal terminated program as
[...]
gcn mkoffload: fatal error:
[...]/x86_64-pc-linux-gnu-accel-amdgcn-amdhsa-gcc returned 4 exit status
That's with optimizations enabled, but not for '-O0'.
The issue is, '[...].xamdgcn-amdhsa.mkoffload.2.s':
[...]
.text
.align 256
.type main._omp_fn.0,@function
main._omp_fn.0:
[...]
s_getpc_b64 s[12:13]
s_add_u32 s12, s12, __cxa_throw@rel32@lo+4
s_addc_u32 s13, s13, __cxa_throw@rel32@hi+4
s_swappc_b64 s[18:19], s[12:13]
.LFE0:
.section .fake_gcc_except_table,"e",@progbits
.LLSDA0:
.byte 0xff
[...]
.byte 0
.section .text.unlikely
.size main._omp_fn.0, .-main._omp_fn.0
[...]
That is, we emit 'main._omp_fn.0' into '.text', and after its program code,
emit (fake) exception handling data into '.fake_gcc_except_table', then switch
to '.section .text.unlikely', and that way indeed have following a bogus
'.size'.
If I manually patch that latter one to switch (back) to '.section .text', the
code assembles fine.
The '.fake_gcc_except_table' points to commit
r15-7543-g2b9bdb2d286e6872f4195ba2e710130cf6b2805d "GCN: Set 'UI_TARGET' for
'TARGET_EXCEPT_UNWIND_INFO' [PR94282, PR113331]",
<https://inbox.sourceware.org/[email protected]>, but I've
not yet seen any similar issues, or any other issues related to that, in fact.
Given that 'main._omp_fn.0' ends with a 'noreturn' call to '__cxa_throw', that
might explain the '.text.unlikely' -- but why the mismatch between '.text' and
'.text.unlikely'?
I've not yet looked into creating a non-offloading, GCN target test case.