ptx assembly follows rather different rules than what's typical elsewhere. We need a new hook to add a " };" string when we are finished outputting a variable.
gcc/ * target.def (decl_end): New hook. * varasm.c (assemble_variable_contents, assemble_constant_contents): Use it. * doc/tm.texi.in (TARGET_ASM_DECL_END): Add. * doc/tm.texi: Regenerate. ------------------------------------------------------------------------ Index: gcc/doc/tm.texi =================================================================== --- gcc/doc/tm.texi.orig +++ gcc/doc/tm.texi @@ -7575,6 +7575,11 @@ The default implementation of this hook when the relevant string is @code{NULL}. @end deftypefn +@deftypefn {Target Hook} void TARGET_ASM_DECL_END (void) +Define this hook if the target assembler requires a special marker to +terminate an initialized variable declaration. +@end deftypefn + @deftypefn {Target Hook} bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *@var{file}, rtx @var{x}) A target hook to recognize @var{rtx} patterns that @code{output_addr_const} can't deal with, and output assembly code to @var{file} corresponding to Index: gcc/doc/tm.texi.in =================================================================== --- gcc/doc/tm.texi.in.orig +++ gcc/doc/tm.texi.in @@ -5412,6 +5412,8 @@ It must not be modified by command-line @hook TARGET_ASM_INTEGER +@hook TARGET_ASM_DECL_END + @hook TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA @defmac ASM_OUTPUT_ASCII (@var{stream}, @var{ptr}, @var{len}) Index: gcc/target.def =================================================================== --- gcc/target.def.orig +++ gcc/target.def @@ -127,6 +127,15 @@ when the relevant string is @code{NULL}. bool, (rtx x, unsigned int size, int aligned_p), default_assemble_integer) +/* Notify the backend that we have completed emitting the data for a + decl. */ +DEFHOOK +(decl_end, + "Define this hook if the target assembler requires a special marker to\n\ +terminate an initialized variable declaration.", + void, (void), + hook_void_void) + /* Output code that will globalize a label. */ DEFHOOK (globalize_label, Index: gcc/varasm.c =================================================================== --- gcc/varasm.c.orig +++ gcc/varasm.c @@ -1945,6 +1945,7 @@ assemble_variable_contents (tree decl, c else /* Leave space for it. */ assemble_zeros (tree_to_uhwi (DECL_SIZE_UNIT (decl))); + targetm.asm_out.decl_end (); } } @@ -3349,6 +3350,8 @@ assemble_constant_contents (tree exp, co /* Output the value of EXP. */ output_constant (exp, size, align); + + targetm.asm_out.decl_end (); } /* We must output the constant data referred to by SYMBOL; do so. */