diff --git a/.cvsignore b/.cvsignore index dc88aa5..28f3887 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ -gcc-4.3.0-20080130.tar.bz2 +gcc-4.3.0-20080212.tar.bz2 fastjar-0.95.tar.gz diff --git a/gcc43-pr35130.patch b/gcc43-pr35130.patch new file mode 100644 index 0000000..3efe0a6 --- /dev/null +++ b/gcc43-pr35130.patch @@ -0,0 +1,178 @@ +2008-02-11 Jakub Jelinek + + PR middle-end/35130 + * tree-nested.c (convert_call_expr): Put FRAME.* vars into + OMP_CLAUSE_SHARED rather than OMP_CLAUSE_FIRSTPRIVATE clause. + + * testsuite/libgomp.fortran/pr35130.f90: New test. + * testsuite/libgomp.c/pr35130.c: New test. + +--- gcc/tree-nested.c.jj 2008-02-11 14:48:12.000000000 +0100 ++++ gcc/tree-nested.c 2008-02-11 17:09:23.000000000 +0100 +@@ -1739,7 +1739,8 @@ convert_call_expr (tree *tp, int *walk_s + break; + if (c == NULL) + { +- c = build_omp_clause (OMP_CLAUSE_FIRSTPRIVATE); ++ c = build_omp_clause (i ? OMP_CLAUSE_FIRSTPRIVATE ++ : OMP_CLAUSE_SHARED); + OMP_CLAUSE_DECL (c) = decl; + OMP_CLAUSE_CHAIN (c) = OMP_PARALLEL_CLAUSES (t); + OMP_PARALLEL_CLAUSES (t) = c; +--- libgomp/testsuite/libgomp.fortran/pr35130.f90.jj 2008-02-11 17:15:58.000000000 +0100 ++++ libgomp/testsuite/libgomp.fortran/pr35130.f90 2008-02-11 17:16:07.000000000 +0100 +@@ -0,0 +1,20 @@ ++! PR middle-end/35130 ++ ++program pr35130 ++ implicit none ++ real, dimension(20) :: a ++ integer :: k ++ a(:) = 0.0 ++!$omp parallel do private(k) ++ do k=1,size(a) ++ call inner(k) ++ end do ++!$omp end parallel do ++ if (any (a.ne.42)) call abort ++contains ++ subroutine inner(i) ++ implicit none ++ integer :: i ++ a(i) = 42 ++ end subroutine inner ++end program pr35130 +--- libgomp/testsuite/libgomp.c/pr35130.c.jj 2008-02-11 17:12:18.000000000 +0100 ++++ libgomp/testsuite/libgomp.c/pr35130.c 2008-02-11 17:12:03.000000000 +0100 +@@ -0,0 +1,131 @@ ++/* PR middle-end/35130 */ ++ ++extern void abort (void); ++ ++void ++f1 (void) ++{ ++ int a[4], k; ++ void nested (int x) ++ { ++ a[x] = 42; ++ } ++ ++ for (k = 0; k < 4; k++) ++ a[k] = 0; ++#pragma omp parallel for ++ for (k = 0; k < 4; k++) ++ nested (k); ++ ++ if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42) ++ abort (); ++} ++ ++void ++f2 (void) ++{ ++ int a[4], k; ++ void nested (void) ++ { ++ int l; ++ void nested2 (int x) ++ { ++ a[x] = 42; ++ } ++#pragma omp parallel for ++ for (l = 0; l < 4; l++) ++ nested2 (l); ++ } ++ ++ for (k = 0; k < 4; k++) ++ a[k] = 0; ++ ++ nested (); ++ ++ if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42) ++ abort (); ++} ++ ++void ++f3 (void) ++{ ++ int a[4], b[4], c[4], k; ++ void nested (int x) ++ { ++ a[x] = b[x] = c[x] = 42; ++ } ++ ++ for (k = 0; k < 4; k++) ++ a[k] = b[k] = c[k] = 0; ++ nested (0); ++ ++#pragma omp parallel ++ { ++ #pragma omp single ++ { ++ a[1] = 43; ++ b[1] = 43; ++ } ++ #pragma omp parallel ++ { ++ #pragma omp single ++ { ++ b[2] = 44; ++ c[2] = 44; ++ } ++ } ++ } ++ ++ if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0) ++ abort (); ++ if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0) ++ abort (); ++ if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0) ++ abort (); ++} ++ ++void ++f4 (void) ++{ ++ int a[4], b[4], c[4], k; ++ void nested () ++ { ++ #pragma omp parallel ++ { ++ #pragma omp single ++ { ++ a[1] = 43; ++ b[1] = 43; ++ } ++ #pragma omp parallel ++ { ++ #pragma omp single ++ { ++ b[2] = 44; ++ c[2] = 44; ++ } ++ } ++ } ++ } ++ ++ for (k = 0; k < 4; k++) ++ a[k] = b[k] = c[k] = k == 0 ? 42 : 0; ++ nested (); ++ ++ if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0) ++ abort (); ++ if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0) ++ abort (); ++ if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0) ++ abort (); ++} ++ ++int ++main (void) ++{ ++ f1 (); ++ f2 (); ++ f3 (); ++ f4 (); ++ return 0; ++} diff --git a/gcc43-pr35138.patch b/gcc43-pr35138.patch new file mode 100644 index 0000000..75b74ab --- /dev/null +++ b/gcc43-pr35138.patch @@ -0,0 +1,67 @@ +2008-02-12 Jakub Jelinek + + PR c++/35138 + * parser.c (cp_parser_pseudo_destructor_name): If next token + is CPP_NAME, not followed by template argument list nor + ::~, return before calling cp_parser_type_name. + + * g++.dg/template/member8.C: New test. + +--- gcc/cp/parser.c.jj 2008-02-12 14:49:55.000000000 +0100 ++++ gcc/cp/parser.c 2008-02-12 20:47:09.000000000 +0100 +@@ -5164,6 +5164,27 @@ cp_parser_pseudo_destructor_name (cp_par + additional qualification. */ + else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL)) + { ++ /* If postfix-expression before . or -> token was dependent, ++ this might be actually a normal class access rather than ++ pseudo destructor. As cp_parser_type_name can report ++ errors, first make sure the type name is followed ++ by `::~'. */ ++ cp_token *token = cp_lexer_peek_token (parser->lexer); ++ if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID) ++ { ++ cp_parser_error (parser, "expected class-name"); ++ return; ++ } ++ ++ if (token->type == CPP_NAME ++ && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2) ++ && (cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE ++ || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)) ++ { ++ cp_parser_error (parser, "not a pseudo destructor"); ++ return; ++ } ++ + /* Look for the type-name. */ + *scope = TREE_TYPE (cp_parser_type_name (parser)); + +--- gcc/testsuite/g++.dg/template/member8.C.jj 2008-02-12 18:32:14.000000000 +0100 ++++ gcc/testsuite/g++.dg/template/member8.C 2008-02-12 18:19:23.000000000 +0100 +@@ -0,0 +1,25 @@ ++// PR c++/35138 ++// { dg-do compile } ++ ++namespace N1 { struct A { }; } ++namespace N2 { struct A { }; } ++using namespace N1; ++using namespace N2; ++ ++template int ++foo (T const &t) ++{ ++ return t.A; ++} ++ ++struct B ++{ ++ int A; ++}; ++ ++int ++main () ++{ ++ B b; ++ foo (b); ++} diff --git a/gcc43.spec b/gcc43.spec index 885994b..ce5723f 100644 --- a/gcc43.spec +++ b/gcc43.spec @@ -1,6 +1,6 @@ -%define DATE 20080130 +%define DATE 20080212 %define gcc_version 4.3.0 -%define gcc_release 0.7 +%define gcc_release 0.8 %define _unpackaged_files_terminate_build 0 %define multilib_64_archs sparc64 ppc64 s390x x86_64 %define include_gappletviewer 1 @@ -140,6 +140,8 @@ Patch10: gcc43-rh330771.patch Patch11: gcc43-rh341221.patch Patch12: gcc43-cpp-pragma.patch Patch13: gcc43-java-debug-iface-type.patch +Patch14: gcc43-pr35130.patch +Patch15: gcc43-pr35138.patch # On ARM EABI systems, we do want -gnueabi to be part of the # target triple. @@ -436,6 +438,8 @@ which are required to run programs compiled with the GNAT. %patch11 -p0 -b .rh341221~ %patch12 -p0 -b .cpp-pragma~ %patch13 -p0 -b .java-debug-iface-type~ +%patch14 -p0 -b .pr35130~ +%patch15 -p0 -b .pr35138~ tar xzf %{SOURCE4} @@ -1649,6 +1653,30 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Tue Feb 12 2008 Jakub Jelinek 4.3.0-0.8 +- update to trunk + - PRs bootstrap/33781, bootstrap/34922, bootstrap/35051, bootstrap/35115, + c++/29048, c++/33553, c++/33916, c++/33964, c++/34052, c++/34094, + c++/34314, c++/34776, c++/34862, c++/34891, c++/34935, c++/34936, + c++/35049, c++/35056, c++/35074, c++/35077, c++/35096, c++/35097, + c++/35113, c++/35116, c/29326, c/34993, documentation/30330, + fortran/32315, fortran/32760, fortran/34910, fortran/34945, + fortran/35037, fortran/35093, java/35035, libffi/34612, + libfortran/35001, libfortran/35063, libgcj/30071, libstdc++/16251, + middle-end/33631, middle-end/34627, middle-end/35043, + middle-end/35136, middle-end/35163, middle_end/34150, objc++/34193, + other/29972, other/31405, other/32754, other/35042, other/35070, + other/35107, rtl-opt/33410, rtl-optimization/34773, + rtl-optimization/34995, rtl-optimization/34998, target/23322, + target/34900, target/34982, target/35045, target/35083, + target/35084, testsuite/33946, testsuite/35047, + tree-optimization/33992, tree-optimization/35085, tree-optimization/35171 + - inline asm optimization fix (#432146, PR inline-asm/35160) + - SRA fix (#432090, PR c++/35144) +- fix #pragma omp parallel body calling nested functions which store + into shared parent variables (PR middle-end/35130) +- ./-> after dependent expr parsing fix (PR c++/35138) + * Wed Jan 30 2008 Jakub Jelinek 4.3.0-0.7 - update from trunk - fix ISO C99 6.7.4p3 diagnostics (#427634, PR c/35017) diff --git a/sources b/sources index f581bf1..2e93563 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -fc354c2c162345f32904b33ef34572ed gcc-4.3.0-20080130.tar.bz2 +34237576185d54a8e889c48efa3e0651 gcc-4.3.0-20080212.tar.bz2 92a70f9e56223b653bce0f58f90cf950 fastjar-0.95.tar.gz