Umesh Kalappa <umesh.kalap...@gmail.com> writes:
> Hi All,
>
> I'm trying to fetch the string constant from the constant pool entry
> for the symbol_ref rtx like
>
> c sample
>
> int i;
> int main()
> {
>   printf("%d",i);
> }
>
> rtl is
>
> (gdb) p debug_rtx(val)
> (symbol_ref/f:SI ("*.LC0") [flags 0x2] <var_decl 0xb7c293f4 *.LC0>)

The SYMBOL_REF_DECL is a VAR_DECL whose DECL_INITIAL is the constant.  So:

> corresponding asm
>
>        .section        .rodata,code
>         .align  2
> .LC0:
>         .ascii  "%d\000"
>
>
> sample code to fetch the string "%d"
>
> tree sym = SYMBOL_REF_DECL(rtx);
>
> if (!(sym && (TREE_CODE(sym)==STRING_CST) && STRING_CST_CHECK(sym)))
> sym = 0;

...I think you want:

  if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
    {
      tree str = DECL_INITIAL (SYMBOL_REF_DECL (symbol));
      if (TREE_CODE (str) == STRING_CST)
        ...
    }

(STRING_CST_CHECK is really local to the tree.h macros, it shouldn't
be used elsewhere.)

Thanks,
Richard

Reply via email to