re PR ipa/58329 (ld: Invalid symbol type for plabel (.libs/libstdc++.lax/libc++11conv...
authorJan Hubicka <jh@suse.cz>
Tue, 17 Sep 2013 15:46:06 +0000 (17:46 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 17 Sep 2013 15:46:06 +0000 (15:46 +0000)
PR middle-end/58329
* ipa-devirt.c (ipa_devirt): Be ready for symtab_nonoverwritable_alias
to return NULL.
* ipa.c (function_and_variable_visibility): Likewise.
* ipa-profile.c (ipa_profile): Likewise.

From-SVN: r202657

gcc/ChangeLog
gcc/ipa-devirt.c
gcc/ipa-profile.c
gcc/ipa.c

index 075b1a011bdb0ff1f924a53c177ea2806e7d7a93..3f3a1bc3d7cce59169a1f1f5f96a86f74fc830d9 100644 (file)
@@ -1,3 +1,11 @@
+2013-09-17  Jan Hubicka  <jh@suse.cz>
+
+       PR middle-end/58329
+       * ipa-devirt.c (ipa_devirt): Be ready for symtab_nonoverwritable_alias
+       to return NULL.
+       * ipa.c (function_and_variable_visibility): Likewise.
+       * ipa-profile.c (ipa_profile): Likewise.
+
 2013-09-17  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR ipa/58398
index 1be19f89d0510fa055f9282810648ab1f8b341cf..85bc5b0652b9e1af1375621e3051ce2ed9643066 100644 (file)
@@ -1098,7 +1098,13 @@ ipa_devirt (void)
                           cgraph_node_name (likely_target),
                           likely_target->symbol.order);
                if (!symtab_can_be_discarded ((symtab_node) likely_target))
-                 likely_target = cgraph (symtab_nonoverwritable_alias ((symtab_node)likely_target));
+                 {
+                   cgraph_node *alias;
+                   alias = cgraph (symtab_nonoverwritable_alias
+                                    ((symtab_node)likely_target));
+                   if (alias)
+                     likely_target = alias;
+                 }
                nconverted++;
                update = true;
                cgraph_turn_edge_to_speculative
index 2b22333d1b910a8dcd85d7c1030a04bc0d8e141a..424e4a6b6fee08cee70326b9518702c1dca72125 100644 (file)
@@ -625,7 +625,13 @@ ipa_profile (void)
                         of N2.  Speculate on the local alias to allow inlining.
                       */
                      if (!symtab_can_be_discarded ((symtab_node) n2))
-                       n2 = cgraph (symtab_nonoverwritable_alias ((symtab_node)n2));
+                       {
+                         cgraph_node *alias;
+                         alias = cgraph (symtab_nonoverwritable_alias
+                                          ((symtab_node)n2));
+                         if (alias)
+                           n2 = alias;
+                       }
                      nconverted++;
                      cgraph_turn_edge_to_speculative
                        (e, n2,
index 91d63eb9f850241b84648ece411513c02ad71d05..67b3bc0f07c4393ab4df5f0cab58da95e7764b03 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -998,7 +998,7 @@ function_and_variable_visibility (bool whole_program)
        {
          struct cgraph_node *alias = cgraph (symtab_nonoverwritable_alias ((symtab_node) node));
 
-         if (alias != node)
+         if (alias && alias != node)
            {
              while (node->callers)
                {