diff -Nrup a/binutils/strings.c b/binutils/strings.c
--- a/binutils/strings.c 2013-02-27 13:28:03.000000000 -0700
+++ b/binutils/strings.c 2014-01-06 11:26:21.939427032 -0700
@@ -456,7 +456,18 @@ get_char (FILE *stream, file_ptr *addres
{
int c, i;
long r = EOF;
- unsigned char buf[4];
+ /* Aggressive optimizations might expose elements of BUF as individual
+ objects and then uninitialized analysis may be performed on those
+ elements.
+
+ If that happens, the compiler can/will warn in the switch statement
+ below because it does not know the relationship between ENCODING_BYTES
+ and ENCODING which prevents uninitialized uses.
+
+ Just initialize the object to zeros, which seems to be the best of
+ several bad solutions (#pragma GCC diagnostic, exposing the
+ relationship between ENCODING_BYTES and ENCODING here, etc). */
+ unsigned char buf[4] = { 0 };
for (i = 0; i < encoding_bytes; i++)
{
diff -Nrup a/ld/ldfile.c b/ld/ldfile.c
--- a/ld/ldfile.c 2013-02-27 13:28:03.000000000 -0700
+++ b/ld/ldfile.c 2014-01-06 12:53:39.559070145 -0700
@@ -596,7 +596,7 @@ static void
ldfile_open_command_file_1 (const char *name, bfd_boolean default_only)
{
FILE *ldlex_input_stack;
- bfd_boolean sysrooted;
+ bfd_boolean sysrooted = FALSE;
ldlex_input_stack = ldfile_find_command_file (name, default_only, &sysrooted);