This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.23-447-g2df1b98


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  2df1b9804bcf714dfed12def17f8a518403d8d6b (commit)
      from  bd499987c63fae6dd52fc577c8aada54293336bc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2df1b9804bcf714dfed12def17f8a518403d8d6b

commit 2df1b9804bcf714dfed12def17f8a518403d8d6b
Author: Florian Weimer <fweimer@redhat.com>
Date:   Thu Jun 9 12:02:42 2016 +0200

    quick_exit tests: Do not use C++ headers
    
    If C++ headers such as <cstdlib> or <thread> are used, GCC 6
    will include /usr/include/stdlib.h (instead of stdlib/stdlib.h
    in the glibc source directory), and this turns up as a make
    dependency.  An implicit rule will kick in and make will try to
    install stdlib/stdlib.h as /usr/include/stdlib.h because the
    target is out of date.
    
    This commit switches to <stdlib.h> and <pthread.h> instead of
    <cstdlib> and <thread>.

diff --git a/ChangeLog b/ChangeLog
index fd472f9..e5a6209 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2016-06-09  Florian Weimer  <fweimer@redhat.com>
+
+	Prevent GCC 6 <cstdlib> from including /usr/include/stdlib.h.
+	* stdlib/tst-quick_exit.cc: Include <stdlib.h> instead of
+	<cstdlib>.
+	(optimization_barrier): New.
+	(do_test): Use it.  Call quick_exit in the global namespace.
+	* stdlib/tst-thread-quick_exit.cc: Include <stdlib.h>, <pthread.h>
+	instead of <cstdlib>, <thread>.
+	(optimization_barrier): New.
+	(non_main_thread): Adjust declaration.  Call optimization_barrier.
+	Call quick_exit in the global namespace.
+	(do_test): Call optimization_barrier.  Use pthread_create,
+	pthread_join instead of std::thread.
+
 2016-06-09  Andreas Schwab  <schwab@suse.de>
 
 	[BZ #19755]
diff --git a/stdlib/tst-quick_exit.cc b/stdlib/tst-quick_exit.cc
index c4a15a9..6fb99c4 100644
--- a/stdlib/tst-quick_exit.cc
+++ b/stdlib/tst-quick_exit.cc
@@ -15,24 +15,31 @@
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
-#include <cstdlib>
+
+#include <stdlib.h>
 
 struct A
 {
-  ~A() { abort(); }
+  ~A () { abort (); }
 };
 
 thread_local A a;
 
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
 static int
-do_test()
+do_test ()
 {
-  (void)a;
+  optimization_barrier (a);
   /* The C++11 standard in 18.5.12 says:
      "Objects shall not be destroyed as a result of calling
       quick_exit."
      If quick_exit calls the destructors the test aborts.  */
-  std::quick_exit(0);
+  quick_exit (0);
   return 0;
 }
 
diff --git a/stdlib/tst-thread-quick_exit.cc b/stdlib/tst-thread-quick_exit.cc
index 307d2a2..057cc04 100644
--- a/stdlib/tst-thread-quick_exit.cc
+++ b/stdlib/tst-thread-quick_exit.cc
@@ -15,35 +15,51 @@
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
-#include <cstdlib>
-#include <thread>
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
 
 struct A
 {
-  ~A() { abort(); }
+  ~A () { abort (); }
 };
 
 thread_local A a1;
 thread_local A a2;
 
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
 /* Call std::quick_exit from a non-main thread.  */
-void non_main_thread (void)
+void *
+non_main_thread (void *)
 {
-  (void)a1;
+  optimization_barrier (a1);
   /* The C++11 standard in 18.5.12 says:
      "Objects shall not be destroyed as a result of calling
       quick_exit."
      If quick_exit calls the destructors the test aborts.  */
-  std::quick_exit (0);
+  quick_exit (0);
 }
 
 static int
 do_test()
 {
-  (void)a2;
-  std::thread th (non_main_thread);
-  th.join ();
-  return 0;
+  optimization_barrier (a2);
+  pthread_t thr;
+  int ret = pthread_create (&thr, NULL, non_main_thread, NULL);
+  if (ret != 0)
+    {
+      errno = ret;
+      printf ("error: pthread_create: %m\n");
+    }
+  pthread_join (thr, NULL);
+  return 1;
 }
 
 #define TEST_FUNCTION do_test ()

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                       |   15 +++++++++++++++
 stdlib/tst-quick_exit.cc        |   17 ++++++++++++-----
 stdlib/tst-thread-quick_exit.cc |   36 ++++++++++++++++++++++++++----------
 3 files changed, 53 insertions(+), 15 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]