Thank you richard for the inputs . ~Umesh
On Wed, Mar 4, 2015 at 3:29 AM, Richard Sandiford <rdsandif...@googlemail.com> wrote: > 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