4.3.0-0.4
This commit is contained in:
parent
9389c66798
commit
26315c4d94
@ -1,2 +1,2 @@
|
|||||||
gcc-4.3.0-20071212.tar.bz2
|
gcc-4.3.0-20071220.tar.bz2
|
||||||
fastjar-0.95.tar.gz
|
fastjar-0.95.tar.gz
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
--- gcc/ada/Make-lang.in.jj 2007-12-07 14:47:58.000000000 +0100
|
|
||||||
+++ gcc/ada/Make-lang.in 2007-12-14 13:20:46.000000000 +0100
|
|
||||||
@@ -286,11 +286,11 @@ TARGET_ADA_SRCS =
|
|
||||||
# Since the RTL should be built with the latest compiler, remove the
|
|
||||||
# stamp target in the parent directory whenever gnat1 is rebuilt
|
|
||||||
gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) $(LIBDEPS)
|
|
||||||
- $(GCC_LINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(LIBS) $(SYSLIBS)
|
|
||||||
+ $(GCC_LINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(ALL_CFLAGS) $(LIBS) $(SYSLIBS)
|
|
||||||
$(RM) stamp-gnatlib2 stamp-tools
|
|
||||||
|
|
||||||
gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS)
|
|
||||||
- $(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) $(LIBS) $(SYSLIBS)
|
|
||||||
+ $(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) $(ALL_CFLAGS) $(LIBS) $(SYSLIBS)
|
|
||||||
|
|
||||||
# use cross-gcc
|
|
||||||
gnat-cross: force
|
|
@ -1,30 +0,0 @@
|
|||||||
--- libjava/classpath/configure.ac (revision 130691)
|
|
||||||
+++ libjava/classpath/configure.ac (working copy)
|
|
||||||
@@ -294,14 +294,14 @@ CLASSPATH_TOOLEXECLIBDIR
|
|
||||||
dnl -----------------------------------------------------------
|
|
||||||
dnl Sets the native libraries installation dir
|
|
||||||
dnl -----------------------------------------------------------
|
|
||||||
-dnl GCJ LOCAL: default to ${toolexeclibdir}/gcj-${gcc_version}-${libgcj_soversion}
|
|
||||||
+dnl GCJ LOCAL: default to ${toolexeclibdir}/gcj-${gcc_version}
|
|
||||||
AC_ARG_WITH([native-libdir],
|
|
||||||
[AS_HELP_STRING(--with-native-libdir,sets the installation directory for native libraries [default='${libdir}/${PACKAGE}'])],
|
|
||||||
[
|
|
||||||
nativeexeclibdir=${withval}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
- nativeexeclibdir='${toolexeclibdir}/gcj-'`cat ${srcdir}/../../gcc/BASE-VER`-`awk -F: '/^[[^#]].*:/ { print $1 }' ${srcdir}/../libtool-version`
|
|
||||||
+ nativeexeclibdir='${toolexeclibdir}/gcj-'`cat ${srcdir}/../../gcc/BASE-VER`
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_SUBST(nativeexeclibdir)
|
|
||||||
--- libjava/classpath/configure (revision 130691)
|
|
||||||
+++ libjava/classpath/configure (working copy)
|
|
||||||
@@ -4771,7 +4771,7 @@ if test "${with_native_libdir+set}" = se
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
- nativeexeclibdir='${toolexeclibdir}/gcj-'`cat ${srcdir}/../../gcc/BASE-VER`-`awk -F: '/^[^#].*:/ { print $1 }' ${srcdir}/../libtool-version`
|
|
||||||
+ nativeexeclibdir='${toolexeclibdir}/gcj-'`cat ${srcdir}/../../gcc/BASE-VER`
|
|
||||||
|
|
||||||
fi;
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
--- libjava/testsuite/Makefile.am 2007-02-07 13:07:16.000000000 +0100
|
|
||||||
+++ libjava/testsuite/Makefile.am 2007-12-08 10:58:02.000000000 +0100
|
|
||||||
@@ -43,7 +43,7 @@ if JAVA_MAINTAINER_MODE
|
|
||||||
testdep="libjava.loader/MyLoader.java";; \
|
|
||||||
libjava.jni/register2.java) \
|
|
||||||
;; \
|
|
||||||
- libjava.jni/*.java) \
|
|
||||||
+ libjava.jni/*.java|libjava.jvmti/interp/*.java) \
|
|
||||||
genheader=-jni;; \
|
|
||||||
libjava.jvmti/*.java|libjava.cni/*.java) \
|
|
||||||
genheader=-cni;; \
|
|
||||||
--- libjava/testsuite/Makefile.in 2007-09-04 23:09:37.000000000 +0200
|
|
||||||
+++ libjava/testsuite/Makefile.in 2007-12-08 10:58:25.000000000 +0100
|
|
||||||
@@ -558,7 +558,7 @@ compile-tests:
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ testdep="libjava.loader/MyLoader.java";; \
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ libjava.jni/register2.java) \
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ ;; \
|
|
||||||
-@JAVA_MAINTAINER_MODE_TRUE@ libjava.jni/*.java) \
|
|
||||||
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.jni/*.java|libjava.jvmti/interp/*.java) \
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ genheader=-jni;; \
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ libjava.jvmti/*.java|libjava.cni/*.java) \
|
|
||||||
@JAVA_MAINTAINER_MODE_TRUE@ genheader=-cni;; \
|
|
159
gcc43-pr29484.patch
Normal file
159
gcc43-pr29484.patch
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
2007-12-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/29484
|
||||||
|
* tree-inline.c (inline_forbidden_p_2): New function.
|
||||||
|
(inline_forbidden_p): Disallow inlining if some static var
|
||||||
|
has an address of a local LABEL_DECL in its initializer.
|
||||||
|
|
||||||
|
* gcc.c-torture/execute/20071220-1.c: New test.
|
||||||
|
* gcc.c-torture/execute/20071220-2.c: New test.
|
||||||
|
|
||||||
|
--- gcc/tree-inline.c.jj 2007-12-04 16:39:22.000000000 +0100
|
||||||
|
+++ gcc/tree-inline.c 2007-12-20 13:46:18.000000000 +0100
|
||||||
|
@@ -1951,6 +1951,27 @@ inline_forbidden_p_1 (tree *nodep, int *
|
||||||
|
return NULL_TREE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static tree
|
||||||
|
+inline_forbidden_p_2 (tree *nodep, int *walk_subtrees,
|
||||||
|
+ void *fnp)
|
||||||
|
+{
|
||||||
|
+ tree node = *nodep;
|
||||||
|
+ tree fn = (tree) fnp;
|
||||||
|
+
|
||||||
|
+ if (TREE_CODE (node) == LABEL_DECL && DECL_CONTEXT (node) == fn)
|
||||||
|
+ {
|
||||||
|
+ inline_forbidden_reason
|
||||||
|
+ = G_("function %q+F can never be inlined "
|
||||||
|
+ "because it saves address of local label in a static variable");
|
||||||
|
+ return node;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (TYPE_P (node))
|
||||||
|
+ *walk_subtrees = 0;
|
||||||
|
+
|
||||||
|
+ return NULL_TREE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Return subexpression representing possible alloca call, if any. */
|
||||||
|
static tree
|
||||||
|
inline_forbidden_p (tree fndecl)
|
||||||
|
@@ -1959,16 +1980,31 @@ inline_forbidden_p (tree fndecl)
|
||||||
|
block_stmt_iterator bsi;
|
||||||
|
basic_block bb;
|
||||||
|
tree ret = NULL_TREE;
|
||||||
|
+ struct function *fun = DECL_STRUCT_FUNCTION (fndecl);
|
||||||
|
+ tree step;
|
||||||
|
|
||||||
|
- FOR_EACH_BB_FN (bb, DECL_STRUCT_FUNCTION (fndecl))
|
||||||
|
+ FOR_EACH_BB_FN (bb, fun)
|
||||||
|
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
|
||||||
|
{
|
||||||
|
ret = walk_tree_without_duplicates (bsi_stmt_ptr (bsi),
|
||||||
|
- inline_forbidden_p_1, fndecl);
|
||||||
|
+ inline_forbidden_p_1, fndecl);
|
||||||
|
if (ret)
|
||||||
|
goto egress;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ for (step = fun->unexpanded_var_list; step; step = TREE_CHAIN (step))
|
||||||
|
+ {
|
||||||
|
+ tree decl = TREE_VALUE (step);
|
||||||
|
+ if (TREE_CODE (decl) == VAR_DECL
|
||||||
|
+ && TREE_STATIC (decl)
|
||||||
|
+ && !DECL_EXTERNAL (decl)
|
||||||
|
+ && DECL_INITIAL (decl))
|
||||||
|
+ ret = walk_tree_without_duplicates (&DECL_INITIAL (decl),
|
||||||
|
+ inline_forbidden_p_2, fndecl);
|
||||||
|
+ if (ret)
|
||||||
|
+ goto egress;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
egress:
|
||||||
|
input_location = saved_loc;
|
||||||
|
return ret;
|
||||||
|
--- gcc/testsuite/gcc.c-torture/execute/20071220-1.c.jj 2007-12-20 14:29:04.000000000 +0100
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/execute/20071220-1.c 2007-12-20 14:28:12.000000000 +0100
|
||||||
|
@@ -0,0 +1,40 @@
|
||||||
|
+/* PR tree-optimization/29484 */
|
||||||
|
+
|
||||||
|
+extern void abort (void);
|
||||||
|
+
|
||||||
|
+void *__attribute__((noinline))
|
||||||
|
+baz (void **lab)
|
||||||
|
+{
|
||||||
|
+ asm volatile ("" : "+r" (lab));
|
||||||
|
+ return *lab;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline
|
||||||
|
+int bar (void)
|
||||||
|
+{
|
||||||
|
+ static void *b[] = { &&addr };
|
||||||
|
+ void *p = baz (b);
|
||||||
|
+ goto *p;
|
||||||
|
+addr:
|
||||||
|
+ return 17;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int __attribute__((noinline))
|
||||||
|
+f1 (void)
|
||||||
|
+{
|
||||||
|
+ return bar ();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int __attribute__((noinline))
|
||||||
|
+f2 (void)
|
||||||
|
+{
|
||||||
|
+ return bar ();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main (void)
|
||||||
|
+{
|
||||||
|
+ if (f1 () != 17 || f1 () != 17 || f2 () != 17 || f2 () != 17)
|
||||||
|
+ abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--- gcc/testsuite/gcc.c-torture/execute/20071220-2.c.jj 2007-12-20 14:29:13.000000000 +0100
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/execute/20071220-2.c 2007-12-20 14:28:30.000000000 +0100
|
||||||
|
@@ -0,0 +1,39 @@
|
||||||
|
+/* PR tree-optimization/29484 */
|
||||||
|
+
|
||||||
|
+extern void abort (void);
|
||||||
|
+
|
||||||
|
+void *__attribute__((noinline))
|
||||||
|
+baz (void **lab)
|
||||||
|
+{
|
||||||
|
+ asm volatile ("" : "+r" (lab));
|
||||||
|
+ return *lab;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline
|
||||||
|
+int bar (void)
|
||||||
|
+{
|
||||||
|
+ static void *b[] = { &&addr };
|
||||||
|
+ baz (b);
|
||||||
|
+addr:
|
||||||
|
+ return 17;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int __attribute__((noinline))
|
||||||
|
+f1 (void)
|
||||||
|
+{
|
||||||
|
+ return bar ();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int __attribute__((noinline))
|
||||||
|
+f2 (void)
|
||||||
|
+{
|
||||||
|
+ return bar ();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main (void)
|
||||||
|
+{
|
||||||
|
+ if (f1 () != 17 || f1 () != 17 || f2 () != 17 || f2 () != 17)
|
||||||
|
+ abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
@ -1,64 +0,0 @@
|
|||||||
2007-12-14 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR target/29978
|
|
||||||
* config/i386/i386.c (ix86_expand_branch): Optimize LE/LEU/GT/GTU
|
|
||||||
DImode comparisons against constant with all 1's in the lower word.
|
|
||||||
|
|
||||||
* gcc.target/i386/pr29978.c: New test.
|
|
||||||
|
|
||||||
--- gcc/config/i386/i386.c.jj 2007-12-14 00:26:23.000000000 +0100
|
|
||||||
+++ gcc/config/i386/i386.c 2007-12-14 14:14:51.000000000 +0100
|
|
||||||
@@ -12093,16 +12093,28 @@ ix86_expand_branch (enum rtx_code code,
|
|
||||||
|
|
||||||
/* Otherwise, if we are doing less-than or greater-or-equal-than,
|
|
||||||
op1 is a constant and the low word is zero, then we can just
|
|
||||||
- examine the high word. */
|
|
||||||
+ examine the high word. Similarly for low word -1 and
|
|
||||||
+ less-or-equal-than or greater-than. */
|
|
||||||
|
|
||||||
- if (CONST_INT_P (hi[1]) && lo[1] == const0_rtx)
|
|
||||||
+ if (CONST_INT_P (hi[1]))
|
|
||||||
switch (code)
|
|
||||||
{
|
|
||||||
case LT: case LTU: case GE: case GEU:
|
|
||||||
- ix86_compare_op0 = hi[0];
|
|
||||||
- ix86_compare_op1 = hi[1];
|
|
||||||
- ix86_expand_branch (code, label);
|
|
||||||
- return;
|
|
||||||
+ if (lo[1] == const0_rtx)
|
|
||||||
+ {
|
|
||||||
+ ix86_compare_op0 = hi[0];
|
|
||||||
+ ix86_compare_op1 = hi[1];
|
|
||||||
+ ix86_expand_branch (code, label);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ case LE: case LEU: case GT: case GTU:
|
|
||||||
+ if (lo[1] == constm1_rtx)
|
|
||||||
+ {
|
|
||||||
+ ix86_compare_op0 = hi[0];
|
|
||||||
+ ix86_compare_op1 = hi[1];
|
|
||||||
+ ix86_expand_branch (code, label);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--- gcc/testsuite/gcc.target/i386/pr29978.c.jj 2007-12-14 14:26:17.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.target/i386/pr29978.c 2007-12-14 14:26:04.000000000 +0100
|
|
||||||
@@ -0,0 +1,16 @@
|
|
||||||
+/* PR target/29978 */
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-Os" } */
|
|
||||||
+
|
|
||||||
+void g ();
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+f (long long v)
|
|
||||||
+{
|
|
||||||
+ if (v > 0xfffffffffLL)
|
|
||||||
+ g ();
|
|
||||||
+ g ();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Verify there are no redundant jumps jl .L2; jle .L2 */
|
|
||||||
+/* { dg-final { scan-assembler-not "jl\[^e\]*\\.L" { target ilp32 } } } */
|
|
@ -1,25 +0,0 @@
|
|||||||
2007-12-11 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR rtl-optimization/32636
|
|
||||||
* df-scan.c (df_get_entry_block_def_set): Set struct_value_rtx
|
|
||||||
regno in entry_block_defs even if HAVE_prologue && epilogue_completed.
|
|
||||||
|
|
||||||
--- gcc/df-scan.c.jj 2007-10-26 13:45:44.000000000 +0200
|
|
||||||
+++ gcc/df-scan.c 2007-12-11 22:24:21.000000000 +0100
|
|
||||||
@@ -3530,12 +3530,12 @@ df_get_entry_block_def_set (bitmap entry
|
|
||||||
bitmap_set_bit (entry_block_defs, STATIC_CHAIN_REGNUM);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
-
|
|
||||||
- r = targetm.calls.struct_value_rtx (current_function_decl, true);
|
|
||||||
- if (r && REG_P (r))
|
|
||||||
- bitmap_set_bit (entry_block_defs, REGNO (r));
|
|
||||||
}
|
|
||||||
|
|
||||||
+ r = targetm.calls.struct_value_rtx (current_function_decl, true);
|
|
||||||
+ if (r && REG_P (r))
|
|
||||||
+ bitmap_set_bit (entry_block_defs, REGNO (r));
|
|
||||||
+
|
|
||||||
if ((!reload_completed) || frame_pointer_needed)
|
|
||||||
{
|
|
||||||
/* Any reference to any pseudo before reload is a potential
|
|
@ -1,80 +0,0 @@
|
|||||||
2007-12-13 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR bootstrap/34003
|
|
||||||
* c-decl.c (merge_decls): Copy RTL from olddecl to newdecl.
|
|
||||||
* config/pa/pa.c (pa_encode_section_info): If !first, preserve
|
|
||||||
SYMBOL_FLAG_REFERENCED flag.
|
|
||||||
|
|
||||||
* gcc.dg/pr34003-1.c: New test.
|
|
||||||
* gcc.dg/pr34003-2.c: New.
|
|
||||||
|
|
||||||
--- gcc/c-decl.c.jj 2007-11-26 22:14:08.000000000 +0100
|
|
||||||
+++ gcc/c-decl.c 2007-12-13 20:11:33.000000000 +0100
|
|
||||||
@@ -1670,6 +1670,9 @@ merge_decls (tree newdecl, tree olddecl,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* Keep the old rtl since we can safely use it. */
|
|
||||||
+ if (HAS_RTL_P (olddecl))
|
|
||||||
+ COPY_DECL_RTL (olddecl, newdecl);
|
|
||||||
|
|
||||||
/* Merge the type qualifiers. */
|
|
||||||
if (TREE_READONLY (newdecl))
|
|
||||||
--- gcc/config/pa/pa.c.jj 2007-12-13 18:56:21.000000000 +0100
|
|
||||||
+++ gcc/config/pa/pa.c 2007-12-13 20:32:04.000000000 +0100
|
|
||||||
@@ -7834,6 +7834,12 @@ hppa_encode_label (rtx sym)
|
|
||||||
static void
|
|
||||||
pa_encode_section_info (tree decl, rtx rtl, int first)
|
|
||||||
{
|
|
||||||
+ int old_referenced = 0;
|
|
||||||
+
|
|
||||||
+ if (!first && MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF)
|
|
||||||
+ old_referenced
|
|
||||||
+ = SYMBOL_REF_FLAGS (XEXP (rtl, 0)) & SYMBOL_FLAG_REFERENCED;
|
|
||||||
+
|
|
||||||
default_encode_section_info (decl, rtl, first);
|
|
||||||
|
|
||||||
if (first && TEXT_SPACE_P (decl))
|
|
||||||
@@ -7842,6 +7848,8 @@ pa_encode_section_info (tree decl, rtx r
|
|
||||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
|
||||||
hppa_encode_label (XEXP (rtl, 0));
|
|
||||||
}
|
|
||||||
+ else if (old_referenced)
|
|
||||||
+ SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= old_referenced;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is sort of inverse to pa_encode_section_info. */
|
|
||||||
--- gcc/testsuite/gcc.dg/pr34003-1.c.jj 2007-12-13 21:07:51.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/pr34003-1.c 2007-12-13 21:07:15.000000000 +0100
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+/* PR bootstrap/34003 */
|
|
||||||
+/* { dg-do link } */
|
|
||||||
+/* { dg-options "-O0" } */
|
|
||||||
+/* { dg-additional-sources "pr34003-2.c" } */
|
|
||||||
+
|
|
||||||
+extern void foo (void);
|
|
||||||
+int bar (void) { foo (); return 1; }
|
|
||||||
+extern void foo (void);
|
|
||||||
--- gcc/testsuite/gcc.dg/pr34003-2.c.jj 2007-12-13 21:07:59.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/pr34003-2.c 2007-12-13 21:09:35.000000000 +0100
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+/* PR bootstrap/34003 */
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O0" } */
|
|
||||||
+
|
|
||||||
+extern void abort (void);
|
|
||||||
+
|
|
||||||
+int seen = 0;
|
|
||||||
+
|
|
||||||
+void foo (void)
|
|
||||||
+{
|
|
||||||
+ ++seen;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int main (void)
|
|
||||||
+{
|
|
||||||
+ extern int bar (void);
|
|
||||||
+ if (bar () != 1 || seen != 1)
|
|
||||||
+ abort ();
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
92
gcc43-pr34281.patch
Normal file
92
gcc43-pr34281.patch
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
2007-12-13 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR target/34281
|
||||||
|
* config/arm/arm.c (arm_setup_incoming_varargs): If last named
|
||||||
|
argument needs double word alignment and cum->nregs is odd, account
|
||||||
|
for the inserted padding.
|
||||||
|
|
||||||
|
* gcc.c-torture/execute/20071213-1.c: New test.
|
||||||
|
|
||||||
|
--- gcc/config/arm/arm.c.jj 2007-12-11 00:23:29.000000000 +0100
|
||||||
|
+++ gcc/config/arm/arm.c 2007-12-13 15:26:01.000000000 +0100
|
||||||
|
@@ -17765,14 +17765,20 @@ arm_output_load_gr (rtx *operands)
|
||||||
|
|
||||||
|
static void
|
||||||
|
arm_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
|
||||||
|
- enum machine_mode mode ATTRIBUTE_UNUSED,
|
||||||
|
- tree type ATTRIBUTE_UNUSED,
|
||||||
|
+ enum machine_mode mode,
|
||||||
|
+ tree type,
|
||||||
|
int *pretend_size,
|
||||||
|
int second_time ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
+ int nregs = cum->nregs;
|
||||||
|
+ if (nregs & 1
|
||||||
|
+ && ARM_DOUBLEWORD_ALIGN
|
||||||
|
+ && arm_needs_doubleword_align (mode, type))
|
||||||
|
+ nregs++;
|
||||||
|
+
|
||||||
|
cfun->machine->uses_anonymous_args = 1;
|
||||||
|
- if (cum->nregs < NUM_ARG_REGS)
|
||||||
|
- *pretend_size = (NUM_ARG_REGS - cum->nregs) * UNITS_PER_WORD;
|
||||||
|
+ if (nregs < NUM_ARG_REGS)
|
||||||
|
+ *pretend_size = (NUM_ARG_REGS - nregs) * UNITS_PER_WORD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return nonzero if the CONSUMER instruction (a store) does not need
|
||||||
|
--- gcc/testsuite/gcc.c-torture/execute/20071213-1.c.jj 2007-12-13 16:47:49.000000000 +0100
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/execute/20071213-1.c 2007-12-13 16:47:12.000000000 +0100
|
||||||
|
@@ -0,0 +1,53 @@
|
||||||
|
+/* PR target/34281 */
|
||||||
|
+
|
||||||
|
+#include <stdarg.h>
|
||||||
|
+
|
||||||
|
+extern void abort (void);
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+h (int x, va_list ap)
|
||||||
|
+{
|
||||||
|
+ switch (x)
|
||||||
|
+ {
|
||||||
|
+ case 1:
|
||||||
|
+ if (va_arg (ap, int) != 3 || va_arg (ap, int) != 4)
|
||||||
|
+ abort ();
|
||||||
|
+ return;
|
||||||
|
+ case 5:
|
||||||
|
+ if (va_arg (ap, int) != 9 || va_arg (ap, int) != 10)
|
||||||
|
+ abort ();
|
||||||
|
+ return;
|
||||||
|
+ default:
|
||||||
|
+ abort ();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+f1 (int i, long long int j, ...)
|
||||||
|
+{
|
||||||
|
+ va_list ap;
|
||||||
|
+ va_start (ap, j);
|
||||||
|
+ h (i, ap);
|
||||||
|
+ if (i != 1 || j != 2)
|
||||||
|
+ abort ();
|
||||||
|
+ va_end (ap);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+f2 (int i, int j, int k, long long int l, ...)
|
||||||
|
+{
|
||||||
|
+ va_list ap;
|
||||||
|
+ va_start (ap, l);
|
||||||
|
+ h (i, ap);
|
||||||
|
+ if (i != 5 || j != 6 || k != 7 || l != 8)
|
||||||
|
+ abort ();
|
||||||
|
+ va_end (ap);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ f1 (1, 2, 3, 4);
|
||||||
|
+ f2 (5, 6, 7, 8, 9, 10);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
@ -1,198 +0,0 @@
|
|||||||
2007-12-12 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR libfortran/34427
|
|
||||||
|
|
||||||
Revert:
|
|
||||||
2007-12-08 Tobias Burnus <burnus@net-b.de>
|
|
||||||
|
|
||||||
PR fortran/34319
|
|
||||||
* io/list_read.c (parse_real, read_real): Support NaN/Infinity.
|
|
||||||
|
|
||||||
* gfortran.dg/nan_3.f90: New.
|
|
||||||
|
|
||||||
--- libgfortran/io/list_read.c (revision 130708)
|
|
||||||
+++ libgfortran/io/list_read.c (revision 130707)
|
|
||||||
@@ -1078,12 +1078,7 @@ parse_real (st_parameter_dt *dtp, void *
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isdigit (c) && c != '.')
|
|
||||||
- {
|
|
||||||
- if (c == 'i' || c == 'I' || c == 'n' || c == 'N')
|
|
||||||
- goto inf_nan;
|
|
||||||
- else
|
|
||||||
- goto bad;
|
|
||||||
- }
|
|
||||||
+ goto bad;
|
|
||||||
|
|
||||||
push_char (dtp, c);
|
|
||||||
|
|
||||||
@@ -1141,13 +1136,7 @@ parse_real (st_parameter_dt *dtp, void *
|
|
||||||
|
|
||||||
exp2:
|
|
||||||
if (!isdigit (c))
|
|
||||||
- {
|
|
||||||
- if (c == 'i' || c == 'I' || c == 'n' || c == 'N')
|
|
||||||
- goto inf_nan;
|
|
||||||
- else
|
|
||||||
- goto bad;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
+ goto bad;
|
|
||||||
push_char (dtp, c);
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
@@ -1177,41 +1166,6 @@ parse_real (st_parameter_dt *dtp, void *
|
|
||||||
|
|
||||||
return m;
|
|
||||||
|
|
||||||
- inf_nan:
|
|
||||||
- /* Match INF and Infinity. */
|
|
||||||
- if ((c == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && ((c = next_char (dtp)) == 'f' || c == 'F'))
|
|
||||||
- {
|
|
||||||
- c = next_char (dtp);
|
|
||||||
- if ((c != 'i' && c != 'I')
|
|
||||||
- || ((c == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && ((c = next_char (dtp)) == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 't' || c == 'T')
|
|
||||||
- && ((c = next_char (dtp)) == 'y' || c == 'Y')
|
|
||||||
- && (c = next_char (dtp))))
|
|
||||||
- {
|
|
||||||
- if (is_separator (c))
|
|
||||||
- unget_char (dtp, c);
|
|
||||||
- push_char (dtp, 'i');
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- push_char (dtp, 'f');
|
|
||||||
- goto done;
|
|
||||||
- }
|
|
||||||
- } /* Match NaN. */
|
|
||||||
- else if (((c = next_char (dtp)) == 'a' || c == 'A')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && (c = next_char (dtp)))
|
|
||||||
- {
|
|
||||||
- if (is_separator (c))
|
|
||||||
- unget_char (dtp, c);
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- push_char (dtp, 'a');
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- goto done;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
bad:
|
|
||||||
|
|
||||||
if (nml_bad_return (dtp, c))
|
|
||||||
@@ -1339,12 +1293,6 @@ read_real (st_parameter_dt *dtp, int len
|
|
||||||
eat_separator (dtp);
|
|
||||||
return;
|
|
||||||
|
|
||||||
- case 'i':
|
|
||||||
- case 'I':
|
|
||||||
- case 'n':
|
|
||||||
- case 'N':
|
|
||||||
- goto inf_nan;
|
|
||||||
-
|
|
||||||
default:
|
|
||||||
goto bad_real;
|
|
||||||
}
|
|
||||||
@@ -1419,12 +1367,7 @@ read_real (st_parameter_dt *dtp, int len
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isdigit (c) && c != '.')
|
|
||||||
- {
|
|
||||||
- if (c == 'i' || c == 'I' || c == 'n' || c == 'N')
|
|
||||||
- goto inf_nan;
|
|
||||||
- else
|
|
||||||
- goto bad_real;
|
|
||||||
- }
|
|
||||||
+ goto bad_real;
|
|
||||||
|
|
||||||
if (c == '.')
|
|
||||||
{
|
|
||||||
@@ -1521,37 +1464,6 @@ read_real (st_parameter_dt *dtp, int len
|
|
||||||
dtp->u.p.saved_type = BT_REAL;
|
|
||||||
return;
|
|
||||||
|
|
||||||
- inf_nan:
|
|
||||||
- /* Match INF and Infinity. */
|
|
||||||
- if ((c == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && ((c = next_char (dtp)) == 'f' || c == 'F'))
|
|
||||||
- {
|
|
||||||
- c = next_char (dtp);
|
|
||||||
- if (is_separator (c)
|
|
||||||
- || ((c == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && ((c = next_char (dtp)) == 'i' || c == 'I')
|
|
||||||
- && ((c = next_char (dtp)) == 't' || c == 'T')
|
|
||||||
- && ((c = next_char (dtp)) == 'y' || c == 'Y')
|
|
||||||
- && (c = next_char (dtp)) && is_separator (c)))
|
|
||||||
- {
|
|
||||||
- push_char (dtp, 'i');
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- push_char (dtp, 'f');
|
|
||||||
- goto done;
|
|
||||||
- }
|
|
||||||
- } /* Match NaN. */
|
|
||||||
- else if (((c = next_char (dtp)) == 'a' || c == 'A')
|
|
||||||
- && ((c = next_char (dtp)) == 'n' || c == 'N')
|
|
||||||
- && (c = next_char (dtp)) && is_separator (c))
|
|
||||||
- {
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- push_char (dtp, 'a');
|
|
||||||
- push_char (dtp, 'n');
|
|
||||||
- goto done;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
bad_real:
|
|
||||||
|
|
||||||
if (nml_bad_return (dtp, c))
|
|
||||||
--- gcc/testsuite/gfortran.dg/nan_3.f90 (revision 130708)
|
|
||||||
+++ gcc/testsuite/gfortran.dg/nan_3.f90 (revision 130707)
|
|
||||||
@@ -1,45 +0,0 @@
|
|
||||||
-! { dg-do run }
|
|
||||||
-! { dg-options "-fno-range-check" }
|
|
||||||
-! { dg-options "-fno-range-check -mieee" { target sh*-*-* } }
|
|
||||||
-!
|
|
||||||
-! PR fortran/34319
|
|
||||||
-!
|
|
||||||
-! Check support of INF/NaN for I/O.
|
|
||||||
-!
|
|
||||||
-program main
|
|
||||||
- implicit none
|
|
||||||
- real :: r
|
|
||||||
- complex :: z
|
|
||||||
- character(len=30) :: str
|
|
||||||
-
|
|
||||||
- str = "nan"
|
|
||||||
- read(str,*) r
|
|
||||||
- if (.not.isnan(r)) call abort()
|
|
||||||
- str = "(nan,4.0)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if (.not.isnan(real(z)) .or. aimag(z) /= 4.0) call abort()
|
|
||||||
- str = "(7.0,nan)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if (.not.isnan(aimag(z)) .or. real(z) /= 7.0) call abort()
|
|
||||||
-
|
|
||||||
- str = "inFinity"
|
|
||||||
- read(str,*) r
|
|
||||||
- if (r <= huge(r)) call abort()
|
|
||||||
- str = "(+inFinity,4.0)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if ((real(z) <= huge(r)) .or. aimag(z) /= 4.0) call abort()
|
|
||||||
- str = "(7.0,-inFinity)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if ((aimag(z) >= -huge(r)) .or. real(z) /= 7.0) call abort()
|
|
||||||
-
|
|
||||||
- str = "inf"
|
|
||||||
- read(str,*) r
|
|
||||||
- if (r <= huge(r)) call abort()
|
|
||||||
- str = "(+inf,4.0)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if ((real(z) <= huge(r)) .or. aimag(z) /= 4.0) call abort()
|
|
||||||
- str = "(7.0,-inf)"
|
|
||||||
- read(str,*) z
|
|
||||||
- if ((aimag(z) >= -huge(r)) .or. real(z) /= 7.0) call abort()
|
|
||||||
-
|
|
||||||
-end program main
|
|
229
gcc43-pr34448.patch
Normal file
229
gcc43-pr34448.patch
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
2007-12-17 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/34448
|
||||||
|
PR tree-optimization/34465
|
||||||
|
* gimplify.c (gimplify_init_constructor): Add new parameter
|
||||||
|
notify_temp_creation. Use it.
|
||||||
|
(gimplify_modify_expr_rhs): Take volatiles into account when
|
||||||
|
optimizing constructors.
|
||||||
|
Do not optimize constructors if gimplify_init_constructor will dump to
|
||||||
|
memory.
|
||||||
|
* gcc.dg/tree-ssa/pr32901.c: Tests const volatiles.
|
||||||
|
* gcc.c-torture/compile/pr34448.c: New.
|
||||||
|
|
||||||
|
--- gcc/gimplify.c (revision 130934)
|
||||||
|
+++ gcc/gimplify.c (local)
|
||||||
|
@@ -3119,11 +3119,18 @@ gimplify_init_ctor_eval (tree object, VE
|
||||||
|
|
||||||
|
Note that we still need to clear any elements that don't have explicit
|
||||||
|
initializers, so if not all elements are initialized we keep the
|
||||||
|
- original MODIFY_EXPR, we just remove all of the constructor elements. */
|
||||||
|
+ original MODIFY_EXPR, we just remove all of the constructor elements.
|
||||||
|
+
|
||||||
|
+ If NOTIFY_TEMP_CREATION is true, do not gimplify, just return
|
||||||
|
+ GS_ERROR if we would have to create a temporary when gimplifying
|
||||||
|
+ this constructor. Otherwise, return GS_OK.
|
||||||
|
+
|
||||||
|
+ If NOTIFY_TEMP_CREATION is false, just do the gimplification. */
|
||||||
|
|
||||||
|
static enum gimplify_status
|
||||||
|
gimplify_init_constructor (tree *expr_p, tree *pre_p,
|
||||||
|
- tree *post_p, bool want_value)
|
||||||
|
+ tree *post_p, bool want_value,
|
||||||
|
+ bool notify_temp_creation)
|
||||||
|
{
|
||||||
|
tree object;
|
||||||
|
tree ctor = GENERIC_TREE_OPERAND (*expr_p, 1);
|
||||||
|
@@ -3134,10 +3141,13 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
if (TREE_CODE (ctor) != CONSTRUCTOR)
|
||||||
|
return GS_UNHANDLED;
|
||||||
|
|
||||||
|
- ret = gimplify_expr (&GENERIC_TREE_OPERAND (*expr_p, 0), pre_p, post_p,
|
||||||
|
- is_gimple_lvalue, fb_lvalue);
|
||||||
|
- if (ret == GS_ERROR)
|
||||||
|
- return ret;
|
||||||
|
+ if (!notify_temp_creation)
|
||||||
|
+ {
|
||||||
|
+ ret = gimplify_expr (&GENERIC_TREE_OPERAND (*expr_p, 0), pre_p, post_p,
|
||||||
|
+ is_gimple_lvalue, fb_lvalue);
|
||||||
|
+ if (ret == GS_ERROR)
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
object = GENERIC_TREE_OPERAND (*expr_p, 0);
|
||||||
|
|
||||||
|
elts = CONSTRUCTOR_ELTS (ctor);
|
||||||
|
@@ -3159,7 +3169,11 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
individual elements. The exception is that a CONSTRUCTOR node
|
||||||
|
with no elements indicates zero-initialization of the whole. */
|
||||||
|
if (VEC_empty (constructor_elt, elts))
|
||||||
|
- break;
|
||||||
|
+ {
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_OK;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Fetch information about the constructor to direct later processing.
|
||||||
|
We might want to make static versions of it in various cases, and
|
||||||
|
@@ -3175,6 +3189,8 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
&& TREE_READONLY (object)
|
||||||
|
&& TREE_CODE (object) == VAR_DECL)
|
||||||
|
{
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_ERROR;
|
||||||
|
DECL_INITIAL (object) = ctor;
|
||||||
|
TREE_STATIC (object) = 1;
|
||||||
|
if (!DECL_NAME (object))
|
||||||
|
@@ -3251,7 +3267,12 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
|
||||||
|
if (size > 0 && !can_move_by_pieces (size, align))
|
||||||
|
{
|
||||||
|
- tree new = create_tmp_var_raw (type, "C");
|
||||||
|
+ tree new;
|
||||||
|
+
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_ERROR;
|
||||||
|
+
|
||||||
|
+ new = create_tmp_var_raw (type, "C");
|
||||||
|
|
||||||
|
gimple_add_tmp_var (new);
|
||||||
|
TREE_STATIC (new) = 1;
|
||||||
|
@@ -3273,6 +3294,9 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_OK;
|
||||||
|
+
|
||||||
|
/* If there are nonzero elements, pre-evaluate to capture elements
|
||||||
|
overlapping with the lhs into temporaries. We must do this before
|
||||||
|
clearing to fetch the values before they are zeroed-out. */
|
||||||
|
@@ -3312,6 +3336,9 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
{
|
||||||
|
tree r, i;
|
||||||
|
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_OK;
|
||||||
|
+
|
||||||
|
/* Extract the real and imaginary parts out of the ctor. */
|
||||||
|
gcc_assert (VEC_length (constructor_elt, elts) == 2);
|
||||||
|
r = VEC_index (constructor_elt, elts, 0)->value;
|
||||||
|
@@ -3348,6 +3375,9 @@ gimplify_init_constructor (tree *expr_p,
|
||||||
|
unsigned HOST_WIDE_INT ix;
|
||||||
|
constructor_elt *ce;
|
||||||
|
|
||||||
|
+ if (notify_temp_creation)
|
||||||
|
+ return GS_OK;
|
||||||
|
+
|
||||||
|
/* Go ahead and simplify constant constructors to VECTOR_CST. */
|
||||||
|
if (TREE_CONSTANT (ctor))
|
||||||
|
{
|
||||||
|
@@ -3488,10 +3518,28 @@ gimplify_modify_expr_rhs (tree *expr_p,
|
||||||
|
constructor expression to the RHS of the MODIFY_EXPR. */
|
||||||
|
if (DECL_INITIAL (*from_p)
|
||||||
|
&& TYPE_READONLY (TREE_TYPE (*from_p))
|
||||||
|
+ && !TREE_THIS_VOLATILE (*from_p)
|
||||||
|
&& TREE_CODE (DECL_INITIAL (*from_p)) == CONSTRUCTOR)
|
||||||
|
{
|
||||||
|
- *from_p = DECL_INITIAL (*from_p);
|
||||||
|
- ret = GS_OK;
|
||||||
|
+ tree old_from = *from_p;
|
||||||
|
+
|
||||||
|
+ /* Move the constructor into the RHS. */
|
||||||
|
+ *from_p = DECL_INITIAL (*from_p);
|
||||||
|
+
|
||||||
|
+ /* Let's see if gimplify_init_constructor will need to put
|
||||||
|
+ it in memory. If so, revert the change. */
|
||||||
|
+ ret = gimplify_init_constructor (expr_p, NULL, NULL, false, true);
|
||||||
|
+ if (ret == GS_ERROR)
|
||||||
|
+ {
|
||||||
|
+ *from_p = old_from;
|
||||||
|
+ /* Fall through. */
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ *from_p = unshare_expr (*from_p);
|
||||||
|
+ ret = GS_OK;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
ret = GS_UNHANDLED;
|
||||||
|
break;
|
||||||
|
@@ -3551,7 +3599,8 @@ gimplify_modify_expr_rhs (tree *expr_p,
|
||||||
|
case CONSTRUCTOR:
|
||||||
|
/* If we're initializing from a CONSTRUCTOR, break this into
|
||||||
|
individual MODIFY_EXPRs. */
|
||||||
|
- return gimplify_init_constructor (expr_p, pre_p, post_p, want_value);
|
||||||
|
+ return gimplify_init_constructor (expr_p, pre_p, post_p, want_value,
|
||||||
|
+ false);
|
||||||
|
|
||||||
|
case COND_EXPR:
|
||||||
|
/* If we're assigning to a non-register type, push the assignment
|
||||||
|
--- gcc/testsuite/gcc.c-torture/compile/pr34448.c (revision 130934)
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/compile/pr34448.c (local)
|
||||||
|
@@ -0,0 +1,34 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O" } */
|
||||||
|
+
|
||||||
|
+typedef struct chunk_t chunk_t;
|
||||||
|
+struct chunk_t
|
||||||
|
+{
|
||||||
|
+ unsigned char *ptr;
|
||||||
|
+ long unsigned int len;
|
||||||
|
+};
|
||||||
|
+extern chunk_t asn1_wrap (chunk_t c, ...);
|
||||||
|
+typedef struct linked_list_t linked_list_t;
|
||||||
|
+chunk_t ietfAttr_list_encode (linked_list_t * list);
|
||||||
|
+extern linked_list_t *groups;
|
||||||
|
+static unsigned char ASN1_group_oid_str[] = {
|
||||||
|
+ 0x06
|
||||||
|
+};
|
||||||
|
+static const chunk_t ASN1_group_oid = {
|
||||||
|
+ ASN1_group_oid_str, sizeof (ASN1_group_oid_str)
|
||||||
|
+};
|
||||||
|
+static chunk_t
|
||||||
|
+build_attribute_type (const chunk_t type, chunk_t content)
|
||||||
|
+{
|
||||||
|
+ return type;
|
||||||
|
+}
|
||||||
|
+static chunk_t
|
||||||
|
+build_attributes (void)
|
||||||
|
+{
|
||||||
|
+ return asn1_wrap (build_attribute_type (ASN1_group_oid,
|
||||||
|
+ ietfAttr_list_encode (groups)));
|
||||||
|
+}
|
||||||
|
+void build_attr_cert (void)
|
||||||
|
+{
|
||||||
|
+ asn1_wrap (build_attributes ());
|
||||||
|
+}
|
||||||
|
--- gcc/testsuite/gcc.dg/tree-ssa/pr32901.c (revision 130934)
|
||||||
|
+++ gcc/testsuite/gcc.dg/tree-ssa/pr32901.c (local)
|
||||||
|
@@ -7,7 +7,7 @@ struct foo {
|
||||||
|
unsigned : 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
-extern struct foo thefoo;
|
||||||
|
+extern struct foo thefoo, theotherfoo;
|
||||||
|
|
||||||
|
void setup_foo(void)
|
||||||
|
{
|
||||||
|
@@ -15,10 +15,16 @@ void setup_foo(void)
|
||||||
|
.a1 = 1,
|
||||||
|
.a2 = 5,
|
||||||
|
};
|
||||||
|
+ volatile const struct foo volinit = {
|
||||||
|
+ .a1 = 0,
|
||||||
|
+ .a2 = 6
|
||||||
|
+ };
|
||||||
|
thefoo = init;
|
||||||
|
+ theotherfoo = volinit;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* { dg-final { scan-tree-dump-times "thefoo.0 = \{\}" 1 "gimple"} } */
|
||||||
|
-/* { dg-final { scan-tree-dump-times "thefoo.0.a1 = 1" 1 "gimple"} } */
|
||||||
|
-/* { dg-final { scan-tree-dump-times "thefoo.0.a2 = 5" 1 "gimple"} } */
|
||||||
|
+/* { dg-final { scan-tree-dump-times "thefoo.* = {}" 1 "gimple"} } */
|
||||||
|
+/* { dg-final { scan-tree-dump-times "thefoo.* = 1" 1 "gimple"} } */
|
||||||
|
+/* { dg-final { scan-tree-dump-times "thefoo.* = 5" 1 "gimple"} } */
|
||||||
|
+/* { dg-final { scan-tree-dump-times "theotherfoo = volinit" 1 "gimple"} } */
|
||||||
|
/* { dg-final { cleanup-tree-dump "gimple" } } */
|
34
gcc43-pr34535.patch
Normal file
34
gcc43-pr34535.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
2007-12-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/34535
|
||||||
|
* tree-mudflap.c (mf_make_builtin): Make decl artificial
|
||||||
|
and don't emit debug info for it.
|
||||||
|
|
||||||
|
PR debug/34535
|
||||||
|
* cp-lang.c (cp_classify_record): Check TYPE_LANG_SPECIFIC
|
||||||
|
is non-NULL before testing CLASSTYPE_DECLARED_CLASS.
|
||||||
|
|
||||||
|
--- gcc/cp/cp-lang.c.jj 2007-12-16 12:36:16.000000000 +0100
|
||||||
|
+++ gcc/cp/cp-lang.c 2007-12-20 10:58:19.000000000 +0100
|
||||||
|
@@ -159,7 +159,7 @@ cxx_dwarf_name (tree t, int verbosity)
|
||||||
|
static enum classify_record
|
||||||
|
cp_classify_record (tree type)
|
||||||
|
{
|
||||||
|
- if (CLASSTYPE_DECLARED_CLASS (type))
|
||||||
|
+ if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_DECLARED_CLASS (type))
|
||||||
|
return RECORD_IS_CLASS;
|
||||||
|
|
||||||
|
return RECORD_IS_STRUCT;
|
||||||
|
--- gcc/tree-mudflap.c.jj 2007-08-13 15:11:18.000000000 +0200
|
||||||
|
+++ gcc/tree-mudflap.c 2007-12-20 11:15:01.000000000 +0100
|
||||||
|
@@ -301,6 +301,10 @@ mf_make_builtin (enum tree_code category
|
||||||
|
TREE_PUBLIC (decl) = 1;
|
||||||
|
DECL_EXTERNAL (decl) = 1;
|
||||||
|
lang_hooks.decls.pushdecl (decl);
|
||||||
|
+ /* The decl was declared by the compiler. */
|
||||||
|
+ DECL_ARTIFICIAL (decl) = 1;
|
||||||
|
+ /* And we don't want debug info for it. */
|
||||||
|
+ DECL_IGNORED_P (decl) = 1;
|
||||||
|
return decl;
|
||||||
|
}
|
||||||
|
|
@ -328,7 +328,7 @@ Requires: libart_lgpl >= 2.1.0
|
|||||||
%if %{build_java}
|
%if %{build_java}
|
||||||
BuildRequires: gtk2-devel >= 2.4.0
|
BuildRequires: gtk2-devel >= 2.4.0
|
||||||
BuildRequires: glib2-devel >= 2.4.0
|
BuildRequires: glib2-devel >= 2.4.0
|
||||||
BuildRequires: firefox-devel
|
BuildRequires: xulrunner-devel
|
||||||
BuildRequires: libart_lgpl-devel >= 2.1.0
|
BuildRequires: libart_lgpl-devel >= 2.1.0
|
||||||
BuildRequires: alsa-lib-devel
|
BuildRequires: alsa-lib-devel
|
||||||
BuildRequires: libXtst-devel
|
BuildRequires: libXtst-devel
|
||||||
|
Loading…
Reference in New Issue
Block a user