PR34734 is an annoying, false C++ warning for code like const int x __attribute__((progmem)) = 1;
progmem.c:1:30: warning: only initialized variables can be placed into program memory area [enabled by default] The problem is that DECL_INITIAL is NULL at the specific point in space and time (avr_handle_progmem_attribute) even though tree.def promises otherwise. The patch hacks around by explicitly querying for C++ front end. Johann -- PR target/34734 * config/avr/avr.c (avr_handle_progmem_attribute): Hack around non-present DECL_INITIAL if front end is C++.
Index: config/avr/avr.c =================================================================== --- config/avr/avr.c (Revision 175036) +++ config/avr/avr.c (Arbeitskopie) @@ -5099,7 +5099,15 @@ avr_handle_progmem_attribute (tree *node } else if (TREE_STATIC (*node) || DECL_EXTERNAL (*node)) { - if (DECL_INITIAL (*node) == NULL_TREE && !DECL_EXTERNAL (*node)) + if (DECL_INITIAL (*node) == NULL_TREE && !DECL_EXTERNAL (*node) + /* FIXME: Despite documentation in tree.def, + DECL_INITIAL is NULL if an initializer is + present in C++. This is presumably due to + different parsers for C resp. C++. + We hack around that annoying warning (PR34734) + by quering for the front end and emit a warning + just for non-C++. */ + && NULL == strcasestr (lang_hooks.name, "c++")) { warning (0, "only initialized variables can be placed into " "program memory area");