This PR is about an incorrect warning for variables in progmem
without initializer. If the variable is just an alias like in
and with -fmerge-all-constants
const __flash char string1[] = "same string";
const __flash char string2[] = "same string";
this will result in an incorrect
warning: uninitialized variable 'string2' put into program memory area
[-Wuninitialized]
Hence, this patch tests whether the decl is just an alias.
Ok to apply?
Johann
PR target/80462
* config/avr/avr.c (tree.h): Include it.
(cgraph.h): Include it.
(avr_encode_section_info): Don't warn for uninitialized progmem
variable if it's just an alias.
Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c (revision 246966)
+++ config/avr/avr.c (working copy)
@@ -25,6 +25,8 @@
#include "backend.h"
#include "target.h"
#include "rtl.h"
+#include "tree.h"
+#include "cgraph.h"
#include "c-family/c-common.h"
#include "cfghooks.h"
#include "df.h"
@@ -10127,9 +10129,14 @@ avr_encode_section_info (tree decl, rtx
&& !DECL_EXTERNAL (decl)
&& avr_progmem_p (decl, DECL_ATTRIBUTES (decl)))
{
- warning (OPT_Wuninitialized,
- "uninitialized variable %q+D put into "
- "program memory area", 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);
}
default_encode_section_info (decl, rtl, new_decl_p);