[gcc r14-6352] strub: skip emutls after strubm errors

Alexandre Oliva aoliva@gcc.gnu.org
Sat Dec 9 00:44:24 GMT 2023


https://gcc.gnu.org/g:5a9e8b0cbbc1a10d73f1809e76bfec73a4386be3

commit r14-6352-g5a9e8b0cbbc1a10d73f1809e76bfec73a4386be3
Author: Alexandre Oliva <oliva@adacore.com>
Date:   Fri Dec 8 21:41:33 2023 -0300

    strub: skip emutls after strubm errors
    
    The emutls pass requires PROP_ssa, but if the strubm pass (or any
    other pre-SSA pass) issues errors, all of the build_ssa_passes are
    skipped, so the property is not set, but emutls still attempts to run,
    on targets that use it, despite earlier errors, so it hits the
    unsatisfied requirement.
    
    Adjust emutls to be skipped in case of earlier errors.
    
    
    for  gcc/ChangeLog
    
            * tree-emutls.cc: Include diagnostic-core.h.
            (pass_ipa_lower_emutls::gate): Skip if errors were seen.

Diff:
---
 gcc/tree-emutls.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-emutls.cc b/gcc/tree-emutls.cc
index 5dca5a82913..38de202717a 100644
--- a/gcc/tree-emutls.cc
+++ b/gcc/tree-emutls.cc
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "langhooks.h"
 #include "tree-iterator.h"
 #include "gimplify.h"
+#include "diagnostic-core.h" /* for seen_error */
 
 /* Whenever a target does not support thread-local storage (TLS) natively,
    we can emulate it with some run-time support in libgcc.  This will in
@@ -841,7 +842,7 @@ public:
   bool gate (function *) final override
     {
       /* If the target supports TLS natively, we need do nothing here.  */
-      return !targetm.have_tls;
+      return !targetm.have_tls && !seen_error ();
     }
 
   unsigned int execute (function *) final override


More information about the Gcc-cvs mailing list