rpms/gcc/devel gcc41-c++-builtin-redecl.patch, NONE, 1.1 gcc41-c++-guard-visibility.patch, NONE, 1.1 gcc41.spec, 1.179, 1.180

Jakub Jelinek (jakub) fedora-extras-commits at redhat.com
Tue Oct 2 22:22:28 UTC 2007


Author: jakub

Update of /cvs/pkgs/rpms/gcc/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13544

Modified Files:
	gcc41.spec 
Added Files:
	gcc41-c++-builtin-redecl.patch 
	gcc41-c++-guard-visibility.patch 
Log Message:
4.1.2-31

gcc41-c++-builtin-redecl.patch:

--- NEW FILE gcc41-c++-builtin-redecl.patch ---
2007-10-02  Jakub Jelinek  <jakub at redhat.com>

	* decl.c (duplicate_decls): When redeclaring a builtin function,
	keep the merged decl builtin whenever types match, even if new
	decl defines a function.

	* gcc.dg/builtins-65.c: New test.
	* g++.dg/ext/builtin10.C: New test.

--- gcc/cp/decl.c.jj	2007-10-01 22:11:09.000000000 +0200
+++ gcc/cp/decl.c	2007-10-02 11:39:46.000000000 +0200
@@ -1988,23 +1988,21 @@ duplicate_decls (tree newdecl, tree oldd
 	  DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
 	  DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
 	}
+      /* If redeclaring a builtin function, it stays built in.  */
+      if (types_match && DECL_BUILT_IN (olddecl))
+	{
+	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
+	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
+	  /* If we're keeping the built-in definition, keep the rtl,
+	     regardless of declaration matches.  */
+	  COPY_DECL_RTL (olddecl, newdecl);
+	}
       if (new_defines_function)
 	/* If defining a function declared with other language
 	   linkage, use the previously declared language linkage.  */
 	SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
       else if (types_match)
 	{
-	  /* If redeclaring a builtin function, and not a definition,
-	     it stays built in.  */
-	  if (DECL_BUILT_IN (olddecl))
-	    {
-	      DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
-	      DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
-	      /* If we're keeping the built-in definition, keep the rtl,
-		 regardless of declaration matches.  */
-	      COPY_DECL_RTL (olddecl, newdecl);
-	    }
-
 	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
 	  /* Don't clear out the arguments if we're redefining a function.  */
 	  if (DECL_ARGUMENTS (olddecl))
--- gcc/testsuite/gcc.dg/builtins-65.c.jj	2007-10-02 11:23:51.000000000 +0200
+++ gcc/testsuite/gcc.dg/builtins-65.c	2007-10-02 11:24:12.000000000 +0200
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef __SIZE_TYPE__ size_t;
+extern void __chk_fail (void);
+extern int snprintf (char *, size_t, const char *, ...);
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
+{
+  if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
+    __chk_fail ();
+  return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
+}
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
+
+char buf[10];
+
+int
+main (void)
+{
+  snprintf (buf, 10, "%d%d\n", 10, 10);
+  return 0;
+}
+
+/* { dg-final { scan-assembler "mysnprintf" } } */
+/* { dg-final { scan-assembler-not "__chk_fail" } } */
--- gcc/testsuite/g++.dg/ext/builtin10.C.jj	2007-10-02 11:19:45.000000000 +0200
+++ gcc/testsuite/g++.dg/ext/builtin10.C	2007-10-02 11:23:26.000000000 +0200
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+typedef __SIZE_TYPE__ size_t;
+extern "C" {
+extern void __chk_fail (void);
+extern int snprintf (char *, size_t, const char *, ...);
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
+{
+  if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
+    __chk_fail ();
+  return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
+}
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
+}
+
+char buf[10];
+
+int
+main (void)
+{
+  snprintf (buf, 10, "%d%d\n", 10, 10);
+  return 0;
+}
+
+// { dg-final { scan-assembler "mysnprintf" } }
+// { dg-final { scan-assembler-not "__chk_fail" } }

gcc41-c++-guard-visibility.patch:

--- NEW FILE gcc41-c++-guard-visibility.patch ---
2007-09-06  Jason Merrill  <jason at redhat.com>

	* decl2.c (get_guard): Copy visibility from the guarded variable.

--- gcc/cp/decl2.c	(revision 128225)
+++ gcc/cp/decl2.c	(revision 128226)
@@ -2215,6 +2215,8 @@ get_guard (tree decl)
       DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
       if (TREE_PUBLIC (decl))
 	DECL_WEAK (guard) = DECL_WEAK (decl);
+      DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
+      DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
 
       DECL_ARTIFICIAL (guard) = 1;
       DECL_IGNORED_P (guard) = 1;
--- gcc/testsuite/g++.dg/ext/visibility/guard1.C	(revision 0)
+++ gcc/testsuite/g++.dg/ext/visibility/guard1.C	(revision 128226)
@@ -0,0 +1,29 @@
+// { dg-options "-fvisibility=hidden" }
+// { dg-require-visibility "" }
+// { dg-final { scan-not-hidden "_ZGVZN5otherclEvE4s_cd" } }
+
+extern "C" int printf (const char *, ...);
+
+#define DLLEXPORT __attribute__ ((visibility("default")))
+
+struct class_data
+{
+  int apple;
+  class_data() { printf("non trivial ctor\n"); }
+};
+
+struct DLLEXPORT other
+{
+  class_data* operator ()()
+  {
+    static class_data s_cd;
+    return &s_cd;
+  }
+};
+
+int main()
+{
+  other aFoo;
+  aFoo();
+  return 0;
+}


Index: gcc41.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gcc/devel/gcc41.spec,v
retrieving revision 1.179
retrieving revision 1.180
diff -u -r1.179 -r1.180
--- gcc41.spec	1 Oct 2007 21:32:51 -0000	1.179
+++ gcc41.spec	2 Oct 2007 22:21:55 -0000	1.180
@@ -1,6 +1,6 @@
 %define DATE 20070925
 %define gcc_version 4.1.2
-%define gcc_release 30
+%define gcc_release 31
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %define include_gappletviewer 1
@@ -147,6 +147,8 @@
 Patch31: gcc41-pr32694.patch
 Patch32: gcc41-virtual-inline-backtrace.patch
 Patch33: gcc41-c++-gnu-inline-redecl.patch
+Patch34: gcc41-c++-builtin-redecl.patch
+Patch35: gcc41-c++-guard-visibility.patch
 
 # On ARM EABI systems, we do want -gnueabi to be part of the
 # target triple.
@@ -463,6 +465,8 @@
 %patch31 -p0 -b .pr32694~
 %patch32 -p0 -b .virtual-inline-backtrace~
 %patch33 -p0 -b .c++-gnu-inline-redecl~
+%patch34 -p0 -b .c++-builtin-redecl~
+%patch35 -p0 -b .c++-guard-visibility~
 
 sed -i -e 's/4\.1\.3/4.1.2/' gcc/BASE-VER gcc/version.c
 sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c
@@ -1617,6 +1621,10 @@
 %doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Wed Oct  3 2007 Jakub Jelinek <jakub at redhat.com> 4.1.2-31
+- fix visibility of C++ guard variables (Jason Merrill)
+- don't drop DECL_BUILT_IN_CLASS when defining a builtin function
+
 * Mon Oct  1 2007 Jakub Jelinek <jakub at redhat.com> 4.1.2-30
 - fix ICE on C++ gnu_inline function followed by prototype of the same
   fn (Alexandre Oliva)




More information about the fedora-extras-commits mailing list