------- Comment #51 from rguenth at gcc dot gnu dot org  2010-07-09 11:47 
-------
(In reply to comment #50)
> Created an attachment (id=21157)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21157&action=view) [edit]
> combined ptch for 44832/44874 - WIP
> 
> For the unreduced testcase, I see differences regarding the labels do_subreg,
> done, and widen.
> Any idea why the LABEL_DECLs are kept only when emitting debug information?

because they are not used?

@@ -477,7 +490,16 @@ remove_unused_scope_block_p (tree scope)
         type is used or not.  */

       else if (debug_info_level == DINFO_LEVEL_NORMAL
-              || debug_info_level == DINFO_LEVEL_VERBOSE)
+              || debug_info_level == DINFO_LEVEL_VERBOSE
+              /* For labels that are still used in the IL, the decision
+                 to preserve them must not depend DEBUG_INFO_LEVEL,
+                 otherwise we risk having different ordering in debug vs.
+                 non-debug builds during inlining or versioning.
+                 A label appearing here (we have already checked
+                 DECL_IGNORED_P) should not be used in the IL unless it has
+                 been explicitly used before, so we use TREE_USED as an
+                 approximation.  */
+              || (TREE_CODE (*t) == LABEL_DECL && TREE_USED (*t)))

please instead add a similar case to that of
TREE_CODE (*t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (*t) instead of
amending the debuginfo level checks.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44832

Reply via email to