if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_DECL)
value = TYPENAME;
+ /* A user-invisible read-only initialized variable
+ should be replaced by its value.
+ We handle only strings since that's the only case used in C. */
+ else if (lastiddecl != 0 && TREE_CODE (lastiddecl) == VAR_DECL
+ && DECL_IGNORED_P (lastiddecl)
+ && TREE_READONLY (lastiddecl)
+ && DECL_INITIAL (lastiddecl) != 0
+ && TREE_CODE (DECL_INITIAL (lastiddecl)) == STRING_CST)
+ {
+ yylval.ttype = DECL_INITIAL (lastiddecl);
+ value = STRING;
+ }
else if (doing_objc_thang)
{
tree objc_interface_decl = lookup_interface (yylval.ttype);
TIMEVAR (varconst_time,
{
make_decl_rtl (decl, asmspec, top_level);
- /* Don't output anything
- when a tentative file-scope definition is seen.
- But at end of compilation, do output code for them. */
- if (! (! at_end && top_level
- && (DECL_INITIAL (decl) == 0
- || DECL_INITIAL (decl) == error_mark_node)))
- assemble_variable (decl, top_level, at_end);
+ /* For a user-invisible decl that should be replaced
+ by its value when used, don't output anything. */
+ if (! (TREE_CODE (decl) == VAR_DECL
+ && DECL_IGNORED_P (decl) && TREE_READONLY (decl)
+ && DECL_INITIAL (decl) != 0))
+ /* Don't output anything
+ when a tentative file-scope definition is seen.
+ But at end of compilation, do output code for them. */
+ if (! (! at_end && top_level
+ && (DECL_INITIAL (decl) == 0
+ || DECL_INITIAL (decl) == error_mark_node
+ || DECL_IGNORED_P (decl))))
+ assemble_variable (decl, top_level, at_end);
});
else if (TREE_REGDECL (decl) && asmspec != 0)
{