From 8b718de8a7c45667773cd684b4e8267cfa8a27a7 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Wed, 12 Jul 2017 13:58:34 +0000 Subject: [PATCH] re PR target/81407 ([avr] Diagnose if a variable in progmem needs constructing.) PR target/81407 * config/avr/avr.c (avr_encode_section_info) [progmem && !TREE_READONLY]: Error if progmem object needs constructing. From-SVN: r250151 --- gcc/ChangeLog | 7 +++++++ gcc/config/avr/avr.c | 24 ++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3d096ccc5e..46ca90b5905 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-07-12 Georg-Johann Lay + + PR target/81407 + * config/avr/avr.c (avr_encode_section_info) + [progmem && !TREE_READONLY]: Error if progmem object needs + constructing. + 2017-07-11 Michael Collison * config/aarch64/aarch64-simd.md (aarch64_sub_compare0): diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index d32cac64cd0..a8978ec84ff 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -10376,18 +10376,26 @@ avr_encode_section_info (tree decl, rtx rtl, int new_decl_p) if (new_decl_p && decl && DECL_P (decl) - && NULL_TREE == DECL_INITIAL (decl) && !DECL_EXTERNAL (decl) && avr_progmem_p (decl, DECL_ATTRIBUTES (decl))) { - // Don't warn for (implicit) aliases like in PR80462. - tree asmname = DECL_ASSEMBLER_NAME (decl); - varpool_node *node = varpool_node::get_for_asmname (asmname); - bool alias_p = node && node->alias; + if (!TREE_READONLY (decl)) + { + // This might happen with C++ if stuff needs constructing. + error ("variable %q+D with dynamic initialization put " + "into program memory area", decl); + } + else if (NULL_TREE == DECL_INITIAL (decl)) + { + // Don't warn for (implicit) aliases like in PR80462. + tree asmname = DECL_ASSEMBLER_NAME (decl); + varpool_node *node = varpool_node::get_for_asmname (asmname); + bool alias_p = node && node->alias; - if (!alias_p) - warning (OPT_Wuninitialized, "uninitialized variable %q+D put into " - "program memory area", decl); + if (!alias_p) + warning (OPT_Wuninitialized, "uninitialized variable %q+D put " + "into program memory area", decl); + } } default_encode_section_info (decl, rtl, new_decl_p); -- 2.30.2