public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Go PATCH to fix libgo breakage (PR tree-optimization/67284)
@ 2015-08-24 11:39 Marek Polacek
  2015-08-24 15:22 ` Ian Lance Taylor
  0 siblings, 1 reply; 4+ messages in thread
From: Marek Polacek @ 2015-08-24 11:39 UTC (permalink / raw)
  To: GCC Patches, Ian Lance Taylor; +Cc: Jakub Jelinek, Jeff Law, Richard Biener

This is hopefully the last attempt to fix the libgo breakage.  This time
around I really think I got to the bottom of the problem.  The issue is
that the Go FE defines the __builtin_trap call, but doesn't set the
TREE_THIS_VOLATILE flag on it.  That's bad because then this call isn't
gimple_call_noreturn_p and the cgraph cleanup code can't do its job properly.

Bootstrapped/regtested on x86_64-linux.  Now, I don't know the Go patch
process here.  Should I just wait for you Ian to commit the patch?
(Yeah, I think I don't need the ChangeLog entry.)

2015-08-24  Marek Polacek  <polacek@redhat.com>

	PR tree-optimization/67284
	* go-gcc.cc (Gcc_backend::define_builtin): Add NORETURN_P default
	argument.  Set TREE_THIS_VOLATILE.
	(Gcc_backend::Gcc_backend): Mark __builtin_trap as a noreturn call.

diff --git gcc/go/go-gcc.cc gcc/go/go-gcc.cc
index 6f274fc..aabcd98 100644
--- gcc/go/go-gcc.cc
+++ gcc/go/go-gcc.cc
@@ -498,7 +498,7 @@ class Gcc_backend : public Backend
 private:
   void
   define_builtin(built_in_function bcode, const char* name, const char* libname,
-		 tree fntype, bool const_p);
+		 tree fntype, bool const_p, bool noreturn_p = false);
 
   // A mapping of the GCC built-ins exposed to GCCGo.
   std::map<std::string, Bfunction*> builtin_functions_;
@@ -675,7 +675,7 @@ Gcc_backend::Gcc_backend()
   // cases.
   this->define_builtin(BUILT_IN_TRAP, "__builtin_trap", NULL,
 		       build_function_type(void_type_node, void_list_node),
-		       false);
+		       false, true);
 }
 
 // Get an unnamed integer type.
@@ -3095,15 +3095,19 @@ Gcc_backend::write_global_definitions(
 // LIBNAME is the name of the corresponding library function, and is
 // NULL if there isn't one.  FNTYPE is the type of the function.
 // CONST_P is true if the function has the const attribute.
+// NORETURN_P is true if the function has the noreturn attribute.
 
 void
 Gcc_backend::define_builtin(built_in_function bcode, const char* name,
-			    const char* libname, tree fntype, bool const_p)
+			    const char* libname, tree fntype, bool const_p,
+			    bool noreturn_p)
 {
   tree decl = add_builtin_function(name, fntype, bcode, BUILT_IN_NORMAL,
 				   libname, NULL_TREE);
   if (const_p)
     TREE_READONLY(decl) = 1;
+  if (noreturn_p)
+    TREE_THIS_VOLATILE(decl) = 1;
   set_builtin_decl(bcode, decl, true);
   this->builtin_functions_[name] = this->make_function(decl);
   if (libname != NULL)
@@ -3112,6 +3116,8 @@ Gcc_backend::define_builtin(built_in_function bcode, const char* name,
 				  NULL, NULL_TREE);
       if (const_p)
 	TREE_READONLY(decl) = 1;
+      if (noreturn_p)
+	TREE_THIS_VOLATILE(decl) = 1;
       this->builtin_functions_[libname] = this->make_function(decl);
     }
 }

	Marek

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-08-24 21:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-24 11:39 Go PATCH to fix libgo breakage (PR tree-optimization/67284) Marek Polacek
2015-08-24 15:22 ` Ian Lance Taylor
2015-08-24 16:07   ` Marek Polacek
2015-08-24 21:42     ` Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).