From b4c9475c6beea4d33fae0e802736740266cb7b13 Mon Sep 17 00:00:00 2001 From: hubicka Date: Tue, 12 Sep 2006 09:23:56 +0000 Subject: [PATCH] * Merge from mainline. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/ipa-branch@116884 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 190 +- MAINTAINERS | 17 +- Makefile.def | 13 + Makefile.in | 810 +- Makefile.tpl | 30 +- boehm-gc/ChangeLog | 53 + boehm-gc/configure | 812 +- boehm-gc/configure.ac | 61 +- boehm-gc/darwin_stop_world.c | 221 +- boehm-gc/dyn_load.c | 10 +- boehm-gc/include/gc.h | 30 +- boehm-gc/include/gc_config.h.in | 26 +- boehm-gc/include/gc_ext_config.h.in | 2 +- boehm-gc/include/gc_pthread_redirects.h | 2 - boehm-gc/include/private/pthread_support.h | 1 + boehm-gc/misc.c | 8 +- boehm-gc/os_dep.c | 5 +- boehm-gc/pthread_stop_world.c | 65 +- boehm-gc/pthread_support.c | 138 +- config-ml.in | 6 +- config.guess | 50 +- config.sub | 73 +- config/ChangeLog | 49 +- config/acx.m4 | 15 + config/gettext-sister.m4 | 22 +- config/gxx-include-dir.m4 | 8 +- config/stdint.m4 | 9 +- config/unwind_ipinfo.m4 | 22 + configure | 491 +- configure.in | 127 +- contrib/ChangeLog | 22 + contrib/compare_tests | 14 +- contrib/dg-cmp-results.sh | 201 + contrib/regression/ChangeLog | 4 + contrib/regression/btest-gcc.sh | 4 +- contrib/texi2pod.pl | 6 +- fixincludes/ChangeLog | 23 +- fixincludes/Makefile.in | 4 +- fixincludes/fixincl.x | 60 +- fixincludes/inclhack.def | 11 + fixincludes/tests/base/architecture/ppc/math.h | 88 + fixincludes/tests/base/errno.h | 21 + fixincludes/tests/base/ia64/sys/getppdp.h | 16 + gcc/ChangeLog | 3200 +- gcc/ChangeLog-2004 | 2 +- gcc/ChangeLog.ipa | 4 + gcc/DATESTAMP | 2 +- gcc/Makefile.in | 192 +- gcc/ada/ChangeLog | 40 + gcc/ada/Make-lang.in | 22 +- gcc/ada/decl.c | 6 +- gcc/ada/env.c | 2 +- gcc/ada/gigi.h | 4 +- gcc/ada/gnat-style.texi | 2 +- gcc/ada/gnat_rm.texi | 6 +- gcc/ada/gnat_ugn.texi | 10 +- gcc/ada/init.c | 2 +- gcc/ada/initialize.c | 2 +- gcc/ada/misc.c | 35 +- gcc/ada/mlib-utl.adb | 6 +- gcc/ada/raise-gcc.c | 2 +- gcc/ada/s-taprop-hpux-dce.adb | 3 - gcc/ada/sem_ch13.adb | 2 +- gcc/ada/sysdep.c | 2 +- gcc/ada/targtyps.c | 2 +- gcc/ada/tb-alvxw.c | 2 +- gcc/ada/tracebak.c | 4 +- gcc/ada/trans.c | 4 +- gcc/ada/utils.c | 6 +- gcc/alloc-pool.c | 16 +- gcc/alloc-pool.h | 1 + gcc/attribs.c | 8 + gcc/basic-block.h | 5 + gcc/bitmap.c | 17 + gcc/bitmap.h | 4 + gcc/builtins.c | 437 +- gcc/c-common.c | 322 +- gcc/c-common.h | 5 +- gcc/c-decl.c | 91 +- gcc/c-gimplify.c | 2 +- gcc/c-lex.c | 1 + gcc/c-omp.c | 17 +- gcc/c-opts.c | 5 +- gcc/c-parser.c | 35 +- gcc/c-ppoutput.c | 3 +- gcc/c-pragma.c | 4 + gcc/c-pretty-print.c | 4 +- gcc/c-tree.h | 5 + gcc/c-typeck.c | 100 +- gcc/cfgcleanup.c | 2 +- gcc/cfgexpand.c | 11 +- gcc/cfgloopanal.c | 6 +- gcc/cfgloopmanip.c | 170 +- gcc/cfgrtl.c | 7 + gcc/cgraph.c | 118 +- gcc/cgraph.h | 50 +- gcc/cgraphunit.c | 223 +- gcc/combine.c | 27 +- gcc/common.opt | 6 +- gcc/config.gcc | 50 +- gcc/config.in | 19 + gcc/config/alpha/predicates.md | 10 +- gcc/config/arm/arm.c | 14 +- gcc/config/arm/pr-support.c | 8 +- gcc/config/avr/avr.c | 78 +- gcc/config/avr/avr.h | 17 +- gcc/config/avr/avr.md | 18 +- gcc/config/avr/libgcc.S | 14 +- gcc/config/avr/t-avr | 17 +- gcc/config/bfin/bfin-protos.h | 1 + gcc/config/bfin/bfin.c | 981 +- gcc/config/bfin/bfin.h | 143 +- gcc/config/bfin/bfin.md | 308 +- gcc/config/bfin/bfin.opt | 4 + gcc/config/bfin/crti.s | 4 + gcc/config/bfin/crtn.s | 4 + gcc/config/bfin/elf.h | 9 +- gcc/config/bfin/predicates.md | 32 + gcc/config/bfin/t-bfin-elf | 11 +- gcc/config/bfin/uclinux.h | 9 +- gcc/config/darwin-64.c | 77 + gcc/config/darwin-sections.def | 1 + gcc/config/darwin.c | 14 + gcc/config/darwin.h | 23 +- gcc/config/elfos.h | 19 +- gcc/config/fr30/fr30.md | 2 +- gcc/config/frv/frv.h | 3 + gcc/config/h8300/h8300.c | 3 + gcc/config/i386/crtfastmath.c | 6 + gcc/config/i386/cygming.h | 10 + gcc/config/i386/darwin.h | 77 +- gcc/config/i386/gmon-sol2.c | 54 +- gcc/config/i386/i386-interix.h | 2 +- gcc/config/i386/i386-protos.h | 3 +- gcc/config/i386/i386.c | 421 +- gcc/config/i386/i386.h | 20 +- gcc/config/i386/i386.md | 582 +- gcc/config/i386/mingw32.h | 4 + gcc/config/i386/predicates.md | 35 +- gcc/config/i386/sol2-10.h | 8 + gcc/config/i386/sse.md | 32 +- gcc/config/i386/t-darwin | 4 + gcc/config/i386/t-gthr-win32 | 3 + gcc/config/i386/t-mingw32 | 3 - gcc/config/i386/winnt.c | 59 +- gcc/config/ia64/ia64-protos.h | 2 + gcc/config/ia64/ia64.c | 19 +- gcc/config/ia64/ia64.h | 4 + gcc/config/ia64/t-ia64 | 2 +- gcc/config/m32c/addsub.md | 95 + gcc/config/m32c/bitops.md | 83 + gcc/config/m32c/cond.md | 161 +- gcc/config/m32c/m32c-lib1.S | 9 +- gcc/config/m32c/m32c-protos.h | 4 + gcc/config/m32c/m32c.c | 176 +- gcc/config/m32c/mov.md | 11 + gcc/config/m32c/muldiv.md | 26 +- gcc/config/m32c/predicates.md | 11 + gcc/config/m32r/initfini.c | 58 +- gcc/config/m32r/m32r.h | 5 +- gcc/config/m32r/m32r.md | 14 +- gcc/config/m68k/m68k.c | 20 +- gcc/config/m68k/m68k.md | 22 +- gcc/config/mips/iris6.h | 8 +- gcc/config/mips/mips-protos.h | 2 + gcc/config/mips/mips.c | 83 +- gcc/config/mips/mips.h | 7 +- gcc/config/mips/mips.md | 13 +- gcc/config/mips/sb1.md | 138 +- gcc/config/mips/t-elf | 3 +- gcc/config/mips/t-linux64 | 2 +- gcc/config/mips/t-rtems | 21 +- gcc/config/mips/t-sb1 | 44 + gcc/config/mn10300/mn10300.h | 2 + gcc/config/rs6000/aix52.h | 1 + gcc/config/rs6000/altivec.md | 45 +- gcc/config/rs6000/darwin.h | 4 - gcc/config/rs6000/host-darwin.c | 17 +- gcc/config/rs6000/linux64.h | 62 - gcc/config/rs6000/predicates.md | 3 - gcc/config/rs6000/rs6000.c | 50 +- gcc/config/rs6000/rs6000.h | 4 +- gcc/config/rs6000/rs6000.md | 22 +- gcc/config/rs6000/spe.md | 10 +- gcc/config/s390/linux-unwind.h | 31 +- gcc/config/s390/s390.md | 47 +- gcc/config/s390/t-tpf | 4 +- gcc/config/sh/lib1funcs-Os-4-200.asm | 2 + gcc/config/sh/lib1funcs.asm | 48 + gcc/config/sh/lib1funcs.h | 12 + gcc/config/sh/sh-modes.def | 2 +- gcc/config/sh/sh.c | 44 +- gcc/config/sh/sh.h | 4 +- gcc/config/sh/sh.md | 50 +- gcc/config/sh/superh.h | 2 +- gcc/config/sh/superh64.h | 2 +- gcc/config/sh/t-sh | 9 +- gcc/config/t-slibgcc-darwin | 62 +- gcc/config/v850/v850.c | 2 +- gcc/config/v850/v850.h | 6 +- gcc/config/xtensa/elf.h | 13 - gcc/config/xtensa/lib1funcs.asm | 8 +- gcc/config/xtensa/linux.h | 13 - gcc/config/xtensa/xtensa.c | 20 +- gcc/config/xtensa/xtensa.h | 34 +- gcc/configure | 336 +- gcc/configure.ac | 127 +- gcc/convert.c | 55 +- gcc/coverage.c | 17 +- gcc/cp/ChangeLog | 1173 +- gcc/cp/Make-lang.in | 98 +- gcc/cp/call.c | 63 +- gcc/cp/cfns.h | 36 +- gcc/cp/class.c | 321 +- gcc/cp/cp-gimplify.c | 48 +- gcc/cp/cp-lang.c | 4 +- gcc/cp/cp-objcp-common.c | 23 +- gcc/cp/cp-objcp-common.h | 2 + gcc/cp/cp-tree.def | 2 +- gcc/cp/cp-tree.h | 233 +- gcc/cp/cvt.c | 38 +- gcc/cp/cxx-pretty-print.c | 17 +- gcc/cp/decl.c | 573 +- gcc/cp/decl2.c | 449 +- gcc/cp/error.c | 26 +- gcc/cp/except.c | 32 +- gcc/cp/friend.c | 31 +- gcc/cp/g++spec.c | 26 +- gcc/cp/init.c | 82 +- gcc/cp/lang-specs.h | 2 +- gcc/cp/lex.c | 4 +- gcc/cp/mangle.c | 16 +- gcc/cp/method.c | 10 +- gcc/cp/name-lookup.c | 146 +- gcc/cp/name-lookup.h | 2 +- gcc/cp/operators.def | 6 - gcc/cp/parser.c | 676 +- gcc/cp/pt.c | 900 +- gcc/cp/ptree.c | 2 +- gcc/cp/repo.c | 25 +- gcc/cp/rtti.c | 92 +- gcc/cp/search.c | 36 +- gcc/cp/semantics.c | 312 +- gcc/cp/tree.c | 183 +- gcc/cp/typeck.c | 105 +- gcc/cp/typeck2.c | 32 +- gcc/cse.c | 190 +- gcc/cselib.c | 6 +- gcc/dbxout.c | 125 +- gcc/df-core.c | 2 +- gcc/df-problems.c | 8 +- gcc/df.h | 4 +- gcc/dfp.c | 26 +- gcc/doc/c-tree.texi | 178 + gcc/doc/contrib.texi | 8 +- gcc/doc/cpp.texi | 4 +- gcc/doc/cppinternals.texi | 2 +- gcc/doc/cppopts.texi | 2 +- gcc/doc/extend.texi | 283 +- gcc/doc/gcc.texi | 2 +- gcc/doc/gccint.texi | 2 +- gcc/doc/gcov.texi | 2 +- gcc/doc/install.texi | 55 +- gcc/doc/invoke.texi | 139 +- gcc/doc/md.texi | 11 +- gcc/doc/passes.texi | 150 +- gcc/doc/rtl.texi | 4 +- gcc/doc/sourcebuild.texi | 11 +- gcc/doc/tm.texi | 6 +- gcc/dojump.c | 3 +- gcc/dominance.c | 23 + gcc/domwalk.c | 198 +- gcc/double-int.c | 79 +- gcc/double-int.h | 6 + gcc/dwarf2out.c | 93 +- gcc/et-forest.c | 11 + gcc/et-forest.h | 1 + gcc/except.c | 5 +- gcc/expmed.c | 20 +- gcc/expr.c | 99 +- gcc/final.c | 8 +- gcc/fix-header.c | 16 +- gcc/flags.h | 7 +- gcc/flow.c | 29 +- gcc/fold-const.c | 523 +- gcc/fortran/ChangeLog | 908 + gcc/fortran/Make-lang.in | 14 +- gcc/fortran/arith.c | 248 +- gcc/fortran/arith.h | 5 +- gcc/fortran/array.c | 52 +- gcc/fortran/check.c | 203 +- gcc/fortran/data.c | 16 +- gcc/fortran/decl.c | 81 +- gcc/fortran/expr.c | 335 +- gcc/fortran/f95-lang.c | 2 + gcc/fortran/gfortran.h | 21 +- gcc/fortran/gfortran.texi | 88 +- gcc/fortran/interface.c | 65 +- gcc/fortran/intrinsic.c | 106 +- gcc/fortran/intrinsic.h | 26 + gcc/fortran/intrinsic.texi | 5835 +- gcc/fortran/invoke.texi | 17 +- gcc/fortran/io.c | 41 +- gcc/fortran/ioparm.def | 37 +- gcc/fortran/iresolve.c | 201 +- gcc/fortran/lang-specs.h | 2 +- gcc/fortran/lang.opt | 4 + gcc/fortran/match.c | 124 +- gcc/fortran/options.c | 7 +- gcc/fortran/parse.c | 55 +- gcc/fortran/primary.c | 30 +- gcc/fortran/resolve.c | 659 +- gcc/fortran/scanner.c | 15 +- gcc/fortran/simplify.c | 112 +- gcc/fortran/symbol.c | 19 +- gcc/fortran/trans-array.c | 315 +- gcc/fortran/trans-array.h | 4 +- gcc/fortran/trans-common.c | 11 +- gcc/fortran/trans-const.c | 38 +- gcc/fortran/trans-const.h | 6 - gcc/fortran/trans-decl.c | 154 +- gcc/fortran/trans-expr.c | 250 +- gcc/fortran/trans-intrinsic.c | 106 +- gcc/fortran/trans-io.c | 31 +- gcc/fortran/trans-openmp.c | 28 +- gcc/fortran/trans-stmt.c | 27 +- gcc/fortran/trans-types.c | 48 +- gcc/fortran/trans.c | 34 +- gcc/fortran/trans.h | 11 +- gcc/function.c | 123 +- gcc/function.h | 53 +- gcc/gcc.c | 2 +- gcc/gcov.c | 13 +- gcc/gcse.c | 3 - gcc/genpreds.c | 125 +- gcc/ggc-common.c | 8 +- gcc/ggc-page.c | 52 +- gcc/gimplify.c | 345 +- gcc/global.c | 27 +- gcc/gthr-solaris.h | 19 +- gcc/haifa-sched.c | 44 +- gcc/ifcvt.c | 12 +- gcc/input.h | 4 + gcc/ipa-inline.c | 99 +- gcc/ipa-pure-const.c | 9 +- gcc/ipa.c | 5 +- gcc/java/ChangeLog | 149 + gcc/java/Make-lang.in | 34 +- gcc/java/builtins.c | 9 + gcc/java/class.c | 32 +- gcc/java/decl.c | 98 +- gcc/java/except.c | 2 +- gcc/java/expr.c | 118 +- gcc/java/gcj.texi | 59 +- gcc/java/java-gimplify.c | 132 +- gcc/java/java-tree.h | 10 +- gcc/java/javaop.h | 29 + gcc/java/jcf-dump.c | 13 +- gcc/java/jcf.h | 5 + gcc/java/jvspec.c | 13 + gcc/java/parse.y | 38 +- gcc/lambda-code.c | 46 +- gcc/libgcc2.h | 2 +- gcc/longlong.h | 41 +- gcc/loop-invariant.c | 5 + gcc/loop-unroll.c | 4 +- gcc/mklibgcc.in | 4 + gcc/mode-switching.c | 43 +- gcc/objc/ChangeLog | 13 + gcc/objc/Make-lang.in | 9 +- gcc/objc/objc-act.c | 9 +- gcc/objcp/ChangeLog | 19 + gcc/objcp/Make-lang.in | 14 +- gcc/objcp/config-lang.in | 1 + gcc/objcp/objcp-decl.c | 2 +- gcc/objcp/objcp-lang.c | 6 +- gcc/omp-low.c | 16 +- gcc/optabs.c | 68 +- gcc/opts-common.c | 4 + gcc/output.h | 11 + gcc/params.def | 2 +- gcc/passes.c | 6 + gcc/po/ChangeLog | 21 + gcc/po/be.po | 3338 +- gcc/po/ca.po | 3339 +- gcc/po/da.po | 3343 +- gcc/po/de.po | 3360 +- gcc/po/el.po | 3344 +- gcc/po/es.po | 3362 +- gcc/po/fr.po | 3346 +- gcc/po/ja.po | 3342 +- gcc/po/nl.po | 3341 +- gcc/po/rw.po | 3341 +- gcc/po/sv.po | 9458 +- gcc/po/tr.po | 3352 +- gcc/po/zh_CN.po | 4285 +- gcc/po/zh_TW.po | 3349 +- gcc/pointer-set.c | 5 +- gcc/predict.c | 74 +- gcc/print-rtl.c | 13 +- gcc/print-tree.c | 34 +- gcc/profile.c | 2 +- gcc/protoize.c | 3 +- gcc/reg-stack.c | 28 +- gcc/regclass.c | 14 +- gcc/regmove.c | 80 +- gcc/reload.c | 67 +- gcc/reload.h | 1 + gcc/reload1.c | 132 +- gcc/reorg.c | 12 +- gcc/rtl.c | 5 +- gcc/rtl.h | 4 +- gcc/rtlanal.c | 2 +- gcc/sched-ebb.c | 18 +- gcc/sched-int.h | 1 + gcc/see.c | 12 +- gcc/simplify-rtx.c | 174 +- gcc/stor-layout.c | 224 +- gcc/testsuite/ChangeLog | 2034 +- gcc/testsuite/g++.dg/eh/spbp.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-3.C | 8 +- gcc/testsuite/g++.dg/ext/attrib14.C | 4 +- gcc/testsuite/g++.dg/ext/attrib9.C | 13 +- gcc/testsuite/g++.dg/ext/dllimport4.C | 32 + .../g++.dg/ext/interface3/dir1/interface3.h | 6 + .../g++.dg/ext/interface3/dir2/interface3.h | 5 + gcc/testsuite/g++.dg/ext/interface3/interface3a.C | 7 + .../g++.dg/ext/interface3/interface3a2.cc | 9 + gcc/testsuite/g++.dg/ext/interface3/interface3b.C | 7 + .../g++.dg/ext/interface3/interface3b2.cc | 9 + gcc/testsuite/g++.dg/ext/typedef-init.C | 9 +- gcc/testsuite/g++.dg/ext/visibility/anon1.C | 6 +- gcc/testsuite/g++.dg/ext/visibility/assign1.C | 7 +- .../g++.dg/ext/visibility/fvisibility-override2.C | 4 +- gcc/testsuite/g++.dg/ext/visibility/virtual.C | 10 +- gcc/testsuite/g++.dg/gomp/tpl-atomic-2.C | 3 +- gcc/testsuite/g++.dg/init/brace2.C | 4 +- gcc/testsuite/g++.dg/init/member1.C | 2 +- gcc/testsuite/g++.dg/opt/max1.C | 29 - gcc/testsuite/g++.dg/opt/pr7503-2.C | 79 - gcc/testsuite/g++.dg/opt/pr7503-3.C | 26 - gcc/testsuite/g++.dg/opt/pr7503-4.C | 81 - gcc/testsuite/g++.dg/opt/pr7503-5.C | 81 - gcc/testsuite/g++.dg/other/component1.C | 6 +- gcc/testsuite/g++.dg/other/error7.C | 2 +- gcc/testsuite/g++.dg/other/fold1.C | 2 +- gcc/testsuite/g++.dg/other/operator1.C | 2 +- gcc/testsuite/g++.dg/other/unused1.C | 5 +- gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C | 2 +- gcc/testsuite/g++.dg/parse/long1.C | 4 + gcc/testsuite/g++.dg/template/crash2.C | 2 +- gcc/testsuite/g++.dg/template/fntry1.C | 1 + gcc/testsuite/g++.dg/template/lookup4.C | 2 +- gcc/testsuite/g++.dg/template/nontype13.C | 2 +- gcc/testsuite/g++.dg/template/nontype5.C | 2 +- gcc/testsuite/g++.dg/template/void2.C | 2 +- gcc/testsuite/g++.dg/vect/vect.exp | 10 + gcc/testsuite/g++.dg/warn/minmax.C | 15 - gcc/testsuite/g++.dg/warn/pr23075.C | 5 - gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C | 4 +- gcc/testsuite/g++.old-deja/g++.brendan/crash52.C | 3 +- gcc/testsuite/g++.old-deja/g++.jason/report.C | 4 +- gcc/testsuite/g++.old-deja/g++.mike/net36.C | 2 +- gcc/testsuite/g++.old-deja/g++.other/init18.C | 12 +- gcc/testsuite/g++.old-deja/g++.other/init19.C | 2 +- gcc/testsuite/g++.old-deja/g++.other/init5.C | 2 +- gcc/testsuite/g++.old-deja/g++.pt/crash51.C | 2 +- gcc/testsuite/g++.old-deja/g++.pt/crash65.C | 4 +- gcc/testsuite/g++.old-deja/g++.pt/enum5.C | 4 +- gcc/testsuite/g++.old-deja/g++.warn/compare1.C | 36 - gcc/testsuite/gcc.c-torture/compile/20000804-1.c | 1 + gcc/testsuite/gcc.dg/20050321-1.c | 4 +- gcc/testsuite/gcc.dg/arm-mmx-1.c | 1 + gcc/testsuite/gcc.dg/attr-invalid.c | 42 + gcc/testsuite/gcc.dg/bf-ms-layout.c | 43 +- gcc/testsuite/gcc.dg/bf-no-ms-layout.c | 25 +- .../gcc.dg/compat/struct-layout-1_generate.c | 6 +- gcc/testsuite/gcc.dg/cpp/digraph2.c | 2 +- gcc/testsuite/gcc.dg/fold-cond-1.c | 3 +- gcc/testsuite/gcc.dg/noncompile/920923-1.c | 2 +- gcc/testsuite/gcc.dg/pr18241-1.c | 4 +- gcc/testsuite/gcc.dg/pr18241-2.c | 4 +- gcc/testsuite/gcc.dg/pr20368-1.c | 2 +- gcc/testsuite/gcc.dg/pr20368-2.c | 2 +- gcc/testsuite/gcc.dg/pr20368-3.c | 2 +- gcc/testsuite/gcc.dg/pr27095.c | 8 +- gcc/testsuite/gcc.dg/sibcall-7.c | 5 +- gcc/testsuite/gcc.dg/sparc-getcontext-1.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr23382.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-69.c | 117 - gcc/testsuite/gcc.dg/vect/vect.exp | 24 + gcc/testsuite/gcc.dg/visibility-11.c | 2 +- gcc/testsuite/gcc.misc-tests/linkage.exp | 15 +- gcc/testsuite/gcc.target/i386/20011119-1.c | 3 +- gcc/testsuite/gcc.target/i386/20020523-1.c | 1 + gcc/testsuite/gcc.target/i386/20060512-1.c | 1 + gcc/testsuite/gcc.target/i386/20060512-2.c | 1 + gcc/testsuite/gcc.target/i386/20060512-3.c | 1 + gcc/testsuite/gcc.target/i386/20060512-4.c | 1 + gcc/testsuite/gcc.target/i386/asm-1.c | 1 + gcc/testsuite/gcc.target/i386/asm-3.c | 1 + gcc/testsuite/gcc.target/i386/clobbers.c | 5 + .../gcc.target/i386/compress-float-387-pic.c | 1 + gcc/testsuite/gcc.target/i386/compress-float-387.c | 1 + .../gcc.target/i386/compress-float-sse-pic.c | 1 + gcc/testsuite/gcc.target/i386/compress-float-sse.c | 1 + .../gcc.test-framework/test-framework.awk | 4 +- gcc/testsuite/gfortran.dg/associated_2.f90 | 15 +- gcc/testsuite/gfortran.dg/bounds_check_2.f | 16 + gcc/testsuite/gfortran.dg/cray_pointers_2.f90 | 2 +- gcc/testsuite/gfortran.dg/data_char_1.f90 | 7 +- gcc/testsuite/gfortran.dg/enum_5.f90 | 2 +- gcc/testsuite/gfortran.dg/enum_8.f90 | 2 +- gcc/testsuite/gfortran.dg/equiv_2.f90 | 2 +- gcc/testsuite/gfortran.dg/fmt_l.f90 | 16 + gcc/testsuite/gfortran.dg/g77/20030326-1.f | 2 +- gcc/testsuite/gfortran.dg/gomp/gomp.exp | 4 + gcc/testsuite/gfortran.dg/hollerith4.f90 | 21 +- gcc/testsuite/gfortran.dg/io_constraints_2.f90 | 3 + gcc/testsuite/gfortran.dg/pr19936_1.f90 | 2 +- gcc/testsuite/gfortran.dg/temporary_1.f90 | 1 - .../gfortran.fortran-torture/compile/data_1.f90 | 2 +- .../execute/der_init_4.f90 | 2 +- .../execute/intrinsic_set_exponent.f90 | 30 +- gcc/testsuite/gnat.dg/address_conversion.adb | 24 + gcc/testsuite/gnat.dg/assert.ads | 5 + gcc/testsuite/gnat.dg/boolean_subtype.adb | 42 + gcc/testsuite/gnat.dg/controlled_record.adb | 15 + gcc/testsuite/gnat.dg/controlled_record.ads | 16 + gcc/testsuite/gnat.dg/dg.exp | 36 + gcc/testsuite/gnat.dg/frame_overflow.adb | 33 + .../gnat.dg/loop_unchecked_conversion.adb | 33 + .../gnat.dg/loop_unchecked_conversion.ads | 5 + .../gnat.dg/nested_agg_bitfield_constructor.adb | 34 + .../gnat.dg/outer_agg_bitfield_constructor.adb | 44 + gcc/testsuite/gnat.dg/pointer_array.adb | 16 + gcc/testsuite/gnat.dg/pointer_conversion.adb | 25 + gcc/testsuite/gnat.dg/scalar_mode_agg_compare.adb | 25 + .../gnat.dg/scalar_mode_agg_compare_loop.adb | 18 + .../gnat.dg/self_aggregate_with_array.adb | 21 + .../gnat.dg/self_aggregate_with_zeros.adb | 19 + gcc/testsuite/gnat.dg/specs/specs.exp | 36 + gcc/testsuite/gnat.dg/specs/static_initializer.ads | 14 + gcc/testsuite/gnat.dg/string_slice.adb | 21 + gcc/testsuite/gnat.dg/style/style.exp | 36 + gcc/testsuite/gnat.dg/varsize_temp.adb | 29 + gcc/testsuite/lib/fortran-torture.exp | 12 + gcc/testsuite/lib/gcc-defs.exp | 5 + gcc/testsuite/lib/gcc-dg.exp | 40 +- gcc/testsuite/lib/target-supports-dg.exp | 34 + gcc/testsuite/lib/target-supports.exp | 89 +- gcc/testsuite/obj-c++.dg/dwarf-2.mm | 1 + gcc/testsuite/objc.dg/dwarf-1.m | 2 +- gcc/testsuite/objc.dg/dwarf-2.m | 2 +- gcc/testsuite/objc.dg/objc-fast-4.m | 5 +- gcc/toplev.c | 40 +- gcc/tree-cfg.c | 42 +- gcc/tree-cfgcleanup.c | 19 + gcc/tree-chrec.c | 55 +- gcc/tree-complex.c | 7 +- gcc/tree-data-ref.c | 35 +- gcc/tree-dfa.c | 52 +- gcc/tree-eh.c | 11 +- gcc/tree-flow.h | 18 +- gcc/tree-gimple.c | 11 +- gcc/tree-gimple.h | 3 +- gcc/tree-if-conv.c | 5 +- gcc/tree-inline.c | 76 +- gcc/tree-into-ssa.c | 277 +- gcc/tree-iterator.c | 3 +- gcc/tree-nested.c | 18 +- gcc/tree-nrv.c | 62 +- gcc/tree-optimize.c | 15 +- gcc/tree-outof-ssa.c | 5 +- gcc/tree-pass.h | 14 +- gcc/tree-scalar-evolution.c | 187 + gcc/tree-sra.c | 212 +- gcc/tree-ssa-alias.c | 242 +- gcc/tree-ssa-ccp.c | 12 + gcc/tree-ssa-dce.c | 8 +- gcc/tree-ssa-dom.c | 59 +- gcc/tree-ssa-loop-im.c | 2 +- gcc/tree-ssa-loop-ivcanon.c | 15 +- gcc/tree-ssa-loop-ivopts.c | 298 +- gcc/tree-ssa-loop-manip.c | 3 +- gcc/tree-ssa-loop-niter.c | 198 +- gcc/tree-ssa-loop-prefetch.c | 8 +- gcc/tree-ssa-loop-unswitch.c | 5 +- gcc/tree-ssa-loop.c | 21 +- gcc/tree-ssa-math-opts.c | 37 +- gcc/tree-ssa-operands.c | 15 +- gcc/tree-ssa-pre.c | 359 +- gcc/tree-ssa-structalias.c | 29 +- gcc/tree-ssa-threadupdate.c | 40 +- gcc/tree-ssa.c | 8 +- gcc/tree-vect-analyze.c | 8 +- gcc/tree-vect-transform.c | 10 +- gcc/tree-vectorizer.c | 24 +- gcc/tree-vrp.c | 109 +- gcc/tree.c | 199 +- gcc/tree.h | 138 +- gcc/treelang/ChangeLog | 14 + gcc/treelang/Make-lang.in | 18 +- gcc/treelang/treelang.texi | 2 +- gcc/value-prof.c | 17 +- gcc/var-tracking.c | 338 +- gcc/varasm.c | 63 +- gcc/varray.c | 3 +- gnattools/ChangeLog | 4 + gnattools/Makefile.in | 5 + include/libiberty.h | 17 + intl/ChangeLog | 5 + intl/Makefile.in | 5 +- libcpp/ChangeLog | 41 +- libcpp/Makefile.in | 2 +- libcpp/configure | 26 +- libcpp/configure.ac | 1 + libcpp/directives.c | 25 +- libcpp/expr.c | 21 - libcpp/include/cpplib.h | 13 +- libcpp/lex.c | 14 +- libcpp/macro.c | 2 +- libcpp/po/ChangeLog | 13 + libcpp/po/be.po | 2 +- libcpp/po/ca.po | 2 +- libcpp/po/da.po | 2 +- libcpp/po/de.po | 2 +- libcpp/po/el.po | 2 +- libcpp/po/es.po | 2 +- libcpp/po/fr.po | 2 +- libcpp/po/ja.po | 2 +- libcpp/po/nl.po | 2 +- libcpp/po/rw.po | 2 +- libcpp/po/sv.po | 6 +- libcpp/po/tr.po | 2 +- libcpp/po/vi.po | 309 +- libcpp/po/zh_CN.po | 2 +- libcpp/po/zh_TW.po | 2 +- libdecnumber/ChangeLog | 70 + libdecnumber/config.in | 33 +- libdecnumber/configure | 70 +- libdecnumber/configure.ac | 2 +- libdecnumber/decContext.c | 4 +- libdecnumber/decContext.h | 4 +- libdecnumber/decNumber.c | 230 +- libdecnumber/decNumber.h | 68 +- libdecnumber/decUtility.c | 11 +- libdecnumber/decUtility.h | 4 +- libdecnumber/decimal128.c | 16 +- libdecnumber/decimal128.h | 10 +- libdecnumber/decimal32.c | 16 +- libdecnumber/decimal32.h | 10 +- libdecnumber/decimal64.c | 16 +- libdecnumber/decimal64.h | 10 +- libffi/ChangeLog | 20 + libffi/include/ffi.h.in | 56 +- libffi/include/ffi_common.h | 14 +- libffi/testsuite/libffi.call/closure_fn6.c | 2 +- libffi/testsuite/libffi.call/return_ul.c | 38 + libgfortran/ChangeLog | 313 + libgfortran/Makefile.am | 51 +- libgfortran/Makefile.in | 206 +- libgfortran/config.h.in | 18 + libgfortran/configure | 901 +- libgfortran/configure.ac | 5 +- libgfortran/generated/_mod_r10.F90 | 51 + libgfortran/generated/_mod_r16.F90 | 51 + libgfortran/generated/all_l16.c | 8 - libgfortran/generated/all_l4.c | 8 - libgfortran/generated/all_l8.c | 8 - libgfortran/generated/any_l16.c | 8 - libgfortran/generated/any_l4.c | 8 - libgfortran/generated/any_l8.c | 8 - libgfortran/generated/count_16_l16.c | 8 - libgfortran/generated/count_16_l4.c | 8 - libgfortran/generated/count_16_l8.c | 8 - libgfortran/generated/count_4_l16.c | 8 - libgfortran/generated/count_4_l4.c | 8 - libgfortran/generated/count_4_l8.c | 8 - libgfortran/generated/count_8_l16.c | 8 - libgfortran/generated/count_8_l4.c | 8 - libgfortran/generated/count_8_l8.c | 8 - libgfortran/generated/dotprod_c10.c | 81 - libgfortran/generated/dotprod_c16.c | 81 - libgfortran/generated/dotprod_c4.c | 81 - libgfortran/generated/dotprod_c8.c | 81 - libgfortran/generated/dotprod_i16.c | 80 - libgfortran/generated/dotprod_i4.c | 80 - libgfortran/generated/dotprod_i8.c | 80 - libgfortran/generated/dotprod_l16.c | 91 - libgfortran/generated/dotprod_l4.c | 91 - libgfortran/generated/dotprod_l8.c | 91 - libgfortran/generated/dotprod_r10.c | 80 - libgfortran/generated/dotprod_r16.c | 80 - libgfortran/generated/dotprod_r4.c | 80 - libgfortran/generated/dotprod_r8.c | 80 - libgfortran/generated/in_pack_c10.c | 9 +- libgfortran/generated/in_pack_c16.c | 9 +- libgfortran/generated/in_pack_c4.c | 9 +- libgfortran/generated/in_pack_c8.c | 9 +- libgfortran/generated/in_pack_i16.c | 9 +- libgfortran/generated/in_pack_i4.c | 9 +- libgfortran/generated/in_pack_i8.c | 9 +- libgfortran/generated/in_unpack_c10.c | 5 +- libgfortran/generated/in_unpack_c16.c | 5 +- libgfortran/generated/in_unpack_c4.c | 5 +- libgfortran/generated/in_unpack_c8.c | 5 +- libgfortran/generated/in_unpack_i16.c | 5 +- libgfortran/generated/in_unpack_i4.c | 5 +- libgfortran/generated/in_unpack_i8.c | 5 +- libgfortran/generated/matmul_c10.c | 64 +- libgfortran/generated/matmul_c16.c | 64 +- libgfortran/generated/matmul_c4.c | 64 +- libgfortran/generated/matmul_c8.c | 64 +- libgfortran/generated/matmul_i16.c | 64 +- libgfortran/generated/matmul_i4.c | 64 +- libgfortran/generated/matmul_i8.c | 64 +- libgfortran/generated/matmul_l16.c | 9 +- libgfortran/generated/matmul_l4.c | 9 +- libgfortran/generated/matmul_l8.c | 9 +- libgfortran/generated/matmul_r10.c | 64 +- libgfortran/generated/matmul_r16.c | 64 +- libgfortran/generated/matmul_r4.c | 64 +- libgfortran/generated/matmul_r8.c | 64 +- libgfortran/generated/maxloc0_16_i16.c | 22 - libgfortran/generated/maxloc0_16_i4.c | 22 - libgfortran/generated/maxloc0_16_i8.c | 22 - libgfortran/generated/maxloc0_16_r10.c | 22 - libgfortran/generated/maxloc0_16_r16.c | 22 - libgfortran/generated/maxloc0_16_r4.c | 22 - libgfortran/generated/maxloc0_16_r8.c | 22 - libgfortran/generated/maxloc0_4_i16.c | 22 - libgfortran/generated/maxloc0_4_i4.c | 22 - libgfortran/generated/maxloc0_4_i8.c | 22 - libgfortran/generated/maxloc0_4_r10.c | 22 - libgfortran/generated/maxloc0_4_r16.c | 22 - libgfortran/generated/maxloc0_4_r4.c | 22 - libgfortran/generated/maxloc0_4_r8.c | 22 - libgfortran/generated/maxloc0_8_i16.c | 22 - libgfortran/generated/maxloc0_8_i4.c | 22 - libgfortran/generated/maxloc0_8_i8.c | 22 - libgfortran/generated/maxloc0_8_r10.c | 22 - libgfortran/generated/maxloc0_8_r16.c | 22 - libgfortran/generated/maxloc0_8_r4.c | 22 - libgfortran/generated/maxloc0_8_r8.c | 22 - libgfortran/generated/maxloc1_16_i16.c | 22 - libgfortran/generated/maxloc1_16_i4.c | 22 - libgfortran/generated/maxloc1_16_i8.c | 22 - libgfortran/generated/maxloc1_16_r10.c | 22 - libgfortran/generated/maxloc1_16_r16.c | 22 - libgfortran/generated/maxloc1_16_r4.c | 22 - libgfortran/generated/maxloc1_16_r8.c | 22 - libgfortran/generated/maxloc1_4_i16.c | 22 - libgfortran/generated/maxloc1_4_i4.c | 22 - libgfortran/generated/maxloc1_4_i8.c | 22 - libgfortran/generated/maxloc1_4_r10.c | 22 - libgfortran/generated/maxloc1_4_r16.c | 22 - libgfortran/generated/maxloc1_4_r4.c | 22 - libgfortran/generated/maxloc1_4_r8.c | 22 - libgfortran/generated/maxloc1_8_i16.c | 22 - libgfortran/generated/maxloc1_8_i4.c | 22 - libgfortran/generated/maxloc1_8_i8.c | 22 - libgfortran/generated/maxloc1_8_r10.c | 22 - libgfortran/generated/maxloc1_8_r16.c | 22 - libgfortran/generated/maxloc1_8_r4.c | 22 - libgfortran/generated/maxloc1_8_r8.c | 22 - libgfortran/generated/maxval_i16.c | 22 - libgfortran/generated/maxval_i4.c | 22 - libgfortran/generated/maxval_i8.c | 22 - libgfortran/generated/maxval_r10.c | 22 - libgfortran/generated/maxval_r16.c | 22 - libgfortran/generated/maxval_r4.c | 22 - libgfortran/generated/maxval_r8.c | 22 - libgfortran/generated/minloc0_16_i16.c | 22 - libgfortran/generated/minloc0_16_i4.c | 22 - libgfortran/generated/minloc0_16_i8.c | 22 - libgfortran/generated/minloc0_16_r10.c | 22 - libgfortran/generated/minloc0_16_r16.c | 22 - libgfortran/generated/minloc0_16_r4.c | 22 - libgfortran/generated/minloc0_16_r8.c | 22 - libgfortran/generated/minloc0_4_i16.c | 22 - libgfortran/generated/minloc0_4_i4.c | 22 - libgfortran/generated/minloc0_4_i8.c | 22 - libgfortran/generated/minloc0_4_r10.c | 22 - libgfortran/generated/minloc0_4_r16.c | 22 - libgfortran/generated/minloc0_4_r4.c | 22 - libgfortran/generated/minloc0_4_r8.c | 22 - libgfortran/generated/minloc0_8_i16.c | 22 - libgfortran/generated/minloc0_8_i4.c | 22 - libgfortran/generated/minloc0_8_i8.c | 22 - libgfortran/generated/minloc0_8_r10.c | 22 - libgfortran/generated/minloc0_8_r16.c | 22 - libgfortran/generated/minloc0_8_r4.c | 22 - libgfortran/generated/minloc0_8_r8.c | 22 - libgfortran/generated/minloc1_16_i16.c | 22 - libgfortran/generated/minloc1_16_i4.c | 22 - libgfortran/generated/minloc1_16_i8.c | 22 - libgfortran/generated/minloc1_16_r10.c | 22 - libgfortran/generated/minloc1_16_r16.c | 22 - libgfortran/generated/minloc1_16_r4.c | 22 - libgfortran/generated/minloc1_16_r8.c | 22 - libgfortran/generated/minloc1_4_i16.c | 22 - libgfortran/generated/minloc1_4_i4.c | 22 - libgfortran/generated/minloc1_4_i8.c | 22 - libgfortran/generated/minloc1_4_r10.c | 22 - libgfortran/generated/minloc1_4_r16.c | 22 - libgfortran/generated/minloc1_4_r4.c | 22 - libgfortran/generated/minloc1_4_r8.c | 22 - libgfortran/generated/minloc1_8_i16.c | 22 - libgfortran/generated/minloc1_8_i4.c | 22 - libgfortran/generated/minloc1_8_i8.c | 22 - libgfortran/generated/minloc1_8_r10.c | 22 - libgfortran/generated/minloc1_8_r16.c | 22 - libgfortran/generated/minloc1_8_r4.c | 22 - libgfortran/generated/minloc1_8_r8.c | 22 - libgfortran/generated/minval_i16.c | 22 - libgfortran/generated/minval_i4.c | 22 - libgfortran/generated/minval_i8.c | 22 - libgfortran/generated/minval_r10.c | 22 - libgfortran/generated/minval_r16.c | 22 - libgfortran/generated/minval_r4.c | 22 - libgfortran/generated/minval_r8.c | 22 - libgfortran/generated/product_c10.c | 22 - libgfortran/generated/product_c16.c | 22 - libgfortran/generated/product_c4.c | 22 - libgfortran/generated/product_c8.c | 22 - libgfortran/generated/product_i16.c | 22 - libgfortran/generated/product_i4.c | 22 - libgfortran/generated/product_i8.c | 22 - libgfortran/generated/product_r10.c | 22 - libgfortran/generated/product_r16.c | 22 - libgfortran/generated/product_r4.c | 22 - libgfortran/generated/product_r8.c | 22 - libgfortran/generated/reshape_c10.c | 13 +- libgfortran/generated/reshape_c16.c | 13 +- libgfortran/generated/reshape_c4.c | 13 +- libgfortran/generated/reshape_c8.c | 13 +- libgfortran/generated/reshape_i16.c | 13 +- libgfortran/generated/reshape_i4.c | 13 +- libgfortran/generated/reshape_i8.c | 13 +- libgfortran/generated/reshape_r10.c | 13 +- libgfortran/generated/reshape_r16.c | 13 +- libgfortran/generated/reshape_r4.c | 257 + libgfortran/generated/reshape_r8.c | 257 + libgfortran/generated/shape_i16.c | 4 +- libgfortran/generated/shape_i4.c | 4 +- libgfortran/generated/shape_i8.c | 4 +- libgfortran/generated/sum_c10.c | 22 - libgfortran/generated/sum_c16.c | 22 - libgfortran/generated/sum_c4.c | 22 - libgfortran/generated/sum_c8.c | 22 - libgfortran/generated/sum_i16.c | 22 - libgfortran/generated/sum_i4.c | 22 - libgfortran/generated/sum_i8.c | 22 - libgfortran/generated/sum_r10.c | 22 - libgfortran/generated/sum_r16.c | 22 - libgfortran/generated/sum_r4.c | 22 - libgfortran/generated/sum_r8.c | 22 - libgfortran/generated/transpose_c10.c | 7 +- libgfortran/generated/transpose_c16.c | 7 +- libgfortran/generated/transpose_c4.c | 7 +- libgfortran/generated/transpose_c8.c | 7 +- libgfortran/generated/transpose_i16.c | 7 +- libgfortran/generated/transpose_i4.c | 7 +- libgfortran/generated/transpose_i8.c | 7 +- libgfortran/generated/transpose_r10.c | 7 +- libgfortran/generated/transpose_r16.c | 7 +- libgfortran/generated/transpose_r4.c | 99 + libgfortran/generated/transpose_r8.c | 99 + libgfortran/intrinsics/access.c | 98 + libgfortran/intrinsics/bessel.c | 13 +- libgfortran/intrinsics/chdir.c | 2 - libgfortran/intrinsics/chmod.c | 131 + libgfortran/intrinsics/clock.c | 78 + libgfortran/intrinsics/date_and_time.c | 405 +- libgfortran/intrinsics/etime.c | 27 +- libgfortran/intrinsics/fnum.c | 2 - libgfortran/intrinsics/ierrno.c | 2 - libgfortran/intrinsics/kill.c | 2 - libgfortran/intrinsics/link.c | 2 - libgfortran/intrinsics/perror.c | 2 - libgfortran/intrinsics/rand.c | 12 +- libgfortran/intrinsics/random.c | 408 +- libgfortran/intrinsics/rename.c | 2 - libgfortran/intrinsics/reshape_generic.c | 13 +- libgfortran/intrinsics/sleep.c | 2 - libgfortran/intrinsics/spread_generic.c | 8 +- libgfortran/intrinsics/stat.c | 129 +- libgfortran/intrinsics/string_intrinsics.c | 25 +- libgfortran/intrinsics/symlnk.c | 2 - libgfortran/intrinsics/time.c | 2 - libgfortran/intrinsics/transpose_generic.c | 6 +- libgfortran/io/close.c | 1 + libgfortran/io/file_pos.c | 10 +- libgfortran/io/format.c | 16 +- libgfortran/io/inquire.c | 6 + libgfortran/io/io.h | 53 +- libgfortran/io/list_read.c | 2 +- libgfortran/io/open.c | 24 +- libgfortran/io/read.c | 22 +- libgfortran/io/transfer.c | 372 +- libgfortran/io/unit.c | 19 + libgfortran/io/unix.c | 1 + libgfortran/io/write.c | 9 + libgfortran/libgfortran.h | 50 +- libgfortran/libtool-version | 2 +- libgfortran/m4/dotprod.m4 | 82 - libgfortran/m4/dotprodc.m4 | 84 - libgfortran/m4/dotprodl.m4 | 92 - libgfortran/m4/iforeach.m4 | 22 - libgfortran/m4/ifunction.m4 | 22 - libgfortran/m4/in_pack.m4 | 9 +- libgfortran/m4/in_unpack.m4 | 5 +- libgfortran/m4/matmul.m4 | 64 +- libgfortran/m4/matmull.m4 | 9 +- libgfortran/m4/reshape.m4 | 13 +- libgfortran/m4/shape.m4 | 4 +- libgfortran/m4/transpose.m4 | 7 +- libgfortran/runtime/error.c | 9 +- libgfortran/runtime/normalize.c | 120 - libgomp/ChangeLog | 83 +- libgomp/Makefile.am | 3 +- libgomp/Makefile.in | 38 +- libgomp/config/mingw32/time.c | 49 + libgomp/configure | 193 +- libgomp/configure.ac | 57 +- libgomp/configure.tgt | 4 + libgomp/critical.c | 6 +- libgomp/env.c | 104 +- libgomp/libgomp.h | 7 +- libgomp/team.c | 5 +- libgomp/testsuite/libgomp.fortran/reduction3.f90 | 2 +- libgomp/testsuite/libgomp.fortran/reduction4.f90 | 2 +- libiberty/ChangeLog | 55 + libiberty/Makefile.in | 4 +- libiberty/configure | 202 + libiberty/configure.ac | 49 + libiberty/cp-demangle.c | 11 +- libiberty/functions.texi | 32 +- libiberty/hashtab.c | 23 +- libiberty/pex-common.c | 35 +- libiberty/pex-common.h | 14 +- libiberty/pex-djgpp.c | 17 +- libiberty/pex-msdos.c | 8 +- libiberty/pex-unix.c | 20 +- libiberty/pex-win32.c | 117 +- libiberty/pexecute.txh | 13 + libiberty/testsuite/demangle-expected | 6 + libjava/ChangeLog | 1490 + libjava/HACKING | 15 +- libjava/Makefile.am | 194 +- libjava/Makefile.in | 1179 +- libjava/aclocal.m4 | 2 +- libjava/boehm.cc | 40 + libjava/classpath/ChangeLog | 10828 +- libjava/classpath/ChangeLog.gcj | 109 + libjava/classpath/INSTALL | 37 +- libjava/classpath/Makefile.am | 6 +- libjava/classpath/Makefile.in | 97 +- libjava/classpath/NEWS | 98 + libjava/classpath/README | 56 +- libjava/classpath/THANKYOU | 1 + libjava/classpath/aclocal.m4 | 443 +- libjava/classpath/autogen.sh | 5 +- libjava/classpath/config.guess | 50 +- libjava/classpath/config.sub | 73 +- libjava/classpath/configure | 15120 +- libjava/classpath/configure.ac | 258 +- libjava/classpath/doc/Makefile.in | 72 +- libjava/classpath/doc/api/Makefile.in | 52 +- libjava/classpath/doc/tools.texinfo | 617 +- libjava/classpath/doc/vmintegration.texinfo | 438 +- libjava/classpath/examples/Makefile.am | 11 +- libjava/classpath/examples/Makefile.in | 69 +- libjava/classpath/examples/Makefile.java2d.in | 17 + libjava/classpath/examples/README | 17 + .../communication/StructureToPassHelper.java | 15 +- .../communication/StructureToReturnHelper.java | 25 +- .../communication/TreeNodeHelper.java | 11 +- .../communication/WeThrowThisExceptionHelper.java | 6 +- .../examples/awt/AicasGraphicsBenchmark.java | 1018 + .../examples/gnu/classpath/examples/awt/Demo.java | 296 +- .../classpath/examples/java2d/J2dBenchmark.java | 1571 + .../classpath/examples/java2d/J2dBenchmarkGUI.java | 891 + .../gnu/classpath/examples/java2d/JNIOverhead.java | 390 + .../examples/gnu/classpath/examples/java2d/bench.c | 606 + .../examples/gnu/classpath/examples/java2d/bench.h | 64 + .../classpath/examples/management/TestBeans.java | 55 + .../examples/management/TestClassLoading.java | 41 + .../examples/management/TestCompilation.java | 48 + .../examples/management/TestGarbageCollector.java | 53 + .../classpath/examples/management/TestMemory.java | 52 + .../examples/management/TestMemoryManager.java | 49 + .../examples/management/TestMemoryPool.java | 93 + .../gnu/classpath/examples/management/TestOS.java | 37 + .../classpath/examples/management/TestRuntime.java | 54 + .../classpath/examples/management/TestThread.java | 118 + .../gnu/classpath/examples/swing/Demo.java | 54 +- .../gnu/classpath/examples/swing/HtmlDemo.java | 298 + .../examples/swing/NavigationFilterDemo.java | 5 +- .../classpath/examples/swing/TabbedPaneDemo.java | 16 +- .../gnu/classpath/examples/swing/TableDemo.java | 180 +- libjava/classpath/external/Makefile.in | 72 +- .../classpath/external/relaxngDatatype/Makefile.in | 52 +- libjava/classpath/external/sax/Makefile.in | 52 +- libjava/classpath/external/w3c_dom/Makefile.in | 52 +- .../classpath/gnu/CORBA/ForwardRequestHelper.java | 25 +- libjava/classpath/gnu/classpath/ByteArray.java | 109 - .../classpath/gnu/classpath/Configuration.java.in | 6 - .../gnu/classpath/debug/Simple1LineFormatter.java | 22 +- .../gnu/classpath/debug/SystemLogger.java | 8 +- .../gnu/classpath/debug/TeeInputStream.java | 98 + .../gnu/classpath/debug/TeeOutputStream.java | 93 + .../classpath/gnu/classpath/debug/TeeReader.java | 98 + .../classpath/gnu/classpath/debug/TeeWriter.java | 93 + libjava/classpath/gnu/classpath/jdwp/Jdwp.java | 46 +- .../gnu/classpath/jdwp/event/BreakpointEvent.java | 15 +- .../classpath/jdwp/event/ClassPrepareEvent.java | 6 +- .../gnu/classpath/jdwp/event/ClassUnloadEvent.java | 96 + .../classpath/gnu/classpath/jdwp/event/Event.java | 37 +- .../gnu/classpath/jdwp/event/EventManager.java | 9 +- .../gnu/classpath/jdwp/event/ExceptionEvent.java | 157 + .../gnu/classpath/jdwp/event/MethodEntryEvent.java | 118 + .../gnu/classpath/jdwp/event/MethodExitEvent.java | 115 + .../gnu/classpath/jdwp/event/SingleStepEvent.java | 121 + .../gnu/classpath/jdwp/event/ThreadEndEvent.java | 4 +- .../gnu/classpath/jdwp/event/ThreadStartEvent.java | 4 +- .../gnu/classpath/jdwp/event/VmDeathEvent.java | 2 +- .../gnu/classpath/jdwp/event/VmInitEvent.java | 2 +- .../jdwp/event/filters/ClassMatchFilter.java | 3 +- .../jdwp/event/filters/ClassOnlyFilter.java | 2 +- .../jdwp/event/filters/ExceptionOnlyFilter.java | 62 +- .../jdwp/event/filters/InstanceOnlyFilter.java | 2 +- .../jdwp/event/filters/ThreadOnlyFilter.java | 4 +- .../jdwp/processor/ClassTypeCommandSet.java | 8 +- .../jdwp/processor/EventRequestCommandSet.java | 2 +- .../classpath/jdwp/processor/PacketProcessor.java | 8 +- .../processor/ThreadGroupReferenceCommandSet.java | 8 +- .../classpath/jdwp/transport/JdwpConnection.java | 6 +- .../gnu/classpath/jdwp/util/Location.java | 40 +- .../gnu/java/awt/BitwiseXORComposite.java | 2 +- libjava/classpath/gnu/java/awt/Buffers.java | 88 +- .../classpath/gnu/java/awt/ClasspathToolkit.java | 27 +- .../awt/dnd/GtkMouseDragGestureRecognizer.java | 172 + .../awt/dnd/peer/gtk/GtkDragSourceContextPeer.java | 174 + .../awt/dnd/peer/gtk/GtkDropTargetContextPeer.java | 125 + .../java/awt/dnd/peer/gtk/GtkDropTargetPeer.java | 68 + .../gnu/java/awt/font/GNUGlyphVector.java | 2 +- .../gnu/java/awt/font/opentype/NameDecoder.java | 46 +- .../awt/font/opentype/truetype/VirtualMachine.java | 6 +- .../gnu/java/awt/java2d/AbstractGraphics2D.java | 1044 +- .../gnu/java/awt/java2d/AlphaCompositeContext.java | 2 +- .../gnu/java/awt/java2d/CubicSegment.java | 98 +- .../classpath/gnu/java/awt/java2d/ImagePaint.java | 192 + .../classpath/gnu/java/awt/java2d/LineSegment.java | 21 +- .../classpath/gnu/java/awt/java2d/PolyEdge.java | 11 +- .../classpath/gnu/java/awt/java2d/QuadSegment.java | 24 +- .../gnu/java/awt/java2d/RasterGraphics.java | 2 + libjava/classpath/gnu/java/awt/java2d/Segment.java | 37 +- .../gnu/java/awt/java2d/TexturePaintContext.java | 205 + .../gnu/java/awt/peer/ClasspathFontPeer.java | 7 +- .../gnu/java/awt/peer/ClasspathTextLayoutPeer.java | 104 - .../java/awt/peer/gtk/BufferedImageGraphics.java | 256 + .../gnu/java/awt/peer/gtk/CairoGraphics2D.java | 1810 + .../gnu/java/awt/peer/gtk/CairoSurface.java | 322 + .../java/awt/peer/gtk/CairoSurfaceGraphics.java | 94 + .../gnu/java/awt/peer/gtk/ComponentGraphics.java | 435 + .../java/awt/peer/gtk/ComponentGraphicsCopy.java | 123 + .../gnu/java/awt/peer/gtk/FreetypeGlyphVector.java | 504 + .../gnu/java/awt/peer/gtk/GdkFontPeer.java | 172 +- .../gnu/java/awt/peer/gtk/GdkGlyphVector.java | 359 - .../gnu/java/awt/peer/gtk/GdkGraphics.java | 496 - .../gnu/java/awt/peer/gtk/GdkGraphics2D.java | 1672 - .../awt/peer/gtk/GdkGraphicsConfiguration.java | 40 +- .../java/awt/peer/gtk/GdkGraphicsEnvironment.java | 75 +- .../gnu/java/awt/peer/gtk/GdkPixbufDecoder.java | 174 +- .../java/awt/peer/gtk/GdkScreenGraphicsDevice.java | 282 +- .../gnu/java/awt/peer/gtk/GdkTextLayout.java | 431 - .../gnu/java/awt/peer/gtk/GtkButtonPeer.java | 5 - .../gnu/java/awt/peer/gtk/GtkCanvasPeer.java | 5 +- .../java/awt/peer/gtk/GtkCheckboxGroupPeer.java | 86 - .../gnu/java/awt/peer/gtk/GtkCheckboxPeer.java | 167 +- .../java/awt/peer/gtk/GtkClipboardNotifier.java | 4 +- .../gnu/java/awt/peer/gtk/GtkComponentPeer.java | 123 +- .../gnu/java/awt/peer/gtk/GtkContainerPeer.java | 3 - .../gnu/java/awt/peer/gtk/GtkDialogPeer.java | 5 +- .../gnu/java/awt/peer/gtk/GtkFramePeer.java | 8 +- .../classpath/gnu/java/awt/peer/gtk/GtkImage.java | 275 +- .../gnu/java/awt/peer/gtk/GtkImageConsumer.java | 7 +- .../gnu/java/awt/peer/gtk/GtkLabelPeer.java | 8 +- .../gnu/java/awt/peer/gtk/GtkMenuBarPeer.java | 3 - .../gnu/java/awt/peer/gtk/GtkMenuItemPeer.java | 5 - .../gnu/java/awt/peer/gtk/GtkMouseInfoPeer.java | 76 + .../gnu/java/awt/peer/gtk/GtkPanelPeer.java | 3 +- .../gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java | 1 - .../gnu/java/awt/peer/gtk/GtkScrollbarPeer.java | 2 - .../gnu/java/awt/peer/gtk/GtkToolkit.java | 166 +- .../gnu/java/awt/peer/gtk/GtkVolatileImage.java | 94 +- .../gnu/java/awt/peer/gtk/GtkWindowPeer.java | 48 +- .../java/awt/peer/gtk/VolatileImageGraphics.java | 111 + .../gnu/java/awt/peer/qt/QtCheckboxPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtComponentGraphics.java | 4 +- .../gnu/java/awt/peer/qt/QtComponentPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtContainerPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtDialogPeer.java | 4 +- .../gnu/java/awt/peer/qt/QtEmbeddedWindowPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtFontMetrics.java | 5 +- .../classpath/gnu/java/awt/peer/qt/QtFontPeer.java | 3 +- .../classpath/gnu/java/awt/peer/qt/QtGraphics.java | 16 +- .../java/awt/peer/qt/QtGraphicsEnvironment.java | 3 +- .../classpath/gnu/java/awt/peer/qt/QtImage.java | 3 +- .../gnu/java/awt/peer/qt/QtImageConsumer.java | 7 +- .../java/awt/peer/qt/QtImageDirectGraphics.java | 21 +- .../gnu/java/awt/peer/qt/QtImageGraphics.java | 4 +- .../gnu/java/awt/peer/qt/QtMenuBarPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtMenuItemPeer.java | 3 +- .../gnu/java/awt/peer/qt/QtPopupMenuPeer.java | 5 +- .../awt/peer/qt/QtScreenDeviceConfiguration.java | 4 +- .../gnu/java/awt/peer/qt/QtScrollPanePeer.java | 3 +- .../classpath/gnu/java/awt/peer/qt/QtToolkit.java | 38 +- .../gnu/java/awt/peer/qt/QtVolatileImage.java | 6 +- .../gnu/java/awt/peer/swing/SwingComponent.java | 6 +- .../java/awt/peer/swing/SwingComponentPeer.java | 73 +- .../java/awt/peer/swing/SwingContainerPeer.java | 9 +- .../gnu/java/awt/peer/swing/SwingFramePeer.java | 6 +- .../gnu/java/awt/peer/swing/SwingMenuBarPeer.java | 2 +- .../java/awt/peer/swing/SwingTextFieldPeer.java | 2 +- .../gnu/java/awt/peer/swing/SwingWindowPeer.java | 6 +- .../classpath/gnu/java/awt/peer/x/GLGraphics.java | 123 + .../gnu/java/awt/peer/x/ImageConverter.java | 113 + .../gnu/java/awt/peer/x/KeyboardMapping.java | 415 + .../classpath/gnu/java/awt/peer/x/XDialogPeer.java | 61 + .../classpath/gnu/java/awt/peer/x/XEventPump.java | 287 + .../classpath/gnu/java/awt/peer/x/XFontPeer.java | 766 + .../classpath/gnu/java/awt/peer/x/XFontPeer2.java | 335 + .../classpath/gnu/java/awt/peer/x/XFramePeer.java | 140 + .../classpath/gnu/java/awt/peer/x/XGraphics.java | 792 + .../classpath/gnu/java/awt/peer/x/XGraphics2D.java | 295 + .../java/awt/peer/x/XGraphicsConfiguration.java | 118 + .../gnu/java/awt/peer/x/XGraphicsDevice.java | 166 + .../gnu/java/awt/peer/x/XGraphicsEnvironment.java | 202 + libjava/classpath/gnu/java/awt/peer/x/XImage.java | 111 + .../gnu/java/awt/peer/x/XLightweightPeer.java | 56 + .../classpath/gnu/java/awt/peer/x/XToolkit.java | 608 + .../classpath/gnu/java/awt/peer/x/XWindowPeer.java | 255 + .../gnu/java/awt/print/JavaPrinterGraphics.java | 518 + .../gnu/java/awt/print/JavaPrinterJob.java | 403 + .../gnu/java/awt/print/PostScriptGraphics2D.java | 1349 + .../gnu/java/awt/print/SpooledDocument.java | 91 + libjava/classpath/gnu/java/io/PlatformHelper.java | 94 +- .../gnu/java/lang/management/BeanImpl.java | 84 + .../lang/management/ClassLoadingMXBeanImpl.java | 99 + .../lang/management/CompilationMXBeanImpl.java | 105 + .../management/GarbageCollectorMXBeanImpl.java | 84 + .../gnu/java/lang/management/MemoryMXBeanImpl.java | 322 + .../lang/management/MemoryManagerMXBeanImpl.java | 112 + .../java/lang/management/MemoryPoolMXBeanImpl.java | 225 + .../lang/management/OperatingSystemMXBeanImpl.java | 90 + .../java/lang/management/RuntimeMXBeanImpl.java | 197 + .../gnu/java/lang/management/ThreadMXBeanImpl.java | 291 + .../gnu/java/lang/management/package.html | 46 + .../classpath/gnu/java/net/IndexListParser.java | 181 + .../gnu/java/net/loader/FileResource.java | 82 + .../gnu/java/net/loader/FileURLLoader.java | 145 + .../gnu/java/net/loader/JarURLLoader.java | 215 + .../gnu/java/net/loader/JarURLResource.java | 94 + .../gnu/java/net/loader/RemoteResource.java | 78 + .../gnu/java/net/loader/RemoteURLLoader.java | 101 + .../classpath/gnu/java/net/loader/Resource.java | 110 + .../classpath/gnu/java/net/loader/URLLoader.java | 147 + .../gnu/java/net/loader/URLStreamHandlerCache.java | 84 + .../classpath/gnu/java/net/local/LocalSocket.java | 5 +- .../gnu/java/net/local/LocalSocketImpl.java | 19 +- .../gnu/java/net/protocol/http/HTTPConnection.java | 5 +- .../java/net/protocol/http/HTTPURLConnection.java | 28 +- .../gnu/java/net/protocol/jar/Connection.java | 2 +- libjava/classpath/gnu/java/nio/PipeImpl.java | 32 +- .../classpath/gnu/java/nio/SelectionKeyImpl.java | 22 +- libjava/classpath/gnu/java/nio/SelectorImpl.java | 9 +- .../java/nio/SocketChannelSelectionKeyImpl.java | 69 + .../gnu/java/nio/channels/FileChannelImpl.java | 49 +- .../classpath/gnu/java/nio/charset/Provider.java | 30 +- .../gnu/java/rmi/server/ActivatableServerRef.java | 2 +- .../gnu/java/rmi/server/UnicastServerRef.java | 2 +- .../gnu/java/security/Configuration.java.in | 56 + libjava/classpath/gnu/java/security/Engine.java | 56 +- libjava/classpath/gnu/java/security/OID.java | 27 +- .../classpath/gnu/java/security/PolicyFile.java | 23 +- .../classpath/gnu/java/security/Properties.java | 160 +- libjava/classpath/gnu/java/security/Registry.java | 69 +- .../classpath/gnu/java/security/hash/BaseHash.java | 61 +- .../gnu/java/security/hash/HashFactory.java | 89 +- .../classpath/gnu/java/security/hash/Haval.java | 410 +- .../gnu/java/security/hash/IMessageDigest.java | 72 +- libjava/classpath/gnu/java/security/hash/MD2.java | 163 +- libjava/classpath/gnu/java/security/hash/MD4.java | 169 +- libjava/classpath/gnu/java/security/hash/MD5.java | 166 +- .../gnu/java/security/hash/RipeMD128.java | 148 +- .../gnu/java/security/hash/RipeMD160.java | 163 +- .../classpath/gnu/java/security/hash/Sha160.java | 141 +- .../classpath/gnu/java/security/hash/Sha256.java | 150 +- .../classpath/gnu/java/security/hash/Sha384.java | 203 +- .../classpath/gnu/java/security/hash/Sha512.java | 209 +- .../classpath/gnu/java/security/hash/Tiger.java | 1807 +- .../gnu/java/security/hash/Whirlpool.java | 177 +- .../gnu/java/security/jce/hash/HavalSpi.java | 20 +- .../gnu/java/security/jce/hash/MD2Spi.java | 20 +- .../gnu/java/security/jce/hash/MD4Spi.java | 20 +- .../gnu/java/security/jce/hash/MD5Spi.java | 18 +- .../security/jce/hash/MessageDigestAdapter.java | 50 +- .../gnu/java/security/jce/hash/RipeMD128Spi.java | 18 +- .../gnu/java/security/jce/hash/RipeMD160Spi.java | 18 +- .../gnu/java/security/jce/hash/Sha160Spi.java | 18 +- .../gnu/java/security/jce/hash/Sha256Spi.java | 20 +- .../gnu/java/security/jce/hash/Sha384Spi.java | 20 +- .../gnu/java/security/jce/hash/Sha512Spi.java | 20 +- .../gnu/java/security/jce/hash/TigerSpi.java | 20 +- .../gnu/java/security/jce/hash/WhirlpoolSpi.java | 18 +- .../gnu/java/security/jce/prng/HavalRandomSpi.java | 18 +- .../gnu/java/security/jce/prng/MD2RandomSpi.java | 18 +- .../gnu/java/security/jce/prng/MD4RandomSpi.java | 18 +- .../gnu/java/security/jce/prng/MD5RandomSpi.java | 18 +- .../java/security/jce/prng/RipeMD128RandomSpi.java | 20 +- .../java/security/jce/prng/RipeMD160RandomSpi.java | 18 +- .../security/jce/prng/SecureRandomAdapter.java | 53 +- .../java/security/jce/prng/Sha160RandomSpi.java | 18 +- .../java/security/jce/prng/Sha256RandomSpi.java | 20 +- .../java/security/jce/prng/Sha384RandomSpi.java | 20 +- .../java/security/jce/prng/Sha512RandomSpi.java | 20 +- .../gnu/java/security/jce/prng/TigerRandomSpi.java | 18 +- .../java/security/jce/prng/WhirlpoolRandomSpi.java | 18 +- .../gnu/java/security/jce/sig/DSSKeyFactory.java | 35 +- .../security/jce/sig/DSSKeyPairGeneratorSpi.java | 63 +- .../gnu/java/security/jce/sig/DSSParameters.java | 2 - .../java/security/jce/sig/DSSRawSignatureSpi.java | 22 +- .../java/security/jce/sig/EncodedKeyFactory.java | 97 +- .../security/jce/sig/KeyPairGeneratorAdapter.java | 44 +- .../gnu/java/security/jce/sig/RSAKeyFactory.java | 50 +- .../security/jce/sig/RSAKeyPairGeneratorSpi.java | 47 +- .../security/jce/sig/RSAPSSRawSignatureSpi.java | 21 +- .../java/security/jce/sig/SignatureAdapter.java | 75 +- .../gnu/java/security/key/IKeyPairCodec.java | 56 +- .../gnu/java/security/key/IKeyPairGenerator.java | 23 +- .../gnu/java/security/key/KeyPairCodecFactory.java | 2 - .../java/security/key/KeyPairGeneratorFactory.java | 61 +- .../gnu/java/security/key/dss/DSSKey.java | 128 +- .../java/security/key/dss/DSSKeyPairGenerator.java | 259 +- .../security/key/dss/DSSKeyPairPKCS8Codec.java | 20 +- .../java/security/key/dss/DSSKeyPairRawCodec.java | 250 +- .../java/security/key/dss/DSSKeyPairX509Codec.java | 98 +- .../gnu/java/security/key/dss/DSSPrivateKey.java | 78 +- .../gnu/java/security/key/dss/DSSPublicKey.java | 72 +- .../gnu/java/security/key/dss/FIPS186.java | 108 +- .../gnu/java/security/key/rsa/GnuRSAKey.java | 72 +- .../java/security/key/rsa/GnuRSAPrivateKey.java | 119 +- .../gnu/java/security/key/rsa/GnuRSAPublicKey.java | 74 +- .../java/security/key/rsa/RSAKeyPairGenerator.java | 110 +- .../security/key/rsa/RSAKeyPairPKCS8Codec.java | 58 +- .../java/security/key/rsa/RSAKeyPairRawCodec.java | 210 +- .../java/security/key/rsa/RSAKeyPairX509Codec.java | 21 +- .../gnu/java/security/pkcs/PKCS7SignedData.java | 66 +- .../gnu/java/security/pkcs/SignerInfo.java | 79 +- .../classpath/gnu/java/security/prng/BasePRNG.java | 39 +- .../gnu/java/security/prng/EntropySource.java | 1 - .../classpath/gnu/java/security/prng/IRandom.java | 156 +- .../java/security/prng/LimitReachedException.java | 18 +- .../gnu/java/security/prng/MDGenerator.java | 60 +- .../gnu/java/security/prng/PRNGFactory.java | 41 +- .../gnu/java/security/prng/RandomEvent.java | 11 +- .../java/security/prng/RandomEventListener.java | 8 +- .../classpath/gnu/java/security/provider/Gnu.java | 82 +- .../provider/PKIXCertPathValidatorImpl.java | 253 +- .../security/provider/X509CertificateFactory.java | 61 +- .../gnu/java/security/sig/BaseSignature.java | 98 +- .../gnu/java/security/sig/ISignature.java | 111 +- .../gnu/java/security/sig/ISignatureCodec.java | 11 +- .../gnu/java/security/sig/SignatureFactory.java | 24 +- .../gnu/java/security/sig/dss/DSSSignature.java | 204 +- .../security/sig/dss/DSSSignatureRawCodec.java | 105 +- .../gnu/java/security/sig/rsa/EME_PKCS1_V1_5.java | 142 +- .../gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java | 190 +- .../gnu/java/security/sig/rsa/EMSA_PSS.java | 267 +- .../classpath/gnu/java/security/sig/rsa/RSA.java | 182 +- .../security/sig/rsa/RSAPKCS1V1_5Signature.java | 145 +- .../gnu/java/security/sig/rsa/RSAPSSSignature.java | 219 +- .../security/sig/rsa/RSAPSSSignatureRawCodec.java | 79 +- .../classpath/gnu/java/security/util/Base64.java | 237 +- .../gnu/java/security/util/ByteArray.java | 109 + .../gnu/java/security/util/ExpirableObject.java | 70 +- .../gnu/java/security/util/IntegerUtil.java | 109 + libjava/classpath/gnu/java/security/util/PRNG.java | 31 +- .../classpath/gnu/java/security/util/Prime2.java | 417 - .../classpath/gnu/java/security/util/Sequence.java | 64 +- .../gnu/java/security/util/SimpleList.java | 50 +- libjava/classpath/gnu/java/security/util/Util.java | 353 +- libjava/classpath/gnu/java/security/x509/Util.java | 4 +- .../classpath/gnu/java/security/x509/X509CRL.java | 73 +- .../gnu/java/security/x509/X509CRLEntry.java | 41 +- .../gnu/java/security/x509/X509Certificate.java | 16 +- .../gnu/java/security/x509/ext/Extension.java | 26 +- .../gnu/java/security/x509/ext/GeneralNames.java | 5 +- .../gnu/java/util/prefs/EventDispatcher.java | 3 +- .../gnu/java/util/prefs/GConfBasedFactory.java | 78 + .../gnu/java/util/prefs/GConfBasedPreferences.java | 412 + .../classpath/gnu/java/util/prefs/NodeReader.java | 2 - .../classpath/gnu/java/util/prefs/NodeWriter.java | 3 - .../gnu/java/util/prefs/gconf/GConfNativePeer.java | 298 + .../gnu/java/util/regex/BacktrackStack.java | 112 + .../classpath/gnu/java/util/regex/CharIndexed.java | 116 + .../gnu/java/util/regex/CharIndexedCharArray.java | 46 + .../java/util/regex/CharIndexedCharSequence.java | 82 + .../java/util/regex/CharIndexedInputStream.java | 181 + .../gnu/java/util/regex/CharIndexedString.java | 44 + .../java/util/regex/CharIndexedStringBuffer.java | 45 + libjava/classpath/gnu/java/util/regex/RE.java | 2128 + .../classpath/gnu/java/util/regex/REException.java | 182 + .../gnu/java/util/regex/REFilterInputStream.java | 140 + libjava/classpath/gnu/java/util/regex/REMatch.java | 324 + .../gnu/java/util/regex/REMatchEnumeration.java | 135 + .../classpath/gnu/java/util/regex/RESyntax.java | 563 + libjava/classpath/gnu/java/util/regex/REToken.java | 189 + .../classpath/gnu/java/util/regex/RETokenAny.java | 99 + .../gnu/java/util/regex/RETokenBackRef.java | 86 + .../classpath/gnu/java/util/regex/RETokenChar.java | 128 + .../classpath/gnu/java/util/regex/RETokenEnd.java | 109 + .../java/util/regex/RETokenEndOfPreviousMatch.java | 72 + .../gnu/java/util/regex/RETokenEndSub.java | 66 + .../gnu/java/util/regex/RETokenIndependent.java | 78 + .../gnu/java/util/regex/RETokenLookAhead.java | 80 + .../gnu/java/util/regex/RETokenLookBehind.java | 118 + .../gnu/java/util/regex/RETokenNamedProperty.java | 315 + .../gnu/java/util/regex/RETokenOneOf.java | 280 + .../gnu/java/util/regex/RETokenPOSIX.java | 167 + .../gnu/java/util/regex/RETokenRange.java | 100 + .../gnu/java/util/regex/RETokenRepeated.java | 427 + .../gnu/java/util/regex/RETokenStart.java | 121 + .../gnu/java/util/regex/RETokenWordBoundary.java | 116 + .../classpath/gnu/java/util/regex/UncheckedRE.java | 109 + .../classpath/gnu/javax/crypto/RSACipherImpl.java | 211 +- .../gnu/javax/crypto/assembly/Assembly.java | 109 +- .../gnu/javax/crypto/assembly/Cascade.java | 203 +- .../gnu/javax/crypto/assembly/CascadeStage.java | 22 +- .../javax/crypto/assembly/CascadeTransformer.java | 24 +- .../javax/crypto/assembly/DeflateTransformer.java | 124 +- .../gnu/javax/crypto/assembly/Direction.java | 30 +- .../javax/crypto/assembly/LoopbackTransformer.java | 20 +- .../gnu/javax/crypto/assembly/ModeStage.java | 33 +- .../gnu/javax/crypto/assembly/Operation.java | 32 +- .../javax/crypto/assembly/PaddingTransformer.java | 52 +- .../classpath/gnu/javax/crypto/assembly/Stage.java | 103 +- .../gnu/javax/crypto/assembly/Transformer.java | 194 +- .../crypto/assembly/TransformerException.java | 58 +- .../classpath/gnu/javax/crypto/cipher/Anubis.java | 532 +- .../gnu/javax/crypto/cipher/BaseCipher.java | 127 +- .../gnu/javax/crypto/cipher/Blowfish.java | 1360 +- .../classpath/gnu/javax/crypto/cipher/Cast5.java | 2378 +- .../gnu/javax/crypto/cipher/CipherFactory.java | 96 +- libjava/classpath/gnu/javax/crypto/cipher/DES.java | 1546 +- .../gnu/javax/crypto/cipher/IBlockCipher.java | 130 +- .../gnu/javax/crypto/cipher/IBlockCipherSpi.java | 64 +- .../classpath/gnu/javax/crypto/cipher/Khazad.java | 450 +- .../gnu/javax/crypto/cipher/NullCipher.java | 45 +- .../gnu/javax/crypto/cipher/Rijndael.java | 1563 +- .../classpath/gnu/javax/crypto/cipher/Serpent.java | 249 +- .../classpath/gnu/javax/crypto/cipher/Square.java | 415 +- .../gnu/javax/crypto/cipher/TripleDES.java | 199 +- .../classpath/gnu/javax/crypto/cipher/Twofish.java | 678 +- .../gnu/javax/crypto/cipher/WeakKeyException.java | 22 +- .../gnu/javax/crypto/jce/DiffieHellmanImpl.java | 67 +- .../classpath/gnu/javax/crypto/jce/GnuCrypto.java | 182 +- .../classpath/gnu/javax/crypto/jce/GnuSasl.java | 94 +- .../javax/crypto/jce/PBKDF2SecretKeyFactory.java | 77 +- .../javax/crypto/jce/cipher/AES128KeyWrapSpi.java | 54 + .../javax/crypto/jce/cipher/AES192KeyWrapSpi.java | 54 + .../javax/crypto/jce/cipher/AES256KeyWrapSpi.java | 54 + .../gnu/javax/crypto/jce/cipher/AESKeyWrapSpi.java | 88 + .../gnu/javax/crypto/jce/cipher/AESSpi.java | 24 +- .../gnu/javax/crypto/jce/cipher/ARCFourSpi.java | 49 +- .../gnu/javax/crypto/jce/cipher/AnubisSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/BlowfishSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/Cast5Spi.java | 20 +- .../gnu/javax/crypto/jce/cipher/CipherAdapter.java | 285 +- .../gnu/javax/crypto/jce/cipher/DESSpi.java | 11 +- .../jce/cipher/KeyWrappingAlgorithmAdapter.java | 423 + .../gnu/javax/crypto/jce/cipher/KhazadSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/NullCipherSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/PBES2.java | 513 +- .../gnu/javax/crypto/jce/cipher/RijndaelSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/SerpentSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/SquareSpi.java | 7 +- .../crypto/jce/cipher/TripleDESKeyWrapSpi.java | 54 + .../gnu/javax/crypto/jce/cipher/TripleDESSpi.java | 7 +- .../gnu/javax/crypto/jce/cipher/TwofishSpi.java | 7 +- .../crypto/jce/key/AnubisKeyGeneratorImpl.java | 11 +- .../crypto/jce/key/AnubisSecretKeyFactoryImpl.java | 10 +- .../crypto/jce/key/BlowfishKeyGeneratorImpl.java | 11 +- .../jce/key/BlowfishSecretKeyFactoryImpl.java | 10 +- .../crypto/jce/key/Cast5KeyGeneratorImpl.java | 11 +- .../crypto/jce/key/Cast5SecretKeyFactoryImpl.java | 10 +- .../javax/crypto/jce/key/DESKeyGeneratorImpl.java | 31 +- .../crypto/jce/key/DESSecretKeyFactoryImpl.java | 28 +- .../crypto/jce/key/DESedeSecretKeyFactoryImpl.java | 28 +- .../crypto/jce/key/KhazadKeyGeneratorImpl.java | 12 +- .../crypto/jce/key/KhazadSecretKeyFactoryImpl.java | 11 +- .../crypto/jce/key/RijndaelKeyGeneratorImpl.java | 12 +- .../jce/key/RijndaelSecretKeyFactoryImpl.java | 11 +- .../javax/crypto/jce/key/SecretKeyFactoryImpl.java | 34 +- .../crypto/jce/key/SecretKeyGeneratorImpl.java | 58 +- .../crypto/jce/key/SerpentKeyGeneratorImpl.java | 12 +- .../jce/key/SerpentSecretKeyFactoryImpl.java | 11 +- .../crypto/jce/key/SquareKeyGeneratorImpl.java | 12 +- .../crypto/jce/key/SquareSecretKeyFactoryImpl.java | 11 +- .../crypto/jce/key/TripleDESKeyGeneratorImpl.java | 12 +- .../crypto/jce/key/TwofishKeyGeneratorImpl.java | 12 +- .../jce/key/TwofishSecretKeyFactoryImpl.java | 11 +- .../gnu/javax/crypto/jce/keyring/GnuKeyring.java | 266 +- .../gnu/javax/crypto/jce/mac/HMacHavalSpi.java | 21 +- .../gnu/javax/crypto/jce/mac/HMacMD2Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacMD4Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacMD5Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacSHA160Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacSHA256Spi.java | 21 +- .../gnu/javax/crypto/jce/mac/HMacSHA384Spi.java | 21 +- .../gnu/javax/crypto/jce/mac/HMacSHA512Spi.java | 21 +- .../gnu/javax/crypto/jce/mac/HMacTigerSpi.java | 7 +- .../gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java | 7 +- .../gnu/javax/crypto/jce/mac/MacAdapter.java | 44 +- .../gnu/javax/crypto/jce/mac/OMacAnubisImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacBlowfishImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacCast5Impl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacDESImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacImpl.java | 43 +- .../gnu/javax/crypto/jce/mac/OMacKhazadImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacRijndaelImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacSerpentImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacSquareImpl.java | 9 +- .../javax/crypto/jce/mac/OMacTripleDESImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/OMacTwofishImpl.java | 9 +- .../gnu/javax/crypto/jce/mac/TMMH16Spi.java | 16 +- .../gnu/javax/crypto/jce/mac/UHash32Spi.java | 7 +- .../gnu/javax/crypto/jce/mac/UMac32Spi.java | 22 +- .../crypto/jce/params/BlockCipherParameters.java | 146 +- .../crypto/jce/params/DEREncodingException.java | 5 +- .../gnu/javax/crypto/jce/params/DERReader.java | 35 +- .../gnu/javax/crypto/jce/params/DERWriter.java | 29 +- .../javax/crypto/jce/prng/ARCFourRandomSpi.java | 33 +- .../gnu/javax/crypto/jce/prng/CSPRNGSpi.java | 38 +- .../gnu/javax/crypto/jce/prng/FortunaImpl.java | 26 +- .../gnu/javax/crypto/jce/prng/ICMRandomSpi.java | 125 +- .../gnu/javax/crypto/jce/prng/UMacRandomSpi.java | 83 +- .../gnu/javax/crypto/jce/sig/DHKeyFactory.java | 29 +- .../crypto/jce/sig/DHKeyPairGeneratorSpi.java | 6 +- .../crypto/jce/spec/BlockCipherParameterSpec.java | 57 +- .../javax/crypto/jce/spec/TMMHParameterSpec.java | 40 +- .../javax/crypto/jce/spec/UMac32ParameterSpec.java | 25 +- .../javax/crypto/key/BaseKeyAgreementParty.java | 88 +- .../gnu/javax/crypto/key/GnuSecretKey.java | 48 +- .../gnu/javax/crypto/key/IKeyAgreementParty.java | 43 +- .../gnu/javax/crypto/key/IncomingMessage.java | 114 +- .../javax/crypto/key/KeyAgreementException.java | 107 +- .../gnu/javax/crypto/key/KeyAgreementFactory.java | 88 +- .../gnu/javax/crypto/key/OutgoingMessage.java | 79 +- .../javax/crypto/key/dh/DHKeyPairPKCS8Codec.java | 11 + .../gnu/javax/crypto/key/dh/DHKeyPairRawCodec.java | 286 +- .../javax/crypto/key/dh/DHKeyPairX509Codec.java | 11 + .../crypto/key/dh/DiffieHellmanKeyAgreement.java | 91 +- .../javax/crypto/key/dh/DiffieHellmanReceiver.java | 50 +- .../javax/crypto/key/dh/DiffieHellmanSender.java | 51 +- .../javax/crypto/key/dh/ElGamalKeyAgreement.java | 91 +- .../gnu/javax/crypto/key/dh/ElGamalReceiver.java | 36 +- .../gnu/javax/crypto/key/dh/ElGamalSender.java | 34 +- .../gnu/javax/crypto/key/dh/GnuDHKey.java | 106 +- .../javax/crypto/key/dh/GnuDHKeyPairGenerator.java | 120 +- .../gnu/javax/crypto/key/dh/GnuDHPrivateKey.java | 86 +- .../gnu/javax/crypto/key/dh/GnuDHPublicKey.java | 82 +- .../classpath/gnu/javax/crypto/key/dh/RFC2631.java | 98 +- .../gnu/javax/crypto/key/srp6/SRP6Host.java | 82 +- .../javax/crypto/key/srp6/SRP6KeyAgreement.java | 113 +- .../gnu/javax/crypto/key/srp6/SRP6SaslClient.java | 53 +- .../gnu/javax/crypto/key/srp6/SRP6SaslServer.java | 53 +- .../gnu/javax/crypto/key/srp6/SRP6TLSClient.java | 62 +- .../gnu/javax/crypto/key/srp6/SRP6TLSServer.java | 69 +- .../gnu/javax/crypto/key/srp6/SRP6User.java | 72 +- .../gnu/javax/crypto/key/srp6/SRPAlgorithm.java | 306 +- .../gnu/javax/crypto/key/srp6/SRPKey.java | 79 +- .../javax/crypto/key/srp6/SRPKeyPairGenerator.java | 127 +- .../javax/crypto/key/srp6/SRPKeyPairRawCodec.java | 292 +- .../gnu/javax/crypto/key/srp6/SRPPrivateKey.java | 129 +- .../gnu/javax/crypto/key/srp6/SRPPublicKey.java | 95 +- .../javax/crypto/keyring/AuthenticatedEntry.java | 108 +- .../gnu/javax/crypto/keyring/BaseKeyring.java | 78 +- .../gnu/javax/crypto/keyring/BinaryDataEntry.java | 39 +- .../gnu/javax/crypto/keyring/CertPathEntry.java | 31 +- .../gnu/javax/crypto/keyring/CertificateEntry.java | 42 +- .../gnu/javax/crypto/keyring/CompressedEntry.java | 34 +- .../gnu/javax/crypto/keyring/EncryptedEntry.java | 90 +- .../classpath/gnu/javax/crypto/keyring/Entry.java | 81 +- .../gnu/javax/crypto/keyring/EnvelopeEntry.java | 275 +- .../javax/crypto/keyring/GnuPrivateKeyring.java | 185 +- .../gnu/javax/crypto/keyring/GnuPublicKeyring.java | 69 +- .../gnu/javax/crypto/keyring/IKeyring.java | 102 +- .../gnu/javax/crypto/keyring/IPrivateKeyring.java | 76 +- .../gnu/javax/crypto/keyring/IPublicKeyring.java | 35 +- .../crypto/keyring/MalformedKeyringException.java | 7 +- .../crypto/keyring/MaskableEnvelopeEntry.java | 57 +- .../javax/crypto/keyring/MeteredInputStream.java | 18 +- .../crypto/keyring/PasswordAuthenticatedEntry.java | 203 +- .../crypto/keyring/PasswordEncryptedEntry.java | 174 +- .../crypto/keyring/PasswordProtectedEntry.java | 15 +- .../gnu/javax/crypto/keyring/PrimitiveEntry.java | 41 +- .../gnu/javax/crypto/keyring/PrivateKeyEntry.java | 79 +- .../gnu/javax/crypto/keyring/Properties.java | 68 +- .../gnu/javax/crypto/keyring/PublicKeyEntry.java | 62 +- .../classpath/gnu/javax/crypto/kwa/AESKeyWrap.java | 168 + .../javax/crypto/kwa/BaseKeyWrappingAlgorithm.java | 145 + .../javax/crypto/kwa/IKeyWrappingAlgorithm.java | 160 + .../javax/crypto/kwa/KeyUnwrappingException.java | 67 + .../crypto/kwa/KeyWrappingAlgorithmFactory.java | 110 + .../gnu/javax/crypto/kwa/TripleDESKeyWrap.java | 292 + .../classpath/gnu/javax/crypto/mac/BaseMac.java | 43 +- libjava/classpath/gnu/javax/crypto/mac/HMac.java | 195 +- .../gnu/javax/crypto/mac/HMacFactory.java | 65 +- libjava/classpath/gnu/javax/crypto/mac/IMac.java | 154 +- .../classpath/gnu/javax/crypto/mac/MacFactory.java | 78 +- .../gnu/javax/crypto/mac/MacInputStream.java | 42 +- .../gnu/javax/crypto/mac/MacOutputStream.java | 59 +- libjava/classpath/gnu/javax/crypto/mac/OMAC.java | 211 +- libjava/classpath/gnu/javax/crypto/mac/TMMH16.java | 195 +- .../classpath/gnu/javax/crypto/mac/UHash32.java | 499 +- libjava/classpath/gnu/javax/crypto/mac/UMac32.java | 287 +- .../classpath/gnu/javax/crypto/mode/BaseMode.java | 153 +- libjava/classpath/gnu/javax/crypto/mode/CBC.java | 62 +- libjava/classpath/gnu/javax/crypto/mode/CFB.java | 116 +- libjava/classpath/gnu/javax/crypto/mode/CTR.java | 127 +- libjava/classpath/gnu/javax/crypto/mode/EAX.java | 127 +- libjava/classpath/gnu/javax/crypto/mode/ECB.java | 74 +- .../gnu/javax/crypto/mode/IAuthenticatedMode.java | 18 +- libjava/classpath/gnu/javax/crypto/mode/ICM.java | 139 +- libjava/classpath/gnu/javax/crypto/mode/IMode.java | 114 +- .../gnu/javax/crypto/mode/ModeFactory.java | 95 +- libjava/classpath/gnu/javax/crypto/mode/OFB.java | 128 +- .../classpath/gnu/javax/crypto/pad/BasePad.java | 148 +- libjava/classpath/gnu/javax/crypto/pad/IPad.java | 63 +- .../classpath/gnu/javax/crypto/pad/ISO10126.java | 109 + .../classpath/gnu/javax/crypto/pad/PKCS1_V1_5.java | 90 +- libjava/classpath/gnu/javax/crypto/pad/PKCS7.java | 260 +- .../classpath/gnu/javax/crypto/pad/PadFactory.java | 87 +- libjava/classpath/gnu/javax/crypto/pad/SSL3.java | 44 +- libjava/classpath/gnu/javax/crypto/pad/TBC.java | 104 +- libjava/classpath/gnu/javax/crypto/pad/TLS1.java | 52 +- .../javax/crypto/pad/WrongPaddingException.java | 21 +- .../classpath/gnu/javax/crypto/prng/ARCFour.java | 88 +- .../classpath/gnu/javax/crypto/prng/CSPRNG.java | 1019 +- .../classpath/gnu/javax/crypto/prng/Fortuna.java | 110 +- .../gnu/javax/crypto/prng/ICMGenerator.java | 252 +- .../classpath/gnu/javax/crypto/prng/PBKDF2.java | 103 +- .../gnu/javax/crypto/prng/PRNGFactory.java | 66 +- .../gnu/javax/crypto/prng/UMacGenerator.java | 136 +- .../classpath/gnu/javax/crypto/sasl/AuthInfo.java | 40 +- .../javax/crypto/sasl/AuthInfoProviderFactory.java | 34 +- .../gnu/javax/crypto/sasl/ClientFactory.java | 86 +- .../gnu/javax/crypto/sasl/ClientMechanism.java | 150 +- .../crypto/sasl/ConfidentialityException.java | 12 +- .../gnu/javax/crypto/sasl/IAuthInfoProvider.java | 59 +- .../crypto/sasl/IAuthInfoProviderFactory.java | 17 +- .../sasl/IllegalMechanismStateException.java | 8 +- .../gnu/javax/crypto/sasl/InputBuffer.java | 211 +- .../gnu/javax/crypto/sasl/IntegrityException.java | 10 +- .../crypto/sasl/NoSuchMechanismException.java | 10 +- .../gnu/javax/crypto/sasl/NoSuchUserException.java | 10 +- .../gnu/javax/crypto/sasl/OutputBuffer.java | 113 +- .../javax/crypto/sasl/SaslEncodingException.java | 8 +- .../gnu/javax/crypto/sasl/SaslInputStream.java | 316 +- .../gnu/javax/crypto/sasl/SaslOutputStream.java | 123 +- .../classpath/gnu/javax/crypto/sasl/SaslUtil.java | 16 +- .../gnu/javax/crypto/sasl/ServerFactory.java | 76 +- .../gnu/javax/crypto/sasl/ServerMechanism.java | 157 +- .../crypto/sasl/UserAlreadyExistsException.java | 6 +- .../crypto/sasl/anonymous/AnonymousClient.java | 36 +- .../crypto/sasl/anonymous/AnonymousServer.java | 27 +- .../javax/crypto/sasl/anonymous/AnonymousUtil.java | 44 +- .../sasl/crammd5/CramMD5AuthInfoProvider.java | 62 +- .../javax/crypto/sasl/crammd5/CramMD5Client.java | 63 +- .../javax/crypto/sasl/crammd5/CramMD5Registry.java | 8 +- .../javax/crypto/sasl/crammd5/CramMD5Server.java | 51 +- .../gnu/javax/crypto/sasl/crammd5/CramMD5Util.java | 33 +- .../javax/crypto/sasl/crammd5/PasswordFile.java | 121 +- .../gnu/javax/crypto/sasl/plain/PasswordFile.java | 150 +- .../crypto/sasl/plain/PlainAuthInfoProvider.java | 72 +- .../gnu/javax/crypto/sasl/plain/PlainClient.java | 73 +- .../gnu/javax/crypto/sasl/plain/PlainRegistry.java | 12 +- .../gnu/javax/crypto/sasl/plain/PlainServer.java | 83 +- .../classpath/gnu/javax/crypto/sasl/srp/CALG.java | 173 +- .../gnu/javax/crypto/sasl/srp/ClientStore.java | 66 +- .../classpath/gnu/javax/crypto/sasl/srp/IALG.java | 49 +- .../classpath/gnu/javax/crypto/sasl/srp/KDF.java | 69 +- .../gnu/javax/crypto/sasl/srp/PasswordFile.java | 308 +- .../classpath/gnu/javax/crypto/sasl/srp/SRP.java | 94 +- .../javax/crypto/sasl/srp/SRPAuthInfoProvider.java | 77 +- .../gnu/javax/crypto/sasl/srp/SRPClient.java | 795 +- .../gnu/javax/crypto/sasl/srp/SRPRegistry.java | 80 +- .../gnu/javax/crypto/sasl/srp/SRPServer.java | 814 +- .../gnu/javax/crypto/sasl/srp/SecurityContext.java | 28 +- .../gnu/javax/crypto/sasl/srp/ServerStore.java | 73 +- .../gnu/javax/crypto/sasl/srp/StoreEntry.java | 24 +- .../gnu/javax/imageio/IIOInputStream.java | 102 + .../classpath/gnu/javax/imageio/gif/GIFFile.java | 709 + .../gnu/javax/imageio/gif/GIFImageReader.java | 241 + .../gnu/javax/imageio/gif/GIFImageReaderSpi.java | 124 + libjava/classpath/gnu/javax/imageio/jpeg/DCT.java | 347 + .../gnu/javax/imageio/jpeg/HuffmanTable.java | 207 + .../gnu/javax/imageio/jpeg/JPEGComponent.java | 351 + .../gnu/javax/imageio/jpeg/JPEGDecoder.java | 630 + .../gnu/javax/imageio/jpeg/JPEGException.java | 55 + .../gnu/javax/imageio/jpeg/JPEGFrame.java | 108 + .../javax/imageio/jpeg/JPEGImageInputStream.java | 195 + .../gnu/javax/imageio/jpeg/JPEGImageReader.java | 141 + .../gnu/javax/imageio/jpeg/JPEGImageReaderSpi.java | 137 + .../gnu/javax/imageio/jpeg/JPEGMarker.java | 205 + .../imageio/jpeg/JPEGMarkerFoundException.java | 50 + .../classpath/gnu/javax/imageio/jpeg/JPEGScan.java | 151 + .../gnu/javax/imageio/jpeg/YCbCr_ColorSpace.java | 113 + .../classpath/gnu/javax/imageio/jpeg/ZigZag.java | 520 + .../classpath/gnu/javax/imageio/png/PNGChunk.java | 284 + .../classpath/gnu/javax/imageio/png/PNGData.java | 104 + .../gnu/javax/imageio/png/PNGDecoder.java | 331 + .../gnu/javax/imageio/png/PNGEncoder.java | 235 + .../gnu/javax/imageio/png/PNGException.java | 48 + .../classpath/gnu/javax/imageio/png/PNGFile.java | 258 + .../classpath/gnu/javax/imageio/png/PNGFilter.java | 237 + .../classpath/gnu/javax/imageio/png/PNGGamma.java | 89 + .../classpath/gnu/javax/imageio/png/PNGHeader.java | 257 + .../gnu/javax/imageio/png/PNGICCProfile.java | 114 + .../gnu/javax/imageio/png/PNGImageReader.java | 224 + .../gnu/javax/imageio/png/PNGImageReaderSpi.java | 128 + .../gnu/javax/imageio/png/PNGPalette.java | 127 + .../classpath/gnu/javax/imageio/png/PNGPhys.java | 112 + .../classpath/gnu/javax/imageio/png/PNGTime.java | 83 + .../gnu/javax/net/ssl/provider/KeyPool.java | 13 +- libjava/classpath/gnu/javax/print/CupsServer.java | 31 +- .../classpath/gnu/javax/print/ipp/IppRequest.java | 16 +- .../auth/callback/ConsoleCallbackHandler.java | 2 +- .../security/auth/login/ConfigFileParser.java | 72 +- .../security/auth/login/ConfigFileTokenizer.java | 21 +- .../security/auth/login/GnuConfiguration.java | 100 +- .../sound/midi/file/ExtendedMidiFileFormat.java | 77 + .../javax/sound/midi/file/MidiDataInputStream.java | 83 + .../sound/midi/file/MidiDataOutputStream.java | 114 + .../gnu/javax/sound/midi/file/MidiFileReader.java | 378 + .../gnu/javax/sound/midi/file/MidiFileWriter.java | 199 + .../gnu/javax/sound/sampled/AU/AUReader.java | 212 + .../gnu/javax/sound/sampled/WAV/WAVReader.java | 236 + .../gnu/javax/swing/plaf/gnu/GNULookAndFeel.java | 1 + .../text/html/CharacterAttributeTranslator.java | 192 + .../javax/swing/text/html/CombinedAttributes.java | 213 + .../swing/text/html/ImageViewIconFactory.java | 282 + .../swing/text/html/parser/GnuParserDelegator.java | 178 + .../javax/swing/text/html/parser/HTML_401F.java | 47 +- .../swing/text/html/parser/HTML_401Swing.java | 91 + .../text/html/parser/SmallHtmlAttributeSet.java | 261 + .../swing/text/html/parser/htmlAttributeSet.java | 98 +- .../swing/text/html/parser/htmlValidator.java | 39 +- libjava/classpath/gnu/regexp/BacktrackStack.java | 112 - libjava/classpath/gnu/regexp/CharIndexed.java | 116 - .../classpath/gnu/regexp/CharIndexedCharArray.java | 46 - .../gnu/regexp/CharIndexedCharSequence.java | 82 - .../gnu/regexp/CharIndexedInputStream.java | 181 - .../classpath/gnu/regexp/CharIndexedString.java | 44 - .../gnu/regexp/CharIndexedStringBuffer.java | 45 - libjava/classpath/gnu/regexp/RE.java | 2102 - libjava/classpath/gnu/regexp/REException.java | 182 - .../classpath/gnu/regexp/REFilterInputStream.java | 140 - libjava/classpath/gnu/regexp/REMatch.java | 324 - .../classpath/gnu/regexp/REMatchEnumeration.java | 135 - libjava/classpath/gnu/regexp/RESyntax.java | 563 - libjava/classpath/gnu/regexp/REToken.java | 189 - libjava/classpath/gnu/regexp/RETokenAny.java | 99 - libjava/classpath/gnu/regexp/RETokenBackRef.java | 86 - libjava/classpath/gnu/regexp/RETokenChar.java | 128 - libjava/classpath/gnu/regexp/RETokenEnd.java | 89 - .../gnu/regexp/RETokenEndOfPreviousMatch.java | 72 - libjava/classpath/gnu/regexp/RETokenEndSub.java | 66 - .../classpath/gnu/regexp/RETokenIndependent.java | 78 - libjava/classpath/gnu/regexp/RETokenLookAhead.java | 80 - .../classpath/gnu/regexp/RETokenLookBehind.java | 118 - .../classpath/gnu/regexp/RETokenNamedProperty.java | 315 - libjava/classpath/gnu/regexp/RETokenOneOf.java | 280 - libjava/classpath/gnu/regexp/RETokenPOSIX.java | 167 - libjava/classpath/gnu/regexp/RETokenRange.java | 100 - libjava/classpath/gnu/regexp/RETokenRepeated.java | 427 - libjava/classpath/gnu/regexp/RETokenStart.java | 98 - .../classpath/gnu/regexp/RETokenWordBoundary.java | 116 - libjava/classpath/gnu/regexp/UncheckedRE.java | 109 - libjava/classpath/gnu/xml/dom/DomIterator.java | 14 +- libjava/classpath/gnu/xml/stream/SAXParser.java | 54 +- libjava/classpath/gnu/xml/stream/XMLParser.java | 261 +- .../gnu/xml/transform/ApplyTemplatesNode.java | 2 +- .../classpath/gnu/xml/transform/ForEachNode.java | 2 +- .../gnu/xml/transform/TransformerImpl.java | 19 +- .../classpath/include/GtkDragSourceContextPeer.h | 23 + libjava/classpath/include/Makefile.am | 27 +- libjava/classpath/include/Makefile.in | 79 +- libjava/classpath/include/config.h.in | 32 +- .../gnu_java_awt_peer_gtk_CairoGraphics2D.h | 52 + .../include/gnu_java_awt_peer_gtk_CairoSurface.h | 28 + .../gnu_java_awt_peer_gtk_ComponentGraphics.h | 27 + .../gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h | 20 + .../gnu_java_awt_peer_gtk_FreetypeGlyphVector.h | 22 + .../include/gnu_java_awt_peer_gtk_GdkFontPeer.h | 5 +- .../include/gnu_java_awt_peer_gtk_GdkGraphics.h | 47 - .../include/gnu_java_awt_peer_gtk_GdkGraphics2D.h | 67 - .../gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h | 5 + ...gnu_java_awt_peer_gtk_GdkScreenGraphicsDevice.h | 26 + .../include/gnu_java_awt_peer_gtk_GdkTextLayout.h | 25 - .../include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h | 1 - .../gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h | 20 - .../gnu_java_awt_peer_gtk_GtkCheckboxPeer.h | 7 +- .../gnu_java_awt_peer_gtk_GtkComponentPeer.h | 4 +- .../include/gnu_java_awt_peer_gtk_GtkImage.h | 9 +- .../include/gnu_java_awt_peer_gtk_GtkLabelPeer.h | 2 +- .../include/gnu_java_awt_peer_gtk_GtkToolkit.h | 1 + .../gnu_java_awt_peer_gtk_GtkVolatileImage.h | 23 + .../include/gnu_java_awt_peer_gtk_GtkWindowPeer.h | 2 + .../include/gnu_java_net_local_LocalSocketImpl.h | 6 +- libjava/classpath/include/gnu_java_nio_VMChannel.h | 24 + .../gnu_java_util_prefs_gconf_GConfNativePeer.h | 30 + libjava/classpath/include/java_io_VMFile.h | 1 + libjava/classpath/include/java_lang_VMSystem.h | 2 +- .../classpath/include/java_net_VMURLConnection.h | 22 + libjava/classpath/include/jni.h | 41 +- libjava/classpath/include/jvmti.h | 1819 + libjava/classpath/java/awt/AWTEvent.java | 5 + libjava/classpath/java/awt/BasicStroke.java | 125 +- libjava/classpath/java/awt/Canvas.java | 20 + libjava/classpath/java/awt/CardLayout.java | 1 + libjava/classpath/java/awt/CheckboxMenuItem.java | 20 + libjava/classpath/java/awt/Choice.java | 20 + libjava/classpath/java/awt/ColorPaintContext.java | 12 +- libjava/classpath/java/awt/Component.java | 1087 +- libjava/classpath/java/awt/Container.java | 374 +- .../awt/ContainerOrderFocusTraversalPolicy.java | 197 +- libjava/classpath/java/awt/Cursor.java | 15 +- .../java/awt/DefaultKeyboardFocusManager.java | 150 +- .../classpath/java/awt/EventDispatchThread.java | 34 +- libjava/classpath/java/awt/FileDialog.java | 52 + libjava/classpath/java/awt/FlowLayout.java | 10 +- libjava/classpath/java/awt/Font.java | 41 +- libjava/classpath/java/awt/Graphics2D.java | 220 +- .../classpath/java/awt/GraphicsConfiguration.java | 21 +- libjava/classpath/java/awt/GridBagConstraints.java | 139 +- libjava/classpath/java/awt/GridBagLayout.java | 116 +- libjava/classpath/java/awt/GridLayout.java | 12 +- libjava/classpath/java/awt/Image.java | 38 +- libjava/classpath/java/awt/Insets.java | 7 +- .../classpath/java/awt/KeyboardFocusManager.java | 92 +- libjava/classpath/java/awt/Label.java | 614 +- .../classpath/java/awt/LightweightDispatcher.java | 173 +- libjava/classpath/java/awt/List.java | 38 +- libjava/classpath/java/awt/Menu.java | 20 + libjava/classpath/java/awt/MenuBar.java | 22 +- libjava/classpath/java/awt/MenuComponent.java | 14 + libjava/classpath/java/awt/MenuItem.java | 25 +- libjava/classpath/java/awt/MouseInfo.java | 95 + libjava/classpath/java/awt/Point.java | 13 +- libjava/classpath/java/awt/PointerInfo.java | 84 + libjava/classpath/java/awt/PopupMenu.java | 24 +- libjava/classpath/java/awt/ScrollPane.java | 32 +- libjava/classpath/java/awt/Shape.java | 12 +- libjava/classpath/java/awt/TextArea.java | 64 +- libjava/classpath/java/awt/TextComponent.java | 680 +- libjava/classpath/java/awt/TextField.java | 1022 +- libjava/classpath/java/awt/TexturePaint.java | 55 +- libjava/classpath/java/awt/Toolkit.java | 23 +- libjava/classpath/java/awt/Window.java | 102 +- .../classpath/java/awt/datatransfer/Clipboard.java | 8 +- .../java/awt/datatransfer/DataFlavor.java | 121 +- .../classpath/java/awt/dnd/DragGestureEvent.java | 97 +- .../java/awt/dnd/DragGestureRecognizer.java | 14 +- libjava/classpath/java/awt/dnd/DragSource.java | 124 +- .../classpath/java/awt/dnd/DragSourceContext.java | 191 +- libjava/classpath/java/awt/dnd/DropTarget.java | 70 +- .../classpath/java/awt/dnd/DropTargetContext.java | 78 +- .../java/awt/dnd/DropTargetDragEvent.java | 17 +- .../java/awt/dnd/DropTargetDropEvent.java | 52 +- .../java/awt/dnd/InvalidDnDOperationException.java | 1 + libjava/classpath/java/awt/event/KeyEvent.java | 21 + .../classpath/java/awt/font/FontRenderContext.java | 10 +- libjava/classpath/java/awt/font/GlyphMetrics.java | 16 +- libjava/classpath/java/awt/font/GlyphVector.java | 61 +- .../classpath/java/awt/font/GraphicAttribute.java | 91 +- .../java/awt/font/ImageGraphicAttribute.java | 140 +- .../classpath/java/awt/font/LineBreakMeasurer.java | 124 +- .../java/awt/font/ShapeGraphicAttribute.java | 128 +- libjava/classpath/java/awt/font/TextLayout.java | 581 +- libjava/classpath/java/awt/font/TextMeasurer.java | 149 +- .../classpath/java/awt/geom/AffineTransform.java | 4 +- libjava/classpath/java/awt/geom/GeneralPath.java | 8 +- libjava/classpath/java/awt/im/InputContext.java | 4 +- .../java/awt/image/BandedSampleModel.java | 342 +- .../classpath/java/awt/image/BufferedImage.java | 88 +- .../classpath/java/awt/image/BufferedImageOp.java | 58 +- .../classpath/java/awt/image/ByteLookupTable.java | 17 +- .../classpath/java/awt/image/ColorConvertOp.java | 15 +- libjava/classpath/java/awt/image/ColorModel.java | 90 +- .../java/awt/image/ComponentSampleModel.java | 13 +- libjava/classpath/java/awt/image/ConvolveOp.java | 178 +- libjava/classpath/java/awt/image/DataBuffer.java | 23 +- libjava/classpath/java/awt/image/Kernel.java | 62 +- .../awt/image/MultiPixelPackedSampleModel.java | 458 +- libjava/classpath/java/awt/image/PixelGrabber.java | 7 +- libjava/classpath/java/awt/image/Raster.java | 780 +- libjava/classpath/java/awt/image/RasterOp.java | 50 +- libjava/classpath/java/awt/image/SampleModel.java | 461 +- .../classpath/java/awt/image/ShortLookupTable.java | 39 +- .../awt/image/SinglePixelPackedSampleModel.java | 307 +- .../classpath/java/awt/image/WritableRaster.java | 346 +- libjava/classpath/java/awt/peer/ComponentPeer.java | 33 +- libjava/classpath/java/awt/peer/MouseInfoPeer.java | 61 + libjava/classpath/java/awt/peer/WindowPeer.java | 5 +- libjava/classpath/java/awt/print/PrinterJob.java | 29 +- .../java/beans/VetoableChangeSupport.java | 16 +- .../java/beans/beancontext/BeanContextSupport.java | 291 +- libjava/classpath/java/io/File.java | 46 +- libjava/classpath/java/io/FilePermission.java | 7 +- libjava/classpath/java/io/ObjectInputStream.java | 18 +- libjava/classpath/java/io/ObjectOutputStream.java | 17 +- libjava/classpath/java/io/ObjectStreamClass.java | 11 +- .../classpath/java/io/ObjectStreamConstants.java | 126 +- libjava/classpath/java/io/OutputStream.java | 4 +- libjava/classpath/java/io/PrintStream.java | 76 +- libjava/classpath/java/lang/Iterable.java | 3 +- libjava/classpath/java/lang/SecurityManager.java | 4 +- libjava/classpath/java/lang/StrictMath.java | 498 +- libjava/classpath/java/lang/String.java | 2 +- libjava/classpath/java/lang/System.java | 31 + libjava/classpath/java/lang/Thread.java | 184 +- libjava/classpath/java/lang/ThreadGroup.java | 41 +- .../annotation/IncompleteAnnotationException.java | 106 + .../java/lang/management/ClassLoadingMXBean.java | 103 + .../java/lang/management/CompilationMXBean.java | 85 + .../lang/management/GarbageCollectorMXBean.java | 79 + .../java/lang/management/ManagementFactory.java | 331 + .../java/lang/management/ManagementPermission.java | 132 + .../java/lang/management/MemoryMXBean.java | 172 + .../java/lang/management/MemoryManagerMXBean.java | 77 + .../lang/management/MemoryNotificationInfo.java | 215 + .../java/lang/management/MemoryPoolMXBean.java | 318 + .../java/lang/management/MemoryUsage.java | 265 + .../lang/management/OperatingSystemMXBean.java | 103 + .../java/lang/management/RuntimeMXBean.java | 278 + .../classpath/java/lang/management/ThreadInfo.java | 704 + .../java/lang/management/ThreadMXBean.java | 497 + .../classpath/java/lang/management/package.html | 64 + libjava/classpath/java/math/BigDecimal.java | 1077 +- libjava/classpath/java/math/BigInteger.java | 2 +- libjava/classpath/java/math/MathContext.java | 144 + libjava/classpath/java/net/Inet6Address.java | 171 +- libjava/classpath/java/net/InetSocketAddress.java | 9 +- libjava/classpath/java/net/SocketPermission.java | 61 +- libjava/classpath/java/net/URL.java | 15 +- libjava/classpath/java/net/URLClassLoader.java | 758 +- libjava/classpath/java/net/URLConnection.java | 47 +- libjava/classpath/java/net/URLStreamHandler.java | 21 +- libjava/classpath/java/nio/CharBuffer.java | 12 +- .../classpath/java/nio/DirectByteBufferImpl.java | 1 + .../classpath/java/nio/channels/FileChannel.java | 14 +- .../classpath/java/nio/channels/SelectionKey.java | 6 +- .../nio/channels/spi/AbstractSelectionKey.java | 6 +- libjava/classpath/java/rmi/server/UID.java | 30 +- libjava/classpath/java/security/Provider.java | 92 +- libjava/classpath/java/security/SecureRandom.java | 9 +- .../java/security/UnresolvedPermission.java | 41 + .../java/security/cert/X509CertSelector.java | 4 +- libjava/classpath/java/text/AttributedString.java | 11 +- libjava/classpath/java/text/Bidi.java | 3 +- libjava/classpath/java/text/NumberFormat.java | 2 +- libjava/classpath/java/text/SimpleDateFormat.java | 2 +- .../classpath/java/text/class-dependencies.conf | 220 + libjava/classpath/java/util/Arrays.java | 22 +- libjava/classpath/java/util/Calendar.java | 1 + libjava/classpath/java/util/Collections.java | 181 +- .../java/util/DuplicateFormatFlagsException.java | 88 + .../FormatFlagsConversionMismatchException.java | 111 + libjava/classpath/java/util/Formattable.java | 92 + libjava/classpath/java/util/FormattableFlags.java | 123 + libjava/classpath/java/util/Formatter.java | 1294 + .../java/util/FormatterClosedException.java | 60 + libjava/classpath/java/util/GregorianCalendar.java | 4 +- .../java/util/IllegalFormatCodePointException.java | 85 + .../util/IllegalFormatConversionException.java | 110 + .../java/util/IllegalFormatException.java | 75 + .../java/util/IllegalFormatFlagsException.java | 86 + .../java/util/IllegalFormatPrecisionException.java | 85 + .../java/util/IllegalFormatWidthException.java | 84 + .../java/util/InputMismatchException.java | 73 + .../java/util/MissingFormatArgumentException.java | 90 + .../java/util/MissingFormatWidthException.java | 88 + libjava/classpath/java/util/UUID.java | 383 + .../util/UnknownFormatConversionException.java | 86 + .../java/util/UnknownFormatFlagsException.java | 88 + libjava/classpath/java/util/Vector.java | 6 +- .../classpath/java/util/jar/JarOutputStream.java | 2 +- libjava/classpath/java/util/jar/Manifest.java | 4 +- .../classpath/java/util/logging/FileHandler.java | 75 +- .../classpath/java/util/logging/LogManager.java | 82 +- libjava/classpath/java/util/logging/Logger.java | 2 +- .../classpath/java/util/logging/LoggingMXBean.java | 85 + libjava/classpath/java/util/prefs/Preferences.java | 13 + libjava/classpath/java/util/regex/Matcher.java | 6 +- libjava/classpath/java/util/regex/Pattern.java | 14 +- libjava/classpath/java/util/zip/ZipFile.java | 42 +- .../javax/accessibility/AccessibleContext.java | 2 +- libjava/classpath/javax/crypto/Cipher.java | 8 +- .../classpath/javax/crypto/spec/PBEKeySpec.java | 161 +- .../classpath/javax/crypto/spec/SecretKeySpec.java | 18 +- .../classpath/javax/imageio/spi/IIORegistry.java | 9 + .../javax/imageio/stream/ImageInputStreamImpl.java | 195 +- .../stream/MemoryCacheImageInputStream.java | 43 +- libjava/classpath/javax/management/Attribute.java | 5 + .../classpath/javax/management/AttributeList.java | 220 + .../management/AttributeNotFoundException.java | 71 + .../classpath/javax/management/DynamicMBean.java | 162 + .../javax/management/IntrospectionException.java | 78 + .../management/InvalidAttributeValueException.java | 71 + .../classpath/javax/management/JMException.java | 71 + .../javax/management/JMRuntimeException.java | 71 + .../management/ListenerNotFoundException.java | 75 + .../javax/management/MBeanAttributeInfo.java | 301 + .../javax/management/MBeanConstructorInfo.java | 228 + .../classpath/javax/management/MBeanException.java | 118 + .../javax/management/MBeanFeatureInfo.java | 186 + libjava/classpath/javax/management/MBeanInfo.java | 397 + .../javax/management/MBeanNotificationInfo.java | 227 + .../javax/management/MBeanOperationInfo.java | 344 + .../javax/management/MBeanParameterInfo.java | 176 + .../management/NotCompliantMBeanException.java | 78 + .../classpath/javax/management/Notification.java | 314 + .../javax/management/NotificationBroadcaster.java | 112 + .../javax/management/NotificationEmitter.java | 76 + .../javax/management/NotificationFilter.java | 66 + .../javax/management/NotificationListener.java | 70 + .../javax/management/OperationsException.java | 76 + .../javax/management/ReflectionException.java | 118 + .../management/RuntimeOperationsException.java | 121 + .../classpath/javax/management/StandardMBean.java | 925 + .../javax/management/openmbean/ArrayType.java | 313 + .../javax/management/openmbean/CompositeData.java | 154 + .../management/openmbean/CompositeDataSupport.java | 349 + .../javax/management/openmbean/CompositeType.java | 324 + .../management/openmbean/InvalidKeyException.java | 77 + .../management/openmbean/OpenDataException.java | 79 + .../javax/management/openmbean/OpenType.java | 230 + .../javax/management/openmbean/SimpleType.java | 342 + .../javax/management/openmbean/TabularData.java | 258 + .../javax/management/openmbean/TabularType.java | 269 + .../javax/management/openmbean/package.html | 64 + libjava/classpath/javax/naming/CompositeName.java | 9 +- libjava/classpath/javax/naming/CompoundName.java | 4 + libjava/classpath/javax/naming/Context.java | 652 +- .../javax/naming/ContextNotEmptyException.java | 7 +- libjava/classpath/javax/naming/InitialContext.java | 424 +- libjava/classpath/javax/naming/NameParser.java | 22 +- .../classpath/javax/naming/NamingEnumeration.java | 49 +- .../javax/naming/PartialResultException.java | 6 +- libjava/classpath/javax/naming/Reference.java | 158 +- libjava/classpath/javax/naming/Referenceable.java | 14 +- .../javax/naming/SizeLimitExceededException.java | 7 +- .../javax/naming/spi/InitialContextFactory.java | 23 +- .../naming/spi/InitialContextFactoryBuilder.java | 17 + .../classpath/javax/naming/spi/NamingManager.java | 394 +- .../classpath/javax/naming/spi/ObjectFactory.java | 32 +- .../javax/naming/spi/ObjectFactoryBuilder.java | 26 +- .../classpath/javax/naming/spi/ResolveResult.java | 82 +- libjava/classpath/javax/naming/spi/Resolver.java | 35 +- .../classpath/javax/naming/spi/StateFactory.java | 28 +- .../javax/rmi/ssl/SslRMIClientSocketFactory.java | 166 + .../javax/rmi/ssl/SslRMIServerSocketFactory.java | 213 + .../javax/security/auth/login/LoginContext.java | 8 +- .../classpath/javax/sound/midi/SysexMessage.java | 4 +- libjava/classpath/javax/sound/midi/Track.java | 4 +- libjava/classpath/javax/swing/AbstractButton.java | 67 +- .../classpath/javax/swing/AbstractCellEditor.java | 12 +- .../javax/swing/AbstractSpinnerModel.java | 2 +- libjava/classpath/javax/swing/Box.java | 10 +- libjava/classpath/javax/swing/BoxLayout.java | 2 +- libjava/classpath/javax/swing/ButtonGroup.java | 53 +- .../classpath/javax/swing/CellRendererPane.java | 2 +- .../javax/swing/DefaultBoundedRangeModel.java | 34 +- .../classpath/javax/swing/DefaultButtonModel.java | 22 +- .../classpath/javax/swing/DefaultCellEditor.java | 19 +- .../javax/swing/DefaultComboBoxModel.java | 4 +- .../javax/swing/DefaultDesktopManager.java | 11 +- .../classpath/javax/swing/DefaultListModel.java | 4 +- .../javax/swing/DefaultListSelectionModel.java | 117 +- libjava/classpath/javax/swing/GrayFilter.java | 5 +- libjava/classpath/javax/swing/InputMap.java | 131 +- .../classpath/javax/swing/JCheckBoxMenuItem.java | 196 +- libjava/classpath/javax/swing/JComboBox.java | 260 +- libjava/classpath/javax/swing/JComponent.java | 849 +- libjava/classpath/javax/swing/JEditorPane.java | 8 +- libjava/classpath/javax/swing/JFileChooser.java | 112 +- .../classpath/javax/swing/JFormattedTextField.java | 74 +- libjava/classpath/javax/swing/JFrame.java | 86 +- libjava/classpath/javax/swing/JInternalFrame.java | 195 +- libjava/classpath/javax/swing/JLabel.java | 436 +- libjava/classpath/javax/swing/JLayeredPane.java | 159 +- libjava/classpath/javax/swing/JList.java | 137 +- libjava/classpath/javax/swing/JMenu.java | 333 +- libjava/classpath/javax/swing/JMenuBar.java | 27 +- libjava/classpath/javax/swing/JMenuItem.java | 111 +- libjava/classpath/javax/swing/JOptionPane.java | 154 +- libjava/classpath/javax/swing/JPopupMenu.java | 33 +- libjava/classpath/javax/swing/JProgressBar.java | 462 +- .../javax/swing/JRadioButtonMenuItem.java | 1 + libjava/classpath/javax/swing/JScrollBar.java | 18 +- libjava/classpath/javax/swing/JScrollPane.java | 8 +- libjava/classpath/javax/swing/JSlider.java | 6 +- libjava/classpath/javax/swing/JSpinner.java | 2 +- libjava/classpath/javax/swing/JSplitPane.java | 12 +- libjava/classpath/javax/swing/JTabbedPane.java | 210 +- libjava/classpath/javax/swing/JTable.java | 1698 +- libjava/classpath/javax/swing/JToolBar.java | 24 +- libjava/classpath/javax/swing/JTree.java | 47 +- libjava/classpath/javax/swing/JViewport.java | 2 +- libjava/classpath/javax/swing/KeyboardManager.java | 3 +- .../classpath/javax/swing/ListSelectionModel.java | 264 +- libjava/classpath/javax/swing/LookAndFeel.java | 18 +- .../javax/swing/MenuSelectionManager.java | 3 + libjava/classpath/javax/swing/ProgressMonitor.java | 47 +- .../javax/swing/ProgressMonitorInputStream.java | 2 +- libjava/classpath/javax/swing/RepaintManager.java | 353 +- .../classpath/javax/swing/ScrollPaneLayout.java | 9 +- libjava/classpath/javax/swing/SizeSequence.java | 6 +- libjava/classpath/javax/swing/SpringLayout.java | 2 +- libjava/classpath/javax/swing/SwingUtilities.java | 179 +- libjava/classpath/javax/swing/Timer.java | 10 +- libjava/classpath/javax/swing/ToolTipManager.java | 18 +- libjava/classpath/javax/swing/TransferHandler.java | 24 +- libjava/classpath/javax/swing/UIDefaults.java | 26 +- libjava/classpath/javax/swing/UIManager.java | 160 +- libjava/classpath/javax/swing/WindowConstants.java | 29 +- .../javax/swing/border/AbstractBorder.java | 2 +- .../classpath/javax/swing/border/BevelBorder.java | 2 +- .../javax/swing/border/CompoundBorder.java | 6 +- .../classpath/javax/swing/border/MatteBorder.java | 9 +- .../classpath/javax/swing/border/TitledBorder.java | 737 +- .../javax/swing/event/EventListenerList.java | 12 +- .../classpath/javax/swing/event/ListDataEvent.java | 60 +- libjava/classpath/javax/swing/event/MenuEvent.java | 28 +- .../javax/swing/event/TreeExpansionListener.java | 26 +- .../javax/swing/filechooser/FileSystemView.java | 21 +- .../swing/filechooser/UnixFileSystemView.java | 27 +- .../classpath/javax/swing/plaf/IconUIResource.java | 9 +- .../javax/swing/plaf/basic/BasicArrowButton.java | 48 +- .../swing/plaf/basic/BasicButtonListener.java | 29 +- .../javax/swing/plaf/basic/BasicButtonUI.java | 17 +- .../javax/swing/plaf/basic/BasicCheckBoxUI.java | 26 +- .../swing/plaf/basic/BasicComboBoxRenderer.java | 16 +- .../javax/swing/plaf/basic/BasicComboBoxUI.java | 219 +- .../javax/swing/plaf/basic/BasicComboPopup.java | 12 +- .../swing/plaf/basic/BasicDirectoryModel.java | 478 +- .../javax/swing/plaf/basic/BasicFileChooserUI.java | 65 +- .../javax/swing/plaf/basic/BasicGraphicsUtils.java | 174 + .../javax/swing/plaf/basic/BasicIconFactory.java | 10 +- .../swing/plaf/basic/BasicInternalFrameUI.java | 502 +- .../javax/swing/plaf/basic/BasicLabelUI.java | 72 +- .../javax/swing/plaf/basic/BasicListUI.java | 173 +- .../javax/swing/plaf/basic/BasicLookAndFeel.java | 90 +- .../javax/swing/plaf/basic/BasicMenuBarUI.java | 98 +- .../javax/swing/plaf/basic/BasicMenuItemUI.java | 54 +- .../javax/swing/plaf/basic/BasicMenuUI.java | 28 +- .../javax/swing/plaf/basic/BasicOptionPaneUI.java | 234 +- .../javax/swing/plaf/basic/BasicPanelUI.java | 64 +- .../javax/swing/plaf/basic/BasicPopupMenuUI.java | 675 +- .../javax/swing/plaf/basic/BasicProgressBarUI.java | 36 +- .../javax/swing/plaf/basic/BasicRadioButtonUI.java | 93 +- .../javax/swing/plaf/basic/BasicRootPaneUI.java | 5 +- .../javax/swing/plaf/basic/BasicScrollBarUI.java | 243 +- .../javax/swing/plaf/basic/BasicScrollPaneUI.java | 256 +- .../javax/swing/plaf/basic/BasicSliderUI.java | 153 +- .../javax/swing/plaf/basic/BasicSpinnerUI.java | 4 +- .../javax/swing/plaf/basic/BasicSplitPaneUI.java | 150 +- .../javax/swing/plaf/basic/BasicTabbedPaneUI.java | 1273 +- .../javax/swing/plaf/basic/BasicTableHeaderUI.java | 46 +- .../javax/swing/plaf/basic/BasicTableUI.java | 489 +- .../javax/swing/plaf/basic/BasicTextAreaUI.java | 4 +- .../javax/swing/plaf/basic/BasicTextFieldUI.java | 19 +- .../javax/swing/plaf/basic/BasicTextUI.java | 357 +- .../swing/plaf/basic/BasicToggleButtonUI.java | 37 +- .../javax/swing/plaf/basic/BasicToolBarUI.java | 269 +- .../javax/swing/plaf/basic/BasicTreeUI.java | 1037 +- .../javax/swing/plaf/basic/SharedUIDefaults.java | 91 + .../javax/swing/plaf/metal/MetalBorders.java | 100 +- .../javax/swing/plaf/metal/MetalButtonUI.java | 74 +- .../javax/swing/plaf/metal/MetalCheckBoxUI.java | 2 +- .../swing/plaf/metal/MetalComboBoxButton.java | 9 +- .../javax/swing/plaf/metal/MetalComboBoxIcon.java | 3 +- .../javax/swing/plaf/metal/MetalFileChooserUI.java | 198 +- .../javax/swing/plaf/metal/MetalIconFactory.java | 169 +- .../plaf/metal/MetalInternalFrameTitlePane.java | 9 +- .../swing/plaf/metal/MetalInternalFrameUI.java | 18 + .../javax/swing/plaf/metal/MetalLookAndFeel.java | 38 +- .../javax/swing/plaf/metal/MetalMenuBarUI.java | 5 +- .../plaf/metal/MetalPopupMenuSeparatorUI.java | 2 +- .../javax/swing/plaf/metal/MetalRadioButtonUI.java | 9 +- .../javax/swing/plaf/metal/MetalRootPaneUI.java | 2 +- .../javax/swing/plaf/metal/MetalScrollBarUI.java | 16 +- .../javax/swing/plaf/metal/MetalScrollButton.java | 1 + .../javax/swing/plaf/metal/MetalSeparatorUI.java | 2 +- .../javax/swing/plaf/metal/MetalSliderUI.java | 34 +- .../swing/plaf/metal/MetalSplitPaneDivider.java | 19 +- .../javax/swing/plaf/metal/MetalTabbedPaneUI.java | 154 +- .../javax/swing/plaf/metal/MetalToolTipUI.java | 6 +- .../javax/swing/plaf/metal/MetalUtils.java | 92 +- .../javax/swing/plaf/multi/MultiComboBoxUI.java | 9 +- .../javax/swing/plaf/multi/MultiFileChooserUI.java | 18 +- .../javax/swing/plaf/multi/MultiListUI.java | 9 +- .../javax/swing/plaf/multi/MultiLookAndFeel.java | 3 +- .../javax/swing/plaf/multi/MultiOptionPaneUI.java | 6 +- .../javax/swing/plaf/multi/MultiSplitPaneUI.java | 18 +- .../javax/swing/plaf/multi/MultiTabbedPaneUI.java | 9 +- .../javax/swing/table/AbstractTableModel.java | 12 +- .../javax/swing/table/DefaultTableColumnModel.java | 10 +- .../javax/swing/table/DefaultTableModel.java | 61 +- .../classpath/javax/swing/table/JTableHeader.java | 423 +- .../javax/swing/table/TableCellEditor.java | 28 +- .../javax/swing/table/TableCellRenderer.java | 30 +- .../javax/swing/text/AbstractDocument.java | 208 +- .../classpath/javax/swing/text/AbstractWriter.java | 3 +- libjava/classpath/javax/swing/text/BoxView.java | 264 +- .../classpath/javax/swing/text/CompositeView.java | 82 +- .../classpath/javax/swing/text/DefaultCaret.java | 148 +- .../javax/swing/text/DefaultEditorKit.java | 551 +- .../javax/swing/text/DefaultStyledDocument.java | 8 - .../javax/swing/text/EmptyAttributeSet.java | 153 + libjava/classpath/javax/swing/text/FieldView.java | 24 +- libjava/classpath/javax/swing/text/FlowView.java | 75 +- libjava/classpath/javax/swing/text/GapContent.java | 498 +- libjava/classpath/javax/swing/text/IconView.java | 18 +- .../classpath/javax/swing/text/JTextComponent.java | 331 +- .../classpath/javax/swing/text/ParagraphView.java | 37 +- .../classpath/javax/swing/text/PlainDocument.java | 201 +- libjava/classpath/javax/swing/text/PlainView.java | 233 +- libjava/classpath/javax/swing/text/Segment.java | 10 +- .../javax/swing/text/SimpleAttributeSet.java | 6 +- .../classpath/javax/swing/text/StringContent.java | 6 +- .../classpath/javax/swing/text/StyleContext.java | 119 +- libjava/classpath/javax/swing/text/TabSet.java | 121 +- libjava/classpath/javax/swing/text/TabStop.java | 68 +- libjava/classpath/javax/swing/text/TextAction.java | 104 + libjava/classpath/javax/swing/text/Utilities.java | 66 +- libjava/classpath/javax/swing/text/View.java | 113 +- .../classpath/javax/swing/text/html/BRView.java | 71 + .../classpath/javax/swing/text/html/HRuleView.java | 189 + .../javax/swing/text/html/HTMLDocument.java | 559 +- .../javax/swing/text/html/HTMLEditorKit.java | 23 +- .../javax/swing/text/html/HTMLTableView.java | 82 - .../classpath/javax/swing/text/html/ImageView.java | 441 + .../javax/swing/text/html/MinimalHTMLWriter.java | 452 + .../javax/swing/text/html/StyleSheet.java | 52 +- .../classpath/javax/swing/text/html/TableView.java | 137 + .../swing/text/html/parser/ParserDelegator.java | 3 - .../classpath/javax/swing/text/rtf/RTFParser.java | 14 +- .../classpath/javax/swing/text/rtf/RTFScanner.java | 28 +- .../javax/swing/tree/AbstractLayoutCache.java | 7 +- .../javax/swing/tree/DefaultMutableTreeNode.java | 15 +- .../javax/swing/tree/DefaultTreeCellEditor.java | 1 - .../javax/swing/tree/DefaultTreeCellRenderer.java | 442 +- .../javax/swing/tree/DefaultTreeModel.java | 6 +- .../swing/tree/DefaultTreeSelectionModel.java | 18 +- .../javax/swing/tree/ExpandVetoException.java | 71 +- .../javax/swing/tree/FixedHeightLayoutCache.java | 6 +- libjava/classpath/javax/swing/tree/RowMapper.java | 20 +- libjava/classpath/javax/swing/tree/TreeNode.java | 3 +- libjava/classpath/javax/swing/tree/TreePath.java | 18 +- .../javax/swing/tree/TreeSelectionModel.java | 102 +- .../swing/tree/VariableHeightLayoutCache.java | 22 +- libjava/classpath/lib/Makefile.am | 30 +- libjava/classpath/lib/Makefile.in | 83 +- libjava/classpath/lib/copy-vmresources.sh.in | 2 +- libjava/classpath/lib/gen-classlist.sh.in | 6 +- libjava/classpath/lib/mkcollections.pl.in | 3 +- libjava/classpath/lib/standard.omit | 3 +- libjava/classpath/lib/standard.omit.in | 1 + libjava/classpath/ltconfig | 2 +- libjava/classpath/ltmain.sh | 8 +- libjava/classpath/m4/acinclude.m4 | 17 +- libjava/classpath/native/Makefile.am | 8 +- libjava/classpath/native/Makefile.in | 77 +- libjava/classpath/native/fdlibm/Makefile.in | 54 +- libjava/classpath/native/fdlibm/dtoa.c | 17 +- libjava/classpath/native/fdlibm/mprec.c | 275 +- libjava/classpath/native/fdlibm/mprec.h | 8 +- libjava/classpath/native/jawt/.cvsignore | 8 + libjava/classpath/native/jawt/Makefile.am | 30 +- libjava/classpath/native/jawt/Makefile.in | 139 +- libjava/classpath/native/jni/Makefile.am | 9 +- libjava/classpath/native/jni/Makefile.in | 78 +- libjava/classpath/native/jni/classpath/Makefile.in | 54 +- libjava/classpath/native/jni/classpath/jcl.h | 6 +- .../native/jni/gconf-peer/GConfNativePeer.c | 598 + .../classpath/native/jni/gconf-peer/Makefile.am | 12 + .../classpath/native/jni/gconf-peer/Makefile.in | 593 + libjava/classpath/native/jni/gtk-peer/.cvsignore | 8 + .../native/jni/gtk-peer/GtkDragSourceContextPeer.c | 256 + libjava/classpath/native/jni/gtk-peer/Makefile.am | 34 +- libjava/classpath/native/jni/gtk-peer/Makefile.in | 213 +- .../native/jni/gtk-peer/cairographics2d.h | 116 + libjava/classpath/native/jni/gtk-peer/gdkdisplay.h | 67 + .../gnu_java_awt_peer_gtk_CairoGraphics2D.c | 803 + .../gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c | 306 + .../gnu_java_awt_peer_gtk_ComponentGraphics.c | 355 + .../gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c | 132 + .../gnu_java_awt_peer_gtk_FreetypeGlyphVector.c | 348 + .../gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c | 221 +- .../gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c | 758 - .../gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c | 2018 - .../gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c | 174 +- .../gnu_java_awt_peer_gtk_GdkPixbufDecoder.c | 25 +- ...gnu_java_awt_peer_gtk_GdkScreenGraphicsDevice.c | 354 + .../gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c | 424 - .../gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c | 14 - .../gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c | 87 - .../gnu_java_awt_peer_gtk_GtkCheckboxPeer.c | 318 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c | 9 +- .../gnu_java_awt_peer_gtk_GtkComponentPeer.c | 85 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c | 5 - .../jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c | 379 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c | 2 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c | 35 +- .../gnu_java_awt_peer_gtk_GtkVolatileImage.c | 196 + .../gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 63 + .../classpath/native/jni/gtk-peer/gtkcairopeer.h | 93 - libjava/classpath/native/jni/gtk-peer/gtkpeer.h | 44 +- libjava/classpath/native/jni/java-io/Makefile.in | 54 +- .../classpath/native/jni/java-io/java_io_VMFile.c | 236 +- libjava/classpath/native/jni/java-lang/Makefile.in | 54 +- .../native/jni/java-lang/java_lang_VMSystem.c | 9 +- libjava/classpath/native/jni/java-net/Makefile.am | 3 +- libjava/classpath/native/jni/java-net/Makefile.in | 65 +- .../java-net/gnu_java_net_local_LocalSocketImpl.c | 44 +- .../native/jni/java-net/java_net_VMURLConnection.c | 102 + libjava/classpath/native/jni/java-nio/Makefile.am | 1 + libjava/classpath/native/jni/java-nio/Makefile.in | 58 +- .../native/jni/java-nio/gnu_java_nio_VMChannel.c | 525 + .../jni/java-nio/java_nio_VMDirectByteBuffer.c | 2 + libjava/classpath/native/jni/java-util/Makefile.in | 54 +- libjava/classpath/native/jni/midi-alsa/Makefile.am | 1 + libjava/classpath/native/jni/midi-alsa/Makefile.in | 55 +- libjava/classpath/native/jni/midi-dssi/Makefile.am | 1 + libjava/classpath/native/jni/midi-dssi/Makefile.in | 55 +- libjava/classpath/native/jni/midi-dssi/dssi_data.h | 7 +- libjava/classpath/native/jni/qt-peer/.cvsignore | 9 + libjava/classpath/native/jni/qt-peer/Makefile.am | 4 +- libjava/classpath/native/jni/qt-peer/Makefile.in | 115 +- .../classpath/native/jni/qt-peer/eventmethods.h | 6 +- .../classpath/native/jni/qt-peer/qtmenupeer.cpp | 47 +- libjava/classpath/native/jni/xmlj/Makefile.in | 54 +- libjava/classpath/native/plugin/.cvsignore | 6 + libjava/classpath/native/plugin/Makefile.am | 18 + libjava/classpath/native/plugin/Makefile.in | 607 + libjava/classpath/native/plugin/gcjwebplugin.cc | 1780 + libjava/classpath/native/target/Linux/Makefile.in | 52 +- libjava/classpath/native/target/Makefile.in | 72 +- .../classpath/native/target/generic/Makefile.in | 52 +- .../native/target/generic/target_generic_network.h | 3 +- .../org/omg/CORBA/CompletionStatusHelper.java | 23 +- libjava/classpath/org/omg/CORBA/CurrentHelper.java | 12 +- .../org/omg/CORBA/DefinitionKindHelper.java | 39 +- libjava/classpath/org/omg/CORBA/IDLTypeHelper.java | 15 +- .../org/omg/CORBA/NameValuePairHelper.java | 25 +- libjava/classpath/org/omg/CORBA/ObjectHelper.java | 7 +- .../org/omg/CORBA/ParameterModeHelper.java | 11 +- .../org/omg/CORBA/PolicyErrorCodeHelper.java | 2 +- .../classpath/org/omg/CORBA/PolicyErrorHelper.java | 32 +- libjava/classpath/org/omg/CORBA/PolicyHelper.java | 10 +- .../classpath/org/omg/CORBA/PolicyListHelper.java | 10 +- .../classpath/org/omg/CORBA/PolicyTypeHelper.java | 4 +- .../org/omg/CORBA/ServiceDetailHelper.java | 40 +- .../org/omg/CORBA/ServiceInformationHelper.java | 59 +- .../org/omg/CORBA/SetOverrideTypeHelper.java | 29 +- .../classpath/org/omg/CORBA/StringValueHelper.java | 18 +- .../classpath/org/omg/CORBA/UnionMemberHelper.java | 2 +- .../org/omg/CORBA/UnknownUserExceptionHelper.java | 14 +- .../classpath/org/omg/CORBA/VisibilityHelper.java | 11 +- .../org/omg/CORBA/WStringValueHelper.java | 18 +- .../org/omg/CORBA/WrongTransactionHelper.java | 16 +- .../classpath/org/omg/CosNaming/BindingHelper.java | 32 +- .../org/omg/CosNaming/BindingIteratorHelper.java | 10 +- .../org/omg/CosNaming/BindingListHelper.java | 19 +- .../org/omg/CosNaming/BindingTypeHelper.java | 15 +- .../org/omg/CosNaming/NameComponentHelper.java | 34 +- .../classpath/org/omg/CosNaming/NameHelper.java | 18 +- .../org/omg/CosNaming/NamingContextExtHelper.java | 14 +- .../NamingContextExtPackage/AddressHelper.java | 18 +- .../InvalidAddressHelper.java | 19 +- .../NamingContextExtPackage/StringNameHelper.java | 17 +- .../NamingContextExtPackage/URLStringHelper.java | 17 +- .../org/omg/CosNaming/NamingContextHelper.java | 10 +- .../NamingContextPackage/AlreadyBoundHelper.java | 12 +- .../NamingContextPackage/CannotProceedHelper.java | 32 +- .../NamingContextPackage/InvalidNameHelper.java | 17 +- .../NamingContextPackage/NotEmptyHelper.java | 12 +- .../NamingContextPackage/NotFoundHelper.java | 32 +- .../NamingContextPackage/NotFoundReasonHelper.java | 24 +- .../classpath/org/omg/DynamicAny/AnySeqHelper.java | 19 +- .../org/omg/DynamicAny/DynAnyFactoryHelper.java | 3 +- .../InconsistentTypeCodeHelper.java | 23 +- .../classpath/org/omg/DynamicAny/DynAnyHelper.java | 4 +- .../DynAnyPackage/InvalidValueHelper.java | 19 +- .../DynAnyPackage/TypeMismatchHelper.java | 19 +- .../org/omg/DynamicAny/DynAnySeqHelper.java | 16 +- .../org/omg/DynamicAny/DynArrayHelper.java | 4 +- .../org/omg/DynamicAny/DynEnumHelper.java | 4 +- .../org/omg/DynamicAny/DynFixedHelper.java | 4 +- .../org/omg/DynamicAny/DynSequenceHelper.java | 4 +- .../org/omg/DynamicAny/DynStructHelper.java | 4 +- .../org/omg/DynamicAny/DynUnionHelper.java | 4 +- .../org/omg/DynamicAny/DynValueHelper.java | 4 +- .../org/omg/DynamicAny/NameDynAnyPairHelper.java | 40 +- .../omg/DynamicAny/NameDynAnyPairSeqHelper.java | 16 +- .../org/omg/DynamicAny/NameValuePairHelper.java | 40 +- .../org/omg/DynamicAny/NameValuePairSeqHelper.java | 16 +- .../classpath/org/omg/IOP/CodecFactoryHelper.java | 11 +- .../CodecFactoryPackage/UnknownEncodingHelper.java | 18 +- .../omg/IOP/CodecPackage/FormatMismatchHelper.java | 16 +- .../CodecPackage/InvalidTypeForEncodingHelper.java | 23 +- .../omg/IOP/CodecPackage/TypeMismatchHelper.java | 16 +- .../classpath/org/omg/IOP/ComponentIdHelper.java | 10 +- libjava/classpath/org/omg/IOP/IORHelper.java | 43 +- .../omg/IOP/MultipleComponentProfileHelper.java | 20 +- libjava/classpath/org/omg/IOP/ProfileIdHelper.java | 11 +- .../org/omg/IOP/ServiceContextHelper.java | 50 +- .../org/omg/IOP/ServiceContextListHelper.java | 11 +- libjava/classpath/org/omg/IOP/ServiceIdHelper.java | 4 +- .../org/omg/IOP/TaggedComponentHelper.java | 36 +- .../classpath/org/omg/IOP/TaggedProfileHelper.java | 31 +- .../AdapterManagerIdHelper.java | 11 +- .../omg/PortableInterceptor/AdapterNameHelper.java | 23 +- .../PortableInterceptor/AdapterStateHelper.java | 4 +- .../org/omg/PortableInterceptor/CurrentHelper.java | 12 +- .../PortableInterceptor/ForwardRequestHelper.java | 24 +- .../IORInterceptor_3_0Helper.java | 11 +- .../omg/PortableInterceptor/InvalidSlotHelper.java | 16 +- .../ORBInitInfoPackage/DuplicateNameHelper.java | 33 +- .../ORBInitInfoPackage/InvalidNameHelper.java | 21 +- .../ObjectReferenceFactoryHelper.java | 21 +- .../ObjectReferenceTemplateHelper.java | 21 +- .../ObjectReferenceTemplateSeqHelper.java | 19 +- .../org/omg/PortableServer/CurrentHelper.java | 4 +- .../CurrentPackage/NoContextHelper.java | 24 +- .../omg/PortableServer/ForwardRequestHelper.java | 14 +- .../org/omg/PortableServer/POAHelper.java | 3 +- .../POAManagerPackage/AdapterInactiveHelper.java | 16 +- .../POAPackage/AdapterAlreadyExistsHelper.java | 3 +- .../POAPackage/AdapterNonExistentHelper.java | 3 +- .../POAPackage/InvalidPolicyHelper.java | 3 +- .../PortableServer/POAPackage/NoServantHelper.java | 3 +- .../POAPackage/ObjectAlreadyActiveHelper.java | 3 +- .../POAPackage/ObjectNotActiveHelper.java | 3 +- .../POAPackage/ServantAlreadyActiveHelper.java | 3 +- .../POAPackage/ServantNotActiveHelper.java | 3 +- .../POAPackage/WrongAdapterHelper.java | 3 +- .../POAPackage/WrongPolicyHelper.java | 3 +- .../omg/PortableServer/ServantActivatorHelper.java | 3 +- .../omg/PortableServer/ServantLocatorHelper.java | 3 +- .../services/java.util.prefs.PreferencesFactory | 1 + .../services/java.util.prefs.PreferencesFactory.in | 1 + .../services/javax.sound.midi.spi.MidiFileReader | 1 + .../services/javax.sound.midi.spi.MidiFileWriter | 1 + .../javax.sound.sampled.spi.AudioFileReader | 2 + libjava/classpath/resource/Makefile.am | 4 +- libjava/classpath/resource/Makefile.in | 56 +- .../tools/appletviewer/MessagesBundle.properties | 70 + .../appletviewer/MessagesBundle_de.properties | 75 + .../gnu/classpath/tools/getopt/Messages.properties | 49 + .../gnu/classpath/tools/jar/messages.properties | 71 + .../tools/jarsigner/MessageBundle.properties | 33 - .../classpath/tools/jarsigner/messages.properties | 126 + .../tools/keytool/MessageBundle.properties | 95 - .../classpath/tools/keytool/messages.properties | 570 + .../tools/native2ascii/messages.properties | 43 + .../classpath/tools/serialver/messages.properties | 44 + .../resource/gnu/java/awt/peer/x/fonts.properties | 61 + .../util/regex}/MessagesBundle.properties | 0 .../util/regex}/MessagesBundle_fr.properties | 0 .../java/util/regex/MessagesBundle_it.properties | 31 + .../gnu/regexp/MessagesBundle_it.properties | 31 - .../resource/java/security/classpath.security | 10 +- libjava/classpath/scripts/Makefile.am | 2 +- libjava/classpath/scripts/Makefile.in | 54 +- libjava/classpath/scripts/check_jni_methods.sh | 7 +- libjava/classpath/scripts/import-cacerts.sh | 43 + .../annotation/AnnotationInvocationHandler.java | 340 + libjava/classpath/tools/.cvsignore | 6 + libjava/classpath/tools/Makefile.am | 102 +- libjava/classpath/tools/Makefile.in | 221 +- libjava/classpath/tools/appletviewer.in | 46 + libjava/classpath/tools/gappletviewer.in | 46 + libjava/classpath/tools/gjar.in | 47 + libjava/classpath/tools/gjarsigner.in | 47 + libjava/classpath/tools/gkeytool.in | 47 + libjava/classpath/tools/gnative2ascii.in | 47 + .../tools/appletviewer/AppletClassLoader.java | 81 + .../tools/appletviewer/AppletSecurityManager.java | 95 + .../classpath/tools/appletviewer/AppletTag.java | 489 + .../tools/appletviewer/AppletWarning.java | 66 + .../tools/appletviewer/CommonAppletContext.java | 133 + .../tools/appletviewer/CommonAppletStub.java | 138 + .../tools/appletviewer/ConsoleDialog.java | 175 + .../classpath/tools/appletviewer/ErrorApplet.java | 53 + .../gnu/classpath/tools/appletviewer/Main.java | 293 + .../tools/appletviewer/PluginAppletContext.java | 72 + .../tools/appletviewer/PluginAppletViewer.java | 172 + .../tools/appletviewer/PluginAppletWindow.java | 454 + .../appletviewer/StandaloneAppletContext.java | 75 + .../tools/appletviewer/StandaloneAppletViewer.java | 144 + .../tools/appletviewer/StandaloneAppletWindow.java | 559 + .../classpath/tools/appletviewer/TagParser.java | 302 + .../tools/getopt/ClasspathToolParser.java | 73 + .../tools/getopt/FileArgumentCallback.java | 62 + .../tools/gnu/classpath/tools/getopt/Messages.java | 67 + .../tools/gnu/classpath/tools/getopt/Option.java | 200 + .../classpath/tools/getopt/OptionException.java | 52 + .../gnu/classpath/tools/getopt/OptionGroup.java | 271 + .../tools/gnu/classpath/tools/getopt/Parser.java | 462 + .../tools/gnu/classpath/tools/giop/GRMIC.java | 23 +- .../tools/gnu/classpath/tools/giop/GRMIC.txt | 24 +- .../tools/giop/grmic/GiopRmicCompiler.java | 94 +- .../tools/gnu/classpath/tools/jar/Action.java | 51 + .../tools/gnu/classpath/tools/jar/Creator.java | 247 + .../tools/gnu/classpath/tools/jar/Entry.java | 60 + .../tools/gnu/classpath/tools/jar/Extractor.java | 127 + .../tools/gnu/classpath/tools/jar/Indexer.java | 144 + .../tools/gnu/classpath/tools/jar/Lister.java | 112 + .../tools/gnu/classpath/tools/jar/Main.java | 266 + .../tools/gnu/classpath/tools/jar/Messages.java | 67 + .../tools/gnu/classpath/tools/jar/Updater.java | 91 + .../tools/gnu/classpath/tools/jar/WorkSet.java | 86 + .../gnu/classpath/tools/jarsigner/HashUtils.java | 8 +- .../gnu/classpath/tools/jarsigner/JarSigner.java | 26 +- .../gnu/classpath/tools/jarsigner/JarVerifier.java | 45 +- .../tools/gnu/classpath/tools/jarsigner/Main.java | 390 +- .../gnu/classpath/tools/jarsigner/Messages.java | 11 +- .../gnu/classpath/tools/jarsigner/SFHelper.java | 148 +- .../gnu/classpath/tools/jarsigner/package.html | 60 + .../gnu/classpath/tools/keytool/CACertCmd.java | 313 + .../gnu/classpath/tools/keytool/CertReqCmd.java | 200 +- .../tools/gnu/classpath/tools/keytool/Command.java | 177 +- .../gnu/classpath/tools/keytool/DeleteCmd.java | 141 +- .../gnu/classpath/tools/keytool/ExportCmd.java | 180 +- .../gnu/classpath/tools/keytool/GenKeyCmd.java | 252 +- .../gnu/classpath/tools/keytool/IdentityDBCmd.java | 131 +- .../gnu/classpath/tools/keytool/ImportCmd.java | 440 +- .../gnu/classpath/tools/keytool/KeyCloneCmd.java | 189 +- .../gnu/classpath/tools/keytool/KeyPasswdCmd.java | 170 +- .../tools/gnu/classpath/tools/keytool/ListCmd.java | 178 +- .../tools/gnu/classpath/tools/keytool/Main.java | 280 +- .../gnu/classpath/tools/keytool/Messages.java | 11 +- .../gnu/classpath/tools/keytool/PrintCertCmd.java | 80 +- .../gnu/classpath/tools/keytool/SelfCertCmd.java | 203 +- .../classpath/tools/keytool/StorePasswdCmd.java | 139 +- .../tools/gnu/classpath/tools/keytool/package.html | 65 + .../gnu/classpath/tools/native2ascii/Messages.java | 67 + .../classpath/tools/native2ascii/Native2ASCII.java | 185 + .../tools/gnu/classpath/tools/rmi/RMIC.java | 25 +- .../tools/gnu/classpath/tools/rmi/RMIC.txt | 36 +- .../gnu/classpath/tools/rmi/registry/package.html | 46 + .../gnu/classpath/tools/serialver/Messages.java | 68 + .../gnu/classpath/tools/serialver/SerialVer.java | 163 + libjava/classpath/tools/gserialver.in | 47 + libjava/classpath/tools/jarsigner.in | 47 + libjava/classpath/tools/jarsigner.sh.in | 63 - libjava/classpath/tools/keytool.in | 47 + libjava/classpath/tools/keytool.sh.in | 63 - libjava/classpath/tools/toolwrapper.c | 220 + .../vm/reference/gnu/classpath/Unsafe.java | 328 - .../gnu/classpath/jdwp/VMVirtualMachine.java | 4 +- .../lang/management/VMClassLoadingMXBeanImpl.java | 89 + .../lang/management/VMCompilationMXBeanImpl.java | 66 + .../management/VMGarbageCollectorMXBeanImpl.java | 80 + .../java/lang/management/VMMemoryMXBeanImpl.java | 109 + .../lang/management/VMMemoryManagerMXBeanImpl.java | 95 + .../lang/management/VMMemoryPoolMXBeanImpl.java | 195 + .../java/lang/management/VMRuntimeMXBeanImpl.java | 89 + .../java/lang/management/VMThreadMXBeanImpl.java | 207 + .../vm/reference/gnu/java/nio/VMChannel.java | 197 + libjava/classpath/vm/reference/java/io/VMFile.java | 16 +- .../vm/reference/java/lang/VMClassLoader.java | 8 +- .../classpath/vm/reference/java/lang/VMSystem.java | 10 +- .../classpath/vm/reference/java/lang/VMThread.java | 12 + .../java/lang/management/VMManagementFactory.java | 75 + .../vm/reference/java/net/VMURLConnection.java | 79 + .../classpath/vm/reference/sun/misc/Unsafe.java | 328 + .../vm/reference/sun/reflect/Reflection.java | 51 + .../vm/reference/sun/reflect/misc/ReflectUtil.java | 92 + libjava/configure | 595 +- libjava/configure.ac | 112 +- libjava/configure.host | 16 +- libjava/gcj/Makefile.in | 19 +- libjava/gcj/javaprims.h | 4 + libjava/gnu/awt/xlib/XToolkit.java | 7 - libjava/gnu/classpath/jdwp/VMFrame.java | 4 +- libjava/gnu/classpath/jdwp/VMIdManager.java | 16 +- libjava/gnu/classpath/jdwp/VMMethod.java | 14 +- libjava/gnu/classpath/jdwp/VMVirtualMachine.java | 67 +- libjava/gnu/classpath/jdwp/natVMFrame.cc | 26 + libjava/gnu/classpath/jdwp/natVMMethod.cc | 47 + libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc | 252 + libjava/gnu/classpath/natSystemProperties.cc | 59 +- libjava/gnu/gcj/convert/CharsetToBytesAdaptor.java | 28 +- libjava/gnu/gcj/convert/UnicodeToBytes.java | 11 +- libjava/gnu/gcj/runtime/NameFinder.java | 20 +- libjava/gnu/gcj/runtime/natSharedLibLoader.cc | 5 +- libjava/gnu/java/lang/MainThread.java | 7 +- .../lang/management/VMClassLoadingMXBeanImpl.java | 100 + .../lang/management/VMCompilationMXBeanImpl.java | 69 + .../management/VMGarbageCollectorMXBeanImpl.java | 86 + .../java/lang/management/VMMemoryMXBeanImpl.java | 120 + .../lang/management/VMMemoryManagerMXBeanImpl.java | 98 + .../lang/management/VMMemoryPoolMXBeanImpl.java | 231 + .../java/lang/management/VMRuntimeMXBeanImpl.java | 95 + .../java/lang/management/VMThreadMXBeanImpl.java | 233 + .../java/net/natPlainDatagramSocketImplPosix.cc | 109 +- libjava/gnu/java/net/natPlainSocketImplPosix.cc | 5 + libjava/gnu/java/nio/VMChannel.java | 199 + libjava/include/Makefile.in | 19 +- libjava/include/boehm-gc.h | 12 +- libjava/include/config.h.in | 13 +- libjava/include/java-interp.h | 18 +- libjava/include/java-stack.h | 35 +- libjava/include/jvm.h | 37 +- libjava/include/jvmti_md.h | 32 + libjava/include/mips-signal.h | 64 +- libjava/include/no-gc.h | 8 +- libjava/include/no-threads.h | 8 +- libjava/include/posix-threads.h | 12 +- libjava/include/posix.h | 7 + libjava/include/win32-threads.h | 13 +- libjava/include/win32.h | 11 +- libjava/interpret-run.cc | 2508 + libjava/interpret.cc | 2982 +- libjava/java/io/File.java | 40 +- libjava/java/io/OutputStreamWriter.java | 22 +- libjava/java/io/PrintStream.java | 10 +- libjava/java/io/natFilePosix.cc | 222 +- libjava/java/lang/Class.h | 14 +- libjava/java/lang/Class.java | 20 +- libjava/java/lang/ClassLoader.java | 38 +- libjava/java/lang/SecurityManager.java | 135 +- libjava/java/lang/String.java | 2 +- libjava/java/lang/System.java | 5 - libjava/java/lang/Thread.java | 43 +- libjava/java/lang/VMClassLoader.java | 2 +- libjava/java/lang/VMThrowable.java | 6 +- .../java/lang/management/VMManagementFactory.java | 84 + libjava/java/lang/natClass.cc | 19 +- libjava/java/lang/natClassLoader.cc | 23 +- libjava/java/lang/natString.cc | 2 + libjava/java/lang/natThread.cc | 35 +- libjava/java/lang/natVMThrowable.cc | 4 +- libjava/java/lang/reflect/natField.cc | 4 + libjava/java/net/InetAddress.java | 99 +- libjava/java/net/URLClassLoader.java | 14 +- libjava/java/net/VMURLConnection.java | 76 + libjava/java/net/natURLClassLoader.cc | 22 + libjava/java/net/natVMNetworkInterfacePosix.cc | 62 +- libjava/java/security/AccessController.java | 195 - libjava/java/security/VMAccessControlState.java | 103 + libjava/java/security/VMAccessController.java | 255 + libjava/java/security/libgcj.security | 2 - libjava/java/security/natVMAccessControlState.cc | 32 + libjava/java/security/natVMAccessController.cc | 23 + libjava/java/util/logging/LogManager.java | 912 + libjava/java/util/logging/logging.properties | 8 - libjava/java/util/natVMTimeZone.cc | 6 +- libjava/javax/naming/spi/NamingManager.java | 654 + libjava/jni-libjvm.cc | 89 + libjava/jni.cc | 99 +- libjava/jvmti.cc | 846 + libjava/libgcj.spec.in | 5 +- libjava/libgcj_bc.c | 110 + libjava/libltdl/ChangeLog | 6 + libjava/libltdl/Makefile.am | 3 + libjava/libltdl/Makefile.in | 11 +- libjava/libtool-version | 2 +- libjava/link.cc | 95 +- libjava/nogc.cc | 12 +- libjava/posix-threads.cc | 2 +- libjava/posix.cc | 33 + libjava/prims.cc | 106 +- libjava/scripts/jar.in | 524 + libjava/scripts/makemake.tcl | 10 +- libjava/sources.am | 619 +- libjava/stacktrace.cc | 199 +- libjava/standard.omit.in | 2 - libjava/sysdep/generic/backtrace.h | 11 +- libjava/sysdep/i386/backtrace.h | 155 +- libjava/testsuite/Makefile.in | 19 +- libjava/testsuite/lib/libjava.exp | 13 +- libjava/testsuite/libjava.jni/PR28178.c | 10 + libjava/testsuite/libjava.jni/PR28178.java | 15 + libjava/testsuite/libjava.jni/PR28178.out | 0 libjava/testsuite/libjava.jni/jni.exp | 5 +- libjava/testsuite/libjava.lang/PR27908.java | 87 + libjava/testsuite/libjava.lang/PR27908.out | 0 libjava/testsuite/libjava.lang/RH194522.java | 18 + libjava/testsuite/libjava.lang/RH194522.out | 0 libjava/testsuite/libjava.lang/StackTrace2.java | 76 + libjava/testsuite/libjava.lang/StackTrace2.out | 5 + libjava/win32-threads.cc | 3 +- libjava/win32.cc | 79 +- libmudflap/ChangeLog | 15 + libmudflap/Makefile.am | 4 +- libmudflap/Makefile.in | 64 +- libmudflap/aclocal.m4 | 5 +- libmudflap/config.h.in | 2 +- libmudflap/configure | 25 +- libmudflap/configure.ac | 6 +- libmudflap/mf-runtime.h | 4 + libmudflap/testsuite/Makefile.in | 6 +- libobjc/ChangeLog | 4 + libobjc/configure | 77 +- libstdc++-v3/ChangeLog | 2301 + libstdc++-v3/Makefile.in | 3 + libstdc++-v3/acinclude.m4 | 133 +- libstdc++-v3/aclocal.m4 | 1 + libstdc++-v3/config.h.in | 10 + libstdc++-v3/config/abi/pre/gnu.ver | 4 +- .../config/cpu/generic/atomic_builtins/atomicity.h | 45 - .../cpu/generic/atomicity_builtins/atomicity.h | 46 + .../cpu/generic/{ => atomicity_mutex}/atomicity.h | 0 libstdc++-v3/config/cpu/mips/atomicity.h | 4 +- libstdc++-v3/config/locale/generic/c_locale.h | 65 +- libstdc++-v3/config/locale/gnu/c_locale.h | 58 +- libstdc++-v3/configure | 347 +- libstdc++-v3/configure.ac | 14 +- libstdc++-v3/configure.host | 140 +- libstdc++-v3/docs/html/abi.html | 158 +- libstdc++-v3/docs/html/configopts.html | 9 + libstdc++-v3/docs/html/documentation.html | 2 +- libstdc++-v3/docs/html/ext/howto.html | 12 + .../docs/html/ext/pb_assoc/Std_hash_set_impl.jpg | Bin 51488 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/acks.html | 46 - .../docs/html/ext/pb_assoc/balls_and_bins.jpg | Bin 18512 -> 0 bytes .../docs/html/ext/pb_assoc/basic_assoc_cntnr.html | 1229 - .../pb_assoc/basic_assoc_cntnr_compound_data.html | 1244 - .../ext/pb_assoc/basic_assoc_cntnr_no_data.html | 1046 - .../docs/html/ext/pb_assoc/basic_ds_tag.html | 41 - .../html/ext/pb_assoc/basic_hash_assoc_cntnr.html | 609 - .../docs/html/ext/pb_assoc/basic_hash_ds_tag.html | 74 - .../ext/pb_assoc/basic_invalidation_guarantee.html | 41 - .../docs/html/ext/pb_assoc/basic_ms_tag.html | 41 - .../html/ext/pb_assoc/basic_tree_assoc_cntnr.html | 940 - ...basic_tree_assoc_cntnr_const_node_iterator.html | 488 - .../basic_tree_assoc_cntnr_node_iterator.html | 250 - .../ext/pb_assoc/basic_tree_assoc_cntnr_rev.html | 771 - .../pb_assoc/basic_tree_assoc_cntnr_rev_it.html | 771 - .../docs/html/ext/pb_assoc/basic_tree_ds_tag.html | 74 - .../html/ext/pb_assoc/cc_hash_assoc_cntnr.html | 679 - .../docs/html/ext/pb_assoc/cc_hash_ds_tag.html | 74 - ...cc_hash_max_collision_check_resize_trigger.html | 701 - .../docs/html/ext/pb_assoc/cc_hash_policy_cd.jpg | Bin 27118 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/cd.jpg | Bin 58234 -> 0 bytes .../html/ext/pb_assoc/component_requirements.html | 51 - .../ext/pb_assoc/compound_data_enabled_ms_tag.html | 41 - .../docs/html/ext/pb_assoc/compound_data_type.html | 128 - .../docs/html/ext/pb_assoc/compound_ds_tag.html | 77 - libstdc++-v3/docs/html/ext/pb_assoc/concepts.html | 124 - libstdc++-v3/docs/html/ext/pb_assoc/contact.html | 19 - .../html/ext/pb_assoc/counter_update_metadata.html | 101 - .../html/ext/pb_assoc/counter_update_policy.html | 380 - .../html/ext/pb_assoc/data_enabled_ms_tag.html | 41 - libstdc++-v3/docs/html/ext/pb_assoc/design.html | 23 - .../html/ext/pb_assoc/different_underlying_dss.jpg | Bin 34944 -> 0 bytes .../ext/pb_assoc/direct_mask_range_hashing.html | 251 - .../ext/pb_assoc/direct_mod_range_hashing.html | 228 - .../docs/html/ext/pb_assoc/disclaimer.html | 25 - libstdc++-v3/docs/html/ext/pb_assoc/ds_gen.html | 368 - libstdc++-v3/docs/html/ext/pb_assoc/ds_tag_cd.jpg | Bin 54661 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/ds_traits.html | 41 - .../docs/html/ext/pb_assoc/embedded_lists_1.jpg | Bin 24191 -> 0 bytes .../docs/html/ext/pb_assoc/embedded_lists_2.jpg | Bin 23766 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/examples.html | 185 - .../pb_assoc/exception_guarantees_specifics.html | 31 - .../ext/pb_assoc/find_invalidation_guarantee.html | 74 - .../docs/html/ext/pb_assoc/find_iterators_cd.jpg | Bin 48752 -> 0 bytes .../ext/pb_assoc/find_iterators_range_ops_1.jpg | Bin 18521 -> 0 bytes .../ext/pb_assoc/find_iterators_range_ops_2.jpg | Bin 25683 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/generics.html | 25 - .../html/ext/pb_assoc/gp_hash_assoc_cntnr.html | 816 - .../docs/html/ext/pb_assoc/gp_hash_ds_tag.html | 74 - .../docs/html/ext/pb_assoc/gp_hash_policy_cd.jpg | Bin 39817 -> 0 bytes .../html/ext/pb_assoc/hash_and_probe_general.html | 45 - .../html/ext/pb_assoc/hash_based_containers.html | 1056 - libstdc++-v3/docs/html/ext/pb_assoc/hash_cd.jpg | Bin 54780 -> 0 bytes .../ext/pb_assoc/hash_exponential_size_policy.html | 267 - libstdc++-v3/docs/html/ext/pb_assoc/hash_fn.html | 25 - .../pb_assoc/hash_load_check_resize_trigger.html | 744 - .../docs/html/ext/pb_assoc/hash_policies.html | 375 - .../docs/html/ext/pb_assoc/hash_policy_cd.jpg | Bin 59739 -> 0 bytes .../html/ext/pb_assoc/hash_prime_size_policy.html | 211 - .../pb_assoc/hash_range_hashing_seq_diagram.jpg | Bin 30271 -> 0 bytes .../pb_assoc/hash_range_hashing_seq_diagram2.jpg | Bin 20756 -> 0 bytes .../hash_ranged_hash_range_hashing_fns.jpg | Bin 35579 -> 0 bytes .../ext/pb_assoc/hash_standard_resize_policy.html | 986 - libstdc++-v3/docs/html/ext/pb_assoc/home.html | 56 - libstdc++-v3/docs/html/ext/pb_assoc/index.html | 12 - .../pb_assoc/insert_resize_sequence_diagram1.jpg | Bin 66060 -> 0 bytes .../pb_assoc/insert_resize_sequence_diagram2.jpg | Bin 43557 -> 0 bytes .../pb_assoc/insert_resize_sequence_diagram3.jpg | Bin 39549 -> 0 bytes .../html/ext/pb_assoc/insert_type_methods.html | 42 - libstdc++-v3/docs/html/ext/pb_assoc/interface.html | 342 - .../html/ext/pb_assoc/interval_node_invariants.jpg | Bin 31555 -> 0 bytes .../docs/html/ext/pb_assoc/introduction.html | 31 - .../ext/pb_assoc/invalidation_guarantee_cd.jpg | Bin 23162 -> 0 bytes .../ext/pb_assoc/invalidation_guarantee_erase.jpg | Bin 56109 -> 0 bytes .../docs/html/ext/pb_assoc/lib_download.html | 47 - .../docs/html/ext/pb_assoc/linear_probe_fn.html | 238 - .../docs/html/ext/pb_assoc/list_updates.html | 138 - .../docs/html/ext/pb_assoc/lu_assoc_cntnr.html | 570 - .../html/ext/pb_assoc/lu_based_containers.html | 225 - libstdc++-v3/docs/html/ext/pb_assoc/lu_cd.jpg | Bin 60906 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/lu_ds_tag.html | 74 - libstdc++-v3/docs/html/ext/pb_assoc/lu_ops.jpg | Bin 36112 -> 0 bytes .../docs/html/ext/pb_assoc/mmap_value_utils.html | 128 - .../docs/html/ext/pb_assoc/motivation.html | 281 - .../pb_assoc/move_to_front_update_metadata.html | 41 - .../ext/pb_assoc/move_to_front_update_policy.html | 256 - libstdc++-v3/docs/html/ext/pb_assoc/ms_cd.jpg | Bin 61973 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/ms_gen.html | 440 - libstdc++-v3/docs/html/ext/pb_assoc/ms_tag_cd.jpg | Bin 21009 -> 0 bytes libstdc++-v3/docs/html/ext/pb_assoc/ms_traits.html | 131 - .../ext/pb_assoc/node_invariant_invalidations.jpg | Bin 43521 -> 0 bytes .../docs/html/ext/pb_assoc/node_invariants.html | 154 - .../docs/html/ext/pb_assoc/node_invariants.jpg | Bin 32622 -> 0 bytes .../docs/html/ext/pb_assoc/non_unique_mapping.html | 404 - .../ext/pb_assoc/non_unique_mapping_containers.jpg | Bin 19257 -> 0 bytes .../docs/html/ext/pb_assoc/null_data_type.html | 41 - .../docs/html/ext/pb_assoc/null_hash_fn.html | 44 - .../docs/html/ext/pb_assoc/null_probe_fn.html | 44 - .../docs/html/ext/pb_assoc/order_by_key.html | 254 - .../html/ext/pb_assoc/order_statistics_key.html | 373 - .../ext/pb_assoc/order_statistics_key_cmp.html | 422 - .../pb_assoc/order_statistics_node_updator.html | 278 - .../docs/html/ext/pb_assoc/ov_tree_ds_tag.html | 74 - libstdc++-v3/docs/html/ext/pb_assoc/overview.html | 139 - .../docs/html/ext/pb_assoc/pb_assoc_ex.html | 74 - .../docs/html/ext/pb_assoc/portability.html | 26 - .../docs/html/ext/pb_assoc/quadratic_probe_fn.html | 238 - .../ext/pb_assoc/range_invalidation_guarantee.html | 74 - .../html/ext/pb_assoc/rank_node_invariants.jpg | Bin 28798 -> 0 bytes .../ext/pb_assoc/rationale_null_node_updator.jpg | Bin 27057 -> 0 bytes .../docs/html/ext/pb_assoc/rb_tree_ds_tag.html | 74 - .../docs/html/ext/pb_assoc/reference_iterator.jpg | Bin 32467 -> 0 bytes .../docs/html/ext/pb_assoc/references.html | 94 - .../docs/html/ext/pb_assoc/regression_tests.html | 25 - .../docs/html/ext/pb_assoc/resize_general.html | 28 - .../docs/html/ext/pb_assoc/resize_policies.html | 487 - .../docs/html/ext/pb_assoc/resize_policy_cd.jpg | Bin 58948 -> 0 bytes .../ext/pb_assoc/restoring_node_invariants.jpg | Bin 26335 -> 0 bytes .../docs/html/ext/pb_assoc/sample_node_updator.hpp | 116 - .../docs/html/ext/pb_assoc/sample_probe_fn.hpp | 121 - .../docs/html/ext/pb_assoc/sample_probe_fn.html | 177 - .../html/ext/pb_assoc/sample_range_hashing.hpp | 147 - .../html/ext/pb_assoc/sample_range_hashing.html | 213 - .../html/ext/pb_assoc/sample_ranged_hash_fn.hpp | 141 - .../html/ext/pb_assoc/sample_ranged_hash_fn.html | 129 - .../html/ext/pb_assoc/sample_ranged_probe_fn.hpp | 143 - .../html/ext/pb_assoc/sample_ranged_probe_fn.html | 129 - .../html/ext/pb_assoc/sample_resize_policy.hpp | 310 - .../html/ext/pb_assoc/sample_resize_policy.html | 536 - .../html/ext/pb_assoc/sample_resize_trigger.hpp | 341 - .../docs/html/ext/pb_assoc/sample_size_policy.hpp | 140 - .../html/ext/pb_assoc/sample_update_policy.hpp | 171 - .../html/ext/pb_assoc/size_policies_general.html | 22 - .../docs/html/ext/pb_assoc/splay_tree_ds_tag.html | 74 - .../docs/html/ext/pb_assoc/timing_tests.html | 60 - libstdc++-v3/docs/html/ext/pb_assoc/toc.html | 35 - .../docs/html/ext/pb_assoc/tree_assoc_cntnr.html | 493 - .../tree_assoc_cntnr_const_node_iterator.html | 488 - .../pb_assoc/tree_assoc_cntnr_node_iterator.html | 250 - .../html/ext/pb_assoc/tree_based_containers.html | 246 - libstdc++-v3/docs/html/ext/pb_assoc/tree_cd.jpg | Bin 60672 -> 0 bytes .../ext/pb_assoc/trigger_policies_general.html | 23 - libstdc++-v3/docs/html/ext/pb_assoc/tutorial.html | 66 - .../docs/html/ext/pb_assoc/update_seq_diagram.jpg | Bin 23396 -> 0 bytes .../docs/html/ext/pb_ds/PythonPoweredSmall.gif | Bin 0 -> 361 bytes libstdc++-v3/docs/html/ext/pb_ds/acks.html | 65 + .../docs/html/ext/pb_ds/assoc_container_tag_cd.png | Bin 0 -> 21668 bytes .../docs/html/ext/pb_ds/assoc_container_tag_cd.svg | 491 + .../html/ext/pb_ds/assoc_container_traits.html | 170 + libstdc++-v3/docs/html/ext/pb_ds/assoc_design.html | 46 + .../docs/html/ext/pb_ds/assoc_examples.html | 174 + .../html/ext/pb_ds/assoc_performance_tests.html | 345 + .../html/ext/pb_ds/assoc_regression_tests.html | 96 + libstdc++-v3/docs/html/ext/pb_ds/assoc_tests.html | 24 + .../html/ext/pb_ds/associative_container_tag.html | 47 + .../docs/html/ext/pb_ds/balls_and_bins.png | Bin 0 -> 10139 bytes .../docs/html/ext/pb_ds/basic_hash_table.html | 436 + .../docs/html/ext/pb_ds/basic_hash_tag.html | 47 + .../ext/pb_ds/basic_invalidation_guarantee.html | 26 + libstdc++-v3/docs/html/ext/pb_ds/basic_tree.html | 660 + ...c_tree_assoc_container_const_node_iterator.html | 383 + .../docs/html/ext/pb_ds/basic_tree_tag.html | 47 + .../docs/html/ext/pb_ds/binary_heap_tag.html | 47 + ...ority_queue_random_int_push_timing_test_gcc.png | Bin 0 -> 5357 bytes ...ity_queue_random_int_push_timing_test_local.png | Bin 0 -> 6710 bytes ...rity_queue_random_int_push_timing_test_msvc.png | Bin 0 -> 5373 bytes .../docs/html/ext/pb_ds/binomial_heap_tag.html | 47 + ...cc_hash_max_collision_check_resize_trigger.html | 532 + .../cc_hash_random_int_find_timing_test_gcc.png | Bin 0 -> 7074 bytes .../cc_hash_random_int_find_timing_test_local.png | Bin 0 -> 8534 bytes .../cc_hash_random_int_find_timing_test_msvc.png | Bin 0 -> 7235 bytes ...h_random_int_subscript_timing_test_find_gcc.png | Bin 0 -> 6811 bytes ...random_int_subscript_timing_test_find_local.png | Bin 0 -> 8445 bytes ..._random_int_subscript_timing_test_find_msvc.png | Bin 0 -> 7230 bytes ...random_int_subscript_timing_test_insert_gcc.png | Bin 0 -> 7636 bytes ...ndom_int_subscript_timing_test_insert_local.png | Bin 0 -> 9396 bytes ...andom_int_subscript_timing_test_insert_msvc.png | Bin 0 -> 6840 bytes .../docs/html/ext/pb_ds/cc_hash_table.html | 724 + libstdc++-v3/docs/html/ext/pb_ds/cc_hash_tag.html | 47 + ...random_int_subscript_timing_test_insert_gcc.png | Bin 0 -> 7355 bytes ...ndom_int_subscript_timing_test_insert_local.png | Bin 0 -> 9557 bytes ...andom_int_subscript_timing_test_insert_msvc.png | Bin 0 -> 7572 bytes .../docs/html/ext/pb_ds/checked_by_tidy.gif | Bin 0 -> 1367 bytes libstdc++-v3/docs/html/ext/pb_ds/concepts.html | 118 + libstdc++-v3/docs/html/ext/pb_ds/contact.html | 22 + .../docs/html/ext/pb_ds/container_base.html | 1063 + libstdc++-v3/docs/html/ext/pb_ds/container_cd.png | Bin 0 -> 11884 bytes libstdc++-v3/docs/html/ext/pb_ds/container_cd.svg | 418 + .../docs/html/ext/pb_ds/container_tag.html | 24 + .../docs/html/ext/pb_ds/counter_lu_policy.html | 259 + libstdc++-v3/docs/html/ext/pb_ds/design.html | 96 + .../html/ext/pb_ds/different_underlying_dss.png | Bin 0 -> 31858 bytes .../html/ext/pb_ds/direct_mask_range_hashing.html | 167 + .../html/ext/pb_ds/direct_mod_range_hashing.html | 144 + libstdc++-v3/docs/html/ext/pb_ds/disclaimer.html | 34 + libstdc++-v3/docs/html/ext/pb_ds/ds_gen.html | 344 + .../docs/html/ext/pb_ds/embedded_lists_1.png | Bin 0 -> 16350 bytes .../docs/html/ext/pb_ds/embedded_lists_2.png | Bin 0 -> 18206 bytes .../docs/html/ext/pb_ds/embedded_lists_3.png | Bin 0 -> 5612 bytes libstdc++-v3/docs/html/ext/pb_ds/examples.html | 24 + libstdc++-v3/docs/html/ext/pb_ds/exceptions.html | 46 + .../gp_hash_random_int_find_timing_test_gcc.png | Bin 0 -> 6194 bytes .../gp_hash_random_int_find_timing_test_local.png | Bin 0 -> 7916 bytes .../gp_hash_random_int_find_timing_test_msvc.png | Bin 0 -> 6140 bytes ...h_random_int_subscript_timing_test_find_gcc.png | Bin 0 -> 6110 bytes ...random_int_subscript_timing_test_find_local.png | Bin 0 -> 7570 bytes ..._random_int_subscript_timing_test_find_msvc.png | Bin 0 -> 6314 bytes ...random_int_subscript_timing_test_insert_gcc.png | Bin 0 -> 6763 bytes ...ndom_int_subscript_timing_test_insert_local.png | Bin 0 -> 8499 bytes ...andom_int_subscript_timing_test_insert_msvc.png | Bin 0 -> 6721 bytes .../docs/html/ext/pb_ds/gp_hash_table.html | 891 + libstdc++-v3/docs/html/ext/pb_ds/gp_hash_tag.html | 47 + .../docs/html/ext/pb_ds/hash_based_containers.html | 835 + .../ext/pb_ds/hash_exponential_size_policy.html | 183 + .../ext/pb_ds/hash_load_check_resize_trigger.html | 583 + .../docs/html/ext/pb_ds/hash_policy_cd.png | Bin 0 -> 25302 bytes .../html/ext/pb_ds/hash_prime_size_policy.html | 149 + .../hash_random_int_erase_mem_usage_test.html | 173 + .../hash_random_int_erase_mem_usage_test_gcc.png | Bin 0 -> 6356 bytes .../hash_random_int_erase_mem_usage_test_local.png | Bin 0 -> 7405 bytes .../hash_random_int_erase_mem_usage_test_msvc.png | Bin 0 -> 6401 bytes .../hash_random_int_find_find_timing_test.html | 247 + ...hash_random_int_subscript_find_timing_test.html | 220 + ...sh_random_int_subscript_insert_timing_test.html | 365 + .../ext/pb_ds/hash_range_hashing_seq_diagram.png | Bin 0 -> 12962 bytes .../ext/pb_ds/hash_range_hashing_seq_diagram2.png | Bin 0 -> 8918 bytes .../pb_ds/hash_ranged_hash_range_hashing_fns.png | Bin 0 -> 19773 bytes .../ext/pb_ds/hash_standard_resize_policy.html | 795 + .../ext/pb_ds/hash_text_find_find_timing_test.html | 164 + ...hash_zlob_random_int_find_find_timing_test.html | 163 + .../hash_zlob_random_int_find_timing_test_gcc.png | Bin 0 -> 6910 bytes ...hash_zlob_random_int_find_timing_test_local.png | Bin 0 -> 8436 bytes .../hash_zlob_random_int_find_timing_test_msvc.png | Bin 0 -> 7204 bytes libstdc++-v3/docs/html/ext/pb_ds/index.html | 146 + libstdc++-v3/docs/html/ext/pb_ds/insert_error.html | 53 + .../ext/pb_ds/insert_resize_sequence_diagram1.png | Bin 0 -> 25834 bytes .../ext/pb_ds/insert_resize_sequence_diagram2.png | Bin 0 -> 25522 bytes .../ext/pb_ds/insert_resize_sequence_diagram3.png | Bin 0 -> 24542 bytes libstdc++-v3/docs/html/ext/pb_ds/interface.html | 446 + libstdc++-v3/docs/html/ext/pb_ds/introduction.html | 120 + .../html/ext/pb_ds/invalidation_guarantee_cd.png | Bin 0 -> 8331 bytes .../ext/pb_ds/invalidation_guarantee_erase.png | Bin 0 -> 25884 bytes libstdc++-v3/docs/html/ext/pb_ds/join_error.html | 48 + .../docs/html/ext/pb_ds/linear_probe_fn.html | 140 + libstdc++-v3/docs/html/ext/pb_ds/list_update.html | 316 + .../docs/html/ext/pb_ds/list_update_tag.html | 47 + libstdc++-v3/docs/html/ext/pb_ds/lu.png | Bin 0 -> 20987 bytes .../docs/html/ext/pb_ds/lu_based_containers.html | 229 + libstdc++-v3/docs/html/ext/pb_ds/misc.html | 26 + libstdc++-v3/docs/html/ext/pb_ds/motivation.html | 993 + .../html/ext/pb_ds/move_to_front_lu_policy.html | 194 + .../multimap_text_find_timing_test_large.html | 215 + ...ap_text_find_timing_test_large_s2p_hash_gcc.png | Bin 0 -> 6323 bytes ..._text_find_timing_test_large_s2p_hash_local.png | Bin 0 -> 7299 bytes ...p_text_find_timing_test_large_s2p_hash_msvc.png | Bin 0 -> 6490 bytes ...ap_text_find_timing_test_large_s2p_tree_gcc.png | Bin 0 -> 6284 bytes ..._text_find_timing_test_large_s2p_tree_local.png | Bin 0 -> 6706 bytes ...p_text_find_timing_test_large_s2p_tree_msvc.png | Bin 0 -> 6204 bytes .../multimap_text_find_timing_test_small.html | 215 + ...ap_text_find_timing_test_small_s2p_hash_gcc.png | Bin 0 -> 6237 bytes ..._text_find_timing_test_small_s2p_hash_local.png | Bin 0 -> 6732 bytes ...p_text_find_timing_test_small_s2p_hash_msvc.png | Bin 0 -> 6268 bytes ...ap_text_find_timing_test_small_s2p_tree_gcc.png | Bin 0 -> 6064 bytes ..._text_find_timing_test_small_s2p_tree_local.png | Bin 0 -> 6396 bytes ...p_text_find_timing_test_small_s2p_tree_msvc.png | Bin 0 -> 6012 bytes .../multimap_text_insert_mem_usage_test_large.html | 210 + ...xt_insert_mem_usage_test_large_s2p_hash_gcc.png | Bin 0 -> 6835 bytes ..._insert_mem_usage_test_large_s2p_hash_local.png | Bin 0 -> 7275 bytes ...t_insert_mem_usage_test_large_s2p_hash_msvc.png | Bin 0 -> 6588 bytes ...xt_insert_mem_usage_test_large_s2p_tree_gcc.png | Bin 0 -> 6778 bytes ..._insert_mem_usage_test_large_s2p_tree_local.png | Bin 0 -> 7191 bytes ...t_insert_mem_usage_test_large_s2p_tree_msvc.png | Bin 0 -> 6535 bytes .../multimap_text_insert_mem_usage_test_small.html | 212 + ...xt_insert_mem_usage_test_small_s2p_hash_gcc.png | Bin 0 -> 6449 bytes ..._insert_mem_usage_test_small_s2p_hash_local.png | Bin 0 -> 6845 bytes ...t_insert_mem_usage_test_small_s2p_hash_msvc.png | Bin 0 -> 6570 bytes ...xt_insert_mem_usage_test_small_s2p_tree_gcc.png | Bin 0 -> 6419 bytes ..._insert_mem_usage_test_small_s2p_tree_local.png | Bin 0 -> 6925 bytes ...t_insert_mem_usage_test_small_s2p_tree_msvc.png | Bin 0 -> 6569 bytes .../multimap_text_insert_timing_test_large.html | 212 + ..._text_insert_timing_test_large_s2p_hash_gcc.png | Bin 0 -> 6380 bytes ...ext_insert_timing_test_large_s2p_hash_local.png | Bin 0 -> 7000 bytes ...text_insert_timing_test_large_s2p_hash_msvc.png | Bin 0 -> 6460 bytes ..._text_insert_timing_test_large_s2p_tree_gcc.png | Bin 0 -> 6204 bytes ...ext_insert_timing_test_large_s2p_tree_local.png | Bin 0 -> 6764 bytes ...text_insert_timing_test_large_s2p_tree_msvc.png | Bin 0 -> 6357 bytes .../multimap_text_insert_timing_test_small.html | 217 + ..._text_insert_timing_test_small_s2p_hash_gcc.png | Bin 0 -> 6456 bytes ...ext_insert_timing_test_small_s2p_hash_local.png | Bin 0 -> 7035 bytes ...text_insert_timing_test_small_s2p_hash_msvc.png | Bin 0 -> 6547 bytes ..._text_insert_timing_test_small_s2p_tree_gcc.png | Bin 0 -> 6111 bytes ...ext_insert_timing_test_small_s2p_tree_local.png | Bin 0 -> 6853 bytes ...text_insert_timing_test_small_s2p_tree_msvc.png | Bin 0 -> 6430 bytes .../ext/pb_ds/node_invariant_invalidations.png | Bin 0 -> 32276 bytes .../docs/html/ext/pb_ds/node_invariants.png | Bin 0 -> 16553 bytes libstdc++-v3/docs/html/ext/pb_ds/null_hash_fn.html | 32 + .../docs/html/ext/pb_ds/null_lu_metadata.html | 25 + .../docs/html/ext/pb_ds/null_mapped_type.html | 25 + .../docs/html/ext/pb_ds/null_probe_fn.html | 29 + .../docs/html/ext/pb_ds/null_tree_node_update.html | 101 + .../docs/html/ext/pb_ds/null_trie_node_update.html | 102 + libstdc++-v3/docs/html/ext/pb_ds/ov_tree_tag.html | 47 + .../docs/html/ext/pb_ds/pairing_heap_tag.html | 47 + ...riority_queue_text_push_pop_timing_test_gcc.png | Bin 0 -> 5395 bytes ...ority_queue_text_push_pop_timing_test_local.png | Bin 0 -> 6892 bytes ...iority_queue_text_push_pop_timing_test_msvc.png | Bin 0 -> 5514 bytes ...ng_priority_queue_text_push_timing_test_gcc.png | Bin 0 -> 5678 bytes ..._priority_queue_text_push_timing_test_local.png | Bin 0 -> 6760 bytes ...g_priority_queue_text_push_timing_test_msvc.png | Bin 0 -> 5878 bytes libstdc++-v3/docs/html/ext/pb_ds/pat_trie.png | Bin 0 -> 26182 bytes libstdc++-v3/docs/html/ext/pb_ds/pat_trie_tag.html | 47 + .../ext/pb_ds/point_invalidation_guarantee.html | 51 + .../docs/html/ext/pb_ds/point_iterators_cd.png | Bin 0 -> 20307 bytes .../html/ext/pb_ds/point_iterators_range_ops_1.png | Bin 0 -> 14206 bytes .../html/ext/pb_ds/point_iterators_range_ops_2.png | Bin 0 -> 12876 bytes .../docs/html/ext/pb_ds/pq_container_traits.html | 132 + libstdc++-v3/docs/html/ext/pb_ds/pq_design.html | 381 + .../html/ext/pb_ds/pq_different_underlying_dss.png | Bin 0 -> 15660 bytes libstdc++-v3/docs/html/ext/pb_ds/pq_examples.html | 60 + .../docs/html/ext/pb_ds/pq_performance_tests.html | 332 + .../docs/html/ext/pb_ds/pq_regression_tests.html | 52 + libstdc++-v3/docs/html/ext/pb_ds/pq_tests.html | 24 + .../docs/html/ext/pb_ds/prerequisites.html | 46 + .../docs/html/ext/pb_ds/priority_queue.html | 995 + ...rity_queue_random_int_push_pop_timing_test.html | 161 + ...y_queue_random_int_push_pop_timing_test_gcc.png | Bin 0 -> 7350 bytes ...queue_random_int_push_pop_timing_test_local.png | Bin 0 -> 9275 bytes ..._queue_random_int_push_pop_timing_test_msvc.png | Bin 0 -> 7065 bytes ...priority_queue_random_int_push_timing_test.html | 200 + ...ority_queue_random_int_push_timing_test_gcc.png | Bin 0 -> 7021 bytes ...ity_queue_random_int_push_timing_test_local.png | Bin 0 -> 8986 bytes ...rity_queue_random_int_push_timing_test_msvc.png | Bin 0 -> 7100 bytes .../docs/html/ext/pb_ds/priority_queue_tag.html | 47 + .../docs/html/ext/pb_ds/priority_queue_tag_cd.png | Bin 0 -> 10845 bytes .../docs/html/ext/pb_ds/priority_queue_tag_cd.svg | 368 + .../priority_queue_text_join_timing_test.html | 141 + .../priority_queue_text_join_timing_test_gcc.png | Bin 0 -> 6458 bytes .../priority_queue_text_join_timing_test_local.png | Bin 0 -> 7989 bytes .../priority_queue_text_join_timing_test_msvc.png | Bin 0 -> 6461 bytes ...riority_queue_text_modify_down_timing_test.html | 204 + ...rity_queue_text_modify_down_timing_test_gcc.png | Bin 0 -> 6788 bytes ...ty_queue_text_modify_down_timing_test_local.png | Bin 0 -> 7633 bytes ...ity_queue_text_modify_down_timing_test_msvc.png | Bin 0 -> 6956 bytes ...xt_modify_down_timing_test_pairing_thin_gcc.png | Bin 0 -> 5007 bytes ..._modify_down_timing_test_pairing_thin_local.png | Bin 0 -> 5878 bytes ...t_modify_down_timing_test_pairing_thin_msvc.png | Bin 0 -> 4996 bytes .../priority_queue_text_modify_up_timing_test.html | 222 + ...iority_queue_text_modify_up_timing_test_gcc.png | Bin 0 -> 6950 bytes ...rity_queue_text_modify_up_timing_test_local.png | Bin 0 -> 7748 bytes ...ority_queue_text_modify_up_timing_test_msvc.png | Bin 0 -> 6983 bytes ...text_modify_up_timing_test_pairing_thin_gcc.png | Bin 0 -> 4867 bytes ...xt_modify_up_timing_test_pairing_thin_local.png | Bin 0 -> 6105 bytes ...ext_modify_up_timing_test_pairing_thin_msvc.png | Bin 0 -> 5216 bytes .../priority_queue_text_pop_mem_usage_test.html | 143 + .../priority_queue_text_pop_mem_usage_test_gcc.png | Bin 0 -> 6582 bytes ...riority_queue_text_pop_mem_usage_test_local.png | Bin 0 -> 7424 bytes ...priority_queue_text_pop_mem_usage_test_msvc.png | Bin 0 -> 6849 bytes .../priority_queue_text_push_pop_timing_test.html | 209 + ...riority_queue_text_push_pop_timing_test_gcc.png | Bin 0 -> 7072 bytes ...ority_queue_text_push_pop_timing_test_local.png | Bin 0 -> 9006 bytes ...iority_queue_text_push_pop_timing_test_msvc.png | Bin 0 -> 7289 bytes .../priority_queue_text_push_timing_test.html | 219 + .../priority_queue_text_push_timing_test_gcc.png | Bin 0 -> 6832 bytes .../priority_queue_text_push_timing_test_local.png | Bin 0 -> 8477 bytes .../priority_queue_text_push_timing_test_msvc.png | Bin 0 -> 7266 bytes .../docs/html/ext/pb_ds/quadratic_probe_fn.html | 141 + .../random_int_find_find_timing_test_tree_gcc.png | Bin 0 -> 5960 bytes ...random_int_find_find_timing_test_tree_local.png | Bin 0 -> 7377 bytes .../random_int_find_find_timing_test_tree_msvc.png | Bin 0 -> 5636 bytes .../ext/pb_ds/range_invalidation_guarantee.html | 52 + .../html/ext/pb_ds/rationale_null_node_updator.png | Bin 0 -> 25097 bytes libstdc++-v3/docs/html/ext/pb_ds/rb_tree_tag.html | 47 + .../docs/html/ext/pb_ds/rc_binomial_heap_tag.html | 47 + libstdc++-v3/docs/html/ext/pb_ds/references.html | 258 + libstdc++-v3/docs/html/ext/pb_ds/resize_error.html | 50 + .../docs/html/ext/pb_ds/resize_policy_cd.png | Bin 0 -> 20806 bytes .../html/ext/pb_ds/restoring_node_invariants.png | Bin 0 -> 14432 bytes .../docs/html/ext/pb_ds/sample_probe_fn.html | 152 + .../docs/html/ext/pb_ds/sample_range_hashing.html | 172 + .../docs/html/ext/pb_ds/sample_ranged_hash_fn.html | 171 + .../html/ext/pb_ds/sample_ranged_probe_fn.html | 178 + .../docs/html/ext/pb_ds/sample_resize_policy.html | 413 + .../docs/html/ext/pb_ds/sample_resize_trigger.html | 462 + .../docs/html/ext/pb_ds/sample_size_policy.html | 163 + .../html/ext/pb_ds/sample_tree_node_update.html | 193 + .../ext/pb_ds/sample_trie_e_access_traits.html | 231 + .../html/ext/pb_ds/sample_trie_node_update.html | 194 + .../docs/html/ext/pb_ds/sample_update_policy.html | 178 + libstdc++-v3/docs/html/ext/pb_ds/simple_list.png | Bin 0 -> 4299 bytes .../docs/html/ext/pb_ds/splay_tree_tag.html | 47 + .../ext/pb_ds/string_trie_e_access_traits.html | 400 + libstdc++-v3/docs/html/ext/pb_ds/tests.html | 24 + .../ext/pb_ds/text_find_timing_test_hash_gcc.png | Bin 0 -> 7013 bytes .../ext/pb_ds/text_find_timing_test_hash_local.png | Bin 0 -> 9361 bytes .../ext/pb_ds/text_find_timing_test_hash_msvc.png | Bin 0 -> 6932 bytes .../pb_ds/text_find_timing_test_tree_like_gcc.png | Bin 0 -> 6207 bytes .../text_find_timing_test_tree_like_local.png | Bin 0 -> 7650 bytes .../pb_ds/text_find_timing_test_tree_like_msvc.png | Bin 0 -> 6059 bytes .../docs/html/ext/pb_ds/thin_heap_tag.html | 47 + libstdc++-v3/docs/html/ext/pb_ds/tree.html | 516 + .../docs/html/ext/pb_ds/tree_based_containers.html | 358 + .../docs/html/ext/pb_ds/tree_node_iterator.html | 143 + .../html/ext/pb_ds/tree_node_updator_policy_cd.png | Bin 0 -> 9236 bytes .../pb_ds/tree_order_statistics_node_update.html | 678 + .../pb_ds/tree_order_statistics_timing_test.html | 118 + .../tree_order_statistics_timing_test_gcc.png | Bin 0 -> 5698 bytes .../tree_order_statistics_timing_test_local.png | Bin 0 -> 6739 bytes .../tree_order_statistics_timing_test_msvc.png | Bin 0 -> 5684 bytes .../tree_random_int_find_find_timing_test.html | 160 + .../ext/pb_ds/tree_split_join_timing_test.html | 143 + .../ext/pb_ds/tree_split_join_timing_test_gcc.png | Bin 0 -> 5649 bytes .../pb_ds/tree_split_join_timing_test_local.png | Bin 0 -> 6734 bytes .../ext/pb_ds/tree_split_join_timing_test_msvc.png | Bin 0 -> 5675 bytes libstdc++-v3/docs/html/ext/pb_ds/tree_tag.html | 47 + .../ext/pb_ds/tree_text_find_find_timing_test.html | 162 + .../ext/pb_ds/tree_text_insert_timing_test.html | 226 + .../tree_text_insert_timing_test_node_tree_gcc.png | Bin 0 -> 5373 bytes ...ree_text_insert_timing_test_node_tree_local.png | Bin 0 -> 6690 bytes ...tree_text_insert_timing_test_node_tree_msvc.png | Bin 0 -> 5212 bytes .../tree_text_insert_timing_test_pat_trie_gcc.png | Bin 0 -> 4895 bytes ...tree_text_insert_timing_test_pat_trie_local.png | Bin 0 -> 6011 bytes .../tree_text_insert_timing_test_pat_trie_msvc.png | Bin 0 -> 4881 bytes ...ree_text_insert_timing_test_vector_tree_gcc.png | Bin 0 -> 5140 bytes ...e_text_insert_timing_test_vector_tree_local.png | Bin 0 -> 6270 bytes ...ee_text_insert_timing_test_vector_tree_msvc.png | Bin 0 -> 5131 bytes .../pb_ds/tree_text_lor_find_find_timing_test.html | 126 + .../pb_ds/tree_text_lor_find_timing_test_gcc.png | Bin 0 -> 6162 bytes .../pb_ds/tree_text_lor_find_timing_test_local.png | Bin 0 -> 7796 bytes .../pb_ds/tree_text_lor_find_timing_test_msvc.png | Bin 0 -> 5831 bytes libstdc++-v3/docs/html/ext/pb_ds/trie.html | 489 + .../docs/html/ext/pb_ds/trie_based_containers.html | 241 + .../html/ext/pb_ds/trie_const_node_iterator.html | 478 + .../docs/html/ext/pb_ds/trie_node_iterator.html | 235 + .../html/ext/pb_ds/trie_node_updator_policy_cd.png | Bin 0 -> 12126 bytes .../pb_ds/trie_order_statistics_node_update.html | 770 + .../ext/pb_ds/trie_prefix_search_node_update.html | 628 + libstdc++-v3/docs/html/ext/pb_ds/trie_tag.html | 47 + .../docs/html/ext/pb_ds/trivial_iterator_tag.html | 25 + libstdc++-v3/docs/html/ext/pb_ds/tutorial.html | 670 + .../docs/html/ext/pb_ds/update_policy_cd.png | Bin 0 -> 8570 bytes .../docs/html/ext/pb_ds/update_seq_diagram.png | Bin 0 -> 10789 bytes libstdc++-v3/docs/html/ext/tr1.html | 50 +- libstdc++-v3/docs/html/test.html | 13 +- libstdc++-v3/include/Makefile.am | 759 +- libstdc++-v3/include/Makefile.in | 771 +- libstdc++-v3/include/bits/atomicity.h | 31 +- libstdc++-v3/include/bits/basic_string.tcc | 22 +- libstdc++-v3/include/bits/c++config | 15 +- libstdc++-v3/include/bits/cpp_type_traits.h | 34 +- libstdc++-v3/include/bits/deque.tcc | 22 + libstdc++-v3/include/bits/locale_facets.tcc | 274 +- libstdc++-v3/include/bits/ostream.tcc | 21 +- libstdc++-v3/include/bits/postypes.h | 20 +- libstdc++-v3/include/bits/stl_algo.h | 215 +- libstdc++-v3/include/bits/stl_algobase.h | 26 - libstdc++-v3/include/bits/stl_bvector.h | 69 +- libstdc++-v3/include/bits/stl_deque.h | 5 + libstdc++-v3/include/bits/stl_heap.h | 6 +- libstdc++-v3/include/bits/stl_queue.h | 67 +- libstdc++-v3/include/bits/stl_stack.h | 9 +- libstdc++-v3/include/bits/stl_tempbuf.h | 9 +- libstdc++-v3/include/bits/streambuf_iterator.h | 4 +- libstdc++-v3/include/bits/valarray_before.h | 4 +- libstdc++-v3/include/debug/debug.h | 2 + libstdc++-v3/include/ext/bitmap_allocator.h | 35 +- libstdc++-v3/include/ext/codecvt_specializations.h | 23 +- libstdc++-v3/include/ext/mt_allocator.h | 27 +- libstdc++-v3/include/ext/pb_assoc/assoc_cntnr.hpp | 1590 - libstdc++-v3/include/ext/pb_assoc/data_type.hpp | 60 - .../ext/pb_assoc/detail/assoc_cntnr_base.hpp | 346 - .../constructor_destructor_fn_imps.hpp | 164 - .../constructors_destructor_fn_imps.hpp | 48 - .../detail/basic_assoc_cntnr/d_extract_key.hpp | 51 - .../detail/basic_assoc_cntnr/d_find_fn_imps.hpp | 51 - .../detail/basic_assoc_cntnr/d_insert_fn_imps.hpp | 51 - .../detail/basic_assoc_cntnr/erase_fn_imps.hpp | 68 - .../detail/basic_assoc_cntnr/extract_key.hpp | 51 - .../detail/basic_assoc_cntnr/info_fn_imps.hpp | 67 - .../detail/basic_assoc_cntnr/insert_fn_imps.hpp | 51 - .../detail/basic_assoc_cntnr/iterators_fn_imps.hpp | 76 - .../constructor_destructor_fn_imps.hpp | 50 - .../constructors_destructor_fn_imps.hpp | 50 - .../basic_hash_assoc_cntnr/resize_fn_imps.hpp | 51 - .../constructor_destructor_fn_imps.hpp | 50 - .../constructors_destructor_fn_imps.hpp | 50 - .../basic_tree_assoc_cntnr/erase_fn_imps.hpp | 60 - .../node_iteration_fn_imps.hpp | 44 - .../policy_access_fn_imps.hpp | 76 - .../basic_tree_assoc_cntnr/r_erase_fn_imps.hpp | 44 - .../r_range_iteration_fn_imps.hpp | 43 - .../range_iteration_fn_imps.hpp | 43 - .../basic_tree_assoc_cntnr/split_join_fn_imps.hpp | 60 - .../detail/bin_search_tree_/bin_search_tree_.hpp | 525 - .../bin_search_tree_/cond_dtor_entry_dealtor.hpp | 74 - .../cond_key_dtor_entry_dealtor.hpp | 85 - .../constructors_destructor_fn_imps.hpp | 258 - .../detail/bin_search_tree_/debug_fn_imps.hpp | 278 - .../detail/bin_search_tree_/erase_fn_imps.hpp | 124 - .../detail/bin_search_tree_/find_fn_imps.hpp | 184 - .../detail/bin_search_tree_/find_iterators.hpp | 391 - .../detail/bin_search_tree_/info_fn_imps.hpp | 87 - .../detail/bin_search_tree_/insert_fn_imps.hpp | 215 - .../detail/bin_search_tree_/iterators_fn_imps.hpp | 164 - .../detail/bin_search_tree_/node_iterators.hpp | 144 - .../detail/bin_search_tree_/r_erase_fn_imps.hpp | 124 - .../detail/bin_search_tree_/rotate_fn_imps.hpp | 163 - .../detail/bin_search_tree_/split_join_fn_imps.hpp | 192 - .../constructor_destructor_fn_imps.hpp | 153 - .../ext/pb_assoc/detail/cc_ht_map_/cc_ht_map_.hpp | 602 - .../ext/pb_assoc/detail/cc_ht_map_/cmp_fn_imps.hpp | 92 - .../cc_ht_map_/cond_key_dtor_entry_dealtor.hpp | 138 - .../cc_ht_map_/constructor_destructor_fn_imps.hpp | 227 - ...onstructor_destructor_no_store_hash_fn_imps.hpp | 61 - .../constructor_destructor_store_hash_fn_imps.hpp | 63 - .../pb_assoc/detail/cc_ht_map_/debug_fn_imps.hpp | 83 - .../cc_ht_map_/debug_no_store_hash_fn_imps.hpp | 54 - .../detail/cc_ht_map_/debug_store_hash_fn_imps.hpp | 59 - .../detail/cc_ht_map_/entry_list_fn_imps.hpp | 111 - .../pb_assoc/detail/cc_ht_map_/erase_fn_imps.hpp | 114 - .../cc_ht_map_/erase_no_store_hash_fn_imps.hpp | 159 - .../detail/cc_ht_map_/erase_store_hash_fn_imps.hpp | 159 - .../pb_assoc/detail/cc_ht_map_/find_fn_imps.hpp | 83 - .../cc_ht_map_/find_no_store_hash_fn_imps.hpp | 86 - .../detail/cc_ht_map_/find_store_hash_fn_imps.hpp | 88 - .../pb_assoc/detail/cc_ht_map_/info_fn_imps.hpp | 68 - .../pb_assoc/detail/cc_ht_map_/insert_fn_imps.hpp | 63 - .../cc_ht_map_/insert_no_store_hash_fn_imps.hpp | 148 - .../cc_ht_map_/insert_store_hash_fn_imps.hpp | 157 - .../detail/cc_ht_map_/iterators_fn_imps.hpp | 153 - .../detail/cc_ht_map_/policy_access_fn_imps.hpp | 108 - .../pb_assoc/detail/cc_ht_map_/resize_fn_imps.hpp | 146 - .../cc_ht_map_/resize_no_store_hash_fn_imps.hpp | 61 - .../cc_ht_map_/resize_store_hash_fn_imps.hpp | 63 - .../pb_assoc/detail/cc_ht_map_/size_fn_imps.hpp | 69 - .../detail/cc_ht_map_/standard_policies.hpp | 50 - .../include/ext/pb_assoc/detail/cond_dealtor.hpp | 129 - .../detail/constructors_destructor_fn_imps.hpp | 126 - .../include/ext/pb_assoc/detail/ds_trait_imp.hpp | 336 - .../ext/pb_assoc/detail/eq_fn/eq_by_less.hpp | 78 - .../ext/pb_assoc/detail/eq_fn/hash_eq_fn.hpp | 211 - .../constructor_destructor_fn_imps.hpp | 166 - .../gp_ht_map_/constructor_destructor_fn_imps.hpp | 255 - ...onstructor_destructor_no_store_hash_fn_imps.hpp | 61 - .../constructor_destructor_store_hash_fn_imps.hpp | 64 - .../pb_assoc/detail/gp_ht_map_/debug_fn_imps.hpp | 60 - .../gp_ht_map_/debug_no_store_hash_fn_imps.hpp | 81 - .../detail/gp_ht_map_/debug_store_hash_fn_imps.hpp | 86 - .../pb_assoc/detail/gp_ht_map_/erase_fn_imps.hpp | 110 - .../gp_ht_map_/erase_no_store_hash_fn_imps.hpp | 104 - .../detail/gp_ht_map_/erase_store_hash_fn_imps.hpp | 109 - .../pb_assoc/detail/gp_ht_map_/find_fn_imps.hpp | 94 - .../gp_ht_map_/find_no_store_hash_fn_imps.hpp | 116 - .../detail/gp_ht_map_/find_store_hash_fn_imps.hpp | 118 - .../ext/pb_assoc/detail/gp_ht_map_/gp_ht_map_.hpp | 602 - .../pb_assoc/detail/gp_ht_map_/info_fn_imps.hpp | 68 - .../pb_assoc/detail/gp_ht_map_/insert_fn_imps.hpp | 67 - .../gp_ht_map_/insert_no_store_hash_fn_imps.hpp | 184 - .../gp_ht_map_/insert_store_hash_fn_imps.hpp | 195 - .../detail/gp_ht_map_/iterator_fn_imps.hpp | 181 - .../detail/gp_ht_map_/policy_access_fn_imps.hpp | 124 - .../pb_assoc/detail/gp_ht_map_/resize_fn_imps.hpp | 158 - .../gp_ht_map_/resize_no_store_hash_fn_imps.hpp | 84 - .../gp_ht_map_/resize_store_hash_fn_imps.hpp | 93 - .../hash_fn/direct_mask_range_hashing_imp.hpp | 67 - .../hash_fn/direct_mod_range_hashing_imp.hpp | 67 - .../detail/hash_fn/linear_probe_fn_imp.hpp | 58 - .../detail/hash_fn/mask_based_range_hashing.hpp | 141 - .../detail/hash_fn/mod_based_range_hashing.hpp | 112 - .../ext/pb_assoc/detail/hash_fn/probe_fn_base.hpp | 96 - .../detail/hash_fn/quadratic_probe_fn_imp.hpp | 57 - .../ext/pb_assoc/detail/hash_fn/ranged_hash_fn.hpp | 459 - .../pb_assoc/detail/hash_fn/ranged_probe_fn.hpp | 473 - .../ext/pb_assoc/detail/hash_types_traits.hpp | 94 - .../constructor_destructor_fn_imps.hpp | 121 - .../lu_assoc_cntnr/policy_access_fn_imps.hpp | 77 - .../lu_map_/constructor_destructor_fn_imps.hpp | 178 - .../ext/pb_assoc/detail/lu_map_/debug_fn_imps.hpp | 66 - .../ext/pb_assoc/detail/lu_map_/erase_fn_imps.hpp | 129 - .../ext/pb_assoc/detail/lu_map_/find_fn_imps.hpp | 136 - .../ext/pb_assoc/detail/lu_map_/info_fn_imps.hpp | 67 - .../ext/pb_assoc/detail/lu_map_/insert_fn_imps.hpp | 148 - .../pb_assoc/detail/lu_map_/iterators_fn_imps.hpp | 106 - .../ext/pb_assoc/detail/lu_map_/lu_map_.hpp | 464 - .../detail/lu_map_/policy_access_fn_imps.hpp | 60 - .../detail/lu_policy/counter_lu_metadata_imp.hpp | 66 - .../detail/lu_policy/counter_lu_policy_imp.hpp | 74 - .../detail/lu_policy/mtf_lu_policy_imp.hpp | 65 - .../include/ext/pb_assoc/detail/map_debug_base.hpp | 248 - .../ext/pb_assoc/detail/mapping_level_imp.hpp | 90 - .../ext/pb_assoc/detail/ms_category_imp.hpp | 81 - .../include/ext/pb_assoc/detail/ms_trait_imp.hpp | 136 - .../ext/pb_assoc/detail/order_statistics_imp.hpp | 436 - .../ext/pb_assoc/detail/ov_tree_map_/cond_dtor.hpp | 88 - .../constructors_destructor_fn_imps.hpp | 278 - .../pb_assoc/detail/ov_tree_map_/debug_fn_imps.hpp | 101 - .../pb_assoc/detail/ov_tree_map_/erase_fn_imps.hpp | 234 - .../pb_assoc/detail/ov_tree_map_/find_fn_imps.hpp | 44 - .../pb_assoc/detail/ov_tree_map_/info_fn_imps.hpp | 95 - .../detail/ov_tree_map_/insert_fn_imps.hpp | 44 - .../detail/ov_tree_map_/iterators_fn_imps.hpp | 44 - .../detail/ov_tree_map_/node_iterators.hpp | 178 - .../pb_assoc/detail/ov_tree_map_/ov_tree_map_.hpp | 628 - .../detail/ov_tree_map_/split_join_fn_imps.hpp | 189 - .../constructors_destructor_fn_imps.hpp | 116 - .../pb_assoc/detail/rb_tree_map_/debug_fn_imps.hpp | 87 - .../pb_assoc/detail/rb_tree_map_/erase_fn_imps.hpp | 403 - .../pb_assoc/detail/rb_tree_map_/find_fn_imps.hpp | 44 - .../pb_assoc/detail/rb_tree_map_/info_fn_imps.hpp | 52 - .../detail/rb_tree_map_/insert_fn_imps.hpp | 176 - .../ext/pb_assoc/detail/rb_tree_map_/node.hpp | 89 - .../ext/pb_assoc/detail/rb_tree_map_/rb_tree_.hpp | 360 - .../detail/rb_tree_map_/split_join_fn_imps.hpp | 381 - .../cc_hash_max_collision_resize_trigger_imp.hpp | 227 - .../hash_exponential_size_policy_imp.hpp | 123 - .../hash_load_check_resize_trigger_imp.hpp | 352 - .../resize_policy/hash_prime_size_policy_imp.hpp | 150 - .../hash_standard_resize_policy_imp.hpp | 342 - .../resize_policy/ht_prime_size_policy_imp.hpp | 97 - .../pb_assoc/detail/resize_policy/size_base.hpp | 170 - .../constructors_destructor_fn_imps.hpp | 112 - .../pb_assoc/detail/splay_tree_/debug_fn_imps.hpp | 73 - .../pb_assoc/detail/splay_tree_/erase_fn_imps.hpp | 245 - .../pb_assoc/detail/splay_tree_/find_fn_imps.hpp | 122 - .../pb_assoc/detail/splay_tree_/info_fn_imps.hpp | 43 - .../pb_assoc/detail/splay_tree_/insert_fn_imps.hpp | 89 - .../ext/pb_assoc/detail/splay_tree_/node.hpp | 89 - .../pb_assoc/detail/splay_tree_/splay_fn_imps.hpp | 289 - .../pb_assoc/detail/splay_tree_/splay_tree_.hpp | 342 - .../detail/splay_tree_/split_join_fn_imps.hpp | 125 - .../ext/pb_assoc/detail/standard_policies.hpp | 181 - .../include/ext/pb_assoc/detail/standard_sizes.hpp | 65 - .../constructor_destructor_fn_imps.hpp | 130 - .../detail/tree_policy/null_node_updator_imp.hpp | 49 - .../detail/tree_policy/order_statistics_imp.hpp | 436 - .../include/ext/pb_assoc/detail/type_utils.hpp | 449 - .../include/ext/pb_assoc/detail/typelist.hpp | 220 - .../pb_assoc/detail/typelist/typelist_append.hpp | 84 - .../pb_assoc/detail/typelist/typelist_apply.hpp | 90 - .../pb_assoc/detail/typelist/typelist_at_index.hpp | 80 - .../pb_assoc/detail/typelist/typelist_contains.hpp | 99 - .../pb_assoc/detail/typelist/typelist_filter.hpp | 97 - .../detail/typelist/typelist_transform.hpp | 87 - .../detail/typelist/typelist_typelist_append.hpp | 89 - .../include/ext/pb_assoc/detail/types_traits.hpp | 295 - .../unordered_iterator/const_find_iterator.hpp | 138 - .../detail/unordered_iterator/const_iterator.hpp | 122 - .../detail/unordered_iterator/find_iterator.hpp | 147 - .../detail/unordered_iterator/iterator.hpp | 139 - .../constructor_destructor_and_related.hpp | 183 - .../detail/value_type_adapter/erase_fn_imps.hpp | 43 - .../detail/value_type_adapter/erase_if_pred.hpp | 72 - .../detail/value_type_adapter/find_fn_imps.hpp | 43 - .../detail/value_type_adapter/info_fn_imps.hpp | 68 - .../detail/value_type_adapter/insert_fn_imps.hpp | 44 - .../invalidation_guarantee_selector.hpp | 128 - .../value_type_adapter/it_value_type_traits.hpp | 218 - .../detail/value_type_adapter/iterator.hpp | 196 - .../detail/value_type_adapter/iterator_fn_imps.hpp | 44 - .../detail/value_type_adapter/ref_pair.hpp | 73 - .../value_type_adapter/value_type_adapter.hpp | 601 - .../value_type_adapter/value_type_traits.hpp | 102 - libstdc++-v3/include/ext/pb_assoc/ds_trait.hpp | 125 - libstdc++-v3/include/ext/pb_assoc/exception.hpp | 69 - libstdc++-v3/include/ext/pb_assoc/hash_policy.hpp | 717 - libstdc++-v3/include/ext/pb_assoc/lu_policy.hpp | 181 - libstdc++-v3/include/ext/pb_assoc/ms_trait.hpp | 82 - libstdc++-v3/include/ext/pb_assoc/tree_policy.hpp | 215 - .../include/ext/pb_assoc/trivial_iterator_def.hpp | 58 - libstdc++-v3/include/ext/pb_ds/assoc_container.hpp | 690 + .../basic_tree_policy/basic_tree_policy_base.hpp | 179 + .../basic_tree_policy/null_node_metadata.hpp | 83 + .../ext/pb_ds/detail/basic_tree_policy/traits.hpp | 91 + .../include/ext/pb_ds/detail/basic_types.hpp | 377 + .../detail/bin_search_tree_/bin_search_tree_.hpp | 503 + .../bin_search_tree_/cond_dtor_entry_dealtor.hpp | 76 + .../cond_key_dtor_entry_dealtor.hpp | 87 + .../constructors_destructor_fn_imps.hpp | 224 + .../detail/bin_search_tree_/debug_fn_imps.hpp | 278 + .../detail/bin_search_tree_/erase_fn_imps.hpp | 126 + .../pb_ds/detail/bin_search_tree_/find_fn_imps.hpp | 188 + .../pb_ds/detail/bin_search_tree_/info_fn_imps.hpp | 70 + .../detail/bin_search_tree_/insert_fn_imps.hpp | 217 + .../detail/bin_search_tree_/iterators_fn_imps.hpp | 142 + .../detail/bin_search_tree_/node_iterators.hpp | 243 + .../detail/bin_search_tree_/point_iterators.hpp | 387 + .../bin_search_tree_/policy_access_fn_imps.hpp | 62 + .../detail/bin_search_tree_/r_erase_fn_imps.hpp | 126 + .../detail/bin_search_tree_/rotate_fn_imps.hpp | 162 + .../detail/bin_search_tree_/split_join_fn_imps.hpp | 181 + .../ext/pb_ds/detail/bin_search_tree_/traits.hpp | 256 + .../ext/pb_ds/detail/binary_heap_/binary_heap_.hpp | 363 + .../pb_ds/detail/binary_heap_/const_iterator.hpp | 158 + .../detail/binary_heap_/const_point_iterator.hpp | 175 + .../constructors_destructor_fn_imps.hpp | 175 + .../pb_ds/detail/binary_heap_/debug_fn_imps.hpp | 78 + .../ext/pb_ds/detail/binary_heap_/entry_cmp.hpp | 99 + .../ext/pb_ds/detail/binary_heap_/entry_pred.hpp | 99 + .../pb_ds/detail/binary_heap_/erase_fn_imps.hpp | 252 + .../ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp | 97 + .../ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp | 70 + .../pb_ds/detail/binary_heap_/insert_fn_imps.hpp | 220 + .../detail/binary_heap_/iterators_fn_imps.hpp | 78 + .../detail/binary_heap_/policy_access_fn_imps.hpp | 62 + .../pb_ds/detail/binary_heap_/resize_policy.hpp | 259 + .../detail/binary_heap_/split_join_fn_imps.hpp | 179 + .../pb_ds/detail/binary_heap_/trace_fn_imps.hpp | 84 + .../pb_ds/detail/binomial_heap_/binomial_heap_.hpp | 140 + .../constructors_destructor_fn_imps.hpp | 67 + .../pb_ds/detail/binomial_heap_/debug_fn_imps.hpp | 55 + .../binomial_heap_base_/binomial_heap_base_.hpp | 240 + .../constructors_destructor_fn_imps.hpp | 103 + .../detail/binomial_heap_base_/debug_fn_imps.hpp | 97 + .../detail/binomial_heap_base_/erase_fn_imps.hpp | 198 + .../detail/binomial_heap_base_/find_fn_imps.hpp | 79 + .../detail/binomial_heap_base_/insert_fn_imps.hpp | 222 + .../binomial_heap_base_/split_join_fn_imps.hpp | 238 + .../pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp | 738 + .../detail/cc_hash_table_map_/cmp_fn_imps.hpp | 94 + .../cond_key_dtor_entry_dealtor.hpp | 138 + .../constructor_destructor_fn_imps.hpp | 206 + ...onstructor_destructor_no_store_hash_fn_imps.hpp | 61 + .../constructor_destructor_store_hash_fn_imps.hpp | 63 + .../detail/cc_hash_table_map_/debug_fn_imps.hpp | 80 + .../debug_no_store_hash_fn_imps.hpp | 56 + .../debug_store_hash_fn_imps.hpp | 60 + .../cc_hash_table_map_/entry_list_fn_imps.hpp | 110 + .../detail/cc_hash_table_map_/erase_fn_imps.hpp | 127 + .../erase_no_store_hash_fn_imps.hpp | 139 + .../erase_store_hash_fn_imps.hpp | 134 + .../detail/cc_hash_table_map_/find_fn_imps.hpp | 82 + .../cc_hash_table_map_/find_store_hash_fn_imps.hpp | 47 + .../detail/cc_hash_table_map_/info_fn_imps.hpp | 118 + .../detail/cc_hash_table_map_/insert_fn_imps.hpp | 49 + .../insert_no_store_hash_fn_imps.hpp | 89 + .../insert_store_hash_fn_imps.hpp | 91 + .../cc_hash_table_map_/iterators_fn_imps.hpp | 97 + .../cc_hash_table_map_/policy_access_fn_imps.hpp | 110 + .../detail/cc_hash_table_map_/resize_fn_imps.hpp | 157 + .../resize_no_store_hash_fn_imps.hpp | 63 + .../resize_store_hash_fn_imps.hpp | 65 + .../detail/cc_hash_table_map_/size_fn_imps.hpp | 71 + .../cc_hash_table_map_/standard_policies.hpp | 52 + .../detail/cc_hash_table_map_/trace_fn_imps.hpp | 82 + .../include/ext/pb_ds/detail/cond_dealtor.hpp | 131 + .../detail/constructors_destructor_fn_imps.hpp | 128 + .../ext/pb_ds/detail/container_base_dispatch.hpp | 409 + .../include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp | 74 + .../include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp | 185 + .../constructor_destructor_fn_imps.hpp | 235 + ...onstructor_destructor_no_store_hash_fn_imps.hpp | 63 + .../constructor_destructor_store_hash_fn_imps.hpp | 66 + .../detail/gp_hash_table_map_/debug_fn_imps.hpp | 61 + .../debug_no_store_hash_fn_imps.hpp | 84 + .../debug_store_hash_fn_imps.hpp | 83 + .../detail/gp_hash_table_map_/erase_fn_imps.hpp | 126 + .../erase_no_store_hash_fn_imps.hpp | 107 + .../erase_store_hash_fn_imps.hpp | 107 + .../detail/gp_hash_table_map_/find_fn_imps.hpp | 83 + .../find_no_store_hash_fn_imps.hpp | 52 + .../gp_hash_table_map_/find_store_hash_fn_imps.hpp | 46 + .../pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp | 868 + .../detail/gp_hash_table_map_/info_fn_imps.hpp | 70 + .../detail/gp_hash_table_map_/insert_fn_imps.hpp | 49 + .../insert_no_store_hash_fn_imps.hpp | 140 + .../insert_store_hash_fn_imps.hpp | 147 + .../detail/gp_hash_table_map_/iterator_fn_imps.hpp | 97 + .../gp_hash_table_map_/policy_access_fn_imps.hpp | 126 + .../detail/gp_hash_table_map_/resize_fn_imps.hpp | 160 + .../resize_no_store_hash_fn_imps.hpp | 87 + .../resize_store_hash_fn_imps.hpp | 90 + .../gp_hash_table_map_/standard_policies.hpp | 85 + .../detail/gp_hash_table_map_/trace_fn_imps.hpp | 80 + .../hash_fn/direct_mask_range_hashing_imp.hpp | 70 + .../hash_fn/direct_mod_range_hashing_imp.hpp | 70 + .../pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp | 59 + .../detail/hash_fn/mask_based_range_hashing.hpp | 141 + .../detail/hash_fn/mod_based_range_hashing.hpp | 114 + .../ext/pb_ds/detail/hash_fn/probe_fn_base.hpp | 65 + .../detail/hash_fn/quadratic_probe_fn_imp.hpp | 59 + .../ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp | 446 + .../ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp | 440 + .../ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp | 79 + .../pb_ds/detail/hash_fn/sample_range_hashing.hpp | 83 + .../pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp | 83 + .../detail/hash_fn/sample_ranged_probe_fn.hpp | 83 + .../const_iterator.hpp | 168 + .../const_point_iterator.hpp | 160 + .../constructors_destructor_fn_imps.hpp | 173 + .../debug_fn_imps.hpp | 147 + .../erase_fn_imps.hpp | 156 + .../left_child_next_sibling_heap_/info_fn_imps.hpp | 70 + .../insert_fn_imps.hpp | 181 + .../iterators_fn_imps.hpp | 94 + .../left_child_next_sibling_heap_.hpp | 355 + .../detail/left_child_next_sibling_heap_/node.hpp | 129 + .../null_metadata.hpp | 63 + .../policy_access_fn_imps.hpp | 62 + .../trace_fn_imps.hpp | 101 + .../constructor_destructor_fn_imps.hpp | 147 + .../detail/list_update_map_/debug_fn_imps.hpp | 63 + .../list_update_map_/entry_metadata_base.hpp | 66 + .../detail/list_update_map_/erase_fn_imps.hpp | 162 + .../pb_ds/detail/list_update_map_/find_fn_imps.hpp | 110 + .../pb_ds/detail/list_update_map_/info_fn_imps.hpp | 69 + .../detail/list_update_map_/insert_fn_imps.hpp | 134 + .../detail/list_update_map_/iterators_fn_imps.hpp | 94 + .../ext/pb_ds/detail/list_update_map_/lu_map_.hpp | 438 + .../detail/list_update_map_/trace_fn_imps.hpp | 69 + .../list_update_policy/counter_lu_metadata.hpp | 128 + .../list_update_policy/counter_lu_policy_imp.hpp | 62 + .../list_update_policy/mtf_lu_policy_imp.hpp | 65 + .../list_update_policy/sample_update_policy.hpp | 83 + .../include/ext/pb_ds/detail/map_debug_base.hpp | 356 + .../ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp | 80 + .../constructors_destructor_fn_imps.hpp | 279 + .../pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp | 90 + .../pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp | 242 + .../ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp | 71 + .../pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp | 71 + .../detail/ov_tree_map_/iterators_fn_imps.hpp | 130 + .../pb_ds/detail/ov_tree_map_/node_iterators.hpp | 304 + .../ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp | 584 + .../detail/ov_tree_map_/policy_access_fn_imps.hpp | 61 + .../detail/ov_tree_map_/split_join_fn_imps.hpp | 179 + .../ext/pb_ds/detail/ov_tree_map_/traits.hpp | 189 + .../constructors_destructor_fn_imps.hpp | 97 + .../pb_ds/detail/pairing_heap_/debug_fn_imps.hpp | 59 + .../pb_ds/detail/pairing_heap_/erase_fn_imps.hpp | 242 + .../pb_ds/detail/pairing_heap_/find_fn_imps.hpp | 56 + .../pb_ds/detail/pairing_heap_/insert_fn_imps.hpp | 107 + .../pb_ds/detail/pairing_heap_/pairing_heap_.hpp | 222 + .../detail/pairing_heap_/split_join_fn_imps.hpp | 146 + .../ext/pb_ds/detail/pat_trie_/child_iterator.hpp | 111 + .../detail/pat_trie_/cond_dtor_entry_dealtor.hpp | 87 + .../detail/pat_trie_/const_child_iterator.hpp | 117 + .../pat_trie_/constructors_destructor_fn_imps.hpp | 220 + .../ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp | 123 + .../ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp | 401 + .../ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp | 318 + .../include/ext/pb_ds/detail/pat_trie_/head.hpp | 142 + .../ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp | 70 + .../pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp | 471 + .../ext/pb_ds/detail/pat_trie_/internal_node.hpp | 609 + .../pb_ds/detail/pat_trie_/iterators_fn_imps.hpp | 148 + .../include/ext/pb_ds/detail/pat_trie_/leaf.hpp | 178 + .../ext/pb_ds/detail/pat_trie_/node_base.hpp | 148 + .../ext/pb_ds/detail/pat_trie_/node_iterators.hpp | 352 + .../pb_ds/detail/pat_trie_/node_metadata_base.hpp | 92 + .../ext/pb_ds/detail/pat_trie_/pat_trie_.hpp | 634 + .../ext/pb_ds/detail/pat_trie_/point_iterators.hpp | 503 + .../detail/pat_trie_/policy_access_fn_imps.hpp | 77 + .../ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp | 109 + .../ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp | 156 + .../ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp | 260 + .../detail/pat_trie_/split_join_branch_bag.hpp | 108 + .../detail/pat_trie_/synth_e_access_traits.hpp | 235 + .../ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp | 134 + .../include/ext/pb_ds/detail/pat_trie_/traits.hpp | 356 + .../ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp | 62 + .../pb_ds/detail/priority_queue_base_dispatch.hpp | 97 + .../constructors_destructor_fn_imps.hpp | 114 + .../pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp | 84 + .../pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp | 354 + .../ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp | 45 + .../ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp | 54 + .../pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp | 148 + .../include/ext/pb_ds/detail/rb_tree_map_/node.hpp | 174 + .../ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp | 343 + .../detail/rb_tree_map_/split_join_fn_imps.hpp | 319 + .../ext/pb_ds/detail/rb_tree_map_/traits.hpp | 131 + .../constructors_destructor_fn_imps.hpp | 94 + .../detail/rc_binomial_heap_/debug_fn_imps.hpp | 127 + .../detail/rc_binomial_heap_/erase_fn_imps.hpp | 113 + .../detail/rc_binomial_heap_/insert_fn_imps.hpp | 160 + .../ext/pb_ds/detail/rc_binomial_heap_/rc.hpp | 268 + .../detail/rc_binomial_heap_/rc_binomial_heap_.hpp | 204 + .../rc_binomial_heap_/split_join_fn_imps.hpp | 87 + .../detail/rc_binomial_heap_/trace_fn_imps.hpp | 59 + ...hash_max_collision_check_resize_trigger_imp.hpp | 253 + .../hash_exponential_size_policy_imp.hpp | 106 + .../hash_load_check_resize_trigger_imp.hpp | 300 + .../hash_load_check_resize_trigger_size_base.hpp | 172 + .../resize_policy/hash_prime_size_policy_imp.hpp | 175 + .../hash_standard_resize_policy_imp.hpp | 314 + .../detail/resize_policy/sample_resize_policy.hpp | 135 + .../detail/resize_policy/sample_resize_trigger.hpp | 147 + .../detail/resize_policy/sample_size_policy.hpp | 83 + .../constructors_destructor_fn_imps.hpp | 116 + .../ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp | 80 + .../ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp | 202 + .../ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp | 117 + .../ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp | 45 + .../pb_ds/detail/splay_tree_/insert_fn_imps.hpp | 124 + .../include/ext/pb_ds/detail/splay_tree_/node.hpp | 171 + .../ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp | 289 + .../ext/pb_ds/detail/splay_tree_/splay_tree_.hpp | 367 + .../detail/splay_tree_/split_join_fn_imps.hpp | 127 + .../ext/pb_ds/detail/splay_tree_/traits.hpp | 131 + .../include/ext/pb_ds/detail/standard_policies.hpp | 163 + .../thin_heap_/constructors_destructor_fn_imps.hpp | 112 + .../ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp | 118 + .../ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp | 302 + .../ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp | 57 + .../ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp | 332 + .../pb_ds/detail/thin_heap_/split_join_fn_imps.hpp | 132 + .../ext/pb_ds/detail/thin_heap_/thin_heap_.hpp | 357 + .../ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp | 61 + .../detail/tree_policy/node_metadata_selector.hpp | 122 + .../detail/tree_policy/null_node_update_imp.hpp | 56 + .../detail/tree_policy/order_statistics_imp.hpp | 147 + .../detail/tree_policy/sample_tree_node_update.hpp | 78 + .../include/ext/pb_ds/detail/tree_trace_base.hpp | 215 + .../detail/trie_policy/node_metadata_selector.hpp | 122 + .../detail/trie_policy/null_node_update_imp.hpp | 56 + .../detail/trie_policy/order_statistics_imp.hpp | 189 + .../trie_policy/prefix_search_node_update_imp.hpp | 157 + .../trie_policy/sample_trie_e_access_traits.hpp | 95 + .../detail/trie_policy/sample_trie_node_update.hpp | 78 + .../string_trie_e_access_traits_imp.hpp | 105 + .../pb_ds/detail/trie_policy/trie_policy_base.hpp | 255 + .../include/ext/pb_ds/detail/type_utils.hpp | 202 + libstdc++-v3/include/ext/pb_ds/detail/typelist.hpp | 296 + .../ext/pb_ds/detail/typelist/typelist_append.hpp | 84 + .../ext/pb_ds/detail/typelist/typelist_apply.hpp | 79 + .../typelist/typelist_assoc_container_find.hpp | 74 + .../pb_ds/detail/typelist/typelist_at_index.hpp | 72 + .../pb_ds/detail/typelist/typelist_contains.hpp | 87 + .../ext/pb_ds/detail/typelist/typelist_filter.hpp | 80 + .../ext/pb_ds/detail/typelist/typelist_flatten.hpp | 73 + .../pb_ds/detail/typelist/typelist_transform.hpp | 75 + .../detail/typelist/typelist_typelist_append.hpp | 87 + .../ext/pb_ds/detail/typelist_assoc_container.hpp | 91 + .../include/ext/pb_ds/detail/types_traits.hpp | 104 + .../detail/unordered_iterator/const_iterator.hpp | 135 + .../unordered_iterator/const_point_iterator.hpp | 157 + .../pb_ds/detail/unordered_iterator/iterator.hpp | 156 + .../detail/unordered_iterator/point_iterator.hpp | 149 + libstdc++-v3/include/ext/pb_ds/exception.hpp | 73 + libstdc++-v3/include/ext/pb_ds/hash_policy.hpp | 609 + .../include/ext/pb_ds/list_update_policy.hpp | 138 + libstdc++-v3/include/ext/pb_ds/priority_queue.hpp | 131 + libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp | 357 + libstdc++-v3/include/ext/pb_ds/tree_policy.hpp | 168 + libstdc++-v3/include/ext/pb_ds/trie_policy.hpp | 365 + libstdc++-v3/include/ext/rc_string_base.h | 22 +- libstdc++-v3/include/ext/rope | 44 +- libstdc++-v3/include/ext/ropeimpl.h | 124 +- libstdc++-v3/include/ext/sso_string_base.h | 15 +- libstdc++-v3/include/ext/typelist.h | 73 +- libstdc++-v3/include/ext/vstring.h | 2 +- libstdc++-v3/include/ext/vstring.tcc | 22 +- libstdc++-v3/include/precompiled/extc++.h | 61 + libstdc++-v3/include/{ => precompiled}/stdc++.h | 0 libstdc++-v3/include/precompiled/stdtr1c++.h | 54 + libstdc++-v3/include/std/std_streambuf.h | 5 +- libstdc++-v3/include/std/std_valarray.h | 63 +- libstdc++-v3/include/tr1/boost_shared_ptr.h | 966 +- libstdc++-v3/include/tr1/cfenv | 6 +- libstdc++-v3/include/tr1/cinttypes | 7 +- libstdc++-v3/include/tr1/cmath | 33 +- libstdc++-v3/include/tr1/cstdint | 6 +- libstdc++-v3/include/tr1/functional_iterate.h | 2 +- libstdc++-v3/include/tr1/hashtable | 979 +- libstdc++-v3/include/tr1/hashtable_policy.h | 893 + libstdc++-v3/include/tr1/random | 2580 + libstdc++-v3/include/tr1/random.tcc | 1432 + libstdc++-v3/include/tr1/tuple | 2 +- libstdc++-v3/include/tr1/unordered_map | 75 +- libstdc++-v3/include/tr1/unordered_set | 63 +- libstdc++-v3/libmath/Makefile.in | 3 + libstdc++-v3/libsupc++/Makefile.in | 3 + libstdc++-v3/libsupc++/eh_arm.cc | 2 +- libstdc++-v3/libsupc++/eh_globals.cc | 1 + libstdc++-v3/libsupc++/eh_personality.cc | 9 + libstdc++-v3/po/Makefile.in | 3 + libstdc++-v3/scripts/check_compile | 4 + libstdc++-v3/scripts/check_performance | 35 +- libstdc++-v3/scripts/create_testsuite_files | 4 +- libstdc++-v3/scripts/make_graph.py | 576 + libstdc++-v3/scripts/make_graphs.py | 160 + libstdc++-v3/scripts/testsuite_flags.in | 6 +- libstdc++-v3/src/Makefile.am | 2 - libstdc++-v3/src/Makefile.in | 48 +- libstdc++-v3/src/debug.cc | 8 +- libstdc++-v3/src/ext-inst.cc | 8 +- libstdc++-v3/src/globals_io.cc | 5 +- libstdc++-v3/src/globals_locale.cc | 210 - libstdc++-v3/src/ios_init.cc | 2 +- libstdc++-v3/src/locale-misc-inst.cc | 65 - libstdc++-v3/src/locale.cc | 6 +- libstdc++-v3/src/locale_init.cc | 219 +- libstdc++-v3/src/mt_allocator.cc | 156 +- libstdc++-v3/src/pool_allocator.cc | 6 +- libstdc++-v3/src/string-inst.cc | 6 +- .../22_locale/collate/transform/char/28277.cc | 52 + .../22_locale/collate/transform/wchar_t/28277.cc | 52 + .../22_locale/time_get/get_date/char/5.cc | 71 + .../22_locale/time_get/get_date/wchar_t/5.cc | 71 + .../22_locale/time_get/get_monthname/char/5.cc | 67 + .../22_locale/time_get/get_monthname/wchar_t/5.cc | 67 + .../22_locale/time_get/get_time/char/5.cc | 72 + .../22_locale/time_get/get_time/wchar_t/5.cc | 72 + .../22_locale/time_get/get_weekday/char/5.cc | 68 + .../22_locale/time_get/get_weekday/wchar_t/5.cc | 68 + .../22_locale/time_get/get_year/char/5.cc | 68 + .../22_locale/time_get/get_year/wchar_t/5.cc | 68 + .../23_containers/vector/bool/capacity/1.cc | 138 + .../testsuite/23_containers/vector/bool/cons/1.cc | 179 + .../testsuite/23_containers/vector/bool/cons/2.cc | 181 + .../vector/bool/modifiers/insert/1.cc | 172 + .../testsuite/25_algorithms/nth_element/2.cc | 75 + .../testsuite/26_numerics/valarray/27867.cc | 53 + .../testsuite/26_numerics/valarray/28277.cc | 44 + .../inserters_character/wchar_t/28277-1.cc | 46 + libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc | 50 + libstdc++-v3/testsuite/Makefile.am | 20 +- libstdc++-v3/testsuite/Makefile.in | 23 +- libstdc++-v3/testsuite/data/make_graph_htmls.xml | 60 + .../testsuite/data/make_graph_test_infos.xml | 313 + .../data/thirty_years_among_the_dead_preproc.txt | 187586 ++++++++++++++++++ .../testsuite/ext/pb_assoc/example/basic_map.cc | 122 - .../ext/pb_assoc/example/basic_multimap.cc | 110 - .../testsuite/ext/pb_assoc/example/basic_set.cc | 120 - .../testsuite/ext/pb_assoc/example/ds_traits.cc | 262 - .../testsuite/ext/pb_assoc/example/erase_if.cc | 133 - .../testsuite/ext/pb_assoc/example/extract_key.cc | 132 - .../ext/pb_assoc/example/hash_find_neg.cc | 73 - .../ext/pb_assoc/example/hash_illegal_resize.cc | 148 - .../ext/pb_assoc/example/hash_initial_size.cc | 122 - .../ext/pb_assoc/example/hash_load_set_change.cc | 152 - .../testsuite/ext/pb_assoc/example/hash_mod.cc | 89 - .../testsuite/ext/pb_assoc/example/hash_resize.cc | 146 - .../ext/pb_assoc/example/hash_resize_neg.cc | 73 - .../ext/pb_assoc/example/hash_shift_mask.cc | 130 - .../ext/pb_assoc/example/mapping_level.cc | 150 - .../ext/pb_assoc/example/mapping_level_neg.cc | 83 - .../testsuite/ext/pb_assoc/example/ms_traits.cc | 121 - .../testsuite/ext/pb_assoc/example/ranged_hash.cc | 193 - .../testsuite/ext/pb_assoc/example/store_hash.cc | 111 - .../ext/pb_assoc/example/tree_intervals.cc | 260 - .../testsuite/ext/pb_assoc/example/tree_join.cc | 127 - .../ext/pb_assoc/example/tree_order_statistics.cc | 133 - .../pb_assoc/example/tree_order_statistics_join.cc | 106 - .../testsuite/ext/pb_assoc/example/tree_split.cc | 90 - .../ext/pb_ds/example/assoc_container_traits.cc | 241 + .../testsuite/ext/pb_ds/example/basic_map.cc | 130 + .../testsuite/ext/pb_ds/example/basic_multimap.cc | 162 + .../testsuite/ext/pb_ds/example/basic_multiset.cc | 175 + .../ext/pb_ds/example/basic_priority_queue.cc | 130 + .../testsuite/ext/pb_ds/example/basic_set.cc | 137 + .../testsuite/ext/pb_ds/example/erase_if.cc | 133 + .../testsuite/ext/pb_ds/example/hash_find_neg.cc | 79 + .../ext/pb_ds/example/hash_illegal_resize.cc | 137 + .../ext/pb_ds/example/hash_initial_size.cc | 120 + .../ext/pb_ds/example/hash_load_set_change.cc | 141 + .../testsuite/ext/pb_ds/example/hash_mod.cc | 96 + .../testsuite/ext/pb_ds/example/hash_resize.cc | 135 + .../testsuite/ext/pb_ds/example/hash_resize_neg.cc | 74 + .../testsuite/ext/pb_ds/example/hash_shift_mask.cc | 118 + .../example/priority_queue_container_traits.cc | 211 + .../ext/pb_ds/example/priority_queue_dijkstra.cc | 164 + .../ext/pb_ds/example/priority_queue_erase_if.cc | 78 + .../ext/pb_ds/example/priority_queue_split_join.cc | 135 + .../ext/pb_ds/example/priority_queue_xref.cc | 221 + .../testsuite/ext/pb_ds/example/ranged_hash.cc | 162 + .../testsuite/ext/pb_ds/example/store_hash.cc | 107 + .../testsuite/ext/pb_ds/example/tree_intervals.cc | 223 + .../testsuite/ext/pb_ds/example/tree_join.cc | 129 + .../ext/pb_ds/example/tree_order_statistics.cc | 135 + .../pb_ds/example/tree_order_statistics_join.cc | 104 + .../testsuite/ext/pb_ds/example/trie_dna.cc | 127 + .../ext/pb_ds/example/trie_prefix_search.cc | 121 + .../testsuite/ext/pb_ds/example/trie_split.cc | 95 + .../ext/pb_ds/regression/associative_containers.cc | 175 + .../ext/pb_ds/regression/hash_data_map_rand.cc | 61 + .../ext/pb_ds/regression/hash_no_data_map_rand.cc | 61 + .../pb_ds/regression/list_update_data_map_rand.cc | 61 + .../regression/list_update_no_data_map_rand.cc | 61 + .../ext/pb_ds/regression/priority_queue_rand.cc | 59 + .../ext/pb_ds/regression/priority_queues.cc | 194 + .../ext/pb_ds/regression/tree_data_map_rand.cc | 61 + .../ext/pb_ds/regression/tree_no_data_map_rand.cc | 61 + .../ext/pb_ds/regression/trie_data_map_rand.cc | 61 + .../ext/pb_ds/regression/trie_no_data_map_rand.cc | 61 + libstdc++-v3/testsuite/lib/libstdc++.exp | 48 +- libstdc++-v3/testsuite/libstdc++-abi/abi.exp | 2 +- .../testsuite/libstdc++-dg/conformance.exp | 14 +- .../21_strings/string_copy_cons_and_dest.cc | 61 + .../23_containers/copy_construct/vector_bool.cc | 47 + .../performance/23_containers/create/map.cc | 4 +- .../23_containers/create_from_sorted/set.cc | 4 +- .../performance/23_containers/create_sort/list.cc | 4 +- .../performance/23_containers/find/map.cc | 4 +- .../performance/23_containers/index/map.cc | 4 +- .../23_containers/insert/associative.cc | 4 +- .../performance/23_containers/insert/sequence.cc | 4 +- .../23_containers/insert_erase/associative.cc | 4 +- .../23_containers/insert_from_sorted/set.cc | 4 +- .../23_containers/producer_consumer/associative.cc | 6 +- .../23_containers/producer_consumer/sequence.cc | 4 +- .../23_containers/resize/vector_bool.cc | 49 + .../performance/23_containers/sort_search/list.cc | 4 +- .../25_algorithms/nth_element_worst_case.cc | 62 + .../ext/pb_ds/hash_random_int_erase_mem_usage.cc | 138 + .../ext/pb_ds/hash_zlob_random_int_find_timing.cc | 130 + .../ext/pb_ds/multimap_text_find_timing.hpp | 148 + .../ext/pb_ds/multimap_text_find_timing_large.cc | 51 + .../ext/pb_ds/multimap_text_find_timing_small.cc | 52 + .../ext/pb_ds/multimap_text_insert_mem_usage.hpp | 166 + .../pb_ds/multimap_text_insert_mem_usage_large.cc | 51 + .../pb_ds/multimap_text_insert_mem_usage_small.cc | 51 + .../ext/pb_ds/multimap_text_insert_timing.hpp | 148 + .../ext/pb_ds/multimap_text_insert_timing_large.cc | 51 + .../ext/pb_ds/multimap_text_insert_timing_small.cc | 51 + .../priority_queue_random_int_push_pop_timing.cc | 129 + .../pb_ds/priority_queue_random_int_push_timing.cc | 127 + .../ext/pb_ds/priority_queue_text_join_timing.cc | 123 + .../priority_queue_text_modify_down_timing.cc | 47 + .../pb_ds/priority_queue_text_modify_timing.hpp | 138 + .../pb_ds/priority_queue_text_modify_up_timing.cc | 47 + .../ext/pb_ds/priority_queue_text_pop_mem_usage.cc | 129 + .../pb_ds/priority_queue_text_push_pop_timing.cc | 127 + .../ext/pb_ds/priority_queue_text_push_timing.cc | 128 + .../ext/pb_ds/random_int_find_timing.cc | 137 + .../ext/pb_ds/random_int_subscript_find_timing.cc | 137 + .../pb_ds/random_int_subscript_insert_timing.cc | 134 + .../performance/ext/pb_ds/text_find_timing.cc | 159 + .../ext/pb_ds/tree_order_statistics_timing.cc | 116 + .../ext/pb_ds/tree_split_join_timing.cc | 118 + .../ext/pb_ds/tree_text_insert_timing.cc | 127 + .../ext/pb_ds/tree_text_lor_find_timing.cc | 126 + libstdc++-v3/testsuite/testsuite_common_types.h | 425 - .../memory/shared_ptr/assign/shared_ptr_neg.cc | 1 + .../shared_ptr/thread/default_weaktoshared.cc | 193 + .../memory/shared_ptr/thread/mutex_weaktoshared.cc | 195 + .../requirements/typedefs.cc | 37 + .../binomial_distribution/requirements/typedefs.cc | 37 + .../random/discard_block/operators/equal.cc | 53 + .../random/discard_block/operators/not_equal.cc | 52 + .../random/discard_block/operators/serialize.cc | 55 + .../discard_block/requirements/requirements.cc | 40 + .../requirements/typedefs.cc | 37 + .../gamma_distribution/requirements/typedefs.cc | 37 + .../requirements/typedefs.cc | 37 + .../random/linear_congruential/cons/default.cc | 43 + .../random/linear_congruential/cons/gen1.cc | 50 + .../random/linear_congruential/cons/seed1.cc | 40 + .../random/linear_congruential/cons/seed2.cc | 40 + .../random/linear_congruential/operators/equal.cc | 44 + .../linear_congruential/operators/not_equal.cc | 44 + .../linear_congruential/operators/serialize.cc | 50 + .../requirements/non_uint_neg.cc | 44 + .../linear_congruential/requirements/typedefs.cc | 34 + .../random/mersenne_twister/cons/default.cc | 48 + .../random/mersenne_twister/cons/gen1.cc | 55 + .../random/mersenne_twister/cons/seed1.cc | 44 + .../random/mersenne_twister/cons/seed2.cc | 45 + .../random/mersenne_twister/operators/equal.cc | 53 + .../random/mersenne_twister/operators/not_equal.cc | 52 + .../random/mersenne_twister/operators/serialize.cc | 54 + .../mersenne_twister/requirements/typedefs.cc | 38 + .../5_numerical_facilities/random/minstd_rand.cc | 43 + .../5_numerical_facilities/random/minstd_rand0.cc | 43 + .../tr1/5_numerical_facilities/random/mt19937.cc | 43 + .../normal_distribution/requirements/typedefs.cc | 37 + .../poisson_distribution/requirements/typedefs.cc | 37 + .../random/random_device/cons/default.cc | 43 + .../random/random_device/cons/token.cc | 47 + .../random/random_device/requirements/typedefs.cc | 32 + .../tr1/5_numerical_facilities/random/ranlux3.cc | 44 + .../5_numerical_facilities/random/ranlux3_01.cc | 48 + .../tr1/5_numerical_facilities/random/ranlux4.cc | 43 + .../5_numerical_facilities/random/ranlux4_01.cc | 47 + .../random/subtract_with_carry/cons/default.cc | 43 + .../random/subtract_with_carry/cons/gen1.cc | 50 + .../random/subtract_with_carry/cons/seed1.cc | 40 + .../random/subtract_with_carry/cons/seed2.cc | 41 + .../random/subtract_with_carry/operators/equal.cc | 50 + .../subtract_with_carry/operators/not_equal.cc | 43 + .../subtract_with_carry/operators/serialize.cc | 51 + .../subtract_with_carry/requirements/typedefs.cc | 35 + .../random/subtract_with_carry_01/cons/default.cc | 48 + .../random/subtract_with_carry_01/cons/gen1.cc | 50 + .../random/subtract_with_carry_01/cons/seed1.cc | 40 + .../random/subtract_with_carry_01/cons/seed2.cc | 41 + .../subtract_with_carry_01/operators/equal.cc | 50 + .../subtract_with_carry_01/operators/not_equal.cc | 43 + .../subtract_with_carry_01/operators/serialize.cc | 51 + .../requirements/typedefs.cc | 34 + .../random/uniform_int/cons/default.cc | 42 + .../random/uniform_int/cons/range.cc | 42 + .../random/uniform_int/cons/range_neg.cc | 42 + .../random/uniform_int/requirements/typedefs.cc | 37 + .../random/uniform_real/requirements/typedefs.cc | 37 + .../variate_generator/requirements/typedefs.cc | 42 + .../random/xor_combine/cons/default.cc | 46 + .../random/xor_combine/operators/equal.cc | 53 + .../random/xor_combine/operators/not_equal.cc | 52 + .../random/xor_combine/operators/serialize.cc | 56 + .../random/xor_combine/requirements/typedefs.cc | 40 + libstdc++-v3/testsuite/tr1/headers.cc | 1 + .../util/common_type/assoc/common_type.hpp | 847 + .../assoc/detail/comb_hash_fn_string_form.hpp | 122 + .../common_type/assoc/detail/ds_string_form.hpp | 304 + .../detail/list_update_policy_string_form.hpp | 113 + .../assoc/detail/probe_fn_string_form.hpp | 128 + .../assoc/detail/resize_policy_string_form.hpp | 106 + .../assoc/detail/size_policy_string_form.hpp | 110 + .../assoc/detail/store_hash_string_form.hpp | 103 + .../detail/tree_supports_order_statistics.hpp | 83 + .../detail/trie_supports_order_statistics.hpp | 83 + .../assoc/detail/trie_supports_prefix_search.hpp | 83 + .../assoc/detail/trigger_policy_string_form.hpp | 153 + .../util/common_type/assoc/native_set.hpp | 111 + .../util/common_type/assoc/string_form.hpp | 238 + .../util/common_type/assoc/template_policy.hpp | 176 + .../common_type/priority_queue/common_type.hpp | 87 + .../priority_queue/detail/ds_string_form.hpp | 128 + .../common_type/priority_queue/string_form.hpp | 109 + .../testsuite/util/hash_fn/dna_str_limit.hpp | 72 + .../util/hash_fn/limit_string_hash_fn.hpp | 82 + .../testsuite/util/hash_fn/string_hash_fn.hpp | 78 + .../util/hash_fn/string_ranged_hash_fn.hpp | 109 + .../util/hash_fn/string_ranged_probe_fn.hpp | 113 + .../testsuite/util/io/illegal_input_error.hpp | 63 + libstdc++-v3/testsuite/util/io/prog_bar.cc | 92 + libstdc++-v3/testsuite/util/io/prog_bar.hpp | 96 + libstdc++-v3/testsuite/util/io/text_populate.hpp | 163 + .../testsuite/util/io/verified_cmd_line_input.cc | 131 + .../testsuite/util/io/verified_cmd_line_input.hpp | 77 + libstdc++-v3/testsuite/util/io/xml.hpp | 131 + .../testsuite/util/io/xml_test_formatter.hpp | 88 + .../util/native_type/assoc/native_hash_map.hpp | 137 + .../native_type/assoc/native_hash_multimap.hpp | 232 + .../util/native_type/assoc/native_hash_set.hpp | 159 + .../util/native_type/assoc/native_hash_tag.hpp | 58 + .../util/native_type/assoc/native_map.hpp | 110 + .../util/native_type/assoc/native_multimap.hpp | 211 + .../util/native_type/assoc/native_set.hpp | 111 + .../util/native_type/assoc/native_tree_tag.hpp | 63 + .../native_type/priority_queue/native_pq_tag.hpp | 63 + .../priority_queue/native_priority_queue.hpp | 280 + .../performance/assoc/mem_usage/erase_test.hpp | 145 + .../assoc/mem_usage/multimap_insert_test.hpp | 188 + .../performance/assoc/multimap_common_type.hpp | 260 + .../util/performance/assoc/timing/common_type.hpp | 113 + .../util/performance/assoc/timing/find_test.hpp | 219 + .../util/performance/assoc/timing/insert_test.hpp | 182 + .../assoc/timing/multimap_find_test.hpp | 253 + .../assoc/timing/multimap_insert_test.hpp | 194 + .../assoc/timing/subscript_find_test.hpp | 185 + .../assoc/timing/subscript_insert_test.hpp | 176 + .../assoc/timing/tree_order_statistics_test.hpp | 225 + .../assoc/timing/tree_split_join_test.hpp | 192 + .../util/performance/io/xml_formatter.hpp | 88 + .../util/performance/mem/mem_track_allocator.hpp | 189 + .../performance/mem/mem_track_allocator_base.hpp | 116 + .../priority_queue/mem_usage/pop_test.hpp | 148 + .../priority_queue/timing/join_test.hpp | 174 + .../priority_queue/timing/modify_test.hpp | 387 + .../priority_queue/timing/push_pop_test.hpp | 185 + .../priority_queue/timing/push_test.hpp | 182 + .../util/performance/time/elapsed_timer.cc | 78 + .../util/performance/time/elapsed_timer.hpp | 77 + .../util/performance/time/timing_test_base.hpp | 127 + .../util/regression/assoc/common_type.hpp | 144 + .../testsuite/util/regression/basic_type.hpp | 103 + .../util/regression/priority_queue/common_type.hpp | 65 + .../rand/assoc/container_rand_regression_test.hpp | 520 + .../regression/rand/assoc/detail/clear_fn_imps.hpp | 58 + .../regression/rand/assoc/detail/cmp_fn_imps.hpp | 601 + .../detail/constructor_destructor_fn_imps.hpp | 521 + .../regression/rand/assoc/detail/defs_fn_imps.hpp | 248 + .../rand/assoc/detail/diagnostic_fn_imps.hpp | 79 + .../regression/rand/assoc/detail/erase_fn_imps.hpp | 319 + .../rand/assoc/detail/get_set_load_fn_imps.hpp | 102 + .../rand/assoc/detail/get_set_loads_fn_imps.hpp | 122 + .../rand/assoc/detail/insert_fn_imps.hpp | 89 + .../rand/assoc/detail/it_conversion_fn_imps.hpp | 307 + .../rand/assoc/detail/operator_fn_imps.hpp | 249 + .../rand/assoc/detail/policy_access_fn_imps.hpp | 184 + .../rand/assoc/detail/resize_fn_imps.hpp | 125 + .../rand/assoc/detail/split_join_fn_imps.hpp | 149 + .../rand/assoc/detail/subscript_fn_imps.hpp | 127 + .../regression/rand/assoc/rand_regression_test.hpp | 210 + .../regression/rand/io/assoc/xml_formatter.hpp | 81 + .../rand/io/priority_queue/xml_formatter.hpp | 82 + .../util/regression/rand/io/xml_formatter.hpp | 87 + .../container_rand_regression_test.hpp | 334 + .../rand/priority_queue/detail/clear_fn_imps.hpp | 60 + .../rand/priority_queue/detail/cmp_fn_imps.hpp | 108 + .../detail/constructor_destructor_fn_imps.hpp | 235 + .../rand/priority_queue/detail/defs_fn_imps.hpp | 111 + .../priority_queue/detail/diagnostic_fn_imps.hpp | 73 + .../rand/priority_queue/detail/erase_fn_imps.hpp | 178 + .../rand/priority_queue/detail/insert_fn_imps.hpp | 93 + .../detail/it_conversion_fn_imps.hpp | 190 + .../rand/priority_queue/detail/modify_fn_imps.hpp | 96 + .../priority_queue/detail/operator_fn_imps.hpp | 227 + .../detail/policy_access_fn_imps.hpp | 66 + .../priority_queue/detail/split_join_fn_imps.hpp | 120 + .../rand/priority_queue/rand_regression_test.hpp | 214 + .../util/regression/res_mng/dbg_ex_allocator.hpp | 129 + .../regression/res_mng/dbg_ex_allocator_base.cc | 210 + .../regression/res_mng/dbg_ex_allocator_base.hpp | 163 + .../util/regression/res_mng/forced_exception.hpp | 60 + .../regression/trait/assoc/get_set_load_trait.hpp | 100 + .../regression/trait/assoc/get_set_loads_trait.hpp | 100 + .../regression/trait/assoc/native_type_trait.hpp | 195 + .../regression/trait/assoc/node_update_trait.hpp | 134 + .../util/regression/trait/assoc/resize_trait.hpp | 100 + .../util/regression/trait/assoc/to_string.hpp | 91 + .../util/regression/trait/assoc/trait.hpp | 251 + .../util/regression/trait/assoc/type_trait.hpp | 161 + .../util/regression/trait/erase_if_fn.hpp | 111 + .../util/regression/trait/priority_queue/trait.hpp | 133 + .../testsuite/util/rng/twister_rand_gen.cc | 100 + .../testsuite/util/rng/twister_rand_gen.hpp | 86 + .../testsuite/util/statistic/res_recorder.hpp | 143 + .../testsuite/util/statistic/sample_mean.hpp | 87 + .../statistic/sample_mean_confidence_checker.hpp | 98 + .../testsuite/util/statistic/sample_var.hpp | 102 + libstdc++-v3/testsuite/{ => util}/testsuite_abi.cc | 0 libstdc++-v3/testsuite/{ => util}/testsuite_abi.h | 0 .../testsuite/{ => util}/testsuite_abi_check.cc | 0 .../testsuite/{ => util}/testsuite_allocator.cc | 0 .../testsuite/{ => util}/testsuite_allocator.h | 0 .../testsuite/{ => util}/testsuite_character.cc | 0 .../testsuite/{ => util}/testsuite_character.h | 0 .../testsuite/util/testsuite_common_types.h | 425 + .../testsuite/{ => util}/testsuite_hooks.cc | 0 .../testsuite/{ => util}/testsuite_hooks.h | 0 libstdc++-v3/testsuite/{ => util}/testsuite_io.h | 0 .../testsuite/{ => util}/testsuite_iterators.h | 0 .../testsuite/{ => util}/testsuite_performance.h | 0 .../testsuite/{ => util}/testsuite_shared.cc | 0 libstdc++-v3/testsuite/{ => util}/testsuite_tr1.h | 0 .../testsuite/{ => util}/testsuite_visualization.h | 0 ltconfig | 2 +- ltmain.sh | 8 +- zlib/ChangeLog.gcj | 6 + zlib/Makefile.am | 7 + zlib/Makefile.in | 14 +- zlib/aclocal.m4 | 410 +- 3989 files changed, 539007 insertions(+), 177074 deletions(-) create mode 100644 config/unwind_ipinfo.m4 create mode 100755 contrib/dg-cmp-results.sh create mode 100644 fixincludes/tests/base/architecture/ppc/math.h create mode 100644 fixincludes/tests/base/errno.h create mode 100644 fixincludes/tests/base/ia64/sys/getppdp.h create mode 100644 gcc/config/darwin-64.c create mode 100644 gcc/config/i386/t-gthr-win32 rewrite gcc/config/mips/t-rtems (84%) create mode 100644 gcc/config/mips/t-sb1 create mode 100644 gcc/testsuite/g++.dg/ext/interface3/dir1/interface3.h create mode 100644 gcc/testsuite/g++.dg/ext/interface3/dir2/interface3.h create mode 100644 gcc/testsuite/g++.dg/ext/interface3/interface3a.C create mode 100644 gcc/testsuite/g++.dg/ext/interface3/interface3a2.cc create mode 100644 gcc/testsuite/g++.dg/ext/interface3/interface3b.C create mode 100644 gcc/testsuite/g++.dg/ext/interface3/interface3b2.cc delete mode 100644 gcc/testsuite/g++.dg/opt/max1.C delete mode 100644 gcc/testsuite/g++.dg/opt/pr7503-2.C delete mode 100644 gcc/testsuite/g++.dg/opt/pr7503-3.C delete mode 100644 gcc/testsuite/g++.dg/opt/pr7503-4.C delete mode 100644 gcc/testsuite/g++.dg/opt/pr7503-5.C delete mode 100644 gcc/testsuite/g++.dg/warn/minmax.C delete mode 100644 gcc/testsuite/g++.old-deja/g++.warn/compare1.C delete mode 100644 gcc/testsuite/gcc.dg/vect/vect-69.c create mode 100644 gcc/testsuite/gnat.dg/address_conversion.adb create mode 100644 gcc/testsuite/gnat.dg/assert.ads create mode 100644 gcc/testsuite/gnat.dg/boolean_subtype.adb create mode 100644 gcc/testsuite/gnat.dg/controlled_record.adb create mode 100644 gcc/testsuite/gnat.dg/controlled_record.ads create mode 100644 gcc/testsuite/gnat.dg/dg.exp create mode 100644 gcc/testsuite/gnat.dg/frame_overflow.adb create mode 100644 gcc/testsuite/gnat.dg/loop_unchecked_conversion.adb create mode 100644 gcc/testsuite/gnat.dg/loop_unchecked_conversion.ads create mode 100644 gcc/testsuite/gnat.dg/nested_agg_bitfield_constructor.adb create mode 100644 gcc/testsuite/gnat.dg/outer_agg_bitfield_constructor.adb create mode 100644 gcc/testsuite/gnat.dg/pointer_array.adb create mode 100644 gcc/testsuite/gnat.dg/pointer_conversion.adb create mode 100644 gcc/testsuite/gnat.dg/scalar_mode_agg_compare.adb create mode 100644 gcc/testsuite/gnat.dg/scalar_mode_agg_compare_loop.adb create mode 100644 gcc/testsuite/gnat.dg/self_aggregate_with_array.adb create mode 100644 gcc/testsuite/gnat.dg/self_aggregate_with_zeros.adb create mode 100644 gcc/testsuite/gnat.dg/specs/specs.exp create mode 100644 gcc/testsuite/gnat.dg/specs/static_initializer.ads create mode 100644 gcc/testsuite/gnat.dg/string_slice.adb create mode 100644 gcc/testsuite/gnat.dg/style/style.exp create mode 100644 gcc/testsuite/gnat.dg/varsize_temp.adb create mode 100644 libffi/testsuite/libffi.call/return_ul.c create mode 100644 libgfortran/generated/_mod_r10.F90 create mode 100644 libgfortran/generated/_mod_r16.F90 delete mode 100644 libgfortran/generated/dotprod_c10.c delete mode 100644 libgfortran/generated/dotprod_c16.c delete mode 100644 libgfortran/generated/dotprod_c4.c delete mode 100644 libgfortran/generated/dotprod_c8.c delete mode 100644 libgfortran/generated/dotprod_i16.c delete mode 100644 libgfortran/generated/dotprod_i4.c delete mode 100644 libgfortran/generated/dotprod_i8.c delete mode 100644 libgfortran/generated/dotprod_l16.c delete mode 100644 libgfortran/generated/dotprod_l4.c delete mode 100644 libgfortran/generated/dotprod_l8.c delete mode 100644 libgfortran/generated/dotprod_r10.c delete mode 100644 libgfortran/generated/dotprod_r16.c delete mode 100644 libgfortran/generated/dotprod_r4.c delete mode 100644 libgfortran/generated/dotprod_r8.c create mode 100644 libgfortran/generated/reshape_r4.c create mode 100644 libgfortran/generated/reshape_r8.c create mode 100644 libgfortran/generated/transpose_r4.c create mode 100644 libgfortran/generated/transpose_r8.c create mode 100644 libgfortran/intrinsics/access.c create mode 100644 libgfortran/intrinsics/chmod.c create mode 100644 libgfortran/intrinsics/clock.c delete mode 100644 libgfortran/m4/dotprod.m4 delete mode 100644 libgfortran/m4/dotprodc.m4 delete mode 100644 libgfortran/m4/dotprodl.m4 delete mode 100644 libgfortran/runtime/normalize.c create mode 100644 libgomp/config/mingw32/time.c create mode 100644 libjava/classpath/examples/Makefile.java2d.in create mode 100644 libjava/classpath/examples/gnu/classpath/examples/awt/AicasGraphicsBenchmark.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/java2d/J2dBenchmark.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/java2d/J2dBenchmarkGUI.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/java2d/JNIOverhead.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/java2d/bench.c create mode 100644 libjava/classpath/examples/gnu/classpath/examples/java2d/bench.h create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestBeans.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestClassLoading.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestCompilation.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestGarbageCollector.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestMemory.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestMemoryManager.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestMemoryPool.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestOS.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestRuntime.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/management/TestThread.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java delete mode 100644 libjava/classpath/gnu/classpath/ByteArray.java create mode 100644 libjava/classpath/gnu/classpath/debug/TeeInputStream.java create mode 100644 libjava/classpath/gnu/classpath/debug/TeeOutputStream.java create mode 100644 libjava/classpath/gnu/classpath/debug/TeeReader.java create mode 100644 libjava/classpath/gnu/classpath/debug/TeeWriter.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/ClassUnloadEvent.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/ExceptionEvent.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/MethodEntryEvent.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/MethodExitEvent.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/SingleStepEvent.java create mode 100644 libjava/classpath/gnu/java/awt/dnd/GtkMouseDragGestureRecognizer.java create mode 100644 libjava/classpath/gnu/java/awt/dnd/peer/gtk/GtkDragSourceContextPeer.java create mode 100644 libjava/classpath/gnu/java/awt/dnd/peer/gtk/GtkDropTargetContextPeer.java create mode 100644 libjava/classpath/gnu/java/awt/dnd/peer/gtk/GtkDropTargetPeer.java create mode 100644 libjava/classpath/gnu/java/awt/java2d/ImagePaint.java create mode 100644 libjava/classpath/gnu/java/awt/java2d/TexturePaintContext.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/BufferedImageGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/CairoSurface.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphicsCopy.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GdkGlyphVector.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java delete mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/GtkMouseInfoPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/gtk/VolatileImageGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/GLGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/ImageConverter.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/KeyboardMapping.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XDialogPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XEventPump.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XFontPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XFontPeer2.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XFramePeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XGraphics2D.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XGraphicsConfiguration.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XGraphicsDevice.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XGraphicsEnvironment.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XImage.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XLightweightPeer.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XToolkit.java create mode 100644 libjava/classpath/gnu/java/awt/peer/x/XWindowPeer.java create mode 100644 libjava/classpath/gnu/java/awt/print/JavaPrinterGraphics.java create mode 100644 libjava/classpath/gnu/java/awt/print/JavaPrinterJob.java create mode 100644 libjava/classpath/gnu/java/awt/print/PostScriptGraphics2D.java create mode 100644 libjava/classpath/gnu/java/awt/print/SpooledDocument.java create mode 100644 libjava/classpath/gnu/java/lang/management/BeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/ClassLoadingMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/CompilationMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/GarbageCollectorMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/MemoryMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/MemoryManagerMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/MemoryPoolMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/OperatingSystemMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/RuntimeMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/ThreadMXBeanImpl.java create mode 100644 libjava/classpath/gnu/java/lang/management/package.html create mode 100644 libjava/classpath/gnu/java/net/IndexListParser.java create mode 100644 libjava/classpath/gnu/java/net/loader/FileResource.java create mode 100644 libjava/classpath/gnu/java/net/loader/FileURLLoader.java create mode 100644 libjava/classpath/gnu/java/net/loader/JarURLLoader.java create mode 100644 libjava/classpath/gnu/java/net/loader/JarURLResource.java create mode 100644 libjava/classpath/gnu/java/net/loader/RemoteResource.java create mode 100644 libjava/classpath/gnu/java/net/loader/RemoteURLLoader.java create mode 100644 libjava/classpath/gnu/java/net/loader/Resource.java create mode 100644 libjava/classpath/gnu/java/net/loader/URLLoader.java create mode 100644 libjava/classpath/gnu/java/net/loader/URLStreamHandlerCache.java create mode 100644 libjava/classpath/gnu/java/nio/SocketChannelSelectionKeyImpl.java create mode 100644 libjava/classpath/gnu/java/security/Configuration.java.in rewrite libjava/classpath/gnu/java/security/hash/Tiger.java (90%) create mode 100644 libjava/classpath/gnu/java/security/util/ByteArray.java create mode 100644 libjava/classpath/gnu/java/security/util/IntegerUtil.java delete mode 100644 libjava/classpath/gnu/java/security/util/Prime2.java create mode 100644 libjava/classpath/gnu/java/util/prefs/GConfBasedFactory.java create mode 100644 libjava/classpath/gnu/java/util/prefs/GConfBasedPreferences.java create mode 100644 libjava/classpath/gnu/java/util/prefs/gconf/GConfNativePeer.java create mode 100644 libjava/classpath/gnu/java/util/regex/BacktrackStack.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexed.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexedCharArray.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexedCharSequence.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexedInputStream.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexedString.java create mode 100644 libjava/classpath/gnu/java/util/regex/CharIndexedStringBuffer.java create mode 100644 libjava/classpath/gnu/java/util/regex/RE.java create mode 100644 libjava/classpath/gnu/java/util/regex/REException.java create mode 100644 libjava/classpath/gnu/java/util/regex/REFilterInputStream.java create mode 100644 libjava/classpath/gnu/java/util/regex/REMatch.java create mode 100644 libjava/classpath/gnu/java/util/regex/REMatchEnumeration.java create mode 100644 libjava/classpath/gnu/java/util/regex/RESyntax.java create mode 100644 libjava/classpath/gnu/java/util/regex/REToken.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenAny.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenBackRef.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenChar.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenEnd.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenEndOfPreviousMatch.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenEndSub.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenIndependent.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenLookAhead.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenLookBehind.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenNamedProperty.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenOneOf.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenPOSIX.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenRange.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenRepeated.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenStart.java create mode 100644 libjava/classpath/gnu/java/util/regex/RETokenWordBoundary.java create mode 100644 libjava/classpath/gnu/java/util/regex/UncheckedRE.java rewrite libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java (80%) rewrite libjava/classpath/gnu/javax/crypto/cipher/Cast5.java (73%) rewrite libjava/classpath/gnu/javax/crypto/cipher/DES.java (73%) rewrite libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java (60%) create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/AES128KeyWrapSpi.java create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/AES192KeyWrapSpi.java create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/AES256KeyWrapSpi.java create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/AESKeyWrapSpi.java create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/KeyWrappingAlgorithmAdapter.java create mode 100644 libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESKeyWrapSpi.java rewrite libjava/classpath/gnu/javax/crypto/key/srp6/SRPAlgorithm.java (64%) create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/AESKeyWrap.java create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/BaseKeyWrappingAlgorithm.java create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/IKeyWrappingAlgorithm.java create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/KeyUnwrappingException.java create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/KeyWrappingAlgorithmFactory.java create mode 100644 libjava/classpath/gnu/javax/crypto/kwa/TripleDESKeyWrap.java create mode 100644 libjava/classpath/gnu/javax/crypto/pad/ISO10126.java rewrite libjava/classpath/gnu/javax/crypto/pad/PKCS7.java (81%) create mode 100644 libjava/classpath/gnu/javax/imageio/IIOInputStream.java create mode 100644 libjava/classpath/gnu/javax/imageio/gif/GIFFile.java create mode 100644 libjava/classpath/gnu/javax/imageio/gif/GIFImageReader.java create mode 100644 libjava/classpath/gnu/javax/imageio/gif/GIFImageReaderSpi.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/DCT.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/HuffmanTable.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGComponent.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGDecoder.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGException.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGFrame.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageInputStream.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageReader.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageReaderSpi.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGMarker.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGMarkerFoundException.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/JPEGScan.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/YCbCr_ColorSpace.java create mode 100644 libjava/classpath/gnu/javax/imageio/jpeg/ZigZag.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGChunk.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGData.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGDecoder.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGEncoder.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGException.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGFile.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGFilter.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGGamma.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGHeader.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGICCProfile.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGImageReader.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGImageReaderSpi.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGPalette.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGPhys.java create mode 100644 libjava/classpath/gnu/javax/imageio/png/PNGTime.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/file/ExtendedMidiFileFormat.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/file/MidiDataInputStream.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/file/MidiDataOutputStream.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/file/MidiFileReader.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/file/MidiFileWriter.java create mode 100644 libjava/classpath/gnu/javax/sound/sampled/AU/AUReader.java create mode 100644 libjava/classpath/gnu/javax/sound/sampled/WAV/WAVReader.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/CharacterAttributeTranslator.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/CombinedAttributes.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/ImageViewIconFactory.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/parser/GnuParserDelegator.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/parser/HTML_401Swing.java create mode 100644 libjava/classpath/gnu/javax/swing/text/html/parser/SmallHtmlAttributeSet.java delete mode 100644 libjava/classpath/gnu/regexp/BacktrackStack.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexed.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexedCharArray.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexedCharSequence.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexedInputStream.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexedString.java delete mode 100644 libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java delete mode 100644 libjava/classpath/gnu/regexp/RE.java delete mode 100644 libjava/classpath/gnu/regexp/REException.java delete mode 100644 libjava/classpath/gnu/regexp/REFilterInputStream.java delete mode 100644 libjava/classpath/gnu/regexp/REMatch.java delete mode 100644 libjava/classpath/gnu/regexp/REMatchEnumeration.java delete mode 100644 libjava/classpath/gnu/regexp/RESyntax.java delete mode 100644 libjava/classpath/gnu/regexp/REToken.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenAny.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenBackRef.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenChar.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenEnd.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenEndOfPreviousMatch.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenEndSub.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenIndependent.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenLookAhead.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenLookBehind.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenNamedProperty.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenOneOf.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenPOSIX.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenRange.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenRepeated.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenStart.java delete mode 100644 libjava/classpath/gnu/regexp/RETokenWordBoundary.java delete mode 100644 libjava/classpath/gnu/regexp/UncheckedRE.java create mode 100644 libjava/classpath/include/GtkDragSourceContextPeer.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_CairoSurface.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h delete mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics.h delete mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GdkGraphics2D.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GdkScreenGraphicsDevice.h delete mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h delete mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h create mode 100644 libjava/classpath/include/gnu_java_awt_peer_gtk_GtkVolatileImage.h create mode 100644 libjava/classpath/include/gnu_java_nio_VMChannel.h create mode 100644 libjava/classpath/include/gnu_java_util_prefs_gconf_GConfNativePeer.h create mode 100644 libjava/classpath/include/java_net_VMURLConnection.h create mode 100644 libjava/classpath/include/jvmti.h rewrite libjava/classpath/java/awt/Label.java (74%) create mode 100644 libjava/classpath/java/awt/MouseInfo.java create mode 100644 libjava/classpath/java/awt/PointerInfo.java rewrite libjava/classpath/java/awt/TextField.java (75%) create mode 100644 libjava/classpath/java/awt/peer/MouseInfoPeer.java create mode 100644 libjava/classpath/java/lang/annotation/IncompleteAnnotationException.java create mode 100644 libjava/classpath/java/lang/management/ClassLoadingMXBean.java create mode 100644 libjava/classpath/java/lang/management/CompilationMXBean.java create mode 100644 libjava/classpath/java/lang/management/GarbageCollectorMXBean.java create mode 100644 libjava/classpath/java/lang/management/ManagementFactory.java create mode 100644 libjava/classpath/java/lang/management/ManagementPermission.java create mode 100644 libjava/classpath/java/lang/management/MemoryMXBean.java create mode 100644 libjava/classpath/java/lang/management/MemoryManagerMXBean.java create mode 100644 libjava/classpath/java/lang/management/MemoryNotificationInfo.java create mode 100644 libjava/classpath/java/lang/management/MemoryPoolMXBean.java create mode 100644 libjava/classpath/java/lang/management/MemoryUsage.java create mode 100644 libjava/classpath/java/lang/management/OperatingSystemMXBean.java create mode 100644 libjava/classpath/java/lang/management/RuntimeMXBean.java create mode 100644 libjava/classpath/java/lang/management/ThreadInfo.java create mode 100644 libjava/classpath/java/lang/management/ThreadMXBean.java create mode 100644 libjava/classpath/java/lang/management/package.html create mode 100644 libjava/classpath/java/math/MathContext.java create mode 100644 libjava/classpath/java/text/class-dependencies.conf create mode 100644 libjava/classpath/java/util/DuplicateFormatFlagsException.java create mode 100644 libjava/classpath/java/util/FormatFlagsConversionMismatchException.java create mode 100644 libjava/classpath/java/util/Formattable.java create mode 100644 libjava/classpath/java/util/FormattableFlags.java create mode 100644 libjava/classpath/java/util/Formatter.java create mode 100644 libjava/classpath/java/util/FormatterClosedException.java create mode 100644 libjava/classpath/java/util/IllegalFormatCodePointException.java create mode 100644 libjava/classpath/java/util/IllegalFormatConversionException.java create mode 100644 libjava/classpath/java/util/IllegalFormatException.java create mode 100644 libjava/classpath/java/util/IllegalFormatFlagsException.java create mode 100644 libjava/classpath/java/util/IllegalFormatPrecisionException.java create mode 100644 libjava/classpath/java/util/IllegalFormatWidthException.java create mode 100644 libjava/classpath/java/util/InputMismatchException.java create mode 100644 libjava/classpath/java/util/MissingFormatArgumentException.java create mode 100644 libjava/classpath/java/util/MissingFormatWidthException.java create mode 100644 libjava/classpath/java/util/UUID.java create mode 100644 libjava/classpath/java/util/UnknownFormatConversionException.java create mode 100644 libjava/classpath/java/util/UnknownFormatFlagsException.java create mode 100644 libjava/classpath/java/util/logging/LoggingMXBean.java create mode 100644 libjava/classpath/javax/management/AttributeList.java create mode 100644 libjava/classpath/javax/management/AttributeNotFoundException.java create mode 100644 libjava/classpath/javax/management/DynamicMBean.java create mode 100644 libjava/classpath/javax/management/IntrospectionException.java create mode 100644 libjava/classpath/javax/management/InvalidAttributeValueException.java create mode 100644 libjava/classpath/javax/management/JMException.java create mode 100644 libjava/classpath/javax/management/JMRuntimeException.java create mode 100644 libjava/classpath/javax/management/ListenerNotFoundException.java create mode 100644 libjava/classpath/javax/management/MBeanAttributeInfo.java create mode 100644 libjava/classpath/javax/management/MBeanConstructorInfo.java create mode 100644 libjava/classpath/javax/management/MBeanException.java create mode 100644 libjava/classpath/javax/management/MBeanFeatureInfo.java create mode 100644 libjava/classpath/javax/management/MBeanInfo.java create mode 100644 libjava/classpath/javax/management/MBeanNotificationInfo.java create mode 100644 libjava/classpath/javax/management/MBeanOperationInfo.java create mode 100644 libjava/classpath/javax/management/MBeanParameterInfo.java create mode 100644 libjava/classpath/javax/management/NotCompliantMBeanException.java create mode 100644 libjava/classpath/javax/management/Notification.java create mode 100644 libjava/classpath/javax/management/NotificationBroadcaster.java create mode 100644 libjava/classpath/javax/management/NotificationEmitter.java create mode 100644 libjava/classpath/javax/management/NotificationFilter.java create mode 100644 libjava/classpath/javax/management/NotificationListener.java create mode 100644 libjava/classpath/javax/management/OperationsException.java create mode 100644 libjava/classpath/javax/management/ReflectionException.java create mode 100644 libjava/classpath/javax/management/RuntimeOperationsException.java create mode 100644 libjava/classpath/javax/management/StandardMBean.java create mode 100644 libjava/classpath/javax/management/openmbean/ArrayType.java create mode 100644 libjava/classpath/javax/management/openmbean/CompositeData.java create mode 100644 libjava/classpath/javax/management/openmbean/CompositeDataSupport.java create mode 100644 libjava/classpath/javax/management/openmbean/CompositeType.java create mode 100644 libjava/classpath/javax/management/openmbean/InvalidKeyException.java create mode 100644 libjava/classpath/javax/management/openmbean/OpenDataException.java create mode 100644 libjava/classpath/javax/management/openmbean/OpenType.java create mode 100644 libjava/classpath/javax/management/openmbean/SimpleType.java create mode 100644 libjava/classpath/javax/management/openmbean/TabularData.java create mode 100644 libjava/classpath/javax/management/openmbean/TabularType.java create mode 100644 libjava/classpath/javax/management/openmbean/package.html rewrite libjava/classpath/javax/naming/Context.java (68%) create mode 100644 libjava/classpath/javax/rmi/ssl/SslRMIClientSocketFactory.java create mode 100644 libjava/classpath/javax/rmi/ssl/SslRMIServerSocketFactory.java create mode 100644 libjava/classpath/javax/swing/plaf/basic/SharedUIDefaults.java create mode 100644 libjava/classpath/javax/swing/text/EmptyAttributeSet.java create mode 100644 libjava/classpath/javax/swing/text/html/BRView.java create mode 100644 libjava/classpath/javax/swing/text/html/HRuleView.java delete mode 100644 libjava/classpath/javax/swing/text/html/HTMLTableView.java create mode 100644 libjava/classpath/javax/swing/text/html/ImageView.java create mode 100644 libjava/classpath/javax/swing/text/html/MinimalHTMLWriter.java create mode 100644 libjava/classpath/javax/swing/text/html/TableView.java create mode 100644 libjava/classpath/lib/standard.omit.in create mode 100644 libjava/classpath/native/jawt/.cvsignore rewrite libjava/classpath/native/jawt/Makefile.am (68%) create mode 100644 libjava/classpath/native/jni/gconf-peer/GConfNativePeer.c create mode 100644 libjava/classpath/native/jni/gconf-peer/Makefile.am create mode 100644 libjava/classpath/native/jni/gconf-peer/Makefile.in create mode 100644 libjava/classpath/native/jni/gtk-peer/.cvsignore create mode 100644 libjava/classpath/native/jni/gtk-peer/GtkDragSourceContextPeer.c create mode 100644 libjava/classpath/native/jni/gtk-peer/cairographics2d.h create mode 100644 libjava/classpath/native/jni/gtk-peer/gdkdisplay.h create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c delete mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c delete mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkScreenGraphicsDevice.c delete mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c delete mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c create mode 100644 libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c delete mode 100644 libjava/classpath/native/jni/gtk-peer/gtkcairopeer.h create mode 100644 libjava/classpath/native/jni/java-net/java_net_VMURLConnection.c create mode 100644 libjava/classpath/native/jni/java-nio/gnu_java_nio_VMChannel.c create mode 100644 libjava/classpath/native/jni/qt-peer/.cvsignore create mode 100644 libjava/classpath/native/plugin/.cvsignore create mode 100644 libjava/classpath/native/plugin/Makefile.am create mode 100644 libjava/classpath/native/plugin/Makefile.in create mode 100644 libjava/classpath/native/plugin/gcjwebplugin.cc create mode 100644 libjava/classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory create mode 100644 libjava/classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory.in create mode 100644 libjava/classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileReader create mode 100644 libjava/classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileWriter create mode 100644 libjava/classpath/resource/META-INF/services/javax.sound.sampled.spi.AudioFileReader create mode 100644 libjava/classpath/resource/gnu/classpath/tools/appletviewer/MessagesBundle.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/appletviewer/MessagesBundle_de.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/getopt/Messages.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/jar/messages.properties delete mode 100644 libjava/classpath/resource/gnu/classpath/tools/jarsigner/MessageBundle.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/jarsigner/messages.properties delete mode 100644 libjava/classpath/resource/gnu/classpath/tools/keytool/MessageBundle.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/keytool/messages.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/native2ascii/messages.properties create mode 100644 libjava/classpath/resource/gnu/classpath/tools/serialver/messages.properties create mode 100644 libjava/classpath/resource/gnu/java/awt/peer/x/fonts.properties rename libjava/classpath/resource/gnu/{regexp => java/util/regex}/MessagesBundle.properties (100%) rename libjava/classpath/resource/gnu/{regexp => java/util/regex}/MessagesBundle_fr.properties (100%) create mode 100644 libjava/classpath/resource/gnu/java/util/regex/MessagesBundle_it.properties delete mode 100644 libjava/classpath/resource/gnu/regexp/MessagesBundle_it.properties create mode 100755 libjava/classpath/scripts/import-cacerts.sh create mode 100644 libjava/classpath/sun/reflect/annotation/AnnotationInvocationHandler.java create mode 100644 libjava/classpath/tools/.cvsignore create mode 100644 libjava/classpath/tools/appletviewer.in create mode 100644 libjava/classpath/tools/gappletviewer.in create mode 100644 libjava/classpath/tools/gjar.in create mode 100644 libjava/classpath/tools/gjarsigner.in create mode 100644 libjava/classpath/tools/gkeytool.in create mode 100644 libjava/classpath/tools/gnative2ascii.in create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/AppletClassLoader.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/AppletSecurityManager.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/AppletTag.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/AppletWarning.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/CommonAppletContext.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/CommonAppletStub.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/ConsoleDialog.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/ErrorApplet.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/Main.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/PluginAppletContext.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/PluginAppletViewer.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/PluginAppletWindow.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/StandaloneAppletContext.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/StandaloneAppletViewer.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/StandaloneAppletWindow.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/appletviewer/TagParser.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/ClasspathToolParser.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/Messages.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/Option.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/OptionException.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/OptionGroup.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/getopt/Parser.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Action.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Entry.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Extractor.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Indexer.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Lister.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Main.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Messages.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/Updater.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jar/WorkSet.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/jarsigner/package.html create mode 100644 libjava/classpath/tools/gnu/classpath/tools/keytool/CACertCmd.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/keytool/package.html create mode 100644 libjava/classpath/tools/gnu/classpath/tools/native2ascii/Messages.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/rmi/registry/package.html create mode 100644 libjava/classpath/tools/gnu/classpath/tools/serialver/Messages.java create mode 100644 libjava/classpath/tools/gnu/classpath/tools/serialver/SerialVer.java create mode 100644 libjava/classpath/tools/gserialver.in create mode 100644 libjava/classpath/tools/jarsigner.in delete mode 100644 libjava/classpath/tools/jarsigner.sh.in create mode 100644 libjava/classpath/tools/keytool.in delete mode 100644 libjava/classpath/tools/keytool.sh.in create mode 100644 libjava/classpath/tools/toolwrapper.c delete mode 100644 libjava/classpath/vm/reference/gnu/classpath/Unsafe.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMClassLoadingMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMCompilationMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMGarbageCollectorMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMRuntimeMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java create mode 100644 libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java create mode 100644 libjava/classpath/vm/reference/java/lang/management/VMManagementFactory.java create mode 100644 libjava/classpath/vm/reference/java/net/VMURLConnection.java create mode 100644 libjava/classpath/vm/reference/sun/misc/Unsafe.java create mode 100644 libjava/classpath/vm/reference/sun/reflect/Reflection.java create mode 100644 libjava/classpath/vm/reference/sun/reflect/misc/ReflectUtil.java create mode 100644 libjava/gnu/classpath/jdwp/natVMFrame.cc create mode 100644 libjava/gnu/classpath/jdwp/natVMMethod.cc create mode 100644 libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc create mode 100644 libjava/gnu/java/lang/management/VMClassLoadingMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMCompilationMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMGarbageCollectorMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMMemoryMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMRuntimeMXBeanImpl.java create mode 100644 libjava/gnu/java/lang/management/VMThreadMXBeanImpl.java create mode 100644 libjava/gnu/java/nio/VMChannel.java create mode 100644 libjava/include/jvmti_md.h create mode 100644 libjava/interpret-run.cc create mode 100644 libjava/java/lang/management/VMManagementFactory.java create mode 100644 libjava/java/net/VMURLConnection.java create mode 100644 libjava/java/net/natURLClassLoader.cc delete mode 100644 libjava/java/security/AccessController.java create mode 100644 libjava/java/security/VMAccessControlState.java create mode 100644 libjava/java/security/VMAccessController.java delete mode 100644 libjava/java/security/libgcj.security create mode 100644 libjava/java/security/natVMAccessControlState.cc create mode 100644 libjava/java/security/natVMAccessController.cc create mode 100644 libjava/java/util/logging/LogManager.java delete mode 100644 libjava/java/util/logging/logging.properties create mode 100644 libjava/javax/naming/spi/NamingManager.java create mode 100644 libjava/jni-libjvm.cc create mode 100644 libjava/jvmti.cc create mode 100644 libjava/libgcj_bc.c create mode 100644 libjava/scripts/jar.in rewrite libjava/sysdep/i386/backtrace.h (64%) create mode 100644 libjava/testsuite/libjava.jni/PR28178.c create mode 100644 libjava/testsuite/libjava.jni/PR28178.java create mode 100644 libjava/testsuite/libjava.jni/PR28178.out create mode 100644 libjava/testsuite/libjava.lang/PR27908.java create mode 100644 libjava/testsuite/libjava.lang/PR27908.out create mode 100644 libjava/testsuite/libjava.lang/RH194522.java create mode 100644 libjava/testsuite/libjava.lang/RH194522.out create mode 100644 libjava/testsuite/libjava.lang/StackTrace2.java create mode 100644 libjava/testsuite/libjava.lang/StackTrace2.out delete mode 100644 libstdc++-v3/config/cpu/generic/atomic_builtins/atomicity.h create mode 100644 libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h rename libstdc++-v3/config/cpu/generic/{ => atomicity_mutex}/atomicity.h (100%) delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/Std_hash_set_impl.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/acks.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/balls_and_bins.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_assoc_cntnr_compound_data.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_assoc_cntnr_no_data.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_hash_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_hash_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_invalidation_guarantee.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_ms_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_assoc_cntnr_const_node_iterator.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_assoc_cntnr_node_iterator.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_assoc_cntnr_rev.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_assoc_cntnr_rev_it.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/basic_tree_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/cc_hash_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/cc_hash_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/cc_hash_max_collision_check_resize_trigger.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/cc_hash_policy_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/component_requirements.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/compound_data_enabled_ms_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/compound_data_type.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/compound_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/concepts.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/contact.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/counter_update_metadata.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/counter_update_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/data_enabled_ms_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/design.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/different_underlying_dss.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/direct_mask_range_hashing.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/direct_mod_range_hashing.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/disclaimer.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ds_gen.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ds_tag_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ds_traits.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/embedded_lists_1.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/embedded_lists_2.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/examples.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/exception_guarantees_specifics.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/find_invalidation_guarantee.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/find_iterators_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/find_iterators_range_ops_1.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/find_iterators_range_ops_2.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/generics.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/gp_hash_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/gp_hash_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/gp_hash_policy_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_and_probe_general.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_based_containers.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_exponential_size_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_load_check_resize_trigger.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_policies.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_policy_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_prime_size_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_range_hashing_seq_diagram.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_range_hashing_seq_diagram2.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_ranged_hash_range_hashing_fns.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/hash_standard_resize_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/home.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/index.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/insert_resize_sequence_diagram1.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/insert_resize_sequence_diagram2.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/insert_resize_sequence_diagram3.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/insert_type_methods.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/interface.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/interval_node_invariants.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/introduction.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/invalidation_guarantee_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/invalidation_guarantee_erase.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lib_download.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/linear_probe_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/list_updates.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lu_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lu_based_containers.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lu_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lu_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/lu_ops.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/mmap_value_utils.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/motivation.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/move_to_front_update_metadata.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/move_to_front_update_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ms_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ms_gen.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ms_tag_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ms_traits.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/node_invariant_invalidations.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/node_invariants.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/node_invariants.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/non_unique_mapping.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/non_unique_mapping_containers.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/null_data_type.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/null_hash_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/null_probe_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/order_by_key.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/order_statistics_key.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/order_statistics_key_cmp.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/order_statistics_node_updator.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/ov_tree_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/overview.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/pb_assoc_ex.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/portability.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/quadratic_probe_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/range_invalidation_guarantee.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/rank_node_invariants.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/rationale_null_node_updator.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/rb_tree_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/reference_iterator.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/references.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/regression_tests.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/resize_general.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/resize_policies.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/resize_policy_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/restoring_node_invariants.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_node_updator.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_probe_fn.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_probe_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_range_hashing.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_range_hashing.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_ranged_hash_fn.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_ranged_hash_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_ranged_probe_fn.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_ranged_probe_fn.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_resize_policy.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_resize_policy.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_resize_trigger.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_size_policy.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/sample_update_policy.hpp delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/size_policies_general.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/splay_tree_ds_tag.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/timing_tests.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/toc.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tree_assoc_cntnr.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tree_assoc_cntnr_const_node_iterator.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tree_assoc_cntnr_node_iterator.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tree_based_containers.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tree_cd.jpg delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/trigger_policies_general.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/tutorial.html delete mode 100644 libstdc++-v3/docs/html/ext/pb_assoc/update_seq_diagram.jpg create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/PythonPoweredSmall.gif create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/acks.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_container_tag_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_container_tag_cd.svg create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_container_traits.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_design.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_examples.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_performance_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_regression_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/assoc_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/associative_container_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/balls_and_bins.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_hash_table.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_hash_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_invalidation_guarantee.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_tree.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_tree_assoc_container_const_node_iterator.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/basic_tree_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/binary_heap_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/binomial_heap_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_max_collision_check_resize_trigger.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_find_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_find_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_find_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_random_int_subscript_timing_test_insert_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_table.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/cc_hash_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/checked_by_tidy.gif create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/concepts.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/contact.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/container_base.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/container_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/container_cd.svg create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/container_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/counter_lu_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/design.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/different_underlying_dss.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/direct_mask_range_hashing.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/direct_mod_range_hashing.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/disclaimer.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/ds_gen.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/embedded_lists_1.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/embedded_lists_2.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/embedded_lists_3.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/examples.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/exceptions.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_find_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_find_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_insert_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_table.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/gp_hash_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_based_containers.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_exponential_size_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_load_check_resize_trigger.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_policy_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_prime_size_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_erase_mem_usage_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_subscript_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_random_int_subscript_insert_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_range_hashing_seq_diagram.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_range_hashing_seq_diagram2.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_ranged_hash_range_hashing_fns.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_standard_resize_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_text_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_zlob_random_int_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/index.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/insert_error.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/insert_resize_sequence_diagram1.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/insert_resize_sequence_diagram2.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/insert_resize_sequence_diagram3.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/interface.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/introduction.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/invalidation_guarantee_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/invalidation_guarantee_erase.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/join_error.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/linear_probe_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/list_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/list_update_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/lu.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/lu_based_containers.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/misc.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/motivation.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/move_to_front_lu_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/node_invariant_invalidations.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/node_invariants.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_hash_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_lu_metadata.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_mapped_type.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_probe_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_tree_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/null_trie_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/ov_tree_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_heap_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pat_trie.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pat_trie_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/point_invalidation_guarantee.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/point_iterators_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/point_iterators_range_ops_1.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/point_iterators_range_ops_2.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_container_traits.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_design.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_different_underlying_dss.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_examples.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_performance_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_regression_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/pq_tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/prerequisites.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_random_int_push_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_tag_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_tag_cd.svg create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_join_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_join_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_join_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_pop_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/priority_queue_text_push_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/quadratic_probe_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/random_int_find_find_timing_test_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/random_int_find_find_timing_test_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/range_invalidation_guarantee.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/rationale_null_node_updator.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/rb_tree_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/rc_binomial_heap_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/references.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/resize_error.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/resize_policy_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/restoring_node_invariants.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_probe_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_range_hashing.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_ranged_hash_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_ranged_probe_fn.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_resize_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_resize_trigger.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_size_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_tree_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_trie_e_access_traits.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_trie_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/sample_update_policy.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/simple_list.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/splay_tree_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/string_trie_e_access_traits.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tests.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_hash_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_hash_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_hash_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_tree_like_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_tree_like_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/text_find_timing_test_tree_like_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/thin_heap_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_based_containers.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_node_iterator.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_node_updator_policy_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_order_statistics_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_order_statistics_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_order_statistics_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_order_statistics_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_order_statistics_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_random_int_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_split_join_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_split_join_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_split_join_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_split_join_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_lor_find_find_timing_test.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_lor_find_timing_test_gcc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tree_text_lor_find_timing_test_msvc.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_based_containers.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_const_node_iterator.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_node_iterator.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_node_updator_policy_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_order_statistics_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_prefix_search_node_update.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trie_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/trivial_iterator_tag.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/tutorial.html create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/update_policy_cd.png create mode 100644 libstdc++-v3/docs/html/ext/pb_ds/update_seq_diagram.png delete mode 100644 libstdc++-v3/include/ext/pb_assoc/assoc_cntnr.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/data_type.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/assoc_cntnr_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/d_extract_key.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/d_find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/d_insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/extract_key.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_assoc_cntnr/iterators_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_hash_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_hash_assoc_cntnr/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_hash_assoc_cntnr/resize_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/node_iteration_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/policy_access_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/r_erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/r_range_iteration_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/range_iteration_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/basic_tree_assoc_cntnr/split_join_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/bin_search_tree_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/find_iterators.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/iterators_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/node_iterators.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/r_erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/rotate_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/bin_search_tree_/split_join_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_hash_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/cc_ht_map_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/cmp_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/cond_key_dtor_entry_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/constructor_destructor_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/constructor_destructor_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/debug_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/debug_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/entry_list_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/erase_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/erase_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/find_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/find_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/insert_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/insert_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/iterators_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/policy_access_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/resize_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/resize_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/resize_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/size_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cc_ht_map_/standard_policies.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/cond_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ds_trait_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/eq_fn/eq_by_less.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/eq_fn/hash_eq_fn.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_hash_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/constructor_destructor_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/constructor_destructor_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/debug_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/debug_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/erase_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/erase_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/find_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/find_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/gp_ht_map_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/insert_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/insert_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/iterator_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/policy_access_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/resize_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/resize_no_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/gp_ht_map_/resize_store_hash_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/direct_mask_range_hashing_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/direct_mod_range_hashing_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/linear_probe_fn_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/mask_based_range_hashing.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/mod_based_range_hashing.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/probe_fn_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/quadratic_probe_fn_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/ranged_hash_fn.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_fn/ranged_probe_fn.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/hash_types_traits.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_assoc_cntnr/policy_access_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/iterators_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/lu_map_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_map_/policy_access_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_policy/counter_lu_metadata_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_policy/counter_lu_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/lu_policy/mtf_lu_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/map_debug_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/mapping_level_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ms_category_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ms_trait_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/order_statistics_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/cond_dtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/iterators_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/node_iterators.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/ov_tree_map_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/ov_tree_map_/split_join_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/node.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/rb_tree_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/rb_tree_map_/split_join_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/cc_hash_max_collision_resize_trigger_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/hash_exponential_size_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/hash_prime_size_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/hash_standard_resize_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/ht_prime_size_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/resize_policy/size_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/constructors_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/debug_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/node.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/splay_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/splay_tree_.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/splay_tree_/split_join_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/standard_policies.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/standard_sizes.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/tree_assoc_cntnr/constructor_destructor_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/tree_policy/null_node_updator_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/tree_policy/order_statistics_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/type_utils.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_append.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_apply.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_at_index.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_contains.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_filter.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_transform.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/typelist/typelist_typelist_append.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/types_traits.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/unordered_iterator/const_find_iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/unordered_iterator/const_iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/unordered_iterator/find_iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/unordered_iterator/iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/constructor_destructor_and_related.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/erase_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/erase_if_pred.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/find_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/info_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/insert_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/invalidation_guarantee_selector.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/it_value_type_traits.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/iterator_fn_imps.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/ref_pair.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_traits.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/ds_trait.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/exception.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/hash_policy.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/lu_policy.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/ms_trait.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/tree_policy.hpp delete mode 100644 libstdc++-v3/include/ext/pb_assoc/trivial_iterator_def.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/assoc_container.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_append.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_apply.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_assoc_container_find.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_at_index.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_contains.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_filter.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_flatten.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_transform.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist/typelist_typelist_append.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/typelist_assoc_container.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/exception.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/hash_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/priority_queue.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/tree_policy.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/trie_policy.hpp create mode 100644 libstdc++-v3/include/precompiled/extc++.h rename libstdc++-v3/include/{ => precompiled}/stdc++.h (100%) create mode 100644 libstdc++-v3/include/precompiled/stdtr1c++.h create mode 100644 libstdc++-v3/include/tr1/hashtable_policy.h create mode 100644 libstdc++-v3/include/tr1/random create mode 100644 libstdc++-v3/include/tr1/random.tcc create mode 100755 libstdc++-v3/scripts/make_graph.py create mode 100755 libstdc++-v3/scripts/make_graphs.py delete mode 100644 libstdc++-v3/src/globals_locale.cc delete mode 100644 libstdc++-v3/src/locale-misc-inst.cc create mode 100644 libstdc++-v3/testsuite/22_locale/collate/transform/char/28277.cc create mode 100644 libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/28277.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc create mode 100644 libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc create mode 100644 libstdc++-v3/testsuite/23_containers/vector/bool/capacity/1.cc create mode 100644 libstdc++-v3/testsuite/23_containers/vector/bool/cons/1.cc create mode 100644 libstdc++-v3/testsuite/23_containers/vector/bool/cons/2.cc create mode 100644 libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/1.cc create mode 100644 libstdc++-v3/testsuite/25_algorithms/nth_element/2.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/valarray/27867.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/valarray/28277.cc create mode 100644 libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-1.cc create mode 100644 libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc create mode 100644 libstdc++-v3/testsuite/data/make_graph_htmls.xml create mode 100644 libstdc++-v3/testsuite/data/make_graph_test_infos.xml create mode 100644 libstdc++-v3/testsuite/data/thirty_years_among_the_dead_preproc.txt delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/basic_map.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/basic_multimap.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/basic_set.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/ds_traits.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/erase_if.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/extract_key.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_find_neg.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_illegal_resize.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_initial_size.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_load_set_change.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_mod.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_resize.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_resize_neg.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/hash_shift_mask.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/mapping_level.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/mapping_level_neg.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/ms_traits.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/ranged_hash.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/store_hash.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/tree_intervals.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/tree_join.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/tree_order_statistics.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/tree_order_statistics_join.cc delete mode 100644 libstdc++-v3/testsuite/ext/pb_assoc/example/tree_split.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/basic_map.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/basic_multiset.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/erase_if.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_find_neg.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_illegal_resize.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_initial_size.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_load_set_change.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_mod.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_erase_if.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_split_join.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_xref.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/store_hash.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/tree_join.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics_join.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/example/trie_split.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/associative_containers.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc create mode 100644 libstdc++-v3/testsuite/performance/21_strings/string_copy_cons_and_dest.cc create mode 100644 libstdc++-v3/testsuite/performance/23_containers/copy_construct/vector_bool.cc create mode 100644 libstdc++-v3/testsuite/performance/23_containers/resize/vector_bool.cc create mode 100644 libstdc++-v3/testsuite/performance/25_algorithms/nth_element_worst_case.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing.hpp create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_large.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.hpp create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc create mode 100644 libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc delete mode 100644 libstdc++-v3/testsuite/testsuite_common_types.h create mode 100644 libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/thread/default_weaktoshared.cc create mode 100644 libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/thread/mutex_weaktoshared.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/bernoulli_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/binomial_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/requirements.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/exponential_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/gamma_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/geometric_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/gen1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed2.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/non_uint_neg.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/gen1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed2.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand0.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mt19937.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/normal_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/poisson_distribution/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/token.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3_01.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4_01.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/gen1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed2.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/gen1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed1.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed2.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/range.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/range_neg.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_real/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/cons/default.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/not_equal.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/serialize.cc create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/comb_hash_fn_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/resize_policy_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/store_hash_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/priority_queue/detail/ds_string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/common_type/priority_queue/string_form.hpp create mode 100644 libstdc++-v3/testsuite/util/hash_fn/dna_str_limit.hpp create mode 100644 libstdc++-v3/testsuite/util/hash_fn/limit_string_hash_fn.hpp create mode 100644 libstdc++-v3/testsuite/util/hash_fn/string_hash_fn.hpp create mode 100644 libstdc++-v3/testsuite/util/hash_fn/string_ranged_hash_fn.hpp create mode 100644 libstdc++-v3/testsuite/util/hash_fn/string_ranged_probe_fn.hpp create mode 100644 libstdc++-v3/testsuite/util/io/illegal_input_error.hpp create mode 100644 libstdc++-v3/testsuite/util/io/prog_bar.cc create mode 100644 libstdc++-v3/testsuite/util/io/prog_bar.hpp create mode 100644 libstdc++-v3/testsuite/util/io/text_populate.hpp create mode 100644 libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc create mode 100644 libstdc++-v3/testsuite/util/io/verified_cmd_line_input.hpp create mode 100644 libstdc++-v3/testsuite/util/io/xml.hpp create mode 100644 libstdc++-v3/testsuite/util/io/xml_test_formatter.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_hash_multimap.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_hash_tag.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_map.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_multimap.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_set.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/assoc/native_tree_tag.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/priority_queue/native_pq_tag.hpp create mode 100644 libstdc++-v3/testsuite/util/native_type/priority_queue/native_priority_queue.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/mem_usage/erase_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/mem_usage/multimap_insert_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/find_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/insert_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_insert_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_find_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_insert_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/assoc/timing/tree_split_join_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/io/xml_formatter.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/mem/mem_track_allocator.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/mem/mem_track_allocator_base.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/priority_queue/mem_usage/pop_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/priority_queue/timing/join_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/priority_queue/timing/modify_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_pop_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_test.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/time/elapsed_timer.cc create mode 100644 libstdc++-v3/testsuite/util/performance/time/elapsed_timer.hpp create mode 100644 libstdc++-v3/testsuite/util/performance/time/timing_test_base.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/assoc/common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/basic_type.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/clear_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/cmp_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/defs_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/diagnostic_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_load_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_loads_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/it_conversion_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/resize_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/io/assoc/xml_formatter.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/io/priority_queue/xml_formatter.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/io/xml_formatter.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/clear_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/cmp_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/defs_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/diagnostic_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/it_conversion_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/policy_access_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc create mode 100644 libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/res_mng/forced_exception.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp create mode 100644 libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp create mode 100644 libstdc++-v3/testsuite/util/rng/twister_rand_gen.cc create mode 100644 libstdc++-v3/testsuite/util/rng/twister_rand_gen.hpp create mode 100644 libstdc++-v3/testsuite/util/statistic/res_recorder.hpp create mode 100644 libstdc++-v3/testsuite/util/statistic/sample_mean.hpp create mode 100644 libstdc++-v3/testsuite/util/statistic/sample_mean_confidence_checker.hpp create mode 100644 libstdc++-v3/testsuite/util/statistic/sample_var.hpp rename libstdc++-v3/testsuite/{ => util}/testsuite_abi.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_abi.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_abi_check.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_allocator.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_allocator.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_character.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_character.h (100%) create mode 100644 libstdc++-v3/testsuite/util/testsuite_common_types.h rename libstdc++-v3/testsuite/{ => util}/testsuite_hooks.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_hooks.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_io.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_iterators.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_performance.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_shared.cc (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_tr1.h (100%) rename libstdc++-v3/testsuite/{ => util}/testsuite_visualization.h (100%) diff --git a/ChangeLog b/ChangeLog index 8d4acaa728c..d1f0cbe6976 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,191 @@ +2006-09-10 Joseph S. Myers + + * MAINTAINERS: Add self as soft-fp maintainer. + +2006-09-09 Anatoly Sokolov + + * MAINTAINERS: Add myself as avr maintainer. + Remove Marek Michalkiewicz as avr maintainer. + +2006-09-07 Roberto Costa + + * MAINTAINERS (Write After Approval): Add myself. + +2006-08-30 Corinna Vinschen + + * configure.in: Never build newlib for a Mingw host. + Never build newlib as Mingw target library. + Test the existence of winsup/cygwin for building a Cygwin newlib, + rather than just winsup. + Add winsup/mingw and winsup/w32api paths to FLAGS_FOR_TARGET if + building a Mingw target. + * configure: Regenerate. + +2006-08-08 Eric Botcazou + + * MAINTAINERS (Various Maintainers): Add self as RTL opt. maintainer. + +2006-07-25 Paolo Bonzini + + * config.guess: Import from src (was more updated). + * config.sub: Likewise. + +2006-07-22 Daniel Jacobowitz + + * configure.in: Allow mingw32 and cygwin targets to build cross-gdb. + * configure: Regenerated. + +2006-07-18 Paolo Bonzini + + * Makefile.tpl (configure-stageN-MODULE): Pass --with-build-libsubdir + for stages after the first. + +2006-07-17 Jakub Jelinek + + * Makefile.def: Add dependencies for configure-opcodes + on configure-intl and all-opcodes on all-intl. + * Makefile.in: Regenerated. + +2006-07-13 Ben Elliston + + * MAINTAINERS (Various Maintainers): Add myself as dfp maintainer. + +2006-07-06 Paul Eggert + + Port to hosts whose 'sort' and 'tail' implementations + treat operands with leading '+' as file names, as POSIX + has required since 2001. However, make sure the code still + works on pre-POSIX hosts. + * ltmain.sh: Don't assume "sort +2" is equivalent to + "sort -k 3", since POSIX 1003.1-2001 no longer requires this. + +2006-07-05 Ulrich Weigand + + * MAINTAINERS (Various Maintainers): Add myself as reload maintainer. + +2006-07-04 Peter O'Gorman + + * ltconfig: chmod 644 before ranlib during install. + +2006-07-04 Eric Botcazou + + PR bootstrap/18058 + * configure.in: Add -fkeep-inline-functions to CFLAGS for stage 1 + if the bootstrap compiler is a GCC version that supports it. + * configure: Regenerate. + +2006-07-03 Paolo Bonzini + + * configure.in: Fix thinkos in previous check-in. + * configure: Regenerate. + +2006-07-03 Paolo Bonzini + + PR other/27063 + * configure.in: Test subdir_requires and give an appropriate + error message. + * configure: Regenerate. + +2006-07-01 Andrew John Hughes + + * MAINTAINERS (Write After Approval): Add myself. + +2006-06-22 John David Anglin + + * MAINTAINERS (OS Port Maintainers): Add myself as hpux maintainer. + +2006-06-22 Steve Ellcey + + * MAINTAINERS (OS Port Maintainers): Add myself as hpux maintainer. + +2006-06-20 David Ayers + + PR bootstrap/28072 + * configure.in: Add target-boehm-gc to noconfigdirs depending on + whether target-libjava is being configured instead of whether the + java front end is enabled. + * configure: Regenerate. + +2006-06-16 Rainer Orth + + PR target/27540 + * configure.in: Only enable libgomp on IRIX 6. + * configure: Regenerate. + +2006-06-15 Paolo Bonzini + + * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Export CFLAGS and LDFLAGS + too. + * Makefile.in: Regenerate. + +2006-06-13 Jeff Johnston + + * config-ml.in: Alter CCASFLAGS to include special + multilib options the same as is done for CFLAGS. + +2006-06-12 John David Anglin + + * configure.in: Don't enable libgomp on hpux10. + * configure: Rebuilt. + +2006-06-12 David Ayers + + PR bootstrap/27963 + PR target/19970 + * configure.in: Remove target-boehm-gc from noconfigdirs where + ${libgcj} is specified. + * configure: Regenerate. + +2006-06-06 Carlos O'Donell + + Sync from src: + + * configure.in: Sync. + * configure: Regenerated. + + 2006-05-31 Daniel Jacobowitz + + * Makefile.def: Added dependencies from sim and gdb on intl, and + added configure dependencies to everything with an all dependency + on intl. + * Makefile.in: Regenerated. + +2006-06-06 David Ayers + + PR libobjc/13946 + * Makefile.def: Add dependencies for libobjc which boehm-gc. + * Makefile.in: Regenerate. + * configure.in: Add --enable-objc-gc at toplevel and have it + enable boehm-gc for Objective-C. + Remove target-boehm-gc from libgcj. + Add target-boehm-gc to target_libraries. + Add target-boehm-gc to noconfigdirs where ${libgcj} + is specified. + Assert that boehm-gc is supported when requested for Objective-C. + Only build boehm-gc if needed either for Java or Objective-C. + * configure: Regenerate. + +2006-06-05 Paolo Bonzini + + PR 27674 + * Makefile.tpl (configure-[+prefix+][+module+], + all-[+prefix+][+module+]): Depend on stage_current if bootstrapping. + Remove rule to unstage bootstrapped modules. + (stage_current): New. + * Makefile.in: Regenerate. + +2006-06-03 Laurynas Biveinis + + * MAINTAINERS (Write After Approval): Update my e-mail address. + +2006-06-01 Mark Shinwell + + * include/libiberty.h: Declare pex_run_in_environment. + +2006-05-31 Asher Langton + + * MAINTAINERS (Write After Approval): Add myself. + 2006-05-25 Paolo Bonzini * Makefile.def (bfd, opcodes): Fix lib_path. @@ -2027,7 +2215,7 @@ of libf2c. * configure, Makefile.in: Regenerate. -2004-05-13 Tobias Schlüter +2004-05-13 Tobias Schlüter * MAINTAINERS (Write After Approval): Add myself. diff --git a/MAINTAINERS b/MAINTAINERS index 983821f0a06..893e5dadb55 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -40,7 +40,7 @@ arm port Nick Clifton nickc@redhat.com arm port Richard Earnshaw richard.earnshaw@arm.com arm port Paul Brook paul@codesourcery.com avr port Denis Chertykov denisc@overta.ru -avr port Marek Michalkiewicz marekm@amelek.gda.pl +avr port Anatoly Sokolov aesok@post.ru bfin port Bernd Schmidt bernd.schmidt@analog.com c4x port Michael Hayes m.hayes@elec.canterbury.ac.nz cris port Hans-Peter Nilsson hp@axis.com @@ -96,6 +96,8 @@ darwin port Mike Stump mrs@apple.com darwin port Stan Shebs shebs@apple.com DJGPP DJ Delorie dj@delorie.com freebsd Loren J. Rittle ljrittle@acm.org +hpux Dave Anglin dave.anglin@nrc.ca +hpux Steve Ellcey sje@cup.hp.com netbsd Jason Thorpe thorpej@netbsd.org sco5, unixware, sco udk Kean Johnston jkj@sco.com sh-linux-gnu Kaz Kojima kkojima@gcc.gnu.org @@ -151,6 +153,7 @@ libffi testsuite Andreas Tobler andreast@gcc.gnu.org libobjc Nicola Pero n.pero@mi.flashnet.it libobjc Andrew Pinski pinskia@physics.uc.edu loop discovery Michael Hayes m.hayes@elec.canterbury.ac.nz +soft-fp Joseph Myers jsm@polyomino.org.uk scheduler (+ haifa) Jim Wilson wilson@specifixinc.com scheduler (+ haifa) Michael Meissner gnu@the-meissners.org scheduler (+ haifa) Jeff Law law@redhat.com @@ -205,6 +208,9 @@ profile feedback Jan Hubicka jh@suse.cz type-safe vectors Nathan Sidwell nathan@codesourcery.com alias analysis Daniel Berlin dberlin@dberlin.org alias analysis Diego Novillo dnovillo@redhat.com +reload Ulrich Weigand uweigand@de.ibm.com +dfp.c, related Ben Elliston bje@au.ibm.com +RTL optimizers Eric Botcazou ebotcazou@libertysurf.fr Note individuals who maintain parts of the compiler need approval to check in changes outside of the parts of the compiler they maintain. @@ -220,7 +226,7 @@ Scott Bambrough scottb@netwinder.org Wolfgang Bangerth bangerth@dealii.org Jan Beulich jbeulich@novell.com David Billinghurst David.Billinghurst@riotinto.com -Laurynas Biveinis laurynas.biveinis@mif.vu.lt +Laurynas Biveinis laurynas.biveinis@gmail.com Uros Bizjak uros@kss-loka.si Eric Blake ericb@gcc.gnu.org Jim Blandy jimb@codesourcery.com @@ -243,10 +249,10 @@ William Cohen wcohen@redhat.com Josh Conner jconner@apple.com R. Kelley Cook kcook@gcc.gnu.org Christian Cornelssen ccorn@cs.tu-berlin.de +Roberto Costa roberto.costa@st.com Ian Dall ian@beware.dropbear.id.au David Daney ddaney@avtrex.com Zdenek Dvorak dvorakz@suse.cz -Steve Ellcey sje@cup.hp.com Mohan Embar gnustuff@thisiscool.com Marc Espie espie@cvs.openbsd.org Rafael Ávila de Espíndola rafael.espindola@gmail.com @@ -267,10 +273,12 @@ Stuart Hastings stuart@apple.com Matthew Hiller hiller@redhat.com Manfred Hollstein mh@suse.com Falk Hueffner falk@debian.org +Andrew John Hughes gnu_andrew@member.fsf.org Bernardo Innocenti bernie@develer.com Daniel Jacobowitz dan@debian.org Andreas Jaeger aj@suse.de Fariborz Jahanian fjahanian@apple.com +Phillip Jordan phillip.m.jordan@gmail.com Klaus Kaempf kkaempf@progis.de Victor Kaplansky victork@il.ibm.com Brendan Kehoe brendan@zen.org @@ -284,11 +292,12 @@ Maxim Kuvyrkov mkuvyrkov@ispras.ru Scott Robert Ladd scott.ladd@coyotegulch.com Razya Ladelsky razya@gcc.gnu.org Aaron W. LaFramboise aaronavay62@aaronwl.com +Asher Langton langton2@llnl.gov Chris Lattner sabre@nondot.org Terry Laurenzo tlaurenzo@gmail.com Marc Lehmann pcg@goof.com Alan Lehotsky apl@alum.mit.edu -James Lemke jim@wasabisystems.com +James Lemke jim@lemke.org Kriang Lerdsuwanakij lerdsuwa@users.sourceforge.net Warren Levy warrenl@cruzio.com Don Lindsay dlindsay@redhat.com diff --git a/Makefile.def b/Makefile.def index 99e8ebe2b13..e365d8a77ea 100644 --- a/Makefile.def +++ b/Makefile.def @@ -294,7 +294,9 @@ dependencies = { module=all-fixincludes; on=all-libiberty; }; dependencies = { module=all-gnattools; on=all-target-libada; }; // Host modules specific to gdb. +dependencies = { module=configure-gdb; on=configure-intl; }; dependencies = { module=configure-gdb; on=configure-sim; }; +dependencies = { module=all-gdb; on=all-intl; }; dependencies = { module=all-gdb; on=all-libiberty; }; dependencies = { module=all-gdb; on=all-opcodes; }; dependencies = { module=all-gdb; on=all-bfd; }; @@ -311,9 +313,11 @@ dependencies = { module=all-libgui; on=all-itcl; }; // Host modules specific to binutils. dependencies = { module=configure-bfd; on=configure-libiberty; hard=true; }; +dependencies = { module=configure-bfd; on=configure-intl; }; dependencies = { module=all-bfd; on=all-libiberty; }; dependencies = { module=all-bfd; on=all-intl; }; +dependencies = { module=configure-binutils; on=configure-intl; }; dependencies = { module=all-binutils; on=all-libiberty; }; dependencies = { module=all-binutils; on=all-opcodes; }; dependencies = { module=all-binutils; on=all-bfd; }; @@ -330,14 +334,17 @@ dependencies = { module=install-binutils; on=install-opcodes; }; // libopcodes depends on libbfd dependencies = { module=install-opcodes; on=install-bfd; }; +dependencies = { module=configure-gas; on=configure-intl; }; dependencies = { module=all-gas; on=all-libiberty; }; dependencies = { module=all-gas; on=all-opcodes; }; dependencies = { module=all-gas; on=all-bfd; }; dependencies = { module=all-gas; on=all-intl; }; +dependencies = { module=configure-gprof; on=configure-intl; }; dependencies = { module=all-gprof; on=all-libiberty; }; dependencies = { module=all-gprof; on=all-bfd; }; dependencies = { module=all-gprof; on=all-opcodes; }; dependencies = { module=all-gprof; on=all-intl; }; +dependencies = { module=configure-ld; on=configure-intl; }; dependencies = { module=all-ld; on=all-libiberty; }; dependencies = { module=all-ld; on=all-bfd; }; dependencies = { module=all-ld; on=all-opcodes; }; @@ -346,8 +353,10 @@ dependencies = { module=all-ld; on=all-build-byacc; }; dependencies = { module=all-ld; on=all-build-flex; }; dependencies = { module=all-ld; on=all-intl; }; +dependencies = { module=configure-opcodes; on=configure-intl; }; dependencies = { module=all-opcodes; on=all-bfd; }; dependencies = { module=all-opcodes; on=all-libiberty; }; +dependencies = { module=all-opcodes; on=all-intl; }; // Other host modules in the 'src' repository. dependencies = { module=all-dejagnu; on=all-tcl; }; @@ -377,6 +386,8 @@ dependencies = { module=all-sid; on=all-tk; }; dependencies = { module=install-sid; on=install-tcl; }; dependencies = { module=install-sid; on=install-tk; }; +dependencies = { module=configure-sim; on=configure-intl; }; +dependencies = { module=all-sim; on=all-intl; }; dependencies = { module=all-sim; on=all-libiberty; }; dependencies = { module=all-sim; on=all-bfd; }; dependencies = { module=all-sim; on=all-opcodes; }; @@ -450,7 +461,9 @@ dependencies = { module=all-target-libjava; on=all-target-zlib; }; dependencies = { module=all-target-libjava; on=all-target-boehm-gc; }; dependencies = { module=all-target-libjava; on=all-target-qthreads; }; dependencies = { module=all-target-libjava; on=all-target-libffi; }; +dependencies = { module=configure-target-libobjc; on=configure-target-boehm-gc; }; dependencies = { module=all-target-libobjc; on=all-target-libiberty; }; +dependencies = { module=all-target-libobjc; on=all-target-boehm-gc; }; dependencies = { module=all-target-libstdc++-v3; on=all-target-libiberty; }; // Target modules in the 'src' repository. diff --git a/Makefile.in b/Makefile.in index c1a4c2d88a5..85c4013b923 100644 --- a/Makefile.in +++ b/Makefile.in @@ -177,7 +177,9 @@ POSTSTAGE1_HOST_EXPORTS = \ CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \ $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \ -B$$r/$(HOST_SUBDIR)/prev-gcc/ \ - -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; + -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \ + CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ + LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS; # Target libraries are put under this directory: TARGET_SUBDIR = @target_subdir@ @@ -2346,6 +2348,9 @@ TAGS: do-TAGS .PHONY: configure-build-libiberty maybe-configure-build-libiberty maybe-configure-build-libiberty: +@if gcc-bootstrap +configure-build-libiberty: stage_current +@endif gcc-bootstrap @if build-libiberty maybe-configure-build-libiberty: configure-build-libiberty configure-build-libiberty: @@ -2376,6 +2381,9 @@ configure-build-libiberty: .PHONY: all-build-libiberty maybe-all-build-libiberty maybe-all-build-libiberty: +@if gcc-bootstrap +all-build-libiberty: stage_current +@endif gcc-bootstrap @if build-libiberty TARGET-build-libiberty=all maybe-all-build-libiberty: all-build-libiberty @@ -2394,6 +2402,9 @@ all-build-libiberty: configure-build-libiberty .PHONY: configure-build-bison maybe-configure-build-bison maybe-configure-build-bison: +@if gcc-bootstrap +configure-build-bison: stage_current +@endif gcc-bootstrap @if build-bison maybe-configure-build-bison: configure-build-bison configure-build-bison: @@ -2424,6 +2435,9 @@ configure-build-bison: .PHONY: all-build-bison maybe-all-build-bison maybe-all-build-bison: +@if gcc-bootstrap +all-build-bison: stage_current +@endif gcc-bootstrap @if build-bison TARGET-build-bison=all maybe-all-build-bison: all-build-bison @@ -2442,6 +2456,9 @@ all-build-bison: configure-build-bison .PHONY: configure-build-byacc maybe-configure-build-byacc maybe-configure-build-byacc: +@if gcc-bootstrap +configure-build-byacc: stage_current +@endif gcc-bootstrap @if build-byacc maybe-configure-build-byacc: configure-build-byacc configure-build-byacc: @@ -2472,6 +2489,9 @@ configure-build-byacc: .PHONY: all-build-byacc maybe-all-build-byacc maybe-all-build-byacc: +@if gcc-bootstrap +all-build-byacc: stage_current +@endif gcc-bootstrap @if build-byacc TARGET-build-byacc=all maybe-all-build-byacc: all-build-byacc @@ -2490,6 +2510,9 @@ all-build-byacc: configure-build-byacc .PHONY: configure-build-flex maybe-configure-build-flex maybe-configure-build-flex: +@if gcc-bootstrap +configure-build-flex: stage_current +@endif gcc-bootstrap @if build-flex maybe-configure-build-flex: configure-build-flex configure-build-flex: @@ -2520,6 +2543,9 @@ configure-build-flex: .PHONY: all-build-flex maybe-all-build-flex maybe-all-build-flex: +@if gcc-bootstrap +all-build-flex: stage_current +@endif gcc-bootstrap @if build-flex TARGET-build-flex=all maybe-all-build-flex: all-build-flex @@ -2538,6 +2564,9 @@ all-build-flex: configure-build-flex .PHONY: configure-build-m4 maybe-configure-build-m4 maybe-configure-build-m4: +@if gcc-bootstrap +configure-build-m4: stage_current +@endif gcc-bootstrap @if build-m4 maybe-configure-build-m4: configure-build-m4 configure-build-m4: @@ -2568,6 +2597,9 @@ configure-build-m4: .PHONY: all-build-m4 maybe-all-build-m4 maybe-all-build-m4: +@if gcc-bootstrap +all-build-m4: stage_current +@endif gcc-bootstrap @if build-m4 TARGET-build-m4=all maybe-all-build-m4: all-build-m4 @@ -2586,6 +2618,9 @@ all-build-m4: configure-build-m4 .PHONY: configure-build-texinfo maybe-configure-build-texinfo maybe-configure-build-texinfo: +@if gcc-bootstrap +configure-build-texinfo: stage_current +@endif gcc-bootstrap @if build-texinfo maybe-configure-build-texinfo: configure-build-texinfo configure-build-texinfo: @@ -2616,6 +2651,9 @@ configure-build-texinfo: .PHONY: all-build-texinfo maybe-all-build-texinfo maybe-all-build-texinfo: +@if gcc-bootstrap +all-build-texinfo: stage_current +@endif gcc-bootstrap @if build-texinfo TARGET-build-texinfo=all maybe-all-build-texinfo: all-build-texinfo @@ -2634,6 +2672,9 @@ all-build-texinfo: configure-build-texinfo .PHONY: configure-build-fixincludes maybe-configure-build-fixincludes maybe-configure-build-fixincludes: +@if gcc-bootstrap +configure-build-fixincludes: stage_current +@endif gcc-bootstrap @if build-fixincludes maybe-configure-build-fixincludes: configure-build-fixincludes configure-build-fixincludes: @@ -2664,6 +2705,9 @@ configure-build-fixincludes: .PHONY: all-build-fixincludes maybe-all-build-fixincludes maybe-all-build-fixincludes: +@if gcc-bootstrap +all-build-fixincludes: stage_current +@endif gcc-bootstrap @if build-fixincludes TARGET-build-fixincludes=all maybe-all-build-fixincludes: all-build-fixincludes @@ -2687,6 +2731,9 @@ all-build-fixincludes: configure-build-fixincludes .PHONY: configure-ash maybe-configure-ash maybe-configure-ash: +@if gcc-bootstrap +configure-ash: stage_current +@endif gcc-bootstrap @if ash maybe-configure-ash: configure-ash configure-ash: @@ -2716,6 +2763,9 @@ configure-ash: .PHONY: all-ash maybe-all-ash maybe-all-ash: +@if gcc-bootstrap +all-ash: stage_current +@endif gcc-bootstrap @if ash TARGET-ash=all maybe-all-ash: all-ash @@ -3051,6 +3101,9 @@ maintainer-clean-ash: .PHONY: configure-autoconf maybe-configure-autoconf maybe-configure-autoconf: +@if gcc-bootstrap +configure-autoconf: stage_current +@endif gcc-bootstrap @if autoconf maybe-configure-autoconf: configure-autoconf configure-autoconf: @@ -3080,6 +3133,9 @@ configure-autoconf: .PHONY: all-autoconf maybe-all-autoconf maybe-all-autoconf: +@if gcc-bootstrap +all-autoconf: stage_current +@endif gcc-bootstrap @if autoconf TARGET-autoconf=all maybe-all-autoconf: all-autoconf @@ -3415,6 +3471,9 @@ maintainer-clean-autoconf: .PHONY: configure-automake maybe-configure-automake maybe-configure-automake: +@if gcc-bootstrap +configure-automake: stage_current +@endif gcc-bootstrap @if automake maybe-configure-automake: configure-automake configure-automake: @@ -3444,6 +3503,9 @@ configure-automake: .PHONY: all-automake maybe-all-automake maybe-all-automake: +@if gcc-bootstrap +all-automake: stage_current +@endif gcc-bootstrap @if automake TARGET-automake=all maybe-all-automake: all-automake @@ -3779,6 +3841,9 @@ maintainer-clean-automake: .PHONY: configure-bash maybe-configure-bash maybe-configure-bash: +@if gcc-bootstrap +configure-bash: stage_current +@endif gcc-bootstrap @if bash maybe-configure-bash: configure-bash configure-bash: @@ -3808,6 +3873,9 @@ configure-bash: .PHONY: all-bash maybe-all-bash maybe-all-bash: +@if gcc-bootstrap +all-bash: stage_current +@endif gcc-bootstrap @if bash TARGET-bash=all maybe-all-bash: all-bash @@ -4143,14 +4211,12 @@ maintainer-clean-bash: .PHONY: configure-bfd maybe-configure-bfd maybe-configure-bfd: +@if gcc-bootstrap +configure-bfd: stage_current +@endif gcc-bootstrap @if bfd maybe-configure-bfd: configure-bfd configure-bfd: -@endif bfd -@if bfd-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif bfd-bootstrap -@if bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \ @@ -4195,6 +4261,7 @@ configure-stage1-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif bfd-bootstrap @@ -4222,6 +4289,7 @@ configure-stage2-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif bfd-bootstrap @@ -4249,6 +4317,7 @@ configure-stage3-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif bfd-bootstrap @@ -4276,6 +4345,7 @@ configure-stage4-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif bfd-bootstrap @@ -4303,6 +4373,7 @@ configure-stageprofile-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif bfd-bootstrap @@ -4330,6 +4401,7 @@ configure-stagefeedback-bfd: libsrcdir="$$s/bfd"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif bfd-bootstrap @@ -4339,15 +4411,13 @@ configure-stagefeedback-bfd: .PHONY: all-bfd maybe-all-bfd maybe-all-bfd: +@if gcc-bootstrap +all-bfd: stage_current +@endif gcc-bootstrap @if bfd TARGET-bfd=all maybe-all-bfd: all-bfd all-bfd: configure-bfd -@endif bfd -@if bfd-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif bfd-bootstrap -@if bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -4853,14 +4923,12 @@ maintainer-clean-bfd: .PHONY: configure-opcodes maybe-configure-opcodes maybe-configure-opcodes: +@if gcc-bootstrap +configure-opcodes: stage_current +@endif gcc-bootstrap @if opcodes maybe-configure-opcodes: configure-opcodes configure-opcodes: -@endif opcodes -@if opcodes-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif opcodes-bootstrap -@if opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \ @@ -4905,6 +4973,7 @@ configure-stage1-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif opcodes-bootstrap @@ -4932,6 +5001,7 @@ configure-stage2-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif opcodes-bootstrap @@ -4959,6 +5029,7 @@ configure-stage3-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif opcodes-bootstrap @@ -4986,6 +5057,7 @@ configure-stage4-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif opcodes-bootstrap @@ -5013,6 +5085,7 @@ configure-stageprofile-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif opcodes-bootstrap @@ -5040,6 +5113,7 @@ configure-stagefeedback-opcodes: libsrcdir="$$s/opcodes"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif opcodes-bootstrap @@ -5049,15 +5123,13 @@ configure-stagefeedback-opcodes: .PHONY: all-opcodes maybe-all-opcodes maybe-all-opcodes: +@if gcc-bootstrap +all-opcodes: stage_current +@endif gcc-bootstrap @if opcodes TARGET-opcodes=all maybe-all-opcodes: all-opcodes all-opcodes: configure-opcodes -@endif opcodes -@if opcodes-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif opcodes-bootstrap -@if opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -5563,14 +5635,12 @@ maintainer-clean-opcodes: .PHONY: configure-binutils maybe-configure-binutils maybe-configure-binutils: +@if gcc-bootstrap +configure-binutils: stage_current +@endif gcc-bootstrap @if binutils maybe-configure-binutils: configure-binutils configure-binutils: -@endif binutils -@if binutils-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif binutils-bootstrap -@if binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \ @@ -5615,6 +5685,7 @@ configure-stage1-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif binutils-bootstrap @@ -5642,6 +5713,7 @@ configure-stage2-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif binutils-bootstrap @@ -5669,6 +5741,7 @@ configure-stage3-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif binutils-bootstrap @@ -5696,6 +5769,7 @@ configure-stage4-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif binutils-bootstrap @@ -5723,6 +5797,7 @@ configure-stageprofile-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif binutils-bootstrap @@ -5750,6 +5825,7 @@ configure-stagefeedback-binutils: libsrcdir="$$s/binutils"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif binutils-bootstrap @@ -5759,15 +5835,13 @@ configure-stagefeedback-binutils: .PHONY: all-binutils maybe-all-binutils maybe-all-binutils: +@if gcc-bootstrap +all-binutils: stage_current +@endif gcc-bootstrap @if binutils TARGET-binutils=all maybe-all-binutils: all-binutils all-binutils: configure-binutils -@endif binutils -@if binutils-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif binutils-bootstrap -@if binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -6273,6 +6347,9 @@ maintainer-clean-binutils: .PHONY: configure-bison maybe-configure-bison maybe-configure-bison: +@if gcc-bootstrap +configure-bison: stage_current +@endif gcc-bootstrap @if bison maybe-configure-bison: configure-bison configure-bison: @@ -6302,6 +6379,9 @@ configure-bison: .PHONY: all-bison maybe-all-bison maybe-all-bison: +@if gcc-bootstrap +all-bison: stage_current +@endif gcc-bootstrap @if bison TARGET-bison=all maybe-all-bison: all-bison @@ -6640,6 +6720,9 @@ maintainer-clean-bison: .PHONY: configure-byacc maybe-configure-byacc maybe-configure-byacc: +@if gcc-bootstrap +configure-byacc: stage_current +@endif gcc-bootstrap @if byacc maybe-configure-byacc: configure-byacc configure-byacc: @@ -6669,6 +6752,9 @@ configure-byacc: .PHONY: all-byacc maybe-all-byacc maybe-all-byacc: +@if gcc-bootstrap +all-byacc: stage_current +@endif gcc-bootstrap @if byacc TARGET-byacc=all maybe-all-byacc: all-byacc @@ -7007,6 +7093,9 @@ maintainer-clean-byacc: .PHONY: configure-bzip2 maybe-configure-bzip2 maybe-configure-bzip2: +@if gcc-bootstrap +configure-bzip2: stage_current +@endif gcc-bootstrap @if bzip2 maybe-configure-bzip2: configure-bzip2 configure-bzip2: @@ -7036,6 +7125,9 @@ configure-bzip2: .PHONY: all-bzip2 maybe-all-bzip2 maybe-all-bzip2: +@if gcc-bootstrap +all-bzip2: stage_current +@endif gcc-bootstrap @if bzip2 TARGET-bzip2=all maybe-all-bzip2: all-bzip2 @@ -7371,6 +7463,9 @@ maintainer-clean-bzip2: .PHONY: configure-dejagnu maybe-configure-dejagnu maybe-configure-dejagnu: +@if gcc-bootstrap +configure-dejagnu: stage_current +@endif gcc-bootstrap @if dejagnu maybe-configure-dejagnu: configure-dejagnu configure-dejagnu: @@ -7400,6 +7495,9 @@ configure-dejagnu: .PHONY: all-dejagnu maybe-all-dejagnu maybe-all-dejagnu: +@if gcc-bootstrap +all-dejagnu: stage_current +@endif gcc-bootstrap @if dejagnu TARGET-dejagnu=all maybe-all-dejagnu: all-dejagnu @@ -7735,6 +7833,9 @@ maintainer-clean-dejagnu: .PHONY: configure-diff maybe-configure-diff maybe-configure-diff: +@if gcc-bootstrap +configure-diff: stage_current +@endif gcc-bootstrap @if diff maybe-configure-diff: configure-diff configure-diff: @@ -7764,6 +7865,9 @@ configure-diff: .PHONY: all-diff maybe-all-diff maybe-all-diff: +@if gcc-bootstrap +all-diff: stage_current +@endif gcc-bootstrap @if diff TARGET-diff=all maybe-all-diff: all-diff @@ -8099,6 +8203,9 @@ maintainer-clean-diff: .PHONY: configure-dosutils maybe-configure-dosutils maybe-configure-dosutils: +@if gcc-bootstrap +configure-dosutils: stage_current +@endif gcc-bootstrap @if dosutils maybe-configure-dosutils: configure-dosutils configure-dosutils: @@ -8128,6 +8235,9 @@ configure-dosutils: .PHONY: all-dosutils maybe-all-dosutils maybe-all-dosutils: +@if gcc-bootstrap +all-dosutils: stage_current +@endif gcc-bootstrap @if dosutils TARGET-dosutils=all maybe-all-dosutils: all-dosutils @@ -8457,6 +8567,9 @@ maintainer-clean-dosutils: .PHONY: configure-etc maybe-configure-etc maybe-configure-etc: +@if gcc-bootstrap +configure-etc: stage_current +@endif gcc-bootstrap @if etc maybe-configure-etc: configure-etc configure-etc: @@ -8486,6 +8599,9 @@ configure-etc: .PHONY: all-etc maybe-all-etc maybe-all-etc: +@if gcc-bootstrap +all-etc: stage_current +@endif gcc-bootstrap @if etc TARGET-etc=all maybe-all-etc: all-etc @@ -8821,6 +8937,9 @@ maintainer-clean-etc: .PHONY: configure-fastjar maybe-configure-fastjar maybe-configure-fastjar: +@if gcc-bootstrap +configure-fastjar: stage_current +@endif gcc-bootstrap @if fastjar maybe-configure-fastjar: configure-fastjar configure-fastjar: @@ -8850,6 +8969,9 @@ configure-fastjar: .PHONY: all-fastjar maybe-all-fastjar maybe-all-fastjar: +@if gcc-bootstrap +all-fastjar: stage_current +@endif gcc-bootstrap @if fastjar TARGET-fastjar=all maybe-all-fastjar: all-fastjar @@ -9188,6 +9310,9 @@ maintainer-clean-fastjar: .PHONY: configure-fileutils maybe-configure-fileutils maybe-configure-fileutils: +@if gcc-bootstrap +configure-fileutils: stage_current +@endif gcc-bootstrap @if fileutils maybe-configure-fileutils: configure-fileutils configure-fileutils: @@ -9217,6 +9342,9 @@ configure-fileutils: .PHONY: all-fileutils maybe-all-fileutils maybe-all-fileutils: +@if gcc-bootstrap +all-fileutils: stage_current +@endif gcc-bootstrap @if fileutils TARGET-fileutils=all maybe-all-fileutils: all-fileutils @@ -9552,6 +9680,9 @@ maintainer-clean-fileutils: .PHONY: configure-findutils maybe-configure-findutils maybe-configure-findutils: +@if gcc-bootstrap +configure-findutils: stage_current +@endif gcc-bootstrap @if findutils maybe-configure-findutils: configure-findutils configure-findutils: @@ -9581,6 +9712,9 @@ configure-findutils: .PHONY: all-findutils maybe-all-findutils maybe-all-findutils: +@if gcc-bootstrap +all-findutils: stage_current +@endif gcc-bootstrap @if findutils TARGET-findutils=all maybe-all-findutils: all-findutils @@ -9916,6 +10050,9 @@ maintainer-clean-findutils: .PHONY: configure-find maybe-configure-find maybe-configure-find: +@if gcc-bootstrap +configure-find: stage_current +@endif gcc-bootstrap @if find maybe-configure-find: configure-find configure-find: @@ -9945,6 +10082,9 @@ configure-find: .PHONY: all-find maybe-all-find maybe-all-find: +@if gcc-bootstrap +all-find: stage_current +@endif gcc-bootstrap @if find TARGET-find=all maybe-all-find: all-find @@ -10280,6 +10420,9 @@ maintainer-clean-find: .PHONY: configure-fixincludes maybe-configure-fixincludes maybe-configure-fixincludes: +@if gcc-bootstrap +configure-fixincludes: stage_current +@endif gcc-bootstrap @if fixincludes maybe-configure-fixincludes: configure-fixincludes configure-fixincludes: @@ -10309,6 +10452,9 @@ configure-fixincludes: .PHONY: all-fixincludes maybe-all-fixincludes maybe-all-fixincludes: +@if gcc-bootstrap +all-fixincludes: stage_current +@endif gcc-bootstrap @if fixincludes TARGET-fixincludes=all maybe-all-fixincludes: all-fixincludes @@ -10563,6 +10709,9 @@ maintainer-clean-fixincludes: .PHONY: configure-flex maybe-configure-flex maybe-configure-flex: +@if gcc-bootstrap +configure-flex: stage_current +@endif gcc-bootstrap @if flex maybe-configure-flex: configure-flex configure-flex: @@ -10592,6 +10741,9 @@ configure-flex: .PHONY: all-flex maybe-all-flex maybe-all-flex: +@if gcc-bootstrap +all-flex: stage_current +@endif gcc-bootstrap @if flex TARGET-flex=all maybe-all-flex: all-flex @@ -10930,14 +11082,12 @@ maintainer-clean-flex: .PHONY: configure-gas maybe-configure-gas maybe-configure-gas: +@if gcc-bootstrap +configure-gas: stage_current +@endif gcc-bootstrap @if gas maybe-configure-gas: configure-gas configure-gas: -@endif gas -@if gas-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif gas-bootstrap -@if gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \ @@ -10982,6 +11132,7 @@ configure-stage1-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif gas-bootstrap @@ -11009,6 +11160,7 @@ configure-stage2-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gas-bootstrap @@ -11036,6 +11188,7 @@ configure-stage3-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gas-bootstrap @@ -11063,6 +11216,7 @@ configure-stage4-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gas-bootstrap @@ -11090,6 +11244,7 @@ configure-stageprofile-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gas-bootstrap @@ -11117,6 +11272,7 @@ configure-stagefeedback-gas: libsrcdir="$$s/gas"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gas-bootstrap @@ -11126,15 +11282,13 @@ configure-stagefeedback-gas: .PHONY: all-gas maybe-all-gas maybe-all-gas: +@if gcc-bootstrap +all-gas: stage_current +@endif gcc-bootstrap @if gas TARGET-gas=all maybe-all-gas: all-gas all-gas: configure-gas -@endif gas -@if gas-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif gas-bootstrap -@if gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -11640,14 +11794,12 @@ maintainer-clean-gas: .PHONY: configure-gcc maybe-configure-gcc maybe-configure-gcc: -@if gcc -maybe-configure-gcc: configure-gcc -configure-gcc: -@endif gcc @if gcc-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi +configure-gcc: stage_current @endif gcc-bootstrap @if gcc +maybe-configure-gcc: configure-gcc +configure-gcc: @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ @@ -11692,6 +11844,7 @@ configure-stage1-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif gcc-bootstrap @@ -11719,6 +11872,7 @@ configure-stage2-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gcc-bootstrap @@ -11746,6 +11900,7 @@ configure-stage3-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gcc-bootstrap @@ -11773,6 +11928,7 @@ configure-stage4-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gcc-bootstrap @@ -11800,6 +11956,7 @@ configure-stageprofile-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gcc-bootstrap @@ -11827,6 +11984,7 @@ configure-stagefeedback-gcc: libsrcdir="$$s/gcc"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif gcc-bootstrap @@ -11836,15 +11994,13 @@ configure-stagefeedback-gcc: .PHONY: all-gcc maybe-all-gcc maybe-all-gcc: +@if gcc-bootstrap +all-gcc: stage_current +@endif gcc-bootstrap @if gcc TARGET-gcc=`if [ -f stage_last ]; then echo quickstrap ; else echo all; fi` maybe-all-gcc: all-gcc all-gcc: configure-gcc -@endif gcc -@if gcc-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif gcc-bootstrap -@if gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -12350,6 +12506,9 @@ maintainer-clean-gcc: .PHONY: configure-gawk maybe-configure-gawk maybe-configure-gawk: +@if gcc-bootstrap +configure-gawk: stage_current +@endif gcc-bootstrap @if gawk maybe-configure-gawk: configure-gawk configure-gawk: @@ -12379,6 +12538,9 @@ configure-gawk: .PHONY: all-gawk maybe-all-gawk maybe-all-gawk: +@if gcc-bootstrap +all-gawk: stage_current +@endif gcc-bootstrap @if gawk TARGET-gawk=all maybe-all-gawk: all-gawk @@ -12714,6 +12876,9 @@ maintainer-clean-gawk: .PHONY: configure-gettext maybe-configure-gettext maybe-configure-gettext: +@if gcc-bootstrap +configure-gettext: stage_current +@endif gcc-bootstrap @if gettext maybe-configure-gettext: configure-gettext configure-gettext: @@ -12743,6 +12908,9 @@ configure-gettext: .PHONY: all-gettext maybe-all-gettext maybe-all-gettext: +@if gcc-bootstrap +all-gettext: stage_current +@endif gcc-bootstrap @if gettext TARGET-gettext=all maybe-all-gettext: all-gettext @@ -13078,6 +13246,9 @@ maintainer-clean-gettext: .PHONY: configure-gnuserv maybe-configure-gnuserv maybe-configure-gnuserv: +@if gcc-bootstrap +configure-gnuserv: stage_current +@endif gcc-bootstrap @if gnuserv maybe-configure-gnuserv: configure-gnuserv configure-gnuserv: @@ -13107,6 +13278,9 @@ configure-gnuserv: .PHONY: all-gnuserv maybe-all-gnuserv maybe-all-gnuserv: +@if gcc-bootstrap +all-gnuserv: stage_current +@endif gcc-bootstrap @if gnuserv TARGET-gnuserv=all maybe-all-gnuserv: all-gnuserv @@ -13442,6 +13616,9 @@ maintainer-clean-gnuserv: .PHONY: configure-gprof maybe-configure-gprof maybe-configure-gprof: +@if gcc-bootstrap +configure-gprof: stage_current +@endif gcc-bootstrap @if gprof maybe-configure-gprof: configure-gprof configure-gprof: @@ -13471,6 +13648,9 @@ configure-gprof: .PHONY: all-gprof maybe-all-gprof maybe-all-gprof: +@if gcc-bootstrap +all-gprof: stage_current +@endif gcc-bootstrap @if gprof TARGET-gprof=all maybe-all-gprof: all-gprof @@ -13806,6 +13986,9 @@ maintainer-clean-gprof: .PHONY: configure-gzip maybe-configure-gzip maybe-configure-gzip: +@if gcc-bootstrap +configure-gzip: stage_current +@endif gcc-bootstrap @if gzip maybe-configure-gzip: configure-gzip configure-gzip: @@ -13835,6 +14018,9 @@ configure-gzip: .PHONY: all-gzip maybe-all-gzip maybe-all-gzip: +@if gcc-bootstrap +all-gzip: stage_current +@endif gcc-bootstrap @if gzip TARGET-gzip=all maybe-all-gzip: all-gzip @@ -14170,6 +14356,9 @@ maintainer-clean-gzip: .PHONY: configure-hello maybe-configure-hello maybe-configure-hello: +@if gcc-bootstrap +configure-hello: stage_current +@endif gcc-bootstrap @if hello maybe-configure-hello: configure-hello configure-hello: @@ -14199,6 +14388,9 @@ configure-hello: .PHONY: all-hello maybe-all-hello maybe-all-hello: +@if gcc-bootstrap +all-hello: stage_current +@endif gcc-bootstrap @if hello TARGET-hello=all maybe-all-hello: all-hello @@ -14534,6 +14726,9 @@ maintainer-clean-hello: .PHONY: configure-indent maybe-configure-indent maybe-configure-indent: +@if gcc-bootstrap +configure-indent: stage_current +@endif gcc-bootstrap @if indent maybe-configure-indent: configure-indent configure-indent: @@ -14563,6 +14758,9 @@ configure-indent: .PHONY: all-indent maybe-all-indent maybe-all-indent: +@if gcc-bootstrap +all-indent: stage_current +@endif gcc-bootstrap @if indent TARGET-indent=all maybe-all-indent: all-indent @@ -14898,14 +15096,12 @@ maintainer-clean-indent: .PHONY: configure-intl maybe-configure-intl maybe-configure-intl: +@if gcc-bootstrap +configure-intl: stage_current +@endif gcc-bootstrap @if intl maybe-configure-intl: configure-intl configure-intl: -@endif intl -@if intl-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif intl-bootstrap -@if intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \ @@ -14950,6 +15146,7 @@ configure-stage1-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif intl-bootstrap @@ -14977,6 +15174,7 @@ configure-stage2-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif intl-bootstrap @@ -15004,6 +15202,7 @@ configure-stage3-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif intl-bootstrap @@ -15031,6 +15230,7 @@ configure-stage4-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif intl-bootstrap @@ -15058,6 +15258,7 @@ configure-stageprofile-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif intl-bootstrap @@ -15085,6 +15286,7 @@ configure-stagefeedback-intl: libsrcdir="$$s/intl"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif intl-bootstrap @@ -15094,15 +15296,13 @@ configure-stagefeedback-intl: .PHONY: all-intl maybe-all-intl maybe-all-intl: +@if gcc-bootstrap +all-intl: stage_current +@endif gcc-bootstrap @if intl TARGET-intl=all maybe-all-intl: all-intl all-intl: configure-intl -@endif intl -@if intl-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif intl-bootstrap -@if intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -15608,6 +15808,9 @@ maintainer-clean-intl: .PHONY: configure-tcl maybe-configure-tcl maybe-configure-tcl: +@if gcc-bootstrap +configure-tcl: stage_current +@endif gcc-bootstrap @if tcl maybe-configure-tcl: configure-tcl configure-tcl: @@ -15637,6 +15840,9 @@ configure-tcl: .PHONY: all-tcl maybe-all-tcl maybe-all-tcl: +@if gcc-bootstrap +all-tcl: stage_current +@endif gcc-bootstrap @if tcl TARGET-tcl=all maybe-all-tcl: all-tcl @@ -15957,6 +16163,9 @@ maintainer-clean-tcl: .PHONY: configure-itcl maybe-configure-itcl maybe-configure-itcl: +@if gcc-bootstrap +configure-itcl: stage_current +@endif gcc-bootstrap @if itcl maybe-configure-itcl: configure-itcl configure-itcl: @@ -15986,6 +16195,9 @@ configure-itcl: .PHONY: all-itcl maybe-all-itcl maybe-all-itcl: +@if gcc-bootstrap +all-itcl: stage_current +@endif gcc-bootstrap @if itcl TARGET-itcl=all maybe-all-itcl: all-itcl @@ -16321,14 +16533,12 @@ maintainer-clean-itcl: .PHONY: configure-ld maybe-configure-ld maybe-configure-ld: +@if gcc-bootstrap +configure-ld: stage_current +@endif gcc-bootstrap @if ld maybe-configure-ld: configure-ld configure-ld: -@endif ld -@if ld-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif ld-bootstrap -@if ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \ @@ -16373,6 +16583,7 @@ configure-stage1-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif ld-bootstrap @@ -16400,6 +16611,7 @@ configure-stage2-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif ld-bootstrap @@ -16427,6 +16639,7 @@ configure-stage3-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif ld-bootstrap @@ -16454,6 +16667,7 @@ configure-stage4-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif ld-bootstrap @@ -16481,6 +16695,7 @@ configure-stageprofile-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif ld-bootstrap @@ -16508,6 +16723,7 @@ configure-stagefeedback-ld: libsrcdir="$$s/ld"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif ld-bootstrap @@ -16517,15 +16733,13 @@ configure-stagefeedback-ld: .PHONY: all-ld maybe-all-ld maybe-all-ld: +@if gcc-bootstrap +all-ld: stage_current +@endif gcc-bootstrap @if ld TARGET-ld=all maybe-all-ld: all-ld all-ld: configure-ld -@endif ld -@if ld-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif ld-bootstrap -@if ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -17031,14 +17245,12 @@ maintainer-clean-ld: .PHONY: configure-libcpp maybe-configure-libcpp maybe-configure-libcpp: +@if gcc-bootstrap +configure-libcpp: stage_current +@endif gcc-bootstrap @if libcpp maybe-configure-libcpp: configure-libcpp configure-libcpp: -@endif libcpp -@if libcpp-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libcpp-bootstrap -@if libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ @@ -17083,6 +17295,7 @@ configure-stage1-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif libcpp-bootstrap @@ -17110,6 +17323,7 @@ configure-stage2-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libcpp-bootstrap @@ -17137,6 +17351,7 @@ configure-stage3-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libcpp-bootstrap @@ -17164,6 +17379,7 @@ configure-stage4-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libcpp-bootstrap @@ -17191,6 +17407,7 @@ configure-stageprofile-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libcpp-bootstrap @@ -17218,6 +17435,7 @@ configure-stagefeedback-libcpp: libsrcdir="$$s/libcpp"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libcpp-bootstrap @@ -17227,15 +17445,13 @@ configure-stagefeedback-libcpp: .PHONY: all-libcpp maybe-all-libcpp maybe-all-libcpp: +@if gcc-bootstrap +all-libcpp: stage_current +@endif gcc-bootstrap @if libcpp TARGET-libcpp=all maybe-all-libcpp: all-libcpp all-libcpp: configure-libcpp -@endif libcpp -@if libcpp-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libcpp-bootstrap -@if libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -17741,14 +17957,12 @@ maintainer-clean-libcpp: .PHONY: configure-libdecnumber maybe-configure-libdecnumber maybe-configure-libdecnumber: +@if gcc-bootstrap +configure-libdecnumber: stage_current +@endif gcc-bootstrap @if libdecnumber maybe-configure-libdecnumber: configure-libdecnumber configure-libdecnumber: -@endif libdecnumber -@if libdecnumber-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libdecnumber-bootstrap -@if libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ @@ -17793,6 +18007,7 @@ configure-stage1-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif libdecnumber-bootstrap @@ -17820,6 +18035,7 @@ configure-stage2-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libdecnumber-bootstrap @@ -17847,6 +18063,7 @@ configure-stage3-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libdecnumber-bootstrap @@ -17874,6 +18091,7 @@ configure-stage4-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libdecnumber-bootstrap @@ -17901,6 +18119,7 @@ configure-stageprofile-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libdecnumber-bootstrap @@ -17928,6 +18147,7 @@ configure-stagefeedback-libdecnumber: libsrcdir="$$s/libdecnumber"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libdecnumber-bootstrap @@ -17937,15 +18157,13 @@ configure-stagefeedback-libdecnumber: .PHONY: all-libdecnumber maybe-all-libdecnumber maybe-all-libdecnumber: +@if gcc-bootstrap +all-libdecnumber: stage_current +@endif gcc-bootstrap @if libdecnumber TARGET-libdecnumber=all maybe-all-libdecnumber: all-libdecnumber all-libdecnumber: configure-libdecnumber -@endif libdecnumber -@if libdecnumber-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libdecnumber-bootstrap -@if libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -18451,6 +18669,9 @@ maintainer-clean-libdecnumber: .PHONY: configure-libgui maybe-configure-libgui maybe-configure-libgui: +@if gcc-bootstrap +configure-libgui: stage_current +@endif gcc-bootstrap @if libgui maybe-configure-libgui: configure-libgui configure-libgui: @@ -18480,6 +18701,9 @@ configure-libgui: .PHONY: all-libgui maybe-all-libgui maybe-all-libgui: +@if gcc-bootstrap +all-libgui: stage_current +@endif gcc-bootstrap @if libgui TARGET-libgui=all maybe-all-libgui: all-libgui @@ -18815,14 +19039,12 @@ maintainer-clean-libgui: .PHONY: configure-libiberty maybe-configure-libiberty maybe-configure-libiberty: +@if gcc-bootstrap +configure-libiberty: stage_current +@endif gcc-bootstrap @if libiberty maybe-configure-libiberty: configure-libiberty configure-libiberty: -@endif libiberty -@if libiberty-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libiberty-bootstrap -@if libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ @@ -18867,6 +19089,7 @@ configure-stage1-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif libiberty-bootstrap @@ -18894,6 +19117,7 @@ configure-stage2-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libiberty-bootstrap @@ -18921,6 +19145,7 @@ configure-stage3-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libiberty-bootstrap @@ -18948,6 +19173,7 @@ configure-stage4-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libiberty-bootstrap @@ -18975,6 +19201,7 @@ configure-stageprofile-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libiberty-bootstrap @@ -19002,6 +19229,7 @@ configure-stagefeedback-libiberty: libsrcdir="$$s/libiberty"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif libiberty-bootstrap @@ -19011,15 +19239,13 @@ configure-stagefeedback-libiberty: .PHONY: all-libiberty maybe-all-libiberty maybe-all-libiberty: +@if gcc-bootstrap +all-libiberty: stage_current +@endif gcc-bootstrap @if libiberty TARGET-libiberty=all maybe-all-libiberty: all-libiberty all-libiberty: configure-libiberty -@endif libiberty -@if libiberty-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif libiberty-bootstrap -@if libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -19525,6 +19751,9 @@ maintainer-clean-libiberty: .PHONY: configure-libtool maybe-configure-libtool maybe-configure-libtool: +@if gcc-bootstrap +configure-libtool: stage_current +@endif gcc-bootstrap @if libtool maybe-configure-libtool: configure-libtool configure-libtool: @@ -19554,6 +19783,9 @@ configure-libtool: .PHONY: all-libtool maybe-all-libtool maybe-all-libtool: +@if gcc-bootstrap +all-libtool: stage_current +@endif gcc-bootstrap @if libtool TARGET-libtool=all maybe-all-libtool: all-libtool @@ -19889,6 +20121,9 @@ maintainer-clean-libtool: .PHONY: configure-m4 maybe-configure-m4 maybe-configure-m4: +@if gcc-bootstrap +configure-m4: stage_current +@endif gcc-bootstrap @if m4 maybe-configure-m4: configure-m4 configure-m4: @@ -19918,6 +20153,9 @@ configure-m4: .PHONY: all-m4 maybe-all-m4 maybe-all-m4: +@if gcc-bootstrap +all-m4: stage_current +@endif gcc-bootstrap @if m4 TARGET-m4=all maybe-all-m4: all-m4 @@ -20253,6 +20491,9 @@ maintainer-clean-m4: .PHONY: configure-make maybe-configure-make maybe-configure-make: +@if gcc-bootstrap +configure-make: stage_current +@endif gcc-bootstrap @if make maybe-configure-make: configure-make configure-make: @@ -20282,6 +20523,9 @@ configure-make: .PHONY: all-make maybe-all-make maybe-all-make: +@if gcc-bootstrap +all-make: stage_current +@endif gcc-bootstrap @if make TARGET-make=all maybe-all-make: all-make @@ -20617,6 +20861,9 @@ maintainer-clean-make: .PHONY: configure-mmalloc maybe-configure-mmalloc maybe-configure-mmalloc: +@if gcc-bootstrap +configure-mmalloc: stage_current +@endif gcc-bootstrap @if mmalloc maybe-configure-mmalloc: configure-mmalloc configure-mmalloc: @@ -20646,6 +20893,9 @@ configure-mmalloc: .PHONY: all-mmalloc maybe-all-mmalloc maybe-all-mmalloc: +@if gcc-bootstrap +all-mmalloc: stage_current +@endif gcc-bootstrap @if mmalloc TARGET-mmalloc=all maybe-all-mmalloc: all-mmalloc @@ -20975,6 +21225,9 @@ maintainer-clean-mmalloc: .PHONY: configure-patch maybe-configure-patch maybe-configure-patch: +@if gcc-bootstrap +configure-patch: stage_current +@endif gcc-bootstrap @if patch maybe-configure-patch: configure-patch configure-patch: @@ -21004,6 +21257,9 @@ configure-patch: .PHONY: all-patch maybe-all-patch maybe-all-patch: +@if gcc-bootstrap +all-patch: stage_current +@endif gcc-bootstrap @if patch TARGET-patch=all maybe-all-patch: all-patch @@ -21339,6 +21595,9 @@ maintainer-clean-patch: .PHONY: configure-perl maybe-configure-perl maybe-configure-perl: +@if gcc-bootstrap +configure-perl: stage_current +@endif gcc-bootstrap @if perl maybe-configure-perl: configure-perl configure-perl: @@ -21368,6 +21627,9 @@ configure-perl: .PHONY: all-perl maybe-all-perl maybe-all-perl: +@if gcc-bootstrap +all-perl: stage_current +@endif gcc-bootstrap @if perl TARGET-perl=all maybe-all-perl: all-perl @@ -21703,6 +21965,9 @@ maintainer-clean-perl: .PHONY: configure-prms maybe-configure-prms maybe-configure-prms: +@if gcc-bootstrap +configure-prms: stage_current +@endif gcc-bootstrap @if prms maybe-configure-prms: configure-prms configure-prms: @@ -21732,6 +21997,9 @@ configure-prms: .PHONY: all-prms maybe-all-prms maybe-all-prms: +@if gcc-bootstrap +all-prms: stage_current +@endif gcc-bootstrap @if prms TARGET-prms=all maybe-all-prms: all-prms @@ -22067,6 +22335,9 @@ maintainer-clean-prms: .PHONY: configure-rcs maybe-configure-rcs maybe-configure-rcs: +@if gcc-bootstrap +configure-rcs: stage_current +@endif gcc-bootstrap @if rcs maybe-configure-rcs: configure-rcs configure-rcs: @@ -22096,6 +22367,9 @@ configure-rcs: .PHONY: all-rcs maybe-all-rcs maybe-all-rcs: +@if gcc-bootstrap +all-rcs: stage_current +@endif gcc-bootstrap @if rcs TARGET-rcs=all maybe-all-rcs: all-rcs @@ -22431,6 +22705,9 @@ maintainer-clean-rcs: .PHONY: configure-readline maybe-configure-readline maybe-configure-readline: +@if gcc-bootstrap +configure-readline: stage_current +@endif gcc-bootstrap @if readline maybe-configure-readline: configure-readline configure-readline: @@ -22460,6 +22737,9 @@ configure-readline: .PHONY: all-readline maybe-all-readline maybe-all-readline: +@if gcc-bootstrap +all-readline: stage_current +@endif gcc-bootstrap @if readline TARGET-readline=all maybe-all-readline: all-readline @@ -22795,6 +23075,9 @@ maintainer-clean-readline: .PHONY: configure-release maybe-configure-release maybe-configure-release: +@if gcc-bootstrap +configure-release: stage_current +@endif gcc-bootstrap @if release maybe-configure-release: configure-release configure-release: @@ -22824,6 +23107,9 @@ configure-release: .PHONY: all-release maybe-all-release maybe-all-release: +@if gcc-bootstrap +all-release: stage_current +@endif gcc-bootstrap @if release TARGET-release=all maybe-all-release: all-release @@ -23147,6 +23433,9 @@ maintainer-clean-release: .PHONY: configure-recode maybe-configure-recode maybe-configure-recode: +@if gcc-bootstrap +configure-recode: stage_current +@endif gcc-bootstrap @if recode maybe-configure-recode: configure-recode configure-recode: @@ -23176,6 +23465,9 @@ configure-recode: .PHONY: all-recode maybe-all-recode maybe-all-recode: +@if gcc-bootstrap +all-recode: stage_current +@endif gcc-bootstrap @if recode TARGET-recode=all maybe-all-recode: all-recode @@ -23511,6 +23803,9 @@ maintainer-clean-recode: .PHONY: configure-sed maybe-configure-sed maybe-configure-sed: +@if gcc-bootstrap +configure-sed: stage_current +@endif gcc-bootstrap @if sed maybe-configure-sed: configure-sed configure-sed: @@ -23540,6 +23835,9 @@ configure-sed: .PHONY: all-sed maybe-all-sed maybe-all-sed: +@if gcc-bootstrap +all-sed: stage_current +@endif gcc-bootstrap @if sed TARGET-sed=all maybe-all-sed: all-sed @@ -23875,6 +24173,9 @@ maintainer-clean-sed: .PHONY: configure-send-pr maybe-configure-send-pr maybe-configure-send-pr: +@if gcc-bootstrap +configure-send-pr: stage_current +@endif gcc-bootstrap @if send-pr maybe-configure-send-pr: configure-send-pr configure-send-pr: @@ -23904,6 +24205,9 @@ configure-send-pr: .PHONY: all-send-pr maybe-all-send-pr maybe-all-send-pr: +@if gcc-bootstrap +all-send-pr: stage_current +@endif gcc-bootstrap @if send-pr TARGET-send-pr=all maybe-all-send-pr: all-send-pr @@ -24239,6 +24543,9 @@ maintainer-clean-send-pr: .PHONY: configure-shellutils maybe-configure-shellutils maybe-configure-shellutils: +@if gcc-bootstrap +configure-shellutils: stage_current +@endif gcc-bootstrap @if shellutils maybe-configure-shellutils: configure-shellutils configure-shellutils: @@ -24268,6 +24575,9 @@ configure-shellutils: .PHONY: all-shellutils maybe-all-shellutils maybe-all-shellutils: +@if gcc-bootstrap +all-shellutils: stage_current +@endif gcc-bootstrap @if shellutils TARGET-shellutils=all maybe-all-shellutils: all-shellutils @@ -24603,6 +24913,9 @@ maintainer-clean-shellutils: .PHONY: configure-sid maybe-configure-sid maybe-configure-sid: +@if gcc-bootstrap +configure-sid: stage_current +@endif gcc-bootstrap @if sid maybe-configure-sid: configure-sid configure-sid: @@ -24632,6 +24945,9 @@ configure-sid: .PHONY: all-sid maybe-all-sid maybe-all-sid: +@if gcc-bootstrap +all-sid: stage_current +@endif gcc-bootstrap @if sid TARGET-sid=all maybe-all-sid: all-sid @@ -24967,6 +25283,9 @@ maintainer-clean-sid: .PHONY: configure-sim maybe-configure-sim maybe-configure-sim: +@if gcc-bootstrap +configure-sim: stage_current +@endif gcc-bootstrap @if sim maybe-configure-sim: configure-sim configure-sim: @@ -24996,6 +25315,9 @@ configure-sim: .PHONY: all-sim maybe-all-sim maybe-all-sim: +@if gcc-bootstrap +all-sim: stage_current +@endif gcc-bootstrap @if sim TARGET-sim=all maybe-all-sim: all-sim @@ -25331,6 +25653,9 @@ maintainer-clean-sim: .PHONY: configure-tar maybe-configure-tar maybe-configure-tar: +@if gcc-bootstrap +configure-tar: stage_current +@endif gcc-bootstrap @if tar maybe-configure-tar: configure-tar configure-tar: @@ -25360,6 +25685,9 @@ configure-tar: .PHONY: all-tar maybe-all-tar maybe-all-tar: +@if gcc-bootstrap +all-tar: stage_current +@endif gcc-bootstrap @if tar TARGET-tar=all maybe-all-tar: all-tar @@ -25695,6 +26023,9 @@ maintainer-clean-tar: .PHONY: configure-texinfo maybe-configure-texinfo maybe-configure-texinfo: +@if gcc-bootstrap +configure-texinfo: stage_current +@endif gcc-bootstrap @if texinfo maybe-configure-texinfo: configure-texinfo configure-texinfo: @@ -25724,6 +26055,9 @@ configure-texinfo: .PHONY: all-texinfo maybe-all-texinfo maybe-all-texinfo: +@if gcc-bootstrap +all-texinfo: stage_current +@endif gcc-bootstrap @if texinfo TARGET-texinfo=all maybe-all-texinfo: all-texinfo @@ -26053,6 +26387,9 @@ maintainer-clean-texinfo: .PHONY: configure-textutils maybe-configure-textutils maybe-configure-textutils: +@if gcc-bootstrap +configure-textutils: stage_current +@endif gcc-bootstrap @if textutils maybe-configure-textutils: configure-textutils configure-textutils: @@ -26082,6 +26419,9 @@ configure-textutils: .PHONY: all-textutils maybe-all-textutils maybe-all-textutils: +@if gcc-bootstrap +all-textutils: stage_current +@endif gcc-bootstrap @if textutils TARGET-textutils=all maybe-all-textutils: all-textutils @@ -26417,6 +26757,9 @@ maintainer-clean-textutils: .PHONY: configure-time maybe-configure-time maybe-configure-time: +@if gcc-bootstrap +configure-time: stage_current +@endif gcc-bootstrap @if time maybe-configure-time: configure-time configure-time: @@ -26446,6 +26789,9 @@ configure-time: .PHONY: all-time maybe-all-time maybe-all-time: +@if gcc-bootstrap +all-time: stage_current +@endif gcc-bootstrap @if time TARGET-time=all maybe-all-time: all-time @@ -26781,6 +27127,9 @@ maintainer-clean-time: .PHONY: configure-uudecode maybe-configure-uudecode maybe-configure-uudecode: +@if gcc-bootstrap +configure-uudecode: stage_current +@endif gcc-bootstrap @if uudecode maybe-configure-uudecode: configure-uudecode configure-uudecode: @@ -26810,6 +27159,9 @@ configure-uudecode: .PHONY: all-uudecode maybe-all-uudecode maybe-all-uudecode: +@if gcc-bootstrap +all-uudecode: stage_current +@endif gcc-bootstrap @if uudecode TARGET-uudecode=all maybe-all-uudecode: all-uudecode @@ -27145,6 +27497,9 @@ maintainer-clean-uudecode: .PHONY: configure-wdiff maybe-configure-wdiff maybe-configure-wdiff: +@if gcc-bootstrap +configure-wdiff: stage_current +@endif gcc-bootstrap @if wdiff maybe-configure-wdiff: configure-wdiff configure-wdiff: @@ -27174,6 +27529,9 @@ configure-wdiff: .PHONY: all-wdiff maybe-all-wdiff maybe-all-wdiff: +@if gcc-bootstrap +all-wdiff: stage_current +@endif gcc-bootstrap @if wdiff TARGET-wdiff=all maybe-all-wdiff: all-wdiff @@ -27509,6 +27867,9 @@ maintainer-clean-wdiff: .PHONY: configure-zip maybe-configure-zip maybe-configure-zip: +@if gcc-bootstrap +configure-zip: stage_current +@endif gcc-bootstrap @if zip maybe-configure-zip: configure-zip configure-zip: @@ -27538,6 +27899,9 @@ configure-zip: .PHONY: all-zip maybe-all-zip maybe-all-zip: +@if gcc-bootstrap +all-zip: stage_current +@endif gcc-bootstrap @if zip TARGET-zip=all maybe-all-zip: all-zip @@ -27876,14 +28240,12 @@ maintainer-clean-zip: .PHONY: configure-zlib maybe-configure-zlib maybe-configure-zlib: +@if gcc-bootstrap +configure-zlib: stage_current +@endif gcc-bootstrap @if zlib maybe-configure-zlib: configure-zlib configure-zlib: -@endif zlib -@if zlib-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif zlib-bootstrap -@if zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ @@ -27928,6 +28290,7 @@ configure-stage1-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + \ --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" @endif zlib-bootstrap @@ -27955,6 +28318,7 @@ configure-stage2-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif zlib-bootstrap @@ -27982,6 +28346,7 @@ configure-stage3-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif zlib-bootstrap @@ -28009,6 +28374,7 @@ configure-stage4-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif zlib-bootstrap @@ -28036,6 +28402,7 @@ configure-stageprofile-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif zlib-bootstrap @@ -28063,6 +28430,7 @@ configure-stagefeedback-zlib: libsrcdir="$$s/zlib"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ @stage2_werror_flag@ @endif zlib-bootstrap @@ -28072,15 +28440,13 @@ configure-stagefeedback-zlib: .PHONY: all-zlib maybe-all-zlib maybe-all-zlib: +@if gcc-bootstrap +all-zlib: stage_current +@endif gcc-bootstrap @if zlib TARGET-zlib=all maybe-all-zlib: all-zlib all-zlib: configure-zlib -@endif zlib -@if zlib-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif zlib-bootstrap -@if zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ @@ -28574,6 +28940,9 @@ maintainer-clean-zlib: .PHONY: configure-gdb maybe-configure-gdb maybe-configure-gdb: +@if gcc-bootstrap +configure-gdb: stage_current +@endif gcc-bootstrap @if gdb maybe-configure-gdb: configure-gdb configure-gdb: @@ -28603,6 +28972,9 @@ configure-gdb: .PHONY: all-gdb maybe-all-gdb maybe-all-gdb: +@if gcc-bootstrap +all-gdb: stage_current +@endif gcc-bootstrap @if gdb TARGET-gdb=all maybe-all-gdb: all-gdb @@ -28938,6 +29310,9 @@ maintainer-clean-gdb: .PHONY: configure-expect maybe-configure-expect maybe-configure-expect: +@if gcc-bootstrap +configure-expect: stage_current +@endif gcc-bootstrap @if expect maybe-configure-expect: configure-expect configure-expect: @@ -28967,6 +29342,9 @@ configure-expect: .PHONY: all-expect maybe-all-expect maybe-all-expect: +@if gcc-bootstrap +all-expect: stage_current +@endif gcc-bootstrap @if expect TARGET-expect=all maybe-all-expect: all-expect @@ -29302,6 +29680,9 @@ maintainer-clean-expect: .PHONY: configure-guile maybe-configure-guile maybe-configure-guile: +@if gcc-bootstrap +configure-guile: stage_current +@endif gcc-bootstrap @if guile maybe-configure-guile: configure-guile configure-guile: @@ -29331,6 +29712,9 @@ configure-guile: .PHONY: all-guile maybe-all-guile maybe-all-guile: +@if gcc-bootstrap +all-guile: stage_current +@endif gcc-bootstrap @if guile TARGET-guile=all maybe-all-guile: all-guile @@ -29666,6 +30050,9 @@ maintainer-clean-guile: .PHONY: configure-tk maybe-configure-tk maybe-configure-tk: +@if gcc-bootstrap +configure-tk: stage_current +@endif gcc-bootstrap @if tk maybe-configure-tk: configure-tk configure-tk: @@ -29695,6 +30082,9 @@ configure-tk: .PHONY: all-tk maybe-all-tk maybe-all-tk: +@if gcc-bootstrap +all-tk: stage_current +@endif gcc-bootstrap @if tk TARGET-tk=all maybe-all-tk: all-tk @@ -30030,6 +30420,9 @@ maintainer-clean-tk: .PHONY: configure-libtermcap maybe-configure-libtermcap maybe-configure-libtermcap: +@if gcc-bootstrap +configure-libtermcap: stage_current +@endif gcc-bootstrap @if libtermcap maybe-configure-libtermcap: configure-libtermcap configure-libtermcap: @@ -30059,6 +30452,9 @@ configure-libtermcap: .PHONY: all-libtermcap maybe-all-libtermcap maybe-all-libtermcap: +@if gcc-bootstrap +all-libtermcap: stage_current +@endif gcc-bootstrap @if libtermcap TARGET-libtermcap=all maybe-all-libtermcap: all-libtermcap @@ -30328,6 +30724,9 @@ maintainer-clean-libtermcap: .PHONY: configure-utils maybe-configure-utils maybe-configure-utils: +@if gcc-bootstrap +configure-utils: stage_current +@endif gcc-bootstrap @if utils maybe-configure-utils: configure-utils configure-utils: @@ -30357,6 +30756,9 @@ configure-utils: .PHONY: all-utils maybe-all-utils maybe-all-utils: +@if gcc-bootstrap +all-utils: stage_current +@endif gcc-bootstrap @if utils TARGET-utils=all maybe-all-utils: all-utils @@ -30686,6 +31088,9 @@ maintainer-clean-utils: .PHONY: configure-gnattools maybe-configure-gnattools maybe-configure-gnattools: +@if gcc-bootstrap +configure-gnattools: stage_current +@endif gcc-bootstrap @if gnattools maybe-configure-gnattools: configure-gnattools configure-gnattools: @@ -30715,6 +31120,9 @@ configure-gnattools: .PHONY: all-gnattools maybe-all-gnattools maybe-all-gnattools: +@if gcc-bootstrap +all-gnattools: stage_current +@endif gcc-bootstrap @if gnattools TARGET-gnattools=all maybe-all-gnattools: all-gnattools @@ -31057,6 +31465,9 @@ maintainer-clean-gnattools: .PHONY: configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3: +@if gcc-bootstrap +configure-target-libstdc++-v3: stage_current +@endif gcc-bootstrap @if target-libstdc++-v3 maybe-configure-target-libstdc++-v3: configure-target-libstdc++-v3 configure-target-libstdc++-v3: @@ -31100,6 +31511,9 @@ configure-target-libstdc++-v3: .PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3 maybe-all-target-libstdc++-v3: +@if gcc-bootstrap +all-target-libstdc++-v3: stage_current +@endif gcc-bootstrap @if target-libstdc++-v3 TARGET-target-libstdc++-v3=all maybe-all-target-libstdc++-v3: all-target-libstdc++-v3 @@ -31438,6 +31852,9 @@ maintainer-clean-target-libstdc++-v3: .PHONY: configure-target-libmudflap maybe-configure-target-libmudflap maybe-configure-target-libmudflap: +@if gcc-bootstrap +configure-target-libmudflap: stage_current +@endif gcc-bootstrap @if target-libmudflap maybe-configure-target-libmudflap: configure-target-libmudflap configure-target-libmudflap: @@ -31481,6 +31898,9 @@ configure-target-libmudflap: .PHONY: all-target-libmudflap maybe-all-target-libmudflap maybe-all-target-libmudflap: +@if gcc-bootstrap +all-target-libmudflap: stage_current +@endif gcc-bootstrap @if target-libmudflap TARGET-target-libmudflap=all maybe-all-target-libmudflap: all-target-libmudflap @@ -31819,6 +32239,9 @@ maintainer-clean-target-libmudflap: .PHONY: configure-target-libssp maybe-configure-target-libssp maybe-configure-target-libssp: +@if gcc-bootstrap +configure-target-libssp: stage_current +@endif gcc-bootstrap @if target-libssp maybe-configure-target-libssp: configure-target-libssp configure-target-libssp: @@ -31862,6 +32285,9 @@ configure-target-libssp: .PHONY: all-target-libssp maybe-all-target-libssp maybe-all-target-libssp: +@if gcc-bootstrap +all-target-libssp: stage_current +@endif gcc-bootstrap @if target-libssp TARGET-target-libssp=all maybe-all-target-libssp: all-target-libssp @@ -32200,6 +32626,9 @@ maintainer-clean-target-libssp: .PHONY: configure-target-newlib maybe-configure-target-newlib maybe-configure-target-newlib: +@if gcc-bootstrap +configure-target-newlib: stage_current +@endif gcc-bootstrap @if target-newlib maybe-configure-target-newlib: configure-target-newlib configure-target-newlib: @@ -32243,6 +32672,9 @@ configure-target-newlib: .PHONY: all-target-newlib maybe-all-target-newlib maybe-all-target-newlib: +@if gcc-bootstrap +all-target-newlib: stage_current +@endif gcc-bootstrap @if target-newlib TARGET-target-newlib=all maybe-all-target-newlib: all-target-newlib @@ -32581,6 +33013,9 @@ maintainer-clean-target-newlib: .PHONY: configure-target-libgfortran maybe-configure-target-libgfortran maybe-configure-target-libgfortran: +@if gcc-bootstrap +configure-target-libgfortran: stage_current +@endif gcc-bootstrap @if target-libgfortran maybe-configure-target-libgfortran: configure-target-libgfortran configure-target-libgfortran: @@ -32624,6 +33059,9 @@ configure-target-libgfortran: .PHONY: all-target-libgfortran maybe-all-target-libgfortran maybe-all-target-libgfortran: +@if gcc-bootstrap +all-target-libgfortran: stage_current +@endif gcc-bootstrap @if target-libgfortran TARGET-target-libgfortran=all maybe-all-target-libgfortran: all-target-libgfortran @@ -32962,6 +33400,9 @@ maintainer-clean-target-libgfortran: .PHONY: configure-target-libobjc maybe-configure-target-libobjc maybe-configure-target-libobjc: +@if gcc-bootstrap +configure-target-libobjc: stage_current +@endif gcc-bootstrap @if target-libobjc maybe-configure-target-libobjc: configure-target-libobjc configure-target-libobjc: @@ -33005,6 +33446,9 @@ configure-target-libobjc: .PHONY: all-target-libobjc maybe-all-target-libobjc maybe-all-target-libobjc: +@if gcc-bootstrap +all-target-libobjc: stage_current +@endif gcc-bootstrap @if target-libobjc TARGET-target-libobjc=all maybe-all-target-libobjc: all-target-libobjc @@ -33343,6 +33787,9 @@ maintainer-clean-target-libobjc: .PHONY: configure-target-libtermcap maybe-configure-target-libtermcap maybe-configure-target-libtermcap: +@if gcc-bootstrap +configure-target-libtermcap: stage_current +@endif gcc-bootstrap @if target-libtermcap maybe-configure-target-libtermcap: configure-target-libtermcap configure-target-libtermcap: @@ -33386,6 +33833,9 @@ configure-target-libtermcap: .PHONY: all-target-libtermcap maybe-all-target-libtermcap maybe-all-target-libtermcap: +@if gcc-bootstrap +all-target-libtermcap: stage_current +@endif gcc-bootstrap @if target-libtermcap TARGET-target-libtermcap=all maybe-all-target-libtermcap: all-target-libtermcap @@ -33659,6 +34109,9 @@ maintainer-clean-target-libtermcap: .PHONY: configure-target-winsup maybe-configure-target-winsup maybe-configure-target-winsup: +@if gcc-bootstrap +configure-target-winsup: stage_current +@endif gcc-bootstrap @if target-winsup maybe-configure-target-winsup: configure-target-winsup configure-target-winsup: @@ -33702,6 +34155,9 @@ configure-target-winsup: .PHONY: all-target-winsup maybe-all-target-winsup maybe-all-target-winsup: +@if gcc-bootstrap +all-target-winsup: stage_current +@endif gcc-bootstrap @if target-winsup TARGET-target-winsup=all maybe-all-target-winsup: all-target-winsup @@ -34040,6 +34496,9 @@ maintainer-clean-target-winsup: .PHONY: configure-target-libgloss maybe-configure-target-libgloss maybe-configure-target-libgloss: +@if gcc-bootstrap +configure-target-libgloss: stage_current +@endif gcc-bootstrap @if target-libgloss maybe-configure-target-libgloss: configure-target-libgloss configure-target-libgloss: @@ -34083,6 +34542,9 @@ configure-target-libgloss: .PHONY: all-target-libgloss maybe-all-target-libgloss maybe-all-target-libgloss: +@if gcc-bootstrap +all-target-libgloss: stage_current +@endif gcc-bootstrap @if target-libgloss TARGET-target-libgloss=all maybe-all-target-libgloss: all-target-libgloss @@ -34416,6 +34878,9 @@ maintainer-clean-target-libgloss: .PHONY: configure-target-libiberty maybe-configure-target-libiberty maybe-configure-target-libiberty: +@if gcc-bootstrap +configure-target-libiberty: stage_current +@endif gcc-bootstrap @if target-libiberty maybe-configure-target-libiberty: configure-target-libiberty configure-target-libiberty: @@ -34459,6 +34924,9 @@ configure-target-libiberty: .PHONY: all-target-libiberty maybe-all-target-libiberty maybe-all-target-libiberty: +@if gcc-bootstrap +all-target-libiberty: stage_current +@endif gcc-bootstrap @if target-libiberty TARGET-target-libiberty=all maybe-all-target-libiberty: all-target-libiberty @@ -34797,6 +35265,9 @@ maintainer-clean-target-libiberty: .PHONY: configure-target-gperf maybe-configure-target-gperf maybe-configure-target-gperf: +@if gcc-bootstrap +configure-target-gperf: stage_current +@endif gcc-bootstrap @if target-gperf maybe-configure-target-gperf: configure-target-gperf configure-target-gperf: @@ -34840,6 +35311,9 @@ configure-target-gperf: .PHONY: all-target-gperf maybe-all-target-gperf maybe-all-target-gperf: +@if gcc-bootstrap +all-target-gperf: stage_current +@endif gcc-bootstrap @if target-gperf TARGET-target-gperf=all maybe-all-target-gperf: all-target-gperf @@ -35178,6 +35652,9 @@ maintainer-clean-target-gperf: .PHONY: configure-target-examples maybe-configure-target-examples maybe-configure-target-examples: +@if gcc-bootstrap +configure-target-examples: stage_current +@endif gcc-bootstrap @if target-examples maybe-configure-target-examples: configure-target-examples configure-target-examples: @@ -35221,6 +35698,9 @@ configure-target-examples: .PHONY: all-target-examples maybe-all-target-examples maybe-all-target-examples: +@if gcc-bootstrap +all-target-examples: stage_current +@endif gcc-bootstrap @if target-examples TARGET-target-examples=all maybe-all-target-examples: all-target-examples @@ -35549,6 +36029,9 @@ maintainer-clean-target-examples: .PHONY: configure-target-libffi maybe-configure-target-libffi maybe-configure-target-libffi: +@if gcc-bootstrap +configure-target-libffi: stage_current +@endif gcc-bootstrap @if target-libffi maybe-configure-target-libffi: configure-target-libffi configure-target-libffi: @@ -35592,6 +36075,9 @@ configure-target-libffi: .PHONY: all-target-libffi maybe-all-target-libffi maybe-all-target-libffi: +@if gcc-bootstrap +all-target-libffi: stage_current +@endif gcc-bootstrap @if target-libffi TARGET-target-libffi=all maybe-all-target-libffi: all-target-libffi @@ -35930,6 +36416,9 @@ maintainer-clean-target-libffi: .PHONY: configure-target-libjava maybe-configure-target-libjava maybe-configure-target-libjava: +@if gcc-bootstrap +configure-target-libjava: stage_current +@endif gcc-bootstrap @if target-libjava maybe-configure-target-libjava: configure-target-libjava configure-target-libjava: @@ -35973,6 +36462,9 @@ configure-target-libjava: .PHONY: all-target-libjava maybe-all-target-libjava maybe-all-target-libjava: +@if gcc-bootstrap +all-target-libjava: stage_current +@endif gcc-bootstrap @if target-libjava TARGET-target-libjava=all maybe-all-target-libjava: all-target-libjava @@ -36311,6 +36803,9 @@ maintainer-clean-target-libjava: .PHONY: configure-target-zlib maybe-configure-target-zlib maybe-configure-target-zlib: +@if gcc-bootstrap +configure-target-zlib: stage_current +@endif gcc-bootstrap @if target-zlib maybe-configure-target-zlib: configure-target-zlib configure-target-zlib: @@ -36354,6 +36849,9 @@ configure-target-zlib: .PHONY: all-target-zlib maybe-all-target-zlib maybe-all-target-zlib: +@if gcc-bootstrap +all-target-zlib: stage_current +@endif gcc-bootstrap @if target-zlib TARGET-target-zlib=all maybe-all-target-zlib: all-target-zlib @@ -36692,6 +37190,9 @@ maintainer-clean-target-zlib: .PHONY: configure-target-boehm-gc maybe-configure-target-boehm-gc maybe-configure-target-boehm-gc: +@if gcc-bootstrap +configure-target-boehm-gc: stage_current +@endif gcc-bootstrap @if target-boehm-gc maybe-configure-target-boehm-gc: configure-target-boehm-gc configure-target-boehm-gc: @@ -36735,6 +37236,9 @@ configure-target-boehm-gc: .PHONY: all-target-boehm-gc maybe-all-target-boehm-gc maybe-all-target-boehm-gc: +@if gcc-bootstrap +all-target-boehm-gc: stage_current +@endif gcc-bootstrap @if target-boehm-gc TARGET-target-boehm-gc=all maybe-all-target-boehm-gc: all-target-boehm-gc @@ -37073,6 +37577,9 @@ maintainer-clean-target-boehm-gc: .PHONY: configure-target-qthreads maybe-configure-target-qthreads maybe-configure-target-qthreads: +@if gcc-bootstrap +configure-target-qthreads: stage_current +@endif gcc-bootstrap @if target-qthreads maybe-configure-target-qthreads: configure-target-qthreads configure-target-qthreads: @@ -37116,6 +37623,9 @@ configure-target-qthreads: .PHONY: all-target-qthreads maybe-all-target-qthreads maybe-all-target-qthreads: +@if gcc-bootstrap +all-target-qthreads: stage_current +@endif gcc-bootstrap @if target-qthreads TARGET-target-qthreads=all maybe-all-target-qthreads: all-target-qthreads @@ -37454,6 +37964,9 @@ maintainer-clean-target-qthreads: .PHONY: configure-target-rda maybe-configure-target-rda maybe-configure-target-rda: +@if gcc-bootstrap +configure-target-rda: stage_current +@endif gcc-bootstrap @if target-rda maybe-configure-target-rda: configure-target-rda configure-target-rda: @@ -37497,6 +38010,9 @@ configure-target-rda: .PHONY: all-target-rda maybe-all-target-rda maybe-all-target-rda: +@if gcc-bootstrap +all-target-rda: stage_current +@endif gcc-bootstrap @if target-rda TARGET-target-rda=all maybe-all-target-rda: all-target-rda @@ -37835,6 +38351,9 @@ maintainer-clean-target-rda: .PHONY: configure-target-libada maybe-configure-target-libada maybe-configure-target-libada: +@if gcc-bootstrap +configure-target-libada: stage_current +@endif gcc-bootstrap @if target-libada maybe-configure-target-libada: configure-target-libada configure-target-libada: @@ -37878,6 +38397,9 @@ configure-target-libada: .PHONY: all-target-libada maybe-all-target-libada maybe-all-target-libada: +@if gcc-bootstrap +all-target-libada: stage_current +@endif gcc-bootstrap @if target-libada TARGET-target-libada=all maybe-all-target-libada: all-target-libada @@ -38216,6 +38738,9 @@ maintainer-clean-target-libada: .PHONY: configure-target-libgomp maybe-configure-target-libgomp maybe-configure-target-libgomp: +@if gcc-bootstrap +configure-target-libgomp: stage_current +@endif gcc-bootstrap @if target-libgomp maybe-configure-target-libgomp: configure-target-libgomp configure-target-libgomp: @@ -38259,6 +38784,9 @@ configure-target-libgomp: .PHONY: all-target-libgomp maybe-all-target-libgomp maybe-all-target-libgomp: +@if gcc-bootstrap +all-target-libgomp: stage_current +@endif gcc-bootstrap @if target-libgomp TARGET-target-libgomp=all maybe-all-target-libgomp: all-target-libgomp @@ -40067,6 +40595,11 @@ do-distclean: distclean-stage1 stage_last: $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble +# Same as unstage, but not phony and defaulting to stage1-start. We place +# it in the dependency so that for example `make -j3 all-gcc' works. +stage_current: + @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi + .PHONY: restrap restrap: @: $(MAKE); $(stage) @@ -40358,7 +40891,9 @@ all-stageprofile-libcpp: maybe-all-stageprofile-intl all-stagefeedback-libcpp: maybe-all-stagefeedback-intl all-fixincludes: maybe-all-libiberty all-gnattools: maybe-all-target-libada +configure-gdb: maybe-configure-intl configure-gdb: maybe-configure-sim +all-gdb: maybe-all-intl all-gdb: maybe-all-libiberty all-gdb: maybe-all-opcodes all-gdb: maybe-all-bfd @@ -40379,6 +40914,14 @@ configure-stage3-bfd: configure-stage3-libiberty configure-stage4-bfd: configure-stage4-libiberty configure-stageprofile-bfd: configure-stageprofile-libiberty configure-stagefeedback-bfd: configure-stagefeedback-libiberty +configure-bfd: maybe-configure-intl + +configure-stage1-bfd: maybe-configure-stage1-intl +configure-stage2-bfd: maybe-configure-stage2-intl +configure-stage3-bfd: maybe-configure-stage3-intl +configure-stage4-bfd: maybe-configure-stage4-intl +configure-stageprofile-bfd: maybe-configure-stageprofile-intl +configure-stagefeedback-bfd: maybe-configure-stagefeedback-intl all-bfd: maybe-all-libiberty all-stage1-bfd: maybe-all-stage1-libiberty @@ -40395,6 +40938,14 @@ all-stage3-bfd: maybe-all-stage3-intl all-stage4-bfd: maybe-all-stage4-intl all-stageprofile-bfd: maybe-all-stageprofile-intl all-stagefeedback-bfd: maybe-all-stagefeedback-intl +configure-binutils: maybe-configure-intl + +configure-stage1-binutils: maybe-configure-stage1-intl +configure-stage2-binutils: maybe-configure-stage2-intl +configure-stage3-binutils: maybe-configure-stage3-intl +configure-stage4-binutils: maybe-configure-stage4-intl +configure-stageprofile-binutils: maybe-configure-stageprofile-intl +configure-stagefeedback-binutils: maybe-configure-stagefeedback-intl all-binutils: maybe-all-libiberty all-stage1-binutils: maybe-all-stage1-libiberty @@ -40456,6 +41007,14 @@ all-stageprofile-binutils: maybe-all-stageprofile-intl all-stagefeedback-binutils: maybe-all-stagefeedback-intl install-binutils: maybe-install-opcodes install-opcodes: maybe-install-bfd +configure-gas: maybe-configure-intl + +configure-stage1-gas: maybe-configure-stage1-intl +configure-stage2-gas: maybe-configure-stage2-intl +configure-stage3-gas: maybe-configure-stage3-intl +configure-stage4-gas: maybe-configure-stage4-intl +configure-stageprofile-gas: maybe-configure-stageprofile-intl +configure-stagefeedback-gas: maybe-configure-stagefeedback-intl all-gas: maybe-all-libiberty all-stage1-gas: maybe-all-stage1-libiberty @@ -40488,10 +41047,19 @@ all-stage3-gas: maybe-all-stage3-intl all-stage4-gas: maybe-all-stage4-intl all-stageprofile-gas: maybe-all-stageprofile-intl all-stagefeedback-gas: maybe-all-stagefeedback-intl +configure-gprof: maybe-configure-intl all-gprof: maybe-all-libiberty all-gprof: maybe-all-bfd all-gprof: maybe-all-opcodes all-gprof: maybe-all-intl +configure-ld: maybe-configure-intl + +configure-stage1-ld: maybe-configure-stage1-intl +configure-stage2-ld: maybe-configure-stage2-intl +configure-stage3-ld: maybe-configure-stage3-intl +configure-stage4-ld: maybe-configure-stage4-intl +configure-stageprofile-ld: maybe-configure-stageprofile-intl +configure-stagefeedback-ld: maybe-configure-stagefeedback-intl all-ld: maybe-all-libiberty all-stage1-ld: maybe-all-stage1-libiberty @@ -40551,6 +41119,14 @@ all-stage3-ld: maybe-all-stage3-intl all-stage4-ld: maybe-all-stage4-intl all-stageprofile-ld: maybe-all-stageprofile-intl all-stagefeedback-ld: maybe-all-stagefeedback-intl +configure-opcodes: maybe-configure-intl + +configure-stage1-opcodes: maybe-configure-stage1-intl +configure-stage2-opcodes: maybe-configure-stage2-intl +configure-stage3-opcodes: maybe-configure-stage3-intl +configure-stage4-opcodes: maybe-configure-stage4-intl +configure-stageprofile-opcodes: maybe-configure-stageprofile-intl +configure-stagefeedback-opcodes: maybe-configure-stagefeedback-intl all-opcodes: maybe-all-bfd all-stage1-opcodes: maybe-all-stage1-bfd @@ -40567,6 +41143,14 @@ all-stage3-opcodes: maybe-all-stage3-libiberty all-stage4-opcodes: maybe-all-stage4-libiberty all-stageprofile-opcodes: maybe-all-stageprofile-libiberty all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty +all-opcodes: maybe-all-intl + +all-stage1-opcodes: maybe-all-stage1-intl +all-stage2-opcodes: maybe-all-stage2-intl +all-stage3-opcodes: maybe-all-stage3-intl +all-stage4-opcodes: maybe-all-stage4-intl +all-stageprofile-opcodes: maybe-all-stageprofile-intl +all-stagefeedback-opcodes: maybe-all-stagefeedback-intl all-dejagnu: maybe-all-tcl all-dejagnu: maybe-all-expect all-dejagnu: maybe-all-tk @@ -40588,6 +41172,8 @@ all-sid: maybe-all-tcl all-sid: maybe-all-tk install-sid: maybe-install-tcl install-sid: maybe-install-tk +configure-sim: maybe-configure-intl +all-sim: maybe-all-intl all-sim: maybe-all-libiberty all-sim: maybe-all-bfd all-sim: maybe-all-opcodes @@ -40642,7 +41228,9 @@ all-target-libjava: maybe-all-target-zlib all-target-libjava: maybe-all-target-boehm-gc all-target-libjava: maybe-all-target-qthreads all-target-libjava: maybe-all-target-libffi +configure-target-libobjc: maybe-configure-target-boehm-gc all-target-libobjc: maybe-all-target-libiberty +all-target-libobjc: maybe-all-target-boehm-gc all-target-libstdc++-v3: maybe-all-target-libiberty all-target-libgloss: maybe-configure-target-newlib all-target-winsup: maybe-all-target-libiberty diff --git a/Makefile.tpl b/Makefile.tpl index e3abcb1dbb9..0825a1ee0f1 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -180,7 +180,9 @@ POSTSTAGE1_HOST_EXPORTS = \ CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \ $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \ -B$$r/$(HOST_SUBDIR)/prev-gcc/ \ - -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; + -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \ + CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ + LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS; # Target libraries are put under this directory: TARGET_SUBDIR = @target_subdir@ @@ -720,14 +722,12 @@ TAGS: do-TAGS [+ DEFINE configure +] .PHONY: configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+]: +@if gcc-bootstrap +configure-[+prefix+][+module+]: stage_current +@endif gcc-bootstrap @if [+prefix+][+module+] maybe-configure-[+prefix+][+module+]: configure-[+prefix+][+module+] -configure-[+prefix+][+module+]: [+ IF bootstrap +] -@endif [+prefix+][+module+] -@if [+prefix+][+module+]-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif [+prefix+][+module+]-bootstrap -@if [+prefix+][+module+][+ ELSE bootstrap +] +configure-[+prefix+][+module+]: [+ IF bootstrap +][+ ELSE +] @: $(MAKE); $(unstage)[+ ENDIF bootstrap +] @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ @@ -802,6 +802,7 @@ configure-stage[+id+]-[+prefix+][+module+]: libsrcdir="$$s/[+module+]"; \ $(SHELL) $${libsrcdir}/configure \ [+args+] $${srcdiroption} \ + [+ IF prev +]--with-build-libsubdir=$(HOST_SUBDIR)[+ ENDIF prev +] \ [+stage_configure_flags+] [+extra_configure_flags+] @endif [+prefix+][+module+]-bootstrap [+ ENDFOR bootstrap_stage +] @@ -811,16 +812,14 @@ configure-stage[+id+]-[+prefix+][+module+]: [+ DEFINE all +] .PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]: +@if gcc-bootstrap +all-[+prefix+][+module+]: stage_current +@endif gcc-bootstrap @if [+prefix+][+module+] TARGET-[+prefix+][+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +] maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+] -all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +] -@endif [+prefix+][+module+] -@if [+prefix+][+module+]-bootstrap - @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi -@endif [+prefix+][+module+]-bootstrap -@if [+prefix+][+module+][+ ELSE bootstrap +] +all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +] @: $(MAKE); $(unstage)[+ ENDIF bootstrap +] @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ @@ -1429,6 +1428,11 @@ do-distclean: distclean-stage1 stage_last: $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble +# Same as unstage, but not phony and defaulting to stage1-start. We place +# it in the dependency so that for example `make -j3 all-gcc' works. +stage_current: + @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi + .PHONY: restrap restrap: @: $(MAKE); $(stage) diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 4bcd87cf440..70dcfb0d9d4 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,56 @@ +2006-08-21 Bryce McKinlay + + PR libgcj/13212: + * configure.ac: Check for pthread_getattr_np(). Remove + GC_PTHREAD_SYM_VERSION detection. + * include/gc.h (GC_register_my_thread, GC_unregister_my_thread, + GC_get_thread_stack_base): New declarations. + * pthread_support.c (GC_register_my_thread, GC_unregister_my_thread, + GC_get_thread_stack_base): New functions. + (GC_delete_thread): Don't try to free the first_thread. + * misc.c (GC_init_inner): Use GC_get_thread_stack_base() if possible. + (pthread_create_, constr): Removed. + (pthread_create): Don't rename. + * include/gc_ext_config.h.in: Rebuilt. + * include/gc_pthread_redirects.h (pthread_create): Define + unconditionally. + * include/gc_config.h.in: Rebuilt. + * configure: Rebuilt. + +2006-06-21 Keith Seitz + + * pthread_stop_world.c (GC_suspend_handler): Redirect to suspension + routine if signal is received and thread is flagged SUSPENDED. + (suspend_self): New function. + (GC_suspend_thread): New function. + (GC_resume_thread): New function. + * include/gc.h (GC_suspend_thread): Declare. + (GC_resumet_thread): Declare. + * include/private/pthread_support.h (SUSPENDED): New GC_thread + flag. + +2006-06-20 Ranjit Mathew + + Backport Windows 9x/ME VirtualQuery() fix from GC 6.7. + * os_dep.c (GC_wnt): Define. + (GC_init_win32): Set GC_wnt. + * dyn_load.c (GC_register_dynamic_libraries): Consider MEM_PRIVATE + sections also on Windows 9x/ME. + +2006-06-02 Geoffrey Keating + + * configure.ac: Define HAS_PPC_THREAD_STATE_R0, + HAS_PPC_THREAD_STATE___R0, HAS_PPC_THREAD_STATE64_R0, + HAS_PPC_THREAD_STATE64___R0, HAS_I386_THREAD_STATE_EAX, + HAS_I386_THREAD_STATE___EAX. + * configure: Regenerate. + * include/gc_config.h.in: Regenerate. + * darwin_stop_world.c (PPC_RED_ZONE_SIZE): Use standard Darwin + macro names to determine value. + (THREAD_STATE): New. + (THREAD_FLD): New. + (GC_push_all_stacks): Use THREAD_STATE and THREAD_FLD in both versions. + 2006-05-24 Carlos O'Donell * Makefile.am: Add install-html target. diff --git a/boehm-gc/configure b/boehm-gc/configure index 65575a5d137..3f2f5d835f5 100755 --- a/boehm-gc/configure +++ b/boehm-gc/configure @@ -5597,6 +5597,682 @@ else fi +# Darwin needs a few extra special tests to deal with variation in the +# system headers. +case "$host" in + powerpc*-*-darwin*) + echo "$as_me:$LINENO: checking for ppc_thread_state_t.r0" >&5 +echo $ECHO_N "checking for ppc_thread_state_t.r0... $ECHO_C" >&6 +if test "${ac_cv_member_ppc_thread_state_t_r0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state_t ac_aggr; +if (ac_aggr.r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state_t_r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state_t ac_aggr; +if (sizeof ac_aggr.r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state_t_r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_ppc_thread_state_t_r0=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_ppc_thread_state_t_r0" >&5 +echo "${ECHO_T}$ac_cv_member_ppc_thread_state_t_r0" >&6 +if test $ac_cv_member_ppc_thread_state_t_r0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_PPC_THREAD_STATE_R0 +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for ppc_thread_state_t.__r0" >&5 +echo $ECHO_N "checking for ppc_thread_state_t.__r0... $ECHO_C" >&6 +if test "${ac_cv_member_ppc_thread_state_t___r0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state_t ac_aggr; +if (ac_aggr.__r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state_t___r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state_t ac_aggr; +if (sizeof ac_aggr.__r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state_t___r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_ppc_thread_state_t___r0=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_ppc_thread_state_t___r0" >&5 +echo "${ECHO_T}$ac_cv_member_ppc_thread_state_t___r0" >&6 +if test $ac_cv_member_ppc_thread_state_t___r0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_PPC_THREAD_STATE___R0 +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for ppc_thread_state64_t.r0" >&5 +echo $ECHO_N "checking for ppc_thread_state64_t.r0... $ECHO_C" >&6 +if test "${ac_cv_member_ppc_thread_state64_t_r0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state64_t ac_aggr; +if (ac_aggr.r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state64_t_r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state64_t ac_aggr; +if (sizeof ac_aggr.r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state64_t_r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_ppc_thread_state64_t_r0=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_ppc_thread_state64_t_r0" >&5 +echo "${ECHO_T}$ac_cv_member_ppc_thread_state64_t_r0" >&6 +if test $ac_cv_member_ppc_thread_state64_t_r0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_PPC_THREAD_STATE64_R0 +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for ppc_thread_state64_t.__r0" >&5 +echo $ECHO_N "checking for ppc_thread_state64_t.__r0... $ECHO_C" >&6 +if test "${ac_cv_member_ppc_thread_state64_t___r0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state64_t ac_aggr; +if (ac_aggr.__r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state64_t___r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static ppc_thread_state64_t ac_aggr; +if (sizeof ac_aggr.__r0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_ppc_thread_state64_t___r0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_ppc_thread_state64_t___r0=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_ppc_thread_state64_t___r0" >&5 +echo "${ECHO_T}$ac_cv_member_ppc_thread_state64_t___r0" >&6 +if test $ac_cv_member_ppc_thread_state64_t___r0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_PPC_THREAD_STATE64___R0 +_ACEOF + +fi + + ;; + i?86*-*-darwin*) + echo "$as_me:$LINENO: checking for i386_thread_state_t.eax" >&5 +echo $ECHO_N "checking for i386_thread_state_t.eax... $ECHO_C" >&6 +if test "${ac_cv_member_i386_thread_state_t_eax+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static i386_thread_state_t ac_aggr; +if (ac_aggr.eax) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_i386_thread_state_t_eax=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static i386_thread_state_t ac_aggr; +if (sizeof ac_aggr.eax) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_i386_thread_state_t_eax=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_i386_thread_state_t_eax=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_i386_thread_state_t_eax" >&5 +echo "${ECHO_T}$ac_cv_member_i386_thread_state_t_eax" >&6 +if test $ac_cv_member_i386_thread_state_t_eax = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_I386_THREAD_STATE_EAX +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for i386_thread_state_t.__eax" >&5 +echo $ECHO_N "checking for i386_thread_state_t.__eax... $ECHO_C" >&6 +if test "${ac_cv_member_i386_thread_state_t___eax+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static i386_thread_state_t ac_aggr; +if (ac_aggr.__eax) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_i386_thread_state_t___eax=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static i386_thread_state_t ac_aggr; +if (sizeof ac_aggr.__eax) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_i386_thread_state_t___eax=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_i386_thread_state_t___eax=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_i386_thread_state_t___eax" >&5 +echo "${ECHO_T}$ac_cv_member_i386_thread_state_t___eax" >&6 +if test $ac_cv_member_i386_thread_state_t___eax = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_I386_THREAD_STATE___EAX +_ACEOF + +fi + + ;; + *) ;; +esac + # We never want libdl on darwin. It is a fake libdl that just ends up making # dyld calls anyway case "$host" in @@ -5769,6 +6445,119 @@ echo "${ECHO_T}yes" >&6 ;; esac +# Checks for pthreads functions +# +oldLIBS="$LIBS" +LIBS="$LIBS $THREADLIBS" + +for ac_func in pthread_getattr_np +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +LIBS="$oldLIBS" + # Configuration of machine-dependent code # # We don't set NO_EXECUTE_PERMISSION by default because gcj (and @@ -6637,29 +7426,6 @@ _ACEOF fi -symver= -case "$target" in - *-*-linux* ) - cat > conftest.c < -void *tf (void *arg) { (void) arg; return NULL; } -int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; } -EOF - if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then - symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'` - fi - rm -f conftest conftest.c - ;; -esac -if test -n "$symver"; then - -cat >>confdefs.h <<_ACEOF -#define GC_PTHREAD_SYM_VERSION "$symver" -_ACEOF - -fi - - if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then toolexecdir='$(exec_prefix)/$(target_noncanonical)' diff --git a/boehm-gc/configure.ac b/boehm-gc/configure.ac index 69ad5cd3ab9..807b7a1a758 100644 --- a/boehm-gc/configure.ac +++ b/boehm-gc/configure.ac @@ -1,4 +1,4 @@ -# Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved. +# Copyright (c) 1999, 2000, 2001, 2002, 2003, 2006 by Red Hat, Inc. All rights reserved. # Copyright 2004 Nathanael Nerode # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED @@ -232,6 +232,39 @@ case "$host" in esac AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue) +# Darwin needs a few extra special tests to deal with variation in the +# system headers. +case "$host" in + powerpc*-*-darwin*) + AC_CHECK_MEMBER(ppc_thread_state_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE_R0,,[ppc_thread_state_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE___R0,,dnl + [ppc_thread_state_t has field __r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64_R0,,dnl + [ppc_thread_state64_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64___R0,,dnl + [ppc_thread_state64_t has field __r0]),, + [#include ]) + ;; + i?86*-*-darwin*) + AC_CHECK_MEMBER(i386_thread_state_t.eax, + AC_DEFINE(HAS_I386_THREAD_STATE_EAX,,dnl + [i386_thread_state_t has field eax]),, + [#include ]) + AC_CHECK_MEMBER(i386_thread_state_t.__eax, + AC_DEFINE(HAS_I386_THREAD_STATE___EAX,,dnl + [i386_thread_state_t has field __eax]),, + [#include ]) + ;; + *) ;; +esac + # We never want libdl on darwin. It is a fake libdl that just ends up making # dyld calls anyway case "$host" in @@ -296,6 +329,13 @@ case "$host" in ;; esac +# Checks for pthreads functions +# +oldLIBS="$LIBS" +LIBS="$LIBS $THREADLIBS" +AC_CHECK_FUNCS([pthread_getattr_np]) +LIBS="$oldLIBS" + # Configuration of machine-dependent code # # We don't set NO_EXECUTE_PERMISSION by default because gcj (and @@ -455,25 +495,6 @@ if test "${gc_use_mmap}" = "yes"; then AC_DEFINE(USE_MMAP, 1, [use MMAP instead of sbrk to get new memory]) fi -symver= -case "$target" in - *-*-linux* ) - cat > conftest.c < -void *tf (void *arg) { (void) arg; return NULL; } -int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; } -EOF - if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then - symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'` - fi - rm -f conftest conftest.c - ;; -esac -if test -n "$symver"; then - AC_DEFINE_UNQUOTED(GC_PTHREAD_SYM_VERSION, "$symver", [symbol version of pthread_create]) -fi - - if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then toolexecdir='$(exec_prefix)/$(target_noncanonical)' diff --git a/boehm-gc/darwin_stop_world.c b/boehm-gc/darwin_stop_world.c index c2a033d3cc4..895fdb61a64 100644 --- a/boehm-gc/darwin_stop_world.c +++ b/boehm-gc/darwin_stop_world.c @@ -14,12 +14,43 @@ Page 50: "If a leaf procedure's red zone usage would exceed 224 bytes, then it must set up a stack frame just like routines that call other routines." */ -#ifdef POWERPC -# if CPP_WORDSZ == 32 -# define PPC_RED_ZONE_SIZE 224 -# elif CPP_WORDSZ == 64 -# define PPC_RED_ZONE_SIZE 320 +#if defined(__ppc__) +# define PPC_RED_ZONE_SIZE 224 +#elif defined(__ppc64__) +# define PPC_RED_ZONE_SIZE 320 +#endif + +/* Try to work out the right way to access thread state structure members. + The structure has changed its definition in different Darwin versions. */ +#if defined(__ppc__) +# define THREAD_STATE ppc_thread_state_t +# if defined (HAS_PPC_THREAD_STATE_R0) +# define THREAD_FLD(x) x +# elif defined (HAS_PPC_THREAD_STATE___R0) +# define THREAD_FLD(x) __ ## x +# else +# error can not work out how to access fields of ppc_thread_state_t +# endif +#elif defined(__ppc64__) +# define THREAD_STATE ppc_thread_state64_t +# if defined (HAS_PPC_THREAD_STATE64_R0) +# define THREAD_FLD(x) x +# elif defined (HAS_PPC_THREAD_STATE64___R0) +# define THREAD_FLD(x) __ ## x +# else +# error can not work out how to access fields of ppc_thread_state64_t # endif +#elif defined(__i386__) +# define THREAD_STATE i386_thread_state_t +# if defined (HAS_I386_THREAD_STATE_EAX) +# define THREAD_FLD(x) x +# elif defined (HAS_I386_THREAD_STATE___EAX) +# define THREAD_FLD(x) __ ## x +# else +# error can not work out how to access fields of i386_thread_state_t +# endif +#else +# error unknown architecture #endif typedef struct StackFrame { @@ -75,7 +106,7 @@ void GC_push_all_stacks() { GC_thread p; pthread_t me; ptr_t lo, hi; - ppc_thread_state_t state; + THREAD_STATE state; mach_msg_type_number_t thread_state_count = MACHINE_THREAD_STATE_COUNT; me = pthread_self(); @@ -95,39 +126,39 @@ void GC_push_all_stacks() { &thread_state_count); if(r != KERN_SUCCESS) ABORT("thread_get_state failed"); - lo = (void*)(state.r1 - PPC_RED_ZONE_SIZE); + lo = (void*)(state . THREAD_FLD (r1) - PPC_RED_ZONE_SIZE); - GC_push_one(state.r0); - GC_push_one(state.r2); - GC_push_one(state.r3); - GC_push_one(state.r4); - GC_push_one(state.r5); - GC_push_one(state.r6); - GC_push_one(state.r7); - GC_push_one(state.r8); - GC_push_one(state.r9); - GC_push_one(state.r10); - GC_push_one(state.r11); - GC_push_one(state.r12); - GC_push_one(state.r13); - GC_push_one(state.r14); - GC_push_one(state.r15); - GC_push_one(state.r16); - GC_push_one(state.r17); - GC_push_one(state.r18); - GC_push_one(state.r19); - GC_push_one(state.r20); - GC_push_one(state.r21); - GC_push_one(state.r22); - GC_push_one(state.r23); - GC_push_one(state.r24); - GC_push_one(state.r25); - GC_push_one(state.r26); - GC_push_one(state.r27); - GC_push_one(state.r28); - GC_push_one(state.r29); - GC_push_one(state.r30); - GC_push_one(state.r31); + GC_push_one(state . THREAD_FLD (r0)); + GC_push_one(state . THREAD_FLD (r2)); + GC_push_one(state . THREAD_FLD (r3)); + GC_push_one(state . THREAD_FLD (r4)); + GC_push_one(state . THREAD_FLD (r5)); + GC_push_one(state . THREAD_FLD (r6)); + GC_push_one(state . THREAD_FLD (r7)); + GC_push_one(state . THREAD_FLD (r8)); + GC_push_one(state . THREAD_FLD (r9)); + GC_push_one(state . THREAD_FLD (r10)); + GC_push_one(state . THREAD_FLD (r11)); + GC_push_one(state . THREAD_FLD (r12)); + GC_push_one(state . THREAD_FLD (r13)); + GC_push_one(state . THREAD_FLD (r14)); + GC_push_one(state . THREAD_FLD (r15)); + GC_push_one(state . THREAD_FLD (r16)); + GC_push_one(state . THREAD_FLD (r17)); + GC_push_one(state . THREAD_FLD (r18)); + GC_push_one(state . THREAD_FLD (r19)); + GC_push_one(state . THREAD_FLD (r20)); + GC_push_one(state . THREAD_FLD (r21)); + GC_push_one(state . THREAD_FLD (r22)); + GC_push_one(state . THREAD_FLD (r23)); + GC_push_one(state . THREAD_FLD (r24)); + GC_push_one(state . THREAD_FLD (r25)); + GC_push_one(state . THREAD_FLD (r26)); + GC_push_one(state . THREAD_FLD (r27)); + GC_push_one(state . THREAD_FLD (r28)); + GC_push_one(state . THREAD_FLD (r29)); + GC_push_one(state . THREAD_FLD (r30)); + GC_push_one(state . THREAD_FLD (r31)); } /* p != me */ if(p->flags & MAIN_THREAD) hi = GC_stackbottom; @@ -166,78 +197,74 @@ void GC_push_all_stacks() { lo = GC_approx_sp(); hi = (ptr_t)FindTopOfStack(0); } else { -# if defined(POWERPC) -# if CPP_WORDSZ == 32 - ppc_thread_state_t info; -# else - ppc_thread_state64_t info; -# endif +# if defined(__ppc__) || defined(__ppc64__) + THREAD_STATE info; mach_msg_type_number_t outCount = THREAD_STATE_MAX; r = thread_get_state(thread, MACHINE_THREAD_STATE, (natural_t *)&info, &outCount); if(r != KERN_SUCCESS) ABORT("task_get_state failed"); - lo = (void*)(info.r1 - PPC_RED_ZONE_SIZE); - hi = (ptr_t)FindTopOfStack(info.r1); - - GC_push_one(info.r0); - GC_push_one(info.r2); - GC_push_one(info.r3); - GC_push_one(info.r4); - GC_push_one(info.r5); - GC_push_one(info.r6); - GC_push_one(info.r7); - GC_push_one(info.r8); - GC_push_one(info.r9); - GC_push_one(info.r10); - GC_push_one(info.r11); - GC_push_one(info.r12); - GC_push_one(info.r13); - GC_push_one(info.r14); - GC_push_one(info.r15); - GC_push_one(info.r16); - GC_push_one(info.r17); - GC_push_one(info.r18); - GC_push_one(info.r19); - GC_push_one(info.r20); - GC_push_one(info.r21); - GC_push_one(info.r22); - GC_push_one(info.r23); - GC_push_one(info.r24); - GC_push_one(info.r25); - GC_push_one(info.r26); - GC_push_one(info.r27); - GC_push_one(info.r28); - GC_push_one(info.r29); - GC_push_one(info.r30); - GC_push_one(info.r31); + lo = (void*)(info . THREAD_FLD (r1) - PPC_RED_ZONE_SIZE); + hi = (ptr_t)FindTopOfStack(info . THREAD_FLD (r1)); + + GC_push_one(info . THREAD_FLD (r0)); + GC_push_one(info . THREAD_FLD (r2)); + GC_push_one(info . THREAD_FLD (r3)); + GC_push_one(info . THREAD_FLD (r4)); + GC_push_one(info . THREAD_FLD (r5)); + GC_push_one(info . THREAD_FLD (r6)); + GC_push_one(info . THREAD_FLD (r7)); + GC_push_one(info . THREAD_FLD (r8)); + GC_push_one(info . THREAD_FLD (r9)); + GC_push_one(info . THREAD_FLD (r10)); + GC_push_one(info . THREAD_FLD (r11)); + GC_push_one(info . THREAD_FLD (r12)); + GC_push_one(info . THREAD_FLD (r13)); + GC_push_one(info . THREAD_FLD (r14)); + GC_push_one(info . THREAD_FLD (r15)); + GC_push_one(info . THREAD_FLD (r16)); + GC_push_one(info . THREAD_FLD (r17)); + GC_push_one(info . THREAD_FLD (r18)); + GC_push_one(info . THREAD_FLD (r19)); + GC_push_one(info . THREAD_FLD (r20)); + GC_push_one(info . THREAD_FLD (r21)); + GC_push_one(info . THREAD_FLD (r22)); + GC_push_one(info . THREAD_FLD (r23)); + GC_push_one(info . THREAD_FLD (r24)); + GC_push_one(info . THREAD_FLD (r25)); + GC_push_one(info . THREAD_FLD (r26)); + GC_push_one(info . THREAD_FLD (r27)); + GC_push_one(info . THREAD_FLD (r28)); + GC_push_one(info . THREAD_FLD (r29)); + GC_push_one(info . THREAD_FLD (r30)); + GC_push_one(info . THREAD_FLD (r31)); # else /* FIXME: Remove after testing: */ WARN("This is completely untested and likely will not work\n", 0); - i386_thread_state_t info; + THREAD_STATE info; mach_msg_type_number_t outCount = THREAD_STATE_MAX; r = thread_get_state(thread, MACHINE_THREAD_STATE, (natural_t *)&info, &outCount); if(r != KERN_SUCCESS) ABORT("task_get_state failed"); - lo = (void*)info.esp; - hi = (ptr_t)FindTopOfStack(info.esp); - - GC_push_one(info.eax); - GC_push_one(info.ebx); - GC_push_one(info.ecx); - GC_push_one(info.edx); - GC_push_one(info.edi); - GC_push_one(info.esi); - /* GC_push_one(info.ebp); */ - /* GC_push_one(info.esp); */ - GC_push_one(info.ss); - GC_push_one(info.eip); - GC_push_one(info.cs); - GC_push_one(info.ds); - GC_push_one(info.es); - GC_push_one(info.fs); - GC_push_one(info.gs); + lo = (void*)info . THREAD_FLD (esp); + hi = (ptr_t)FindTopOfStack(info . THREAD_FLD (esp)); + + GC_push_one(info . THREAD_FLD (eax)); + GC_push_one(info . THREAD_FLD (ebx)); + GC_push_one(info . THREAD_FLD (ecx)); + GC_push_one(info . THREAD_FLD (edx)); + GC_push_one(info . THREAD_FLD (edi)); + GC_push_one(info . THREAD_FLD (esi)); + /* GC_push_one(info . THREAD_FLD (ebp)); */ + /* GC_push_one(info . THREAD_FLD (esp)); */ + GC_push_one(info . THREAD_FLD (ss)); + GC_push_one(info . THREAD_FLD (eip)); + GC_push_one(info . THREAD_FLD (cs)); + GC_push_one(info . THREAD_FLD (ds)); + GC_push_one(info . THREAD_FLD (es)); + GC_push_one(info . THREAD_FLD (fs)); + GC_push_one(info . THREAD_FLD (gs)); # endif /* !POWERPC */ } # if DEBUG_THREADS diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c index 94e66092e31..3485474bee5 100644 --- a/boehm-gc/dyn_load.c +++ b/boehm-gc/dyn_load.c @@ -860,6 +860,9 @@ void GC_register_dynamic_libraries() } # endif /* DEBUG_VIRTUALQUERY */ + extern GC_bool GC_wnt; /* Is Windows NT derivative. */ + /* Defined and set in os_dep.c. */ + void GC_register_dynamic_libraries() { MEMORY_BASIC_INFORMATION buf; @@ -901,7 +904,12 @@ void GC_register_dynamic_libraries() * !is_frame_buffer(p, buf.RegionSize, buf.Type) * instead of just checking for MEM_IMAGE. * If something breaks, change it back. */ - && buf.Type == MEM_IMAGE) { + /* There is some evidence that we cannot always + * ignore MEM_PRIVATE sections under Windows ME + * and predecessors. Hence we now also check for + * that case. */ + && (buf.Type == MEM_IMAGE || + !GC_wnt && buf.Type == MEM_PRIVATE)) { # ifdef DEBUG_VIRTUALQUERY GC_dump_meminfo(&buf); # endif diff --git a/boehm-gc/include/gc.h b/boehm-gc/include/gc.h index 3507db74dc5..5ba1f4becfe 100644 --- a/boehm-gc/include/gc.h +++ b/boehm-gc/include/gc.h @@ -69,7 +69,6 @@ extern "C" { # endif - /* Define word and signed_word to be unsigned and signed types of the */ /* size as char * or void *. There seems to be no way to do this */ /* even semi-portably. The following is probably no better/worse */ @@ -912,6 +911,25 @@ GC_API void (*GC_is_visible_print_proc) # if defined(PCR) || defined(GC_SOLARIS_THREADS) || \ defined(GC_PTHREADS) || defined(GC_WIN32_THREADS) /* Any flavor of threads except SRC_M3. */ + +/* Register the current thread as a new thread whose stack(s) should */ +/* be traced by the GC. */ +/* If a platform does not implicitly do so, this must be called before */ +/* a thread can allocate garbage collected memory, or assign pointers */ +/* to the garbage collected heap. Once registered, a thread will be */ +/* stopped during garbage collections. */ +GC_API void GC_register_my_thread GC_PROTO((void)); + +/* Register the current thread, with the indicated stack base, as */ +/* a new thread whose stack(s) should be traced by the GC. If a */ +/* platform does not implicitly do so, this must be called before a */ +/* thread can allocate garbage collected memory, or assign pointers */ +/* to the garbage collected heap. Once registered, a thread will be */ +/* stopped during garbage collections. */ +GC_API void GC_unregister_my_thread GC_PROTO((void)); + +GC_API GC_PTR GC_get_thread_stack_base GC_PROTO((void)); + /* This returns a list of objects, linked through their first */ /* word. Its use can greatly reduce lock contention problems, since */ /* the allocation lock can be acquired and released many fewer times. */ @@ -1040,4 +1058,14 @@ GC_API void GC_register_has_static_roots_callback } /* end of extern "C" */ #endif +/* External thread suspension support. These functions do not implement + * suspension counts or any other higher-level abstraction. Threads which + * have been suspended numerous times will resume with the very first call + * to GC_resume_thread. + */ +#if defined(GC_PTHREADS) && !defined(GC_SOLARIS_THREADS) \ + && !defined(GC_WIN32_THREADS) && !defined(GC_DARWIN_THREADS) +GC_API void GC_suspend_thread GC_PROTO((pthread_t)); +GC_API void GC_resume_thread GC_PROTO((pthread_t)); +#endif #endif /* _GC_H */ diff --git a/boehm-gc/include/gc_config.h.in b/boehm-gc/include/gc_config.h.in index cfaae9dd464..5055b502459 100644 --- a/boehm-gc/include/gc_config.h.in +++ b/boehm-gc/include/gc_config.h.in @@ -45,9 +45,6 @@ /* support for Tru64 pthreads */ #undef GC_OSF1_THREADS -/* symbol version of pthread_create */ -#undef GC_PTHREAD_SYM_VERSION - /* support for Solaris pthreads */ #undef GC_SOLARIS_PTHREADS @@ -57,12 +54,33 @@ /* support for win32 threads */ #undef GC_WIN32_THREADS +/* i386_thread_state_t has field eax */ +#undef HAS_I386_THREAD_STATE_EAX + +/* i386_thread_state_t has field __eax */ +#undef HAS_I386_THREAD_STATE___EAX + +/* ppc_thread_state64_t has field r0 */ +#undef HAS_PPC_THREAD_STATE64_R0 + +/* ppc_thread_state64_t has field __r0 */ +#undef HAS_PPC_THREAD_STATE64___R0 + +/* ppc_thread_state_t has field r0 */ +#undef HAS_PPC_THREAD_STATE_R0 + +/* ppc_thread_state_t has field __r0 */ +#undef HAS_PPC_THREAD_STATE___R0 + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `pthread_getattr_np' function. */ +#undef HAVE_PTHREAD_GETATTR_NP + /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H @@ -154,5 +172,5 @@ /* POSIX version of C Source */ #undef _POSIX_C_SOURCE -/* Use reentrant code */ +/* Required define if using POSIX threads */ #undef _REENTRANT diff --git a/boehm-gc/include/gc_ext_config.h.in b/boehm-gc/include/gc_ext_config.h.in index 716143dc62f..219ba2fb8c8 100644 --- a/boehm-gc/include/gc_ext_config.h.in +++ b/boehm-gc/include/gc_ext_config.h.in @@ -4,4 +4,4 @@ is used by libjava/include/boehm-gc.h. */ #undef THREAD_LOCAL_ALLOC -#undef GC_PTHREAD_SYM_VERSION +#undef HAVE_PTHREAD_GETATTR_NP diff --git a/boehm-gc/include/gc_pthread_redirects.h b/boehm-gc/include/gc_pthread_redirects.h index f9d4939affc..842518cfcc4 100644 --- a/boehm-gc/include/gc_pthread_redirects.h +++ b/boehm-gc/include/gc_pthread_redirects.h @@ -68,9 +68,7 @@ # undef pthread_detach #endif -#ifndef GC_PTHREAD_SYM_VERSION # define pthread_create GC_pthread_create -#endif # define pthread_join GC_pthread_join # define pthread_detach GC_pthread_detach diff --git a/boehm-gc/include/private/pthread_support.h b/boehm-gc/include/private/pthread_support.h index 469021b4071..2186c079039 100644 --- a/boehm-gc/include/private/pthread_support.h +++ b/boehm-gc/include/private/pthread_support.h @@ -33,6 +33,7 @@ typedef struct GC_Thread_Rep { # define FINISHED 1 /* Thread has exited. */ # define DETACHED 2 /* Thread is intended to be detached. */ # define MAIN_THREAD 4 /* True for the original thread only. */ +# define SUSPENDED 8 /* True if thread was suspended externally */ short thread_blocked; /* Protected by GC lock. */ /* Treated as a boolean value. If set, */ /* thread will acquire GC lock before */ diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c index 89f05ba1dc9..23e226df52a 100644 --- a/boehm-gc/misc.c +++ b/boehm-gc/misc.c @@ -674,7 +674,13 @@ void GC_init_inner() # if !defined(THREADS) || defined(GC_PTHREADS) || defined(GC_WIN32_THREADS) \ || defined(GC_SOLARIS_THREADS) if (GC_stackbottom == 0) { - GC_stackbottom = GC_get_stack_base(); + # ifdef GC_PTHREADS + /* Use thread_stack_base if available, as GC could be initialized from + a thread that is not the "main" thread. */ + GC_stackbottom = GC_get_thread_stack_base(); + # endif + if (GC_stackbottom == 0) + GC_stackbottom = GC_get_stack_base(); # if (defined(LINUX) || defined(HPUX)) && defined(IA64) GC_register_stackbottom = GC_get_register_stack_base(); # endif diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c index fb50a4554b7..13692d9bcd6 100644 --- a/boehm-gc/os_dep.c +++ b/boehm-gc/os_dep.c @@ -1181,12 +1181,15 @@ void GC_register_data_segments() /* This used to be set for gcc, to avoid dealing with */ /* the structured exception handling issues. But we now have */ /* assembly code to do that right. */ + GC_bool GC_wnt = FALSE; + /* This is a Windows NT derivative, i.e. NT, W2K, XP or later. */ void GC_init_win32() { /* if we're running under win32s, assume that no DLLs will be loaded */ DWORD v = GetVersion(); - GC_no_win32_dlls |= ((v & 0x80000000) && (v & 0xff) <= 3); + GC_wnt = !(v & 0x80000000); + GC_no_win32_dlls |= ((!GC_wnt) && (v & 0xff) <= 3); } /* Return the smallest address a such that VirtualQuery */ diff --git a/boehm-gc/pthread_stop_world.c b/boehm-gc/pthread_stop_world.c index b9034dc7f5b..de647769c7c 100644 --- a/boehm-gc/pthread_stop_world.c +++ b/boehm-gc/pthread_stop_world.c @@ -13,6 +13,8 @@ /* Doesn't exist on HP/UX 11.11. */ #endif +void suspend_self(); + #if DEBUG_THREADS #ifndef NSIG @@ -127,9 +129,14 @@ extern void GC_with_callee_saves_pushed(); void GC_suspend_handler(int sig) { - int old_errno = errno; - GC_with_callee_saves_pushed(GC_suspend_handler_inner, (ptr_t)(word)sig); - errno = old_errno; + GC_thread me = GC_lookup_thread (pthread_self()); + if (me -> flags & SUSPENDED) + suspend_self(); + else { + int old_errno = errno; + GC_with_callee_saves_pushed(GC_suspend_handler_inner, (ptr_t)(word)sig); + errno = old_errno; + } } #else @@ -137,9 +144,14 @@ void GC_suspend_handler(int sig) /* in the signal handler frame. */ void GC_suspend_handler(int sig) { - int old_errno = errno; - GC_suspend_handler_inner((ptr_t)(word)sig); - errno = old_errno; + GC_thread me = GC_lookup_thread(pthread_self()); + if (me -> flags & SUSPENDED) + suspend_self(); + else { + int old_errno = errno; + GC_suspend_handler_inner((ptr_t)(word)sig); + errno = old_errno; + } } #endif @@ -430,6 +442,47 @@ void GC_stop_world() GC_stopping_thread = 0; /* debugging only */ } +void suspend_self() { + GC_thread me = GC_lookup_thread(pthread_self()); + if (me == NULL) + ABORT("attempting to suspend unknown thread"); + + me -> flags |= SUSPENDED; + GC_start_blocking(); + while (me -> flags & SUSPENDED) + GC_brief_async_signal_safe_sleep(); + GC_end_blocking(); +} + +void GC_suspend_thread(pthread_t thread) { + if (thread == pthread_self()) + suspend_self(); + else { + int result; + GC_thread t = GC_lookup_thread(thread); + if (t == NULL) + ABORT("attempting to suspend unknown thread"); + + t -> flags |= SUSPENDED; + result = pthread_kill (t -> id, SIG_SUSPEND); + switch (result) { + case ESRCH: + case 0: + break; + default: + ABORT("pthread_kill failed"); + } + } +} + +void GC_resume_thread(pthread_t thread) { + GC_thread t = GC_lookup_thread(thread); + if (t == NULL) + ABORT("attempting to resume unknown thread"); + + t -> flags &= ~SUSPENDED; +} + /* Caller holds allocation lock, and has held it continuously since */ /* the world stopped. */ void GC_start_world() diff --git a/boehm-gc/pthread_support.c b/boehm-gc/pthread_support.c index 55872ef65c8..bbda8522c03 100644 --- a/boehm-gc/pthread_support.c +++ b/boehm-gc/pthread_support.c @@ -602,7 +602,9 @@ void GC_delete_thread(pthread_t id) } else { prev -> next = p -> next; } - GC_INTERNAL_FREE(p); + + if (p != &first_thread) + GC_INTERNAL_FREE(p); } /* If a thread has been joined, but we have not yet */ @@ -1124,6 +1126,107 @@ WRAP_FUNC(pthread_detach)(pthread_t thread) GC_bool GC_in_thread_creation = FALSE; +GC_PTR GC_get_thread_stack_base() +{ +# ifdef HAVE_PTHREAD_GETATTR_NP + pthread_t my_pthread; + pthread_attr_t attr; + ptr_t stack_addr; + size_t stack_size; + + my_pthread = pthread_self(); + pthread_getattr_np (my_pthread, &attr); + pthread_attr_getstack (&attr, (void **) &stack_addr, &stack_size); + pthread_attr_destroy (&attr); + +# ifdef DEBUG_THREADS + GC_printf1("attached thread stack address: 0x%x\n", stack_addr); +# endif + +# ifdef STACK_GROWS_DOWN + return stack_addr + stack_size; +# else + return stack_addr - stack_size; +# endif + +# else +# ifdef DEBUG_THREADS + GC_printf1("Can not determine stack base for attached thread"); +# endif + return 0; +# endif +} + +void GC_register_my_thread() +{ + GC_thread me; + pthread_t my_pthread; + + my_pthread = pthread_self(); +# ifdef DEBUG_THREADS + GC_printf1("Attaching thread 0x%lx\n", my_pthread); + GC_printf1("pid = %ld\n", (long) getpid()); +# endif + + /* Check to ensure this thread isn't attached already. */ + LOCK(); + me = GC_lookup_thread (my_pthread); + UNLOCK(); + if (me != 0) + { +# ifdef DEBUG_THREADS + GC_printf1("Attempt to re-attach known thread 0x%lx\n", my_pthread); +# endif + return; + } + + LOCK(); + GC_in_thread_creation = TRUE; + me = GC_new_thread(my_pthread); + GC_in_thread_creation = FALSE; + + me -> flags |= DETACHED; + +#ifdef GC_DARWIN_THREADS + me -> stop_info.mach_thread = mach_thread_self(); +#else + me -> stack_end = GC_get_thread_stack_base(); + if (me -> stack_end == 0) + GC_abort("Can not determine stack base for attached thread"); + +# ifdef STACK_GROWS_DOWN + me -> stop_info.stack_ptr = me -> stack_end - 0x10; +# else + me -> stop_info.stack_ptr = me -> stack_end + 0x10; +# endif +#endif + +# ifdef IA64 + me -> backing_store_end = (ptr_t) + (GC_save_regs_in_stack() & ~(GC_page_size - 1)); + /* This is also < 100% convincing. We should also read this */ + /* from /proc, but the hook to do so isn't there yet. */ +# endif /* IA64 */ + +# if defined(THREAD_LOCAL_ALLOC) && !defined(DBG_HDRS_ALL) + GC_init_thread_local(me); +# endif + UNLOCK(); +} + +void GC_unregister_my_thread() +{ + pthread_t my_pthread; + + my_pthread = pthread_self(); + +# ifdef DEBUG_THREADS + GC_printf1("Detaching thread 0x%lx\n", my_pthread); +# endif + + GC_thread_exit_proc (0); +} + void * GC_start_routine(void * arg) { int dummy; @@ -1200,37 +1303,8 @@ void * GC_start_routine(void * arg) return(result); } -#ifdef GC_PTHREAD_SYM_VERSION - -/* Force constr to execute prior to main(). */ -static void constr (void) __attribute__ ((constructor)); - -static int -(*pthread_create_)(pthread_t *new_thread, - const pthread_attr_t *attr_in, - void * (*thread_execp)(void *), void *arg); - -static void -constr (void) -{ - /* Get a pointer to the real pthread_create. */ - pthread_create_ = dlvsym (RTLD_NEXT, "pthread_create", - GC_PTHREAD_SYM_VERSION); -} - -#define GC_PTHREAD_CREATE_NAME pthread_create -#define GC_PTHREAD_REAL_NAME (*pthread_create_) - -#else - -#define GC_PTHREAD_CREATE_NAME WRAP_FUNC(pthread_create) -#define GC_PTHREAD_REAL_NAME REAL_FUNC(pthread_create) - -#endif - - int -GC_PTHREAD_CREATE_NAME(pthread_t *new_thread, +WRAP_FUNC(pthread_create)(pthread_t *new_thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) { @@ -1291,7 +1365,7 @@ GC_PTHREAD_CREATE_NAME(pthread_t *new_thread, pthread_self()); # endif - result = GC_PTHREAD_REAL_NAME(new_thread, attr, GC_start_routine, si); + result = REAL_FUNC(pthread_create)(new_thread, attr, GC_start_routine, si); # ifdef DEBUG_THREADS GC_printf1("Started thread 0x%X\n", *new_thread); diff --git a/config-ml.in b/config-ml.in index efec5a364c7..4082fe45d3d 100644 --- a/config-ml.in +++ b/config-ml.in @@ -108,11 +108,6 @@ ml_realsrcdir=${srcdir} ml_verbose=--verbose for option in ${ac_configure_args} do - # strip single quotes surrounding individual options - case $option in - \'*\') eval option=$option ;; - esac - case $option in --*) ;; -*) option=-$option ;; @@ -551,6 +546,7 @@ multi-do: flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \ CFLAGS="$(CFLAGS) $${flags}" \ + CCASFLAGS="$(CCASFLAGS) $${flags}" \ FCFLAGS="$(FCFLAGS) $${flags}" \ FFLAGS="$(FFLAGS) $${flags}" \ ADAFLAGS="$(ADAFLAGS) $${flags}" \ diff --git a/config.guess b/config.guess index 52c01be4c86..c085f4f51a2 100755 --- a/config.guess +++ b/config.guess @@ -1,9 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2005-11-11' +timestamp='2006-05-13' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -106,7 +107,7 @@ set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; @@ -206,6 +207,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; @@ -764,7 +768,14 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin @@ -780,7 +791,10 @@ EOF echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[345]*) + echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks @@ -851,7 +865,11 @@ EOF #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) @@ -870,7 +888,11 @@ EOF #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) @@ -919,6 +941,9 @@ EOF sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; @@ -964,7 +989,7 @@ EOF LIBC=gnulibc1 # endif #else - #ifdef __INTEL_COMPILER + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout @@ -974,7 +999,11 @@ EOF LIBC=dietlibc #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit @@ -1263,6 +1292,9 @@ EOF i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 diff --git a/config.sub b/config.sub index eb6b3eb89ce..4d936e23942 100755 --- a/config.sub +++ b/config.sub @@ -1,9 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2005-12-06' +timestamp='2006-05-13' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -119,8 +120,9 @@ esac # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -247,7 +249,8 @@ case $basic_machine in | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -267,16 +270,17 @@ case $basic_machine in | mn10200 | mn10300 \ | mt \ | msp430 \ + | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ @@ -284,9 +288,6 @@ case $basic_machine in | z8k) basic_machine=$basic_machine-unknown ;; - m32c) - basic_machine=$basic_machine-unknown - ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown @@ -294,10 +295,10 @@ case $basic_machine in ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; + ms1) + basic_machine=mt-unknown + ;; - ms1) - basic_machine=mt-unknown - ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. @@ -327,7 +328,7 @@ case $basic_machine in | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ + | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ @@ -349,17 +350,18 @@ case $basic_machine in | mmix-* \ | mt-* \ | msp430-* \ + | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ @@ -370,8 +372,6 @@ case $basic_machine in | ymp-* \ | z8k-*) ;; - m32c-*) - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) @@ -708,7 +708,7 @@ case $basic_machine in os=-msdos ;; ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm @@ -817,6 +817,12 @@ case $basic_machine in pc532 | pc532-*) basic_machine=ns32k-pc532 ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; @@ -873,6 +879,10 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -1115,7 +1125,7 @@ case $basic_machine in sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) @@ -1188,21 +1198,23 @@ case $os in | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku*) + | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1354,6 +1366,9 @@ else # system, and we'll never get to this point. case $basic_machine in + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; @@ -1363,9 +1378,9 @@ case $basic_machine in arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff - ;; + c4x-* | tic4x-*) + os=-coff + ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 diff --git a/config/ChangeLog b/config/ChangeLog index 2707b60900e..3c3343b0623 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,13 +1,44 @@ +2006-07-25 Paolo Bonzini + + PR build/26188 + * stdint.m4: Test for uintptr_t even on systems with uint64_t or uint32_t. + +2006-07-21 Steve Ellcey + + PR target/26792 + * unwind_ipinfo.m4: New. + +2006-07-21 David Daney + + PR libgcj/28426 + * gxx-include-dir.m4: Use target_alias in path for cross build. + +2006-07-18 Paolo Bonzini + + * acx.m4: Support --with-build-libsubdir and AC_SUBST + build_libsubdir. + +2006-06-13 Richard Earnshaw + Alexandre Oliva + + * gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Add optional + argument for where to search for NLS config file. + +2006-05-31 Daniel Jacobowitz + + * gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Provide some + defines otherwise gotten from AM_GNU_GETTEXT. Remove the + po/ prefix from CATALOGS. + 2006-02-14 Paolo Bonzini - Andreas Schwab + Andreas Schwab - * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Use correct program name. - (ACX_CHECK_INSTALLED_TARGET_TOOL): Likewise, and always set $1. + * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Use correct program name. + (ACX_CHECK_INSTALLED_TARGET_TOOL): Likewise, and always set $1. 2006-01-26 Paolo Bonzini - * config/acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Test - $with_build_time_tools. + * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Test $with_build_time_tools. (ACX_PATH_SEP): New. (ACX_TOOL_DIRS): Move here from the gcc directory. (ACX_CHECK_INSTALLED_TARGET_TOOL): New. @@ -16,8 +47,8 @@ 2006-01-02 Paolo Bonzini - PR target/25259 - * stdint.m4: New. + PR target/25259 + * stdint.m4: New. 2005-12-20 Paolo Bonzini @@ -31,7 +62,7 @@ 2005-12-05 Paolo Bonzini - * acx.m4 (GCC_TARGET_TOOL): New. + * acx.m4 (GCC_TARGET_TOOL): New. 2005-09-23 Tom Tromey @@ -40,7 +71,7 @@ 2005-08-12 Paolo Bonzini - * acx.m4 (NCN_CHECK_TARGET_TOOL, NCN_STRICT_CHECK_TOOL, + * config/acx.m4 (NCN_CHECK_TARGET_TOOL, NCN_STRICT_CHECK_TOOL, NCN_STRICT_CHECK_TARGET_TOOL): Remove. (NCN_STRICT_CHECK_TOOLS, NCN_STRICT_CHECK_TARGET_TOOLS): New, based on the deleted macros. diff --git a/config/acx.m4 b/config/acx.m4 index 7c4c21386f1..76456fbe1a9 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -74,8 +74,22 @@ dnl # amount to a lot more with autoconf 2.5x. AC_DEFUN([GCC_TOPLEV_SUBDIRS], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl + +# post-stage1 host modules use a different CC_FOR_BUILD so, in order to +# have matching libraries, they should use host libraries: Makefile.tpl +# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR). +# However, they still use the build modules, because the corresponding +# host modules (e.g. bison) are only built for the host when bootstrap +# finishes. So: +# - build_subdir is where we find build modules, and never changes. +# - build_libsubdir is where we find build libraries, and can be overridden. + # Prefix 'build-' so this never conflicts with target_subdir. build_subdir="build-${build_noncanonical}" +AC_ARG_WITH(build-libsubdir, +[ --with-build-libsubdir=[DIR] Directory where to find libraries for build system], +build_libsubdir="$withval", +build_libsubdir="$build_subdir") # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories if ( test $srcdir = . && test -d gcc ) \ || test -d $srcdir/../host-${host_noncanonical}; then @@ -85,6 +99,7 @@ else fi # No prefix. target_subdir=${target_noncanonical} +AC_SUBST([build_libsubdir]) []dnl AC_SUBST([build_subdir]) []dnl AC_SUBST([host_subdir]) []dnl AC_SUBST([target_subdir]) []dnl diff --git a/config/gettext-sister.m4 b/config/gettext-sister.m4 index d10aae80b6b..e8e6b668416 100644 --- a/config/gettext-sister.m4 +++ b/config/gettext-sister.m4 @@ -19,8 +19,9 @@ INCINTL= AC_SUBST(INCINTL) XGETTEXT= AC_SUBST(XGETTEXT) GMSGFMT= AC_SUBST(GMSGFMT) POSUB= AC_SUBST(POSUB) -if test -f ../intl/config.intl; then - . ../intl/config.intl + +if test -f ifelse([$1],,[../intl],[$1])/config.intl; then + . ifelse([$1],,[../intl],[$1])/config.intl fi AC_MSG_CHECKING([whether NLS is requested]) if test x"$USE_NLS" != xyes; then @@ -46,8 +47,8 @@ else # by the backticks, then collapsed again by the double quotes, # leaving us with one backslash in the sed expression (right # before the dot that mustn't act as a wildcard). - cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!.gmo!"` - lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\.gmo!!"` + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` # The user is allowed to set LINGUAS to a list of languages to # install catalogs for. If it's empty that means "all of them." if test "x$LINGUAS" = x; then @@ -63,4 +64,17 @@ else done LINGUAS="$XLINGUAS" AC_MSG_RESULT($LINGUAS) + + dnl Set up some additional variables which our po/Make-in files + dnl may need. + + dnl For backward compatibility. Some Makefiles may be using these. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + GENCAT=gencat + AC_SUBST(GENCAT) + CATOBJEXT=.gmo + AC_SUBST(CATOBJEXT) fi]) diff --git a/config/gxx-include-dir.m4 b/config/gxx-include-dir.m4 index 0e6e4ffc397..4f54d427f7e 100644 --- a/config/gxx-include-dir.m4 +++ b/config/gxx-include-dir.m4 @@ -17,7 +17,13 @@ case "${with_gxx_include_dir}" in yes) gxx_include_dir='$(libsubdir)/include/c++' ;; *) libstdcxx_incdir='c++/$(gcc_version)' - gxx_include_dir='$(prefix)/include/$(libstdcxx_incdir)' ;; + gxx_include_dir='include/$(libstdcxx_incdir)' + if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir" + else + gxx_include_dir='${prefix}/'"$gxx_include_dir" + fi;; esac ;; *) gxx_include_dir=${with_gxx_include_dir} ;; esac diff --git a/config/stdint.m4 b/config/stdint.m4 index 21ef2ec43ac..07923826c16 100644 --- a/config/stdint.m4 +++ b/config/stdint.m4 @@ -61,14 +61,17 @@ for i in stdint.h $inttype_headers; do break done if test "$acx_cv_header_stdint" = stddef.h; then - acx_cv_header_stdint_kind="(lacks uintptr_t)" + acx_cv_header_stdint_kind="(lacks uintmax_t)" for i in stdint.h $inttype_headers; do + unset ac_cv_type_uintptr_t unset ac_cv_type_uint32_t unset ac_cv_type_uint64_t _AS_ECHO_N([looking for an incomplete stdint.h in $i, ]) AC_CHECK_TYPE(uint32_t,[acx_cv_header_stdint=$i],continue,[#include #include <$i>]) - AC_CHECK_TYPE(uint64_t,,[acx_cv_header_stdint_kind="(lacks uintptr_t and uint64_t)"], [#include + AC_CHECK_TYPE(uint64_t,,,[#include +#include <$i>]) + AC_CHECK_TYPE(uintptr_t,,,[#include #include <$i>]) break done @@ -81,7 +84,7 @@ if test "$acx_cv_header_stdint" = stddef.h; then _AS_ECHO_N([looking for u_intXX_t types in $i, ]) AC_CHECK_TYPE(u_int32_t,[acx_cv_header_stdint=$i],continue,[#include #include <$i>]) - AC_CHECK_TYPE(u_int64_t,,[acx_cv_header_stdint_kind="(u_intXX_t style, lacks u_int64_t)"], [#include + AC_CHECK_TYPE(u_int64_t,,,[#include #include <$i>]) break done diff --git a/config/unwind_ipinfo.m4 b/config/unwind_ipinfo.m4 new file mode 100644 index 00000000000..5587d9c3fb0 --- /dev/null +++ b/config/unwind_ipinfo.m4 @@ -0,0 +1,22 @@ +dnl +dnl Check whether _Unwind_GetIPInfo is available. +dnl +AC_DEFUN([GCC_CHECK_UNWIND_GETIPINFO], [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-exceptions" + AC_MSG_CHECKING([for _Unwind_GetIPInfo]) + AC_CACHE_VAL(gcc_cv_getipinfo, [ + AC_TRY_LINK([extern "C" { extern void _Unwind_GetIPInfo(); }], + [_Unwind_GetIPInfo();], + [gcc_cv_getipinfo=yes], + [gcc_cv_getipinfo=no]) + ]) + if test $gcc_cv_getipinfo = yes; then + AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.]) + fi + AC_MSG_RESULT($gcc_cv_getipinfo) + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE +]) diff --git a/configure b/configure index b751d26ac8f..9179f7fb952 100755 --- a/configure +++ b/configure @@ -12,16 +12,12 @@ ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help + --with-build-libsubdir=[DIR] Directory where to find libraries for build system" +ac_help="$ac_help --enable-libada Builds libada directory" ac_help="$ac_help --enable-libssp Builds libssp directory" ac_help="$ac_help - --with-datarootdir Use datarootdir as the data root directory." -ac_help="$ac_help - --with-docdir Install documentation in this directory." -ac_help="$ac_help - --with-htmldir Install html in this directory." -ac_help="$ac_help --with-mpfr-dir=PATH Specify source directory for MPFR library" ac_help="$ac_help --with-mpfr=PATH Specify directory for installed MPFR library" @@ -30,6 +26,9 @@ ac_help="$ac_help ac_help="$ac_help --with-gmp=PATH Specify directory for installed GMP library" ac_help="$ac_help + --enable-objc-gc enable the use of Boehm's garbage collector with + the GNU Objective-C runtime." +ac_help="$ac_help --with-build-sysroot=sysroot use sysroot as the system root during the build" ac_help="$ac_help @@ -47,6 +46,12 @@ ac_help="$ac_help (and sometimes confusing) to the casual installer" ac_help="$ac_help --enable-werror enable -Werror in bootstrap stage2 and later" +ac_help="$ac_help + --with-datarootdir Use datarootdir as the data root directory." +ac_help="$ac_help + --with-docdir Install documentation in this directory." +ac_help="$ac_help + --with-htmldir Install html in this directory." # Initialize some variables set by options. # The variables have the same names as the options, with @@ -605,7 +610,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:609: checking host system type" >&5 +echo "configure:614: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -626,7 +631,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:630: checking target system type" >&5 +echo "configure:635: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -644,7 +649,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:648: checking build system type" >&5 +echo "configure:653: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -699,7 +704,7 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x," # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:703: checking for a BSD compatible install" >&5 +echo "configure:708: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -752,7 +757,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln works""... $ac_c" 1>&6 -echo "configure:756: checking whether ln works" >&5 +echo "configure:761: checking whether ln works" >&5 if eval "test \"`echo '$''{'acx_cv_prog_LN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -776,7 +781,7 @@ else fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:780: checking whether ln -s works" >&5 +echo "configure:785: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -901,7 +906,6 @@ host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb # libgcj represents the runtime libraries only used by gcj. libgcj="target-libffi \ - target-boehm-gc \ target-zlib \ target-qthreads \ target-libjava" @@ -916,6 +920,7 @@ target_libraries="target-libiberty \ target-libmudflap \ target-libssp \ target-libgfortran \ + target-boehm-gc \ ${libgcj} \ target-libobjc \ target-libada \ @@ -972,8 +977,26 @@ esac *) target_noncanonical=${target_alias} ;; esac - # Prefix 'build-' so this never conflicts with target_subdir. + +# post-stage1 host modules use a different CC_FOR_BUILD so, in order to +# have matching libraries, they should use host libraries: Makefile.tpl +# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR). +# However, they still use the build modules, because the corresponding +# host modules (e.g. bison) are only built for the host when bootstrap +# finishes. So: +# - build_subdir is where we find build modules, and never changes. +# - build_libsubdir is where we find build libraries, and can be overridden. + +# Prefix 'build-' so this never conflicts with target_subdir. build_subdir="build-${build_noncanonical}" +# Check whether --with-build-libsubdir or --without-build-libsubdir was given. +if test "${with_build_libsubdir+set}" = set; then + withval="$with_build_libsubdir" + build_libsubdir="$withval" +else + build_libsubdir="$build_subdir" +fi + # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories if ( test $srcdir = . && test -d gcc ) \ || test -d $srcdir/../host-${host_noncanonical}; then @@ -983,7 +1006,7 @@ else fi # No prefix. target_subdir=${target_noncanonical} - + # Skipdirs are removed silently. skipdirs= @@ -1072,7 +1095,7 @@ case "${host}" in ;; i[3456789]86-*-mingw32*) # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv" - noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool" + noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib" ;; i[3456789]86-*-beos*) noconfigdirs="$noconfigdirs tk itcl libgui gdb" @@ -1154,7 +1177,7 @@ if test x$enable_libgomp = x ; then ;; *-*-netbsd* | *-*-freebsd* | *-*-openbsd*) ;; - *-*-solaris2* | *-*-sysv4* | *-*-irix* | *-*-osf* | *-*-hpux*) + *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11*) ;; *-*-darwin* | *-*-aix*) ;; @@ -1416,32 +1439,18 @@ case "${target}" in # 'target-newlib' will appear in skipdirs. ;; i[3456789]86-*-mingw32*) - target_configdirs="$target_configdirs target-mingw" - noconfigdirs="$noconfigdirs expect target-libgloss ${libgcj}" - - # Can't build gdb for mingw32 if not native. - case "${host}" in - i[3456789]86-*-mingw32) ;; # keep gdb tcl tk expect etc. - *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv" - ;; - esac + target_configdirs="$target_configdirs target-winsup" + noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}" ;; *-*-cygwin*) target_configdirs="$target_configdirs target-libtermcap target-winsup" noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}" # always build newlib if winsup directory is present. - if test -d "$srcdir/winsup"; then + if test -d "$srcdir/winsup/cygwin"; then skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` elif test -d "$srcdir/newlib"; then - echo "Warning: winsup is missing so newlib can't be built." + echo "Warning: winsup/cygwin is missing so newlib can't be built." fi - - # Can't build gdb for Cygwin if not native. - case "${host}" in - *-*-cygwin*) ;; # keep gdb tcl tk expect etc. - *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv" - ;; - esac ;; i[3456789]86-moss-msdos | i[3456789]86-*-moss* | \ i[3456789]86-*-uwin* | i[3456789]86-*-interix* ) @@ -1843,7 +1852,7 @@ else # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1847: checking for $ac_word" >&5 +echo "configure:1856: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1873,7 +1882,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1877: checking for $ac_word" >&5 +echo "configure:1886: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1924,7 +1933,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1928: checking for $ac_word" >&5 +echo "configure:1937: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1956,7 +1965,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1960: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1969: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1967,12 +1976,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 1971 "configure" +#line 1980 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1998,12 +2007,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:2002: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:2011: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:2007: checking whether we are using GNU C" >&5 +echo "configure:2016: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2012,7 +2021,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2016: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2025: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -2031,7 +2040,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:2035: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:2044: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2098,7 +2107,7 @@ fi # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2102: checking for $ac_word" >&5 +echo "configure:2111: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2130,7 +2139,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "gnatbind", so it can be a program name with args. set dummy gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2134: checking for $ac_word" >&5 +echo "configure:2143: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2163,7 +2172,7 @@ fi fi echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6 -echo "configure:2167: checking whether compiler driver understands Ada" >&5 +echo "configure:2176: checking whether compiler driver understands Ada" >&5 if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2195,7 +2204,7 @@ else fi echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6 -echo "configure:2199: checking how to compare bootstrapped objects" >&5 +echo "configure:2208: checking how to compare bootstrapped objects" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2225,38 +2234,6 @@ do_compare="$gcc_cv_prog_cmp_skip" -# Check for html and install-html -# Check whether --with-datarootdir or --without-datarootdir was given. -if test "${with_datarootdir+set}" = set; then - withval="$with_datarootdir" - datarootdir="\${prefix}/${withval}" -else - datarootdir="\${prefix}/share" -fi - - -# Check whether --with-docdir or --without-docdir was given. -if test "${with_docdir+set}" = set; then - withval="$with_docdir" - docdir="\${prefix}/${withval}" -else - docdir="\${datarootdir}/doc" -fi - - -# Check whether --with-htmldir or --without-htmldir was given. -if test "${with_htmldir+set}" = set; then - withval="$with_htmldir" - htmldir="\${prefix}/${withval}" -else - htmldir="\${docdir}" -fi - - - - - - # Check for GMP and MPFR gmplibs= gmpinc= @@ -2325,9 +2302,9 @@ saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $gmpinc" # Check GMP actually works echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6 -echo "configure:2329: checking for correct version of gmp.h" >&5 +echo "configure:2306: checking for correct version of gmp.h" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -2351,12 +2328,12 @@ rm -f conftest* if test x"$have_gmp" = xyes; then echo $ac_n "checking for MPFR""... $ac_c" 1>&6 -echo "configure:2355: checking for MPFR" >&5 +echo "configure:2332: checking for MPFR" >&5 saved_LIBS="$LIBS" LIBS="$LIBS $gmplibs" cat > conftest.$ac_ext < #include @@ -2364,7 +2341,7 @@ int main() { mpfr_t n; mpfr_init(n); ; return 0; } EOF -if { (eval echo configure:2368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -2462,6 +2439,7 @@ if test -d ${srcdir}/gcc; then language= target_libs= lang_dirs= + subdir_requires= boot_language= build_by_default= need_gmp= @@ -2495,6 +2473,21 @@ if test -d ${srcdir}/gcc; then ;; esac + # Disable languages that need other directories if these aren't available. + for i in $subdir_requires; do + test -f "$srcdir/gcc/$i/config-lang.in" && continue + case ,${enable_languages}, in + *,${language},*) + # Specifically requested language; tell them. + { echo "configure: error: The gcc/$i directory contains parts of $language but is missing" 1>&2; exit 1; } + ;; + *) + # Silently disable. + add_this_lang=no + ;; + esac + done + # Disable languages that need GMP if it isn't available. case ,${enable_languages},:${have_gmp}:${need_gmp} in *,${language},*:no:yes) @@ -2556,6 +2549,31 @@ for dir in $configdirs $build_configdirs $target_configdirs ; do fi done +# Check for Boehm's garbage collector +# Check whether --enable-objc-gc or --disable-objc-gc was given. +if test "${enable_objc_gc+set}" = set; then + enableval="$enable_objc_gc" + case ,${enable_languages},:${enable_objc_gc}:${noconfigdirs} in + *,objc,*:*:yes:*target-boehm-gc*) + { echo "configure: error: Boehm's garbage collector was requested yet not supported in this configuration" 1>&2; exit 1; } + ;; +esac +fi + + +# Make sure we only build Boehm's garbage collector if required. +case ,${enable_languages},:${enable_objc_gc} in + *,objc,*:yes) + # Keep target-boehm-gc if requested for Objective-C. + ;; + *) + # Otherwise remove target-boehm-gc depending on target-libjava. + if echo " ${noconfigdirs} " | grep "target-libjava" >/dev/null 2>&1; then + noconfigdirs="$noconfigdirs target-boehm-gc" + fi + ;; +esac + # Remove the entries in $skipdirs and $noconfigdirs from $configdirs, # $build_configdirs and $target_configdirs. # If we have the source for $noconfigdirs entries, add them to $notsupp. @@ -3348,6 +3366,11 @@ case " $target_configdirs " in esac ;; esac +case "$target" in +*-mingw*) + # Can't be handled as Cygwin above since Mingw does not use newlib. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup/mingw -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/mingw/include -isystem $$s/winsup/w32api/include' ;; +esac # Allow the user to override the flags for # our build compiler if desired. @@ -3429,7 +3452,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3433: checking for $ac_word" >&5 +echo "configure:3451: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3469,7 +3492,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3473: checking for $ac_word" >&5 +echo "configure:3491: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3508,7 +3531,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3512: checking for $ac_word" >&5 +echo "configure:3530: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3547,7 +3570,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3551: checking for $ac_word" >&5 +echo "configure:3569: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3587,7 +3610,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3591: checking for $ac_word" >&5 +echo "configure:3609: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3626,7 +3649,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3630: checking for $ac_word" >&5 +echo "configure:3648: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3679,7 +3702,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3683: checking for $ac_word" >&5 +echo "configure:3701: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_EXPECT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3720,7 +3743,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3724: checking for $ac_word" >&5 +echo "configure:3742: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RUNTEST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3768,7 +3791,7 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias- # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3772: checking for $ac_word" >&5 +echo "configure:3790: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3799,7 +3822,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3803: checking for $ac_word" >&5 +echo "configure:3821: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3843,7 +3866,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3847: checking for $ac_word" >&5 +echo "configure:3865: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3874,7 +3897,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3878: checking for $ac_word" >&5 +echo "configure:3896: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3918,7 +3941,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3922: checking for $ac_word" >&5 +echo "configure:3940: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3949,7 +3972,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3953: checking for $ac_word" >&5 +echo "configure:3971: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3993,7 +4016,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3997: checking for $ac_word" >&5 +echo "configure:4015: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4024,7 +4047,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4028: checking for $ac_word" >&5 +echo "configure:4046: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4068,7 +4091,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4072: checking for $ac_word" >&5 +echo "configure:4090: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4099,7 +4122,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4103: checking for $ac_word" >&5 +echo "configure:4121: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4143,7 +4166,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4147: checking for $ac_word" >&5 +echo "configure:4165: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4174,7 +4197,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4178: checking for $ac_word" >&5 +echo "configure:4196: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4218,7 +4241,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4222: checking for $ac_word" >&5 +echo "configure:4240: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4249,7 +4272,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4253: checking for $ac_word" >&5 +echo "configure:4271: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4288,7 +4311,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4292: checking for $ac_word" >&5 +echo "configure:4310: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4319,7 +4342,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4323: checking for $ac_word" >&5 +echo "configure:4341: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4358,7 +4381,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4362: checking for $ac_word" >&5 +echo "configure:4380: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4389,7 +4412,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4393: checking for $ac_word" >&5 +echo "configure:4411: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4433,7 +4456,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4437: checking for $ac_word" >&5 +echo "configure:4455: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4464,7 +4487,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4468: checking for $ac_word" >&5 +echo "configure:4486: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4508,7 +4531,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4512: checking for $ac_word" >&5 +echo "configure:4530: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4539,7 +4562,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4543: checking for $ac_word" >&5 +echo "configure:4561: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4603,7 +4626,7 @@ fi if test -n "$with_build_time_tools"; then for ncn_progname in cc gcc; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:4607: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:4625: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -4620,7 +4643,7 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4624: checking for $ac_word" >&5 +echo "configure:4642: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4651,7 +4674,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4655: checking for $ac_word" >&5 +echo "configure:4673: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4694,7 +4717,7 @@ fi if test -n "$with_build_time_tools"; then for ncn_progname in c++ g++ cxx gxx; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:4698: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:4716: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -4711,7 +4734,7 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4715: checking for $ac_word" >&5 +echo "configure:4733: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4742,7 +4765,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4746: checking for $ac_word" >&5 +echo "configure:4764: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4785,7 +4808,7 @@ fi if test -n "$with_build_time_tools"; then for ncn_progname in gcc; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:4789: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:4807: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -4802,7 +4825,7 @@ if test -z "$ac_cv_prog_GCC_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4806: checking for $ac_word" >&5 +echo "configure:4824: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4833,7 +4856,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4837: checking for $ac_word" >&5 +echo "configure:4855: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4871,7 +4894,7 @@ fi if test -n "$with_build_time_tools"; then for ncn_progname in gcj; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:4875: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:4893: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -4888,7 +4911,7 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4892: checking for $ac_word" >&5 +echo "configure:4910: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4919,7 +4942,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4923: checking for $ac_word" >&5 +echo "configure:4941: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4962,7 +4985,7 @@ fi if test -n "$with_build_time_tools"; then for ncn_progname in gfortran; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:4966: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:4984: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -4979,7 +5002,7 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4983: checking for $ac_word" >&5 +echo "configure:5001: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5010,7 +5033,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5014: checking for $ac_word" >&5 +echo "configure:5032: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5117,7 +5140,7 @@ rm conftest.c if test -z "$ac_cv_path_AR_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for ar in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5121: checking for ar in $with_build_time_tools" >&5 +echo "configure:5139: checking for ar in $with_build_time_tools" >&5 if test -x $with_build_time_tools/ar; then AR_FOR_TARGET=`cd $with_build_time_tools && pwd`/ar ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET @@ -5135,7 +5158,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; then # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5139: checking for $ac_word" >&5 +echo "configure:5157: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5172,7 +5195,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in ar; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5176: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5194: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5189,7 +5212,7 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5193: checking for $ac_word" >&5 +echo "configure:5211: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5220,7 +5243,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5224: checking for $ac_word" >&5 +echo "configure:5242: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5270,7 +5293,7 @@ fi if test -z "$ac_cv_path_AS_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for as in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5274: checking for as in $with_build_time_tools" >&5 +echo "configure:5292: checking for as in $with_build_time_tools" >&5 if test -x $with_build_time_tools/as; then AS_FOR_TARGET=`cd $with_build_time_tools && pwd`/as ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET @@ -5288,7 +5311,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; then # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5292: checking for $ac_word" >&5 +echo "configure:5310: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5325,7 +5348,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in as; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5329: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5347: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5342,7 +5365,7 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5346: checking for $ac_word" >&5 +echo "configure:5364: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5373,7 +5396,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5377: checking for $ac_word" >&5 +echo "configure:5395: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5423,7 +5446,7 @@ fi if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for dlltool in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5427: checking for dlltool in $with_build_time_tools" >&5 +echo "configure:5445: checking for dlltool in $with_build_time_tools" >&5 if test -x $with_build_time_tools/dlltool; then DLLTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dlltool ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET @@ -5441,7 +5464,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5445: checking for $ac_word" >&5 +echo "configure:5463: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5478,7 +5501,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in dlltool; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5482: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5500: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5495,7 +5518,7 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5499: checking for $ac_word" >&5 +echo "configure:5517: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5526,7 +5549,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5530: checking for $ac_word" >&5 +echo "configure:5548: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5576,7 +5599,7 @@ fi if test -z "$ac_cv_path_LD_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for ld in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5580: checking for ld in $with_build_time_tools" >&5 +echo "configure:5598: checking for ld in $with_build_time_tools" >&5 if test -x $with_build_time_tools/ld; then LD_FOR_TARGET=`cd $with_build_time_tools && pwd`/ld ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET @@ -5594,7 +5617,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; then # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5598: checking for $ac_word" >&5 +echo "configure:5616: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5631,7 +5654,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in ld; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5635: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5653: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5648,7 +5671,7 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5652: checking for $ac_word" >&5 +echo "configure:5670: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5679,7 +5702,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5683: checking for $ac_word" >&5 +echo "configure:5701: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5729,7 +5752,7 @@ fi if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for lipo in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5733: checking for lipo in $with_build_time_tools" >&5 +echo "configure:5751: checking for lipo in $with_build_time_tools" >&5 if test -x $with_build_time_tools/lipo; then LIPO_FOR_TARGET=`cd $with_build_time_tools && pwd`/lipo ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET @@ -5747,7 +5770,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5751: checking for $ac_word" >&5 +echo "configure:5769: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5784,7 +5807,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in lipo; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5788: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5806: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5801,7 +5824,7 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5805: checking for $ac_word" >&5 +echo "configure:5823: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5832,7 +5855,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5836: checking for $ac_word" >&5 +echo "configure:5854: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5882,7 +5905,7 @@ fi if test -z "$ac_cv_path_NM_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for nm in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5886: checking for nm in $with_build_time_tools" >&5 +echo "configure:5904: checking for nm in $with_build_time_tools" >&5 if test -x $with_build_time_tools/nm; then NM_FOR_TARGET=`cd $with_build_time_tools && pwd`/nm ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET @@ -5900,7 +5923,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; then # Extract the first word of "nm", so it can be a program name with args. set dummy nm; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5904: checking for $ac_word" >&5 +echo "configure:5922: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5937,7 +5960,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in nm; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:5941: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:5959: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -5954,7 +5977,7 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5958: checking for $ac_word" >&5 +echo "configure:5976: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5985,7 +6008,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5989: checking for $ac_word" >&5 +echo "configure:6007: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6035,7 +6058,7 @@ fi if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for objdump in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6039: checking for objdump in $with_build_time_tools" >&5 +echo "configure:6057: checking for objdump in $with_build_time_tools" >&5 if test -x $with_build_time_tools/objdump; then OBJDUMP_FOR_TARGET=`cd $with_build_time_tools && pwd`/objdump ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET @@ -6053,7 +6076,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6057: checking for $ac_word" >&5 +echo "configure:6075: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6090,7 +6113,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in objdump; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6094: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:6112: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -6107,7 +6130,7 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6111: checking for $ac_word" >&5 +echo "configure:6129: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6138,7 +6161,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6142: checking for $ac_word" >&5 +echo "configure:6160: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6188,7 +6211,7 @@ fi if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for ranlib in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6192: checking for ranlib in $with_build_time_tools" >&5 +echo "configure:6210: checking for ranlib in $with_build_time_tools" >&5 if test -x $with_build_time_tools/ranlib; then RANLIB_FOR_TARGET=`cd $with_build_time_tools && pwd`/ranlib ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET @@ -6206,7 +6229,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6210: checking for $ac_word" >&5 +echo "configure:6228: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6243,7 +6266,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in ranlib; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6247: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:6265: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -6260,7 +6283,7 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6264: checking for $ac_word" >&5 +echo "configure:6282: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6291,7 +6314,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6295: checking for $ac_word" >&5 +echo "configure:6313: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6341,7 +6364,7 @@ fi if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for strip in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6345: checking for strip in $with_build_time_tools" >&5 +echo "configure:6363: checking for strip in $with_build_time_tools" >&5 if test -x $with_build_time_tools/strip; then STRIP_FOR_TARGET=`cd $with_build_time_tools && pwd`/strip ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET @@ -6359,7 +6382,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6363: checking for $ac_word" >&5 +echo "configure:6381: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6396,7 +6419,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in strip; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6400: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:6418: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -6413,7 +6436,7 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6417: checking for $ac_word" >&5 +echo "configure:6435: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6444,7 +6467,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6448: checking for $ac_word" >&5 +echo "configure:6466: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6494,7 +6517,7 @@ fi if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then echo $ac_n "checking for windres in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6498: checking for windres in $with_build_time_tools" >&5 +echo "configure:6516: checking for windres in $with_build_time_tools" >&5 if test -x $with_build_time_tools/windres; then WINDRES_FOR_TARGET=`cd $with_build_time_tools && pwd`/windres ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET @@ -6512,7 +6535,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6516: checking for $ac_word" >&5 +echo "configure:6534: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6549,7 +6572,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then for ncn_progname in windres; do echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 -echo "configure:6553: checking for ${ncn_progname} in $with_build_time_tools" >&5 +echo "configure:6571: checking for ${ncn_progname} in $with_build_time_tools" >&5 if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname} echo "$ac_t""yes" 1>&6 @@ -6566,7 +6589,7 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARGET"; then # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6570: checking for $ac_word" >&5 +echo "configure:6588: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6597,7 +6620,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6601: checking for $ac_word" >&5 +echo "configure:6619: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6645,7 +6668,7 @@ fi RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" echo $ac_n "checking where to find the target ar""... $ac_c" 1>&6 -echo "configure:6649: checking where to find the target ar" >&5 +echo "configure:6667: checking where to find the target ar" >&5 if test "x${build}" != "x${host}" ; then if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6678,7 +6701,7 @@ else fi fi echo $ac_n "checking where to find the target as""... $ac_c" 1>&6 -echo "configure:6682: checking where to find the target as" >&5 +echo "configure:6700: checking where to find the target as" >&5 if test "x${build}" != "x${host}" ; then if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6711,7 +6734,7 @@ else fi fi echo $ac_n "checking where to find the target cc""... $ac_c" 1>&6 -echo "configure:6715: checking where to find the target cc" >&5 +echo "configure:6733: checking where to find the target cc" >&5 if test "x${build}" != "x${host}" ; then if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6744,7 +6767,7 @@ else fi fi echo $ac_n "checking where to find the target c++""... $ac_c" 1>&6 -echo "configure:6748: checking where to find the target c++" >&5 +echo "configure:6766: checking where to find the target c++" >&5 if test "x${build}" != "x${host}" ; then if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6780,7 +6803,7 @@ else fi fi echo $ac_n "checking where to find the target c++ for libstdc++""... $ac_c" 1>&6 -echo "configure:6784: checking where to find the target c++ for libstdc++" >&5 +echo "configure:6802: checking where to find the target c++ for libstdc++" >&5 if test "x${build}" != "x${host}" ; then if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6816,7 +6839,7 @@ else fi fi echo $ac_n "checking where to find the target dlltool""... $ac_c" 1>&6 -echo "configure:6820: checking where to find the target dlltool" >&5 +echo "configure:6838: checking where to find the target dlltool" >&5 if test "x${build}" != "x${host}" ; then if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6849,7 +6872,7 @@ else fi fi echo $ac_n "checking where to find the target gcc""... $ac_c" 1>&6 -echo "configure:6853: checking where to find the target gcc" >&5 +echo "configure:6871: checking where to find the target gcc" >&5 if test "x${build}" != "x${host}" ; then if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6882,7 +6905,7 @@ else fi fi echo $ac_n "checking where to find the target gcj""... $ac_c" 1>&6 -echo "configure:6886: checking where to find the target gcj" >&5 +echo "configure:6904: checking where to find the target gcj" >&5 if test "x${build}" != "x${host}" ; then if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6918,7 +6941,7 @@ else fi fi echo $ac_n "checking where to find the target gfortran""... $ac_c" 1>&6 -echo "configure:6922: checking where to find the target gfortran" >&5 +echo "configure:6940: checking where to find the target gfortran" >&5 if test "x${build}" != "x${host}" ; then if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6954,7 +6977,7 @@ else fi fi echo $ac_n "checking where to find the target ld""... $ac_c" 1>&6 -echo "configure:6958: checking where to find the target ld" >&5 +echo "configure:6976: checking where to find the target ld" >&5 if test "x${build}" != "x${host}" ; then if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -6987,7 +7010,7 @@ else fi fi echo $ac_n "checking where to find the target lipo""... $ac_c" 1>&6 -echo "configure:6991: checking where to find the target lipo" >&5 +echo "configure:7009: checking where to find the target lipo" >&5 if test "x${build}" != "x${host}" ; then if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7010,7 +7033,7 @@ else fi fi echo $ac_n "checking where to find the target nm""... $ac_c" 1>&6 -echo "configure:7014: checking where to find the target nm" >&5 +echo "configure:7032: checking where to find the target nm" >&5 if test "x${build}" != "x${host}" ; then if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7043,7 +7066,7 @@ else fi fi echo $ac_n "checking where to find the target objdump""... $ac_c" 1>&6 -echo "configure:7047: checking where to find the target objdump" >&5 +echo "configure:7065: checking where to find the target objdump" >&5 if test "x${build}" != "x${host}" ; then if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7076,7 +7099,7 @@ else fi fi echo $ac_n "checking where to find the target ranlib""... $ac_c" 1>&6 -echo "configure:7080: checking where to find the target ranlib" >&5 +echo "configure:7098: checking where to find the target ranlib" >&5 if test "x${build}" != "x${host}" ; then if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7109,7 +7132,7 @@ else fi fi echo $ac_n "checking where to find the target strip""... $ac_c" 1>&6 -echo "configure:7113: checking where to find the target strip" >&5 +echo "configure:7131: checking where to find the target strip" >&5 if test "x${build}" != "x${host}" ; then if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7142,7 +7165,7 @@ else fi fi echo $ac_n "checking where to find the target windres""... $ac_c" 1>&6 -echo "configure:7146: checking where to find the target windres" >&5 +echo "configure:7164: checking where to find the target windres" >&5 if test "x${build}" != "x${host}" ; then if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path @@ -7203,7 +7226,7 @@ fi echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:7207: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:7225: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" @@ -7245,6 +7268,37 @@ case $build in ;; esac +# This is aimed to mimic bootstrap with a non-GCC compiler to catch problems. +if test "$GCC" = yes; then + saved_CFLAGS="$CFLAGS" + + # Pass -fkeep-inline-functions for stage 1 if the GCC version supports it. + CFLAGS="$CFLAGS -fkeep-inline-functions" + echo $ac_n "checking whether -fkeep-inline-functions is supported""... $ac_c" 1>&6 +echo "configure:7274: checking whether -fkeep-inline-functions is supported" >&5 + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6; stage1_cflags="$stage1_cflags -fkeep-inline-functions" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + CFLAGS="$saved_CFLAGS" +fi + + # Enable -Werror in bootstrap stage2 and later. # Change the default to "no" on release branches. @@ -7262,6 +7316,38 @@ case ${enable_werror} in esac +# Flags needed to enable html installing and building +# Check whether --with-datarootdir or --without-datarootdir was given. +if test "${with_datarootdir+set}" = set; then + withval="$with_datarootdir" + datarootdir="\${prefix}/${withval}" +else + datarootdir="\${prefix}/share" +fi + + +# Check whether --with-docdir or --without-docdir was given. +if test "${with_docdir+set}" = set; then + withval="$with_docdir" + docdir="\${prefix}/${withval}" +else + docdir="\${datarootdir}/doc" +fi + + +# Check whether --with-htmldir or --without-htmldir was given. +if test "${with_htmldir+set}" = set; then + withval="$with_htmldir" + htmldir="\${prefix}/${withval}" +else + htmldir="\${docdir}" +fi + + + + + + trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure @@ -7428,15 +7514,13 @@ s%@INSTALL_DATA@%$INSTALL_DATA%g s%@LN@%$LN%g s%@LN_S@%$LN_S%g s%@TOPLEVEL_CONFIGURE_ARGUMENTS@%$TOPLEVEL_CONFIGURE_ARGUMENTS%g +s%@build_libsubdir@%$build_libsubdir%g s%@build_subdir@%$build_subdir%g s%@host_subdir@%$host_subdir%g s%@target_subdir@%$target_subdir%g s%@CC@%$CC%g s%@GNATBIND@%$GNATBIND%g s%@do_compare@%$do_compare%g -s%@datarootdir@%$datarootdir%g -s%@docdir@%$docdir%g -s%@htmldir@%$htmldir%g s%@gmplibs@%$gmplibs%g s%@gmpinc@%$gmpinc%g s%@stage1_languages@%$stage1_languages%g @@ -7510,6 +7594,9 @@ s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g s%@MAINT@%$MAINT%g s%@stage1_cflags@%$stage1_cflags%g s%@stage2_werror_flag@%$stage2_werror_flag%g +s%@datarootdir@%$datarootdir%g +s%@docdir@%$docdir%g +s%@htmldir@%$htmldir%g CEOF EOF diff --git a/configure.in b/configure.in index bf37b8058b3..ba3a9bccf7c 100644 --- a/configure.in +++ b/configure.in @@ -134,7 +134,6 @@ host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb # libgcj represents the runtime libraries only used by gcj. libgcj="target-libffi \ - target-boehm-gc \ target-zlib \ target-qthreads \ target-libjava" @@ -149,6 +148,7 @@ target_libraries="target-libiberty \ target-libmudflap \ target-libssp \ target-libgfortran \ + target-boehm-gc \ ${libgcj} \ target-libobjc \ target-libada \ @@ -279,7 +279,7 @@ case "${host}" in ;; i[[3456789]]86-*-mingw32*) # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv" - noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool" + noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib" ;; i[[3456789]]86-*-beos*) noconfigdirs="$noconfigdirs tk itcl libgui gdb" @@ -353,7 +353,7 @@ if test x$enable_libgomp = x ; then ;; *-*-netbsd* | *-*-freebsd* | *-*-openbsd*) ;; - *-*-solaris2* | *-*-sysv4* | *-*-irix* | *-*-osf* | *-*-hpux*) + *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11*) ;; *-*-darwin* | *-*-aix*) ;; @@ -615,32 +615,18 @@ case "${target}" in # 'target-newlib' will appear in skipdirs. ;; i[[3456789]]86-*-mingw32*) - target_configdirs="$target_configdirs target-mingw" - noconfigdirs="$noconfigdirs expect target-libgloss ${libgcj}" - - # Can't build gdb for mingw32 if not native. - case "${host}" in - i[[3456789]]86-*-mingw32) ;; # keep gdb tcl tk expect etc. - *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv" - ;; - esac + target_configdirs="$target_configdirs target-winsup" + noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}" ;; *-*-cygwin*) target_configdirs="$target_configdirs target-libtermcap target-winsup" noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}" # always build newlib if winsup directory is present. - if test -d "$srcdir/winsup"; then + if test -d "$srcdir/winsup/cygwin"; then skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` elif test -d "$srcdir/newlib"; then - echo "Warning: winsup is missing so newlib can't be built." + echo "Warning: winsup/cygwin is missing so newlib can't be built." fi - - # Can't build gdb for Cygwin if not native. - case "${host}" in - *-*-cygwin*) ;; # keep gdb tcl tk expect etc. - *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv" - ;; - esac ;; i[[3456789]]86-moss-msdos | i[[3456789]]86-*-moss* | \ i[[3456789]]86-*-uwin* | i[[3456789]]86-*-interix* ) @@ -1068,26 +1054,6 @@ fi ACX_PROG_GNAT ACX_PROG_CMP_IGNORE_INITIAL -# Check for html and install-html -AC_ARG_WITH(datarootdir, -[ --with-datarootdir Use datarootdir as the data root directory.], -[datarootdir="\${prefix}/${withval}"], -[datarootdir="\${prefix}/share"]) - -AC_ARG_WITH(docdir, -[ --with-docdir Install documentation in this directory.], -[docdir="\${prefix}/${withval}"], -[docdir="\${datarootdir}/doc"]) - -AC_ARG_WITH(htmldir, -[ --with-htmldir Install html in this directory.], -[htmldir="\${prefix}/${withval}"], -[htmldir="\${docdir}"]) - -AC_SUBST(datarootdir) -AC_SUBST(docdir) -AC_SUBST(htmldir) - # Check for GMP and MPFR gmplibs= gmpinc= @@ -1239,6 +1205,7 @@ if test -d ${srcdir}/gcc; then language= target_libs= lang_dirs= + subdir_requires= boot_language= build_by_default= need_gmp= @@ -1272,6 +1239,21 @@ if test -d ${srcdir}/gcc; then ;; esac + # Disable languages that need other directories if these aren't available. + for i in $subdir_requires; do + test -f "$srcdir/gcc/$i/config-lang.in" && continue + case ,${enable_languages}, in + *,${language},*) + # Specifically requested language; tell them. + AC_MSG_ERROR([The gcc/$i directory contains parts of $language but is missing]) + ;; + *) + # Silently disable. + add_this_lang=no + ;; + esac + done + # Disable languages that need GMP if it isn't available. case ,${enable_languages},:${have_gmp}:${need_gmp} in *,${language},*:no:yes) @@ -1333,6 +1315,29 @@ for dir in $configdirs $build_configdirs $target_configdirs ; do fi done +# Check for Boehm's garbage collector +AC_ARG_ENABLE(objc-gc, +[ --enable-objc-gc enable the use of Boehm's garbage collector with + the GNU Objective-C runtime.], +[case ,${enable_languages},:${enable_objc_gc}:${noconfigdirs} in + *,objc,*:*:yes:*target-boehm-gc*) + AC_MSG_ERROR([Boehm's garbage collector was requested yet not supported in this configuration]) + ;; +esac]) + +# Make sure we only build Boehm's garbage collector if required. +case ,${enable_languages},:${enable_objc_gc} in + *,objc,*:yes) + # Keep target-boehm-gc if requested for Objective-C. + ;; + *) + # Otherwise remove target-boehm-gc depending on target-libjava. + if echo " ${noconfigdirs} " | grep "target-libjava" >/dev/null 2>&1; then + noconfigdirs="$noconfigdirs target-boehm-gc" + fi + ;; +esac + # Remove the entries in $skipdirs and $noconfigdirs from $configdirs, # $build_configdirs and $target_configdirs. # If we have the source for $noconfigdirs entries, add them to $notsupp. @@ -2116,6 +2121,11 @@ case " $target_configdirs " in esac ;; esac +case "$target" in +*-mingw*) + # Can't be handled as Cygwin above since Mingw does not use newlib. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup/mingw -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/mingw/include -isystem $$s/winsup/w32api/include' ;; +esac # Allow the user to override the flags for # our build compiler if desired. @@ -2392,6 +2402,21 @@ case $build in stage1_cflags="-g -no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0" ;; esac + +# This is aimed to mimic bootstrap with a non-GCC compiler to catch problems. +if test "$GCC" = yes; then + saved_CFLAGS="$CFLAGS" + + # Pass -fkeep-inline-functions for stage 1 if the GCC version supports it. + CFLAGS="$CFLAGS -fkeep-inline-functions" + AC_MSG_CHECKING([whether -fkeep-inline-functions is supported]) + AC_TRY_COMPILE(,, + [AC_MSG_RESULT([yes]); stage1_cflags="$stage1_cflags -fkeep-inline-functions"], + [AC_MSG_RESULT([no])]) + + CFLAGS="$saved_CFLAGS" +fi + AC_SUBST(stage1_cflags) # Enable -Werror in bootstrap stage2 and later. @@ -2405,4 +2430,24 @@ case ${enable_werror} in esac AC_SUBST(stage2_werror_flag) +# Flags needed to enable html installing and building +AC_ARG_WITH(datarootdir, +[ --with-datarootdir Use datarootdir as the data root directory.], +[datarootdir="\${prefix}/${withval}"], +[datarootdir="\${prefix}/share"]) + +AC_ARG_WITH(docdir, +[ --with-docdir Install documentation in this directory.], +[docdir="\${prefix}/${withval}"], +[docdir="\${datarootdir}/doc"]) + +AC_ARG_WITH(htmldir, +[ --with-htmldir Install html in this directory.], +[htmldir="\${prefix}/${withval}"], +[htmldir="\${docdir}"]) + +AC_SUBST(datarootdir) +AC_SUBST(docdir) +AC_SUBST(htmldir) + AC_OUTPUT(Makefile) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 1583757d1fb..35d29b96f12 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,25 @@ +2006-07-06 Paul Eggert + + Port to hosts whose 'sort' and 'tail' implementations + treat operands with leading '+' as file names, as POSIX + has required since 2001. However, make sure the code still + works on pre-POSIX hosts. + * compare_tests: Don't assume "sort +2" is equivalent to + "sort -k 3", since POSIX 1003.1-2001 no longer requires this. + +2006-06-05 James Lemke + + * dg-cmp-results.sh: New script for comparing DejaGNU logs. + +2006-06-02 Richard Earnshaw + Mike Stump + + * compare_tests: Handle multilibs better. + +2006-05-31 Daniel Jacobowitz + + * texi2pod.pl: Correct handling of absolute @include. + 2006-05-02 Daniel Jacobowitz * texi2pod.pl: Handle -I. diff --git a/contrib/compare_tests b/contrib/compare_tests index a7fc6711efb..bed97429d66 100755 --- a/contrib/compare_tests +++ b/contrib/compare_tests @@ -22,8 +22,8 @@ if [ "$2" = "" ]; then exit 2 fi -sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" >$tmp1 -sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" >$tmp2 +sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp1 +sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp2 before=$tmp1 now=$tmp2 @@ -31,8 +31,14 @@ now=$tmp2 exit_status=0 trap "rm -f $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15 -sort -t ':' +1 "$now" > "$now_s" -sort -t ':' +1 "$before" > "$before_s" +if sort -k 2 /dev/null 2>&1; then + skip1='-k 2' +else + skip1='+1' +fi + +sort -t ':' $skip1 "$now" > "$now_s" +sort -t ':' $skip1 "$before" > "$before_s" grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2 diff --git a/contrib/dg-cmp-results.sh b/contrib/dg-cmp-results.sh new file mode 100755 index 00000000000..f5a4f09a616 --- /dev/null +++ b/contrib/dg-cmp-results.sh @@ -0,0 +1,201 @@ +#!/bin/bash +# Copyright (C) 2006 Free Software Foundation +# +# Analyze changes in GCC DejaGNU test logs for binutils, gcc, gdb, etc. +# Original version written in 2005 by James Lemke . +# +# See usage() below. + +usage () { + cat <&2 +Usage: + dg-cmp-results.sh [-v] [-v] [-v] + names the desired variant, "/" must be written as "\/". + Use the empty string ("") for the first variant in each file. + Output is to stdout. + Non-verbose output is degradation info like PASS->FAIL. + -v adds improvement info like FAIL->PASS. + -v -v adds info like tests that are no longer run. + -v -v -v adds info for tests that have not changed status. + -v -v -v -v is used for debugging. +EOF +} + +verbose=0 +while test "$1" = "-v"; do + verbose=`expr $verbose + 1` + shift +done + +if test $# -ne 3 -o ! -f "$2" -o ! -f "$3"; then + usage + exit 1 +fi + +# Command differences for various platforms. +case `uname -s` in +Darwin|NetBSD) + E=-E # sed + ;; +*) + E=-r # sed + ;; +esac + +# sections are identified by separator lines beginning with '\t\t==='. +# section 0 identifies run date, target, and host. +# section 1 and subsequent contain test data for a target variant. +# -skip to /^Running target/ and use that line to identify the variant. +# -subsequent lines contain the result data. They begin with: +# '(PASS|FAIL|XFAIL|XPASS|UNTESTED|UNSUPPORTED|UNRESOLVED):' +VARIANT="$1" +OFILE="$2" +OBASE=`basename "$2"` +NFILE="$3" +NBASE=`basename "$3"` + +echo "dg-cmp-results.sh: Verbosity is ${verbose}, Variant is \"${VARIANT}\"" +echo + +header="^Running target $VARIANT" + +temp=`grep "$header" $OFILE` +if test -z "$temp"; then + echo "Error: variant \"$VARIANT\" not found in $OFILE." + exit 1 +fi +temp=`grep "$header" $NFILE` +if test -z "$temp"; then + echo "Error: variant \"$VARIANT\" not found in $NFILE." + exit 1 +fi +unset temp + +# Copy out the old file's section 0. +echo "Older log file: $OFILE" +sed $E -e '/^[[:space:]]+===/,$d' $OFILE + +# Copy out the new file's section 0. +echo "Newer log file: $NFILE" +sed $E -e '/^[[:space:]]+===/,$d' $NFILE + +# Create a temporary file from the old file's interesting section. +sed $E -e "1,/$header/d" \ + -e '/^[[:space:]]+===/,$d' \ + -e '/^[A-Z]+:/!d' \ + -e '/^(WARNING|ERROR):/d' \ + -e 's/\r$//' \ + -e 's/^/O:/' \ + $OFILE | + sort -s -t : -k 3b - \ + >/tmp/o$$-$OBASE + +# Create a temporary file from the new file's interesting section. +sed $E -e "1,/$header/d" \ + -e '/^[[:space:]]+===/,$d' \ + -e '/^[A-Z]+:/!d' \ + -e '/^(WARNING|ERROR):/d' \ + -e 's/\r$//' \ + -e 's/^/N:/' \ + $NFILE | + sort -s -t : -k 3b - \ + >/tmp/n$$-$NBASE + +# Merge the two files, then compare adjacent lines. +# Comparison is complicated by tests that may be run multiple times. +# If that case, we assume that the order is the same in both files. +cat <compare-$$.awk +BEGIN { + FS = ":" + queue1 = 1; queueN = 0; status[queue1] = ""; name[queue1] = "" + verbose = verbose + 0 # Make sure it's defined. +} + +# FIFO circular queue +function push(st, nm) { + queueN += 1; status[queueN] = st; name[queueN] = nm +} +function peek() { + result = 0 + if (queueN >= queue1) result = queue1 + return result +} +function drop() { + queue1 += 1 + if (queue1 > queueN) { queue1 = 1; queueN = 0; } +} + +function compare(st, nm) { + old = peek() + if (old == 0) { + # This new test wasn't run last time. + if (verbose >= 2) printf("NA->%s:%s\n", st, nm) + } + else { + # Compare this new test to the first queued old one. + if (verbose >= 4) { + printf("Comparing two lines:\n O:%s:%s\n N:%s:%s\n", + status[old], nm[old], st, nm) + } + if (name[old] != nm) { + # The old test wasn't run this time and + # the new test wasn't run last time. + if (verbose >= 2) { + printf("%s->NA:%s\n", status[old], name[old]) + if (nm != "") printf("NA->%s:%s\n", st, nm) + } + drop() + } + else { + notable = 0 + if (status[old] == st) { + # Status of this test has not changed. + if (verbose >= 3) printf("%s:%s\n", st, nm) + } + else if(status[old] == "PASS" && st == "XFAIL") { + if (verbose >= 1) notable = 1 + } + else if(status[old] == "PASS" || st == "FAIL") { + # Test did pass but doesn't now + # or didn't fail but does now. + notable = 1 + } + else if(st == "PASS") { + # Test didn't pass but does now. + if (verbose >= 1) notable = 1 + } + else if(verbose >= 2) { + # Miscellaneous status change. + notable = 1 + } + if (notable > 0) printf("%s->%s:%s\n", status[old], st, nm) + drop() + } + } +} + +/^O:/ { + while (old = peek()) { + if (name[old] == \$3) break; + # The queued test is no longer run. + compare("", ""); + } + # Save this test for later comparison. + push(\$2, \$3) +} + +/^N:/ { + compare(\$2, \$3) +} + +END { + while (old = peek()) compare("", "") +} +EOF +sort -m -s -t : -k 3b /tmp/o$$-$OBASE /tmp/n$$-$NBASE | + awk -v verbose=$verbose -f compare-$$.awk /dev/stdin + +# Delete the temporary files. +rm -f compare-$$.awk /tmp/o$$-$OBASE /tmp/n$$-$NBASE + +exit 0 diff --git a/contrib/regression/ChangeLog b/contrib/regression/ChangeLog index 32a81dd7042..c0d52161daf 100644 --- a/contrib/regression/ChangeLog +++ b/contrib/regression/ChangeLog @@ -1,3 +1,7 @@ +2006-09-05 Geoffrey Keating + + * btest-gcc.sh: .bad_compare has moved to toplevel from gcc/. + 2006-01-18 Andrew Pinski * btest-gcc.sh: gcc.sum has moved to gcc/testsuite/gcc/gcc.sum. diff --git a/contrib/regression/btest-gcc.sh b/contrib/regression/btest-gcc.sh index db8664cfd9d..7a59392c40b 100755 --- a/contrib/regression/btest-gcc.sh +++ b/contrib/regression/btest-gcc.sh @@ -123,8 +123,8 @@ echo build > $RESULT if [ $H_HOST = $H_TARGET ] ; then $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET || exit 1 if ! make $dashj bootstrap ; then - [ -s gcc/.bad_compare ] || exit 1 - cat gcc/.bad_compare >> $REGRESS || exit 1 + [ -s .bad_compare ] || exit 1 + cat .bad_compare >> $REGRESS || exit 1 make $dashj all || exit 1 fi else diff --git a/contrib/texi2pod.pl b/contrib/texi2pod.pl index 57d1d5bcd63..ed0d102a1a5 100755 --- a/contrib/texi2pod.pl +++ b/contrib/texi2pod.pl @@ -239,8 +239,10 @@ while(<$inf>) { # Try cwd and $ibase, then explicit -I paths. $done = 0; - foreach $path (".", $ibase, @ipath) { - open($inf, "<" . $path . "/" . $file) and ($done = 1, last); + foreach $path ("", $ibase, @ipath) { + $mypath = $file; + $mypath = $path . "/" . $mypath if ($path ne ""); + open($inf, "<" . $mypath) and ($done = 1, last); } die "cannot find $file" if !$done; next; diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index 9ccdf18693b..3db9210599e 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,21 @@ +2006-07-17 Roger Sayle + + * tests/base/errno.h: New file. + * tests/base/architecture/ppc/math.h: Likewise. + * tests/base/ia64/sys/getppdp.h: Likewise. + +2006-07-10 Laurynas Biveinis + + PR bootstrap/20437 + * Makefile.in (configure, config.h.in): Change into $(srcdir) + before autoconf or autoheader call. + +2006-06-23 Steve Ellcey + + PR target/28084 + * inclhack.def (hpux_extern_errno): New. + * fixincl.x: Regenerate. + 2006-05-23 Carlos O'Donell * Makefile.in: Add dvi info html and install-html to .PHONY @@ -34,8 +52,9 @@ 2005-11-24 Bruce Korb - * fixincl.c(write_replacement) "here strings" in AutoGen often/generally - don't have a terminating newline. Check the last byte for '\n'. + * fixincl.c (write_replacement): "here strings" in AutoGen + often/generally don't have a terminating newline. Check the + last byte for '\n'. 2005-11-13 Andreas Jaeger diff --git a/fixincludes/Makefile.in b/fixincludes/Makefile.in index 763dc0563a1..07cfa7338d1 100644 --- a/fixincludes/Makefile.in +++ b/fixincludes/Makefile.in @@ -160,10 +160,10 @@ config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac - autoconf + cd $(srcdir) && autoconf $(srcdir)/config.h.in: @MAINT@ $(srcdir)/configure.ac - autoheader + cd $(srcdir) && autoheader $(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../gcc/aclocal.m4 cp $(srcdir)/../gcc/aclocal.m4 . diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index 7e6c5a65c8b..9b2a10c9b5c 100644 --- a/fixincludes/fixincl.x +++ b/fixincludes/fixincl.x @@ -2,11 +2,11 @@ * * DO NOT EDIT THIS FILE (fixincl.x) * - * It has been AutoGen-ed Saturday February 18, 2006 at 07:55:23 AM PST + * It has been AutoGen-ed Thursday June 22, 2006 at 03:07:03 PM PDT * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT CVS-MERGE THIS FILE, EITHER Sat Feb 18 07:55:23 PST 2006 +/* DO NOT CVS-MERGE THIS FILE, EITHER Thu Jun 22 15:07:03 PDT 2006 * * You must regenerate it. Use the ./genfixes script. * @@ -15,7 +15,7 @@ * certain ANSI-incompatible system header files which are fixed to work * correctly with ANSI C and placed in a directory that GNU C will search. * - * This file contains 195 fixup descriptions. + * This file contains 196 fixup descriptions. * * See README for more information. * @@ -2998,6 +2998,50 @@ static const char* apzHpux_Spu_InfoPatch[] = { /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Hpux_Extern_Errno fix + */ +tSCC zHpux_Extern_ErrnoName[] = + "hpux_extern_errno"; + +/* + * File name selection pattern + */ +tSCC zHpux_Extern_ErrnoList[] = + "|errno.h|"; +/* + * Machine/OS name selection pattern + */ +tSCC* apzHpux_Extern_ErrnoMachs[] = { + "*-hp-hpux10.*", + "*-hp-hpux11.[0-2]*", + (const char*)NULL }; + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zHpux_Extern_ErrnoSelect0[] = + "^[ \t]*extern int errno;$"; + +#define HPUX_EXTERN_ERRNO_TEST_CT 1 +static tTestDesc aHpux_Extern_ErrnoTests[] = { + { TT_EGREP, zHpux_Extern_ErrnoSelect0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Hpux_Extern_Errno + */ +static const char* apzHpux_Extern_ErrnoPatch[] = { + "format", + "#ifdef __cplusplus\n\ +extern \"C\" {\n\ +#endif\n\ +%0\n\ +#ifdef __cplusplus\n\ +}\n\ +#endif", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Huge_Val_Hex fix */ tSCC zHuge_Val_HexName[] = @@ -7933,9 +7977,9 @@ static const char* apzX11_SprintfPatch[] = { * * List of all fixes */ -#define REGEX_COUNT 238 +#define REGEX_COUNT 239 #define MACH_LIST_SIZE_LIMIT 261 -#define FIX_COUNT 195 +#define FIX_COUNT 196 /* * Enumerate the fixes @@ -8011,6 +8055,7 @@ typedef enum { HPUX_LONG_DOUBLE_FIXIDX, HPUX_SYSTIME_FIXIDX, HPUX_SPU_INFO_FIXIDX, + HPUX_EXTERN_ERRNO_FIXIDX, HUGE_VAL_HEX_FIXIDX, HUGE_VALF_HEX_FIXIDX, HUGE_VALL_HEX_FIXIDX, @@ -8489,6 +8534,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { HPUX_SPU_INFO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aHpux_Spu_InfoTests, apzHpux_Spu_InfoPatch, 0 }, + { zHpux_Extern_ErrnoName, zHpux_Extern_ErrnoList, + apzHpux_Extern_ErrnoMachs, + HPUX_EXTERN_ERRNO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aHpux_Extern_ErrnoTests, apzHpux_Extern_ErrnoPatch, 0 }, + { zHuge_Val_HexName, zHuge_Val_HexList, apzHuge_Val_HexMachs, HUGE_VAL_HEX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 5a5c42343b5..c4a689301b8 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -1716,6 +1716,17 @@ fix = { test_text = "extern union mpinfou spu_info[];"; }; +fix = { + hackname = hpux_extern_errno; + mach = "*-hp-hpux10.*"; + mach = "*-hp-hpux11.[0-2]*"; + files = errno.h; + select = "^[ \t]*extern int errno;$"; + c_fix = format; + c_fix_arg = "#ifdef __cplusplus\nextern \"C\" {\n#endif\n%0\n#ifdef __cplusplus\n}\n#endif"; + test_text = " extern int errno;\n"; +}; + /* * Fix glibc definition of HUGE_VAL in terms of hex floating point constant diff --git a/fixincludes/tests/base/architecture/ppc/math.h b/fixincludes/tests/base/architecture/ppc/math.h new file mode 100644 index 00000000000..dcd04236bc9 --- /dev/null +++ b/fixincludes/tests/base/architecture/ppc/math.h @@ -0,0 +1,88 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/architecture/ppc/math.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + +/* This file prototypes the long double functions available on Mac OS + 10.3.9. */ +#ifndef __MATH__ +# undef __APPLE_CC__ +# define __APPLE_CC__ 1345 +# include_next +# undef __APPLE_CC__ +# define __APPLE_CC__ 1 +# ifndef __LIBMLDBL_COMPAT +# ifdef __LONG_DOUBLE_128__ +# define __LIBMLDBL_COMPAT(sym) __asm("_" #sym "$LDBL128") +# else +# define __LIBMLDBL_COMPAT(sym) +# endif /* __LONG_DOUBLE_128__ */ +# endif /* __LIBMLDBL_COMPAT */ +# ifdef __cplusplus + extern "C" { +# endif + extern long double acosl( long double ) __LIBMLDBL_COMPAT(acosl); + extern long double asinl( long double ) __LIBMLDBL_COMPAT(asinl); + extern long double atanl( long double ) __LIBMLDBL_COMPAT(atanl); + extern long double atan2l( long double, long double ) __LIBMLDBL_COMPAT(atan2l); + extern long double cosl( long double ) __LIBMLDBL_COMPAT(cosl); + extern long double sinl( long double ) __LIBMLDBL_COMPAT(sinl); + extern long double tanl( long double ) __LIBMLDBL_COMPAT(tanl); + extern long double acoshl( long double ) __LIBMLDBL_COMPAT(acoshl); + extern long double asinhl( long double ) __LIBMLDBL_COMPAT(asinhl); + extern long double atanhl( long double ) __LIBMLDBL_COMPAT(atanhl); + extern long double coshl( long double ) __LIBMLDBL_COMPAT(coshl); + extern long double sinhl( long double ) __LIBMLDBL_COMPAT(sinhl); + extern long double tanhl( long double ) __LIBMLDBL_COMPAT(tanhl); + extern long double expl( long double ) __LIBMLDBL_COMPAT(expl); + extern long double exp2l( long double ) __LIBMLDBL_COMPAT(exp2l); + extern long double expm1l( long double ) __LIBMLDBL_COMPAT(expm1l); + extern long double logl( long double ) __LIBMLDBL_COMPAT(logl); + extern long double log10l( long double ) __LIBMLDBL_COMPAT(log10l); + extern long double log2l( long double ) __LIBMLDBL_COMPAT(log2l); + extern long double log1pl( long double ) __LIBMLDBL_COMPAT(log1pl); + extern long double logbl( long double ) __LIBMLDBL_COMPAT(logbl); + extern long double modfl( long double, long double * ) __LIBMLDBL_COMPAT(modfl); + extern long double ldexpl( long double, int ) __LIBMLDBL_COMPAT(ldexpl); + extern long double frexpl( long double, int * ) __LIBMLDBL_COMPAT(frexpl); + extern int ilogbl( long double ) __LIBMLDBL_COMPAT(ilogbl); + extern long double scalbnl( long double, int ) __LIBMLDBL_COMPAT(scalbnl); + extern long double scalblnl( long double, long int ) __LIBMLDBL_COMPAT(scalblnl); + extern long double fabsl( long double ) __LIBMLDBL_COMPAT(fabsl); + extern long double cbrtl( long double ) __LIBMLDBL_COMPAT(cbrtl); + extern long double hypotl( long double, long double ) __LIBMLDBL_COMPAT(hypotl); + extern long double powl( long double, long double ) __LIBMLDBL_COMPAT(powl); + extern long double sqrtl( long double ) __LIBMLDBL_COMPAT(sqrtl); + extern long double erfl( long double ) __LIBMLDBL_COMPAT(erfl); + extern long double erfcl( long double ) __LIBMLDBL_COMPAT(erfcl); + extern long double lgammal( long double ) __LIBMLDBL_COMPAT(lgammal); + extern long double tgammal( long double ) __LIBMLDBL_COMPAT(tgammal); + extern long double ceill( long double ) __LIBMLDBL_COMPAT(ceill); + extern long double floorl( long double ) __LIBMLDBL_COMPAT(floorl); + extern long double nearbyintl( long double ) __LIBMLDBL_COMPAT(nearbyintl); + extern long double rintl( long double ) __LIBMLDBL_COMPAT(rintl); + extern long int lrintl( long double ) __LIBMLDBL_COMPAT(lrintl); + extern long long int llrintl( long double ) __LIBMLDBL_COMPAT(llrintl); + extern long double roundl( long double ) __LIBMLDBL_COMPAT(roundl); + extern long int lroundl( long double ) __LIBMLDBL_COMPAT(lroundl); + extern long long int llroundl( long double ) __LIBMLDBL_COMPAT(llroundl); + extern long double truncl( long double ) __LIBMLDBL_COMPAT(truncl); + extern long double fmodl( long double, long double) __LIBMLDBL_COMPAT(fmodl); + extern long double remainderl( long double, long double ) __LIBMLDBL_COMPAT(remainderl); + extern long double remquol( long double, long double, int * ) __LIBMLDBL_COMPAT(remquol); + extern long double copysignl( long double, long double ) __LIBMLDBL_COMPAT(copysignl); + extern long double nanl( const char * ) __LIBMLDBL_COMPAT(nanl); + extern long double nextafterl( long double, long double ) __LIBMLDBL_COMPAT(nextafterl); + extern long double nexttowardl( long double, long double ) __LIBMLDBL_COMPAT(nexttowardl); + extern long double fdiml( long double, long double ) __LIBMLDBL_COMPAT(fdiml); + extern long double fmaxl( long double, long double ) __LIBMLDBL_COMPAT(fmaxl); + extern long double fminl( long double, long double ) __LIBMLDBL_COMPAT(fminl); + extern long double fmal( long double, long double, long double ) __LIBMLDBL_COMPAT(fmal); +# ifdef __cplusplus + } +# endif +#endif /* __MATH__ */ diff --git a/fixincludes/tests/base/errno.h b/fixincludes/tests/base/errno.h new file mode 100644 index 00000000000..e2dd5b1c0db --- /dev/null +++ b/fixincludes/tests/base/errno.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/errno.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( HPUX_EXTERN_ERRNO_CHECK ) +#ifdef __cplusplus +extern "C" { +#endif + extern int errno; +#ifdef __cplusplus +} +#endif + +#endif /* HPUX_EXTERN_ERRNO_CHECK */ diff --git a/fixincludes/tests/base/ia64/sys/getppdp.h b/fixincludes/tests/base/ia64/sys/getppdp.h new file mode 100644 index 00000000000..80fe99ecd4f --- /dev/null +++ b/fixincludes/tests/base/ia64/sys/getppdp.h @@ -0,0 +1,16 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/ia64/sys/getppdp.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( HPUX_SPU_INFO_CHECK ) +#ifdef _KERNEL +extern union mpinfou spu_info[]; +#endif +#endif /* HPUX_SPU_INFO_CHECK */ diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24b0567eea9..51988e233fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,3143 @@ +2006-09-11 Hideki Iwamoto + + * doc/cpp.texi: Fix names of charset options. + +2006-09-10 Andrew Pinski + + PR target/29009 + * config/i386/i386.c (override_options): Use 128-bit + stack boundary always for 64bits. + +2006-09-10 Eric Botcazou + + PR rtl-optimization/28636 + * combine.c (force_to_mode): Test for side-effects before + substituting by zero. + (simplify_shift_const): Likewise for zero or other constants. + +2006-09-10 Steven Bosscher + + PR middle-end/26983 + * builtins.c (expand_builtin_setjmp): Force next_lab to be + preserved. + +2006-09-10 Richard Sandiford + + PR target/29006 + * config/mips/mips-protos.h (mips_mem_fits_mode_p): Declare. + * config/mips/mips.c (mips_expand_unaligned_store): Use the mode + returned by mode_for_size, rather than the mode of src itself, + to choose between 32-bit and 64-bit patterns. + (mips_mem_fits_mode_p): New function. + * config/mips/mips.md (mov_l, mov_r): Use it to check + that the size of the source matches the size of the destination. + (mov_l, mov_r): Likewise. + +2006-09-10 Eric Christopher + + * config/darwin.c (machopic_select_rtx_section): Add CONST_VECTOR + for literal16. + +2006-09-09 Eric Christopher + + PR target/28995 + * config/darwin.c (machopic_select_rtx_section): Add TARGET_64BIT + for literal16. + +2006-09-09 Roger Sayle + Nicolas Setton + + * dwarf2out.c (convert_cfa_to_fb_loc_list): Handle DW_CFA_set_loc. + +2006-09-10 Andreas Schwab + + * config/m68k/m68k.md (bungt_rev): New pattern. + +2006-09-09 Paolo Bonzini + Dale Johannesen + + PR target/26778 + * regclass.c (struct reg_pref): Update documentation. + (regclass): Set prefclass to NO_REGS if memory is the best option. + (record_reg_classes): Cope with a prefclass set to NO_REGS. + +2006-09-08 Eric Christopher + + * config.gcc (i?86-*-darwin): Add 64-bit HWI support. + * config/t-slibgcc-darwin: Support x86_64 multilib. + * config/i386/i386.h (JUMP_TABLES_IN_TEXT_SECTION): + Return 1 for x86_64-darwin. + * config/i386/t-darwin: Add m64 multilib. + (LIB2_SIDITI_CONV_FUNCS): Use. + (LIB2FUNCS_EXTRA): Ditto. + * config/i386/darwin.h: Support x86_64. + * config/i386/i386.c (override_options): Turn on flag_pic + for x86_64-darwin. Disable flag_omit_pointer. + (get_pc_thunk_name): Assert !TARGET_64BIT. + (legitimate_address_p): Disable machopic addressing for + x86_64. + (legitimize_pic_address): Ditto. + (ix86_expand_move): Ditto. + (ix86_expand_call): Ditto. + (machopic_output_stub): Ditto. + * config/darwin.c (machopic_select_section): Support literal16. + (machopic_select_rtx_section): Ditto. + * config/darwin-sections.def: Ditto. + * config/darwin-64.c: New. + +2006-09-08 Joseph S. Myers + + PR c/28504 + * c-tree.h (struct c_arg_info): Add pending_sizes. + * c-parser.c (c_parser_parms_declarator, + c_parser_parms_list_declarator): Initialize pending_sizes. + * c-decl.c (get_parm_info): Initialize pending_sizes. + (get_parm_info): Set pending_sizes. + (grokdeclarator): Call put_pending_sizes for parameters for + function definition only. + +2006-09-07 Jason Merrill + + PR middle-end/27724 + * varasm.c (output_constant): Only strip actual no-op conversions. + + PR target/13685 + * config/i386/i386.c (override_options): Use 128-bit + stack boundary if -msse. + +2006-09-07 Eric Christopher + + * config/darwin.h (MACHO_SYMBOL_FLAG_VARIABLE): Update + comment. + * config/i386/darwin.h (MACHO_SYMBOL_FLAG_VARIABLE): + Redefine. + +2006-09-07 Geoffrey Keating + + * dwarf2out.c: Remove strange characters from comment above + dwarf2out_frame_debug_expr. + +2006-09-07 Eric Christopher + + * config/rs6000/darwin.h (HANDLE_SYSV_PRAGMA): Move from here... + * config/darwin.h: ... to here. + +2006-09-07 H.J. Lu + + * config/i386/i386.c (x86_partial_flag_reg_stall): New. + + * config/i386/i386.h (x86_partial_flag_reg_stall): New. + (TARGET_PARTIAL_FLAG_REG_STALL): New. + + * config/i386/i386.md (*ashldi3_cmp_rex64): Disabled for + TARGET_PARTIAL_FLAG_REG_STALL. + (*ashldi3_cconly_rex64): Likewise. + (*ashlsi3_cmp): Likewise. + (*ashlsi3_cconly): Likewise. + (*ashlsi3_cmp_zext): Likewise. + (*ashlhi3_cmp): Likewise. + (*ashlhi3_cconly): Likewise. + (*ashlqi3_cmp): Likewise. + (*ashlqi3_cconly): Likewise. + (*ashrdi3_cmp_rex64): Likewise. + (*ashrdi3_cconly_rex64): Likewise. + (*ashrsi3_cmp): Likewise. + (*ashrsi3_cconly): Likewise. + (*ashrsi3_cmp_zext): Likewise. + (*ashrhi3_cmp): Likewise. + (*ashrhi3_cconly): Likewise. + (*ashrqi3_cmp): Likewise. + (*ashrqi3_cconly): Likewise. + (*lshrdi3_cmp_rex64): Likewise. + (*lshrdi3_cconly_rex64): Likewise. + (*lshrsi3_cmp): Likewise. + (*lshrsi3_cconly): Likewise. + (*lshrsi3_cmp_zext): Likewise. + (*lshrhi3_cmp): Likewise. + (*lshrhi3_cconly): Likewise. + (*lshrqi2_cmp): Likewise. + (*lshrqi2_cconly): Likewise. + +2006-09-07 Uros Bizjak + + PR target/28946 + * config/i386/i386.md ("*ashldi3_cconly_rex64", "*ashlsi3_cconly", + "*ashlhi3_cconly", "*ashlqi3_cconly", "*ashrdi3_one_bit_cconly_rex64", + "*ashrdi3_cconly_rex64", "*ashrsi3_one_bit_cconly", "*ashrsi3_cconly", + "*ashrhi3_one_bit_cconly", "*ashrhi3_cconly", + "*ashrqi3_one_bit_cconly", "*ashrqi3_cconly", + "*lshrdi3_cconly_one_bit_rex64", "*lshrdi3_cconly_rex64", + "*lshrsi3_one_bit_cconly", "*lshrsi3_cconly", + "*lshrhi3_one_bit_cconly", "*lshrhi3_cconly", + "*lshrqi2_one_bit_cconly", "*lshrqi2_cconly": New patterns to + implement only CC setting effects of shift instructions. + +2006-09-07 Martin Michlmayr + + * doc/contrib.texi: Add myself. + +2006-09-07 Andrew Pinski + + PR middle-end/28862 + * stor-layout.c (relayout_decl): Don't zero the alignment if it + was set by the user. + +2006-09-07 Paolo Bonzini + + PR target/27117 + * config/sh/sh.md (divsi_inv_qitable, divsi_inv_hitable): New patterns. + (divsi_inv_m1): Use them. + (UNSPEC_DIV_INV_TABLE): New constant. + +2006-09-06 James E Wilson + + PR rtl-opt/27883 + * flow.c (update_life_info): If UPDATE_LIFE_LOCAL and PROP_DEATH_NOTES + then call count_or_remove_death_notes. + +2006-09-06 Jason Merrill + + PR c++/27371 + * tree-inline.c (copy_result_decl_to_var): New fn. + (declare_return_variable): Use it. Call declare_inline_vars here. + (expand_call_inline): Not here. + +2006-09-06 Diego Novillo + + * doc/contrib.texi: Update my entry. + +2006-09-06 Nick Clifton + + * config/frv/frv.h (EXTRA_MEMORY_CONSTRAINT): Define. + +2006-09-05 Andrew Pinski + + PR tree-opt/28937 + * tree-flow.h (tree_ssa_unswitch_loops): Return unsigned int. + (canonicalize_induction_variables): Likewise. + (tree_unroll_loops_completely): Likewise. + (tree_ssa_prefetch_arrays): Likewise. + (remove_empty_loops): Likewise. + * tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Return + TODO_cleanup_cfg instead of directly calling + cleanup_tree_cfg_loop. + * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): + Likewise. + (tree_unroll_loops_completely): Likewise. + (remove_empty_loops): Likewise. + * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Likewise. + * tree-ssa-loop.c (tree_ssa_loop_unswitch): Use the return value + of tree_ssa_unswitch_loops. + (tree_ssa_loop_ivcanon): Use the return value of + canonicalize_induction_variables. + (tree_ssa_empty_loop): Use the return value of + remove_empty_loops. + (tree_complete_unroll): Use the return value of + tree_unroll_loops_completely. + (tree_ssa_loop_prefetch): Use the return value of + tree_ssa_prefetch_arrays. + * passes.c (execute_todo): Before Cleanup CFG, set + updating_used_alone and after cleanup CFG, call + recalculate_used_alone. + +2006-09-05 Andrew Pinski + + PR tree-opt/28952 + * tree-vect-transform.c (vectorizable_condition): Move the check + for the type after the check for simple condition. + +2006-09-05 J"orn Rennecke + Kaz Kojima + + PR target/28764 + * mode-switching.c (optimize_mode_switching): Make the destination + block of an abnormal edge have no anticipatable mode. Don't + insert mode switching code at the end of the source block of + an abnormal edge. + +2006-09-05 Paolo Bonzini + + PR rtl-optimization/26847 + * simplify-rtx.c (struct simplify_plus_minus_op_data): Remove ix. + (simplify_plus_minus_op_data_cmp): For REGs, break ties on the regno. + (simplify_plus_minus): Count n_constants while filling ops. Replace + qsort with insertion sort. Before going through the array to simplify + pairs, sort it. Delay early exit until after the first sort, exiting + only if no swaps occurred. Simplify pairs in reversed order, without + special-casing the first iteration. Pack ops after simplifying pairs. + +2006-09-05 Anatoly Sokolov + + * config/avr/avr.c (avr_mcu_types): Add support for at90pwm1 device. + * config/avr/t-avr (MULTILIB_MATCHES): (Ditto.). + * config/avr/avr.h (LINK_SPEC, CRT_BINUTILS_SPECS): (Ditto.). + (avr_rtx_costs): Mark 'outer_code' argument with ATTRIBUTE_UNUSED. + +2006-09-05 Richard Guenther + + PR tree-optimization/28900 + * tree-if-conv.c (find_phi_replacement_condition): Gimplify + compound conditional before creating COND_EXPR condition. + +2006-09-05 Richard Guenther + + PR tree-optimization/28905 + * tree-vrp.c (fix_equivalence_set): Manually implement + !value_ranges_intersect_p to also handle symbolic ranges. + +2006-09-05 Richard Guenther + + PR middle-end/28935 + * tree-ssa-ccp.c (fold_stmt_r): Make sure to fold the condition + of a COND_EXPR. + +2006-09-04 Eric Botcazou + + PR rtl-optimization/27616 + * cse.c (table_size): New static variable. + (new_basic_block): Initialize it to 0. + (remove_from_table): Decrement it. + (insert): Increment it. + (fold_rtx_mem_1): New function, renamed from fold_rtx_mem. + (fold_rtx_mem): Enforce a cap on the recursion depth. Call + fold_rtx_mem_1 if under the cap. + (fold_rtx) : In the associative case, delay a little + the lookup of the equivalent expression and test for equality of the + first operand of the equivalent expression before in turn looking up + an equivalent constant for the second operand. + +2006-09-02 Geoffrey Keating + + Revert this change: + 2006-03-17 Alexandre Oliva + * dwarf2out.c (dwarf2out_stack_adjust): Always track the stack + pointer, instead of assuming it is possible to derive the + correct args size from a call insn. + +2006-09-02 Jakub Jelinek + + PR middle-end/27567 + * builtins.c (fold_builtin_memcpy, fold_builtin_memmove): Remove. + (fold_builtin_mempcpy): Rename to... + (fold_builtin_memory_op): ... this. Optimize one element copy + into an assignment. + (fold_builtin_memset, fold_builtin_bzero, fold_builtin_bcopy): New + functions. + (expand_builtin_strcpy, expand_builtin_strncpy): Handle COMPOUND_EXPR. + (expand_builtin_memcpy, expand_builtin_mempcpy, + expand_builtin_memmove): Likewise. Use fold_builtin_memory_op. + (fold_builtin_1): Handle BUILT_IN_MEMSET, BUILT_IN_BZERO and + BUILT_IN_BCOPY. Use fold_builtin_memory_op for + BUILT_IN_MEM{CPY,PCPY,MOVE}. + +2006-09-01 DJ Delorie + + * config/m32c/cond.md (cbranch4): Defer splitting until after reload. + (stzx_16): Likewise. + ("stzx_24_"): Likewise. + ("stzx_reversed_"): Likewise, and make mode-specific. + ("cmp_op"): New. + (cmp): Change to expander; just save operands. + (b_op): New. + (b): Change to expander, emit compare here. + (s_op): Change to use split and expander. + (s_24_op): Likewise. + (s_): New. + (s__24): New. + (movqicc___): New. + (s): New. + (s_24): New. + * config/m32c/m32c.c (compare_op0, compare_op1): New. + (m32c_pend_compare): New. + (m32c_unpend_compare): New. + (m32c_expand_scc): New. + (m32c_expand_movcc): Emit the compare also. + * config/m32c/predicates.md (mra_nopp_operand): New. + +2006-09-01 J"orn Rennecke + Richard Guenther + Adam Nemet + + PR middle-end/27226 + * builtins.c (get_pointer_alignment): Handle more forms + of base addresses that can be used to derive more precise + information about alignment. + +2006-09-01 Jason Merrill + + PR c++/28899 + * gimplify.c (gimplify_modify_expr_rhs) [BIND_EXPR]: Handle + want_value. + + * gimplify.c (voidify_wrapper_expr): Handle null type. + +2006-09-01 Josh Conner + + PR c++/25505 + * tree-nrv.c (dest_safe_for_nrv_p): New function. + (execute_return_slot_opt): Use it. + +2006-08-31 Josh Conner + + PR c++/25505 + * tree-gimple.c (is_gimple_mem_rhs): Recognize functions + returning aggregates. + +2006-08-31 Zdenek Dvorak + + PR tree-optimization/28839 + * tree-into-ssa.c (prune_unused_phi_nodes): Take into account kills in + blocks in that phi arguments appear. + +2006-08-31 Roger Sayle + + PR other/22313 + * dwarf2out.c (add_fde_cfi): Use a set_loc if the current label is + NULL, otherwise use an advance_loc4 to adjust relative to the + current label. + (output_cfi) : Update the current label. + (dwarf2out_switch_text_section): Reset the current label to avoid + using advance_loc4 over section boundaries. + +2006-08-31 Andreas Krebbel + + PR target/24367 + * config/s390/s390.md ("movsi", "movdi" expander): Accept rtxes like + r12 + SYMBOLIC_CONST. + +2006-08-30 Richard Guenther + + * Makefile.in (see.o): Add $(EXPR_H) dependency. + +2006-08-30 Zdenek Dvorak + + PR rtl-optimization/27735 + * cfgloopmanip.c (fix_loop_placements, fix_bb_placements, unloop): + Add new argument to keep track of whether an irreducible region + was affected. All callers changed. + (fix_irreducible_loops): Removed. + (remove_path): Call mark_irreducible_loops if EDGE_IRREDUCIBLE_LOOP + flags were invalidated. + +2006-08-29 H.J. Lu + + * config/i386/i386.md (*fop_df_comm_mixed): Match DF operands + instead of SF operands. + (*fop_df_comm_sse): Likewise. + (*fop_df_comm_i387): Likewise. + (*fop_df_1_mixed): Likewise. + (*fop_df_1_sse): Likewise. + +2006-08-29 Andrew Pinski + J"orn Rennecke + + PR tree-optimization/17506 + * tree-ssa.c (warn_uninit): If warning about a location outside of + the current function, note where the variable was declared. + +2006-08-28 Zdenek Dvorak + + PR tree-optimization/28411 + * double-int.c (double_int_div): Use double_int_divmod. + (double_int_divmod, double_int_sdivmod, double_int_udivmod, + double_int_mod, double_int_smod, double_int_umod): New functions. + * double-int.h (double_int_divmod, double_int_sdivmod, + double_int_udivmod, double_int_mod, double_int_smod, double_int_umod): + Declare. + * tree-ssa-loop-ivopts.c (constant_multiple_of): Returns the result + in double_int. + (get_computation_aff, get_computation_cost_at): Handle double_int + return type of constant_multiple_of. + +2006-08-28 Kazu Hirata + + PR middle-end/26632 + * convert.c (convert_to_integer): Set TREE_NO_WARNING to 1 on + an implicit conversion. + +2006-08-28 Prafulla Thakare + + * config/h8300/h8300.c (TARGET_DEFAULT_TARGET_FLAGS): New. + +2006-08-27 Roger Sayle + + * ifcvt.c (cheap_bb_rtx_cost_p): Don't speculatively execute + x87 instructions. + +2006-08-27 Kazu Hirata + + * config/i386/crtfastmath.c: Fix a comment typo. + +2006-08-26 Roger Sayle + + * tree.h (CASE_LOW_SEEN, CASE_HIGH_SEEN): New macros for manipulating + temporary visit flags on CASE_LABEL_EXPRs. + * c-common.c (match_case_to_enum): Add function comment. Avoid + O(N) loop, by looking up both CASE_LOW_SEEN and CASE_HIGH_SEEN. + (c_do_switch_warnings): Reorganize to record CASE_LOW_SEEN and + CASE_HIGH_SEEN for enumerated types. If the switch expression is + a constant, only warn if that constant value isn't handled. + +2006-08-26 Joseph S. Myers + + PR c++/24009 + * input.h (restore_input_file_stack): Declare. + (INPUT_FILE_STACK_BITS): Define. + * toplev.c (fs_p, input_file_stack_history, + input_file_stack_restored, restore_input_file_stack): New. + (push_srcloc, pop_srcloc): Check for input_file_stack_tick + overflowing INPUT_FILE_STACK_BITS bits. Save new state of stack. + (pop_srcloc): Don't free old state of stack. + +2006-08-26 David Edelsohn + + PR target/27544 + * doc/extend.texi (PowerPC Variable Attributes): Mention altivec. + (PowerPC Type Attributes): New. + +2006-08-26 Bob Wilson + + * config/xtensa/xtensa.c (function_arg_boundary): New. + (function_arg, xtensa_gimplify_va_arg_expr): Limit alignment to + STACK_BOUNDARY. + * config/xtensa/xtensa.h (FUNCTION_ARG_BOUNDARY): Move code to new + function_arg_boundary function that limits alignment to STACK_BOUNDARY. + +2006-08-26 Jakub Jelinek + + PR middle-end/28683 + * cfgexpand.c (add_reg_br_prob_note): Check if last has exactly + 3 following insns. + +2006-08-25 Volker Reichelt + + * flow.c (verify_wide_reg): Use internal_error for consistency failure. + (verify_local_live_at_start): Likewise. + +2006-08-25 Joseph S. Myers + + PR c/27893 + * gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval, + omp_add_variable): Treat sizes as variable whenever not + INTEGER_CST. + +2006-08-26 Richard Guenther + + PR middle-end/28814 + * fold-const.c (fold_binary): Fold temporary to correct + type before constructing new comparison. + +2006-08-25 Fariborz Jahanian + + PR c/28418 + * c-gimplify.c (gimplify_compound_literal_expr): Don't add + variable again if DECL_SEEN_IN_BIND_EXPR_P. + +2006-08-25 Joseph S. Myers + + PR c/28299 + * c-decl.c (start_function): Don't try to process prototype + information from old declaration that isn't a function. + +2006-08-25 Jan Hubicka + + PR target/28621 + * config/i386/crtfastmath.c (set_fast_math): Force stack alignment. + +2006-08-25 Alan Modra + + PR target/27075 + * config/rs6000/rs6000.c (print_operand): Only use e500 %y syntax + for 8 byte objects. + +2006-08-25 J"orn Rennecke + + PR tree-optimization/16876 + * c-typeck.c (c_convert_parm_for_inlining): Don't take early + exit if PARM doesn't match VALUE. + +2006-08-25 Bob Wilson + + * config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Do not emit a + literal_prefix directive. + (XTENSA_DECLARE_FUNCTION_SIZE): Delete. + * config/xtensa/linux.h (ASM_DECLARE_FUNCTION_SIZE): Delete. + * config/xtensa/elf.h (ASM_DECLARE_FUNCTION_SIZE): Delete. + +2006-08-25 David Edelsohn + + PR target/28753 + * config/rs6000/rs6000.md (movcc_internal1): Change operand 1 + predicate to general_operand. Add 0->y and I->r alternatives. + +2006-08-25 Kazu Hirata + + * doc/tm.texi: Fix a typo. + * predict.c: Fix comment typos. + +2006-08-25 Nick Clifton + + * config/mn10300/mn10300.h (TARGET_CPU_CPP_BUILTINS): Add + assertions of "cpu" and "machine". + +2006-08-24 Andrew Pinski + + PR tree-opt/28807 + * tree-ssa-operands.c (access_can_touch_variable): Don't say + the access through a base which has an alias set of 0 cannot + touch the variable. + +2006-08-24 Bill Wendling + + * doc/tm.texi (TARGET_DEFAULT_PACK_STRUCT): Fixed English. + +2006-08-24 Jan Hubicka + + * reload1.c (emit_reload_insns): Fix yet another typo in my patch. + +2006-08-24 Jan Hubicka + + PR debug/26881 + * cgraph.c: Fix comments. + (cgraph_varpool_mark_needed_node): Mark only variables not already + output to file. + * cgraphunit.c: Update comments; include gt-cgraphunit.h + (cgraph_varpool_assembled_nodes_queue): New static variable. + (cgraph_varpool_assemble_decl): Record output decls for debug out code. + (cgraph_varpool_output_debug_info): New function. + (cgraph_finalize_compilation_unit, cgraph_optimize): Call it. + * Makefile.in: Add gt-cgraphunit.h + +2006-08-24 Jan Hubicka + + * predict.c (probability_reliable_p): New predicate. + (edge_probability_reliable_p, br_prob_note_reliable_p): Likewise. + (predict_loops): Do not predict loop exit with less than 2% + probability. + * basic-block.h (edge_probability_reliable_p, + br_prob_note_reliable_p): Declare. + * ia64.h (ia64_print_operand): Do not disable on-chip branch + prediction when static predictor is not reliable. + * rs6000.c (output_cbranch): Likewise. + +2006-08-23 Stuart Hastings + + PR 28825 + * gcc/config/i386/i386.c (ix86_expand_vector_init_duplicate, + ix86_expand_vector_init_one_nonzero): Remove TARGET_SSE test. + +2006-08-21 Geoffrey Keating + + PR debug/28692 + * dwarf2out.c (rtl_for_decl_init): Don't try to create RTL for + complex values, nor for generic vector values. + +2006-08-22 Richard Guenther + + PR middle-end/28776 + * tree-scalar-evolution.c (fold_used_pointer): Add at_stmt + parameter. Convert arguments to arithmetic expression to the + chrecs type. + (analyze_scalar_evolution_1): Adjust caller. + +2006-08-22 Jan Hubicka + + Patch by Paolo Bonzini + * reload1.c (emit_reload_insns): Fix incorrect bracketing introduced by + my previous patch. + +2006-08-22 Daniel Berlin + + PR tree-optimization/28003 + * tree-ssa-alias.c (compute_may_aliases): Compute call clobbered + before grouping aliases. + +2006-08-22 Roger Sayle + + * config/i386/i386.c (ix86_value_regno): Don't return FIRST_MMX_REG + if !TARGET_MMX, and don't return FIRST_SSE_REG if !TARGET_SSE. + +2006-08-21 Jason Merrill + + PR c++/27115 + * gimplify.c (voidify_wrapper_expr): Handle STATEMENT_LIST as a + wrapper. Loop to handle nested wrappers. + (gimplify_bind_expr): Remove temp parameter. + (gimplify_modify_expr_rhs): Handle CLEANUP_POINT_EXPR, BIND_EXPR + and STATEMENT_LIST on the rhs. + (gimplify_statement_list): Voidify the STATEMENT_LIST. + (gimplify_expr): Pass pre_p to gimplify_statement_list. + (gimplify_target_expr): Remove special BIND_EXPR handling. + +2006-08-21 J"orn Rennecke + + * config/sh/lib1funcs-Os-4-200.asm: Guard entire file with + #if !__SHMEDIA__ . + +2006-08-21 Olivier Hainque + + * gimplify.c (gimplify_init_constructor) : + Arrange for the temporary captures of components overlapping the lhs + to happen before the lhs is possibly cleared. + +2006-08-21 Mark Shinwell + + * config/arm/pr-support.c (__gnu_unwind_execute): Insert " + 1" in + necessary places to pass the correct "number of registers" values + to _Unwind_VRS_Pop. + +2006-08-20 Jan Hubicka + + * tree-ssa-alias.c (eq_ptr_info, ptr_info_hash): New function. + (create_name_tags): Instead of quadratic checking use hashtable. + * bitmap.h: Include hashtab.h. + (bitmap_hash): Declare. + * bitmap.c (bitmap_hash): New function. + +2006-08-20 Jan Hubicka + + PR rtl-optimization/28071 + * tree-optimize.c (tree_rest_of_compilation): Do not remove edges + twice. + * tree-inline.c (copy_bb): Use cgraph_set_call_stmt. + * ipa-inline.c (cgraph_check_inline_limits): Add one_only argument. + (cgraph_decide_inlining, cgraph_decide_inlining_of_small_function, + cgraph_decide_inlining_incrementally): Update use of + cgraph_check_inline_limits. + * cgraph.c (edge_hash, edge_eq): New function. + (cgraph_edge, cgraph_set_call_stmt, cgraph_create_edge, + cgraph_edge_remove_caller, cgraph_node_remove_callees, + cgraph_remove_node): Maintain call site hash. + * cgraph.h (struct cgraph_node): Add call_site_hash. + (cgraph_set_call_stmt): New function. + +2006-08-20 Jan Hubicka + + PR rtl-optimization/28071 + * reload1.c (reg_has_output_reload): Turn into regset. + (reload_as_needed, forget_old_reloads_1, forget_marked_reloads, + choose_reload_regs, emit_reload_insns): Update to new + reg_has_output_reload. + +2006-08-20 Jan Hubicka + + PR middle-end/28779 + * ipa-inline.c (cgraph_decide_inlining, cgraph_early_inlining): Compute + function body sizes. + * cgraphunit.c (cgraph_analyze_function): Don't do so. + +2006-08-20 Danny Smith + + PR target/28648 c: + * tree.c (handle_dll_attribute): Return early if not a + var or function decl. + +2006-08-18 Joseph Myers + + PR target/27565 + * config/rs6000/rs6000.h (LOCAL_ALIGNMENT): For SPE, only adjust + alignment of SPE vector types. + +2006-08-18 Christophe Jaillet + + * tree.c (is_attribute_with_length_p): Remove a duplicated assert. + +2006-08-17 Jakub Jelinek + + PR c/28744 + * cgraph.h (struct cgraph_node): Remove externally_visible + bitfield. + * cgraphunit.c (process_function_and_variable_attributes): Set + local.externally_visible rather than externally_visible. + + PR c/28744 + * c-common.c (handle_externally_visible_attribute): First look + at TREE_CODE and only if it is function or var decl, check for + non-public objects. Don't warn for DECL_EXTERNAL. + * cgraphunit.c (process_function_and_variable_attributes): Warn + if externally_visible attribute is used on non-public object. + +2006-08-17 Jan Hubicka + + PR tree-optimization/27865 + * reload1.c (forget_marked_reloads): New function. + (forget_old_reloads_1): When data are passed, just mark the registers + for later removal. + (reload_as_needed): Use the new mechanizm. + +2006-08-17 Alexandre Oliva + + PR target/28146 + * reload.h (reg_equiv_alt_mem_list): New declaration. + * reload1.c (reg_equiv_alt_mem_list): New definition. + (reload): Initialize it and release it. + (delete_output_reload): Use it. + * reload.c (push_reg_equiv_alt_mem): New function. + (find_reloads_toplev): Call it. + (find_reloads_address, find_reloads_address_1): Likewise. + (find_reloads_subreg_address): Likewise. + +2006-08-17 Maxim Kuvyrkov + + PR rtl-optimization/28489 + * sched-ebb.c (begin_schedule_ready): Create basic block + at the right place. + (advance_target_bb): Skip empty blocks. + * haifa-sched.c (bb_note): Make global. + * sched-int.h (bb_note): Add prototype. + +2006-08-16 Zdenek Dvorak + + PR tree-optimization/27865 + * tree-vrp.c (adjust_range_with_scev): Do not use TYPE_{MIN,MAX}_VALUE + for pointer types. + * tree-scalar-evolution.c (fold_used_pointer_cast, pointer_offset_p, + fold_used_pointer, pointer_used_p): New functions. + (analyze_scalar_evolution_1): Use fold_used_pointer. + * tree-chrec.c (convert_affine_scev): Convert no-op casts correctly. + * tree-ssa-loop-ivopts.c (generic_type_for): Return integral type + for pointers. + +2006-08-17 Paolo Bonzini + + PR c++/28573 + * c-common.c (fold_offsetof_1): Add an argument and recurse down to it + or the INTEGER_CST. Fail on a CALL_EXPR. + (fold_offsetof): Pass new argument to fold_offsetof_1. + * c-parser.c (c_parser_postfix_expression): Don't include a NULL + operand into an INDIRECT_REF. + * c-typeck.c (build_unary_op): Adjust call to fold_offsetof. + +2006-08-16 Zdenek Dvorak + + PR gcov/profile/26570 + * value-prof.c (static_values): Removed. + (tree_find_values_to_profile): Do not set static_values. + (find_values_to_profile): Do not free static_values. + * profile.c (instrument_values): Do not free the values. + (branch_prob): Free the values. + +2006-08-16 Naveen.H.S + + * config/m32c/m32c_lib1.S (__mulsi3): Use only registers for dest. + +2006-08-16 Joseph S. Myers + + PR c/27697 + * c-typeck.c (build_component_ref): Combine qualifiers of + structure or union and field. + +2006-08-16 Zdenek Dvorak + + PR rtl-optimization/28071 + * basic-block.h (bb_dom_dfs_in, bb_dom_dfs_out): Declare. + * dominance.c (bb_dom_dfs_in, bb_dom_dfs_out): New functions. + * tree-into-ssa.c (struct dom_dfsnum): New. + (cmp_dfsnum, find_dfsnum_interval, prune_unused_phi_nodes): New + functions. + (insert_phi_nodes_for): Use prune_unused_phi_nodes instead of + compute_global_livein. + (prepare_block_for_update, prepare_use_sites_for): Mark the uses + in phi nodes in the correct blocks. + +2006-08-16 Zdenek Dvorak + + PR tree-optimization/28364 + * tree-ssa-loop-ivopts.c (aff_combination_to_tree): Handle zero + correctly. + (fold_affine_expr): New function. + (may_eliminate_iv): Use fold_affine_expr. + +2006-08-16 Volker Reichelt + + PR c/27489 + * c-typeck.c (c_start_case): Handle invalid orig_type correctly. + Clean up. + +2006-08-16 Mike Stump + + * doc/invoke.texi (-Wno-deprecated-declarations): Fixup use of pxref. + * doc/cppopts.texi (-MD): Likewise. + +2006-08-15 Danny Smith + + PR c/28287 + * c-common.c (handle_weak_attribute): Ignore and warn if + not a FUNCTION_ or VAR_DECL. + +2006-07-15 Mike Stump + + PR c/28280 + * c-parser.c (c_parser_typeof_specifier): Don't use + c_finish_expr_stmt, open code desired semantics instead. + +2006-08-15 Nick Clifton + + * config.gcc (x86-mingw32): Add a gthr-win32.h including makefile + fragment to tmake_file only if threads are enabled. + * config/i386/t-mingw32 (LIB2FUNCS_EXTRA): Move to... + * config/i386/t-gthr-win32: New file. ... here. + +2006-08-15 Volker Reichelt + + PR c/28649 + * c-parser.c (c_parser_compound_statement_nostart): Reset + parser->error after each statement. + +2006-08-15 Jakub Jelinek + + PR middle-end/28713 + * omp-low.c (lower_omp_parallel): Convert t to + receiver_decl's type. + (expand_omp_parallel): STRIP_NOPS from the MODIFY_EXPR + source before comparison. + + PR middle-end/28724 + * gimplify.c (gimplify_omp_atomic_pipeline): Convert oldival + to itype in assignment to oldival2. + +2006-07-14 Andrew Pinski + + PR c/27490 + PR c/27489 + * c-typeck.c (build_compound_expr): If the second expression + is an error mark, then just return an error mark instead of + creating a COMPOUND_EXPR. + +2006-07-14 Mike Stump + + * Makefile.in (LIBGCC_DEPS): Don't depend on LANGUAGES. + +2006-08-14 Kazu Hirata + + * c-decl.c, var-tracking.c: Fix comment typos. + +2006-08-14 Richard Sandiford + + PR rtl-optimization/28634 + * reorg.c (fill_slots_from_thread): Do not assume A + X - X == A + for floating-point modes unless flag_unsafe_math_optimizations. + +2006-08-13 Alexandre Oliva + Andrew Pinski + + PR c/27184 + * tree.c (build_array_type): Unify array types with + unspecified index_type. + * c-decl.c (grokdeclarator): Make sure we do not modify a + unified incomplete array type. + * c-typeck.c (store_init_value): Create distinct type before + filling in the index type in an initializer from a compound + literal. + + * c-decl.c (grokdeclarator): Remove code where we copy the + array type over. + +2006-08-13 Andrew Pinski + + * tree-pass.h (TODO_update_ssa): Fix which bit is used to take + into account for TODO_dump_cgraph. + (TODO_update_ssa_no_phi): Likewise. + (TODO_update_ssa_full_phi): Likewise. + (TODO_update_ssa_only_virtuals): Likewise. + (TODO_remove_unused_locals): Likewise. + (TODO_set_props): Likewise. + (TODO_update_stmt_usage): Likewise. + +2006-08-13 Dirk Mueller + + * c-common.c (strict_aliasing_warning): Fix formatting. + +2006-08-13 Matthias Klose + + * doc/invoke.texi: Fix spelling errors. + +2006-08-11 Eric Botcazou + + PR rtl-optimization/23454 + * reorg.c (relax_delay_slots): Update comment. + +2006-08-11 Richard Guenther + + PR middle-end/28651 + * simplify-rtx.c (simplify_const_relational_operation): + Simplify A CMP B to A - B CMP 0 only for EQ and NE comparison + codes. + +2006-08-10 Eric Botcazou + + * tree.c (build1_stat): Also propagate the TREE_CONSTANT and + TREE_INVARIANT flags for a VIEW_CONVERT_EXPR. + +2006-08-10 Paul Brook + + * final.c (final_scan_insn): Clear current_insn_predicate before + outputting inline asm. + +2006-08-10 Dorit Nuzman + + PR tree-optimization/26197 + * tree-ssa-alias.c (new_type_alias): Takes additional argument. Calls + get_ref_base_and_extent and overlap_subvar to add only relevant + subvars as may-aliases. + (add_may_alias_for_new_tag): New function, factored out of + new_type_alias. + * tree-vect-transform.c (vect_create_data_ref_ptr): Call new_type_alias + with additional argument. + * tree-flow.h (new_type_alias): Takes additional argument. + +2006-08-09 Nathan Sidwell + + * gcov.c (no_data_file): New flag. + (read_count_file): Set it if data file not present. Assume counts + zero if not found. + (output_lines): Don't name the data file, if there wasn't one. + +2006-08-09 Eric Botcazou + + * config/rs6000/rs6000.c (print_operand) : Fix comment and adjust. + (rs6000_generate_compare): Tweak comments. + * config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): Fix comment. + +2006-08-09 Alexandre Oliva + + * var-tracking.c (enum micro_operation_type): Add MO_COPY. + (var_debug_decl): New function. + (var_reg_set): Follow debug decl link. Add location even if + reg is already known to hold some other variable. + (var_mem_set): Follow debug decl link. + (var_reg_delete_and_set, var_mem_delete_and_set): Follow debug + decl link. Delete other known locations of the variable part + if requested. + (var_reg_delete, var_mem_delete): Delete other known locations + of the variable part if requested. + (same_variable_part_p): New function. + (add_stores): Select MO_COPY when appropriate. + (vt_initialize): Handle it. + (compute_bb_dataflow, emit_notes_in_bb): Likewise. Delete + known locations for MO_SET and MO_CLOBBER. + (find_variable_location_part): New function. + (set_variable_part, delete_variable_part): Use it. + (clobber_variable_part): New function. + * dwarf2out.c (dwarf2out_var_location): Do not follow debug + decl link. + +2006-08-07 Victor Kaplansky + + PR tree-optimization/26969 + * tree-vect-analyze.c (vect_analyze_loop_form): Add check of latch + with an empty list of PHIs. + +2006-08-06 Paolo Bonzini + + PR target/27827 + + * conffig/i386/i386.md: Add peephole2 to avoid "fld %st" + instructions. + +2006-08-06 Andreas Schwab + + * config/m68k/m68k.c (m68k_output_function_epilogue): Fix format + string. Whitespace and comment fixup. + +2006-08-05 Volker Reichelt + + PR c/28502 + * c-decl.c (validate_proto_after_old_defn): Return false on invalid + argument. + + PR c/27721 + * c-typeck.c (build_modify_expr): Test earlier for non-lvalues. + + PR c/28136 + * c-parser.c (c_parser_postfix_expression_after_paren_type): Robustify. + +2006-08-04 Jan Hubicka + + PR target/26655 + PR target/28270 + * reload.c (push_reload): Patch out the mismatching instruction; + return early. + (find_reload): Bail out if the instruction was patched out. + +2006-08-04 Jan Hubicka + + PR tree-optimization/24888 + * tree-inline.c (expand_call_inline): Do not re-record variables. + (declare_inline_vars): Add variable to unexpanded_var_list. + +2006-08-04 John David Anglin + Roger Sayle + + PR rtl-optimization/26244 + * cse.c (fold_rtx): Correctly associate shifts when const_arg1 and/or + inner_const are negative or greater than or equal to the bitsize of + MODE. If SHIFT_COUNT_TRUNCATED is false, the values aren't associated. + Otherwise, the values are masked using GET_MODE_BITSIZE (mode) - 1. + Simplify complicated if statement. For ASHIFT and LSHIFTRT, return + CONST0_RTX (mode) when the new shift count is greater than or equal to + to the bitsize of the object being shifted and XEXP (y, 0) has no side + effects. + +2006-08-04 Kazu Hirata + + * tree-cfg.c: Fix a comment typo. + +2006-08-03 Mark Mitchell + + PR c++/28148 + * varasm.c (output_constant): Give the front end another chance to + expand constants, after stripping NOPs. + +2006-08-03 Jan Hubicka + + * domwalk.c (walk_dominator_tree): Reorganize to non-recursive + implementation. + +2006-08-03 Dorit Nuzman + + PR tree-optimization/27770 + * tree-vectorizer.h (get_vectype_for_scalar_type): Function + declaration removed (moved to tree-flow.h). + (vect_can_force_dr_alignment_p): Likewise. + * tree-flow.h (get_vectype_for_scalar_type): New function declaration + (moved from tree-vectorizer.h). + (vect_can_force_dr_alignment_p): Likewise. + * tree-vectorizer.c (vect_print_dump_info): Allow calling this function + from outside the vectorizer - in particular from cgraph stage. + * tree-vect-analyze.c (vect_compute_data_ref_alignment): Don't increase + the alignment of global arrays when -fsection-anchors is enabled. + * cgraphunit.c (cgraph_increase_alignment): New function. + (cgraph_optimize): Call cgraph_increase_alignment. + +2006-08-03 David Edelsohn + + PR target/27566 + * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Do + not reload a SPE symbol_ref into a lo_sum address. + +2006-08-02 Daniel Jacobowitz + + PR debug/28063 + * dwarf2out.c (prune_unused_types_prune): Move call to + prune_unused_types_update_strings to cover the parent DIE also. + +2006-08-02 Jan Hubicka + + PR gcov/profile/28480 + * tree-cfg.c (change_bb_for_stmt): New function. + (tree_merge_blocks, tree_split_blocks): Use it. + +2006-08-01 Volker Reichelt + + PR c++/28250 + PR c++/28257 + PR c++/28259 + PR c++/28267 + * toplev.c (compile_file): Return early on errorcount or sorrycount. + * cgraphunit.c (cgraph_finalize_compilation_unit): Likewise. + (cgraph_optimize): Likewise. + +2006-08-01 Stuart Hastings + + * rtl.h (UINTVAL) New. + * config/rs6000/rs6000.c (SMALL_INT) Use it. + * testsuite/gcc.dg/20060801-1.c: New. + +2006-08-01 Daniel Jacobowitz + + PR debug/23336 + * c-typeck.c (build_external_type): Mark used enum types. + * dwarf2out.c (dwarf2out_abstract_function): Save and restore + cfun also. + (gen_subprogram_die): Whitespace fix. + +2006-08-01 Jan Hubicka + + * tree-outof-ssa.c (check_replaceable): Do not allocate def_vars + bitmap when not needed. + * tree-ssa-pre.c (bitmap_set_and, bitmap_set_and_compl): Free temporary + bitmaps. + +2006-08-01 Dirk Mueller + + * tree-vrp.c (fix_equivalence_set): Avoid bitmap memory leak. + +2006-07-31 Volker Reichelt + + * Makefile.in: Revert part of previous patch: + Replace $(VARRAY_H) by varray.h in definition of BASIC_BLOCK_H + and REGS_H. + +2006-07-30 Eric Christopher + + PR target/27543 + * doc/extend.texi (i386 Variable Attributes): Add anchor. + (PowerPC Variable Attributes): New section. + +2006-07-30 Atsushi Nemoto + + PR target/28126 (partial fix) + * config/mips/mips.md (tls_get_tp_): Set can_delay to no. + +2006-07-28 Jan Hubicka + + PR rtl-optimization/28071 + * cfgrtl.c (rtl_delete_block): Free regsets. + * flow.c (allocate_bb_life_data): Re-use regsets if available. + +2006-07-28 Volker Reichelt + + * Makefile.in: Use $(HEADER_H) instead of header.h in dependencies + and variables used in dependencies. + +2006-07-27 Arjan van de Ven + + * config/i386/i386.md (stack_tls_protect_set_di) Use %gs rather than + %fs for -mcmodel=kernel. + (stack_tls_protect_test_di): Likewise. + +2006-07-27 Carlos O'Donell + + * Makefile.in: Use mkinstalldirs. + +2006-07-27 H.J. Lu + + PR driver/28437 + * opts-common.c (prune_options): Skip joined switches. + +2006-07-27 Jan Hubicka + + PR rtl-optimization/28071 + * cselib.c (cselib_process_insn): Don't remove useless values too + often for very large hashtables. + +2006-07-27 Jan Hubicka + + PR rtl-optimization/28071 + * global.c (greg_obstack): New obstack. + (allocate_bb_info): Use it. + (free_bb_info): Likewise. + (modify_reg_pav): Likewise. + +2006-07-27 Roger Sayle + + * builtins.c (fold_fixed_mathfn): When long and long long are the + same size, canonicalize llceil*, llfloor*, llround* and llrint* + functions to their lceil*, lfloor*, lround* and lrint* forms. + +2006-07-27 Kazuhiro Inaoka + + PR gcc/28508 + * config/m32r/m32r.md (branch_insn): Reduce pc range for short + branch. + (rev_branch_insn): Likewise. + +2006-07-27 Jan Hubicka + + PR rtl-optimization/28071 + * regmove.c (reg_is_remote_constant_p): Avoid quadratic behaviour. + (reg_set_in_bb, max_reg_computed): New static variables. + (regmove_optimize): Free the new array. + (fixup_match_1): Update call of reg_is_remote_constant_p. + +2006-07-26 Jan Hubicka + + PR tree-optimization/27882 + * cgraph.c (cgraph_remove_node): Clear needed, reachable, next, previous + and decl fields. + * cgraphunit.c (cgraph_reset_node): Expect cgraph_remove_node to kill + next pointer + (cgraph_analyze_compilation_unit): Likewise. + * ipa.c (cgraph_remove_unreachable_nodes): Likewise. + * ipa-inline.c (cgraph_decide_recursive_inlining): Likewise. + (cgraph_early_inlinine): Make order garbage collected. + * Makefile.in (gt-ipa-inline): New garbagecollected file. + +2006-07-26 Daniel Jacobowitz + + * dbxout.c (output_types_sort): Add a comment. + (output_used_types): Free the VEC. + +2006-07-26 Daniel Jacobowitz + + * function.c (reorder_fix_fragments): Delete. + (reorder_blocks): Don't call it. + (reorder_blocks_1): Put all subblocks under the origin block. + +2006-07-26 Zdenek Dvorak + + PR rtl-optimization/27907 + * expr.c (force_operand): Use convert_move to handle FLOAT_EXTEND and + FLOAT_TRUNCATE. + +2006-07-25 Roger Sayle + + PR middle-end/28473 + * convert.c (convert_to_integer): When transforming (T)foo(x) into + bar(x) check that bar's result type can represent all the values of T. + +2006-07-25 Zdenek Dvorak + + * tree-chrec.c (chrec_convert_aggressive): Return NULL on failure. + +2006-07-25 Nick Clifton + + * ggc-page.c (NUM_SIZE_LOOKUP): New constant - the length of the + size_lookup[] array. + (ggc_alloc_stat): Use NUM_SIZE_LOOKUP. + (ggc_pch_count_object): Likewise. + (ggc_pch_alloc_object): Likewise. + (ggc_pch_write_object): Likewise. + (init_ggc): Do not attempt to initialize entries in the + size_lookup[] array for objects whose size is greater than than + the length of the array. + +2006-07-25 Daniel Jacobowitz + + * dbxout.c (output_used_types_helper): Push queued types + on a VEC. + (output_types_sort): New. + (output_used_types): Collect used types on a VEC and sort them + before emission. + +2006-07-24 Richard Guenther + + PR middle-end/28463 + * cgraph.c (cgraph_remove_node): Do not check if dumps + are enabled. + * cgraphunit.c (cgraph_optimize): Likewise. + +2006-07-24 Jan Hubicka + + PR rtl-optimization/28071 + * tree-cfg.c (tree_split_block): Do not allocate new stmt_list nodes. + * tree-iterator.c (tsi_split_statement_list_before): Do not crash when + splitting before first stmt. + +2006-07-24 Jan Hubicka + + PR rtl-optimization/28071 + * ipa-inline.c (update_caller_keys): Remove edges that + are no longer inline candidates. + +2006-07-23 Daniel Jacobowitz + + PR debug/27473 + * dbxout.c (output_used_types_helper, output_used_types): New. + (dbxout_symbol): Call output_used_types. + +2006-07-23 Jan Hubicka + + PR c/25795 + PR c++/27369 + * cgraph.c (cgraph_varpool_nodes): Export. + (decide_is_variable_needed): Ignored "used" attribute in + unit-at-a-time mode. + * cgraph.h (cgraph_varpool_nodes): Declare. + * cgraphunit.c (decide_is_function_needed): Ignored "used" attribute in + unit-at-a-time mode. + +2006-07-23 Roger Sayle + + PR target/28247 + * gthr-solaris.h: Prototype __gthrw forms of thr_self, mutex_init and + mutex_destroy even when !_LIBOOBJC. Remove duplicate prototype of + the __gthrw form of thr_keycreate. + (__gthread_key_delete): Silence the unused argument warning. + +2006-07-23 Steven Bosscher + + PR debug/25468 + * config/elfos.h (ASM_OUTPUT_ASCII): Remove 'register' marks. + Cache the last found '\0' marker to avoid quadratic behavior. + +2006-07-23 Jan Hubicka + + * i386.md (subsi_3_zext): Fix output template. + +2006-07-21 Mike Stump + + * doc/invoke.texi (C++ Dialect Options): Note that + -fvisibility-inlines-hidden doesn't affect explicitly + instantiationed inline methods. + +2006-07-20 Roger Sayle + + * config.gcc (i[34567]86-*-solaris2*): Add usegas.h to $tm_file + if the target assembler is GNU binutils' gas. + * config/i386/sol2-10.h (ASM_SPEC): Check USE_GAS to determine + whether to pass GNU gas or native as command line options. + +2006-07-20 Jason Merrill + + * tree.c (remove_attribute): New fn. + * tree.h: Declare it. + +2006-07-20 Paul Brook + + PR 27363 + * cse.c (cse_insn): Add destination addresses to hash table. Check if + they are invalidated by this instruction. + +2006-07-21 Danny Smith + + PR target/28427 + * config/i386/cygming.h (MAX_OFILE_ALIGNMENT): Define. + +2006-07-20 Eric Christopher + + PR target/26877 + * config/i386/i386.h (OPTION_DEFAULT_SPECS): Reorder. + +2006-07-19 Eric Christopher + + * config/t-slibgcc-darwin (stmp-lipo): Remove. + Rewrite dependencies for libgcc_s.1.dylib. + +2006-07-19 Jakub Jelinek + + * except.c (duplicate_eh_regions_1): Clear next_peer. + +2006-07-17 Nathan Sidwell + + * doc/invoke.texi (RS/6000 and PowerPC Options): Document that + -mlongcall does not guarantee all calls will be long. + * doc/extend.texi (long_call/short_call): Document that longcall + does not guarantee a long call will be used. + (longcall/shortcall): Likewise. + +2006-07-18 Roger Sayle + + PR middle-end/28283 + * expmed.c (expand_shift): Additionally check that the shift_cost + is not MAX_COST and that INTVAL(op1) is less than MAX_BITS_PER_WORD + before implementing a LSHIFT_EXPR as a sequence of additions. + * config/sh/sh.c (shift_costs): Return MAX_COST to inform the + middle-end that DImode shifts need to be synthesized by expand. + +2006-07-18 Diego Novillo + + PR 28410 + * tree-ssa-operands.c (access_can_touch_variable): Update + comment. + Return true if ALIAS is .GLOBAL_VAR. + +2006-07-18 David Daney + + * gcc.c (display_help): Fix typo in help text. + +2006-07-18 Olivier Hainque + + * tree.h (categorize_ctor_elements): Adjust prototype and add + descriptive comment, both in accordance with the interface change + described below. + * varasm.c (constructor_static_from_elts_p): New function. + Whether a constructor node is a valid static constant initializer + if all its elements are. + (initializer_constant_valid_p) : Use it. + * output.h: Declare it. + * expr.c (categorize_ctor_elements_1): Return whether the constructor + is a valid constant initializer instead of computing the number of + non-constant elements. Use constructor_static_from_elts_p for this + purpose. Replace the head comment with an indication that this is a + helper for categorize_ctor_elements. + (categorize_ctor_elements): Same interface change as for the _1 + helper. Former head comment from this helper moved here, adjusted to + account for the interface changes. + (mostly_zeros_p): Adjust call to categorize_ctor_elements. + (all_zeros_p): Likewise. + * gimplify.c (gimplify_init_constructor): Decide whether we can make + static versions of the constructor from the categorize_ctor_elements + return value instead of the formerly computed number of non-constant + elements. + +2006-07-18 Paolo Bonzini + + * configure: Regenerate. + * Makefile.in (build_libsubdir): New configure substitution + (build_libobjdir): New variable. + (BUILD_LIBIBERTY): Use it. + +2006-07-18 Volker Reichelt + + PR c/28286 + * c-pragma.c (handle_pragma_pack): Handle invalid constants. + +2006-07-18 Alexandre Oliva + + PR c/26993 + * c-common.c (handle_weakref_attribute): Ignore attribute in + the same conditions the alias attribute is ignored. + +2006-07-17 Carlos O'Donell + + * dbxout.c (dbxout_function_end): Do not increment scope_labelno. + (dbxout_begin_prologue): Increment scope_labelno. + +2006-07-17 Richard Henderson + + PR 27889 + * tree-nested.c (create_tmp_var_for): Set DECL_COMPLEX_GIMPLE_REG_P + if needed. + +2006-07-17 Roger Sayle + Rainer Orth + + * config/i386/gmon-sol2.c: Silence compilation warnings by partially + synchronizing code with config/sparc/gmon-sol2.c. Remove #if 0 + blocks. #include "tconfig.h" and "tsystem.h" to prototype system + functions such as sbrk, write, etc.. Add function prototypes. + Convert function declarations from K&R to ISO C. Cast pointers + to "long" and "unsigned long" instead of "int" and "unsigned int". + Convert tokens following #endif into comments. + +2006-07-17 Toon Moene + + * invoke.texi: Remove mention of f77; Reformat table for + inline parameter options correctly; mention that -malign-double + is default on x86-64 targets. + +2006-07-17 Zdenek Dvorak + + * tree-chrec.c (avoid_arithmetics_in_type_p): New. + (convert_affine_scev, chrec_convert_aggressive): Use + avoid_arithmetics_in_type_p. Do not check for the subtypes + separately. + +2006-07-17 Richard Sandiford + + PR middle-end/28403 + * optabs.c (expand_doubleword_shift): Wrap the call to + do_compare_rtx_and_jump with NO_DEFER_POP and OK_DEFER_POP. + +2006-07-17 Richard Sandiford + + PR middle-end/28402 + * optabs.c (expand_binop): Pass next_methods rather than methods + to expand_doubleword_shift. + +2006-07-17 J"orn Rennecke + + PR other/28251 + * tree.h (dump_addr): Declare. + * print-tree.c (dump_addr): New function. + (print_node_brief, print_node): Use it. + * print-rtl.c (print_rtx): Likewise. + * common.opt (-fdump-noaddr): New option. + * doc/invoke.texi (-fdump-noaddr): Document. + * loop-unroll.c (si_info_hash): Make hash independent of addresses. + (ve_info_hash): Likewise. + +2006-07-13 Andrew Haley + + PR tree-optimization/19505 + * tree-cfgcleanup.c (tree_forwarder_block_p): If we have an EH + edge leaving this block, make sure that the destination of this + block has only one predecessor. + +2006-07-17 Richard Guenther + + PR tree-optimization/28238 + * tree-inline.c (copy_bb): Check if we produced valid + gimple copying and substituting a stmt. If not, gimplify + it. + +2006-07-16 Eric Botcazou + + * optabs.c (maybe_encapsulate_block): New function extracted from... + (emit_libcall_block): ...here. Invoke it on the block of insns to + maybe emit REG_LIBCALL/REG_RETVAL notes around the block. + (emit_no_conflict_block): Likewise. + +2006-07-16 Eric Botcazou + + * doc/install.texi (sparc-sun-solaris2*): Add GMP version number. + +2006-07-15 Roger Sayle + + * tree-gimple.c (is_gimple_stmt): Sink test of IS_EMPTY_STMT into + a new NOP_EXPR case of the switch statement. + +2006-07-15 Kaz Kojima + + PR middle-end/28160 + * stor-layout.c (place_field): Take the bit field with + an excessive size into account in the ms-bitfiled case. + + PR middle-end/28161 + * stor-layout.c (place_field): Use DECL_BIT_FIELD_TYPE of + the previous bit field. + +2006-07-14 Eliot Dresselhaus + + PR target/27287 + * config/rs6000/spe.md (frob_di_df_2): Add m->r alternative. + +2006-07-14 Ulrich Weigand + + * config/s390/linux-unwind.h (s390_fallback_frame_state): Detect + signal frames correctly even when the signal was installed with + sa_restorer set. + +2006-07-14 Carlos O'Donell + + * dbxout.c (dbxout_begin_prologue): Emit LFBB label at function start. + (dbxout_function_end): Use local label LFBB. Remove hook + DBX_OUTPUT_NFUN. + (dbxout_source_line): Use local label LFBB. + (dbxout_block): Likewise. + (dbx_output_lbrac): Remove hook DBX_OUTPUT_LBRAC. + (dbx_output_rbrac): Remove hook DBX_OUTPUT_RBRAC. + * config/rs6000/linux64.h: Remove DBX_OUTPUT_LBRAC, DBX_OUTPUT_RBRAC, + and DBX_OUTPUT_NFUN. + +2006-07-13 Janis Johnson + + * doc/sourcebuild.texi (Test Directives): Document dg-shouldfail. + +2006-07-13 Jan Hubicka + + * cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call + align_variable. + * output.h (align_variable): Declare. + * varasm.c (align_variable): Export. + * value-prof.c (tree_value_profile_transformations): Recompute iterator + when basic block changed. + +2006-07-13 Nick Clifton + + * config/sh/sh.c (sh_reorg): Ignore deleted insns whilst + walking the LOG_LINKS chain. + +2006-07-12 Geoffrey Keating + + * doc/invoke.texi (C++ Dialect Options): Explain difference + between -fvisibility-inlines-hidden and setting hidden + visibility explicitly. + +2006-07-12 Eric Christopher + + * config/t-slibgcc-darwin (SHLIB_LINK): Don't munge stmp-lipo. + (stmp-lipo): Depend on libgcc.a. + +2006-07-12 Kazu Hirata + + * tree.c: Fix a comment typo. + +2006-07-12 Naveen.H.S + + * config/m32c/muldiv.md (umulhisi3_c): Use only registers for + dest. + (umulhisi3_r): Likewise. + +2006-07-12 Paolo Carlini + + PR libstdc++/27878 + * doc/install.texi (mips-sgi-irix6): Add note about IRIX 6.5.x, + x < 19, vs wchar_t support. + +2006-07-12 Nick Clifton + + * config/sh/sh.h (SUBTARGET_ASM_RELAX_SPEC): Use -isa=sh4-up + instead of -isa=sh4. + +2006-07-12 Mike Stump + + * protoize.c (edit_fn_definition): Add volatile to clean_text_p. + +2006-07-10 Eric Christopher + + * config/t-slibgcc-darwin: Rewrite. + +2006-07-10 Laurynas Biveinis + + PR bootstrap/20437 + * Makefile.in (configure): add missing aclocal.m4 and acinclude.m4 + dependencies. + +2006-07-08 Matthias Klose + + * doc/sourcebuild.texi: Fix typo. + +2006-07-07 Mike Stump + + * toplev.c (process_options): Don't give -ffunction-sections may + affect debugging warning for Mach-O. + +2006-07-07 James E Wilson + + * config/mips/mips.md (cpu): Add sb1a. + * config/mips/sb1.md: Modify almost all patterns to accept sb1a in + addition to sb1. Adjust comments to clarify SB-1A differences from + SB-1. + (ir_sb1a_load): New. Modify bypasses to use it. + (ir_sb1a_simple_alu): Likewise. + * config/mips/mips.c (mips_cpu_info_table): Add sb1a. + (mips_rtx_cost_data): Add PROCESSOR_SB1A support. + (mips_issue_rate): Add PROCESSOR_SB1A. + (mips_multipass_dfa_lookahead): Use TUNE_SB1 instead of PROCESSOR_SB1. + * config/mips/mips.h (processor_type): Add PROCESSOR_SB1A. + (TARGET_SB1): Add PROCESSOR_SB1A check. + (TUNE_SB1): Likewise. + + * config/mips/mips-protos.h (mips_store_data_bypass_p): New. + * config/mips/mips.c (mips_store_data_bypass_p): New. + * config/mips/sb1.md: Use mips_store_data_bypass_p instead of + store_data_bypass_p. + +2006-07-08 Paul Brook + + PR target/27991 + * config/m68k/m68k.md: Add r-m patterns for 68881 movxf. + +2006-07-07 Richard Guenther + + PR middle-end/28268 + * tree.h (build_one_cst): Declare. + * tree.c (build_one_cst): New function. + * tree-ssa-math-opts.c (get_constant_one): Remove. + (insert_reciprocals): Use build_one_cst. + * fold-const.c (fold_plusminus_mult): Likewise. + +2006-07-07 Roger Sayle + + * pointer-set.c (pointer_set_destroy): Correct whitespace. + * cfgloopanal.c (dump_graph): Likewise. + * dojump.c (discard_pending_stack_adjust): Likewise. + * fix-header.c (TARGET_EXTRA_INCLUDE, TARGET_EXTRA_PRE_INCLUDES): + Likewise. + * alloc-pool.c (dump_alloc_pool_statistics): Likewise. + * function.c (finalize_block_changes): Likewise. + * gcc-common.c (ggc_free_overhead, dump_gcc_loc_statistics): Likewise. + * tree-ssa-dce.c (clear_control_dependence_bitmap): Likewise. + * rtl.c (dump_rtx_statistics): Likewise. + * tree-ssa-structalias.c (sort_fieldstack, init_alias_heapvars): + Likewise. + * varray.c (dump_varray_statistics): Likewise. + * dfp.c (encode_decimal32, decode_decimal32, encode_decimal64, + decode_decimal64, encode_decimal128, decode_decimal128, + decimal_real_to_decimal): Likewise. + +2006-07-07 Richard Guenther + + PR tree-optimization/28187 + * tree-vrp.c (vrp_operand_equal_p): New function. + (vrp_bitmap_equal_p): Likewise. + (update_value_range): Use them to compare old and new + max and min values. + +2006-07-06 Roger Sayle + + * c-parser.c (c_parser_skip_to_end_of_block_or_statement): Add + a default case to switch statement to silence compiler warnings. + +2006-07-06 Roger Sayle + + PR target/27968 + * configure.ac (HAVE_AS_IX86_FFREEP): On x86 targets check whether + the configured assembler supports the x87's ffreep mnemonic. + * configure: Regenerate. + * config.in: Regenerate. + + * config/i386/i386.c (output_387_ffreep): New function. + (output_fp_compare): Use output_387_ffreep to emit ffreep insns. + (output_387_reg_move): Likewise. + +2006-07-06 Paul Eggert + + Port to hosts whose 'sort' and 'tail' implementations + treat operands with leading '+' as file names, as POSIX + has required since 2001. However, make sure the code still + works on pre-POSIX hosts. + * Makefile.in (slowcompare): Port to POSIX 1003.1-2001, + which says you should use "tail -c +N" rather than "tail +Nc". + Fix a bug: the old code incorrectly skipped 15 bytes, not 16. + +2006-07-06 Zdenek Dvorak + + * tree-ssa-loop-niter.c (scev_probably_wraps_p): Fix typo in + argument name. + +2006-07-06 David Edelsohn + + PR target/28150 + * config/rs6000/rs6000.c (rs6000_legitimate_address): Do not allow + PRE_{INC,DEC} of TFmode. + +2006-07-06 David Edelsohn + Alan Modra + + PR target/28170 + * config/rs6000/rs6000.c (insvdi_rshift_rlwimi_p): Correct shiftop + bounds. Simplify. + +2006-07-06 Rainer Orth + + PR target/28285 + * config/alpha/predicates.md (alpha_swapped_comparison_operator): + Remove duplicate gtu. + +2006-07-05 Jason Merrill + + PR c++/13983 + PR c++/17519 + * stor-layout.c (finish_record_layout): Copy TYPE_PACKED to variants. + * c-common.c (handle_packed_attribute): So don't copy it here. + * c-decl.c (finish_struct): Don't copy TYPE_ALIGN. + +2006-07-05 Mike Stump + + * doc/invoke.texi (Invoking G++): Clarify prose for g++. + +2006-07-05 H.J. Lu + + PR target/26146 + * config.gcc: Check with_cpu for i[34567]86--*-solaris2.1[0-9]*. + +2006-07-05 Richard Guenther + + PR target/28158 + * config/i386/i386.md (*negdf2_1): Restrict pattern to + TARGET_SSE2 targets if using SSE math. + (*absdf2_1): Likewise. + +2006-07-05 Richard Guenther + + PR tree-optimization/28162 + * fold-const.c (fold_binary): For (-A) * (-B) -> A * B + make sure to convert the operands to the correct type. + +2006-07-04 Paolo Bonzini + + PR tree-optimization/28218 + + * tree-ssa-math-opts.c (execute_cse_reciprocals): Fix calls + to calculate and free the dominator information. + +2006-07-04 Peter O'Gorman + + * mklibgcc.in: chmod 644 before ranlib during install. + +2006-07-04 Andrew Stubbs + J"orn Rennecke + + * configure.ac (.eh_frame data check): Use diff -b. + +2006-07-04 Eric Botcazou + + PR bootstrap/18058 + * Makefile.in (BUILD_RTL): Add build/vec.o. + (build/gencondmd.o): Filter out -fkeep-inline-functions. + (build/genextract): Delete. + (build/genautomata): Likewise. + +2006-07-04 Alan Modra + + PR target/28207 + * config/rs6000/rs6000.c (function_arg_boundary): Double-word align + 128-bit IBM long doubles for ABI_V4. + +2006-07-03 Eric Botcazou + + * tree.c (range_in_array_bounds_p): New predicate. + * tree.h (range_in_array_bounds_p): Declare it. + * tree-eh.c (tree_could_trap_p) : Use it to + return a less conservative answer. + * tree-sra.c (struct sra_elt): Add new pointer field 'groups' + and flag 'is_group'. + (IS_ELEMENT_FOR_GROUP): New macro. + (FOR_EACH_ACTUAL_CHILD): Likewise. + (next_child_for_group): New helper function. + (can_completely_scalarize_p): Take into account groups. + (sra_hash_tree): Handle RANGE_EXPR. + (sra_elt_eq): Likewise. + (lookup_element): Be prepared for handling groups. + (is_valid_const_index): Delete. + (maybe_lookup_element_for_expr) : Use in_array_bounds_p + instead of is_valid_const_index. + : New case. + (sra_walk_expr) : Use in_array_bounds_p instead of + is_valid_const_index. + : Do not unconditionally punt. + (scan_dump): Dump info for groups too. + (decide_instantiation_1): Likewise. + (decide_block_copy): Assert that the element is not a group. + Propagate decision to groups. + (generate_one_element_ref): Handle RANGE_EXPR. + (mark_no_warning): Iterate over actual childs. + (generate_copy_inout): Likewise. + (generate_element_copy): Likewise. + (generate_element_zero): Likewise. + (generate_element_init_1): Likewise. + (dump_sra_elt_name): Handle RANGE_EXPR. + +2006-07-03 Roger Sayle + + PR tree-optimization/26251 + * tree-ssa-threadupdate.c (redirection_block_p): New function. + (thread_block): When optimizing for size refuse to thread jumps + that would require duplication of blocks other than redirection + blocks. + +2006-07-03 Paolo Bonzini + + * configure.ac: Fix thinko in previous check-in. + * configure: Regenerate. + +2006-07-03 Paolo Bonzini + + PR other/27063 + * configure.ac (for lang...): Simplify nesting of conditionals. + Test subdir_requires for non-enabled languages. Move processing + of lang_opt_files and lang_tree_fiels below that test. + * configure: Regenerate. + * doc/sourcebuild.texi (Front End Config): Document subdir_requires. + +2006-07-01 Martin Michlmayr + + * doc/gcov.texi (Invoking Gcov): Add a missing word. + +2006-06-30 Kazu Hirata + + * cfgexpand.c, config/i386/i386.c, genpreds.c, tree-cfg.c: Fix + comment typos. + +2006-06-29 Jason Merrill + + PR c++/26905 + PR c++/26612 + PR c++/27000 + PR c++/26984 + PR c++/19134 + * tree.c (build_decl_stat): Don't hande #pragma visibility here. + * c-common.c (c_determine_visibility): Handle it here. + * c-decl.c (finish_decl): Call c_determine_visibility for + functions, too. + * flags.h (enum symbol_visibility): Sort from most to least visibility. + * tree.h: Likewise. + * varasm.c (default_assemble_visibility): Likewise. + * c-common.c (handle_visibility_attribute): Complain about trying + to give visibility to an already defined class, or trying to change + declared visibility. Always attach the attribute. + + PR c++/26905 + PR c++/21675 + PR c++/17470 + * attribs.c (decl_attributes): Ignore type-in-place attributes + once the type has been defined. + +2006-06-29 Roger Sayle + + PR middle-end/27428 + * c-lex.c (c_lex_with_flags) : Increment errorcount + to indicate the cpplib has issued an error message for us. + +2006-06-29 Asher Langton + + PR target/25765 + * config/i386/i386.c (ix86_output_function_epilogue): Don't + insert a label at the end of an function under Mach-O. + +2006-06-29 Eric Christopher + Evan Cheng + + * predicates.md (vector_all_ones_operand): New. + (nonimmediate_or_sse_const_operand): Ditto. + * config/i386/i386-protos.h (standard_sse_constant_opcode): Declare. + * config/i386/i386.c (standard_sse_constant_opcode): Define. + (standard_sse_mode_p): Ditto. + (standard_sse_constant_p): Add case for -1 vector. + (ix86_expand_vector_move): Try to use. + * sse.md (*mov_internal): Use nonimmediate_or_sse_const_operand. + Call standard_sse_constant_opcode. + (*movv4sf_internal): Ditto. + (*movv2df_internal): Ditto. + +2006-06-29 Roger Sayle + + * genpreds.c (write_match_code_switch): Correctly use XSTR instead + of XEXP to extract the operands of a MATCH_CODE rtx. + +2006-06-28 Andrew Pinski + + * tree.c (tree_size): Do not waste tail padding in + struct tree_string and make the size be the same as + build_string will generate. + +2006-06-28 Jason Merrill + + PR c++/27768 + * tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add + may_aliases already in the tag's annotations to the bitmap. + +2006-06-28 Roger Sayle + + * genpreds.c (write_predicate_stmts) : Add missing break. + +2006-06-28 Roger Sayle + + * genpreds.c (generate_switch_p): New function. + (add_mode_tests): Push the new mode test down inside an AND expr + if this allows the switch-suitable MATCH_CODE to be near the root. + (write_match_code_switch): New function to write a MATCH_CODE as + a switch statement. + (write_predicate_stmts): New function to write a predicate RTX + expression as a sequence of statements. + (write_one_predicate_function): Use write_predicate_stmts. + (write_tm_constrs_h): Likewise. + +2006-06-26 Fred Fish + + * config/mips/t-sb1: New file. + * config.gcc (mipsisa64sb1-*-elf*): Add mips/t-sb1 to + tmake_file list. + +2006-06-26 DJ Delorie + + * config/m32c/m32c.c (m32c_print_operand): Fix sign-merging logic. + +2006-06-26 Naveen H.S + Jayant Sonar + Jaydeep Vipradas + + * config/m32c/addsub.md (addsi3, addsi3_1, addsi3_2): New. + (subsi3, subsi3_1, subsi3_2): New. + * config/m32c/bitops.md (andsi3, iorsi3, xorsi3): New. + * config/m32c/mov.md (SI mov peephole): New. + * config/m32c/m32.c (m32c_immd_dbl_mov): New. + * config/m32c/m32c-protos.h (m32c_immd_dbl_mov): New. + +2006-06-26 Olivier Hainque + + * function.c (aggregate_value_p): Honor DECL_BY_REFERENCE on + a CALL_EXPR target function declaration. + +2006-06-26 Richard Guenther + + * tree.c (build_string): Do not waste tail padding in + struct tree_string. + +2006-06-26 Richard Guenther + + * ggc-page.c (init_ggc): Add missing element to size_lookup + table. + + Revert + 2006-06-23 Richard Guenther + + * ggc-page.c (init_ggc): Do not round up the extra_order_size_table + sizes to MAX_ALIGNMENT. Fix the size_lookup table to honour + alignment requests instead. Add verification code. + Add struct tree_function_decl and struct tree_binfo size to + extra_order_size_table. Add missing element to size_lookup + table. + +2006-06-25 Eric Botcazou + + PR middle-end/28151 + * fold-const.c (const_binop): Be prepared for self returning zero. + Simplify code handling complex values. + +2006-06-24 Olivier Hainque + + * gimplify.c (gimplify_scalar_mode_aggregate_compare): New function. + (gimplify_expr): Use it for tcc_comparison of operands of non BLKmode + aggregate types. + +2006-06-24 Olivier Hainque + + * tree-ssa-loop-im.c (for_each_index): Handle ARRAY_RANGE_REF as + ARRAY_REF, so have the callback called for the low bound expression. + +2006-06-23 Janis Johnson + + * tree.h (DECIMAL_FLOAT_TYPE_P): New. + * c-typeck.c (c_common_type): Disallow operations on decimal float + types and other float types. + * convert.c (convert_to_real): Don't ignore conversions involving + decimal float types. + +2006-06-23 Olivier Hainque + + * tree.c (max_int_size_in_bytes): New function, inspired from + code in function.c:assign_temp. + * tree.h (max_int_size_in_bytes): Declare. + * function.c (assign_temp): Use it. + * gimplify.c (create_tmp_var): Relax the assertions on the type + properties, not mandating constant size any more. + (force_constant_size): New static function. + (gimple_add_tmp_var): Use it, forcing variable size to a + constant upper bound if it is not constant on entry. + +2006-06-23 Danny Smith + + PR target/27789 + * config/i386/winnt.c (ix86_handle_selectany_attribute): Move check + for initialization and setting of one_only flag to ... + (i386_pe_encode_section_info): ...here. + (i386_pe_dllimport_p): Check for DECL_DLLIMPORT_P also. + Recheck that the symbol has not been defined. + +2006-06-23 Richard Guenther + + * ggc-page.c (init_ggc): Do not round up the extra_order_size_table + sizes to MAX_ALIGNMENT. Fix the size_lookup table to honour + alignment requests instead. Add verification code. + Add struct tree_function_decl and struct tree_binfo size to + extra_order_size_table. Add missing element to size_lookup + table. + +2006-06-22 Roger Sayle + John David Anglin + + PR middle-end/28131 + * expr.c (expand_expr_real_1) : Check whether the + call to lang_hooks.types.type_for_mode returned NULL_TREE. + +2006-06-23 Ben Elliston + + * dfp.c (decimal_to_decnumber): Do not use decNumberNegate to + negate dn -- manipulate it directly. + +2006-06-22 Roger Sayle + Steven Bosscher + + PR target/27531 + * reload1.c (gen_reload): Call mark_jump_label on the new insns + generated by gen_move_insn to add REG_LABEL notes if necessary. + +2006-06-22 Bob Wilson + + * config/xtensa/lib1funcs.asm (MIN_ESA): Delete. + (leaf_entry): Remove use of MIN_ESA. + +2006-06-22 Zdenek Dvorak + + PR rtl-optimization/28121 + * cfgexpand.c (tree_expand_cfg): Clean EDGE_EXECUTABLE flag from + the entry edge. + +2006-06-21 DJ Delorie + + * config/m32c/muldiv.md (mulhisi3_i): Only use registers for dest + (TN-16C-A156A/E). + (mulhisi3_r): Likewise. + +2006-06-21 Richard Sandiford + + PR middle-end/28034 + * coverage.c (coverage_counter_alloc): Leave the index type + unspecified. + (coverage_counter_alloc): Use null arguments for operands 2 and 3 + of the ARRAY_REF. + +2006-06-21 Andrew Pinski + + * doc/invoke.texi (-fopenmp) Move to "Options Controlling C Dialect" + section from the "Options for Code Generation Conventions". + +2006-06-21 Richard Henderson + + PR target/26347 + PR target/27082 + * config/alpha/predicates.md (small_symbolic_operand): Deny weak + symbols. + (global_symbolic_operand): Allow weak symbols, even if local_p. + +2006-06-21 Eric Botcazou + + * tree-ssa-loop-ivopts.c (may_be_nonaddressable_p): New function. + (find_interesting_uses_address): Punt if above function returns true. + +2006-06-21 Richard Guenther + + * configure: Regenerated. + +2006-06-21 Joseph Myers + + * config/mips/mips.c (function_arg): Where one part of a + complex argument is in registers and the other part in the stack, + return a REG not a PARALLEL. + +2006-06-21 Mark Mitchell + + * configure.ac: Set gcc_gxx_include_dir to $target/include/c++ + when cross-compiling. Do not substitute libstdcxx_incdir. + * configure: Regenerated. + +2006-06-21 Jakub Jelinek + + * varasm.c (mergeable_string_section): Check for embedded NULs and + NUL termination in the first int_size_in_bytes (TREE_TYPE (decl)) + rather than TREE_STRING_LENGTH bytes. + +2006-06-21 Richard Guenther + + * ggc-page.c (extra_order_size_table): Add var_ann_d, + tree_ssa_name, bitmap_element and phi_node with 4 arguments + sizes. + +2006-06-21 Richrad Guenther + + * tree-ssa-loop-niter.c (simplify_using_initial_conditions): + Limit iteration over the dominators. + +2006-06-20 Roger Sayle + + * config/mips/iris6.h (LIB_SPEC): Add support for -pthread. + (SUBTARGET_CPP_SPEC): Define _REENTERANT if -pthread specified. + +2006-06-20 Richard Guenther + Michael Matz + + * alloc-pool.h (free_alloc_pool_if_empty): Prototype new + function. + * alloc-pool.c (free_alloc_pool_if_empty): New function. + * et-forest.h (et_free_pools): Prototype new function. + * et-forest.c (et_free_tree_force): Free parent occurrence. + (et_free_pools): New function. + * dominance.c (free_dominance_info): Free et-forest alloc + pools. + +2006-06-20 Roger Sayle + + * expr.c (expand_expr_real_1) : For vector constants with + integer modes, attempt to directly construct an integer constant. + + * fold-const.c (native_encode_vector): Determine the size of each + element from the vector type instead of the first vector element. + + * tree.c (build_constructor_single): Mark a CONSTRUCTOR as constant, + if all of its elements/components are constant. + (build_constructor_from_list): Likewise. + +2006-06-20 Zdenek Dvorak + + PR tree-optimization/27331 + * tree-data-ref.c (free_data_ref): New function. + (create_data_ref): Fail if the data reference has unknown access + function. + (free_data_refs): Use free_data_ref. + +2006-06-19 Andrew Pinski + + PR middle-end/28075 + * tree-inline.c (setup_one_parameter): Strip useless + type conversion before adding it to the IR. + (declare_return_variable): Likewise. + +2006-06-19 Martin Michlmayr + + PR c/27149 + * c-common.c (c_common_truthvalue_conversion): Fix grammar in warning. + +2006-06-19 Mike Stump + + * tree.c (variably_modified_type_p): VM arguments don't make the + type a VM type. + +2006-06-19 Richard Guenther + + * tree-ssa-pre.c (try_combine_conversion): Strip useless + type conversions after folding. + +2006-06-19 Richard Guenther + + * ggc-page.c (extra_order_size_tab): Add entries with + size of struct function and basic_block. + (size_lookup): Extend to cover sizes up to 511. + (ggc_alloc_stat): Adjust user. + (ggc_pch_count_object): Likewise. + (ggc_pch_alloc_object): Likewise. + (ggc_pch_write_object): Likewise. + +2006-06-19 Zdenek Dvorak + + * tree-ssa-loop-niter.c (implies_ge_p): New function. + (derive_constant_upper_bound): Handle OP0 - CST in unsigned types + correctly. + +2006-06-19 Denis Chertykov + + * config/avr/libgcc.S : Correct my wrong previous commit. + +2006-06-19 Roger Sayle + + PR target/27861 + * expmed.c (expand_shift): On SHIFT_COUNT_TRUNCATED targets, we may + have stripped a SUBREG from the shift count, so we may need to + convert_to_mode back to the type's mode before calling make_tree. + Use new_amount instead of amount to avoid expanding a tree twice. + +2006-06-19 Richard Guenther + + PR middle-end/28045 + * fold-const.c (operand_equal_p): Check if the argument types + have the same precision before stripping NOPs. + +2006-06-19 Daniel Berlin + + Fix PR tree-optimization/27341 + * tree-cfg.c (gimplify_val): Call mark_new_vars_to_rename on the + statement we get. + * tree-complex.c (pass_lower_complex): Update SMT usage. + +2006-06-19 Andreas Krebbel + + * config/s390/s390.md ("doloop_si64", "doloop_si31", "doloop_di"): + Add a new alternative to the constraint strings. Add move of + operand 1 to 3 to the splitter definition. + ("doloop_si_long"): Second contraint alternative removed. + +2006-06-08 Anatoly Sokolov + + * config/avr/avr.h (avr_have_movw_lpmx_p): Declare. + (TARGET_CPU_CPP_BUILTINS): Add __AVR_HAVE_MOVW__ and + __AVR_HAVE_LPMX__. + (AVR_HAVE_MOVW) Define. + (ASSEMBLER_DIALECT): Use AVR_HAVE_MOVW. + (ASM_SPEC): Add avr25. + (LINK_SPEC): Add avr25. + * config/avr/avr.c (avr_have_movw_lpmx_p): Add. + (base_arch_s): Add new member 'have_movw_lpmx'. + (avr_arch_types): Init 'have_movw_lpmx'. + (avr_mcu_types): Add 'avr25'. Move attiny13, attiny2313, attiny24, + attiny44, attiny84, attiny25, attiny45, attiny85, attiny261, + attiny461, attiny861 and at86rf401 in 'avr25' arhitecture. + (avr_override_options): Init 'avr_have_movw_lpmx_p'. + (output_movhi, output_movsisf, ashlsi3_out, avr_rtx_costs): Use + AVR_HAVE_MOVW. + (avr_file_start): Do not output '.arh' derective. + * config/avr/libgcc.S (mov_l): Use __AVR_HAVE_MOVW__. + (__do_copy_data): Use __AVR_HAVE_LPMX__. + * config/avr/avr.md (mcu_enhanced): Delete. + (mcu_have_movw): Define. + (negsi2, extendhisi2, zero_extendhisi2): Use 'mcu_have_movw'. + (call_insn, call_value_insn): Use 'call_insn' and __AVR_HAVE_MOVW__. + * config/avr/t-avr(MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Add avr25. + (MULTILIB_MATCHES): Add attiny13, attiny2313, attiny24, attiny44, + attiny84, attiny25, attiny45, attiny85, attiny261, attiny461, + attiny861 and at86rf401 devices. + +2006-06-18 Jie Zhang + + * config/bfin/bfin.c (MAX_LOOP_LENGTH): Define to be 2042 instead + of 4096. + +2006-06-17 Karl Berry + + * doc/cpp.texi, doc/cppinternals.texi, doc/gcc.texi, + doc/gccint.texi, doc/install.texi (@dircategory): Use + "Software development" instead of "Programming", following + the Free Software Directory. + +2006-06-17 Alexandre Oliva + + * config/i386/i386.c (legitimate_tls_address) + : Add tp after DTPOFF. + * config/i386/i386.md (*tls_dynamic_gnu2_combine_32): Adjust. + (*tls_dynamic_gnu2_combine_64): Likewise. + +2006-06-16 Richard Guenther + + PR middle-end/27116 + * fold-const.c (negate_expr_p): Do not introduce undefined + overflow in negating INTEGER_CSTs. + (fold_negate_expr): Rename from negate_expr. Revert last + change for folding BIT_NOT_EXPR. Change semantics to + return NULL_TREE for non-simplified negations. Do not + strip type conversions and unify type handling. + (negate_expr): New function, wrap around fold_negate_expr + but ensure building a tree always. Strip type conversions + here, fold to result type. + (fold_unary): Use fold_negate_expr for folding NEGATE_EXPR. + +2006-06-16 Roger Sayle + + PR middle-end/27802 + * reg-stack.c (subst_stack_regs): Handle noreturn function calls + that (would) return their results in stack registers. + +2006-06-16 Michael Matz + Richard Guenther + + * fold-const.c (fold_truthop): Only return new tree node if + we canonicalized something. + +2006-06-16 Richard Guenther + + * function.h (enum function_frequency): Move declaration + out of struct function. + (struct function): Move bool fields and the enum to the bitfield + section. Reorder elements to avoid padding. Remove unused + fields left over from the RTL inliner removal. + * function.c (free_after_compilation): Do not zero removed fields. + * Makefile.in (ipa-reference.o): Add $(FUNCTION_H) dependency. + (ipa-type-escape.o): Likewise. + +2006-06-16 Richard Guenther + + * cgraph.h (struct cgraph_local_info): Turn bool elements + into a bitfield. + (struct cgraph_node): Likewise. + (struct cgraph_varpool_node): Likewise. + +2006-06-15 Richard Guenther + + * fold-const.c (fold_truth_not_expr): Rename from + invert_truthvalue. Give it fold_* semantics to avoid + generating garbage. + (invert_truthvalue): New function. Wrapper around + fold_truth_not_expr. + (optimize_minmax_comparison): Avoid creating garbage. + (fold_unary): Use fold_truth_not_expr for folding + TRUTH_NOT_EXPR. + (fold_ternary): Replace uses of invert_truthvalue with + fold_truth_not_expr where applicable. + * tree.h (fold_truth_not_expr): Prototype. + +2006-06-16 Richard Guenther + + PR tree-optimization/27781 + * Makefile.in (ipa-pure-const.o): Add $(TARGET_H) dependency. + * ipa-pure-const.c (target.h): Include. + (analyze_function): Do not analyze functions that do not + bind locally. + +2006-06-15 Andrew MacLeod + + PR middle-end/27793 + * tree-dfa.c (referenced_vars_dup_list): Remove. + (find_referenced_vars): Remove assert. + (referenced_var_check_and_insert): Replace dup list with assert. + * tree-ssa.c (delete_tree_ssa): Remove dup list processing. + * tree-flow.h (referenced_vars_dup_list): Remove extern decl. + +2006-06-15 Richard Guenther + + * tree-ssa-structalias.c (alias_get_name): Avoid creating + extra unused identifiers if not dumping. + (create_variable_info_for): Likewise. + +2006-06-15 Zdenek Dvorak + + * tree-ssa-loop-niter.c (implies_nonnegative_p): New function. + (derive_constant_upper_bound): Derive more precise upper bound in + common cases. Return type changed to double_int. + (record_estimate): Reflect the changed return type of + derive_constant_upper_bound. + * double-int.c (double_int_zext, double_int_sext): Fix. + +2006-06-15 Paolo Bonzini + + * configure.ac (CFLAGS): Get them from the toplevel or from the + configure invocation. + * configure: Regenerate. + * Makefile.in (CFLAGS): Substitute value provided by configure. + +2006-06-14 Mark Mitchell + + PR c++/26559 + * c-common.h (c_finish_omp_atomic): Adjust declaration. + * c-omp.c (c_finish_omp_atomic): Return the expression to perform, + rather than calling add_stmt on it. + * c-parser.c (c_parser_omp_atomic): Adjust accordingly. + +2006-06-14 Andreas Krebbel + + PR middle-end/27959 + * reload1.c (reload): Remove registers returned by update_eliminables + from used_spill_regs. + +2006-06-13 DJ Delorie + + * config/m32c/muldiv.md (mulpsi3): Expect arbitrary constants. + +2006-06-13 Carlos O'Donell + + * Makefile.in: Define HTMLS_BUILD, HTMLS_INSTALL, + html__strip_dir, html__mkdir_p. Enhance install-html target. + * configure.ac: AC_SUBST datarootdir, docdir and htmldir. + * configure: Regenerate. + +2006-06-13 Fariborz Jahanian + + * fold-const.c (fold_cond_expr_with_comparison): Check for + Objective-C++ as language in deciding COND_EXPR transformation. + +2006-06-06 J"orn Rennecke + + PR target/28014: + * config/sh/t-sh (LIB1ASMFUNCS): Add _udiv_qrnnd16 + * config/sh/sh.c (print_operand): Add !SHMEDIA functionality to 'M'. + * config/sh/lib1funcs.h (SL, SL1): Define. + * config/sh/lib1funcs.asm (__udiv_qrnnd16): New hidden function. + * longlong.h (__sh__): Define umul_ppmm, udiv_qrnnd and sub_ddmmss. + * config/sh/t-sh ($(T)unwind-dw2-Os-4-200.o): New rule. + (OBJS_Os_4_200): New variable. + ($(T)libgcc-Os-4-200.a): Use it. + * sh.md (udivsi3): For TARGET_DIVIDE_CALL_TABLE, avoid function call + when dividing 1 and/or by 0. + +2006-06-13 Roger Sayle + + * configure.ac (HAS_MCONTEXT_T_UNDERSCORES): Include + before to define sigset_t required by . + * configure: Regenerate. + +2006-06-13 Jie Zhang + + * config/bfin/bfin.c (bfin_reorg_loops): Only call recog_memoized () + for real instruction. + +2006-06-13 Maxim Kuvyrkov + + PR middle-end/26807 + * haifa-sched.c (check_cfg): Handle special case. + +2006-06-13 Eric Botcazou + + PR debug/26754 + * gimplify.c (declare_tmp_vars): Rename into declare_vars. + Add debug_info parameter. Chain the vars to the BLOCK instead + of the BIND_EXPR if debug info are requested for them. + (pop_gimplify_context): Adjust for above change. + (gimple_add_tmp_var): Likewise. + * tree-gimple.h (declare_tmp_vars): Rename into declare_vars. + Add bool parameter. + * tree-nested.c (convert_nonlocal_reference): Adjust for above change. + (convert_local_reference): Likewise. + (get_local_debug_decl): Set DECL_IGNORED_P on the original variable. + (finalize_nesting_tree_1): Request that debug info be emitted + for debug_var_chain. + +2006-06-13 Maxim Kuvyrkov + + * haifa-sched.c (unlink_other_notes, unlink_line_notes): Fix the patch + for PR target/27863. + +2006-06-13 Richard Guenther + + PR middle-end/27536 + * except.c (output_ttype): Expand type with EXPAND_INITIALIZER. + +2006-06-13 Richard Guenther + + PR tree-optimization/27830 + * tree-inline.c (copy_body_r): For copying the operand + of an ADDR_EXPR make sure to fold &* afterwards. + +2006-06-12 Eric Botcazou + + * gimplify.c (gimplify_expr): Treat VIEW_CONVERT_EXPR like other + lvalues in the fb_none case with side-effects. + +2006-06-12 Kazu Hirata + + * tree-flow.h: Remove the prototype for + compute_phi_arg_on_exit. + * tree-ssa-loop-ivopts.c (protect_loop_closed_ssa_form_use, + protect_loop_closed_ssa_form, compute_phi_arg_on_exit): + Remove. + +2006-06-12 Mark Shinwell + + * builtins.c (expand_builtin_return_addr): Only use + frame_pointer_rtx when count == 0 and we are expanding + __builtin_return_address. + +2006-06-12 Fred Fish + + * config/mips/mips.c (mips_file_start): Create special section + ".gcc_compiled_longXX" for o64 ABI as well as EABI. + +2006-06-11 Eric Christopher + + PR middle-end/27948 + * stor-layout.c (place_field): Remove check for + remaining_in_alignment when aligning at the end of a run. + +2006-06-11 Eric Christopher + + PR 27542 + * doc/extend.texi (Structure-Packing Pragmas): Document ms_struct + pragma. + +2006-06-11 Roger Sayle + + PR target/27858 + Revert incorrect fix for PR target/27158 + 2006-05-08 Roger Sayle + * reload.c (find_reloads_toplev): Only return the simplified SUBREG + of a reg_equiv_constant if the result is a legitimate constant. + +2006-06-11 Roger Sayle + + PR target/27158 + * config/rs6000/rs6000.c (const_vector_elt_as_int): New function to + extract a CONST_VECTOR element and interpret it as an integer. + (vspltis_constant): Use const_vector_elt_as_int instead of the + macro CONST_VECTOR_ELT in order to handle FP vector modes. + * config/rs6000/predicates.md (easy_vector_const): Consider + floating point ALTIVEC_VECTOR_MODEs via easy_altivec_constant. + +2006-06-11 Kaz Kojima + + PR middle-end/27942 + * stor-layout.c (update_alignment_for_field): Don't add extra + alignment for packed non-bitfield fields in ms_bitfield_layout_p + code. + +2006-06-09 Ralf Corsepius + + * config/mips/t-rtems: Add EL/EB multilib variants. + +2006-06-09 Mike Stump + + * c-typeck.c (c_begin_vm_scope): Fix file_scope processing. + +2006-06-09 David Daney + + * doc/install.texi: Add binutils version recommendation for mips-*-*. + +2006-06-09 Andreas Krebbel + + * reload.c (find_reloads): Unset force_reload for 'X' constraint. + +2006-06-09 Richard Guenther + + PR tree-optimization/26998 + * tree-vrp.c (extract_range_from_unary_expr): For NEGATE_EXPR + of signed types, only TYPE_MIN_VALUE is special, but for both, + minimum and maximum value. Likewise VR_ANTI_RANGE is special + in this case, as is -fwrapv. + +2006-06-08 Mike Stump + + PR target/26427 + * config/darwin.c (darwin_asm_output_anchor): Disable + -fsection-anchors on darwin for now. + * config/darwin.h (TARGET_ASM_OUTPUT_ANCHOR): Likewise. + * rs6000/rs6000.c (optimization_options): Likewise. + +2006-06-08 Volker Reichelt + + PR target/27421 + * config/i386/i386.c (classify_argument): Skip fields with invalid + types in unions. + +2006-06-08 Steven Bosscher + + * cse.c (flush_hash_table): Use VOIDmode to invalidate a REG. + (cse_insn): Likewise for the stack_pointer_rtx. + +2006-06-08 Roger Sayle + + * tree-ssa-dom.c (record_conditions): Only record "unordered" + conditions from floating point comparisons. + +2006-06-08 Paolo Bonzini + + PR middle-end/27733 + * expmed.c (struct alg_hash_entry): Fix type of field T + to match synth_mult argument. + (NUM_ALG_HASH_ENTRIES): Make it bigger for 64-bit HOST_WIDE_INT. + +2006-06-08 Maxim Kuvyrkov + + PR target/27863 + * haifa-sched.c (unlink_other_notes, unlink_line_notes): Update basic + block boundaries. + +2006-06-08 Richard Guenther + + PR middle-end/27116 + * fold-const.c (negate_expr_p): We can negate BIT_NOT_EXPR + only, if overflow is defined and not trapping. + (negate_expr): Likewise. + +2006-06-07 Zdenek Dvorak + + PR tree-optimization/27872 + * tree-ssa-loop-manip.c (tree_unroll_loop): Set EDGE_IRREDUCIBLE_LOOP + flag on the new exit edge of the unrolled loop. + +2006-06-07 Zdenek Dvorak + + PR rtl-optimization/26449 + * loop-invariant.c (move_invariant_reg): Fail if force_operand fails. + +2006-06-07 Andrew MacLeod + + PR middle-end/27793 + * tree-dfa.c (referenced_vars_dup_list): New. List of duplicate + referenced_variables with matching DECL_UID's. + (find_referenced_vars): Make sure duplicate list is empty to start. + (referenced_var_p): Remove. + (referenced_var_check_and_insert): Renamed from referenced_var_insert. + Check if var is in the list, and add if needed. Update the duplicate + list if a different var is in the list with the same DECL_UID. + (add_referenced_var): Call routine to check and insert. + * tree-ssa.c (delete_tree_ssa): Clear var_ann's on duplicates. + * tree-flow.h (referenced_vars_dup_list): External declaration. + +2006-06-07 Fred Fish + + * config/mips/t-elf (MULTILIB_MATCHES): Combine two entries + into single entry. + +2006-06-07 Paolo Bonzini + + PR target/27390 + * reg-stack.c (subst_stack_regs_pat): Reorder resetting of + the imaginary and real parts of a clobbered register. + Emit insn to set the imaginary part. + +2006-06-06 Peter Lemieszewski + + * config/s390/t-tpf (LIB2ADDEH): Include unwind-dw2-fde-glibc.c + in lieu of unwind-dw2-fde.c. + +2006-06-06 Francois-Xavier Coudert + + * config/i386/mingw32.h (GOMP_SELF_SPECS): Define. + +2006-06-06 Ulrich Weigand + + PR target/27842 + * config/rs6000/altivec.md (UNSPEC_VSLW): Remove. + ("altivec_vspltisw_v4sf", "altivec_vslw_v4sf"): Remove. + ("mulv4sf3", "absv4sf3", "negv4sf3"): Adapt users to use + V4SImode temporaries and operations instead. + +2006-06-06 Joseph S. Myers + + * config/mips/t-linux64 (tp-bit.c): Append to tp-bit.c, not + dp-bit.c. + +2006-06-06 Mike Stump + + * Makefile.in: Rename to htmldir to build_htmldir to avoid + installing during build. + +2006-06-06 Maxim Kuvyrkov + + * params.def (PARAM_MAX_SCHED_EXTEND_REGIONS_ITERS): Change default + value to 0. + * doc/invoke.texi (max-sched-extend-regions-iters): Document. + * config/ia64/ia64.c (params.h): New header. + (ia64_optimization_options): New function to adjust parameters. + * config/ia64/ia64-protos.h (ia64_optimization_options): New prototype. + * config/ia64/ia64.h (OPTIMIZATION_OPTIONS): New macro. + * config/ia64/t-ia64 (ia64.o): Add dependence from params.h . + +2006-06-05 Kazu Hirata + + * stor-layout.c (debug_rli): Fix a typo in a debug message. + +2006-06-05 Steve Ellcey + + PR target/27051 + * config/ia64/ia64.c (ia64_select_rtx_section): Check TARGET_NO_SDATA. + +2006-06-05 Dorit Nuzman + Victor Kaplansky + + PR tree-optimization/26360 + * tree-vectorizer.c (destroy_loop_vec_info): Remove (dead) pattern + stmts. + +2006-06-04 Roger Sayle + Andrew Pinski + + PR middle-end/27382 + * c-common.c (c_common_truthvalue_conversion): Explicitly check + for LABEL_DECL before calling DECL_WEAK. + + PR c/27150 + * c-typeck.c (build_binary_op): Likewise, explicitly check for + LABEL_DECL and PARM_DECL. + +2006-06-05 Joseph S. Myers + + PR c/25161 + PR c/27020 + * c-decl.c (grokdeclarator): Disallow variably modified types at + file scope. Avoid marking shared array type of constant size as + VLA. + +2006-06-04 Volker Reichelt + + PR c++/27601 + * c-common.c (fold_offsetof_1): Handle static members. + +2006-06-04 Eric Christopher + + * stor-layout.c (start_record_layout): Initialize remaining_in_alignment. + (debug_rli): Output value for remaining_in_alignment. + (update_alignment_for_field): Unconditionalize + ms_bitfield_layout_p code. Handle non-bitfield fields. Remove + extra alignment code. + (place_field): Don't realign if ms_bitfield_layout_p. Unconditionalize + ms_bitfield_layout_p code. Rewrite handling of structure fields. + * tree.h (record_layout_info_s): Remove prev_packed. + * doc/extend.texi (ms_struct): Add documentation of format. + +2006-06-04 Mark Shinwell + + * tree.h: Declare folding_initializer. + * builtins.c (fold_builtin_constant_p): Give definite answer + if folding inside an initializer. + * fold-const.c: Define folding_initializer. + (START_FOLD_INIT): Save and then set folding_initializer. + (END_FOLD_INIT): Restore folding_initializer. + +2006-06-04 Richard Guenther + + PR tree-optimization/27039 + * fold-const.c (fold_comparison): Handle pointer comparison + again for all comparison codes. Compare offsets in signed + size type. + (fold_binary): Move code from here. + +2006-06-03 Roger Sayle + + PR target/26223 + * config/i386/i386.c (construct_container): Split static issued_error + flag into issued_sse_arg_error, issued_sse_ret_error and + issued_x87_ret_error. Issue a daignostic if the x86-64 ABI + requires the use of x87 registers and the user explicitly + specified the -mno-80387 command line option. + +2006-06-02 Geoffrey Keating + + * config/rs6000/host-darwin.c (sigaltstack): Protect prototype with + HAVE_DECL_SIGALTSTACK. + (MC_FLD): New. + (segv_handler): Use MC_FLD. + * configure.ac: Check for a sigaltstack declaration. + Compute HAS_MCONTEXT_T_UNDERSCORES on Darwin. + * configure: Regenerate. + * config.in: Regenerate. + +2006-06-03 J"orn Rennecke + + PR other/27850 + * Makefile.in (stmp-fixinc): Fix typo. + +2006-06-02 Roger Sayle + + * fold-const.c (fold_unary) : Ensure folded expressions + are type correct. Clean-up. + : Likewise. Optimize creal(~z) as creal(z). + : Likewise. Optimize cimag(~z) as -cimag(z). + +2006-06-01 DJ Delorie + + * config/v850/v850.h (ASM_OUTPUT_ADDR_DIFF_ELT): Disabled the + shift, as we've disabled the "switch" insn that needs it. + +2006-06-01 Per Bothner + + Suppress extra '#1 or '#1 ' on -dD output. + * c-opts.c (finish_options): Use internal line 0 for . + * c-ppoutput.c (cb_define): Don't increment line 0. + +2006-06-01 Pete Steinmetz + + * doc/invoke.texi: Add cpu_type power6. + * config.gcc: Add cpu_type power6. + * config/rs6000/rs6000.c (rs6000_override_options): Alias power6 + to power5+ with Altivec. + * config/rs6000/aix52.h (ASM_CPU_SPEC): Add power6. + * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add power6. + +2006-05-30 Anatoly Sokolov + + * config/avr/avr.h (SET_ASM_OP): Define. + +2006-06-01 Kazu Hirata + + * config/bfin/bfin.c: Fix comment typos. + +2006-06-01 Paolo Bonzini + + PR 25453 + * doc/install.texi: Document --enable-bootstrap and + --disable-bootstrap. + +2006-06-01 Paolo Bonzini + + * doc/install.texi: Document that InfoZIP can replace jar. + +2006-05-31 Roger Sayle + + * config/i386/i386.c (ix86_expand_fp_absneg_operator): When SSE + isn't available, directly generate the simpler x87 patterns without + the (use (const_int 0)). + * config/i386/i386.md (*negsf2_1): Enable pre-reload if the SSE + implementation isn't available. + (*negdf2_1): Likewise. + (*negxf2_1): XF mode negation is always done using the x87. + (*abssf2_1, *absdf2_1, *absxf2_1): Likewise^3 for fabs. + +2006-05-31 Roger Sayle + + * builtins.c (fold_builtin_cabs): Delete prototype. Require an + additional FNDECL argument. Optimize cabs(-z) and cabs(~z) as + cabs(z). + (fold_builtin_decl) : Update fold_builtin_cabs call. + +2006-05-31 Jie Zhang + + * config/bfin/bfin-protos.h (bfin_hardware_loop): Declare. + * config/bfin/bfin.c (basic-block.h): Include. + (struct machine_function): New. + (bfin_init_machine_status): New. + (override_options): Initialize init_machine_status. + (bfin_hardware_loop): New. + (MAX_LOOP_DEPTH, MAX_LOOP_LENGTH): Define. + (DEF_VEC_P (loop_info)): New. + (DEF_VEC_ALLOC_P (loop_info,heap)): New. + (struct loop_info): New. + (loop_info): New typedef. + (struct loop_work): New. + (loop_work): New typedef. + (DEF_VEC_O (loop_work)): New. + (DEF_VEC_ALLOC_O (loop_work,heap)): New. + (bfin_dump_loops): New. + (bfin_bb_in_loop): New. + (bfin_scan_loop): New. + (bfin_optimize_loop): New. + (bfin_reorg_loops): New. + (bfin_reorg): Use bfin_reorg_loops. + * config/bfin/bfin.h (FIRST_PSEUDO_REGISTER): Adjust for adding + loop registers. + (I_REGNO_P): Simplify. + (DP_REGNO_P, DPREG_P): New macros. + (REGISTER_NAMES, FIXED_REGISTERS, CALL_USED_REGISTERS, + REG_ALLOC_ORDER): Add LT0, LT1, LC0, LC1, LB0, LB1. + (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): + Add LT_REGS, LC_REGS, LB_REGS. + (REG_CLASS_FROM_LETTER): Add 't' for LT_REGS, 'k' for LC_REGS, + 'l' for LB_REGS. + (REGNO_REG_CLASS): Deal with loop registers. + * config/bfin/bfin.md: Add comment for 't', 'k', 'l' constraint + letters. + (REG_LT0, REG_LT1, REG_LC0, REG_LC1, REG_LB0, REG_LB1): + New constants for loop registers. + (UNSPEC_LSETUP_END): New. + (seq_insns): New define_attr. Set it for appropriate insns. + (movsi_insn): Add alternatives for move from/to + loop count registers. + (doloop_end): New define_expand. + (loop_end): New define_insn. + (define_split for bad doloop_end): New. + (lsetup_with_autoinit): New define_insn. + (lsetup_without_autoinit): New define_insn. + (rep_movsi, rep_movhi): Clobber LT1, LC1, LB1. + * config/bfin/predicates.md (lc_register_operand): New. + (lt_register_operand): New. + (lb_register_operand): New. + (nondp_register_operand): New. + (nondp_reg_or_memory_operand): New. + * doc/md.texi: Document Blackfin new 't', 'k', 'l' constraint letters. + +2006-05-31 Jie Zhang + + * config/bfin/bfin.c (bfin_delegitimize_address): New. + (TARGET_DELEGITIMIZE_ADDRESS): Define. + +2006-05-31 Daniel Jacobowitz + + * Makefile.in (CATALOGS): Add po/ prefix. + * configure: Regenerated. + +2006-05-31 Richard Earnshaw + + PR target/27829 + * arm.c (arm_print_operand case 'S'): Validate that the operand is + a shift operand before calling shift_op. Avoid redundant call of + shift_op. + +2006-05-30 Naveen.H.S + DJ Delorie + + * config/m32c/m32c.c (m32c_expand_insv): Check that the value + we're inserting is a singlt-bit constant. + +2006-05-30 Roger Sayle + + * simplify-rtx.c (simplify_binary_operation_1) : Cast + width to HOST_WIDE_INT to avoid comparison warnings on some targets. + +2006-05-30 Roger Sayle + + PR tree-optimization/23452 + * fold-const.c (fold_mult_zconjz): New subroutine of fold_binary, + to optimize z * conj(z) as realpart(z)^2 + imagpart(z)^2. + (fold_binary) : Call fold_mult_zconjz for integral + complex values and with -ffast-math for FP complex values. + +2006-05-30 Kazu Hirata + + * c-common.h: Remove the prototype for yyparse. + * rtl.h: Remove the prototype for init_loop. + +2006-05-30 Andreas Krebbel + + * cse.c (validate_canon_reg, cse_insn): Don't change insns without + calling recog. + +2006-05-30 Roger Sayle + + * simplify-rtx.c (simplify_binary_operation): Unfactor the shift + and rotate cases. + : Optimize (lshiftrt (clz X) C) as (eq X 0) where C is + log2(GET_MODE_BITSIZE(X)) on targets with the appropriate semantics. + +2006-05-30 Dirk Mueller + + PR c/27273 + * c-common.c (convert_and_check): Only track TREE_CONSTANT_OVERFLOW + for CONSTANT_CLASS_P expresisons. + +2006-05-30 Volker Reichelt + + PR c/27718 + * c-typeck.c (c_expr_sizeof_type): Handle invalid types. + +2006-05-30 Zdenek Dvorak + + PR tree-optimization/27779 + * tree-data-ref.c (analyze_siv_subscript_cst_affine): Use + initial_condition instead of CHREC_LEFT. + +2006-05-30 Steven Bosscher + + * config/m32r/m32r.h (DBX_OUTPUT_SOURCE_LINE): Fix type of begin_label. + * config/m32r/initfini.c (__do_global_dtors, __do_global_ctors): + Make prototypes ISO C90. + +2006-05-30 Mircea Namolaru + Leehod Baruch + + * see.c (see_analyze_one_def): Correct check. + (see_get_extension_data): Check if extension is parallel. + (see_get_extension_reg): Likewise. + +2006-05-30 Uros Bizjak + + PR target/27790 + * config/i386/i386.c (ix86_expand_int_vcond): Force cop0 + into register for (code == GTU). + +2006-05-29 Roger Sayle + + PR tree-optimization/24964 + * simplify-rtx.c (simplify_binary_operation_1): Add function comment. + : Minor clean-up. Don't convert x*-1.0 into -x if we honor + signaling NaNs. Optimize -x*-x as x*x for all float modes, and + abs(x)*abs(x) as x*x for scalar floating point modes. + +2006-05-29 Sebastian Pop + + PR middle-end/27745 + * lambda-code.c (perfect_nestify): Don't copy statements + in the inner loop: move them to the inner loop header. + +2006-05-29 Diego Novillo + + PR 26237 + * c-tree.texi: Document OpenMP directives and clauses. + +2006-05-29 Kazu Hirata + + * varasm.c (globalize_decl): Fix indentation. + +2006-05-29 Diego Novillo + + PR 26242 + * doc/passes.texi: Add documentation for pass_vrp, pass_ipa_pta, + pass_fre, pass_store_ccp, pass_copy_prop, + pass_store_copy_prop, pass_merge_phi, pass_nrv, + pass_return_slot, pass_object_size, pass_lim, + pass_linear_transform, pass_empty_loop, pass_complete_unroll, + pass_loop_prefetch and pass_stdarg. + +2005-05-29 Bernd Schmidt + + * config/bfin/bfin.opt (mfdpic): New option. + * config/bfin/t-bfin-elf (EXTRA_PARTS): Add crtbeginS.o and crtendS.o. + (EXTRA_MULTILIB_PARTS): Likewise. + (CRTSTUFF_T_CFLAGS, TARGET_LIBGCC2_CFLAGS): Use -fpic. + (MULTILIB_OPTIONS, MULTILIB_EXCEPTIONS): Build one extra -mfdpic + multilib. + * config/bfin/elf.h (STARTFILE_SPEC): Don't link in crt0.o if -shared. + (CRT_CALL_STATIC_FUNCTION): New. + * config/bfin/uclinux.h (STARTFILE_SPEC): Don't link in crt0.o if + -shared. + (CRT_CALL_STATIC_FUNCTION): New. + * config/bfin/bfin.c (legitimize_pic_address): Now static. Handle + FD-PIC moves. + (n_pregs_to_save): PIC register doesn't need to be saved with FD-PIC. + (print_operand): Handle UNSPEC_MOVE_FDPIC and UNSPEC_FUNCDESC_GOT17M4. + (initialize_trampoline): Changed to handle FD-PIC code generation. + (expand_move): If TARGET_FDPIC, use emit_pic_move as needed. + (bfin_expand_call): Generate FD-PIC calls if TARGET_FDPIC. + (override_options): Disallow -mid-shared-library -mfdpic combination. + Can't do unaligned ops if FD-PIC. + Turn off flag_pic if trying to generate non-id-shared-library + non-fdpic code, since it's not supported. + (bfin_assemble_integer): New function. + (TARGET_ASM_INTEGER): Define. + * config/bfin/crti.s (__init, __fini): Save P3 on the stack if + __BFIN_FDPIC__. + * config/bfin/crtn.s: Restore them. + * config/bfin/bfin.h (TARGET_CPU_CPP_BUILTINS): Define __BFIN_FDPIC__ + if TARGET_FDPIC. + (DRIVER_SELF_SPECS, SUBTARGET_DRIVER_SELF_SPECS, + LINK_GCC_C_SEQUENCE_SPEC, ASM_SPEC, LINK_SPEC): New macros. + (FDPIC_FPTR_REGNO, FDPIC_REGNO, OUR_FDPIC_REG): New macros. + (TRAMPOLINE_SIZE, TRAMPOLINE_TEMPLATE): Adjust for FD-PIC. + (CONDITIONAL_REGISTER_USAGE): If TARGET_FDPIC, FDPIC_REGNO is + call-used. + (enum reg_class, REG_CLASS_CONTENTS, REG_CLASS_NAMES): Add + FDPIC_REGS and FDPIC_FPTR_REGS. + (REG_CLASS_FROM_LETTER): Use 'Z' and 'Y' for them. + * config/bfin/bfin.md (UNSPEC_MOVE_FDPIC, UNSPEC_FUNCDESC_GOT17M4, + UNSPEC_VOLATILE_LOAD_FUNCDESC): New constants. + (load_funcdescsi): New pattern. + (call_symbol_fdpic, sibcall_symbol_fdpic, call_value_symbol_fdpic, + sibcall_value_symbol_fdpic, call_insn_fdpic, sibcall_insn_fdpic, + call_value_insn_fdpic, sibcall_value_insn_fdpic): New patterns. + +2006-05-29 Kazu Hirata + + * gcse.c, rtlanal.c: Remove obsolete comments associated with + loop.c. + + * config/bfin/bfin.h (PARM_BOUNDRY, STACK_BOUNDRY): Remove. + + * tree-flow.h: Remove the prototype for add_type_alias. + * tree-ssa-alias.c (add_type_alias): Remove. + +2006-05-28 Kazu Hirata + + * cfgcleanup.c, cfgexpand.c, cgraphunit.c, config/arm/arm.c, + config/fr30/fr30.md, config/i386/i386-interix.h, + config/i386/i386.c, config/i386/i386.md, config/sh/superh.h, + config/sh/superh64.h, config/v850/v850.c, df-core.c, + df-problems.c, df.h, except.c, final.c, haifa-sched.c, + lambda-code.c, libgcc2.h, omp-low.c, optabs.c, predict.c, + reload.c, tree-flow.h, tree-outof-ssa.c, tree-ssa-dce.c, + tree-ssa-pre.c, tree-vect-transform.c: Fix comment typos. + Follow spelling conventions. + * doc/invoke.texi, doc/rtl.texi, doc/tm.texi: Fix typos. + Follow spelling conventions. + 2006-05-27 Richard Guenther PR middle-end/27773 @@ -31,7 +3171,7 @@ PR c++/20103 * gimplify.c (gimplify_decl_expr): Do not call gimple_add_tmp_var - for anonymous variables explicitly declared by front ends. + for anonymous variables explicitly declared by front ends. 2006-05-25 Eric Botcazou @@ -89,11 +3229,11 @@ * df-core.c: Added to header comments. * df.h (df_ru_bb_info, df_rd_bb_info, df_lr_bb_info, df_ur_bb_info, df_urec_bb_info): Added comments. - * df-problems (df_ref_bitmap, ru, rd, lr, ur, + * df-problems (df_ref_bitmap, ru, rd, lr, ur, urec, ri problems): Fixed header comments. - (df_ru_transfer_function): Fixed in-out set dyslexia when copying + (df_ru_transfer_function): Fixed in-out set dyslexia when copying code from df_rd_transfer_function. - + 2006-05-23 Richard Sandiford * libgcc2.c (LIBGCC2_MAX_UNITS_PER_WORD): New macro. @@ -117,7 +3257,7 @@ 2006-05-23 Andrew MacLeod PR c++/26757 - * tree-ssa-loop-im.c (determine_invariantness_stmt): Use + * tree-ssa-loop-im.c (determine_invariantness_stmt): Use add_referenced_var instead of add_referenced_tmp_var. * tree-complex.c (create_one_component_var): Use add_referenced_var. * tree-ssa-loop-manip.c (create_iv, tree_unroll_loop): Use @@ -141,23 +3281,23 @@ isn't already in the hash table. (add_referenced_tmp_var): Remove. (find_new_referenced_vars_1): Use add_referenced_var. - * tree-ssa-pre.c (create_expression_by_pieces, + * tree-ssa-pre.c (create_expression_by_pieces, insert_into_preds_of_block, insert_extra_phis, realify_fake_stores): Use add_referenced_var. * tree-vect-patterns.c (vect_pattern_recog_1): Use add_referenced_var. * lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression, - lambda_loopnest_to_gcc_loopnest, perfect_nestify): Use + lambda_loopnest_to_gcc_loopnest, perfect_nestify): Use add_referenced_var. * tree-vect-transform.c (vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr, vect_create_destination_var, - vect_init_vector, vect_build_loop_niters, + vect_init_vector, vect_build_loop_niters, vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer, vect_gen_niters_for_prolog_loop, vect_create_cond_for_align_checks): Use add_referenced_var. * tree-outof-ssa.c (create_temp): Use add_referenced_var. * tree-flow.h (add_referenced_tmp_var): Remove prototype (add_referenced_var): Add prototype. - * tree-ssa-structalias.c (get_constraint_for, + * tree-ssa-structalias.c (get_constraint_for, intra_create_variable_infos): Use add_referenced_var. 2006-05-23 Alexandre Oliva @@ -189,9 +3329,9 @@ to gen set. (df_ru_bb_local_compute): Reversed statements and removed bogus comment explaining why they should be in wrong order. - (df_ru_dump, df_rd_dump): Enhanced debug info. + (df_ru_dump, df_rd_dump): Enhanced debug info. * modulo-sched.c (sms_schedule, tree_opt_pass pass_sms): Enhanced - debug info. + debug info. * ddg.c (add_deps_for_def): Converted use of reaching defs to reaching uses and fixed space problem. @@ -203,7 +3343,7 @@ 2006-05-22 Gerald Pfeifer * doc/install.texi (Configuration): Remove reference to CrossGCC - FAQ which was hijacked. + FAQ which was gone. (Building): Ditto. 2006-05-22 Kazu Hirata @@ -232,11 +3372,11 @@ * config/avr/avr.c (avr_mcu_types): Add support for attiny261, attiny461, attiny861, attiny25, attiny45, attiny85, attiny24, - attiny44, attiny84, at90pwm2, at90pwm3, atmega165p, atmega169p, - atmega164p, atmega324p, atmega644p, atmega644, atmega329, - atmega3290, atmega649, atmega6490, atmega406, atmega640, - atmega1280, atmega1281, at90can32, at90can64, at90usb646, - at90usb647, at90usb1286 and at90usb1287 devices. + attiny44, attiny84, at90pwm2, at90pwm3, atmega165p, atmega169p, + atmega164p, atmega324p, atmega644p, atmega644, atmega329, + atmega3290, atmega649, atmega6490, atmega406, atmega640, + atmega1280, atmega1281, at90can32, at90can64, at90usb646, + at90usb647, at90usb1286 and at90usb1287 devices. * config/avr/avr.h (LINK_SPEC, CRT_BINUTILS_SPECS): (Ditto.). * config/avr/t-avr (MULTILIB_MATCHES): (Ditto.). @@ -362,7 +3502,7 @@ (df_ref_record_1): Changed DF_REF_CLOBBER into DF_REF_MUST_CLOBBER and set DF_REF_PARTIAL. (df_defs_record): Changed DF_REF_CLOBBER into DF_REF_MUST_CLOBBER. - (df_uses_record): Added DF_REF_PARTIAL for subreg. + (df_uses_record): Added DF_REF_PARTIAL for subreg. (df_scan_add_problem): Added flags parameter. (df_ref_create_structure): Changed switching structure. (df_bb_refs_record): Fixed case where duplicate artificial refs @@ -373,8 +3513,8 @@ (df_record_exit_block_uses, df_insn_refs_record): Changed location of flags. (df_set_state): Removed function. (df_grow_reg_info, df_reg_chain_unlink, df_ref_remove, - df_insn_create_insn_record, df_insn_refs_delete, - df_ref_create_structure): Formatting changes. + df_insn_create_insn_record, df_insn_refs_delete, + df_ref_create_structure): Formatting changes. * df-core.c (df_mvs_dump, df_set_flags, df_clear_flags, df_delete_basic_block): New function. (df_init): Changed location of flags. @@ -388,7 +3528,7 @@ (df_prune_to_subcfg): Made public. (df_analyze_problem): Added blocks_to_init parameter and made public. - (df_ref_record, df_bb_refs_record, df_mark_reg, + (df_ref_record, df_bb_refs_record, df_mark_reg, df_record_exit_block_uses): Whitespace changes. (df_dump): Whitespace changes. * df.h: Some reordering to remove forward references. @@ -481,7 +3621,7 @@ * dwarf2out.c (dwarf2_name): Use the dwarf_name language hook. * ada/misc.c (gnat_dwarf_name): New function. (LANG_HOOKS_DWARF_NAME): Define to gnat_dwarf_name. - + 2006-05-19 Richard Sandiford * libgcc2.c (MIN_UNITS_PER_WORD): Move default definition from @@ -758,7 +3898,7 @@ 2006-05-15 Per Bothner - * tree.c: (last_annotated_node): Use sources_locus typedef. + * tree.c: (last_annotated_node): Use source_locus typedef. This permits bootstrapping with --enable-mapped-location. 2006-05-15 Zdenek Dvorak @@ -2753,7 +5893,7 @@ * doc/invoke.texi (C++ Dialect Options): Rewrite -fvisibility-inlines-hidden documentation to describe something entirely different, although in practise compatible. - (Code Gen Options): Warn about system headers in -fvisibiltity= + (Code Gen Options): Warn about system headers in -fvisibility= documentation. * doc/extend.texi (Other Builtins): Document that @@ -5787,7 +8927,7 @@ * recog.c (reg_fits_class_p): If cl is NO_REGS, return 0 immediately. * doc/md.texi: Document new constraint-definition mechanism and the C interface it provides. Remove references to old mechanism - elsewhere in the document. + elsewhere in the document. (Machine Constraints): Use pathnames relative to gcc directory, i.e. config/ARCH/FILE. Change i386 section to refer to config/i386/predicates.md; update that section to match docstrings. @@ -7042,7 +10182,7 @@ * c.opt (-Wwrite-strings): Declare variable warn_write_strings. Clarify documentation. * c-common.h (warn_write_strings): Remove. - * c-common.c (warn_write_strings): Likewise. + * c-common.c (warn_write_strings): Likewise. * c-opts.c (c_common_init_options): Enable -Wwrite-strings by default for C++. @@ -7480,9 +10620,9 @@ PR c++/26140 Revert 2006-01-30 Richard Guenther - PR c++/23372 - * gimplify.c (gimplify_target_expr): Handle easy cases - without creating a temporary. + PR c++/23372 + * gimplify.c (gimplify_target_expr): Handle easy cases + without creating a temporary. 2006-02-07 Pete Steinmetz @@ -9235,7 +12375,7 @@ 2006-01-20 DJ Delorie - * varasm.c (initialize_constant_valid_p): Allow pointers + * varasm.c (initializer_constant_valid_p): Allow pointers initialized from integer constants of lesser precision. (output_constant): Allow non-int-sized pointer modes to be initialized from integer constants. diff --git a/gcc/ChangeLog-2004 b/gcc/ChangeLog-2004 index 80dfce9b442..71d1f8c71fa 100644 --- a/gcc/ChangeLog-2004 +++ b/gcc/ChangeLog-2004 @@ -4691,7 +4691,7 @@ 2004-11-18 Kazuhiro Inaoka * config/m32r/linux.h (TARGET_ASM_FILE_END): Set - TARGET_ASM_FILE_END to file_end_indicate_exec_stack.3 + TARGET_ASM_FILE_END to file_end_indicate_exec_stack. 2004-11-18 Andreas Schwab diff --git a/gcc/ChangeLog.ipa b/gcc/ChangeLog.ipa index 67e00e3785b..5640b73ee23 100644 --- a/gcc/ChangeLog.ipa +++ b/gcc/ChangeLog.ipa @@ -1,3 +1,7 @@ +2006-09-12 Jan Hubicka + + * Merge from mainline. + 2006-09-07 Razya Ladelsky * testsuite/gcc.dg/matrix: Create new directory for matrix optimizatinos. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 307fe38d7ca..4fca90afd78 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20060528 +20060911 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 7abdd67b945..63d72b4172d 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -86,11 +86,14 @@ objdir = @objdir@ host_subdir=@host_subdir@ build_subdir=@build_subdir@ +build_libsubdir=@build_libsubdir@ ifeq ($(host_subdir),.) build_objdir := ../$(build_subdir) +build_libobjdir := ../$(build_libsubdir) else build_objdir := ../../$(build_subdir) +build_libobjdir := ../../$(build_libsubdir) endif # -------- @@ -149,7 +152,7 @@ BOOT_LANGUAGES = c @all_boot_languages@ # TCFLAGS is used for compilations with the GCC just built. XCFLAGS = TCFLAGS = -CFLAGS = -g +CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ STAGE1_CFLAGS = -g @stage1_cflags@ STAGE1_CHECKING = -DENABLE_CHECKING -DENABLE_ASSERT_CHECKING @@ -509,8 +512,12 @@ man7dir = $(mandir)/man7 # Dir for temp files. tmpdir = /tmp +datarootdir = @datarootdir@ +docdir = @docdir@ +# Directory in which to build HTML +build_htmldir = $(objdir)/HTML/gcc-$(version) # Directory in which to put HTML -htmldir = $(objdir)/HTML/gcc-$(version) +htmldir = @htmldir@ # Whether we were configured with NLS. USE_NLS = @USE_NLS@ @@ -766,7 +773,7 @@ OPTABS_H = optabs.h insn-codes.h REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H) $(FUNCTION_H) RESOURCE_H = resource.h hard-reg-set.h SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) -INTEGRATE_H = integrate.h varray.h +INTEGRATE_H = integrate.h $(VARRAY_H) CFGLAYOUT_H = cfglayout.h $(BASIC_BLOCK_H) CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H) IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H) @@ -805,7 +812,7 @@ SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h $(PARAMS_H) LAMBDA_H = lambda.h $(TREE_H) vec.h $(GGC_H) TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H) VARRAY_H = varray.h $(MACHMODE_H) $(SYSTEM_H) coretypes.h $(TM_H) -TREE_INLINE_H = tree-inline.h varray.h $(SPLAY_TREE_H) +TREE_INLINE_H = tree-inline.h $(VARRAY_H) $(SPLAY_TREE_H) REAL_H = real.h $(MACHMODE_H) # @@ -828,7 +835,7 @@ ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) # Build and host support libraries. LIBIBERTY = ../libiberty/libiberty.a -BUILD_LIBIBERTY = $(build_objdir)/libiberty/libiberty.a +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a # Dependencies on the intl and portability libraries. LIBDEPS= $(CPPLIB) $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP) $(LIBDECNUMBER) @@ -851,7 +858,7 @@ LDEXP_LIB = @LDEXP_LIB@ # even if we are cross-building GCC. BUILD_LIBS = $(BUILD_LIBIBERTY) -BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \ +BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o build/vec.o \ build/min-insn-modes.o build/gensupport.o build/print-rtl.o BUILD_ERRORS = build/errors.o @@ -1215,7 +1222,8 @@ cs-tm_p.h: Makefile # might be on a read-only file system. If configured for maintainer mode # then do allow autoconf to be run. -$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac +$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/aclocal.m4 \ + $(srcdir)/acinclude.m4 (cd $(srcdir) && autoconf) gccbug: $(srcdir)/gccbug.in @@ -1457,7 +1465,7 @@ libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) specs \ mv tmp-libgcc.mk libgcc.mk # All the things that might cause us to want to recompile bits of libgcc. -LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \ +LIBGCC_DEPS = $(GCC_PASSES) stmp-int-hdrs $(STMP_FIXPROTO) \ libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \ $(MACHMODE_H) longlong.h gbl-ctors.h config.status $(srcdir)/libgcc2.h \ tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \ @@ -1828,7 +1836,7 @@ stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ toplev.h tree-ssa-structalias.o: tree-ssa-structalias.c tree-ssa-structalias.h \ $(SYSTEM_H) $(CONFIG_H) $(GGC_H) $(TREE_H) $(TREE_FLOW_H) \ - $(TM_H) coretypes.h cgraph.h tree-pass.h $(TIMEVAR_H) \ + $(TM_H) coretypes.h $(CGRAPH_H) tree-pass.h $(TIMEVAR_H) \ gt-tree-ssa-structalias.h $(PARAMS_H) tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) output.h $(DIAGNOSTIC_H) \ @@ -1934,7 +1942,7 @@ tree-cfgcleanup.o : tree-cfgcleanup.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ tree-ssa-propagate.h rtl-factoring.o : rtl-factoring.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ coretypes.h $(TM_H) $(BASIC_BLOCK_H) $(GGC_H) $(REGS_H) $(PARAMS_H) $(EXPR_H) \ - addresses.h $(TM_P_H) tree-pass.h tree-flow.h timevar.h output.h + addresses.h $(TM_P_H) tree-pass.h $(TREE_FLOW_H) $(TIMEVAR_H) output.h tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(FUNCTION_H) $(TM_H) coretypes.h \ $(TREE_DUMP_H) $(DIAGNOSTIC_H) except.h tree-pass.h $(FLAGS_H) langhooks.h \ @@ -1980,7 +1988,7 @@ tree-ssa-loop-unswitch.o : tree-ssa-loop-unswitch.c $(TREE_FLOW_H) \ coretypes.h $(TREE_DUMP_H) tree-pass.h $(BASIC_BLOCK_H) hard-reg-set.h tree-ssa-address.o : tree-ssa-address.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) \ - output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ + output.h $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ tree-pass.h $(FLAGS_H) $(TREE_INLINE_H) $(RECOG_H) insn-config.h $(EXPR_H) \ gt-tree-ssa-address.h $(GGC_H) tree-ssa-loop-niter.o : tree-ssa-loop-niter.c $(TREE_FLOW_H) $(CONFIG_H) \ @@ -2079,7 +2087,7 @@ tree-vect-analyze.o: tree-vect-analyze.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ tree-vectorizer.h $(TREE_DATA_REF_H) $(SCEV_H) $(EXPR_H) tree-chrec.h tree-vect-patterns.o: tree-vect-patterns.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) \ - diagnostic.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \ + $(DIAGNOSTIC_H) $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) $(CFGLOOP_H) \ tree-vectorizer.h $(TREE_DATA_REF_H) $(EXPR_H) $(TARGET_H) tree-vect-transform.o: tree-vect-transform.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(GGC_H) $(OPTABS_H) $(RECOG_H) $(TREE_H) $(RTL_H) \ @@ -2155,7 +2163,7 @@ passes.o : passes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \ langhooks.h insn-flags.h $(CFGLAYOUT_H) $(REAL_H) $(CFGLOOP_H) \ hosthooks.h $(CGRAPH_H) $(COVERAGE_H) tree-pass.h $(TREE_DUMP_H) \ - $(GGC_H) $(INTEGRATE_H) $(CPPLIB_H) opts.h tree-flow.h $(TREE_INLINE_H) + $(GGC_H) $(INTEGRATE_H) $(CPPLIB_H) opts.h $(TREE_FLOW_H) $(TREE_INLINE_H) main.o : main.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h @@ -2197,7 +2205,7 @@ except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \ dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) \ gt-except.h $(CGRAPH_H) $(INTEGRATE_H) $(DIAGNOSTIC_H) dwarf2.h \ - $(TARGET_H) $(TM_P_H) tree-pass.h timevar.h + $(TARGET_H) $(TM_P_H) tree-pass.h $(TIMEVAR_H) expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(FLAGS_H) $(FUNCTION_H) $(REGS_H) $(EXPR_H) $(OPTABS_H) \ libfuncs.h $(INSN_ATTR_H) insn-config.h $(RECOG_H) output.h \ @@ -2278,27 +2286,27 @@ simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ langhooks.h toplev.h $(FLAGS_H) $(GGC_H) $(TARGET_H) $(CGRAPH_H) \ gt-cgraph.h output.h intl.h $(BASIC_BLOCK_H) debug.h $(HASHTAB_H) \ - $(TREE_INLINE_H) $(VARRAY_H) tree-dump.h + $(TREE_INLINE_H) $(VARRAY_H) $(TREE_DUMP_H) cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \ $(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \ $(TREE_FLOW_H) tree-pass.h $(C_COMMON_H) debug.h $(DIAGNOSTIC_H) \ - $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) $(IPA_PROP_H) + $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) $(IPA_PROP_H) \ + gt-cgraphunit.h ipa.o : ipa.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(CGRAPH_H) ipa-prop.o : ipa-prop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ langhooks.h $(GGC_H) target.h $(CGRAPH_H) $(IPA_PROP_H) \ - $(TREE_FLOW_H) $(TM_H) tree-pass.h $(FLAGS_H) + $(TREE_FLOW_H) $(TM_H) tree-pass.h $(FLAGS_H) $(TREE_H) ipa-cp.o : ipa-cp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ langhooks.h target.h $(CGRAPH_H) $(IPA_PROP_H) \ - tree-flow.h $(TM_H) tree-pass.h $(FLAGS_H) $(TREE_H) \ - diagnostic.h + $(TREE_FLOW_H) $(TM_H) tree-pass.h $(FLAGS_H) $(TREE_H) $(DIAGNOSTIC_H) ipa-alias.o : ipa-alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ langhooks.h $(GGC_H) target.h $(CGRAPH_H) output.h $(IPA_PROP_H) tree-iterator.h \ tree-inline.h function.h $(TREE_FLOW_H) alloc-pool.h $(TM_H) -ipa-inline.o : ipa-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ +ipa-inline.o : ipa-inline.c gt-ipa-inline.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) langhooks.h $(TREE_INLINE_H) $(FLAGS_H) $(CGRAPH_H) intl.h \ $(DIAGNOSTIC_H) $(FIBHEAP_H) $(PARAMS_H) $(TIMEVAR_H) tree-pass.h \ - $(COVERAGE_H) $(HASHTAB_H) + $(COVERAGE_H) $(HASHTAB_H) ipa-utils.o : ipa-utils.c $(IPA_UTILS_H) $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \ pointer-set.h $(GGC_H) $(C_COMMON_H) $(TREE_GIMPLE_H) \ @@ -2306,15 +2314,19 @@ ipa-utils.o : ipa-utils.c $(IPA_UTILS_H) $(CONFIG_H) $(SYSTEM_H) \ ipa-reference.o : ipa-reference.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \ pointer-set.h $(GGC_H) $(IPA_REFERENCE_H) $(IPA_UTILS_H) $(C_COMMON_H) \ - $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H) + $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h \ + $(DIAGNOSTIC_H) $(FUNCTION_H) + ipa-pure-const.o : ipa-pure-const.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \ - pointer-set.h $(GGC_H) $(IPA_UTILS_H) $(C_COMMON_H) \ + pointer-set.h $(GGC_H) $(IPA_UTILS_H) $(C_COMMON_H) $(TARGET_H) \ $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H) ipa-type-escape.o : ipa-type-escape.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \ pointer-set.h $(GGC_H) $(IPA_TYPE_ESCAPE_H) $(IPA_UTILS_H) $(C_COMMON_H) \ - $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H) + $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h \ + $(DIAGNOSTIC_H) $(FUNCTION_H) + matrix-reorg.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) function.h \ toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \ @@ -2333,10 +2345,10 @@ cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \ except.h $(TARGET_H) $(PARAMS_H) rtlhooks-def.h tree-pass.h $(REAL_H) web.o : web.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) $(FUNCTION_H) output.h toplev.h \ - $(DF_H) $(OBSTACK_H) timevar.h tree-pass.h + $(DF_H) $(OBSTACK_H) $(TIMEVAR_H) tree-pass.h see.o : see.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ - hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) function.h output.h toplev.h \ - $(DF_H) $(OBSTACK_H) timevar.h tree-pass.h + hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) $(FUNCTION_H) output.h toplev.h \ + $(DF_H) $(OBSTACK_H) $(TIMEVAR_H) tree-pass.h $(EXPR_H) gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(REGS_H) hard-reg-set.h $(FLAGS_H) $(REAL_H) insn-config.h $(GGC_H) \ $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) output.h toplev.h \ @@ -2351,7 +2363,7 @@ lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \ mode-switching.o : mode-switching.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(INSN_ATTR_H) $(RECOG_H) $(BASIC_BLOCK_H) $(TM_P_H) $(FUNCTION_H) \ - output.h tree-pass.h timevar.h $(REAL_H) + output.h tree-pass.h $(TIMEVAR_H) $(REAL_H) tree-ssa-dce.o : tree-ssa-dce.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \ $(RTL_H) $(TM_P_H) $(TREE_FLOW_H) $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) \ coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H) $(BASIC_BLOCK_H) \ @@ -2390,13 +2402,13 @@ df-scan.o : df-scan.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ var-tracking.o : var-tracking.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(TREE_H) hard-reg-set.h insn-config.h reload.h $(FLAGS_H) \ $(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H) \ - $(REGS_H) $(EXPR_H) timevar.h tree-pass.h + $(REGS_H) $(EXPR_H) $(TIMEVAR_H) tree-pass.h conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \ $(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H) profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) $(FUNCTION_H) \ toplev.h $(COVERAGE_H) $(TREE_FLOW_H) value-prof.h cfghooks.h \ - cfgloop.h timevar.h tree-pass.h + $(CFGLOOP_H) $(TIMEVAR_H) tree-pass.h tree-profile.o : tree-profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) \ $(FUNCTION_H) toplev.h $(COVERAGE_H) $(TREE_H) value-prof.h $(TREE_DUMP_H) \ @@ -2405,7 +2417,7 @@ value-prof.o : value-prof.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(BASIC_BLOCK_H) hard-reg-set.h value-prof.h $(EXPR_H) output.h $(FLAGS_H) \ $(RECOG_H) insn-config.h $(OPTABS_H) $(REGS_H) $(GGC_H) $(DIAGNOSTIC_H) \ $(TREE_H) $(COVERAGE_H) $(RTL_H) $(GCOV_IO_H) $(TREE_FLOW_H) \ - tree-flow-inline.h timevar.h tree-pass.h + tree-flow-inline.h $(TIMEVAR_H) tree-pass.h loop-doloop.o : loop-doloop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(FLAGS_H) $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) \ toplev.h $(CFGLOOP_H) output.h $(PARAMS_H) $(TARGET_H) @@ -2437,7 +2449,7 @@ cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(TIMEVAR_H) hard-reg-set.h output.h $(FLAGS_H) $(RECOG_H) \ toplev.h insn-config.h cselib.h $(TARGET_H) $(TM_P_H) $(PARAMS_H) \ - $(REGS_H) $(EMIT_RTL_H) $(CFGLAYOUT_H) tree-pass.h cfgloop.h expr.h + $(REGS_H) $(EMIT_RTL_H) $(CFGLAYOUT_H) tree-pass.h $(CFGLOOP_H) $(EXPR_H) cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(FLAGS_H) $(FUNCTION_H) \ $(OBSTACK_H) toplev.h $(TREE_FLOW_H) $(TREE_H) @@ -2460,7 +2472,7 @@ cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ coretypes.h $(TM_H) cfghooks.h $(OBSTACK_H) loop-init.o : loop-init.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) \ - coretypes.h $(TM_H) $(OBSTACK_H) tree-pass.h timevar.h $(FLAGS_H) + coretypes.h $(TM_H) $(OBSTACK_H) tree-pass.h $(TIMEVAR_H) $(FLAGS_H) loop-unswitch.o : loop-unswitch.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) $(PARAMS_H) \ output.h $(EXPR_H) coretypes.h $(TM_H) $(OBSTACK_H) @@ -2476,7 +2488,7 @@ combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FLAGS_H) $(FUNCTION_H) insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \ rtlhooks-def.h $(BASIC_BLOCK_H) $(RECOG_H) $(REAL_H) hard-reg-set.h \ toplev.h $(TM_P_H) $(TREE_H) $(TARGET_H) output.h $(PARAMS_H) $(OPTABS_H) \ - insn-codes.h timevar.h tree-pass.h + insn-codes.h $(TIMEVAR_H) tree-pass.h regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) $(REGS_H) insn-config.h \ $(RECOG_H) reload.h $(REAL_H) toplev.h $(FUNCTION_H) output.h $(GGC_H) \ @@ -2485,13 +2497,13 @@ regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(FLAGS_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \ output.h $(FUNCTION_H) $(INSN_ATTR_H) toplev.h except.h reload.h $(TM_P_H) \ - $(GGC_H) $(INTEGRATE_H) timevar.h tree-pass.h + $(GGC_H) $(INTEGRATE_H) $(TIMEVAR_H) tree-pass.h bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FLAGS_H) $(GGC_H) gt-bitmap.h bitmap.h $(OBSTACK_H) global.o : global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FLAGS_H) reload.h $(FUNCTION_H) $(RECOG_H) $(REGS_H) hard-reg-set.h \ insn-config.h output.h toplev.h $(TM_P_H) $(MACHMODE_H) tree-pass.h \ - timevar.h vecprim.h + $(TIMEVAR_H) vecprim.h varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) \ $(HASHTAB_H) $(BCONFIG_H) $(VARRAY_H) toplev.h vec.o : vec.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) coretypes.h vec.h $(GGC_H) \ @@ -2511,12 +2523,12 @@ postreload.o : postreload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(REAL_H) $(FLAGS_H) $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) \ hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) $(RECOG_H) output.h \ $(FUNCTION_H) toplev.h cselib.h $(TM_P_H) except.h $(TREE_H) $(MACHMODE_H) \ - $(OBSTACK_H) timevar.h tree-pass.h + $(OBSTACK_H) $(TIMEVAR_H) tree-pass.h postreload-gcse.o : postreload-gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) output.h toplev.h \ $(TM_P_H) except.h $(TREE_H) $(TARGET_H) $(HASHTAB_H) intl.h $(OBSTACK_H) \ - $(PARAMS_H) timevar.h tree-pass.h $(REAL_H) + $(PARAMS_H) $(TIMEVAR_H) tree-pass.h $(REAL_H) caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FLAGS_H) $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) $(FUNCTION_H) \ addresses.h $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H) @@ -2527,14 +2539,14 @@ reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ conditions.h hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h \ $(INSN_ATTR_H) except.h $(RECOG_H) $(FUNCTION_H) $(FLAGS_H) output.h \ $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H) $(OBSTACK_H) $(RESOURCE_H) \ - timevar.h $(TARGET_H) tree-pass.h + $(TIMEVAR_H) $(TARGET_H) tree-pass.h alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FLAGS_H) hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h \ $(ALIAS_H) $(EMIT_RTL_H) $(GGC_H) $(FUNCTION_H) cselib.h $(TREE_H) $(TM_P_H) \ langhooks.h $(TARGET_H) gt-alias.h $(TIMEVAR_H) $(CGRAPH_H) \ $(SPLAY_TREE_H) $(VARRAY_H) $(IPA_TYPE_ESCAPE_H) tree-pass.h regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ - insn-config.h timevar.h tree-pass.h \ + insn-config.h $(TIMEVAR_H) tree-pass.h \ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \ $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h ddg.o : ddg.c $(DDG_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) \ @@ -2546,11 +2558,12 @@ modulo-sched.o : modulo-sched.c $(DDG_H) $(CONFIG_H) $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TARGET_H) toplev.h $(RTL_H) $(TM_P_H) $(REGS_H) $(FUNCTION_H) \ $(FLAGS_H) insn-config.h $(INSN_ATTR_H) except.h $(RECOG_H) \ $(SCHED_INT_H) $(CFGLAYOUT_H) $(CFGLOOP_H) $(EXPR_H) $(PARAMS_H) \ - cfghooks.h $(DF_H) $(GCOV_IO_H) hard-reg-set.h $(TM_H) timevar.h tree-pass.h -haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ - $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h $(FUNCTION_H) \ - $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H) output.h \ - $(PARAMS_H) + cfghooks.h $(DF_H) $(GCOV_IO_H) hard-reg-set.h $(TM_H) $(TIMEVAR_H) \ + tree-pass.h +haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ + $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ + $(FUNCTION_H) $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) \ + $(TARGET_H) output.h $(PARAMS_H) sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(FUNCTION_H) $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h \ @@ -2558,7 +2571,7 @@ sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(FUNCTION_H) $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(PARAMS_H) \ - $(TM_P_H) $(TARGET_H) $(CFGLAYOUT_H) timevar.h tree-pass.h + $(TM_P_H) $(TARGET_H) $(CFGLAYOUT_H) $(TIMEVAR_H) tree-pass.h sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(FUNCTION_H) $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) \ @@ -2571,15 +2584,15 @@ final.o : final.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ insn-config.h $(INSN_ATTR_H) $(FUNCTION_H) output.h hard-reg-set.h \ except.h debug.h xcoffout.h toplev.h reload.h dwarf2out.h tree-pass.h \ $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) $(EXPR_H) $(CFGLAYOUT_H) dbxout.h \ - timevar.h cgraph.h $(COVERAGE_H) $(REAL_H) + $(TIMEVAR_H) $(CGRAPH_H) $(COVERAGE_H) $(REAL_H) recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(FUNCTION_H) $(BASIC_BLOCK_H) $(REGS_H) $(RECOG_H) $(EXPR_H) \ $(FLAGS_H) insn-config.h $(INSN_ATTR_H) toplev.h output.h reload.h \ - addresses.h $(TM_P_H) timevar.h tree-pass.h hard-reg-set.h $(REAL_H) + addresses.h $(TM_P_H) $(TIMEVAR_H) tree-pass.h hard-reg-set.h $(REAL_H) reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(TREE_H) $(RECOG_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) \ insn-config.h toplev.h reload.h $(FUNCTION_H) $(TM_P_H) $(GGC_H) \ - $(BASIC_BLOCK_H) output.h $(VARRAY_H) timevar.h tree-pass.h \ + $(BASIC_BLOCK_H) output.h $(VARRAY_H) $(TIMEVAR_H) tree-pass.h \ $(TARGET_H) vecprim.h sreal.o: sreal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) sreal.h predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ @@ -2607,11 +2620,11 @@ timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \ output.h $(RECOG_H) $(FUNCTION_H) $(OBSTACK_H) $(FLAGS_H) $(TM_P_H) \ - addresses.h reload.h toplev.h timevar.h tree-pass.h + addresses.h reload.h toplev.h $(TIMEVAR_H) tree-pass.h ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(REGS_H) toplev.h $(FLAGS_H) insn-config.h $(FUNCTION_H) $(RECOG_H) \ $(TARGET_H) $(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) \ - $(REAL_H) $(OPTABS_H) $(CFGLOOP_H) hard-reg-set.h timevar.h tree-pass.h + $(REAL_H) $(OPTABS_H) $(CFGLOOP_H) hard-reg-set.h $(TIMEVAR_H) tree-pass.h lambda-mat.o : lambda-mat.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \ $(TM_H) coretypes.h $(TREE_H) lambda-trans.o: lambda-trans.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \ @@ -2841,7 +2854,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \ $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/cgraph.h \ $(srcdir)/c-common.h $(srcdir)/c-tree.h $(srcdir)/reload.h \ $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \ - $(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/ipa-alias.c \ + $(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/ipa-alias.c $(srcdir)/ipa-inline.c \ $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \ $(srcdir)/dojump.c $(srcdir)/tree-profile.c \ $(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \ @@ -2863,7 +2876,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \ $(srcdir)/ipa-reference.c $(srcdir)/tree-ssa-structalias.h \ $(srcdir)/tree-ssa-structalias.c \ $(srcdir)/c-pragma.h $(srcdir)/omp-low.c \ - $(srcdir)/targhooks.c $(out_file) \ + $(srcdir)/targhooks.c $(srcdir)/cgraphunit.c $(out_file) \ @all_gtfiles@ GTFILES_FILES_LANGS = @all_gtfiles_files_langs@ @@ -2895,7 +2908,7 @@ gt-tree-profile.h gt-tree-ssa-address.h \ gt-tree-iterator.h gt-gimplify.h \ gt-tree-phinodes.h gt-tree-nested.h \ gt-tree-ssa-propagate.h \ -gt-tree-ssa-structalias.h \ +gt-tree-ssa-structalias.h gt-ipa-inline.h gt-cgraphunit.h \ gt-stringpool.h gt-targhooks.h gt-omp-low.h : s-gtype ; @true define echo_quoted_to_gtyp @@ -2956,6 +2969,11 @@ build/gencondmd.o : build/gencondmd.c $(BCONFIG_H) $(SYSTEM_H) \ coretypes.h $(GTM_H) insn-constants.h $(RTL_H) $(TM_P_H) \ $(FUNCTION_H) $(REGS_H) $(RECOG_H) $(REAL_H) output.h $(FLAGS_H) \ $(RESOURCE_H) toplev.h reload.h except.h tm-constrs.h +# This pulls in tm-pred.h which contains inline functions wrapping up +# predicates from the back-end so those functions must be discarded. +# No big deal since gencondmd.c is a dummy file for non-GCC compilers. +build/gencondmd.o : \ + BUILD_CFLAGS := $(filter-out -fkeep-inline-functions, $(BUILD_CFLAGS)) # ...these are the programs themselves. build/genattr.o : genattr.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ @@ -3020,10 +3038,7 @@ genprogmd = attr attrtab automata codes conditions config constants emit \ extract flags mddeps opinit output peep preds recog $(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_RTL) $(BUILD_ERRORS) -# These programs need files over and above what they get from the above list. -build/genextract$(build_exeext) : build/vec.o - -build/genautomata$(build_exeext) : build/vec.o +# These programs need libs over and above what they get from the above list. build/genautomata$(build_exeext) : BUILD_LIBS += -lm # These programs are not linked with the MD reader. @@ -3232,7 +3247,7 @@ stmp-fixinc: gsyslimits.h macro_list \ echo The directory that should contain system headers does not exist: >&2 ; \ echo " ${SYSTEM_HEADER_DIR}" >&2 ; \ tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \ - if test "x${SYSTEM_HEADER_DIR}" = "x${tooldir_sysinc}"; \ + if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \ then sleep 1; else exit 1; fi; \ fi rm -rf include; mkdir include @@ -3417,10 +3432,10 @@ doc/gcc.dvi: $(TEXI_GCC_FILES) doc/gccint.dvi: $(TEXI_GCCINT_FILES) doc/cppinternals.dvi: $(TEXI_CPPINT_FILES) -$(htmldir)/cpp/index.html: $(TEXI_CPP_FILES) -$(htmldir)/gcc/index.html: $(TEXI_GCC_FILES) -$(htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES) -$(htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES) +$(build_htmldir)/cpp/index.html: $(TEXI_CPP_FILES) +$(build_htmldir)/gcc/index.html: $(TEXI_GCC_FILES) +$(build_htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES) +$(build_htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES) dvi:: doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \ doc/cppinternals.dvi lang.dvi @@ -3432,17 +3447,28 @@ doc/%.dvi: %.texi doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES) $(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< -html:: $(htmldir)/cpp/index.html $(htmldir)/gcc/index.html \ - $(htmldir)/gccinstall/index.html $(htmldir)/gccint/index.html \ - $(htmldir)/cppinternals/index.html lang.html +# List the directories or single hmtl files which are installed by +# install-html. The lang.html file triggers language fragments to build +# html documentation. Installing language fragment documentation is not +# yet supported. +HTMLS_INSTALL=$(build_htmldir)/cpp $(build_htmldir)/gcc \ + $(build_htmldir)/gccinstall $(build_htmldir)/gccint \ + $(build_htmldir)/cppinternals + +# List the html file targets. +HTMLS_BUILD=$(build_htmldir)/cpp/index.html $(build_htmldir)/gcc/index.html \ + $(build_htmldir)/gccinstall/index.html $(build_htmldir)/gccint/index.html \ + $(build_htmldir)/cppinternals/index.html lang.html + +html:: $(HTMLS_BUILD) -$(htmldir)/%/index.html: %.texi +$(build_htmldir)/%/index.html: %.texi $(mkinstalldirs) $(@D) rm -f $(@D)/* $(TEXI2HTML) -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $< # Duplicate entry to handle renaming of gccinstall -$(htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES) +$(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES) $(mkinstalldirs) $(@D) echo rm -f $(@D)/* $(TEXI2HTML) -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $< @@ -3735,6 +3761,25 @@ $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs else true; fi; \ else true; fi; +html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-html: $(HTMLS_BUILD) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS_INSTALL)'; for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ + f=$(html__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + else \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + fi; \ + done + # Install the man pages. install-man: lang.install-man \ $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) \ @@ -4351,8 +4396,13 @@ fastcompare fastcompare3 fastcompare4 fastcompare-lean fastcompare3-lean fastcom for file in $$dir/*$(objext); do \ case "$@" in \ slowcompare* ) \ - tail +16c ./$$file > tmp-foo1; \ - tail +16c stage$$stage/$$file > tmp-foo2; \ + if tail -c +1 /dev/null 2>&1; then \ + skip16='-c +17'; \ + else \ + skip16='+17c'; \ + fi; \ + tail $$skip16 ./$$file > tmp-foo1; \ + tail $$skip16 stage$$stage/$$file > tmp-foo2; \ cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1; \ cmpret=$$?; \ ;; \ @@ -4641,7 +4691,7 @@ risky-stage4: stage4 XGETTEXT = @XGETTEXT@ GMSGFMT = @GMSGFMT@ MSGMERGE = msgmerge -CATALOGS = @CATALOGS@ +CATALOGS = $(patsubst %,po/%,@CATALOGS@) .PHONY: build- install- build-po install-po update-po diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 870ed8cf290..f7a0d9f2603 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,43 @@ +2006-07-28 Volker Reichelt + + * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies. + +2006-06-23 Olivier Hainque + + * misc.c (gnat_type_max_size): Look at TYPE_ADA_SIZE if we have + not been able to get a constant upper bound from TYPE_SIZE_UNIT. + +2006-06-20 James A. Morrison + Eric Botcazou + + PR ada/18692 + * Make-lang.in: Add check-gnat to lang_checks. Rename existing + check-gnat into check-acats. + +2006-06-17 Karl Berry + + * gnat-style.texi (@dircategory): Use "Software development" + instead of "Programming", following the Free Software Directory. + +2006-06-12 John David Anglin + + PR ada/27944 + * s-taprop-hpux-dce.adb: Delete redundant 'with System.Parameters'. + +2006-06-06 Laurent GUERBY + + PR ada/27769 + mlib-utl.adb: Use Program_Name. + +2006-05-28 Kazu Hirata + + * decl.c, env.c, gigi.h, init.c, initialize.c, raise-gcc.c, + sem_ch13.adb, sysdep.c, targtyps.c, tb-alvxw.c, tracebak.c, + trans.c, utils.c: Fix comment typos. Follow spelling + conventions. + * gnat_rm.texi, gnat_ugn.texi, : Fix typos. Follow spelling + conventions. + 2006-05-14 H.J. Lu * Make-lang.in (ada/decl.o): Replace target.h with $(TARGET_H). diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in index bbbede5d513..2475c2af71a 100644 --- a/gcc/ada/Make-lang.in +++ b/gcc/ada/Make-lang.in @@ -818,16 +818,18 @@ ada.stagefeedback: stagefeedback-start -$(MV) ada/*$(objext) ada/*.ali ada/b_*.c stagefeedback/ada -$(MV) ada/stamp-* stagefeedback/ada -check-ada: check-gnat +lang_checks += check-gnat + +check-ada: check-acats check-gnat ACATSDIR = $(TESTSUITEDIR)/ada/acats -check-gnat: +check-acats: test -d $(ACATSDIR) || mkdir -p $(ACATSDIR) testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \ export testdir; cd $(ACATSDIR); $(SHELL) $${testdir}/run_acats $(CHAPTERS) -.PHONY: check-gnat +.PHONY: check-acats # Bootstrapping targets for just GNAT - use the same stage directories @@ -1052,18 +1054,18 @@ ada/cuintp.o : ada/cuintp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ ada/elists.h ada/nlists.h ada/fe.h ada/gigi.h ada/decl.o : ada/decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ - flags.h toplev.h convert.h $(TARGET_H) ada/ada.h ada/types.h ada/atree.h \ + $(FLAGS_H) toplev.h convert.h $(TARGET_H) ada/ada.h ada/types.h ada/atree.h \ ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h \ ada/namet.h ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \ gt-ada-decl.h $(EXPR_H) ada/misc.o : ada/misc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ - $(RTL_H) $(EXPR_H) insn-codes.h insn-flags.h insn-config.h recog.h flags.h \ - diagnostic.h output.h except.h $(TM_P_H) langhooks.h debug.h \ + $(RTL_H) $(EXPR_H) insn-codes.h insn-flags.h insn-config.h recog.h \ + $(FLAGS_H) $(DIAGNOSTIC_H) output.h except.h $(TM_P_H) langhooks.h debug.h \ $(LANGHOOKS_DEF_H) libfuncs.h $(OPTABS_H) ada/ada.h ada/types.h \ ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h \ ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \ - ada/adadecode.h opts.h options.h $(TARGET_H) real.h + ada/adadecode.h opts.h options.h $(TARGET_H) $(REAL_H) ada/targtyps.o : ada/targtyps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) ada/ada.h ada/types.h ada/atree.h ada/nlists.h ada/elists.h \ @@ -1071,19 +1073,19 @@ ada/targtyps.o : ada/targtyps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h ada/trans.o : ada/trans.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ - $(TREE_H) $(RTL_H) $(EXPR_H) flags.h function.h ada/ada.h except.h \ + $(TREE_H) $(RTL_H) $(EXPR_H) $(FLAGS_H) $(FUNCTION_H) ada/ada.h except.h \ ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h \ ada/einfo.h ada/namet.h ada/snames.h ada/stringt.h ada/urealp.h ada/fe.h \ $(ADA_TREE_H) ada/gigi.h gt-ada-trans.h ada/utils.o : ada/utils.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ - $(TREE_H) flags.h expr.h convert.h defaults.h ada/ada.h ada/types.h \ + $(TREE_H) $(FLAGS_H) $(EXPR_H) convert.h defaults.h ada/ada.h ada/types.h \ ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h \ ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h gt-ada-utils.h \ gtype-ada.h $(TARGET_H) ada/utils2.o : ada/utils2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ - $(TREE_H) flags.h ada/ada.h ada/types.h ada/atree.h ada/nlists.h \ + $(TREE_H) $(FLAGS_H) ada/ada.h ada/types.h ada/atree.h ada/nlists.h \ ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h ada/snames.h \ ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c index 2144ff20802..6a8f23424c5 100644 --- a/gcc/ada/decl.c +++ b/gcc/ada/decl.c @@ -134,7 +134,7 @@ gnat_to_gnu_type (Entity_Id gnat_entity) DEFINITION is nonzero if this call is intended for a definition. This is used for separate compilation where it necessary to know whether an external declaration or a definition should be created if the GCC equivalent - was not created previously. The value of 1 is normally used for a non-zero + was not created previously. The value of 1 is normally used for a nonzero DEFINITION, but a value of 2 is used in special circumstances, defined in the code. */ @@ -4719,7 +4719,7 @@ elaborate_expression (Node_Id gnat_expr, Entity_Id gnat_entity, if (present_gnu_tree (gnat_expr)) return get_gnu_tree (gnat_expr); - /* If we don't need a value and this is static or a discriment, we + /* If we don't need a value and this is static or a discriminant, we don't need to do anything. */ else if (!need_value && (Is_OK_Static_Expression (gnat_expr) @@ -5254,7 +5254,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, this a bitfield and avoid making things wider. Doing this is first useful if the record is packed because we can then - place the field at a non-byte-aligned position and so achieve tigther + place the field at a non-byte-aligned position and so achieve tighter packing. This is in addition *required* if the field shares a byte with another diff --git a/gcc/ada/env.c b/gcc/ada/env.c index 6b6cec6f43d..9465a3ec0c9 100644 --- a/gcc/ada/env.c +++ b/gcc/ada/env.c @@ -227,7 +227,7 @@ void __gnat_unsetenv (char *name) { have been allocated using malloc. To avoid this memory leak another method can be used. It consists in forcing the reallocation of all the strings in the environ table using malloc on the first call on the - functions related to environment variable management. The disavantage + functions related to environment variable management. The disadvantage is that if a program makes a direct call to getenv the return string may be deallocated at some point. */ /* Note that on AIX, unsetenv is not supported on 5.1 but it is on 5.3. diff --git a/gcc/ada/gigi.h b/gcc/ada/gigi.h index e1914e4ac1b..e1661290f72 100644 --- a/gcc/ada/gigi.h +++ b/gcc/ada/gigi.h @@ -63,7 +63,7 @@ extern void init_dummy_type (void); DEFINITION is nonzero if this call is intended for a definition. This is used for separate compilation where it necessary to know whether an external declaration or a definition should be created if the GCC equivalent - was not created previously. The value of 1 is normally used for a non-zero + was not created previously. The value of 1 is normally used for a nonzero DEFINITION, but a value of 2 is used in special circumstances, defined in the code. */ extern tree gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, @@ -406,7 +406,7 @@ extern GTY(()) tree static_dtors; /* Routines expected by the gcc back-end. They must have exactly the same prototype and names as below. */ -/* Returns non-zero if we are currently in the global binding level */ +/* Returns nonzero if we are currently in the global binding level. */ extern int global_bindings_p (void); /* Enter and exit a new binding level. */ diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi index c681b5286a1..cbe75ad44ce 100644 --- a/gcc/ada/gnat-style.texi +++ b/gcc/ada/gnat-style.texi @@ -28,7 +28,7 @@ @setchapternewpage odd -@dircategory Programming +@dircategory Software development @direntry * gnat-style: (gnat-style). GNAT Coding Style @end direntry diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 87def3a76ce..a0f1b4fa96e 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -7146,7 +7146,7 @@ case letters. This line is always present. @item @code{ppp} is the Process Id value as a decimal integer (this line is -present only if the Process Id is non-zero). Currently we are +present only if the Process Id is nonzero). Currently we are not making use of this field. @item @@ -7456,7 +7456,7 @@ must define with the following profile: The parameter is a C null-terminated string representing a message to be associated with the exception (typically the source location of the raise - statement generated by the compiler). The Line parameter when non-zero + statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @item No_Exception_Streams @@ -8185,7 +8185,7 @@ The ceiling priority of internal protected objects is @strong{101}. Implementation-defined queuing policies. See D.4(1). @end cartouche @noindent -There are no implementation-defined queueing policies. +There are no implementation-defined queuing policies. @sp 1 @cartouche diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index a3b21c3fe7c..750a0869ff9 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -3014,7 +3014,7 @@ interface to @code{printfi}. @item It may work on some platforms to directly interface to a @code{varargs} function by providing a specific Ada profile -for a a particular call. However, this does not work on +for a particular call. However, this does not work on all platforms, since there is no guarantee that the calling sequence for a two argument normal C function is the same as for calling a @code{varargs} C function with @@ -3050,7 +3050,7 @@ in section B.5 of the Ada 95 Reference Manual. @item Intrinsic This applies to an intrinsic operation, as defined in the Ada 95 -Reference Manual. If a a pragma Import (Intrinsic) applies to a subprogram, +Reference Manual. If a pragma Import (Intrinsic) applies to a subprogram, this means that the body of the subprogram is provided by the compiler itself, usually by means of an efficient code sequence, and that the user does not supply an explicit body for it. In an application program, the pragma can @@ -7318,7 +7318,7 @@ Set the time slice value to @var{n} milliseconds. If the system supports the specification of a specific time slice value, then the indicated value is used. If the system does not support specific time slice values, but does support some general notion of round-robin scheduling, then any -non-zero value will activate round-robin scheduling. +nonzero value will activate round-robin scheduling. A value of zero is treated specially. It turns off time slicing, and in addition, indicates to the tasking run time that the @@ -9104,7 +9104,7 @@ in @ref{Inlining of Subprograms}. @noindent Although it is possible to do a reasonable amount of debugging at @ifclear vms -non-zero optimization levels, +nonzero optimization levels, the higher the level the more likely that @end ifclear @ifset vms @@ -20052,7 +20052,7 @@ This command allows to switch to the task referred by @var{taskno}. In particular, This allows to browse the backtrace of the specified task. It is advised to switch back to the original task before continuing execution otherwise the scheduling of the program may be -perturbated. +perturbed. @end table @noindent diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 11dc19de4f3..521963751e5 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -1801,7 +1801,7 @@ __gnat_init_float (void) #endif /* Similarly for sparc64. Achieved by masking bits in the Trap Enable Mask - field of the Floating-point Status Register (see the Sparc Architecture + field of the Floating-point Status Register (see the SPARC Architecture Manual Version 9, p 48). */ #if defined (sparc64) diff --git a/gcc/ada/initialize.c b/gcc/ada/initialize.c index 58d8ca88af6..0b86c2f2f05 100644 --- a/gcc/ada/initialize.c +++ b/gcc/ada/initialize.c @@ -126,7 +126,7 @@ __gnat_initialize (void *eh) step documented for C++. The de-registration is handled symmetrically, a-la C++ destructor fashion and typically triggered by the dynamic unloader. Note that since the tables shall be registered against a - common datastructure, libgcc should be one of the modules (vs beeing + common datastructure, libgcc should be one of the modules (vs being partially linked against all the others at build time) and shall be loaded first. diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index 2f68e42b4d9..47206da7e86 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -745,13 +745,40 @@ gnat_get_alias_set (tree type) return -1; } -/* GNU_TYPE is a type. Return its maxium size in bytes, if known. */ +/* GNU_TYPE is a type. Return its maxium size in bytes, if known, + as a constant when possible. */ static tree -gnat_type_max_size (gnu_type) - tree gnu_type; +gnat_type_max_size (tree gnu_type) { - return max_size (TYPE_SIZE_UNIT (gnu_type), true); + /* First see what we can get from TYPE_SIZE_UNIT, which might not be + constant even for simple expressions if it has already been gimplified + and replaced by a VAR_DECL. */ + + tree max_unitsize = max_size (TYPE_SIZE_UNIT (gnu_type), true); + + /* If we don't have a constant, see what we can get from TYPE_ADA_SIZE, + typically not gimplified. */ + + if (!host_integerp (max_unitsize, 1) + && (TREE_CODE (gnu_type) == RECORD_TYPE + || TREE_CODE (gnu_type) == UNION_TYPE + || TREE_CODE (gnu_type) == QUAL_UNION_TYPE) + && TYPE_ADA_SIZE (gnu_type)) + { + tree max_adasize = max_size (TYPE_ADA_SIZE (gnu_type), true); + + /* If we have succeded in finding a constant, round it up to the + type's alignment and return the result in byte units. */ + + if (host_integerp (max_adasize, 1)) + max_unitsize + = size_binop (CEIL_DIV_EXPR, + round_up (max_adasize, TYPE_ALIGN (gnu_type)), + bitsize_unit_node); + } + + return max_unitsize; } /* GNU_TYPE is a type. Determine if it should be passed by reference by diff --git a/gcc/ada/mlib-utl.adb b/gcc/ada/mlib-utl.adb index ab0689b9459..b6dc7c2fbe5 100644 --- a/gcc/ada/mlib-utl.adb +++ b/gcc/ada/mlib-utl.adb @@ -38,7 +38,7 @@ package body MLib.Utl is Initialized : Boolean := False; - Gcc_Name : constant String := "gcc"; + Gcc_Name : constant String := Osint.Program_Name ("gcc").all; Gcc_Exec : OS_Lib.String_Access; Ar_Name : OS_Lib.String_Access; @@ -257,7 +257,7 @@ package body MLib.Utl is -- ar - Ar_Name := new String'(Archive_Builder); + Ar_Name := Osint.Program_Name (Archive_Builder); Ar_Exec := OS_Lib.Locate_Exec_On_Path (Ar_Name.all); if Ar_Exec = null then @@ -272,7 +272,7 @@ package body MLib.Utl is -- ranlib - Ranlib_Name := new String'(Archive_Indexer); + Ranlib_Name := Osint.Program_Name (Archive_Indexer); if Ranlib_Name'Length > 0 then Ranlib_Exec := OS_Lib.Locate_Exec_On_Path (Ranlib_Name.all); diff --git a/gcc/ada/raise-gcc.c b/gcc/ada/raise-gcc.c index 49b1791577c..3100af3b9e5 100644 --- a/gcc/ada/raise-gcc.c +++ b/gcc/ada/raise-gcc.c @@ -62,7 +62,7 @@ typedef char bool; (SJLJ or DWARF). We need a consistently named interface to import from a-except, so wrappers are defined here. - Besides, eventhough the compiler is never setup to use the GCC propagation + Besides, even though the compiler is never setup to use the GCC propagation circuitry, it still relies on exceptions internally and part of the sources to handle to exceptions are shared with the run-time library. We need dummy definitions for the wrappers to satisfy the linker in this case. diff --git a/gcc/ada/s-taprop-hpux-dce.adb b/gcc/ada/s-taprop-hpux-dce.adb index 838f54e76f9..4aefcda25bc 100644 --- a/gcc/ada/s-taprop-hpux-dce.adb +++ b/gcc/ada/s-taprop-hpux-dce.adb @@ -63,9 +63,6 @@ with Interfaces.C; -- used for int -- size_t -with System.Parameters; --- used for Size_Type - with System.Task_Primitives.Interrupt_Operations; -- used for Get_Interrupt_ID diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 00505e6d866..88c0fc005fa 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -582,7 +582,7 @@ package body Sem_Ch13 is Mark_Aliased_Address_As_Volatile (Expr); -- Second case is where we have a constant whose - -- definition is of the form of an adress as in: + -- definition is of the form of an address as in: -- A : constant Address := K'Address; -- ... diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c index 376a3655542..055c99f1ad8 100644 --- a/gcc/ada/sysdep.c +++ b/gcc/ada/sysdep.c @@ -187,7 +187,7 @@ __gnat_ttyname (int filedes) return NULL; } -/* This function is needed to fix a bug under Win95/98. Under these plateforms +/* This function is needed to fix a bug under Win95/98. Under these platforms doing : ch1 = getch(); ch2 = fgetc (stdin); diff --git a/gcc/ada/targtyps.c b/gcc/ada/targtyps.c index bbf381df1ea..08bca930f5a 100644 --- a/gcc/ada/targtyps.c +++ b/gcc/ada/targtyps.c @@ -89,7 +89,7 @@ get_target_char_size (void) Pos get_target_wchar_t_size (void) { - /* We never want wide chacters less than "short" in Ada. */ + /* We never want wide characters less than "short" in Ada. */ return MAX (SHORT_TYPE_SIZE, WCHAR_TYPE_SIZE); } diff --git a/gcc/ada/tb-alvxw.c b/gcc/ada/tb-alvxw.c index 64e4a3ced0b..3c782762b86 100644 --- a/gcc/ada/tb-alvxw.c +++ b/gcc/ada/tb-alvxw.c @@ -630,7 +630,7 @@ find_proc_desc (CORE_ADDR pc, { CORE_ADDR startaddr; - /* If heuristic_fence_post is non-zero, determine the procedure + /* If heuristic_fence_post is nonzero, determine the procedure start address by examining the instructions. This allows us to find the start address of static functions which have no symbolic information, as startaddr would have been set to diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c index 55fa44a3dd6..9c25d1ee4bf 100644 --- a/gcc/ada/tracebak.c +++ b/gcc/ada/tracebak.c @@ -35,7 +35,7 @@ It has been tested on the following configurations: PowerPC/AiX PowerPC/VxWorks - Sparc/Solaris + SPARC/Solaris i386/GNU/Linux i386/Solaris i386/NT @@ -187,7 +187,7 @@ extern void (*Unlock_Task) (void); o FETCH_UP_FRAME, to force an invocation of __builtin_frame_address with a positive argument right after a possibly forced call even if FRAME_LEVEL - is 0. See the Sparc Solaris case for an example where this is useful. + is 0. See the SPARC Solaris case for an example where this is useful. */ diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index 30c0fb5dc27..b7b3598cef1 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -1510,7 +1510,7 @@ Subprogram_Body_to_gnu (Node_Id gnat_node) we must turn a condition into the corresponding exception even if there is no applicable Ada handler, and need at least one condition handler per possible call chain involving GNAT code. OTOH, establishing the handler - has a cost so we want to mimize the number of subprograms into which this + has a cost so we want to minimize the number of subprograms into which this happens. The foreign or exported condition is expected to satisfy all the constraints. */ if (TARGET_ABI_OPEN_VMS @@ -4829,7 +4829,7 @@ gnat_gimplify_stmt (tree *stmt_p) /* The reason for this routine's existence is two-fold. First, with some debugging formats, notably MDEBUG on SGI IRIX, the linker will remove duplicate debugging information if two - clients have identical debugguing information. With the normal scheme + clients have identical debugging information. With the normal scheme of elaboration, this does not usually occur, since entities in with'ed packages are elaborated on demand, and if clients have different usage patterns, the normal case, then the order and selection of entities diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index a3fdb0d5c45..1bdfacf09bc 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -186,7 +186,7 @@ present_gnu_tree (Entity_Id gnat_entity) } -/* Return non-zero if we are currently in the global binding level. */ +/* Return nonzero if we are currently in the global binding level. */ int global_bindings_p (void) @@ -2874,7 +2874,7 @@ convert (tree type, tree expr) case VIEW_CONVERT_EXPR: { /* GCC 4.x is very sensitive to type consistency overall, and view - conversions thus are very frequent. Eventhough just "convert"ing + conversions thus are very frequent. Even though just "convert"ing the inner operand to the output type is fine in most cases, it might expose unexpected input/output type mismatches in special circumstances so we avoid such recursive calls when we can. */ @@ -2882,7 +2882,7 @@ convert (tree type, tree expr) tree op0 = TREE_OPERAND (expr, 0); /* If we are converting back to the original type, we can just - lift the input conversion. This is a common occurence with + lift the input conversion. This is a common occurrence with switches back-and-forth amongst type variants. */ if (type == TREE_TYPE (op0)) return op0; diff --git a/gcc/alloc-pool.c b/gcc/alloc-pool.c index 17d4073cee5..fb40577953b 100644 --- a/gcc/alloc-pool.c +++ b/gcc/alloc-pool.c @@ -1,5 +1,5 @@ /* Functions to support a pool of allocatable objects. - Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 + Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Daniel Berlin @@ -207,6 +207,17 @@ free_alloc_pool (alloc_pool pool) free (pool); } +/* Frees the alloc_pool, if it is empty and zero *POOL in this case. */ +void +free_alloc_pool_if_empty (alloc_pool *pool) +{ + if ((*pool)->elts_free == (*pool)->elts_allocated) + { + free_alloc_pool (*pool); + *pool = NULL; + } +} + /* Allocates one element from the pool specified. */ void * pool_alloc (alloc_pool pool) @@ -328,7 +339,8 @@ print_statistics (void **slot, void *b) #endif /* Output per-alloc_pool memory usage statistics. */ -void dump_alloc_pool_statistics (void) +void +dump_alloc_pool_statistics (void) { #ifdef GATHER_STATISTICS struct output_info info; diff --git a/gcc/alloc-pool.h b/gcc/alloc-pool.h index 5152f9ee458..82188f4c064 100644 --- a/gcc/alloc-pool.h +++ b/gcc/alloc-pool.h @@ -49,6 +49,7 @@ typedef struct alloc_pool_def extern alloc_pool create_alloc_pool (const char *, size_t, size_t); extern void free_alloc_pool (alloc_pool); +extern void free_alloc_pool_if_empty (alloc_pool *); extern void *pool_alloc (alloc_pool); extern void pool_free (alloc_pool, void *); extern void dump_alloc_pool_statistics (void); diff --git a/gcc/attribs.c b/gcc/attribs.c index 3ecc473d694..7377c57691d 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -250,6 +250,14 @@ decl_attributes (tree *node, tree attributes, int flags) } } + if (TYPE_P (*anode) + && (flags & (int) ATTR_FLAG_TYPE_IN_PLACE) + && TYPE_SIZE (*anode) != NULL_TREE) + { + warning (OPT_Wattributes, "type attributes ignored after type is already defined"); + continue; + } + if (spec->handler != NULL) returned_attrs = chainon ((*spec->handler) (anode, name, args, flags, &no_add_attrs), diff --git a/gcc/basic-block.h b/gcc/basic-block.h index db5065ec0de..99eb005c6a6 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -880,6 +880,8 @@ extern void rtl_predict_edge (edge, enum br_predictor, int); extern void predict_edge_def (edge, enum br_predictor, enum prediction); extern void guess_outgoing_edge_probabilities (basic_block); extern void remove_predictions_associated_with_edge (edge); +extern bool edge_probability_reliable_p (edge); +extern bool br_prob_note_reliable_p (rtx); /* In flow.c */ extern void init_flow (void); @@ -979,6 +981,9 @@ extern void iterate_fix_dominators (enum cdi_direction, basic_block *, int); extern void verify_dominators (enum cdi_direction); extern basic_block first_dom_son (enum cdi_direction, basic_block); extern basic_block next_dom_son (enum cdi_direction, basic_block); +unsigned bb_dom_dfs_in (enum cdi_direction, basic_block); +unsigned bb_dom_dfs_out (enum cdi_direction, basic_block); + extern edge try_redirect_by_replacing_jump (edge, basic_block, bool); extern void break_superblocks (void); extern void check_bb_profile (basic_block, FILE *); diff --git a/gcc/bitmap.c b/gcc/bitmap.c index 4b77736c285..d2b5a3bfb14 100644 --- a/gcc/bitmap.c +++ b/gcc/bitmap.c @@ -1523,4 +1523,21 @@ bitmap_print (FILE *file, bitmap head, const char *prefix, const char *suffix) fputs (suffix, file); } +/* Compute hash of bitmap (for purposes of hashing). */ +hashval_t +bitmap_hash (bitmap head) +{ + bitmap_element *ptr; + BITMAP_WORD hash = 0; + int ix; + + for (ptr = head->first; ptr; ptr = ptr->next) + { + hash ^= ptr->indx; + for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++) + hash ^= ptr->bits[ix]; + } + return (hashval_t)hash; +} + #include "gt-bitmap.h" diff --git a/gcc/bitmap.h b/gcc/bitmap.h index d11fa46243b..3da58c5ba2b 100644 --- a/gcc/bitmap.h +++ b/gcc/bitmap.h @@ -21,6 +21,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #ifndef GCC_BITMAP_H #define GCC_BITMAP_H +#include "hashtab.h" /* Fundamental storage type for bitmap. */ @@ -164,6 +165,9 @@ extern void bitmap_obstack_free (bitmap); #define bitmap_zero(a) bitmap_clear (a) extern unsigned bitmap_first_set_bit (bitmap); +/* Compute bitmap hash (for purposes of hashing etc.) */ +extern hashval_t bitmap_hash(bitmap); + /* Allocate a bitmap from a bit obstack. */ #define BITMAP_ALLOC(OBSTACK) bitmap_obstack_alloc (OBSTACK) diff --git a/gcc/builtins.c b/gcc/builtins.c index b9d94ebcda9..5bcba14d7c2 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -146,7 +146,6 @@ static tree fold_trunc_transparent_mathfn (tree, tree); static bool readonly_data_expr (tree); static rtx expand_builtin_fabs (tree, rtx, rtx); static rtx expand_builtin_signbit (tree, rtx); -static tree fold_builtin_cabs (tree, tree); static tree fold_builtin_sqrt (tree, tree); static tree fold_builtin_cbrt (tree, tree); static tree fold_builtin_pow (tree, tree, tree); @@ -161,9 +160,7 @@ static tree fold_builtin_ceil (tree, tree); static tree fold_builtin_round (tree, tree); static tree fold_builtin_int_roundingfn (tree, tree); static tree fold_builtin_bitop (tree, tree); -static tree fold_builtin_memcpy (tree, tree); -static tree fold_builtin_mempcpy (tree, tree, int); -static tree fold_builtin_memmove (tree, tree); +static tree fold_builtin_memory_op (tree, tree, bool, int); static tree fold_builtin_strchr (tree, tree); static tree fold_builtin_memcmp (tree); static tree fold_builtin_strcmp (tree); @@ -276,16 +273,44 @@ get_pointer_alignment (tree exp, unsigned int max_align) /* See what we are pointing at and look at its alignment. */ exp = TREE_OPERAND (exp, 0); inner = max_align; - while (handled_component_p (exp)) + if (handled_component_p (exp)) { - /* Fields in a structure can be packed, honor DECL_ALIGN - of the FIELD_DECL. For all other references the conservative - alignment is the element type alignment. */ - if (TREE_CODE (exp) == COMPONENT_REF) - inner = MIN (inner, DECL_ALIGN (TREE_OPERAND (exp, 1))); - else - inner = MIN (inner, TYPE_ALIGN (TREE_TYPE (exp))); - exp = TREE_OPERAND (exp, 0); + HOST_WIDE_INT bitsize, bitpos; + tree offset; + enum machine_mode mode; + int unsignedp, volatilep; + + exp = get_inner_reference (exp, &bitsize, &bitpos, &offset, + &mode, &unsignedp, &volatilep, true); + if (bitpos) + inner = MIN (inner, (unsigned) (bitpos & -bitpos)); + if (offset && TREE_CODE (offset) == PLUS_EXPR + && host_integerp (TREE_OPERAND (offset, 1), 1)) + { + /* Any overflow in calculating offset_bits won't change + the alignment. */ + unsigned offset_bits + = ((unsigned) tree_low_cst (TREE_OPERAND (offset, 1), 1) + * BITS_PER_UNIT); + + if (offset_bits) + inner = MIN (inner, (offset_bits & -offset_bits)); + offset = TREE_OPERAND (offset, 0); + } + if (offset && TREE_CODE (offset) == MULT_EXPR + && host_integerp (TREE_OPERAND (offset, 1), 1)) + { + /* Any overflow in calculating offset_factor won't change + the alignment. */ + unsigned offset_factor + = ((unsigned) tree_low_cst (TREE_OPERAND (offset, 1), 1) + * BITS_PER_UNIT); + + if (offset_factor) + inner = MIN (inner, (offset_factor & -offset_factor)); + } + else if (offset) + inner = MIN (inner, BITS_PER_UNIT); } if (TREE_CODE (exp) == FUNCTION_DECL) align = FUNCTION_BOUNDARY; @@ -295,6 +320,9 @@ get_pointer_alignment (tree exp, unsigned int max_align) else if (CONSTANT_CLASS_P (exp)) align = MIN (inner, (unsigned)CONSTANT_ALIGNMENT (exp, align)); #endif + else if (TREE_CODE (exp) == VIEW_CONVERT_EXPR + || TREE_CODE (exp) == INDIRECT_REF) + align = MIN (TYPE_ALIGN (TREE_TYPE (exp)), inner); else align = MIN (align, inner); return MIN (align, max_align); @@ -510,12 +538,16 @@ expand_builtin_return_addr (enum built_in_function fndecl_code, int count) #else rtx tem; - /* For a zero count, we don't care what frame address we return, so frame - pointer elimination is OK, and using the soft frame pointer is OK. - For a nonzero count, we require a stable offset from the current frame - pointer to the previous one, so we must use the hard frame pointer, and + /* For a zero count with __builtin_return_address, we don't care what + frame address we return, because target-specific definitions will + override us. Therefore frame pointer elimination is OK, and using + the soft frame pointer is OK. + + For a non-zero count, or a zero count with __builtin_frame_address, + we require a stable offset from the current frame pointer to the + previous one, so we must use the hard frame pointer, and we must disable frame pointer elimination. */ - if (count == 0) + if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS) tem = frame_pointer_rtx; else { @@ -728,6 +760,12 @@ expand_builtin_setjmp (tree arglist, rtx target) emit_label (next_lab); + /* Because setjmp and longjmp are not represented in the CFG, a cfgcleanup + may find that the basic block starting with NEXT_LAB is unreachable. + The whole block, along with NEXT_LAB, would be removed (see PR26983). + Make sure that never happens. */ + LABEL_PRESERVE_P (next_lab) = 1; + expand_builtin_setjmp_receiver (next_lab); /* Set TARGET to one. */ @@ -2854,10 +2892,19 @@ expand_builtin_memcpy (tree exp, rtx target, enum machine_mode mode) unsigned int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, src_mem, dest_addr, len_rtx; - tree result = fold_builtin_memcpy (fndecl, arglist); + tree result = fold_builtin_memory_op (arglist, TREE_TYPE (TREE_TYPE (fndecl)), + false, /*endp=*/0); if (result) - return expand_expr (result, target, mode, EXPAND_NORMAL); + { + while (TREE_CODE (result) == COMPOUND_EXPR) + { + expand_expr (TREE_OPERAND (result, 0), const0_rtx, VOIDmode, + EXPAND_NORMAL); + result = TREE_OPERAND (result, 1); + } + return expand_expr (result, target, mode, EXPAND_NORMAL); + } /* If DEST is not a pointer type, call the normal function. */ if (dest_align == 0) @@ -2943,10 +2990,18 @@ expand_builtin_mempcpy (tree arglist, tree type, rtx target, enum machine_mode m unsigned int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, src_mem, len_rtx; - tree result = fold_builtin_mempcpy (arglist, type, endp); + tree result = fold_builtin_memory_op (arglist, type, false, endp); if (result) - return expand_expr (result, target, mode, EXPAND_NORMAL); + { + while (TREE_CODE (result) == COMPOUND_EXPR) + { + expand_expr (TREE_OPERAND (result, 0), const0_rtx, VOIDmode, + EXPAND_NORMAL); + result = TREE_OPERAND (result, 1); + } + return expand_expr (result, target, mode, EXPAND_NORMAL); + } /* If either SRC or DEST is not a pointer type, don't do this operation in-line. */ @@ -3017,10 +3072,18 @@ expand_builtin_memmove (tree arglist, tree type, rtx target, unsigned int src_align = get_pointer_alignment (src, BIGGEST_ALIGNMENT); unsigned int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); - tree result = fold_builtin_memmove (arglist, type); + tree result = fold_builtin_memory_op (arglist, type, false, /*endp=*/3); if (result) - return expand_expr (result, target, mode, EXPAND_NORMAL); + { + while (TREE_CODE (result) == COMPOUND_EXPR) + { + expand_expr (TREE_OPERAND (result, 0), const0_rtx, VOIDmode, + EXPAND_NORMAL); + result = TREE_OPERAND (result, 1); + } + return expand_expr (result, target, mode, EXPAND_NORMAL); + } /* If DEST is not a pointer type, call the normal function. */ if (dest_align == 0) @@ -3168,7 +3231,15 @@ expand_builtin_strcpy (tree fndecl, tree arglist, rtx target, enum machine_mode { tree result = fold_builtin_strcpy (fndecl, arglist, 0); if (result) - return expand_expr (result, target, mode, EXPAND_NORMAL); + { + while (TREE_CODE (result) == COMPOUND_EXPR) + { + expand_expr (TREE_OPERAND (result, 0), const0_rtx, VOIDmode, + EXPAND_NORMAL); + result = TREE_OPERAND (result, 1); + } + return expand_expr (result, target, mode, EXPAND_NORMAL); + } return expand_movstr (TREE_VALUE (arglist), TREE_VALUE (TREE_CHAIN (arglist)), @@ -3294,7 +3365,15 @@ expand_builtin_strncpy (tree exp, rtx target, enum machine_mode mode) tree result = fold_builtin_strncpy (fndecl, arglist, slen); if (result) - return expand_expr (result, target, mode, EXPAND_NORMAL); + { + while (TREE_CODE (result) == COMPOUND_EXPR) + { + expand_expr (TREE_OPERAND (result, 0), const0_rtx, VOIDmode, + EXPAND_NORMAL); + result = TREE_OPERAND (result, 1); + } + return expand_expr (result, target, mode, EXPAND_NORMAL); + } /* We must be passed a constant len and src parameter. */ if (!host_integerp (len, 1) || !slen || !host_integerp (slen, 1)) @@ -6496,7 +6575,8 @@ fold_builtin_constant_p (tree arglist) if (TREE_SIDE_EFFECTS (arglist) || AGGREGATE_TYPE_P (TREE_TYPE (arglist)) || POINTER_TYPE_P (TREE_TYPE (arglist)) - || cfun == 0) + || cfun == 0 + || folding_initializer) return integer_zero_node; return 0; @@ -6768,15 +6848,52 @@ fold_fixed_mathfn (tree fndecl, tree arglist) return build_function_call_expr (decl, arglist); } } + + /* Canonicalize llround (x) to lround (x) on LP64 targets where + sizeof (long long) == sizeof (long). */ + if (TYPE_PRECISION (long_long_integer_type_node) + == TYPE_PRECISION (long_integer_type_node)) + { + tree newfn = NULL_TREE; + switch (fcode) + { + CASE_FLT_FN (BUILT_IN_LLCEIL): + newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LCEIL); + break; + + CASE_FLT_FN (BUILT_IN_LLFLOOR): + newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LFLOOR); + break; + + CASE_FLT_FN (BUILT_IN_LLROUND): + newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LROUND); + break; + + CASE_FLT_FN (BUILT_IN_LLRINT): + newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LRINT); + break; + + default: + break; + } + + if (newfn) + { + tree newcall = build_function_call_expr (newfn, arglist); + return fold_convert (TREE_TYPE (TREE_TYPE (fndecl)), newcall); + } + } + return 0; } /* Fold function call to builtin cabs, cabsf or cabsl. ARGLIST - is the argument list and TYPE is the return type. Return - NULL_TREE if no if no simplification can be made. */ + is the argument list, TYPE is the return type and FNDECL is the + original function DECL. Return NULL_TREE if no if no simplification + can be made. */ static tree -fold_builtin_cabs (tree arglist, tree type) +fold_builtin_cabs (tree arglist, tree type, tree fndecl) { tree arg; @@ -6817,6 +6934,14 @@ fold_builtin_cabs (tree arglist, tree type) && real_zerop (TREE_OPERAND (arg, 1))) return fold_build1 (ABS_EXPR, type, TREE_OPERAND (arg, 0)); + /* Optimize cabs(-z) and cabs(conj(z)) as cabs(z). */ + if (TREE_CODE (arg) == NEGATE_EXPR + || TREE_CODE (arg) == CONJ_EXPR) + { + tree arglist = build_tree_list (NULL_TREE, TREE_OPERAND (arg, 0)); + return build_function_call_expr (fndecl, arglist); + } + /* Don't do this when optimizing for size. */ if (flag_unsafe_math_optimizations && optimize && !optimize_size) @@ -7769,78 +7894,121 @@ fold_builtin_exponent (tree fndecl, tree arglist, return 0; } -/* Fold function call to builtin memcpy. Return +/* Fold function call to builtin memset. Return NULL_TREE if no simplification can be made. */ static tree -fold_builtin_memcpy (tree fndecl, tree arglist) +fold_builtin_memset (tree arglist, tree type, bool ignore) { - tree dest, src, len; + tree dest, c, len, var, ret; + unsigned HOST_WIDE_INT length, cval; if (!validate_arglist (arglist, - POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; dest = TREE_VALUE (arglist); - src = TREE_VALUE (TREE_CHAIN (arglist)); + c = TREE_VALUE (TREE_CHAIN (arglist)); len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + if (! host_integerp (len, 1)) + return 0; + /* If the LEN parameter is zero, return DEST. */ if (integer_zerop (len)) - return omit_one_operand (TREE_TYPE (TREE_TYPE (fndecl)), dest, src); + return omit_one_operand (type, dest, c); - /* If SRC and DEST are the same (and not volatile), return DEST. */ - if (operand_equal_p (src, dest, 0)) - return omit_one_operand (TREE_TYPE (TREE_TYPE (fndecl)), dest, len); + if (! host_integerp (c, 1) || TREE_SIDE_EFFECTS (dest)) + return 0; - return 0; + var = dest; + STRIP_NOPS (var); + if (TREE_CODE (var) != ADDR_EXPR) + return 0; + + var = TREE_OPERAND (var, 0); + if (TREE_THIS_VOLATILE (var)) + return 0; + + if (!INTEGRAL_TYPE_P (TREE_TYPE (var)) + && !POINTER_TYPE_P (TREE_TYPE (var))) + return 0; + + length = tree_low_cst (len, 1); + if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (var))) != length + || get_pointer_alignment (dest, BIGGEST_ALIGNMENT) / BITS_PER_UNIT + < (int) length) + return 0; + + if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) + return 0; + + if (integer_zerop (c)) + cval = 0; + else + { + if (CHAR_BIT != 8 || BITS_PER_UNIT != 8 || HOST_BITS_PER_WIDE_INT > 64) + return 0; + + cval = tree_low_cst (c, 1); + cval &= 0xff; + cval |= cval << 8; + cval |= cval << 16; + cval |= (cval << 31) << 1; + } + + ret = build_int_cst_type (TREE_TYPE (var), cval); + ret = build2 (MODIFY_EXPR, TREE_TYPE (var), var, ret); + if (ignore) + return ret; + + return omit_one_operand (type, dest, ret); } -/* Fold function call to builtin mempcpy. Return +/* Fold function call to builtin memset. Return NULL_TREE if no simplification can be made. */ static tree -fold_builtin_mempcpy (tree arglist, tree type, int endp) +fold_builtin_bzero (tree arglist, bool ignore) { - if (validate_arglist (arglist, - POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) - { - tree dest = TREE_VALUE (arglist); - tree src = TREE_VALUE (TREE_CHAIN (arglist)); - tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + tree dest, size, newarglist; - /* If the LEN parameter is zero, return DEST. */ - if (integer_zerop (len)) - return omit_one_operand (type, dest, src); + if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + return 0; - /* If SRC and DEST are the same (and not volatile), return DEST+LEN. */ - if (operand_equal_p (src, dest, 0)) - { - if (endp == 0) - return omit_one_operand (type, dest, len); + if (!ignore) + return 0; - if (endp == 2) - len = fold_build2 (MINUS_EXPR, TREE_TYPE (len), len, - ssize_int (1)); + dest = TREE_VALUE (arglist); + size = TREE_VALUE (TREE_CHAIN (arglist)); - len = fold_convert (TREE_TYPE (dest), len); - len = fold_build2 (PLUS_EXPR, TREE_TYPE (dest), dest, len); - return fold_convert (type, len); - } - } - return 0; + /* New argument list transforming bzero(ptr x, int y) to + memset(ptr x, int 0, size_t y). This is done this way + so that if it isn't expanded inline, we fallback to + calling bzero instead of memset. */ + + newarglist = build_tree_list (NULL_TREE, fold_convert (sizetype, size)); + newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist); + newarglist = tree_cons (NULL_TREE, dest, newarglist); + return fold_builtin_memset (newarglist, void_type_node, ignore); } -/* Fold function call to builtin memmove. Return - NULL_TREE if no simplification can be made. */ +/* Fold function call to builtin mem{{,p}cpy,move}. Return + NULL_TREE if no simplification can be made. + If ENDP is 0, return DEST (like memcpy). + If ENDP is 1, return DEST+LEN (like mempcpy). + If ENDP is 2, return DEST+LEN-1 (like stpcpy). + If ENDP is 3, return DEST, additionally *SRC and *DEST may overlap + (memmove). */ static tree -fold_builtin_memmove (tree arglist, tree type) +fold_builtin_memory_op (tree arglist, tree type, bool ignore, int endp) { - tree dest, src, len; + tree dest, src, len, destvar, srcvar, expr; + unsigned HOST_WIDE_INT length; - if (!validate_arglist (arglist, - POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + if (! validate_arglist (arglist, + POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; dest = TREE_VALUE (arglist); @@ -7851,11 +8019,115 @@ fold_builtin_memmove (tree arglist, tree type) if (integer_zerop (len)) return omit_one_operand (type, dest, src); - /* If SRC and DEST are the same (and not volatile), return DEST. */ + /* If SRC and DEST are the same (and not volatile), return + DEST{,+LEN,+LEN-1}. */ if (operand_equal_p (src, dest, 0)) - return omit_one_operand (type, dest, len); + expr = len; + else + { + if (! host_integerp (len, 1)) + return 0; - return 0; + if (TREE_SIDE_EFFECTS (dest) || TREE_SIDE_EFFECTS (src)) + return 0; + + destvar = dest; + STRIP_NOPS (destvar); + if (TREE_CODE (destvar) != ADDR_EXPR) + return 0; + + destvar = TREE_OPERAND (destvar, 0); + if (TREE_THIS_VOLATILE (destvar)) + return 0; + + if (!INTEGRAL_TYPE_P (TREE_TYPE (destvar)) + && !POINTER_TYPE_P (TREE_TYPE (destvar)) + && !SCALAR_FLOAT_TYPE_P (TREE_TYPE (destvar))) + return 0; + + srcvar = src; + STRIP_NOPS (srcvar); + if (TREE_CODE (srcvar) != ADDR_EXPR) + return 0; + + srcvar = TREE_OPERAND (srcvar, 0); + if (TREE_THIS_VOLATILE (srcvar)) + return 0; + + if (!INTEGRAL_TYPE_P (TREE_TYPE (srcvar)) + && !POINTER_TYPE_P (TREE_TYPE (srcvar)) + && !SCALAR_FLOAT_TYPE_P (TREE_TYPE (srcvar))) + return 0; + + length = tree_low_cst (len, 1); + if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (destvar))) != length + || get_pointer_alignment (dest, BIGGEST_ALIGNMENT) / BITS_PER_UNIT + < (int) length + || GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (srcvar))) != length + || get_pointer_alignment (src, BIGGEST_ALIGNMENT) / BITS_PER_UNIT + < (int) length) + return 0; + + if ((INTEGRAL_TYPE_P (TREE_TYPE (srcvar)) + || POINTER_TYPE_P (TREE_TYPE (srcvar))) + && (INTEGRAL_TYPE_P (TREE_TYPE (destvar)) + || POINTER_TYPE_P (TREE_TYPE (destvar)))) + expr = fold_convert (TREE_TYPE (destvar), srcvar); + else + expr = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (destvar), srcvar); + expr = build2 (MODIFY_EXPR, TREE_TYPE (destvar), destvar, expr); + } + + if (ignore) + return expr; + + if (endp == 0 || endp == 3) + return omit_one_operand (type, dest, expr); + + if (expr == len) + expr = 0; + + if (endp == 2) + len = fold_build2 (MINUS_EXPR, TREE_TYPE (len), len, + ssize_int (1)); + + len = fold_convert (TREE_TYPE (dest), len); + dest = fold_build2 (PLUS_EXPR, TREE_TYPE (dest), dest, len); + dest = fold_convert (type, dest); + if (expr) + dest = omit_one_operand (type, dest, expr); + return dest; +} + +/* Fold function call to builtin bcopy. Return NULL_TREE if no + simplification can be made. */ + +static tree +fold_builtin_bcopy (tree arglist, bool ignore) +{ + tree src, dest, size, newarglist; + + if (!validate_arglist (arglist, + POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) + return 0; + + if (! ignore) + return 0; + + src = TREE_VALUE (arglist); + dest = TREE_VALUE (TREE_CHAIN (arglist)); + size = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + + /* New argument list transforming bcopy(ptr x, ptr y, int z) to + memmove(ptr y, ptr x, size_t z). This is done this way + so that if it isn't expanded inline, we fallback to + calling bcopy instead of memmove. */ + + newarglist = build_tree_list (NULL_TREE, fold_convert (sizetype, size)); + newarglist = tree_cons (NULL_TREE, src, newarglist); + newarglist = tree_cons (NULL_TREE, dest, newarglist); + + return fold_builtin_memory_op (newarglist, void_type_node, true, /*endp=*/3); } /* Fold function call to builtin strcpy. If LEN is not NULL, it represents @@ -8648,7 +8920,7 @@ fold_builtin_1 (tree fndecl, tree arglist, bool ignore) break; CASE_FLT_FN (BUILT_IN_CABS): - return fold_builtin_cabs (arglist, type); + return fold_builtin_cabs (arglist, type, fndecl); CASE_FLT_FN (BUILT_IN_SQRT): return fold_builtin_sqrt (arglist, type); @@ -8746,14 +9018,23 @@ fold_builtin_1 (tree fndecl, tree arglist, bool ignore) CASE_INT_FN (BUILT_IN_PARITY): return fold_builtin_bitop (fndecl, arglist); + case BUILT_IN_MEMSET: + return fold_builtin_memset (arglist, type, ignore); + case BUILT_IN_MEMCPY: - return fold_builtin_memcpy (fndecl, arglist); + return fold_builtin_memory_op (arglist, type, ignore, /*endp=*/0); case BUILT_IN_MEMPCPY: - return fold_builtin_mempcpy (arglist, type, /*endp=*/1); + return fold_builtin_memory_op (arglist, type, ignore, /*endp=*/1); case BUILT_IN_MEMMOVE: - return fold_builtin_memmove (arglist, type); + return fold_builtin_memory_op (arglist, type, ignore, /*endp=*/3); + + case BUILT_IN_BZERO: + return fold_builtin_bzero (arglist, ignore); + + case BUILT_IN_BCOPY: + return fold_builtin_bcopy (arglist, ignore); CASE_FLT_FN (BUILT_IN_SIGNBIT): return fold_builtin_signbit (fndecl, arglist); diff --git a/gcc/c-common.c b/gcc/c-common.c index a27f5d36a24..62d5261e5f7 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -976,11 +976,11 @@ unsigned_conversion_warning (tree result, tree operand) /* Print a warning about casts that might indicate violation of strict aliasing rules if -Wstrict-aliasing is used and - strict aliasing mode is in effect. otype is the original - TREE_TYPE of expr, and type the type we're casting to. */ + strict aliasing mode is in effect. OTYPE is the original + TREE_TYPE of EXPR, and TYPE the type we're casting to. */ void -strict_aliasing_warning(tree otype, tree type, tree expr) +strict_aliasing_warning (tree otype, tree type, tree expr) { if (flag_strict_aliasing && warn_strict_aliasing && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype) @@ -1083,7 +1083,8 @@ convert_and_check (tree type, tree expr) /* Do not diagnose overflow in a constant expression merely because a conversion overflowed. */ - TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr); + TREE_CONSTANT_OVERFLOW (t) = CONSTANT_CLASS_P (expr) + && TREE_CONSTANT_OVERFLOW (expr); /* No warning for converting 0x80000000 to int. */ if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr)) @@ -2500,11 +2501,13 @@ c_common_truthvalue_conversion (tree expr) { tree inner = TREE_OPERAND (expr, 0); if (DECL_P (inner) - && (TREE_CODE (inner) == PARM_DECL || !DECL_WEAK (inner))) + && (TREE_CODE (inner) == PARM_DECL + || TREE_CODE (inner) == LABEL_DECL + || !DECL_WEAK (inner))) { /* Common Ada/Pascal programmer's mistake. We always warn about this since it is so bad. */ - warning (OPT_Walways_true, "the address of %qD, will always evaluate as %", + warning (OPT_Walways_true, "the address of %qD will always evaluate as %", inner); return truthvalue_true_node; } @@ -3794,6 +3797,9 @@ match_case_to_enum_1 (tree key, tree type, tree label) CASE_LABEL (label), buf, type); } +/* Subroutine of c_do_switch_warnings, called via splay_tree_foreach. + Used to verify that case values match up with enumerator values. */ + static int match_case_to_enum (splay_tree_node node, void *data) { @@ -3804,26 +3810,22 @@ match_case_to_enum (splay_tree_node node, void *data) if (!CASE_LOW (label)) return 0; - /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear + /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear when we did our enum->case scan. Reset our scratch bit after. */ - if (!TREE_ADDRESSABLE (label)) + if (!CASE_LOW_SEEN (label)) match_case_to_enum_1 (CASE_LOW (label), type, label); else - TREE_ADDRESSABLE (label) = 0; + CASE_LOW_SEEN (label) = 0; - /* If CASE_HIGH is non-null, we have a range. Here we must search. - Note that the old code in stmt.c did not check for the values in - the range either, just the endpoints. */ + /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is + not set, that means that CASE_HIGH did not appear when we did our + enum->case scan. Reset our scratch bit after. */ if (CASE_HIGH (label)) { - tree chain, key = CASE_HIGH (label); - - for (chain = TYPE_VALUES (type); - chain && !tree_int_cst_equal (key, TREE_VALUE (chain)); - chain = TREE_CHAIN (chain)) - continue; - if (!chain) - match_case_to_enum_1 (key, type, label); + if (!CASE_HIGH_SEEN (label)) + match_case_to_enum_1 (CASE_HIGH (label), type, label); + else + CASE_HIGH_SEEN (label) = 0; } return 0; @@ -3841,6 +3843,8 @@ c_do_switch_warnings (splay_tree cases, location_t switch_location, tree type, tree cond) { splay_tree_node default_node; + splay_tree_node node; + tree chain; if (!warn_switch && !warn_switch_enum && !warn_switch_default) return; @@ -3850,79 +3854,79 @@ c_do_switch_warnings (splay_tree cases, location_t switch_location, warning (OPT_Wswitch_default, "%Hswitch missing default case", &switch_location); + /* From here on, we only care about about enumerated types. */ + if (!type || TREE_CODE (type) != ENUMERAL_TYPE) + return; + /* If the switch expression was an enumerated type, check that exactly all enumeration literals are covered by the cases. The check is made when -Wswitch was specified and there is no default case, or when -Wswitch-enum was specified. */ - if (((warn_switch && !default_node) || warn_switch_enum) - && type && TREE_CODE (type) == ENUMERAL_TYPE - && TREE_CODE (cond) != INTEGER_CST) - { - tree chain; - /* The time complexity here is O(N*lg(N)) worst case, but for the - common case of monotonically increasing enumerators, it is - O(N), since the nature of the splay tree will keep the next - element adjacent to the root at all times. */ + if (!warn_switch_enum + && !(warn_switch && !default_node)) + return; + + /* Clearing COND if it is not an integer constant simplifies + the tests inside the loop below. */ + if (TREE_CODE (cond) != INTEGER_CST) + cond = NULL_TREE; + + /* The time complexity here is O(N*lg(N)) worst case, but for the + common case of monotonically increasing enumerators, it is + O(N), since the nature of the splay tree will keep the next + element adjacent to the root at all times. */ - for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain)) + for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain)) + { + tree value = TREE_VALUE (chain); + node = splay_tree_lookup (cases, (splay_tree_key) value); + if (node) { - splay_tree_node node - = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain)); - if (!node) - { - tree low_value = TREE_VALUE (chain); - splay_tree_node low_bound; - splay_tree_node high_bound; - /* Even though there wasn't an exact match, there might be a - case range which includes the enumator's value. */ - low_bound = splay_tree_predecessor (cases, - (splay_tree_key) low_value); - high_bound = splay_tree_successor (cases, - (splay_tree_key) low_value); - - /* It is smaller than the LOW_VALUE, so there is no need to check - unless the LOW_BOUND is in fact itself a case range. */ - if (low_bound - && CASE_HIGH ((tree) low_bound->value) - && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value), - low_value) >= 0) - node = low_bound; - /* The low end of that range is bigger than the current value. */ - else if (high_bound - && (tree_int_cst_compare ((tree) high_bound->key, - low_value) - <= 0)) - node = high_bound; - } - if (node) - { - /* Mark the CASE_LOW part of the case entry as seen, so - that we save time later. Choose TREE_ADDRESSABLE - randomly as a bit that won't have been set to-date. */ - tree label = (tree) node->value; - TREE_ADDRESSABLE (label) = 1; - } - else + /* Mark the CASE_LOW part of the case entry as seen. */ + tree label = (tree) node->value; + CASE_LOW_SEEN (label) = 1; + continue; + } + + /* Even though there wasn't an exact match, there might be a + case range which includes the enumator's value. */ + node = splay_tree_predecessor (cases, (splay_tree_key) value); + if (node && CASE_HIGH ((tree) node->value)) + { + tree label = (tree) node->value; + int cmp = tree_int_cst_compare (CASE_HIGH (label), value); + if (cmp >= 0) { - /* Warn if there are enumerators that don't correspond to - case expressions. */ - warning (0, "%Henumeration value %qE not handled in switch", - &switch_location, TREE_PURPOSE (chain)); + /* If we match the upper bound exactly, mark the CASE_HIGH + part of the case entry as seen. */ + if (cmp == 0) + CASE_HIGH_SEEN (label) = 1; + continue; } } - /* Warn if there are case expressions that don't correspond to - enumerators. This can occur since C and C++ don't enforce - type-checking of assignments to enumeration variables. + /* We've now determined that this enumerated literal isn't + handled by the case labels of the switch statement. */ - The time complexity here is O(N**2) worst case, since we've - not sorted the enumeration values. However, in the absence - of case ranges this is O(N), since all single cases that - corresponded to enumerations have been marked above. */ + /* If the switch expression is a constant, we only really care + about whether that constant is handled by the switch. */ + if (cond && tree_int_cst_compare (cond, value)) + continue; - splay_tree_foreach (cases, match_case_to_enum, type); + warning (0, "%Henumeration value %qE not handled in switch", + &switch_location, TREE_PURPOSE (chain)); } + + /* Warn if there are case expressions that don't correspond to + enumerators. This can occur since C and C++ don't enforce + type-checking of assignments to enumeration variables. + + The time complexity here is now always O(N) worst case, since + we should have marked both the lower bound and upper bound of + every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN + above. This scan also resets those fields. */ + splay_tree_foreach (cases, match_case_to_enum, type); } /* Finish an expression taking the address of LABEL (an @@ -4079,20 +4083,6 @@ handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args), if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) *node = build_variant_type_copy (*node); TYPE_PACKED (*node) = 1; - if (TYPE_MAIN_VARIANT (*node) == *node) - { - /* If it is the main variant, then pack the other variants - too. This happens in, - - struct Foo { - struct Foo const *ptr; // creates a variant w/o packed flag - } __ attribute__((packed)); // packs it now. - */ - tree probe; - - for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe)) - TYPE_PACKED (probe) = 1; - } } else if (TREE_CODE (*node) == FIELD_DECL) { @@ -4312,26 +4302,15 @@ handle_externally_visible_attribute (tree *pnode, tree name, { tree node = *pnode; - if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL) - || !TREE_PUBLIC (node)) - { - warning (OPT_Wattributes, - "%qE attribute have effect only on public objects", name); - *no_add_attrs = true; - } - else if (TREE_CODE (node) == FUNCTION_DECL) + if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL) { - struct cgraph_node *n = cgraph_node (node); - n->local.externally_visible = true; - if (n->local.finalized) - cgraph_mark_needed_node (n); - } - else if (TREE_CODE (node) == VAR_DECL) - { - struct cgraph_varpool_node *n = cgraph_varpool_node (node); - n->externally_visible = true; - if (n->finalized) - cgraph_varpool_mark_needed_node (n); + if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL + && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node)) + { + warning (OPT_Wattributes, + "%qE attribute have effect only on public objects", name); + *no_add_attrs = true; + } } else { @@ -4759,12 +4738,17 @@ handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args, struct attribute_spec.handler. */ static tree -handle_weak_attribute (tree *node, tree ARG_UNUSED (name), +handle_weak_attribute (tree *node, tree name, tree ARG_UNUSED (args), int ARG_UNUSED (flags), bool * ARG_UNUSED (no_add_attrs)) { - declare_weak (*node); + if (TREE_CODE (*node) == FUNCTION_DECL + || TREE_CODE (*node) == VAR_DECL) + declare_weak (*node); + else + warning (OPT_Wattributes, "%qE attribute ignored", name); + return NULL_TREE; } @@ -4839,6 +4823,16 @@ handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args, { tree attr = NULL_TREE; + /* We must ignore the attribute when it is associated with + local-scoped decls, since attribute alias is ignored and many + such symbols do not even have a DECL_WEAK field. */ + if (decl_function_context (*node) || current_function_decl) + { + warning (OPT_Wattributes, "%qE attribute ignored", name); + *no_add_attrs = true; + return NULL_TREE; + } + /* The idea here is that `weakref("name")' mutates into `weakref, alias("name")', and weakref without arguments, in turn, implicitly adds weak. */ @@ -4873,21 +4867,28 @@ handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args, static tree handle_visibility_attribute (tree *node, tree name, tree args, int ARG_UNUSED (flags), - bool *no_add_attrs) + bool *ARG_UNUSED (no_add_attrs)) { tree decl = *node; tree id = TREE_VALUE (args); - - *no_add_attrs = true; + enum symbol_visibility vis; if (TYPE_P (*node)) { - if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE) - { - warning (OPT_Wattributes, "%qE attribute ignored on non-class types", - name); - return NULL_TREE; - } + if (TREE_CODE (*node) == ENUMERAL_TYPE) + /* OK */; + else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE) + { + warning (OPT_Wattributes, "%qE attribute ignored on non-class types", + name); + return NULL_TREE; + } + else if (TYPE_FIELDS (*node)) + { + error ("%qE attribute ignored because %qT is already defined", + name, *node); + return NULL_TREE; + } } else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl)) { @@ -4916,23 +4917,33 @@ handle_visibility_attribute (tree *node, tree name, tree args, } if (strcmp (TREE_STRING_POINTER (id), "default") == 0) - DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; + vis = VISIBILITY_DEFAULT; else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0) - DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL; + vis = VISIBILITY_INTERNAL; else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0) - DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; + vis = VISIBILITY_HIDDEN; else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0) - DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED; + vis = VISIBILITY_PROTECTED; else - error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\""); + { + error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\""); + vis = VISIBILITY_DEFAULT; + } + + if (DECL_VISIBILITY_SPECIFIED (decl) + && vis != DECL_VISIBILITY (decl) + && lookup_attribute ("visibility", (TYPE_P (*node) + ? TYPE_ATTRIBUTES (*node) + : DECL_ATTRIBUTES (decl)))) + error ("%qD redeclared with different visibility", decl); + + DECL_VISIBILITY (decl) = vis; DECL_VISIBILITY_SPECIFIED (decl) = 1; - /* For decls only, go ahead and attach the attribute to the node as well. - This is needed so we can determine whether we have VISIBILITY_DEFAULT - because the visibility was not specified, or because it was explicitly - overridden from the class visibility. */ - if (DECL_P (*node)) - *no_add_attrs = false; + /* Go ahead and attach the attribute to the node as well. This is needed + so we can determine whether we have VISIBILITY_DEFAULT because the + visibility was not specified, or because it was explicitly overridden + from the containing scope. */ return NULL_TREE; } @@ -4969,6 +4980,13 @@ c_determine_visibility (tree decl) return true; } + /* Set default visibility to whatever the user supplied with + visibility_specified depending on #pragma GCC visibility. */ + if (!DECL_VISIBILITY_SPECIFIED (decl)) + { + DECL_VISIBILITY (decl) = default_visibility; + DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma; + } return false; } @@ -5965,26 +5983,44 @@ c_common_to_target_charset (HOST_WIDE_INT c) } /* Build the result of __builtin_offsetof. EXPR is a nested sequence of - component references, with an INDIRECT_REF at the bottom; much like - the traditional rendering of offsetof as a macro. Returns the folded - and properly cast result. */ + component references, with STOP_REF, or alternatively an INDIRECT_REF of + NULL, at the bottom; much like the traditional rendering of offsetof as a + macro. Returns the folded and properly cast result. */ static tree -fold_offsetof_1 (tree expr) +fold_offsetof_1 (tree expr, tree stop_ref) { enum tree_code code = PLUS_EXPR; tree base, off, t; + if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK) + return size_zero_node; + switch (TREE_CODE (expr)) { case ERROR_MARK: return expr; - case INDIRECT_REF: + case VAR_DECL: + error ("cannot apply % to static data member %qD", expr); + return error_mark_node; + + case CALL_EXPR: + error ("cannot apply % when % is overloaded"); + return error_mark_node; + + case INTEGER_CST: + gcc_assert (integer_zerop (expr)); return size_zero_node; + case NOP_EXPR: + case INDIRECT_REF: + base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref); + gcc_assert (base == error_mark_node || base == size_zero_node); + return base; + case COMPONENT_REF: - base = fold_offsetof_1 (TREE_OPERAND (expr, 0)); + base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref); if (base == error_mark_node) return base; @@ -6001,7 +6037,7 @@ fold_offsetof_1 (tree expr) break; case ARRAY_REF: - base = fold_offsetof_1 (TREE_OPERAND (expr, 0)); + base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref); if (base == error_mark_node) return base; @@ -6023,10 +6059,10 @@ fold_offsetof_1 (tree expr) } tree -fold_offsetof (tree expr) +fold_offsetof (tree expr, tree stop_ref) { /* Convert back from the internal sizetype to size_t. */ - return convert (size_type_node, fold_offsetof_1 (expr)); + return convert (size_type_node, fold_offsetof_1 (expr, stop_ref)); } /* Print an error message for an invalid lvalue. USE says diff --git a/gcc/c-common.h b/gcc/c-common.h index 014b0cacd05..633990a3a35 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -290,7 +290,6 @@ extern void (*lang_post_pch_load) (void); extern void push_file_scope (void); extern void pop_file_scope (void); -extern int yyparse (void); extern stmt_tree current_stmt_tree (void); extern tree push_stmt_list (void); extern tree pop_stmt_list (tree); @@ -831,7 +830,7 @@ extern void c_warn_unused_result (tree *); extern void verify_sequence_points (tree); -extern tree fold_offsetof (tree); +extern tree fold_offsetof (tree, tree); /* Places where an lvalue, or modifiable lvalue, may be required. Used to select diagnostic messages in lvalue_error and @@ -949,7 +948,7 @@ extern tree c_finish_omp_master (tree); extern tree c_finish_omp_critical (tree, tree); extern tree c_finish_omp_ordered (tree); extern void c_finish_omp_barrier (void); -extern void c_finish_omp_atomic (enum tree_code, tree, tree); +extern tree c_finish_omp_atomic (enum tree_code, tree, tree); extern void c_finish_omp_flush (void); extern tree c_finish_omp_for (location_t, tree, tree, tree, tree, tree, tree); extern void c_split_parallel_clauses (tree, tree *, tree *); diff --git a/gcc/c-decl.c b/gcc/c-decl.c index ddf068a74f3..cbd356f9cef 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -1083,8 +1083,14 @@ validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype) for (;;) { - tree oldargtype = TYPE_MAIN_VARIANT (TREE_VALUE (oldargs)); - tree newargtype = TYPE_MAIN_VARIANT (TREE_VALUE (newargs)); + tree oldargtype = TREE_VALUE (oldargs); + tree newargtype = TREE_VALUE (newargs); + + if (oldargtype == error_mark_node || newargtype == error_mark_node) + return false; + + oldargtype = TYPE_MAIN_VARIANT (oldargtype); + newargtype = TYPE_MAIN_VARIANT (newargtype); if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype)) break; @@ -3459,18 +3465,16 @@ finish_decl (tree decl, tree init, tree asmspec_tree) /* If #pragma weak was used, mark the decl weak now. */ maybe_apply_pragma_weak (decl); - /* If this is a variable definition, determine its ELF visibility. */ - if (TREE_CODE (decl) == VAR_DECL - && TREE_STATIC (decl) - && !DECL_EXTERNAL (decl)) - c_determine_visibility (decl); - /* Output the assembler code and/or RTL code for variables and functions, unless the type is an undefined structure or union. If not, it will get done when the type is completed. */ if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL) { + /* Determine the ELF visibility. */ + if (TREE_PUBLIC (decl)) + c_determine_visibility (decl); + /* This is a no-op in c-lang.c or something real in objc-act.c. */ if (c_dialect_objc ()) objc_check_decl (decl); @@ -3556,7 +3560,7 @@ finish_decl (tree decl, tree init, tree asmspec_tree) } /* If this was marked 'used', be sure it will be output. */ - if (lookup_attribute ("used", DECL_ATTRIBUTES (decl))) + if (!flag_unit_at_a_time && lookup_attribute ("used", DECL_ATTRIBUTES (decl))) mark_decl_referenced (decl); if (TREE_CODE (decl) == TYPE_DECL) @@ -3936,6 +3940,14 @@ grokdeclarator (const struct c_declarator *declarator, if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS) warn_deprecated_use (declspecs->type); + if ((decl_context == NORMAL || decl_context == FIELD) + && current_scope == file_scope + && variably_modified_type_p (type, NULL_TREE)) + { + error ("variably modified %qs at file scope", name); + type = integer_type_node; + } + typedef_type = type; size_varies = C_TYPE_VARIABLE_SIZE (type); @@ -4206,6 +4218,12 @@ grokdeclarator (const struct c_declarator *declarator, size = integer_one_node; } } + else if ((decl_context == NORMAL || decl_context == FIELD) + && current_scope == file_scope) + { + error ("variably modified %qs at file scope", name); + size = integer_one_node; + } else { /* Make sure the array size remains visibly @@ -4291,6 +4309,18 @@ grokdeclarator (const struct c_declarator *declarator, size_varies = 1; } } + else if (decl_context == TYPENAME) + { + if (array_parm_vla_unspec_p) + { + /* The error is printed elsewhere. We use this to + avoid messing up with incomplete array types of + the same type, that would otherwise be modified + below. */ + itype = build_range_type (sizetype, size_zero_node, + NULL_TREE); + } + } /* Complain about arrays of incomplete types. */ if (!COMPLETE_TYPE_P (type)) @@ -4299,23 +4329,41 @@ grokdeclarator (const struct c_declarator *declarator, type = error_mark_node; } else + /* When itype is NULL, a shared incomplete array type is + returned for all array of a given type. Elsewhere we + make sure we don't complete that type before copying + it, but here we want to make sure we don't ever + modify the shared type, so we gcc_assert (itype) + below. */ type = build_array_type (type, itype); if (type != error_mark_node) { if (size_varies) - C_TYPE_VARIABLE_SIZE (type) = 1; + { + /* It is ok to modify type here even if itype is + NULL: if size_varies, we're in a + multi-dimensional array and the inner type has + variable size, so the enclosing shared array type + must too. */ + if (size && TREE_CODE (size) == INTEGER_CST) + type + = build_distinct_type_copy (TYPE_MAIN_VARIANT (type)); + C_TYPE_VARIABLE_SIZE (type) = 1; + } /* The GCC extension for zero-length arrays differs from ISO flexible array members in that sizeof yields zero. */ if (size && integer_zerop (size)) { + gcc_assert (itype); TYPE_SIZE (type) = bitsize_zero_node; TYPE_SIZE_UNIT (type) = size_zero_node; } if (array_parm_vla_unspec_p) { + gcc_assert (itype); /* The type is complete. C99 6.7.5.2p4 */ TYPE_SIZE (type) = bitsize_zero_node; TYPE_SIZE_UNIT (type) = size_zero_node; @@ -4372,6 +4420,8 @@ grokdeclarator (const struct c_declarator *declarator, inner layer of declarator. */ arg_info = declarator->u.arg_info; arg_types = grokparms (arg_info, really_funcdef); + if (really_funcdef) + put_pending_sizes (arg_info->pending_sizes); /* Type qualifiers before the return type of the function qualify the return type, not the function type. */ @@ -4474,21 +4524,6 @@ grokdeclarator (const struct c_declarator *declarator, return decl; } - /* Detect the case of an array type of unspecified size - which came, as such, direct from a typedef name. - We must copy the type, so that each identifier gets - a distinct type, so that each identifier's size can be - controlled separately by its own initializer. */ - - if (type != 0 && typedef_type != 0 - && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0 - && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type)) - { - type = build_array_type (TREE_TYPE (type), 0); - if (size_varies) - C_TYPE_VARIABLE_SIZE (type) = 1; - } - /* If this is a type name (such as, in a cast or sizeof), compute the type and return it now. */ @@ -4948,6 +4983,7 @@ get_parm_info (bool ellipsis) arg_info->tags = 0; arg_info->types = 0; arg_info->others = 0; + arg_info->pending_sizes = 0; arg_info->had_vla_unspec = current_scope->had_vla_unspec; /* The bindings in this scope must not get put into a block. @@ -5103,6 +5139,7 @@ get_parm_info (bool ellipsis) arg_info->tags = tags; arg_info->types = types; arg_info->others = others; + arg_info->pending_sizes = get_pending_sizes (); return arg_info; } @@ -5557,8 +5594,6 @@ finish_struct (tree t, tree fieldlist, tree attributes) { TYPE_FIELDS (x) = TYPE_FIELDS (t); TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t); - TYPE_ALIGN (x) = TYPE_ALIGN (t); - TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t); C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t); C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t); C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); @@ -5960,6 +5995,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, /* If this definition isn't a prototype and we had a prototype declaration before, copy the arg type info from that prototype. */ old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope); + if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL) + old_decl = 0; current_function_prototype_locus = UNKNOWN_LOCATION; current_function_prototype_built_in = false; current_function_prototype_arg_types = NULL_TREE; diff --git a/gcc/c-gimplify.c b/gcc/c-gimplify.c index 60ef914159f..7ddc88cf4ea 100644 --- a/gcc/c-gimplify.c +++ b/gcc/c-gimplify.c @@ -187,7 +187,7 @@ gimplify_compound_literal_expr (tree *expr_p, tree *pre_p) /* This decl isn't mentioned in the enclosing block, so add it to the list of temps. FIXME it seems a bit of a kludge to say that anonymous artificial vars aren't pushed, but everything else is. */ - if (DECL_NAME (decl) == NULL_TREE) + if (DECL_NAME (decl) == NULL_TREE && !DECL_SEEN_IN_BIND_EXPR_P (decl)) gimple_add_tmp_var (decl); gimplify_and_add (decl_s, pre_p); diff --git a/gcc/c-lex.c b/gcc/c-lex.c index ce231ddc4bc..108bc5cff17 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -364,6 +364,7 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags) case CPP_N_INVALID: /* cpplib has issued an error. */ *value = error_mark_node; + errorcount++; break; case CPP_N_INTEGER: diff --git a/gcc/c-omp.c b/gcc/c-omp.c index ac107e67737..fe56824401c 100644 --- a/gcc/c-omp.c +++ b/gcc/c-omp.c @@ -82,15 +82,18 @@ c_finish_omp_barrier (void) /* Complete a #pragma omp atomic construct. The expression to be - implemented atomically is LHS code= RHS. */ + implemented atomically is LHS code= RHS. The value returned is + either error_mark_node (if the construct was erroneous) or an + OMP_ATOMIC node which should be added to the current statement tree + with add_stmt. */ -void +tree c_finish_omp_atomic (enum tree_code code, tree lhs, tree rhs) { tree x, type, addr; if (lhs == error_mark_node || rhs == error_mark_node) - return; + return error_mark_node; /* ??? According to one reading of the OpenMP spec, complex type are supported, but there are no atomic stores for any architecture. @@ -102,7 +105,7 @@ c_finish_omp_atomic (enum tree_code code, tree lhs, tree rhs) && !SCALAR_FLOAT_TYPE_P (type)) { error ("invalid expression type for %<#pragma omp atomic%>"); - return; + return error_mark_node; } /* ??? Validate that rhs does not overlap lhs. */ @@ -111,7 +114,7 @@ c_finish_omp_atomic (enum tree_code code, tree lhs, tree rhs) via indirection. */ addr = build_unary_op (ADDR_EXPR, lhs, 0); if (addr == error_mark_node) - return; + return error_mark_node; addr = save_expr (addr); lhs = build_indirect_ref (addr, NULL); @@ -120,12 +123,12 @@ c_finish_omp_atomic (enum tree_code code, tree lhs, tree rhs) to do this, and then take it apart again. */ x = build_modify_expr (lhs, code, rhs); if (x == error_mark_node) - return; + return error_mark_node; gcc_assert (TREE_CODE (x) == MODIFY_EXPR); rhs = TREE_OPERAND (x, 1); /* Punt the actual generation of atomic operations to common code. */ - add_stmt (build2 (OMP_ATOMIC, void_type_node, addr, rhs)); + return build2 (OMP_ATOMIC, void_type_node, addr, rhs); } diff --git a/gcc/c-opts.c b/gcc/c-opts.c index ea631b0530a..2937b7995cd 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -1373,7 +1373,10 @@ finish_options (void) their acceptance on the -std= setting. */ cpp_opts->warn_dollars = (cpp_opts->pedantic && !cpp_opts->c99); - cpp_change_file (parse_in, LC_RENAME, _("")); + cb_file_change (parse_in, + linemap_add (&line_table, LC_RENAME, 0, + _(""), 0)); + for (i = 0; i < deferred_count; i++) { struct deferred_opt *opt = &deferred_opts[i]; diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 8afe79c3703..85202539283 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -919,6 +919,9 @@ c_parser_skip_to_end_of_block_or_statement (c_parser *parser) c_parser_skip_to_pragma_eol (parser); parser->error = save_error; continue; + + default: + break; } c_parser_consume_token (parser); @@ -2161,7 +2164,19 @@ c_parser_typeof_specifier (c_parser *parser) is evaluated, this can be evaluated. For now, we avoid evaluation when the context might. */ if (!skip_evaluation && was_vm) - c_finish_expr_stmt (expr.value); + { + tree e = expr.value; + + /* If the expression is not of a type to which we cannot assign a line + number, wrap the thing in a no-op NOP_EXPR. */ + if (DECL_P (e) || CONSTANT_CLASS_P (e)) + e = build1 (NOP_EXPR, void_type_node, e); + + if (EXPR_P (e)) + SET_EXPR_LOCATION (e, input_location); + + add_stmt (e); + } pop_maybe_used (was_vm); } c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>"); @@ -2522,6 +2537,7 @@ c_parser_parms_declarator (c_parser *parser, bool id_list_ok, tree attrs) ret->tags = 0; ret->types = list; ret->others = 0; + ret->pending_sizes = 0; ret->had_vla_unspec = 0; c_parser_consume_token (parser); pop_scope (); @@ -2564,6 +2580,7 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs) ret->tags = 0; ret->types = 0; ret->others = 0; + ret->pending_sizes = 0; ret->had_vla_unspec = 0; c_parser_consume_token (parser); return ret; @@ -2574,6 +2591,7 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs) ret->parms = 0; ret->tags = 0; ret->others = 0; + ret->pending_sizes = 0; ret->had_vla_unspec = 0; /* Suppress -Wold-style-definition for this case. */ ret->types = error_mark_node; @@ -2625,6 +2643,7 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs) ret->tags = 0; ret->types = 0; ret->others = 0; + ret->pending_sizes = 0; ret->had_vla_unspec = 0; return ret; } @@ -2651,6 +2670,7 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs) ret->tags = 0; ret->types = 0; ret->others = 0; + ret->pending_sizes = 0; ret->had_vla_unspec = 0; return ret; } @@ -3483,6 +3503,8 @@ c_parser_compound_statement_nostart (c_parser *parser) last_stmt = true; c_parser_statement_after_labels (parser); } + + parser->error = false; } if (last_label) error ("label at end of compound statement"); @@ -5186,7 +5208,7 @@ c_parser_postfix_expression (c_parser *parser) if (type == error_mark_node) offsetof_ref = error_mark_node; else - offsetof_ref = build1 (INDIRECT_REF, type, NULL); + offsetof_ref = build1 (INDIRECT_REF, type, null_pointer_node); /* Parse the second argument to __builtin_offsetof. We must have one identifier, and beyond that we want to accept sub structure and sub array references. */ @@ -5228,7 +5250,7 @@ c_parser_postfix_expression (c_parser *parser) c_parser_error (parser, "expected identifier"); c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>"); - expr.value = fold_offsetof (offsetof_ref); + expr.value = fold_offsetof (offsetof_ref, NULL_TREE); expr.original_code = ERROR_MARK; } break; @@ -5429,7 +5451,7 @@ c_parser_postfix_expression_after_paren_type (c_parser *parser, struct c_expr expr; start_init (NULL_TREE, NULL, 0); type = groktypename (type_name); - if (C_TYPE_VARIABLE_SIZE (type)) + if (type != error_mark_node && C_TYPE_VARIABLE_SIZE (type)) { error ("compound literal has variable size"); type = error_mark_node; @@ -7214,6 +7236,7 @@ static void c_parser_omp_atomic (c_parser *parser) { tree lhs, rhs; + tree stmt; enum tree_code code; c_parser_skip_to_pragma_eol (parser); @@ -7280,7 +7303,9 @@ c_parser_omp_atomic (c_parser *parser) rhs = c_parser_expression (parser).value; break; } - c_finish_omp_atomic (code, lhs, rhs); + stmt = c_finish_omp_atomic (code, lhs, rhs); + if (stmt != error_mark_node) + add_stmt (stmt); c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>"); } diff --git a/gcc/c-ppoutput.c b/gcc/c-ppoutput.c index 2c4640cc460..10540b7f125 100644 --- a/gcc/c-ppoutput.c +++ b/gcc/c-ppoutput.c @@ -324,7 +324,8 @@ cb_define (cpp_reader *pfile, source_location line, cpp_hashnode *node) fputs ((const char *) NODE_NAME (node), print.outf); putc ('\n', print.outf); - print.src_line++; + if (linemap_lookup (&line_table, line)->to_line != 0) + print.src_line++; } static void diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index e71ab07a16f..b2712acc937 100644 --- a/gcc/c-pragma.c +++ b/gcc/c-pragma.c @@ -160,6 +160,8 @@ handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy)) } else if (token == CPP_NUMBER) { + if (TREE_CODE (x) != INTEGER_CST) + GCC_BAD ("invalid constant in %<#pragma pack%> - ignored"); align = TREE_INT_CST_LOW (x); action = set; if (pragma_lex (&x) != CPP_CLOSE_PAREN) @@ -190,6 +192,8 @@ handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy)) } else if (token == CPP_NUMBER && action == push && align == -1) { + if (TREE_CODE (x) != INTEGER_CST) + GCC_BAD ("invalid constant in %<#pragma pack%> - ignored"); align = TREE_INT_CST_LOW (x); if (align == -1) action = set; diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index e14f9d50a09..0c2be08e549 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -507,8 +507,8 @@ pp_c_direct_abstract_declarator (c_pretty_printer *pp, tree t) if (host_integerp (maxval, 0)) pp_wide_integer (pp, tree_low_cst (maxval, 0) + 1); else - pp_expression (pp, fold_build2 (PLUS_EXPR, type, maxval, - build_int_cst (type, 1))); + pp_expression (pp, fold (build2 (PLUS_EXPR, type, maxval, + build_int_cst (type, 1)))); } pp_c_right_bracket (pp); pp_direct_abstract_declarator (pp, TREE_TYPE (t)); diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 3503c793a23..79579b0547a 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -309,6 +309,11 @@ struct c_arg_info { /* A list of non-parameter decls (notably enumeration constants) defined with the parameters. */ tree others; + /* A list of VLA sizes from the parameters. In a function + definition, these are used to ensure that side-effects in sizes + of arrays converted to pointers (such as a parameter int i[n++]) + take place; otherwise, they are ignored. */ + tree pending_sizes; /* True when these arguments had [*]. */ BOOL_BITFIELD had_vla_unspec : 1; }; diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 7a8cdc40e23..42e01d2af52 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -596,6 +596,29 @@ c_common_type (tree t1, tree t2) gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE || code2 == REAL_TYPE || code2 == INTEGER_TYPE); + /* When one operand is a decimal float type, the other operand cannot be + a generic float type or a complex type. We also disallow vector types + here. */ + if ((DECIMAL_FLOAT_TYPE_P (t1) || DECIMAL_FLOAT_TYPE_P (t2)) + && !(DECIMAL_FLOAT_TYPE_P (t1) && DECIMAL_FLOAT_TYPE_P (t2))) + { + if (code1 == VECTOR_TYPE || code2 == VECTOR_TYPE) + { + error ("can%'t mix operands of decimal float and vector types"); + return error_mark_node; + } + if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE) + { + error ("can%'t mix operands of decimal float and complex types"); + return error_mark_node; + } + if (code1 == REAL_TYPE && code2 == REAL_TYPE) + { + error ("can%'t mix operands of decimal float and other float types"); + return error_mark_node; + } + } + /* If one type is a vector type, return that type. (How the usual arithmetic conversions apply to the vector types extension is not precisely specified.) */ @@ -1786,11 +1809,17 @@ build_component_ref (tree datum, tree component) do { tree subdatum = TREE_VALUE (field); + int quals; + tree subtype; if (TREE_TYPE (subdatum) == error_mark_node) return error_mark_node; - ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum, + quals = TYPE_QUALS (strip_array_types (TREE_TYPE (subdatum))); + quals |= TYPE_QUALS (TREE_TYPE (datum)); + subtype = c_build_qualified_type (TREE_TYPE (subdatum), quals); + + ref = build3 (COMPONENT_REF, subtype, datum, subdatum, NULL_TREE); if (TREE_READONLY (datum) || TREE_READONLY (subdatum)) TREE_READONLY (ref) = 1; @@ -2044,6 +2073,7 @@ build_external_ref (tree id, int fun, location_t loc) if (TREE_CODE (ref) == CONST_DECL) { + used_types_insert (TREE_TYPE (ref)); ref = DECL_INITIAL (ref); TREE_CONSTANT (ref) = 1; TREE_INVARIANT (ref) = 1; @@ -2153,7 +2183,8 @@ c_expr_sizeof_type (struct c_type_name *t) type = groktypename (t); ret.value = c_sizeof (type); ret.original_code = ERROR_MARK; - pop_maybe_used (C_TYPE_VARIABLE_SIZE (type)); + pop_maybe_used (type != error_mark_node + ? C_TYPE_VARIABLE_SIZE (type) : false); return ret; } @@ -3026,7 +3057,7 @@ build_unary_op (enum tree_code code, tree xarg, int flag) if (val && TREE_CODE (val) == INDIRECT_REF && TREE_CONSTANT (TREE_OPERAND (val, 0))) { - tree op0 = fold_convert (argtype, fold_offsetof (arg)), op1; + tree op0 = fold_convert (argtype, fold_offsetof (arg, val)), op1; op1 = fold_convert (argtype, TREE_OPERAND (val, 0)); return fold_build2 (PLUS_EXPR, argtype, op0, op1); @@ -3400,6 +3431,9 @@ build_compound_expr (tree expr1, tree expr2) else if (warn_unused_value) warn_if_unused_value (expr1, input_location); + if (expr2 == error_mark_node) + return error_mark_node; + return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2); } @@ -3643,6 +3677,9 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK) return error_mark_node; + if (!lvalue_or_else (lhs, lv_assign)) + return error_mark_node; + STRIP_TYPE_NOPS (rhs); newrhs = rhs; @@ -3656,9 +3693,6 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) newrhs = build_binary_op (modifycode, lhs, rhs, 1); } - if (!lvalue_or_else (lhs, lv_assign)) - return error_mark_node; - /* Give an error for storing in something that is 'const'. */ if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype) @@ -4209,7 +4243,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, } /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM - is used for error and waring reporting and indicates which argument + is used for error and warning reporting and indicates which argument is being processed. */ tree @@ -4217,9 +4251,15 @@ c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum) { tree ret, type; - /* If FN was prototyped, the value has been converted already - in convert_arguments. */ - if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn))) + /* If FN was prototyped at the call site, the value has been converted + already in convert_arguments. + However, we might see a prototype now that was not in place when + the function call was seen, so check that the VALUE actually matches + PARM before taking an early exit. */ + if (!value + || (TYPE_ARG_TYPES (TREE_TYPE (fn)) + && (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) + == TYPE_MAIN_VARIANT (TREE_TYPE (value))))) return value; type = TREE_TYPE (parm); @@ -4301,16 +4341,18 @@ store_init_value (tree decl, tree init) if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR) { - tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init); + tree cldecl = COMPOUND_LITERAL_EXPR_DECL (inside_init); - if (TYPE_DOMAIN (TREE_TYPE (decl))) + if (TYPE_DOMAIN (TREE_TYPE (cldecl))) { /* For int foo[] = (int [3]){1}; we need to set array size now since later on array initializer will be just the brace enclosed list of the compound literal. */ - TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl)); + type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type)); + TREE_TYPE (decl) = type; + TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl)); layout_type (type); - layout_decl (decl, 0); + layout_decl (cldecl, 0); } } } @@ -7034,25 +7076,25 @@ struct c_switch *c_switch_stack; tree c_start_case (tree exp) { - enum tree_code code; - tree type, orig_type = error_mark_node; + tree orig_type = error_mark_node; struct c_switch *cs; if (exp != error_mark_node) { - code = TREE_CODE (TREE_TYPE (exp)); orig_type = TREE_TYPE (exp); - if (!INTEGRAL_TYPE_P (orig_type) - && code != ERROR_MARK) + if (!INTEGRAL_TYPE_P (orig_type)) { - error ("switch quantity not an integer"); + if (orig_type != error_mark_node) + { + error ("switch quantity not an integer"); + orig_type = error_mark_node; + } exp = integer_zero_node; - orig_type = error_mark_node; } else { - type = TYPE_MAIN_VARIANT (TREE_TYPE (exp)); + tree type = TYPE_MAIN_VARIANT (orig_type); if (!in_system_header && (type == long_integer_type_node @@ -7061,7 +7103,6 @@ c_start_case (tree exp) "converted to % in ISO C"); exp = default_conversion (exp); - type = TREE_TYPE (exp); } } @@ -7549,6 +7590,11 @@ c_begin_vm_scope (unsigned int scope) struct c_label_list *glist; gcc_assert (scope > 0); + + /* At file_scope, we don't have to do any processing. */ + if (label_context_stack_vm == NULL) + return; + if (c_switch_stack && !c_switch_stack->blocked_vm) c_switch_stack->blocked_vm = scope; for (glist = label_context_stack_vm->labels_used; @@ -7995,7 +8041,9 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1, { if (TREE_CODE (op0) == ADDR_EXPR && DECL_P (TREE_OPERAND (op0, 0)) - && !DECL_WEAK (TREE_OPERAND (op0, 0))) + && (TREE_CODE (TREE_OPERAND (op0, 0)) == PARM_DECL + || TREE_CODE (TREE_OPERAND (op0, 0)) == LABEL_DECL + || !DECL_WEAK (TREE_OPERAND (op0, 0)))) warning (OPT_Walways_true, "the address of %qD will never be NULL", TREE_OPERAND (op0, 0)); result_type = type0; @@ -8004,7 +8052,9 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1, { if (TREE_CODE (op1) == ADDR_EXPR && DECL_P (TREE_OPERAND (op1, 0)) - && !DECL_WEAK (TREE_OPERAND (op1, 0))) + && (TREE_CODE (TREE_OPERAND (op1, 0)) == PARM_DECL + || TREE_CODE (TREE_OPERAND (op1, 0)) == LABEL_DECL + || !DECL_WEAK (TREE_OPERAND (op1, 0)))) warning (OPT_Walways_true, "the address of %qD will never be NULL", TREE_OPERAND (op1, 0)); result_type = type1; diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 39e34694e0b..0e13f7a07cf 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -1733,7 +1733,7 @@ try_crossjump_to_edge (int mode, edge e1, edge e2) redirect_to->count += src1->count; redirect_to->frequency += src1->frequency; - /* We may have some registers visible trought the block. */ + /* We may have some registers visible through the block. */ redirect_to->flags |= BB_DIRTY; /* Recompute the frequencies and counts of outgoing edges. */ diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 4822ed8b3cd..9839d098375 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -58,7 +58,9 @@ add_reg_br_prob_note (rtx last, int probability) if (!any_condjump_p (last) || !JUMP_P (NEXT_INSN (last)) || !simplejump_p (NEXT_INSN (last)) + || !NEXT_INSN (NEXT_INSN (last)) || !BARRIER_P (NEXT_INSN (NEXT_INSN (last))) + || !NEXT_INSN (NEXT_INSN (NEXT_INSN (last))) || !LABEL_P (NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))) || NEXT_INSN (NEXT_INSN (NEXT_INSN (NEXT_INSN (last))))) goto failed; @@ -764,7 +766,7 @@ expand_used_vars_for_block (tree block, bool toplevel) expand_used_vars_for_block (t, false); /* Since we do not track exact variable lifetimes (which is not even - possible for varibles whose address escapes), we mirror the block + possible for variables whose address escapes), we mirror the block tree in the interference graph. Here we cause all variables at this level, and all sublevels, to conflict. Do make certain that a variable conflicts with itself. */ @@ -1580,6 +1582,8 @@ tree_expand_cfg (void) { basic_block bb, init_block; sbitmap blocks; + edge_iterator ei; + edge e; /* Some backends want to know that we are expanding to RTL. */ currently_expanding_to_rtl = 1; @@ -1623,6 +1627,11 @@ tree_expand_cfg (void) init_block = construct_init_block (); + /* Clear EDGE_EXECUTABLE on the entry edge(s). It is cleaned from the + remaining edges in expand_gimple_basic_block. */ + FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs) + e->flags &= ~EDGE_EXECUTABLE; + FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR, next_bb) bb = expand_gimple_basic_block (bb); diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c index 060c9c2ddd8..da545838436 100644 --- a/gcc/cfgloopanal.c +++ b/gcc/cfgloopanal.c @@ -1,5 +1,5 @@ /* Natural loop analysis code for GNU compiler. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -83,7 +83,9 @@ struct graph /* Dumps graph G into F. */ extern void dump_graph (FILE *, struct graph *); -void dump_graph (FILE *f, struct graph *g) + +void +dump_graph (FILE *f, struct graph *g) { int i; struct edge *e; diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 5f5869b76e4..638b2996584 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -41,14 +41,13 @@ static bool rpe_enum_p (basic_block, void *); static int find_path (edge, basic_block **); static bool alp_enum_p (basic_block, void *); static void add_loop (struct loops *, struct loop *); -static void fix_loop_placements (struct loops *, struct loop *); +static void fix_loop_placements (struct loops *, struct loop *, bool *); static bool fix_bb_placement (struct loops *, basic_block); -static void fix_bb_placements (struct loops *, basic_block); +static void fix_bb_placements (struct loops *, basic_block, bool *); static void place_new_loop (struct loops *, struct loop *); static void scale_loop_frequencies (struct loop *, int, int); static basic_block create_preheader (struct loop *, int); -static void fix_irreducible_loops (basic_block); -static void unloop (struct loops *, struct loop *); +static void unloop (struct loops *, struct loop *, bool *); #define RDIV(X,Y) (((X) + (Y) / 2) / (Y)) @@ -133,9 +132,14 @@ fix_bb_placement (struct loops *loops, basic_block bb) its predecessors that may change if placement of FROM changed. Also fix placement of subloops of FROM->loop_father, that might also be altered due to this change; the condition for them is similar, except that instead of - successors we consider edges coming out of the loops. */ + successors we consider edges coming out of the loops. + + If the changes may invalidate the information about irreducible regions, + IRRED_INVALIDATED is set to true. */ + static void -fix_bb_placements (struct loops *loops, basic_block from) +fix_bb_placements (struct loops *loops, basic_block from, + bool *irred_invalidated) { sbitmap in_queue; basic_block *queue, *qtop, *qbeg, *qend; @@ -187,12 +191,21 @@ fix_bb_placements (struct loops *loops, basic_block from) continue; } + FOR_EACH_EDGE (e, ei, from->succs) + { + if (e->flags & EDGE_IRREDUCIBLE_LOOP) + *irred_invalidated = true; + } + /* Something has changed, insert predecessors into queue. */ FOR_EACH_EDGE (e, ei, from->preds) { basic_block pred = e->src; struct loop *nca; + if (e->flags & EDGE_IRREDUCIBLE_LOOP) + *irred_invalidated = true; + if (TEST_BIT (in_queue, pred->index)) continue; @@ -225,76 +238,6 @@ fix_bb_placements (struct loops *loops, basic_block from) free (queue); } -/* Basic block from has lost one or more of its predecessors, so it might - mo longer be part irreducible loop. Fix it and proceed recursively - for its successors if needed. */ -static void -fix_irreducible_loops (basic_block from) -{ - basic_block bb; - basic_block *stack; - int stack_top; - sbitmap on_stack; - edge *edges, e; - unsigned num_edges, i; - - if (!(from->flags & BB_IRREDUCIBLE_LOOP)) - return; - - on_stack = sbitmap_alloc (last_basic_block); - sbitmap_zero (on_stack); - SET_BIT (on_stack, from->index); - stack = XNEWVEC (basic_block, from->loop_father->num_nodes); - stack[0] = from; - stack_top = 1; - - while (stack_top) - { - edge_iterator ei; - bb = stack[--stack_top]; - RESET_BIT (on_stack, bb->index); - - FOR_EACH_EDGE (e, ei, bb->preds) - if (e->flags & EDGE_IRREDUCIBLE_LOOP) - break; - if (e) - continue; - - bb->flags &= ~BB_IRREDUCIBLE_LOOP; - if (bb->loop_father->header == bb) - edges = get_loop_exit_edges (bb->loop_father, &num_edges); - else - { - num_edges = EDGE_COUNT (bb->succs); - edges = XNEWVEC (edge, num_edges); - FOR_EACH_EDGE (e, ei, bb->succs) - edges[ei.index] = e; - } - - for (i = 0; i < num_edges; i++) - { - e = edges[i]; - - if (e->flags & EDGE_IRREDUCIBLE_LOOP) - { - if (!flow_bb_inside_loop_p (from->loop_father, e->dest)) - continue; - - e->flags &= ~EDGE_IRREDUCIBLE_LOOP; - if (TEST_BIT (on_stack, e->dest->index)) - continue; - - SET_BIT (on_stack, e->dest->index); - stack[stack_top++] = e->dest; - } - } - free (edges); - } - - free (on_stack); - free (stack); -} - /* Removes path beginning at edge E, i.e. remove basic blocks dominated by E and update loop structure stored in LOOPS and dominators. Return true if we were able to remove the path, false otherwise (and nothing is affected @@ -306,11 +249,19 @@ remove_path (struct loops *loops, edge e) basic_block *rem_bbs, *bord_bbs, *dom_bbs, from, bb; int i, nrem, n_bord_bbs, n_dom_bbs; sbitmap seen; - bool deleted; + bool deleted, irred_invalidated = false; if (!loop_delete_branch_edge (e, 0)) return false; + /* Keep track of whether we need to update information about irreducible + regions. This is the case if the removed area is a part of the + irreducible region, or if the set of basic blocks that belong to a loop + that is inside an irreducible region is changed, or if such a loop is + removed. */ + if (e->flags & EDGE_IRREDUCIBLE_LOOP) + irred_invalidated = true; + /* We need to check whether basic blocks are dominated by the edge e, but we only have basic block dominators. This is easy to fix -- when e->dest has exactly one predecessor, this corresponds @@ -325,7 +276,7 @@ remove_path (struct loops *loops, edge e) while (e->src->loop_father->outer && dominated_by_p (CDI_DOMINATORS, e->src->loop_father->latch, e->dest)) - unloop (loops, e->src->loop_father); + unloop (loops, e->src->loop_father, &irred_invalidated); /* Identify the path. */ nrem = find_path (e, &rem_bbs); @@ -347,6 +298,9 @@ remove_path (struct loops *loops, edge e) { SET_BIT (seen, ae->dest->index); bord_bbs[n_bord_bbs++] = ae->dest; + + if (ae->flags & EDGE_IRREDUCIBLE_LOOP) + irred_invalidated = true; } } @@ -388,17 +342,16 @@ remove_path (struct loops *loops, edge e) /* Recount dominators. */ iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, n_dom_bbs); free (dom_bbs); - - /* These blocks have lost some predecessor(s), thus their irreducible - status could be changed. */ - for (i = 0; i < n_bord_bbs; i++) - fix_irreducible_loops (bord_bbs[i]); free (bord_bbs); /* Fix placements of basic blocks inside loops and the placement of loops in the loop tree. */ - fix_bb_placements (loops, from); - fix_loop_placements (loops, from->loop_father); + fix_bb_placements (loops, from, &irred_invalidated); + fix_loop_placements (loops, from->loop_father, &irred_invalidated); + + if (irred_invalidated + && (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS) != 0) + mark_irreducible_loops (loops); return true; } @@ -549,16 +502,22 @@ loopify (struct loops *loops, edge latch_edge, edge header_edge, /* Remove the latch edge of a LOOP and update LOOPS tree to indicate that the LOOP was removed. After this function, original loop latch will - have no successor, which caller is expected to fix somehow. */ + have no successor, which caller is expected to fix somehow. + + If this may cause the information about irreducible regions to become + invalid, IRRED_INVALIDATED is set to true. */ + static void -unloop (struct loops *loops, struct loop *loop) +unloop (struct loops *loops, struct loop *loop, bool *irred_invalidated) { basic_block *body; struct loop *ploop; unsigned i, n; basic_block latch = loop->latch; - edge *edges; - unsigned num_edges; + bool dummy = false; + + if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP) + *irred_invalidated = true; /* This is relatively straightforward. The dominators are unchanged, as loop header dominates loop latch, so the only thing we have to care of @@ -567,7 +526,6 @@ unloop (struct loops *loops, struct loop *loop) its work. */ body = get_loop_body (loop); - edges = get_loop_exit_edges (loop, &num_edges); n = loop->num_nodes; for (i = 0; i < n; i++) if (body[i]->loop_father == loop) @@ -590,24 +548,18 @@ unloop (struct loops *loops, struct loop *loop) flow_loop_free (loop); remove_edge (single_succ_edge (latch)); - fix_bb_placements (loops, latch); - - /* If the loop was inside an irreducible region, we would have to somehow - update the irreducible marks inside its body. While it is certainly - possible to do, it is a bit complicated and this situation should be - very rare, so we just remark all loops in this case. */ - for (i = 0; i < num_edges; i++) - if (edges[i]->flags & EDGE_IRREDUCIBLE_LOOP) - break; - if (i != num_edges) - mark_irreducible_loops (loops); - free (edges); + + /* We do not pass IRRED_INVALIDATED to fix_bb_placements here, as even if + there is an irreducible region inside the cancelled loop, the flags will + be still correct. */ + fix_bb_placements (loops, latch, &dummy); } /* Fix placement of LOOP inside loop tree, i.e. find the innermost superloop FATHER of LOOP such that all of the edges coming out of LOOP belong to - FATHER, and set it as outer loop of LOOP. Return 1 if placement of + FATHER, and set it as outer loop of LOOP. Return true if placement of LOOP changed. */ + int fix_loop_placement (struct loop *loop) { @@ -642,9 +594,14 @@ fix_loop_placement (struct loop *loop) /* Fix placement of superloops of LOOP inside loop tree, i.e. ensure that condition stated in description of fix_loop_placement holds for them. It is used in case when we removed some edges coming out of LOOP, which - may cause the right placement of LOOP inside loop tree to change. */ + may cause the right placement of LOOP inside loop tree to change. + + IRRED_INVALIDATED is set to true if a change in the loop structures might + invalidate the information about irreducible regions. */ + static void -fix_loop_placements (struct loops *loops, struct loop *loop) +fix_loop_placements (struct loops *loops, struct loop *loop, + bool *irred_invalidated) { struct loop *outer; @@ -659,7 +616,8 @@ fix_loop_placements (struct loops *loops, struct loop *loop) for its preheader, because the successor is the header and belongs to the loop. So call fix_bb_placements to fix up the placement of the preheader and (possibly) of its predecessors. */ - fix_bb_placements (loops, loop_preheader_edge (loop)->src); + fix_bb_placements (loops, loop_preheader_edge (loop)->src, + irred_invalidated); loop = outer; } } diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index fb0eeac37d7..29df8d49dbd 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -386,6 +386,13 @@ rtl_delete_block (basic_block b) /* Selectively delete the entire chain. */ BB_HEAD (b) = NULL; delete_insn_chain (insn, end); + if (b->il.rtl->global_live_at_start) + { + FREE_REG_SET (b->il.rtl->global_live_at_start); + FREE_REG_SET (b->il.rtl->global_live_at_end); + b->il.rtl->global_live_at_start = NULL; + b->il.rtl->global_live_at_end = NULL; + } } /* Records the basic block struct in BLOCK_FOR_INSN for every insn. */ diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 04ff09452cd..372b90d5eaa 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -47,9 +47,9 @@ The callgraph: be accessed in such an invisible way and it shall be considered an entry point to the callgraph. - Intraprocedural information: + Interprocedural information: - Callgraph is place to store data needed for intraprocedural optimization. + Callgraph is place to store data needed for interprocedural optimization. All data structures are divided into three components: local_info that is produced while analyzing the function, global_info that is result of global walking of the callgraph on the end of compilation and @@ -137,7 +137,7 @@ static GTY((param_is (struct cgraph_varpool_node))) htab_t cgraph_varpool_hash; struct cgraph_varpool_node *cgraph_varpool_nodes_queue, *cgraph_varpool_first_unanalyzed_node; /* The linked list of cgraph varpool nodes. */ -static GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes; +struct cgraph_varpool_node *cgraph_varpool_nodes; /* End of the varpool queue. Needs to be QTYed to work with PCH. */ static GTY(()) struct cgraph_varpool_node *cgraph_varpool_last_needed_node; @@ -293,11 +293,32 @@ cgraph_node_for_asm (tree asmname) return NULL; } +/* Returns a hash value for X (which really is a die_struct). */ + +static hashval_t +edge_hash (const void *x) +{ + return htab_hash_pointer (((struct cgraph_edge *) x)->call_stmt); +} + +/* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */ + +static int +edge_eq (const void *x, const void *y) +{ + return ((struct cgraph_edge *) x)->call_stmt == y; +} + /* Return callgraph edge representing CALL_EXPR statement. */ struct cgraph_edge * cgraph_edge (struct cgraph_node *node, tree call_stmt) { - struct cgraph_edge *e; + struct cgraph_edge *e, *e2; + int n = 0; + + if (node->call_site_hash) + return htab_find_with_hash (node->call_site_hash, call_stmt, + htab_hash_pointer (call_stmt)); /* This loop may turn out to be performance problem. In such case adding hashtables into call nodes with very many edges is probably best @@ -305,11 +326,51 @@ cgraph_edge (struct cgraph_node *node, tree call_stmt) because we want to make possible having multiple cgraph nodes representing different clones of the same body before the body is actually cloned. */ for (e = node->callees; e; e= e->next_callee) - if (e->call_stmt == call_stmt) - break; + { + if (e->call_stmt == call_stmt) + break; + n++; + } + if (n > 100) + { + node->call_site_hash = htab_create_ggc (120, edge_hash, edge_eq, NULL); + for (e2 = node->callees; e2; e2 = e2->next_callee) + { + void **slot; + slot = htab_find_slot_with_hash (node->call_site_hash, + e2->call_stmt, + htab_hash_pointer (e2->call_stmt), + INSERT); + gcc_assert (!*slot); + *slot = e2; + } + } return e; } +/* Change call_smtt of edge E to NEW_STMT. */ +void +cgraph_set_call_stmt (struct cgraph_edge *e, tree new_stmt) +{ + if (e->caller->call_site_hash) + { + htab_remove_elt_with_hash (e->caller->call_site_hash, + e->call_stmt, + htab_hash_pointer (e->call_stmt)); + } + e->call_stmt = new_stmt; + if (e->caller->call_site_hash) + { + void **slot; + slot = htab_find_slot_with_hash (e->caller->call_site_hash, + e->call_stmt, + htab_hash_pointer + (e->call_stmt), INSERT); + gcc_assert (!*slot); + *slot = e; + } +} + /* Create edge from CALLER to CALLEE in the cgraph. */ struct cgraph_edge * @@ -353,6 +414,17 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee, callee->callers = edge; edge->count = count; edge->loop_nest = nest; + if (caller->call_site_hash) + { + void **slot; + slot = htab_find_slot_with_hash (caller->call_site_hash, + edge->call_stmt, + htab_hash_pointer + (edge->call_stmt), + INSERT); + gcc_assert (!*slot); + *slot = edge; + } return edge; } @@ -380,6 +452,10 @@ cgraph_edge_remove_caller (struct cgraph_edge *e) e->next_callee->prev_callee = e->prev_callee; if (!e->prev_callee) e->caller->callees = e->next_callee; + if (e->caller->call_site_hash) + htab_remove_elt_with_hash (e->caller->call_site_hash, + e->call_stmt, + htab_hash_pointer (e->call_stmt)); } /* Remove the edge E in the cgraph. */ @@ -425,6 +501,11 @@ cgraph_node_remove_callees (struct cgraph_node *node) for (e = node->callees; e; e = e->next_callee) cgraph_edge_remove_callee (e); node->callees = NULL; + if (node->call_site_hash) + { + htab_delete (node->call_site_hash); + node->call_site_hash = NULL; + } } /* Remove all callers from the node. */ @@ -452,6 +533,9 @@ cgraph_remove_node (struct cgraph_node *node) cgraph_node_remove_callers (node); cgraph_node_remove_callees (node); + /* Incremental inlining access removed nodes stored in the postorder list. + */ + node->needed = node->reachable = false; while (node->nested) cgraph_remove_node (node->nested); if (node->origin) @@ -468,6 +552,8 @@ cgraph_remove_node (struct cgraph_node *node) cgraph_nodes = node->next; if (node->next) node->next->previous = node->previous; + node->next = NULL; + node->previous = NULL; slot = htab_find_slot (cgraph_hash, node, NO_INSERT); if (*slot == node) { @@ -509,12 +595,18 @@ cgraph_remove_node (struct cgraph_node *node) kill_body = true; } - if (kill_body && !dump_enabled_p (TDI_tree_all) && flag_unit_at_a_time) + if (kill_body && flag_unit_at_a_time) { DECL_SAVED_TREE (node->decl) = NULL; DECL_STRUCT_FUNCTION (node->decl) = NULL; DECL_INITIAL (node->decl) = error_mark_node; } + node->decl = NULL; + if (node->call_site_hash) + { + htab_delete (node->call_site_hash); + node->call_site_hash = NULL; + } cgraph_n_nodes--; /* Do not free the structure itself so the walk over chain can continue. */ } @@ -829,7 +921,8 @@ cgraph_varpool_reset_queue (void) void cgraph_varpool_mark_needed_node (struct cgraph_varpool_node *node) { - if (!node->needed && node->finalized) + if (!node->needed && node->finalized + && !TREE_ASM_WRITTEN (node->decl)) cgraph_varpool_enqueue_needed_node (node); node->needed = 1; } @@ -843,8 +936,10 @@ bool decide_is_variable_needed (struct cgraph_varpool_node *node, tree decl) { /* If the user told us it is used, then it must be so. */ - if (node->externally_visible - || lookup_attribute ("used", DECL_ATTRIBUTES (decl))) + if (node->externally_visible) + return true; + if (!flag_unit_at_a_time + && lookup_attribute ("used", DECL_ATTRIBUTES (decl))) return true; /* ??? If the assembler name is set by hand, it is possible to assemble @@ -861,7 +956,8 @@ decide_is_variable_needed (struct cgraph_varpool_node *node, tree decl) /* Externally visible variables must be output. The exception is COMDAT variables that must be output only when they are needed. */ - if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl) && !DECL_EXTERNAL (decl)) + if (TREE_PUBLIC (decl) && !flag_whole_program && !DECL_COMDAT (decl) + && !DECL_EXTERNAL (decl)) return true; /* When not reordering top level variables, we have to assume that diff --git a/gcc/cgraph.h b/gcc/cgraph.h index c436a675910..9d3dafb0b41 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -56,31 +56,31 @@ struct cgraph_local_info GTY(()) /* Set when function function is visible in current compilation unit only and its address is never taken. */ - bool local; + unsigned local : 1; /* Set when function is visible by other units. */ - bool externally_visible; + unsigned externally_visible : 1; /* Set once it has been finalized so we consider it to be output. */ - bool finalized; + unsigned finalized : 1; /* False when there something makes inlining impossible (such as va_arg). */ - bool inlinable; + unsigned inlinable : 1; /* True when function should be inlined independently on its size. */ - bool disregard_inline_limits; + unsigned disregard_inline_limits : 1; /* True when the function has been originally extern inline, but it is redefined now. */ - bool redefined_extern_inline; + unsigned redefined_extern_inline : 1; /* True if statics_read_for_function and statics_written_for_function contain valid data. */ - bool for_functions_valid; + unsigned for_functions_valid : 1; /* True if the function is going to be emitted in some other translation unit, referenced from vtable. */ - bool vtable_method; + unsigned vtable_method : 1; }; /* Information about the function that needs to be computed globally @@ -133,6 +133,9 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous"))) /* Pointer to a single unique cgraph node for this function. If the function is to be output, this is the copy that will survive. */ struct cgraph_node *master_clone; + /* For functions with many calls sites it holds map from call expression + to the edge to speed up cgraph_edge function. */ + htab_t GTY((param_is (struct cgraph_edge))) call_site_hash; PTR GTY ((skip)) aux; @@ -146,23 +149,22 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous"))) int uid; /* Ordering of all cgraph nodes. */ int order; + /* Set when function must be output - it is externally visible or its address is taken. */ - bool needed; + unsigned needed : 1; /* Set when function is reachable by call from other function that is either reachable or needed. */ - bool reachable; + unsigned reachable : 1; /* Set once the function is lowered (i.e. its CFG is built). */ - bool lowered; + unsigned lowered : 1; /* Set once the function has been instantiated and its callee lists created. */ - bool analyzed; + unsigned analyzed : 1; /* Set when function is scheduled to be assembled. */ - bool output; - /* Set when function is visible by other units. */ - bool externally_visible; + unsigned output : 1; /* Set for aliases once they got through assemble_alias. */ - bool alias; + unsigned alias : 1; /* In non-unit-at-a-time mode the function body of inline candidates is saved into clone before compiling so the function in original form can be @@ -209,21 +211,21 @@ struct cgraph_varpool_node GTY(()) /* Set when function must be output - it is externally visible or its address is taken. */ - bool needed; + unsigned needed : 1; /* Needed variables might become dead by optimization. This flag forces the variable to be output even if it appears dead otherwise. */ - bool force_output; + unsigned force_output : 1; /* Set once the variable has been instantiated and its callee lists created. */ - bool analyzed; + unsigned analyzed : 1; /* Set once it has been finalized so we consider it to be output. */ - bool finalized; + unsigned finalized : 1; /* Set when variable is scheduled to be assembled. */ - bool output; + unsigned output : 1; /* Set when function is visible by other units. */ - bool externally_visible; + unsigned externally_visible : 1; /* Set for aliases once they got through assemble_alias. */ - bool alias; + unsigned alias : 1; }; /* Every top level asm statement is put into a cgraph_asm_node. */ @@ -248,6 +250,7 @@ extern GTY(()) struct cgraph_node *cgraph_expand_queue; extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_first_unanalyzed_node; extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes_queue; +extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes; extern GTY(()) struct cgraph_asm_node *cgraph_asm_nodes; extern GTY(()) int cgraph_order; @@ -266,6 +269,7 @@ struct cgraph_edge *cgraph_create_edge (struct cgraph_node *, struct cgraph_node *cgraph_node (tree); struct cgraph_node *cgraph_node_for_asm (tree asmname); struct cgraph_edge *cgraph_edge (struct cgraph_node *, tree); +void cgraph_set_call_stmt (struct cgraph_edge *, tree); struct cgraph_local_info *cgraph_local_info (tree); struct cgraph_global_info *cgraph_global_info (tree); struct cgraph_rtl_info *cgraph_rtl_info (tree); diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 9104649ed72..cfd5a3ecf23 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1,4 +1,4 @@ -/* Callgraph based intraprocedural optimizations. +/* Callgraph based interprocedural optimizations. Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Jan Hubicka @@ -20,7 +20,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This module implements main driver of compilation process as well as - few basic intraprocedural optimizers. + few basic interprocedural optimizers. The main scope of this file is to act as an interface in between tree based frontends and the backend (and middle end) @@ -172,6 +172,10 @@ static void cgraph_mark_functions_to_output (void); static void cgraph_expand_function (struct cgraph_node *); static tree record_reference (tree *, int *, void *); static void cgraph_output_pending_asms (void); +static void cgraph_increase_alignment (void); + +/* Lists all assembled variables to be sent to debugger output later on. */ +static GTY(()) struct cgraph_varpool_node *cgraph_varpool_assembled_nodes_queue; /* Records tree nodes seen in record_reference. Simply using walk_tree_without_duplicates doesn't guarantee each node is visited @@ -198,8 +202,10 @@ decide_is_function_needed (struct cgraph_node *node, tree decl) } /* If the user told us it is used, then it must be so. */ - if (node->local.externally_visible - || lookup_attribute ("used", DECL_ATTRIBUTES (decl))) + if (node->local.externally_visible) + return true; + + if (!flag_unit_at_a_time && lookup_attribute ("used", DECL_ATTRIBUTES (decl))) return true; /* ??? If the assembler name is set by hand, it is possible to assemble @@ -222,7 +228,7 @@ decide_is_function_needed (struct cgraph_node *node, tree decl) PR24561), but don't do so for always_inline functions, functions declared inline and nested functions. These was optimized out in the original implementation and it is unclear whether we want - to change the behaviour here. */ + to change the behavior here. */ if (((TREE_PUBLIC (decl) || (!optimize && !node->local.disregard_inline_limits && !DECL_DECLARED_INLINE_P (decl) @@ -281,6 +287,10 @@ cgraph_varpool_analyze_pending_decls (void) cgraph_varpool_first_unanalyzed_node = cgraph_varpool_first_unanalyzed_node->next_needed; + /* Compute the alignment early so function body expanders are + already informed about increased alignment. */ + align_variable (decl, 0); + if (DECL_INITIAL (decl)) { visited_nodes = pointer_set_create (); @@ -413,11 +423,14 @@ cgraph_reset_node (struct cgraph_node *node) if (!flag_unit_at_a_time) { - struct cgraph_node *n; + struct cgraph_node *n, *next; - for (n = cgraph_nodes; n; n = n->next) - if (n->global.inlined_to == node) - cgraph_remove_node (n); + for (n = cgraph_nodes; n; n = next) + { + next = n->next; + if (n->global.inlined_to == node) + cgraph_remove_node (n); + } } cgraph_node_remove_callees (node); @@ -846,18 +859,7 @@ cgraph_varpool_assemble_decl (struct cgraph_varpool_node *node) && (TREE_CODE (decl) != VAR_DECL || !DECL_HAS_VALUE_EXPR_P (decl))) { assemble_variable (decl, 0, 1, 0); - /* Local static variables are never seen by check_global_declarations - so we need to output debug info by hand. */ - if (DECL_CONTEXT (decl) - && (TREE_CODE (DECL_CONTEXT (decl)) == BLOCK - || TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL) - && errorcount == 0 && sorrycount == 0) - { - timevar_push (TV_SYMOUT); - (*debug_hooks->global_decl) (decl); - timevar_pop (TV_SYMOUT); - } - return true; + return TREE_ASM_WRITTEN (decl); } return false; @@ -883,11 +885,39 @@ cgraph_varpool_assemble_pending_decls (void) cgraph_varpool_nodes_queue = cgraph_varpool_nodes_queue->next_needed; if (cgraph_varpool_assemble_decl (node)) - changed = true; - node->next_needed = NULL; + { + changed = true; + node->next_needed = cgraph_varpool_assembled_nodes_queue; + cgraph_varpool_assembled_nodes_queue = node; + node->finalized = 1; + } + else + node->next_needed = NULL; } return changed; } +/* Output all variables enqueued to be assembled. */ +static void +cgraph_varpool_output_debug_info (void) +{ + timevar_push (TV_SYMOUT); + if (errorcount == 0 && sorrycount == 0) + while (cgraph_varpool_assembled_nodes_queue) + { + struct cgraph_varpool_node *node = cgraph_varpool_assembled_nodes_queue; + + /* Local static variables are never seen by check_global_declarations + so we need to output debug info by hand. */ + if (DECL_CONTEXT (node->decl) + && (TREE_CODE (DECL_CONTEXT (node->decl)) == BLOCK + || TREE_CODE (DECL_CONTEXT (node->decl)) == FUNCTION_DECL) + && errorcount == 0 && sorrycount == 0) + (*debug_hooks->global_decl) (node->decl); + cgraph_varpool_assembled_nodes_queue = node->next_needed; + node->next_needed = 0; + } + timevar_pop (TV_SYMOUT); +} /* Output all asm statements we have stored up to be output. */ @@ -918,7 +948,8 @@ cgraph_analyze_function (struct cgraph_node *node) cgraph_create_edges (node, decl); node->local.inlinable = tree_inlinable_function_p (decl); - node->local.self_insns = estimate_num_insns (decl); + if (!flag_unit_at_a_time) + node->local.self_insns = estimate_num_insns (decl); if (node->local.inlinable) node->local.disregard_inline_limits = lang_hooks.tree_inlining.disregard_inline_limits (decl); @@ -933,15 +964,98 @@ cgraph_analyze_function (struct cgraph_node *node) current_function_decl = NULL; } +/* Look for externally_visible and used attributes and mark cgraph nodes + accordingly. + + We cannot mark the nodes at the point the attributes are processed (in + handle_*_attribute) because the copy of the declarations available at that + point may not be canonical. For example, in: + + void f(); + void f() __attribute__((used)); + + the declaration we see in handle_used_attribute will be the second + declaration -- but the front end will subsequently merge that declaration + with the original declaration and discard the second declaration. + + Furthermore, we can't mark these nodes in cgraph_finalize_function because: + + void f() {} + void f() __attribute__((externally_visible)); + + is valid. + + So, we walk the nodes at the end of the translation unit, applying the + attributes at that point. */ + +static void +process_function_and_variable_attributes (struct cgraph_node *first, + struct cgraph_varpool_node *first_var) +{ + struct cgraph_node *node; + struct cgraph_varpool_node *vnode; + + for (node = cgraph_nodes; node != first; node = node->next) + { + tree decl = node->decl; + if (lookup_attribute ("used", DECL_ATTRIBUTES (decl))) + { + mark_decl_referenced (decl); + if (node->local.finalized) + cgraph_mark_needed_node (node); + } + if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl))) + { + if (! TREE_PUBLIC (node->decl)) + warning (OPT_Wattributes, + "%J% attribute have effect only on public objects", + node->decl); + else + { + if (node->local.finalized) + cgraph_mark_needed_node (node); + node->local.externally_visible = true; + } + } + } + for (vnode = cgraph_varpool_nodes; vnode != first_var; vnode = vnode->next) + { + tree decl = vnode->decl; + if (lookup_attribute ("used", DECL_ATTRIBUTES (decl))) + { + mark_decl_referenced (decl); + if (vnode->finalized) + cgraph_varpool_mark_needed_node (vnode); + } + if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl))) + { + if (! TREE_PUBLIC (vnode->decl)) + warning (OPT_Wattributes, + "%J% attribute have effect only on public objects", + vnode->decl); + else + { + if (vnode->finalized) + cgraph_varpool_mark_needed_node (vnode); + vnode->externally_visible = true; + } + } + } +} + /* Analyze the whole compilation unit once it is parsed completely. */ void cgraph_finalize_compilation_unit (void) { - struct cgraph_node *node; + struct cgraph_node *node, *next; /* Keep track of already processed nodes when called multiple times for intermodule optimization. */ static struct cgraph_node *first_analyzed; + static struct cgraph_varpool_node *first_analyzed_var; + + if (errorcount || sorrycount) + return; finish_aliases_1 (); @@ -949,6 +1063,7 @@ cgraph_finalize_compilation_unit (void) { cgraph_output_pending_asms (); cgraph_assemble_pending_functions (); + cgraph_varpool_output_debug_info (); return; } @@ -959,6 +1074,7 @@ cgraph_finalize_compilation_unit (void) } timevar_push (TV_CGRAPH); + process_function_and_variable_attributes (first_analyzed, first_analyzed_var); cgraph_varpool_analyze_pending_decls (); if (cgraph_dump_file) { @@ -1018,9 +1134,10 @@ cgraph_finalize_compilation_unit (void) if (cgraph_dump_file) fprintf (cgraph_dump_file, "\nReclaiming functions:"); - for (node = cgraph_nodes; node != first_analyzed; node = node->next) + for (node = cgraph_nodes; node != first_analyzed; node = next) { tree decl = node->decl; + next = node->next; if (node->local.finalized && !DECL_SAVED_TREE (decl)) cgraph_reset_node (node); @@ -1048,6 +1165,7 @@ cgraph_finalize_compilation_unit (void) fflush (stderr); } first_analyzed = cgraph_nodes; + first_analyzed_var = cgraph_varpool_nodes; ggc_collect (); timevar_pop (TV_CGRAPH); } @@ -1395,6 +1513,9 @@ ipa_passes (void) void cgraph_optimize (void) { + if (errorcount || sorrycount) + return; + #ifdef ENABLE_CHECKING verify_cgraph (); #endif @@ -1402,6 +1523,7 @@ cgraph_optimize (void) { cgraph_output_pending_asms (); cgraph_varpool_assemble_pending_decls (); + cgraph_varpool_output_debug_info (); return; } @@ -1432,6 +1554,7 @@ cgraph_optimize (void) /* This pass remove bodies of extern inline functions we never inlined. Do this later so other IPA passes see what is really going on. */ cgraph_remove_unreachable_nodes (false, dump_file); + cgraph_increase_alignment (); cgraph_global_info_ready = true; if (cgraph_dump_file) { @@ -1460,6 +1583,7 @@ cgraph_optimize (void) cgraph_varpool_remove_unreferenced_decls (); cgraph_varpool_assemble_pending_decls (); + cgraph_varpool_output_debug_info (); } if (cgraph_dump_file) @@ -1472,7 +1596,6 @@ cgraph_optimize (void) /* Double check that all inline clones are gone and that all function bodies have been released from memory. */ if (flag_unit_at_a_time - && !dump_enabled_p (TDI_tree_all) && !(sorrycount || errorcount)) { struct cgraph_node *node; @@ -1492,6 +1615,51 @@ cgraph_optimize (void) #endif } +/* Increase alignment of global arrays to improve vectorization potential. + TODO: + - Consider also structs that have an array field. + - Use ipa analysis to prune arrays that can't be vectorized? + This should involve global alignment analysis and in the future also + array padding. */ + +static void +cgraph_increase_alignment (void) +{ + if (flag_section_anchors && flag_tree_vectorize) + { + struct cgraph_varpool_node *vnode; + + /* Increase the alignment of all global arrays for vectorization. */ + for (vnode = cgraph_varpool_nodes_queue; + vnode; + vnode = vnode->next_needed) + { + tree vectype, decl = vnode->decl; + unsigned int alignment; + + if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE) + continue; + vectype = get_vectype_for_scalar_type (TREE_TYPE (TREE_TYPE (decl))); + if (!vectype) + continue; + alignment = TYPE_ALIGN (vectype); + if (DECL_ALIGN (decl) >= alignment) + continue; + + if (vect_can_force_dr_alignment_p (decl, alignment)) + { + DECL_ALIGN (decl) = TYPE_ALIGN (vectype); + DECL_USER_ALIGN (decl) = 1; + if (cgraph_dump_file) + { + fprintf (cgraph_dump_file, "Increasing alignment of decl: "); + print_generic_expr (cgraph_dump_file, decl, TDF_SLIM); + } + } + } + } +} + /* Generate and emit a static constructor or destructor. WHICH must be one of 'I' or 'D'. BODY should be a STATEMENT_LIST containing GENERIC statements. */ @@ -1753,3 +1921,4 @@ save_inline_function_body (struct cgraph_node *node) return first_clone; } +#include "gt-cgraphunit.h" diff --git a/gcc/combine.c b/gcc/combine.c index 727e625ae2c..0f4ea02970f 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -6860,7 +6860,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, nonzero = nonzero_bits (x, mode); /* If none of the bits in X are needed, return a zero. */ - if (! just_select && (nonzero & mask) == 0) + if (!just_select && (nonzero & mask) == 0 && !side_effects_p (x)) x = const0_rtx; /* If X is a CONST_INT, return a new one. Do this here since the @@ -8637,14 +8637,14 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, == 0)) code = LSHIFTRT; - if (code == LSHIFTRT - && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT - && !(nonzero_bits (varop, shift_mode) >> count)) - varop = const0_rtx; - if (code == ASHIFT - && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT - && !((nonzero_bits (varop, shift_mode) << count) - & GET_MODE_MASK (shift_mode))) + if (((code == LSHIFTRT + && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT + && !(nonzero_bits (varop, shift_mode) >> count)) + || (code == ASHIFT + && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT + && !((nonzero_bits (varop, shift_mode) << count) + & GET_MODE_MASK (shift_mode)))) + && !side_effects_p (varop)) varop = const0_rtx; switch (GET_CODE (varop)) @@ -9229,9 +9229,12 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, if (outer_op == AND) x = simplify_and_const_int (NULL_RTX, result_mode, x, outer_const); else if (outer_op == SET) - /* This means that we have determined that the result is - equivalent to a constant. This should be rare. */ - x = GEN_INT (outer_const); + { + /* This means that we have determined that the result is + equivalent to a constant. This should be rare. */ + if (!side_effects_p (x)) + x = GEN_INT (outer_const); + } else if (GET_RTX_CLASS (outer_op) == RTX_UNARY) x = simplify_gen_unary (outer_op, result_mode, x, result_mode); else diff --git a/gcc/common.opt b/gcc/common.opt index 3b5cc20e34a..907c83165c2 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -381,9 +381,13 @@ fdump- Common Joined RejectNegative -fdump- Dump various compiler internals to a file +fdump-noaddr +Common Report Var(flag_dump_noaddr) +Suppress output of addresses in debugging dumps + fdump-unnumbered Common Report Var(flag_dump_unnumbered) VarExists -Suppress output of instruction numbers and line number notes in debugging dumps +Suppress output of instruction numbers, line number notes and addresses in debugging dumps fearly-inlining Common Report Var(flag_early_inlining) Init(1) diff --git a/gcc/config.gcc b/gcc/config.gcc index 7608d042c07..efa6c8d867d 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -301,7 +301,7 @@ powerpc*-*-*) extra_headers="ppc-asm.h altivec.h spe.h" need_64bit_hwint=yes case x$with_cpu in - xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345]|xrs64a) + xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456]|xrs64a) cpu_is_64bit=yes ;; esac @@ -438,7 +438,7 @@ case ${target} in ;; esac ;; - *) + *) echo 'Unknown thread configuration for FreeBSD' exit 1 ;; @@ -693,13 +693,13 @@ arm*-*-netbsd*) use_collect2=yes ;; arm*-*-linux*) # ARM GNU/Linux with ELF - tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" + tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" tmake_file="${tmake_file} t-linux arm/t-arm" case ${target} in arm*-*-linux-*eabi) tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h" tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" - # The BPABI long long divmod functions return a 128-bit value in + # The BPABI long long divmod functions return a 128-bit value in # registers r0-r3. Correctly modeling that requires the use of # TImode. need_64bit_hwint=yes @@ -721,7 +721,7 @@ arm*-*-ecos-elf) tmake_file="arm/t-arm arm/t-arm-elf" ;; arm*-*-eabi* | arm*-*-symbianelf* ) - # The BPABI long long divmod functions return a 128-bit value in + # The BPABI long long divmod functions return a 128-bit value in # registers r0-r3. Correctly modeling that requires the use of # TImode. need_64bit_hwint=yes @@ -965,7 +965,7 @@ hppa*64*-*-hpux11*) libgcc_stub.a" case x${enable_threads} in xyes | xposix ) - thread_file=posix + thread_file=posix ;; esac gas=yes @@ -994,14 +994,14 @@ hppa[12]*-*-hpux11*) fi case x${enable_threads} in xyes | xposix ) - thread_file=posix + thread_file=posix ;; esac use_collect2=yes gas=yes ;; i[34567]86-*-darwin*) - # All the configuration is presently done generically. + need_64bit_hwint=yes ;; i[34567]86-*-elf*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h" @@ -1164,6 +1164,9 @@ i[34567]86-*-solaris2*) else tmake_file="$tmake_file t-slibgcc-sld" fi + if test x$gas = xyes; then + tm_file="usegas.h ${tm_file}" + fi case ${target} in *-*-solaris2.[789] | *-*-solaris2.1[0-9]*) tm_file="$tm_file tm-dwarf2.h" @@ -1175,7 +1178,21 @@ i[34567]86-*-solaris2*) tm_defines="${tm_defines} TARGET_BI_ARCH=1" tmake_file="$tmake_file i386/t-sol2-10" need_64bit_hwint=yes - # Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as + # FIXME: -m64 for i[34567]86-*-* should be allowed just + # like -m32 for x86_64-*-*. + case X"${with_cpu}" in + Xgeneric|Xnocona|Xx86-64|Xk8|Xopteron|Xathlon64|Xathlon-fx) + ;; + X) + with_cpu=generic + ;; + *) + echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 + echo "generic nocona x86-64 k8 opteron athlon64 athlon-fx" 1>&2 + exit 1 + ;; + esac + # Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as # part of the base system. extra_parts="gmon.o crtbegin.o crtend.o" ;; @@ -1258,7 +1275,10 @@ i[34567]86-*-mingw32*) extra_objs="winnt.o winnt-stubs.o" cxx_target_objs=winnt-cxx.o case ${enable_threads} in - "" | yes | win32) thread_file='win32' ;; + "" | yes | win32) + thread_file='win32' + tmake_file="${tmake_file} i386/t-gthr-win32" + ;; esac case ${target} in *mingw32crt*) @@ -1520,7 +1540,7 @@ mips*-*-openbsd*) target_cpu_default="MASK_ABICALLS" tm_file="mips/mips.h openbsd.h mips/openbsd.h mips/sdb.h" case ${target} in - mips*el-*-openbsd*) + mips*el-*-openbsd*) tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=0";; *) tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=MASK_BIG_ENDIAN";; esac @@ -1553,7 +1573,7 @@ mipsisa64sr71k-*-elf*) ;; mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*) tm_file="elfos.h ${tm_file} mips/elf.h" - tmake_file=mips/t-elf + tmake_file="mips/t-elf mips/t-sb1" target_cpu_default="MASK_64BIT|MASK_FLOAT64" tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sb1\\\" MIPS_ABI_DEFAULT=ABI_O64" use_fixproto=yes @@ -1668,7 +1688,7 @@ powerpc-*-darwin*) extra_parts="crt2.o" case ${target} in *-darwin1[0-9]* | *-darwin[8-9]*) - tmake_file="${tmake_file} rs6000/t-darwin8" + tmake_file="${tmake_file} rs6000/t-darwin8" tm_file="${tm_file} rs6000/darwin8.h" ;; *-darwin7*) @@ -1981,7 +2001,7 @@ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ tm_file="sh/symbian-pre.h sh/little.h ${tm_file} sh/symbian-post.h" extra_objs="symbian.o" extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o crtbeginS.o crtendS.o" - ;; + ;; esac # sed el/eb endian suffixes away to avoid confusion with sh[23]e case `echo ${target} | sed 's/e[lb]-/-/'` in @@ -2808,7 +2828,7 @@ case "${target}" in eval "with_$which=405" ;; "" | common \ - | power | power[2345] | powerpc | powerpc64 \ + | power | power[23456] | powerpc | powerpc64 \ | rios | rios1 | rios2 | rsc | rsc1 | rs64a \ | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \ | 601 | 602 | 603 | 603e | ec603e | 604 \ diff --git a/gcc/config.in b/gcc/config.in index 98e34388dff..47ba85080c2 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -148,6 +148,12 @@ #endif +/* mcontext_t fields start with __ */ +#ifndef USED_FOR_TARGET +#undef HAS_MCONTEXT_T_UNDERSCORES +#endif + + /* Define to 1 if you have the `alphasort' function. */ #ifndef USED_FOR_TARGET #undef HAVE_ALPHASORT @@ -197,6 +203,12 @@ #endif +/* Define if your assembler supports the ffreep mnemonic. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_IX86_FFREEP +#endif + + /* Define if your assembler supports the lituse_jsrdirect relocation. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_JSRDIRECT_RELOCS @@ -568,6 +580,13 @@ #endif +/* Define to 1 if we found a declaration for 'sigaltstack', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#undef HAVE_DECL_SIGALTSTACK +#endif + + /* Define to 1 if we found a declaration for 'snprintf', otherwise define to 0. */ #ifndef USED_FOR_TARGET diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md index a035fffd841..6f86324f417 100644 --- a/gcc/config/alpha/predicates.md +++ b/gcc/config/alpha/predicates.md @@ -1,5 +1,5 @@ ;; Predicate definitions for DEC Alpha. -;; Copyright (C) 2004, 2005 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. ;; ;; This file is part of GCC. ;; @@ -366,7 +366,8 @@ return (SYMBOL_REF_LOCAL_P (op) && SYMBOL_REF_SMALL_P (op) - && SYMBOL_REF_TLS_MODEL (op) == 0); + && !SYMBOL_REF_WEAK (op) + && !SYMBOL_REF_TLS_MODEL (op)); }) ;; Return true if OP is a SYMBOL_REF or CONST referencing a variable @@ -382,7 +383,8 @@ if (GET_CODE (op) != SYMBOL_REF) return 0; - return !SYMBOL_REF_LOCAL_P (op) && !SYMBOL_REF_TLS_MODEL (op); + return ((!SYMBOL_REF_LOCAL_P (op) || SYMBOL_REF_WEAK (op)) + && !SYMBOL_REF_TLS_MODEL (op)); }) ;; Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref, @@ -540,7 +542,7 @@ ;; Similarly, but with swapped operands. (define_predicate "alpha_swapped_comparison_operator" - (match_code "eq,ge,gt,gtu,gtu")) + (match_code "eq,ge,gt,gtu")) ;; Return 1 if OP is a valid Alpha comparison operator against zero ;; for "bcc" style instructions. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 66d091a67bb..a36c0d79176 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -2802,7 +2802,7 @@ arm_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED, /* Encode the current state of the #pragma [no_]long_calls. */ typedef enum { - OFF, /* No #pramgma [no_]long_calls is in effect. */ + OFF, /* No #pragma [no_]long_calls is in effect. */ LONG, /* #pragma long_calls is in effect. */ SHORT /* #pragma no_long_calls is in effect. */ } arm_pragma_enum; @@ -11013,11 +11013,19 @@ arm_print_operand (FILE *stream, rtx x, int code) case 'S': { HOST_WIDE_INT val; - const char * shift = shift_op (x, &val); + const char *shift; + + if (!shift_operator (x, SImode)) + { + output_operand_lossage ("invalid shift operand"); + break; + } + + shift = shift_op (x, &val); if (shift) { - fprintf (stream, ", %s ", shift_op (x, &val)); + fprintf (stream, ", %s ", shift); if (val == -1) arm_print_operand (stream, XEXP (x, 1), 0); else diff --git a/gcc/config/arm/pr-support.c b/gcc/config/arm/pr-support.c index 072b4a98d5c..0e750bf3e09 100644 --- a/gcc/config/arm/pr-support.c +++ b/gcc/config/arm/pr-support.c @@ -224,7 +224,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws) { /* Pop VFP registers with fldmx. */ op = next_unwind_byte (uws); - op = ((op & 0xf0) << 12) | (op & 0xf); + op = ((op & 0xf0) << 12) | ((op & 0xf) + 1); if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_VFPX) != _UVRSR_OK) return _URC_FAILURE; @@ -253,7 +253,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws) { /* Pop iWMMXt D registers. */ op = next_unwind_byte (uws); - op = ((op & 0xf0) << 12) | (op & 0xf); + op = ((op & 0xf0) << 12) | ((op & 0xf) + 1); if (_Unwind_VRS_Pop (context, _UVRSC_WMMXD, op, _UVRSD_UINT64) != _UVRSR_OK) return _URC_FAILURE; @@ -284,7 +284,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws) { /* Pop FPA registers. */ op = next_unwind_byte (uws); - op = ((op & 0xf0) << 12) | (op & 0xf); + op = ((op & 0xf0) << 12) | ((op & 0xf) + 1); if (_Unwind_VRS_Pop (context, _UVRSC_FPA, op, _UVRSD_FPAX) != _UVRSR_OK) return _URC_FAILURE; @@ -294,7 +294,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws) { /* Pop VFP registers with fldmd. */ op = next_unwind_byte (uws); - op = ((op & 0xf0) << 12) | (op & 0xf); + op = ((op & 0xf0) << 12) | ((op & 0xf) + 1); if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_DOUBLE) != _UVRSR_OK) return _URC_FAILURE; diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 2f981dd9738..3e8f63385be 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -126,20 +126,25 @@ int avr_enhanced_p = 0; /* Assembler only. */ int avr_asm_only_p = 0; +/* Core have 'MOVW' and 'LPM Rx,Z' instructions. */ +int avr_have_movw_lpmx_p = 0; + struct base_arch_s { int asm_only; int enhanced; int mega; + int have_movw_lpmx; const char *const macro; }; static const struct base_arch_s avr_arch_types[] = { - { 1, 0, 0, NULL }, /* unknown device specified */ - { 1, 0, 0, "__AVR_ARCH__=1" }, - { 0, 0, 0, "__AVR_ARCH__=2" }, - { 0, 0, 1, "__AVR_ARCH__=3" }, - { 0, 1, 0, "__AVR_ARCH__=4" }, - { 0, 1, 1, "__AVR_ARCH__=5" } + { 1, 0, 0, 0, NULL }, /* unknown device specified */ + { 1, 0, 0, 0, "__AVR_ARCH__=1" }, + { 0, 0, 0, 0, "__AVR_ARCH__=2" }, + { 0, 0, 1, 0, "__AVR_ARCH__=3" }, + { 0, 1, 0, 1, "__AVR_ARCH__=4" }, + { 0, 1, 1, 1, "__AVR_ARCH__=5" }, + { 0, 0, 0, 1, "__AVR_ARCH__=25"} }; struct mcu_type_s { @@ -173,18 +178,19 @@ static const struct mcu_type_s avr_mcu_types[] = { { "at90c8534", 2, "__AVR_AT90C8534__" }, { "at90s8535", 2, "__AVR_AT90S8535__" }, /* Classic + MOVW, <= 8K. */ - { "attiny13", 2, "__AVR_ATtiny13__" }, - { "attiny2313", 2, "__AVR_ATtiny2313__" }, - { "attiny24", 2, "__AVR_ATtiny24__" }, - { "attiny44", 2, "__AVR_ATtiny44__" }, - { "attiny84", 2, "__AVR_ATtiny84__" }, - { "attiny25", 2, "__AVR_ATtiny25__" }, - { "attiny45", 2, "__AVR_ATtiny45__" }, - { "attiny85", 2, "__AVR_ATtiny85__" }, - { "attiny261", 2, "__AVR_ATtiny261__" }, - { "attiny461", 2, "__AVR_ATtiny461__" }, - { "attiny861", 2, "__AVR_ATtiny861__" }, - { "at86rf401", 2, "__AVR_AT86RF401__" }, + { "avr25", 6, NULL }, + { "attiny13", 6, "__AVR_ATtiny13__" }, + { "attiny2313", 6, "__AVR_ATtiny2313__" }, + { "attiny24", 6, "__AVR_ATtiny24__" }, + { "attiny44", 6, "__AVR_ATtiny44__" }, + { "attiny84", 6, "__AVR_ATtiny84__" }, + { "attiny25", 6, "__AVR_ATtiny25__" }, + { "attiny45", 6, "__AVR_ATtiny45__" }, + { "attiny85", 6, "__AVR_ATtiny85__" }, + { "attiny261", 6, "__AVR_ATtiny261__" }, + { "attiny461", 6, "__AVR_ATtiny461__" }, + { "attiny861", 6, "__AVR_ATtiny861__" }, + { "at86rf401", 6, "__AVR_AT86RF401__" }, /* Classic, > 8K. */ { "avr3", 3, NULL }, { "atmega103", 3, "__AVR_ATmega103__" }, @@ -199,6 +205,7 @@ static const struct mcu_type_s avr_mcu_types[] = { { "atmega88", 4, "__AVR_ATmega88__" }, { "atmega8515", 4, "__AVR_ATmega8515__" }, { "atmega8535", 4, "__AVR_ATmega8535__" }, + { "at90pwm1", 4, "__AVR_AT90PWM1__" }, { "at90pwm2", 4, "__AVR_AT90PWM2__" }, { "at90pwm3", 4, "__AVR_AT90PWM3__" }, /* Enhanced, > 8K. */ @@ -319,6 +326,7 @@ avr_override_options (void) avr_asm_only_p = base->asm_only; avr_enhanced_p = base->enhanced; avr_mega_p = base->mega; + avr_have_movw_lpmx_p = base->have_movw_lpmx; avr_base_arch_macro = base->macro; avr_extra_arch_macro = t->macro; @@ -1656,7 +1664,7 @@ output_movhi (rtx insn, rtx operands[], int *l) AS2 (in,%B0,__SP_H__)); } - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) { *l = 1; return (AS2 (movw,%0,%1)); @@ -2325,7 +2333,7 @@ output_movsisf(rtx insn, rtx operands[], int *l) { if (true_regnum (dest) > true_regnum (src)) { - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) { *l = 2; return (AS2 (movw,%C0,%C1) CR_TAB @@ -2339,7 +2347,7 @@ output_movsisf(rtx insn, rtx operands[], int *l) } else { - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) { *l = 2; return (AS2 (movw,%A0,%A1) CR_TAB @@ -2366,7 +2374,7 @@ output_movsisf(rtx insn, rtx operands[], int *l) if (GET_CODE (src) == CONST_INT) { const char *const clr_op0 = - AVR_ENHANCED ? (AS1 (clr,%A0) CR_TAB + AVR_HAVE_MOVW ? (AS1 (clr,%A0) CR_TAB AS1 (clr,%B0) CR_TAB AS2 (movw,%C0,%A0)) : (AS1 (clr,%A0) CR_TAB @@ -2376,20 +2384,20 @@ output_movsisf(rtx insn, rtx operands[], int *l) if (src == const0_rtx) /* mov r,L */ { - *l = AVR_ENHANCED ? 3 : 4; + *l = AVR_HAVE_MOVW ? 3 : 4; return clr_op0; } else if (src == const1_rtx) { if (!real_l) output_asm_insn (clr_op0, operands); - *l = AVR_ENHANCED ? 4 : 5; + *l = AVR_HAVE_MOVW ? 4 : 5; return AS1 (inc,%A0); } else if (src == constm1_rtx) { /* Immediate constants -1 to any register */ - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) { *l = 4; return (AS1 (clr,%A0) CR_TAB @@ -2410,7 +2418,7 @@ output_movsisf(rtx insn, rtx operands[], int *l) if (bit_nr >= 0) { - *l = AVR_ENHANCED ? 5 : 6; + *l = AVR_HAVE_MOVW ? 5 : 6; if (!real_l) { output_asm_insn (clr_op0, operands); @@ -3301,7 +3309,7 @@ ashlsi3_out (rtx insn, rtx operands[], int *len) if (INTVAL (operands[2]) < 32) break; - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) return *len = 3, (AS1 (clr,%D0) CR_TAB AS1 (clr,%C0) CR_TAB AS2 (movw,%A0,%C0)); @@ -3338,7 +3346,7 @@ ashlsi3_out (rtx insn, rtx operands[], int *len) int reg0 = true_regnum (operands[0]); int reg1 = true_regnum (operands[1]); *len = 4; - if (AVR_ENHANCED && (reg0 + 2 != reg1)) + if (AVR_HAVE_MOVW && (reg0 + 2 != reg1)) { *len = 3; return (AS2 (movw,%C0,%A1) CR_TAB @@ -3685,7 +3693,7 @@ ashrsi3_out (rtx insn, rtx operands[], int *len) int reg0 = true_regnum (operands[0]); int reg1 = true_regnum (operands[1]); *len=6; - if (AVR_ENHANCED && (reg0 != reg1 + 2)) + if (AVR_HAVE_MOVW && (reg0 != reg1 + 2)) { *len = 5; return (AS2 (movw,%A0,%C1) CR_TAB @@ -3737,7 +3745,7 @@ ashrsi3_out (rtx insn, rtx operands[], int *len) /* fall through */ case 31: - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) return *len = 4, (AS1 (lsl,%D0) CR_TAB AS2 (sbc,%A0,%A0) CR_TAB AS2 (mov,%B0,%A0) CR_TAB @@ -4133,7 +4141,7 @@ lshrsi3_out (rtx insn, rtx operands[], int *len) if (INTVAL (operands[2]) < 32) break; - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) return *len = 3, (AS1 (clr,%D0) CR_TAB AS1 (clr,%C0) CR_TAB AS2 (movw,%A0,%C0)); @@ -4167,7 +4175,7 @@ lshrsi3_out (rtx insn, rtx operands[], int *len) int reg0 = true_regnum (operands[0]); int reg1 = true_regnum (operands[1]); *len = 4; - if (AVR_ENHANCED && (reg0 != reg1 + 2)) + if (AVR_HAVE_MOVW && (reg0 != reg1 + 2)) { *len = 3; return (AS2 (movw,%A0,%C1) CR_TAB @@ -4813,7 +4821,7 @@ avr_file_start (void) default_file_start (); - fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name); +/* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/ fputs ("__SREG__ = 0x3f\n" "__SP_H__ = 0x3e\n" "__SP_L__ = 0x3d\n", asm_out_file); @@ -4941,7 +4949,7 @@ avr_operand_rtx_cost (rtx x, enum machine_mode mode, enum rtx_code outer) case, *TOTAL contains the cost result. */ static bool -avr_rtx_costs (rtx x, int code, int outer_code, int *total) +avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) { enum machine_mode mode = GET_MODE (x); HOST_WIDE_INT val; @@ -5301,7 +5309,7 @@ avr_rtx_costs (rtx x, int code, int outer_code, int *total) *total = COSTS_N_INSNS (optimize_size ? 7 : 8); break; case 31: - *total = COSTS_N_INSNS (AVR_ENHANCED ? 4 : 5); + *total = COSTS_N_INSNS (AVR_HAVE_MOVW ? 4 : 5); break; default: *total = COSTS_N_INSNS (optimize_size ? 7 : 113); diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index 186cfc6834e..2285e57cf1f 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -31,6 +31,10 @@ Boston, MA 02110-1301, USA. */ builtin_define (avr_base_arch_macro); \ if (avr_extra_arch_macro) \ builtin_define (avr_extra_arch_macro); \ + if (avr_have_movw_lpmx_p) \ + builtin_define ("__AVR_HAVE_MOVW__"); \ + if (avr_have_movw_lpmx_p) \ + builtin_define ("__AVR_HAVE_LPMX__"); \ if (avr_asm_only_p) \ builtin_define ("__AVR_ASM_ONLY__"); \ if (avr_enhanced_p) \ @@ -47,12 +51,14 @@ extern const char *avr_extra_arch_macro; extern int avr_mega_p; extern int avr_enhanced_p; extern int avr_asm_only_p; +extern int avr_have_movw_lpmx_p; #ifndef IN_LIBGCC2 extern GTY(()) section *progmem_section; #endif #define AVR_MEGA (avr_mega_p && !TARGET_SHORT_CALLS) #define AVR_ENHANCED (avr_enhanced_p) +#define AVR_HAVE_MOVW (avr_have_movw_lpmx_p) #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)"); @@ -591,6 +597,8 @@ do { \ /* Globalizing directive for a label. */ #define GLOBAL_ASM_OP ".global\t" +#define SET_ASM_OP "\t.set\t" + #define ASM_WEAKEN_LABEL(FILE, NAME) \ do \ { \ @@ -624,7 +632,7 @@ sprintf (STRING, "*.%s%lu", PREFIX, (unsigned long)(NUM)) #define USER_LABEL_PREFIX "" -#define ASSEMBLER_DIALECT AVR_ENHANCED +#define ASSEMBLER_DIALECT AVR_HAVE_MOVW #define ASM_OUTPUT_REG_PUSH(STREAM, REGNO) \ { \ @@ -716,7 +724,8 @@ extern int avr_case_values_threshold; /* A C string constant that tells the GCC drvier program options to pass to `cc1plus'. */ -#define ASM_SPEC "%{mmcu=*:-mmcu=%*}" +#define ASM_SPEC "%{mmcu=avr25:-mmcu=avr2;\ +mmcu=*:-mmcu=%*}" #define LINK_SPEC " %{!mmcu*:-m avr2}\ %{mmcu=at90s1200|\ @@ -744,6 +753,7 @@ extern int avr_case_values_threshold; mmcu=at76*:-m avr3}\ %{mmcu=atmega8*|\ mmcu=atmega48|\ + mmcu=at90pwm1|\ mmcu=at90pwm2|\ mmcu=at90pwm3:-m avr4}\ %{mmcu=atmega16*|\ @@ -814,7 +824,7 @@ extern int avr_case_values_threshold; %{mmcu=at90s8535:crts8535.o%s} \ %{mmcu=at86rf401:crt86401.o%s} \ %{mmcu=attiny13:crttn13.o%s} \ -%{mmcu=attiny2313:crttn2313.o%s} \ +%{mmcu=attiny2313|mmcu=avr25:crttn2313.o%s} \ %{mmcu=attiny24:crttn24.o%s} \ %{mmcu=attiny44:crttn44.o%s} \ %{mmcu=attiny84:crttn84.o%s} \ @@ -834,6 +844,7 @@ extern int avr_case_values_threshold; %{mmcu=atmega88:crtm88.o%s} \ %{mmcu=atmega8515:crtm8515.o%s} \ %{mmcu=atmega8535:crtm8535.o%s} \ +%{mmcu=at90pwm1:crt90pwm1.o%s} \ %{mmcu=at90pwm2:crt90pwm2.o%s} \ %{mmcu=at90pwm3:crt90pwm3.o%s} \ %{mmcu=atmega16:crtm16.o%s} \ diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 97a000d5bb5..35b86cc014d 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -57,8 +57,8 @@ (define_attr "type" "branch,branch1,arith,xcall" (const_string "arith")) -(define_attr "mcu_enhanced" "yes,no" - (const (if_then_else (symbol_ref "AVR_ENHANCED") +(define_attr "mcu_have_movw" "yes,no" + (const (if_then_else (symbol_ref "AVR_HAVE_MOVW") (const_string "yes") (const_string "no")))) @@ -1455,7 +1455,7 @@ [(set_attr_alternative "length" [(const_int 7) (const_int 8) - (if_then_else (eq_attr "mcu_enhanced" "yes") + (if_then_else (eq_attr "mcu_have_movw" "yes") (const_int 7) (const_int 8))]) (set_attr "cc" "set_czn,set_n,set_czn")]) @@ -1533,7 +1533,7 @@ {mov %A0,%A1\;mov %B0,%B1|movw %A0,%A1}\;clr %C0\;sbrc %B0,7\;com %C0\;mov %D0,%C0" [(set_attr_alternative "length" [(const_int 4) - (if_then_else (eq_attr "mcu_enhanced" "yes") + (if_then_else (eq_attr "mcu_have_movw" "yes") (const_int 5) (const_int 6))]) (set_attr "cc" "set_n,set_n")]) @@ -1570,7 +1570,7 @@ {mov %A0,%A1\;mov %B0,%B1|movw %A0,%A1}\;clr %C0\;clr %D0" [(set_attr_alternative "length" [(const_int 2) - (if_then_else (eq_attr "mcu_enhanced" "yes") + (if_then_else (eq_attr "mcu_have_movw" "yes") (const_int 3) (const_int 4))]) (set_attr "cc" "set_n,set_n")]) @@ -2104,7 +2104,7 @@ return \"icall\"; else if (which_alternative==1) { - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) return (AS2 (movw, r30, %0) CR_TAB \"icall\"); else @@ -2121,7 +2121,7 @@ [(set_attr "cc" "clobber,clobber,clobber,clobber") (set_attr_alternative "length" [(const_int 1) - (if_then_else (eq_attr "mcu_enhanced" "yes") + (if_then_else (eq_attr "mcu_have_movw" "yes") (const_int 2) (const_int 3)) (if_then_else (eq_attr "mcu_mega" "yes") @@ -2141,7 +2141,7 @@ return \"icall\"; else if (which_alternative==1) { - if (AVR_ENHANCED) + if (AVR_HAVE_MOVW) return (AS2 (movw, r30, %1) CR_TAB \"icall\"); else @@ -2158,7 +2158,7 @@ [(set_attr "cc" "clobber,clobber,clobber,clobber") (set_attr_alternative "length" [(const_int 1) - (if_then_else (eq_attr "mcu_enhanced" "yes") + (if_then_else (eq_attr "mcu_have_movw" "yes") (const_int 2) (const_int 3)) (if_then_else (eq_attr "mcu_mega" "yes") diff --git a/gcc/config/avr/libgcc.S b/gcc/config/avr/libgcc.S index b5ef3376e0b..d542bc8e349 100644 --- a/gcc/config/avr/libgcc.S +++ b/gcc/config/avr/libgcc.S @@ -40,7 +40,7 @@ Boston, MA 02110-1301, USA. */ .section .text.libgcc, "ax", @progbits .macro mov_l r_dest, r_src -#if defined (__AVR_ENHANCED__) +#if defined (__AVR_HAVE_MOVW__) movw \r_dest, \r_src #else mov \r_dest, \r_src @@ -48,7 +48,7 @@ Boston, MA 02110-1301, USA. */ .endm .macro mov_h r_dest, r_src -#if defined (__AVR_ENHANCED__) +#if defined (__AVR_HAVE_MOVW__) ; empty #else mov \r_dest, \r_src @@ -276,10 +276,10 @@ __mulsi3_skip1: cpc r_arg1H,r_arg1L brne __mulsi3_loop ; exit if multiplier = 0 __mulsi3_exit: - mov r_arg1HH,r_resHH ; result to return register - mov r_arg1HL,r_resHL - mov r_arg1H,r_resH - mov r_arg1L,r_resL + mov_h r_arg1HH,r_resHH ; result to return register + mov_l r_arg1HL,r_resHL + mov_h r_arg1H,r_resH + mov_l r_arg1L,r_resL ret #endif /* !defined (__AVR_ENHANCED__) */ #undef r_arg1L @@ -698,7 +698,7 @@ __do_copy_data: ldi r31, hi8(__data_load_start) rjmp .do_copy_data_start .do_copy_data_loop: -#if defined (__AVR_ENHANCED__) +#if defined (__AVR_HAVE_LPMX__) lpm r0, Z+ #else lpm diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr index a8fb8e9c416..09cdc0fb526 100644 --- a/gcc/config/avr/t-avr +++ b/gcc/config/avr/t-avr @@ -37,11 +37,23 @@ fp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/avr/t-avr FPBIT = fp-bit.c -MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr3/mmcu=avr4/mmcu=avr5 -MULTILIB_DIRNAMES = avr2 avr3 avr4 avr5 +MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr4/mmcu=avr5 +MULTILIB_DIRNAMES = avr2 avr25 avr3 avr4 avr5 # The many avr2 matches are not listed here - this is the default. MULTILIB_MATCHES = \ + mmcu?avr25=mmcu?attiny13 \ + mmcu?avr25=mmcu?attiny2313 \ + mmcu?avr25=mmcu?attiny24 \ + mmcu?avr25=mmcu?attiny44 \ + mmcu?avr25=mmcu?attiny84 \ + mmcu?avr25=mmcu?attiny25 \ + mmcu?avr25=mmcu?attiny45 \ + mmcu?avr25=mmcu?attiny85 \ + mmcu?avr25=mmcu?attiny261 \ + mmcu?avr25=mmcu?attiny461 \ + mmcu?avr25=mmcu?attiny861 \ + mmcu?avr25=mmcu?at86rf401 \ mmcu?avr3=mmcu?atmega103 \ mmcu?avr3=mmcu?atmega603 \ mmcu?avr3=mmcu?at43usb320 \ @@ -52,6 +64,7 @@ MULTILIB_MATCHES = \ mmcu?avr4=mmcu?atmega8515 \ mmcu?avr4=mmcu?atmega8535 \ mmcu?avr4=mmcu?atmega88 \ + mmcu?avr4=mmcu?at90pwm1 \ mmcu?avr4=mmcu?at90pwm2 \ mmcu?avr4=mmcu?at90pwm3 \ mmcu?avr5=mmcu?atmega16 \ diff --git a/gcc/config/bfin/bfin-protos.h b/gcc/config/bfin/bfin-protos.h index 4d586acb96e..bbd1eeb7aa9 100644 --- a/gcc/config/bfin/bfin-protos.h +++ b/gcc/config/bfin/bfin-protos.h @@ -83,6 +83,7 @@ extern void output_push_multiple (rtx, rtx *); extern void output_pop_multiple (rtx, rtx *); extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int); extern rtx bfin_return_addr_rtx (int); +extern void bfin_hardware_loop (void); #undef Mmode #endif diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index c7477113c4a..662b9e853d8 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -51,6 +51,14 @@ #include "bfin-protos.h" #include "tm-preds.h" #include "gt-bfin.h" +#include "basic-block.h" + +/* A C structure for machine-specific, per-function data. + This is added to the cfun structure. */ +struct machine_function GTY(()) +{ + int has_hardware_loops; +}; /* Test and compare insns in bfin.md store the information needed to generate branch and scc insns here. */ @@ -129,7 +137,7 @@ static e_funkind funkind (tree funtype) necessary. PICREG is the register holding the pointer to the PIC offset table. */ -rtx +static rtx legitimize_pic_address (rtx orig, rtx reg, rtx picreg) { rtx addr = orig; @@ -141,26 +149,30 @@ legitimize_pic_address (rtx orig, rtx reg, rtx picreg) reg = new = orig; else { - if (reg == 0) - { - gcc_assert (!no_new_pseudos); - reg = gen_reg_rtx (Pmode); - } + int unspec; + rtx tmp; - if (flag_pic == 2) + if (TARGET_ID_SHARED_LIBRARY) + unspec = UNSPEC_MOVE_PIC; + else if (GET_CODE (addr) == SYMBOL_REF + && SYMBOL_REF_FUNCTION_P (addr)) { - emit_insn (gen_movsi_high_pic (reg, addr)); - emit_insn (gen_movsi_low_pic (reg, reg, addr)); - emit_insn (gen_addsi3 (reg, reg, picreg)); - new = gen_const_mem (Pmode, reg); + unspec = UNSPEC_FUNCDESC_GOT17M4; } else { - rtx tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), - UNSPEC_MOVE_PIC); - new = gen_const_mem (Pmode, - gen_rtx_PLUS (Pmode, picreg, tmp)); + unspec = UNSPEC_MOVE_FDPIC; } + + if (reg == 0) + { + gcc_assert (!no_new_pseudos); + reg = gen_reg_rtx (Pmode); + } + + tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), unspec); + new = gen_const_mem (Pmode, gen_rtx_PLUS (Pmode, picreg, tmp)); + emit_move_insn (reg, new); } if (picreg == pic_offset_table_rtx) @@ -254,7 +266,8 @@ n_pregs_to_save (bool is_inthandler) for (i = REG_P0; i <= REG_P5; i++) if ((regs_ever_live[i] && (is_inthandler || ! call_used_regs[i])) - || (i == PIC_OFFSET_TABLE_REGNUM + || (!TARGET_FDPIC + && i == PIC_OFFSET_TABLE_REGNUM && (current_function_uses_pic_offset_table || (TARGET_ID_SHARED_LIBRARY && ! current_function_is_leaf)))) return REG_P5 - i + 1; @@ -1025,6 +1038,25 @@ legitimize_address (rtx x ATTRIBUTE_UNUSED, rtx oldx ATTRIBUTE_UNUSED, return NULL_RTX; } +static rtx +bfin_delegitimize_address (rtx orig_x) +{ + rtx x = orig_x, y; + + if (GET_CODE (x) != MEM) + return orig_x; + + x = XEXP (x, 0); + if (GET_CODE (x) == PLUS + && GET_CODE (XEXP (x, 1)) == UNSPEC + && XINT (XEXP (x, 1), 1) == UNSPEC_MOVE_PIC + && GET_CODE (XEXP (x, 0)) == REG + && REGNO (XEXP (x, 0)) == PIC_OFFSET_TABLE_REGNUM) + return XVECEXP (XEXP (x, 1), 0, 0); + + return orig_x; +} + /* This predicate is used to compute the length of a load/store insn. OP is a MEM rtx, we return nonzero if its addressing mode requires a 32 bit instruction. */ @@ -1343,6 +1375,16 @@ print_operand (FILE *file, rtx x, char code) fprintf (file, "@GOT"); break; + case UNSPEC_MOVE_FDPIC: + output_addr_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@GOT17M4"); + break; + + case UNSPEC_FUNCDESC_GOT17M4: + output_addr_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@FUNCDESC_GOT17M4"); + break; + case UNSPEC_LIBRARY_OFFSET: fprintf (file, "_current_shared_library_p5_offset_"); break; @@ -1576,17 +1618,26 @@ initialize_trampoline (tramp, fnaddr, cxt) rtx t1 = copy_to_reg (fnaddr); rtx t2 = copy_to_reg (cxt); rtx addr; + int i = 0; - addr = memory_address (Pmode, plus_constant (tramp, 2)); + if (TARGET_FDPIC) + { + rtx a = memory_address (Pmode, plus_constant (tramp, 8)); + addr = memory_address (Pmode, tramp); + emit_move_insn (gen_rtx_MEM (SImode, addr), a); + i = 8; + } + + addr = memory_address (Pmode, plus_constant (tramp, i + 2)); emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, t1)); emit_insn (gen_ashrsi3 (t1, t1, GEN_INT (16))); - addr = memory_address (Pmode, plus_constant (tramp, 6)); + addr = memory_address (Pmode, plus_constant (tramp, i + 6)); emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, t1)); - addr = memory_address (Pmode, plus_constant (tramp, 10)); + addr = memory_address (Pmode, plus_constant (tramp, i + 10)); emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, t2)); emit_insn (gen_ashrsi3 (t2, t2, GEN_INT (16))); - addr = memory_address (Pmode, plus_constant (tramp, 14)); + addr = memory_address (Pmode, plus_constant (tramp, i + 14)); emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, t2)); } @@ -1597,11 +1648,13 @@ emit_pic_move (rtx *operands, enum machine_mode mode ATTRIBUTE_UNUSED) { rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); + gcc_assert (!TARGET_FDPIC || !(reload_in_progress || reload_completed)); if (GET_CODE (operands[0]) == MEM && SYMBOLIC_CONST (operands[1])) operands[1] = force_reg (SImode, operands[1]); else operands[1] = legitimize_pic_address (operands[1], temp, - pic_offset_table_rtx); + TARGET_FDPIC ? OUR_FDPIC_REG + : pic_offset_table_rtx); } /* Expand a move operation in mode MODE. The operands are in OPERANDS. */ @@ -1609,9 +1662,10 @@ emit_pic_move (rtx *operands, enum machine_mode mode ATTRIBUTE_UNUSED) void expand_move (rtx *operands, enum machine_mode mode) { - if (flag_pic && SYMBOLIC_CONST (operands[1])) + rtx op = operands[1]; + if ((TARGET_ID_SHARED_LIBRARY || TARGET_FDPIC) + && SYMBOLIC_CONST (op)) emit_pic_move (operands, mode); - /* Don't generate memory->memory or constant->memory moves, go through a register */ else if ((reload_in_progress | reload_completed) == 0 @@ -1674,23 +1728,46 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall) { rtx use = NULL, call; rtx callee = XEXP (fnaddr, 0); - rtx pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (sibcall ? 3 : 2)); + int nelts = 2 + !!sibcall; + rtx pat; + rtx picreg = get_hard_reg_initial_val (SImode, FDPIC_REGNO); + int n; /* In an untyped call, we can get NULL for operand 2. */ if (cookie == NULL_RTX) cookie = const0_rtx; /* Static functions and indirect calls don't need the pic register. */ - if (flag_pic + if (!TARGET_FDPIC && flag_pic && GET_CODE (callee) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (callee)) use_reg (&use, pic_offset_table_rtx); - if ((!register_no_elim_operand (callee, Pmode) - && GET_CODE (callee) != SYMBOL_REF) - || (GET_CODE (callee) == SYMBOL_REF - && (flag_pic - || bfin_longcall_p (callee, INTVAL (cookie))))) + if (TARGET_FDPIC) + { + if (GET_CODE (callee) != SYMBOL_REF + || bfin_longcall_p (callee, INTVAL (cookie))) + { + rtx addr = callee; + if (! address_operand (addr, Pmode)) + addr = force_reg (Pmode, addr); + + fnaddr = gen_reg_rtx (SImode); + emit_insn (gen_load_funcdescsi (fnaddr, addr)); + fnaddr = gen_rtx_MEM (Pmode, fnaddr); + + picreg = gen_reg_rtx (SImode); + emit_insn (gen_load_funcdescsi (picreg, + plus_constant (addr, 4))); + } + + nelts++; + } + else if ((!register_no_elim_operand (callee, Pmode) + && GET_CODE (callee) != SYMBOL_REF) + || (GET_CODE (callee) == SYMBOL_REF + && (flag_pic + || bfin_longcall_p (callee, INTVAL (cookie))))) { callee = copy_to_mode_reg (Pmode, callee); fnaddr = gen_rtx_MEM (Pmode, callee); @@ -1700,10 +1777,14 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall) if (retval) call = gen_rtx_SET (VOIDmode, retval, call); - XVECEXP (pat, 0, 0) = call; - XVECEXP (pat, 0, 1) = gen_rtx_USE (VOIDmode, cookie); + pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (nelts)); + n = 0; + XVECEXP (pat, 0, n++) = call; + if (TARGET_FDPIC) + XVECEXP (pat, 0, n++) = gen_rtx_USE (VOIDmode, picreg); + XVECEXP (pat, 0, n++) = gen_rtx_USE (VOIDmode, cookie); if (sibcall) - XVECEXP (pat, 0, 2) = gen_rtx_RETURN (VOIDmode); + XVECEXP (pat, 0, n++) = gen_rtx_RETURN (VOIDmode); call = emit_call_insn (pat); if (use) CALL_INSN_FUNCTION_USAGE (call) = use; @@ -1884,6 +1965,16 @@ bfin_handle_option (size_t code, const char *arg, int value) } } +static struct machine_function * +bfin_init_machine_status (void) +{ + struct machine_function *f; + + f = ggc_alloc_cleared (sizeof (struct machine_function)); + + return f; +} + /* Implement the macro OVERRIDE_OPTIONS. */ void @@ -1896,11 +1987,26 @@ override_options (void) if (bfin_lib_id_given && ! TARGET_ID_SHARED_LIBRARY) error ("-mshared-library-id= specified without -mid-shared-library"); - if (TARGET_ID_SHARED_LIBRARY) - /* ??? Provide a way to use a bigger GOT. */ + if (TARGET_ID_SHARED_LIBRARY && flag_pic == 0) flag_pic = 1; + if (TARGET_ID_SHARED_LIBRARY && TARGET_FDPIC) + error ("ID shared libraries and FD-PIC mode can't be used together."); + + /* There is no single unaligned SI op for PIC code. Sometimes we + need to use ".4byte" and sometimes we need to use ".picptr". + See bfin_assemble_integer for details. */ + if (TARGET_FDPIC) + targetm.asm_out.unaligned_op.si = 0; + + /* Silently turn off flag_pic if not doing FDPIC or ID shared libraries, + since we don't support it and it'll just break. */ + if (flag_pic && !TARGET_FDPIC && !TARGET_ID_SHARED_LIBRARY) + flag_pic = 0; + flag_schedule_insns = 0; + + init_machine_status = bfin_init_machine_status; } /* Return the destination address of BRANCH. @@ -2618,6 +2724,771 @@ bfin_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost) return cost; } + + +/* Increment the counter for the number of loop instructions in the + current function. */ + +void +bfin_hardware_loop (void) +{ + cfun->machine->has_hardware_loops++; +} + +/* Maximum loop nesting depth. */ +#define MAX_LOOP_DEPTH 2 + +/* Maximum size of a loop. */ +#define MAX_LOOP_LENGTH 2042 + +/* We need to keep a vector of loops */ +typedef struct loop_info *loop_info; +DEF_VEC_P (loop_info); +DEF_VEC_ALLOC_P (loop_info,heap); + +/* Information about a loop we have found (or are in the process of + finding). */ +struct loop_info GTY (()) +{ + /* loop number, for dumps */ + int loop_no; + + /* Predecessor block of the loop. This is the one that falls into + the loop and contains the initialization instruction. */ + basic_block predecessor; + + /* First block in the loop. This is the one branched to by the loop_end + insn. */ + basic_block head; + + /* Last block in the loop (the one with the loop_end insn). */ + basic_block tail; + + /* The successor block of the loop. This is the one the loop_end insn + falls into. */ + basic_block successor; + + /* The last instruction in the tail. */ + rtx last_insn; + + /* The loop_end insn. */ + rtx loop_end; + + /* The iteration register. */ + rtx iter_reg; + + /* The new initialization insn. */ + rtx init; + + /* The new initialization instruction. */ + rtx loop_init; + + /* The new label placed at the beginning of the loop. */ + rtx start_label; + + /* The new label placed at the end of the loop. */ + rtx end_label; + + /* The length of the loop. */ + int length; + + /* The nesting depth of the loop. Set to -1 for a bad loop. */ + int depth; + + /* True if we have visited this loop. */ + int visited; + + /* True if this loop body clobbers any of LC0, LT0, or LB0. */ + int clobber_loop0; + + /* True if this loop body clobbers any of LC1, LT1, or LB1. */ + int clobber_loop1; + + /* Next loop in the graph. */ + struct loop_info *next; + + /* Immediate outer loop of this loop. */ + struct loop_info *outer; + + /* Vector of blocks only within the loop, (excluding those within + inner loops). */ + VEC (basic_block,heap) *blocks; + + /* Vector of inner loops within this loop */ + VEC (loop_info,heap) *loops; +}; + +/* Information used during loop detection. */ +typedef struct loop_work GTY(()) +{ + /* Basic block to be scanned. */ + basic_block block; + + /* Loop it will be within. */ + loop_info loop; +} loop_work; + +/* Work list. */ +DEF_VEC_O (loop_work); +DEF_VEC_ALLOC_O (loop_work,heap); + +static void +bfin_dump_loops (loop_info loops) +{ + loop_info loop; + + for (loop = loops; loop; loop = loop->next) + { + loop_info i; + basic_block b; + unsigned ix; + + fprintf (dump_file, ";; loop %d: ", loop->loop_no); + fprintf (dump_file, "{head:%d, depth:%d}", loop->head->index, loop->depth); + + fprintf (dump_file, " blocks: [ "); + for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, b); ix++) + fprintf (dump_file, "%d ", b->index); + fprintf (dump_file, "] "); + + fprintf (dump_file, " inner loops: [ "); + for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, i); ix++) + fprintf (dump_file, "%d ", i->loop_no); + fprintf (dump_file, "]\n"); + } + fprintf (dump_file, "\n"); +} + +/* Scan the blocks of LOOP (and its inferiors) looking for basic block + BB. Return true, if we find it. */ + +static bool +bfin_bb_in_loop (loop_info loop, basic_block bb) +{ + unsigned ix; + loop_info inner; + basic_block b; + + for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, b); ix++) + if (b == bb) + return true; + + for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, inner); ix++) + if (bfin_bb_in_loop (inner, bb)) + return true; + + return false; +} + +/* Scan the blocks of LOOP (and its inferiors) looking for uses of + REG. Return true, if we find any. Don't count the loop's loop_end + insn if it matches LOOP_END. */ + +static bool +bfin_scan_loop (loop_info loop, rtx reg, rtx loop_end) +{ + unsigned ix; + loop_info inner; + basic_block bb; + + for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, bb); ix++) + { + rtx insn; + + for (insn = BB_HEAD (bb); + insn != NEXT_INSN (BB_END (bb)); + insn = NEXT_INSN (insn)) + { + if (!INSN_P (insn)) + continue; + if (insn == loop_end) + continue; + if (reg_mentioned_p (reg, PATTERN (insn))) + return true; + } + } + for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, inner); ix++) + if (bfin_scan_loop (inner, reg, NULL_RTX)) + return true; + + return false; +} + +/* Optimize LOOP. */ + +static void +bfin_optimize_loop (loop_info loop) +{ + basic_block bb; + loop_info inner, outer; + rtx insn, init_insn, last_insn, nop_insn; + rtx loop_init, start_label, end_label; + rtx reg_lc0, reg_lc1, reg_lt0, reg_lt1, reg_lb0, reg_lb1; + rtx iter_reg; + rtx lc_reg, lt_reg, lb_reg; + rtx seq; + int length; + unsigned ix; + int inner_depth = 0; + int inner_num; + int bb_num; + + if (loop->visited) + return; + + loop->visited = 1; + + for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, inner); ix++) + { + if (inner->loop_no == loop->loop_no) + loop->depth = -1; + else + bfin_optimize_loop (inner); + + if (inner->depth < 0 || inner->depth > MAX_LOOP_DEPTH) + { + inner->outer = NULL; + VEC_ordered_remove (loop_info, loop->loops, ix); + } + + if (inner_depth < inner->depth) + inner_depth = inner->depth; + + loop->clobber_loop0 |= inner->clobber_loop0; + loop->clobber_loop1 |= inner->clobber_loop1; + } + + if (loop->depth < 0) + { + if (dump_file) + fprintf (dump_file, ";; loop %d bad when found\n", loop->loop_no); + goto bad_loop; + } + + loop->depth = inner_depth + 1; + if (loop->depth > MAX_LOOP_DEPTH) + { + if (dump_file) + fprintf (dump_file, ";; loop %d too deep\n", loop->loop_no); + goto bad_loop; + } + + /* Make sure we only have one entry point. */ + if (EDGE_COUNT (loop->head->preds) == 2) + { + loop->predecessor = EDGE_PRED (loop->head, 0)->src; + if (loop->predecessor == loop->tail) + /* We wanted the other predecessor. */ + loop->predecessor = EDGE_PRED (loop->head, 1)->src; + + /* We can only place a loop insn on a fall through edge of a + single exit block. */ + if (EDGE_COUNT (loop->predecessor->succs) != 1 + || !(EDGE_SUCC (loop->predecessor, 0)->flags & EDGE_FALLTHRU) + /* If loop->predecessor is in loop, loop->head is not really + the head of the loop. */ + || bfin_bb_in_loop (loop, loop->predecessor)) + loop->predecessor = NULL; + } + + if (loop->predecessor == NULL) + { + if (dump_file) + fprintf (dump_file, ";; loop %d has bad predecessor\n", loop->loop_no); + goto bad_loop; + } + + /* Get the loop iteration register. */ + iter_reg = loop->iter_reg; + + if (!DPREG_P (iter_reg)) + { + if (dump_file) + fprintf (dump_file, ";; loop %d iteration count NOT in PREG or DREG\n", + loop->loop_no); + goto bad_loop; + } + + /* Check if start_label appears before loop_end and calculate the + offset between them. We calculate the length of instructions + conservatively. */ + length = 0; + for (insn = loop->start_label; + insn && insn != loop->loop_end; + insn = NEXT_INSN (insn)) + { + if (JUMP_P (insn) && any_condjump_p (insn) && !optimize_size) + { + if (TARGET_CSYNC_ANOMALY) + length += 8; + else if (TARGET_SPECLD_ANOMALY) + length += 6; + } + else if (LABEL_P (insn)) + { + if (TARGET_CSYNC_ANOMALY) + length += 4; + } + + if (INSN_P (insn)) + length += get_attr_length (insn); + } + + if (!insn) + { + if (dump_file) + fprintf (dump_file, ";; loop %d start_label not before loop_end\n", + loop->loop_no); + goto bad_loop; + } + + loop->length = length; + if (loop->length > MAX_LOOP_LENGTH) + { + if (dump_file) + fprintf (dump_file, ";; loop %d too long\n", loop->loop_no); + goto bad_loop; + } + + /* Scan all the blocks to make sure they don't use iter_reg. */ + if (bfin_scan_loop (loop, iter_reg, loop->loop_end)) + { + if (dump_file) + fprintf (dump_file, ";; loop %d uses iterator\n", loop->loop_no); + goto bad_loop; + } + + /* Scan all the insns to see if the loop body clobber + any hardware loop registers. */ + + reg_lc0 = gen_rtx_REG (SImode, REG_LC0); + reg_lc1 = gen_rtx_REG (SImode, REG_LC1); + reg_lt0 = gen_rtx_REG (SImode, REG_LT0); + reg_lt1 = gen_rtx_REG (SImode, REG_LT1); + reg_lb0 = gen_rtx_REG (SImode, REG_LB0); + reg_lb1 = gen_rtx_REG (SImode, REG_LB1); + + for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, bb); ix++) + { + rtx insn; + + for (insn = BB_HEAD (bb); + insn != NEXT_INSN (BB_END (bb)); + insn = NEXT_INSN (insn)) + { + if (!INSN_P (insn)) + continue; + + if (reg_set_p (reg_lc0, insn) + || reg_set_p (reg_lt0, insn) + || reg_set_p (reg_lb0, insn)) + loop->clobber_loop0 = 1; + + if (reg_set_p (reg_lc1, insn) + || reg_set_p (reg_lt1, insn) + || reg_set_p (reg_lb1, insn)) + loop->clobber_loop1 |= 1; + } + } + + if ((loop->clobber_loop0 && loop->clobber_loop1) + || (loop->depth == MAX_LOOP_DEPTH && loop->clobber_loop0)) + { + loop->depth = MAX_LOOP_DEPTH + 1; + if (dump_file) + fprintf (dump_file, ";; loop %d no loop reg available\n", + loop->loop_no); + goto bad_loop; + } + + /* There should be an instruction before the loop_end instruction + in the same basic block. And the instruction must not be + - JUMP + - CONDITIONAL BRANCH + - CALL + - CSYNC + - SSYNC + - Returns (RTS, RTN, etc.) */ + + bb = loop->tail; + last_insn = PREV_INSN (loop->loop_end); + + while (1) + { + for (; last_insn != PREV_INSN (BB_HEAD (bb)); + last_insn = PREV_INSN (last_insn)) + if (INSN_P (last_insn)) + break; + + if (last_insn != PREV_INSN (BB_HEAD (bb))) + break; + + if (single_pred_p (bb) + && single_pred (bb) != ENTRY_BLOCK_PTR) + { + bb = single_pred (bb); + last_insn = BB_END (bb); + continue; + } + else + { + last_insn = NULL_RTX; + break; + } + } + + if (!last_insn) + { + if (dump_file) + fprintf (dump_file, ";; loop %d has no last instruction\n", + loop->loop_no); + goto bad_loop; + } + + if (JUMP_P (last_insn)) + { + loop_info inner = bb->aux; + if (inner + && inner->outer == loop + && inner->loop_end == last_insn + && inner->depth == 1) + /* This jump_insn is the exact loop_end of an inner loop + and to be optimized away. So use the inner's last_insn. */ + last_insn = inner->last_insn; + else + { + if (dump_file) + fprintf (dump_file, ";; loop %d has bad last instruction\n", + loop->loop_no); + goto bad_loop; + } + } + else if (CALL_P (last_insn) + || get_attr_type (last_insn) == TYPE_SYNC + || recog_memoized (last_insn) == CODE_FOR_return_internal) + { + if (dump_file) + fprintf (dump_file, ";; loop %d has bad last instruction\n", + loop->loop_no); + goto bad_loop; + } + + if (GET_CODE (PATTERN (last_insn)) == ASM_INPUT + || asm_noperands (PATTERN (last_insn)) >= 0 + || get_attr_seq_insns (last_insn) == SEQ_INSNS_MULTI) + { + nop_insn = emit_insn_after (gen_nop (), last_insn); + last_insn = nop_insn; + } + + loop->last_insn = last_insn; + + /* The loop is good for replacement. */ + start_label = loop->start_label; + end_label = gen_label_rtx (); + iter_reg = loop->iter_reg; + + if (loop->depth == 1 && !loop->clobber_loop1) + { + lc_reg = reg_lc1; + lt_reg = reg_lt1; + lb_reg = reg_lb1; + loop->clobber_loop1 = 1; + } + else + { + lc_reg = reg_lc0; + lt_reg = reg_lt0; + lb_reg = reg_lb0; + loop->clobber_loop0 = 1; + } + + /* If iter_reg is a DREG, we need generate an instruction to load + the loop count into LC register. */ + if (D_REGNO_P (REGNO (iter_reg))) + { + init_insn = gen_movsi (lc_reg, iter_reg); + loop_init = gen_lsetup_without_autoinit (lt_reg, start_label, + lb_reg, end_label, + lc_reg); + } + else if (P_REGNO_P (REGNO (iter_reg))) + { + init_insn = NULL_RTX; + loop_init = gen_lsetup_with_autoinit (lt_reg, start_label, + lb_reg, end_label, + lc_reg, iter_reg); + } + else + gcc_unreachable (); + + loop->init = init_insn; + loop->end_label = end_label; + loop->loop_init = loop_init; + + if (dump_file) + { + fprintf (dump_file, ";; replacing loop %d initializer with\n", + loop->loop_no); + print_rtl_single (dump_file, loop->loop_init); + fprintf (dump_file, ";; replacing loop %d terminator with\n", + loop->loop_no); + print_rtl_single (dump_file, loop->loop_end); + } + + start_sequence (); + + if (loop->init != NULL_RTX) + emit_insn (loop->init); + emit_insn(loop->loop_init); + emit_label (loop->start_label); + + seq = get_insns (); + end_sequence (); + + emit_insn_after (seq, BB_END (loop->predecessor)); + delete_insn (loop->loop_end); + + /* Insert the loop end label before the last instruction of the loop. */ + emit_label_before (loop->end_label, loop->last_insn); + + return; + +bad_loop: + + if (dump_file) + fprintf (dump_file, ";; loop %d is bad\n", loop->loop_no); + + /* Mark this loop bad. */ + if (loop->depth <= MAX_LOOP_DEPTH) + loop->depth = -1; + + outer = loop->outer; + + /* Move all inner loops to loop's outer loop. */ + inner_num = VEC_length (loop_info, loop->loops); + if (inner_num) + { + loop_info l; + + if (outer) + VEC_reserve (loop_info, heap, outer->loops, inner_num); + + for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, l); ix++) + { + l->outer = outer; + if (outer) + VEC_quick_push (loop_info, outer->loops, l); + } + + VEC_free (loop_info, heap, loop->loops); + } + + /* Move all blocks to loop's outer loop. */ + bb_num = VEC_length (basic_block, loop->blocks); + if (bb_num) + { + basic_block b; + + if (outer) + VEC_reserve (basic_block, heap, outer->blocks, bb_num); + + for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, b); ix++) + { + b->aux = outer; + if (outer) + VEC_quick_push (basic_block, outer->blocks, b); + } + + VEC_free (basic_block, heap, loop->blocks); + } + + if (DPREG_P (loop->iter_reg)) + { + /* If loop->iter_reg is a DREG or PREG, we can split it here + without scratch register. */ + rtx insn; + + emit_insn_before (gen_addsi3 (loop->iter_reg, + loop->iter_reg, + constm1_rtx), + loop->loop_end); + + emit_insn_before (gen_cmpsi (loop->iter_reg, const0_rtx), + loop->loop_end); + + insn = emit_jump_insn_before (gen_bne (loop->start_label), + loop->loop_end); + + JUMP_LABEL (insn) = loop->start_label; + LABEL_NUSES (loop->start_label)++; + delete_insn (loop->loop_end); + } +} + +static void +bfin_reorg_loops (FILE *dump_file) +{ + basic_block bb; + loop_info loops = NULL; + loop_info loop; + int nloops = 0; + unsigned dwork = 0; + VEC (loop_work,heap) *works = VEC_alloc (loop_work,heap,20); + loop_work *work; + edge e; + edge_iterator ei; + + /* Find all the possible loop tails. This means searching for every + loop_end instruction. For each one found, create a loop_info + structure and add the head block to the work list. */ + FOR_EACH_BB (bb) + { + rtx tail = BB_END (bb); + + while (GET_CODE (tail) == NOTE) + tail = PREV_INSN (tail); + + bb->aux = NULL; + if (INSN_P (tail) && recog_memoized (tail) == CODE_FOR_loop_end) + { + /* A possible loop end */ + + loop = XNEW (struct loop_info); + loop->next = loops; + loops = loop; + loop->tail = bb; + loop->head = BRANCH_EDGE (bb)->dest; + loop->successor = FALLTHRU_EDGE (bb)->dest; + loop->predecessor = NULL; + loop->loop_end = tail; + loop->last_insn = NULL_RTX; + loop->iter_reg = SET_DEST (XVECEXP (PATTERN (tail), 0, 1)); + loop->depth = loop->length = 0; + loop->visited = 0; + loop->clobber_loop0 = loop->clobber_loop1 = 0; + loop->blocks = VEC_alloc (basic_block, heap, 20); + VEC_quick_push (basic_block, loop->blocks, bb); + loop->outer = NULL; + loop->loops = NULL; + loop->loop_no = nloops++; + + loop->init = loop->loop_init = NULL_RTX; + loop->start_label = XEXP (XEXP (SET_SRC (XVECEXP (PATTERN (tail), 0, 0)), 1), 0); + loop->end_label = NULL_RTX; + + work = VEC_safe_push (loop_work, heap, works, NULL); + work->block = loop->head; + work->loop = loop; + + bb->aux = loop; + + if (dump_file) + { + fprintf (dump_file, ";; potential loop %d ending at\n", + loop->loop_no); + print_rtl_single (dump_file, tail); + } + } + } + + /* Now find all the closed loops. + until work list empty, + if block's auxptr is set + if != loop slot + if block's loop's start != block + mark loop as bad + else + append block's loop's fallthrough block to worklist + increment this loop's depth + else if block is exit block + mark loop as bad + else + set auxptr + for each target of block + add to worklist */ + while (VEC_iterate (loop_work, works, dwork++, work)) + { + loop = work->loop; + bb = work->block; + if (bb == EXIT_BLOCK_PTR) + /* We've reached the exit block. The loop must be bad. */ + loop->depth = -1; + else if (!bb->aux) + { + /* We've not seen this block before. Add it to the loop's + list and then add each successor to the work list. */ + bb->aux = loop; + VEC_safe_push (basic_block, heap, loop->blocks, bb); + FOR_EACH_EDGE (e, ei, bb->succs) + { + if (!VEC_space (loop_work, works, 1)) + { + if (dwork) + { + VEC_block_remove (loop_work, works, 0, dwork); + dwork = 0; + } + else + VEC_reserve (loop_work, heap, works, 1); + } + work = VEC_quick_push (loop_work, works, NULL); + work->block = EDGE_SUCC (bb, ei.index)->dest; + work->loop = loop; + } + } + else if (bb->aux != loop) + { + /* We've seen this block in a different loop. If it's not + the other loop's head, then this loop must be bad. + Otherwise, the other loop might be a nested loop, so + continue from that loop's successor. */ + loop_info other = bb->aux; + + if (other->head != bb) + loop->depth = -1; + else + { + other->outer = loop; + VEC_safe_push (loop_info, heap, loop->loops, other); + work = VEC_safe_push (loop_work, heap, works, NULL); + work->loop = loop; + work->block = other->successor; + } + } + } + VEC_free (loop_work, heap, works); + + if (dump_file) + { + fprintf (dump_file, ";; All loops found:\n\n"); + bfin_dump_loops (loops); + } + + /* Now apply the optimizations. */ + for (loop = loops; loop; loop = loop->next) + bfin_optimize_loop (loop); + + if (dump_file) + { + fprintf (dump_file, ";; After hardware loops optimization:\n\n"); + bfin_dump_loops (loops); + } + + /* Free up the loop structures */ + while (loops) + { + loop = loops; + loops = loop->next; + VEC_free (loop_info, heap, loop->loops); + VEC_free (basic_block, heap, loop->blocks); + XDELETE (loop); + } + + if (dump_file) + print_rtl (dump_file, get_insns ()); +} + /* We use the machine specific reorg pass for emitting CSYNC instructions after conditional branches as needed. @@ -2645,7 +3516,11 @@ bfin_reorg (void) rtx insn, last_condjump = NULL_RTX; int cycles_since_jump = INT_MAX; - if (! TARGET_SPECLD_ANOMALY || ! TARGET_CSYNC_ANOMALY) + /* Doloop optimization */ + if (cfun->machine->has_hardware_loops) + bfin_reorg_loops (dump_file); + + if (! TARGET_SPECLD_ANOMALY && ! TARGET_CSYNC_ANOMALY) return; /* First pass: find predicted-false branches; if something after them @@ -2895,6 +3770,34 @@ const struct attribute_spec bfin_attribute_table[] = { NULL, 0, 0, false, false, false, NULL } }; +/* Implementation of TARGET_ASM_INTEGER. When using FD-PIC, we need to + tell the assembler to generate pointers to function descriptors in + some cases. */ + +static bool +bfin_assemble_integer (rtx value, unsigned int size, int aligned_p) +{ + if (TARGET_FDPIC && size == UNITS_PER_WORD) + { + if (GET_CODE (value) == SYMBOL_REF + && SYMBOL_REF_FUNCTION_P (value)) + { + fputs ("\t.picptr\tfuncdesc(", asm_out_file); + output_addr_const (asm_out_file, value); + fputs (")\n", asm_out_file); + return true; + } + if (!aligned_p) + { + /* We've set the unaligned SI op to NULL, so we always have to + handle the unaligned case here. */ + assemble_integer_with_op ("\t.4byte\t", value); + return true; + } + } + return default_assemble_integer (value, size, aligned_p); +} + /* Output the assembler code for a thunk function. THUNK_DECL is the declaration for the thunk function itself, FUNCTION is the decl for the target function. DELTA is an immediate constant offset to be @@ -3500,6 +4403,9 @@ bfin_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED, #undef TARGET_ASM_INTERNAL_LABEL #define TARGET_ASM_INTERNAL_LABEL bfin_internal_label +#undef TARGET_ASM_INTEGER +#define TARGET_ASM_INTEGER bfin_assemble_integer + #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG bfin_reorg @@ -3545,4 +4451,7 @@ bfin_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED, #undef TARGET_SECONDARY_RELOAD #define TARGET_SECONDARY_RELOAD bfin_secondary_reload +#undef TARGET_DELEGITIMIZE_ADDRESS +#define TARGET_DELEGITIMIZE_ADDRESS bfin_delegitimize_address + struct gcc_target targetm = TARGET_INITIALIZER; diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index 21f107055d9..1631a3797e1 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -1,5 +1,5 @@ /* Definitions for the Blackfin port. - Copyright (C) 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2005 Free Software Foundation, Inc. Contributed by Analog Devices. This file is part of GCC. @@ -42,12 +42,51 @@ extern int target_flags; builtin_define ("bfin"); \ builtin_define ("BFIN"); \ builtin_define ("__ADSPBLACKFIN__"); \ + if (TARGET_FDPIC) \ + builtin_define ("__BFIN_FDPIC__"); \ if (TARGET_ID_SHARED_LIBRARY) \ builtin_define ("__ID_SHARED_LIB__"); \ } \ while (0) #endif +#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS "\ + %{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\ + %{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fpie}}}}}}}}} \ +" +#ifndef SUBTARGET_DRIVER_SELF_SPECS +# define SUBTARGET_DRIVER_SELF_SPECS +#endif + +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%{mfdpic:%{!static: %L} %{static: %G %L %G}} \ + %{!mfdpic:%G %L %G}" + +/* A C string constant that tells the GCC driver program options to pass to + the assembler. It can also specify how to translate options you give to GNU + CC into options for GCC to pass to the assembler. See the file `sun3.h' + for an example of this. + + Do not define this macro if it does not need to do anything. + + Defined in svr4.h. */ +#undef ASM_SPEC +#define ASM_SPEC "\ +%{G*} %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ + %{mno-fdpic:-mnopic} %{mfdpic}" + +#define LINK_SPEC "\ +%{h*} %{v:-V} \ +%{b} \ +%{mfdpic:-melf32bfinfd -z text} \ +%{static:-dn -Bstatic} \ +%{shared:-G -Bdynamic} \ +%{symbolic:-Bsymbolic} \ +%{G*} \ +%{YP,*} \ +%{Qy:} %{!Qn:-Qy} \ +-init __init -fini __fini " + /* Generate DSP instructions, like DSP halfword loads */ #define TARGET_DSP (1) @@ -117,6 +156,10 @@ extern const char *bfin_library_id_string; to allocate such a register (if necessary). */ #define PIC_OFFSET_TABLE_REGNUM (REG_P5) +#define FDPIC_FPTR_REGNO REG_P1 +#define FDPIC_REGNO REG_P3 +#define OUR_FDPIC_REG get_hard_reg_initial_val (SImode, FDPIC_REGNO) + /* A static chain register for nested functions. We need to use a call-clobbered register for this. */ #define STATIC_CHAIN_REGNUM REG_P2 @@ -150,10 +193,6 @@ extern const char *bfin_library_id_string; */ #define FRAME_POINTER_REQUIRED (bfin_frame_pointer_required ()) -#define PARM_BOUNDRY 32 - -#define STACK_BOUNDRY 32 - /*#define DATA_ALIGNMENT(TYPE, BASIC-ALIGN) for arrays.. */ /* Make strings word-aligned so strcpy from constants will be faster. */ @@ -161,13 +200,28 @@ extern const char *bfin_library_id_string; (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) -#define TRAMPOLINE_SIZE 18 +#define TRAMPOLINE_SIZE (TARGET_FDPIC ? 30 : 18) #define TRAMPOLINE_TEMPLATE(FILE) \ - fprintf(FILE, "\t.dd\t0x0000e109\n"); /* p1.l = fn low */ \ - fprintf(FILE, "\t.dd\t0x0000e149\n"); /* p1.h = fn high */; \ - fprintf(FILE, "\t.dd\t0x0000e10a\n"); /* p2.l = sc low */; \ - fprintf(FILE, "\t.dd\t0x0000e14a\n"); /* p2.h = sc high */; \ - fprintf(FILE, "\t.dw\t0x0051\n"); /* jump (p1)*/ + if (TARGET_FDPIC) \ + { \ + fprintf(FILE, "\t.dd\t0x00000000\n"); /* 0 */ \ + fprintf(FILE, "\t.dd\t0x00000000\n"); /* 0 */ \ + fprintf(FILE, "\t.dd\t0x0000e109\n"); /* p1.l = fn low */ \ + fprintf(FILE, "\t.dd\t0x0000e149\n"); /* p1.h = fn high */ \ + fprintf(FILE, "\t.dd\t0x0000e10a\n"); /* p2.l = sc low */ \ + fprintf(FILE, "\t.dd\t0x0000e14a\n"); /* p2.h = sc high */ \ + fprintf(FILE, "\t.dw\t0xac4b\n"); /* p3 = [p1 + 4] */ \ + fprintf(FILE, "\t.dw\t0x9149\n"); /* p1 = [p1] */ \ + fprintf(FILE, "\t.dw\t0x0051\n"); /* jump (p1)*/ \ + } \ + else \ + { \ + fprintf(FILE, "\t.dd\t0x0000e109\n"); /* p1.l = fn low */ \ + fprintf(FILE, "\t.dd\t0x0000e149\n"); /* p1.h = fn high */ \ + fprintf(FILE, "\t.dd\t0x0000e10a\n"); /* p2.l = sc low */ \ + fprintf(FILE, "\t.dd\t0x0000e14a\n"); /* p2.h = sc high */ \ + fprintf(FILE, "\t.dw\t0x0051\n"); /* jump (p1)*/ \ + } #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ initialize_trampoline (TRAMP, FNADDR, CXT) @@ -214,15 +268,17 @@ extern const char *bfin_library_id_string; 5 return address registers RETS/I/X/N/E 1 arithmetic status register (ASTAT). */ -#define FIRST_PSEUDO_REGISTER 44 +#define FIRST_PSEUDO_REGISTER 50 -#define PREG_P(X) (REG_P (X) && P_REGNO_P (REGNO (X))) -#define IREG_P(X) (REG_P (X) && I_REGNO_P (REGNO (X))) -#define ADDRESS_REGNO_P(X) ((X) >= REG_P0 && (X) <= REG_M3) #define D_REGNO_P(X) ((X) <= REG_R7) #define P_REGNO_P(X) ((X) >= REG_P0 && (X) <= REG_P7) -#define I_REGNO_P(X) \ - ((X) == REG_I0 || (X) == REG_I1 || (X) == REG_I2 || (X) == REG_I3) +#define I_REGNO_P(X) ((X) >= REG_I0 && (X) <= REG_I3) +#define DP_REGNO_P(X) (D_REGNO_P (X) || P_REGNO_P (X)) +#define ADDRESS_REGNO_P(X) ((X) >= REG_P0 && (X) <= REG_M3) +#define DREG_P(X) (REG_P (X) && D_REGNO_P (REGNO (X))) +#define PREG_P(X) (REG_P (X) && P_REGNO_P (REGNO (X))) +#define IREG_P(X) (REG_P (X) && I_REGNO_P (REGNO (X))) +#define DPREG_P(X) (REG_P (X) && DP_REGNO_P (REGNO (X))) #define REGISTER_NAMES { \ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", \ @@ -232,7 +288,8 @@ extern const char *bfin_library_id_string; "A0", "A1", \ "CC", \ "RETS", "RETI", "RETX", "RETN", "RETE", "ASTAT", "SEQSTAT", "USP", \ - "ARGP" \ + "ARGP", \ + "LT0", "LT1", "LC0", "LC1", "LB0", "LB1" \ } #define SHORT_REGISTER_NAMES { \ @@ -262,8 +319,10 @@ extern const char *bfin_library_id_string; { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ /*i0 i1 i2 i3 b0 b1 b2 b3 l0 l1 l2 l3 m0 m1 m2 m3 */ \ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, \ -/*a0 a1 cc rets/i/x/n/e astat seqstat usp argp */ \ - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 \ +/*a0 a1 cc rets/i/x/n/e astat seqstat usp argp lt0/1 lc0/1 */ \ + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ +/*lb0/1 */ \ + 1, 1 \ } /* 1 for registers not available across function calls. @@ -278,8 +337,10 @@ extern const char *bfin_library_id_string; { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, \ /*i0 i1 i2 i3 b0 b1 b2 b3 l0 l1 l2 l3 m0 m1 m2 m3 */ \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ -/*a0 a1 cc rets/i/x/n/e astat seqstat usp argp */ \ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 \ +/*a0 a1 cc rets/i/x/n/e astat seqstat usp argp lt0/1 lc0/1 */ \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ +/*lb0/1 */ \ + 1, 1 \ } /* Order in which to allocate registers. Each register must be @@ -296,14 +357,17 @@ extern const char *bfin_library_id_string; REG_L0, REG_L1, REG_L2, REG_L3, REG_M0, REG_M1, REG_M2, REG_M3, \ REG_RETS, REG_RETI, REG_RETX, REG_RETN, REG_RETE, \ REG_ASTAT, REG_SEQSTAT, REG_USP, \ - REG_CC, REG_ARGP \ + REG_CC, REG_ARGP, \ + REG_LT0, REG_LT1, REG_LC0, REG_LC1, REG_LB0, REG_LB1 \ } /* Macro to conditionally modify fixed_regs/call_used_regs. */ #define CONDITIONAL_REGISTER_USAGE \ { \ conditional_register_usage(); \ - if (flag_pic) \ + if (TARGET_FDPIC) \ + call_used_regs[FDPIC_REGNO] = 1; \ + if (!TARGET_FDPIC && flag_pic) \ { \ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ @@ -347,11 +411,16 @@ enum reg_class EVEN_DREGS, ODD_DREGS, DREGS, + FDPIC_REGS, + FDPIC_FPTR_REGS, PREGS_CLOBBERED, PREGS, IPREGS, DPREGS, MOST_REGS, + LT_REGS, + LC_REGS, + LB_REGS, PROLOGUE_REGS, NON_A_CC_REGS, ALL_REGS, LIM_REG_CLASSES @@ -378,11 +447,16 @@ enum reg_class "EVEN_DREGS", \ "ODD_DREGS", \ "DREGS", \ + "FDPIC_REGS", \ + "FDPIC_FPTR_REGS", \ "PREGS_CLOBBERED", \ "PREGS", \ "IPREGS", \ "DPREGS", \ "MOST_REGS", \ + "LT_REGS", \ + "LC_REGS", \ + "LB_REGS", \ "PROLOGUE_REGS", \ "NON_A_CC_REGS", \ "ALL_REGS" } @@ -417,14 +491,19 @@ enum reg_class { 0x00000055, 0 }, /* EVEN_DREGS */ \ { 0x000000aa, 0 }, /* ODD_DREGS */ \ { 0x000000ff, 0 }, /* DREGS */ \ + { 0x00000800, 0x000 }, /* FDPIC_REGS */ \ + { 0x00000200, 0x000 }, /* FDPIC_FPTR_REGS */ \ { 0x00004700, 0x800 }, /* PREGS_CLOBBERED */ \ { 0x0000ff00, 0x800 }, /* PREGS */ \ { 0x000fff00, 0x800 }, /* IPREGS */ \ { 0x0000ffff, 0x800 }, /* DPREGS */ \ { 0xffffffff, 0x800 }, /* MOST_REGS */\ - { 0x00000000, 0x7f8 }, /* PROLOGUE_REGS */\ - { 0xffffffff, 0xff8 }, /* NON_A_CC_REGS */\ - { 0xffffffff, 0xfff }} /* ALL_REGS */ + { 0x00000000, 0x3000 }, /* LT_REGS */\ + { 0x00000000, 0xc000 }, /* LC_REGS */\ + { 0x00000000, 0x30000 }, /* LB_REGS */\ + { 0x00000000, 0x3f7f8 }, /* PROLOGUE_REGS */\ + { 0xffffffff, 0x3fff8 }, /* NON_A_CC_REGS */\ + { 0xffffffff, 0x3ffff }} /* ALL_REGS */ #define IREG_POSSIBLE_P(OUTER) \ ((OUTER) == POST_INC || (OUTER) == PRE_INC \ @@ -459,6 +538,8 @@ enum reg_class #define REG_CLASS_FROM_LETTER(LETTER) \ ((LETTER) == 'a' ? PREGS : \ + (LETTER) == 'Z' ? FDPIC_REGS : \ + (LETTER) == 'Y' ? FDPIC_FPTR_REGS : \ (LETTER) == 'd' ? DREGS : \ (LETTER) == 'z' ? PREGS_CLOBBERED : \ (LETTER) == 'D' ? EVEN_DREGS : \ @@ -467,10 +548,13 @@ enum reg_class (LETTER) == 'A' ? EVEN_AREGS : \ (LETTER) == 'B' ? ODD_AREGS : \ (LETTER) == 'b' ? IREGS : \ - (LETTER) == 'B' ? BREGS : \ + (LETTER) == 'v' ? BREGS : \ (LETTER) == 'f' ? MREGS : \ (LETTER) == 'c' ? CIRCREGS : \ (LETTER) == 'C' ? CCREGS : \ + (LETTER) == 't' ? LT_REGS : \ + (LETTER) == 'k' ? LC_REGS : \ + (LETTER) == 'u' ? LB_REGS : \ (LETTER) == 'x' ? MOST_REGS : \ (LETTER) == 'y' ? PROLOGUE_REGS : \ (LETTER) == 'w' ? NON_A_CC_REGS : \ @@ -490,6 +574,9 @@ enum reg_class : (REGNO) >= REG_B0 && (REGNO) <= REG_B3 ? BREGS \ : (REGNO) >= REG_M0 && (REGNO) <= REG_M3 ? MREGS \ : (REGNO) == REG_A0 || (REGNO) == REG_A1 ? AREGS \ + : (REGNO) == REG_LT0 || (REGNO) == REG_LT1 ? LT_REGS \ + : (REGNO) == REG_LC0 || (REGNO) == REG_LC1 ? LC_REGS \ + : (REGNO) == REG_LB0 || (REGNO) == REG_LB1 ? LB_REGS \ : (REGNO) == REG_CC ? CCREGS \ : (REGNO) >= REG_RETS ? PROLOGUE_REGS \ : NO_REGS) diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 6992de3ac08..c22663cf971 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -46,9 +46,12 @@ ; e (a0, a1) ; b (i0..i3) ; f (m0..m3) -; B -; c (i0..i3,m0..m3) CIRCREGS -; C (CC) CCREGS +; v (b0..b3) +; c (i0..i3,m0..m3) CIRCREGS +; C (CC) CCREGS +; t (lt0,lt1) +; k (lc0,lc1) +; u (lb0,lb1) ; ;; Define constants for hard registers. @@ -109,7 +112,14 @@ (REG_SEQSTAT 41) (REG_USP 42) - (REG_ARGP 43)]) + (REG_ARGP 43) + + (REG_LT0 44) + (REG_LT1 45) + (REG_LC0 46) + (REG_LC1 47) + (REG_LB0 48) + (REG_LB1 49)]) ;; Constants used in UNSPECs and UNSPEC_VOLATILEs. @@ -122,12 +132,16 @@ (UNSPEC_PUSH_MULTIPLE 5) ;; Multiply or MAC with extra CONST_INT operand specifying the macflag (UNSPEC_MUL_WITH_FLAG 6) - (UNSPEC_MAC_WITH_FLAG 7)]) + (UNSPEC_MAC_WITH_FLAG 7) + (UNSPEC_MOVE_FDPIC 8) + (UNSPEC_FUNCDESC_GOT17M4 9) + (UNSPEC_LSETUP_END 10)]) (define_constants [(UNSPEC_VOLATILE_EH_RETURN 0) (UNSPEC_VOLATILE_CSYNC 1) - (UNSPEC_VOLATILE_SSYNC 2)]) + (UNSPEC_VOLATILE_SSYNC 2) + (UNSPEC_VOLATILE_LOAD_FUNCDESC 3)]) (define_constants [(MACFLAG_NONE 0) @@ -240,6 +254,12 @@ (const_int 2))) + +;; Classify the insns into those that are one instruction and those that +;; are more than one in sequence. +(define_attr "seq_insns" "single,multi" + (const_string "single")) + ;; Conditional moves (define_expand "movsicc" @@ -265,7 +285,8 @@ if cc %0 =%2; /* movsicc-1b */ if !cc %0 =%1; if cc %0=%2; /* movsicc-1 */" [(set_attr "length" "2,2,4") - (set_attr "type" "move")]) + (set_attr "type" "move") + (set_attr "seq_insns" "*,*,multi")]) (define_insn "*movsicc_insn2" [(set (match_operand:SI 0 "register_operand" "=da,da,da") @@ -280,7 +301,8 @@ if cc %0 =%1; /* movsicc-2a */ if cc %0 =%1; if !cc %0=%2; /* movsicc-1 */" [(set_attr "length" "2,2,4") - (set_attr "type" "move")]) + (set_attr "type" "move") + (set_attr "seq_insns" "*,*,multi")]) ;; Insns to load HIGH and LO_SUM @@ -373,7 +395,8 @@ %0 = CC; R0 = R0 | R0; CC = AC0;" [(set_attr "type" "move,mvi,mcld,mcst,compare,compare,alu0") - (set_attr "length" "2,2,*,*,2,2,4")]) + (set_attr "length" "2,2,*,*,2,2,4") + (set_attr "seq_insns" "*,*,*,*,*,*,multi")]) (define_insn "movpdi" [(set (match_operand:PDI 0 "nonimmediate_operand" "=e,<,e") @@ -383,7 +406,8 @@ %0 = %1; %0 = %x1; %0 = %w1; %w0 = %1; %x0 = %1;" - [(set_attr "type" "move,mcst,mcld")]) + [(set_attr "type" "move,mcst,mcld") + (set_attr "seq_insns" "*,multi,multi")]) (define_insn "load_accumulator" [(set (match_operand:PDI 0 "register_operand" "=e") @@ -426,12 +450,14 @@ ;; The first alternative is used to make reload choose a limited register ;; class when faced with a movsi_insn that had its input operand replaced ;; with a PLUS. We generally require fewer secondary reloads this way. -(define_insn "*movsi_insn" - [(set (match_operand:SI 0 "nonimmediate_operand" "=da,x*y,da,x,x,x,da,mr") - (match_operand:SI 1 "general_operand" "da,x*y,xKs7,xKsh,xKuh,ix,mr,da"))] +(define_insn "*movsi_insn" + [(set (match_operand:SI 0 "nonimmediate_operand" "=da,x*y,*k,da,da,x,x,x,da,mr") + (match_operand:SI 1 "general_operand" "da,x*y,da,*k,xKs7,xKsh,xKuh,ix,mr,da"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" - "@ + "@ + %0 = %1; + %0 = %1; %0 = %1; %0 = %1; %0 = %1 (X); @@ -440,8 +466,8 @@ # %0 = %1; %0 = %1;" - [(set_attr "type" "move,move,mvi,mvi,mvi,*,mcld,mcst") - (set_attr "length" "2,2,2,4,4,*,*,*")]) + [(set_attr "type" "move,move,move,move,mvi,mvi,mvi,*,mcld,mcst") + (set_attr "length" "2,2,2,2,2,4,4,*,*,*")]) (define_insn_and_split "*movv2hi_insn" [(set (match_operand:V2HI 0 "nonimmediate_operand" "=da,da,d,dm") @@ -773,7 +799,8 @@ (match_operand:DI 2 "register_operand" "d")))] "" "%0 = %1 %2;\\n\\t%H0 = %H1 %H2;" - [(set_attr "length" "4")]) + [(set_attr "length" "4") + (set_attr "seq_insns" "multi")]) (define_insn "*di_zesidi_di" [(set (match_operand:DI 0 "register_operand" "=d") @@ -782,7 +809,8 @@ (match_operand:DI 1 "register_operand" "d")))] "" "%0 = %1 %2;\\n\\t%H0 = ;" - [(set_attr "length" "4")]) + [(set_attr "length" "4") + (set_attr "seq_insns" "multi")]) (define_insn "*di_sesdi_di" [(set (match_operand:DI 0 "register_operand" "=d") @@ -792,7 +820,8 @@ (clobber (match_scratch:SI 3 "=&d"))] "" "%0 = %1 %2;\\n\\t%3 = %2;\\n\\t%3 >>>= 31;\\n\\t%H0 = %H1 %3;" - [(set_attr "length" "8")]) + [(set_attr "length" "8") + (set_attr "seq_insns" "multi")]) (define_insn "negdi2" [(set (match_operand:DI 0 "register_operand" "=d") @@ -801,14 +830,16 @@ (clobber (reg:CC REG_CC))] "" "%2 = 0; %2 = %2 - %1; cc = ac0; cc = !cc; %2 = cc;\\n\\t%0 = -%1; %H0 = -%H1; %H0 = %H0 - %2;" - [(set_attr "length" "16")]) + [(set_attr "length" "16") + (set_attr "seq_insns" "multi")]) (define_insn "one_cmpldi2" [(set (match_operand:DI 0 "register_operand" "=d") (not:DI (match_operand:DI 1 "register_operand" "d")))] "" "%0 = ~%1;\\n\\t%H0 = ~%H1;" - [(set_attr "length" "4")]) + [(set_attr "length" "4") + (set_attr "seq_insns" "multi")]) ;; DImode zero and sign extend patterns @@ -830,14 +861,16 @@ (zero_extend:DI (match_operand:QI 1 "register_operand" "d")))] "" "%0 = %T1 (Z);\\n\\t%H0 = 0;" - [(set_attr "length" "4")]) + [(set_attr "length" "4") + (set_attr "seq_insns" "multi")]) (define_insn "zero_extendhidi2" [(set (match_operand:DI 0 "register_operand" "=d") (zero_extend:DI (match_operand:HI 1 "register_operand" "d")))] "" "%0 = %h1 (Z);\\n\\t%H0 = 0;" - [(set_attr "length" "4")]) + [(set_attr "length" "4") + (set_attr "seq_insns" "multi")]) (define_insn_and_split "extendsidi2" [(set (match_operand:DI 0 "register_operand" "=d") @@ -893,7 +926,8 @@ %0 += %2; cc = ac0; %3 = cc; %H0 = %H0 + %3; %0 = %0 + %2; cc = ac0; %3 = cc; %H0 = %H0 + %H2; %H0 = %H0 + %3;" [(set_attr "type" "alu0") - (set_attr "length" "10,8,10")]) + (set_attr "length" "10,8,10") + (set_attr "seq_insns" "multi,multi,multi")]) (define_insn "subdi3" [(set (match_operand:DI 0 "register_operand" "=&d") @@ -902,7 +936,8 @@ (clobber (reg:CC 34))] "" "%0 = %1-%2;\\n\\tcc = ac0;\\n\\t%H0 = %H1-%H2;\\n\\tif cc jump 1f;\\n\\t%H0 += -1;\\n\\t1:" - [(set_attr "length" "10")]) + [(set_attr "length" "10") + (set_attr "seq_insns" "multi")]) (define_insn "*subdi_di_zesidi" [(set (match_operand:DI 0 "register_operand" "=d") @@ -913,7 +948,8 @@ (clobber (reg:CC 34))] "" "%0 = %1 - %2;\\n\\tcc = ac0;\\n\\tcc = ! cc;\\n\\t%3 = cc;\\n\\t%H0 = %H1 - %3;" - [(set_attr "length" "10")]) + [(set_attr "length" "10") + (set_attr "seq_insns" "multi")]) (define_insn "*subdi_zesidi_di" [(set (match_operand:DI 0 "register_operand" "=d") @@ -924,7 +960,8 @@ (clobber (reg:CC 34))] "" "%0 = %2 - %1;\\n\\tcc = ac0;\\n\\tcc = ! cc;\\n\\t%3 = cc;\\n\\t%3 = -%3;\\n\\t%H0 = %3 - %H1" - [(set_attr "length" "12")]) + [(set_attr "length" "12") + (set_attr "seq_insns" "multi")]) (define_insn "*subdi_di_sesidi" [(set (match_operand:DI 0 "register_operand" "=d") @@ -935,7 +972,8 @@ (clobber (reg:CC 34))] "" "%0 = %1 - %2;\\n\\tcc = ac0;\\n\\t%3 = %2;\\n\\t%3 >>>= 31;\\n\\t%H0 = %H1 - %3;\\n\\tif cc jump 1f;\\n\\t%H0 += -1;\\n\\t1:" - [(set_attr "length" "14")]) + [(set_attr "length" "14") + (set_attr "seq_insns" "multi")]) (define_insn "*subdi_sesidi_di" [(set (match_operand:DI 0 "register_operand" "=d") @@ -946,7 +984,8 @@ (clobber (reg:CC 34))] "" "%0 = %2 - %1;\\n\\tcc = ac0;\\n\\t%3 = %2;\\n\\t%3 >>>= 31;\\n\\t%H0 = %3 - %H1;\\n\\tif cc jump 1f;\\n\\t%H0 += -1;\\n\\t1:" - [(set_attr "length" "14")]) + [(set_attr "length" "14") + (set_attr "seq_insns" "multi")]) ;; Combined shift/add instructions @@ -1493,8 +1532,104 @@ "jump (%0);" [(set_attr "type" "misc")]) +;; Hardware loop + +; operand 0 is the loop count pseudo register +; operand 1 is the number of loop iterations or 0 if it is unknown +; operand 2 is the maximum number of loop iterations +; operand 3 is the number of levels of enclosed loops +; operand 4 is the label to jump to at the top of the loop +(define_expand "doloop_end" + [(parallel [(set (pc) (if_then_else + (ne (match_operand:SI 0 "" "") + (const_int 1)) + (label_ref (match_operand 4 "" "")) + (pc))) + (set (match_dup 0) + (plus:SI (match_dup 0) + (const_int -1))) + (unspec [(const_int 0)] UNSPEC_LSETUP_END) + (clobber (match_scratch:SI 5 ""))])] + "" + {bfin_hardware_loop ();}) + +(define_insn "loop_end" + [(set (pc) + (if_then_else (ne (match_operand:SI 0 "nonimmediate_operand" "+a*d,*b*v*f,m") + (const_int 1)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus (match_dup 0) + (const_int -1))) + (unspec [(const_int 0)] UNSPEC_LSETUP_END) + (clobber (match_scratch:SI 2 "=X,&r,&r"))] + "" + "@ + /* loop end %0 %l1 */ + # + #" + [(set_attr "length" "6,10,14")]) + +(define_split + [(set (pc) + (if_then_else (ne (match_operand:SI 0 "nondp_reg_or_memory_operand" "") + (const_int 1)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus (match_dup 0) + (const_int -1))) + (unspec [(const_int 0)] UNSPEC_LSETUP_END) + (clobber (match_scratch:SI 2 "=&r"))] + "reload_completed" + [(set (match_dup 2) (match_dup 0)) + (set (match_dup 2) (plus:SI (match_dup 2) (const_int -1))) + (set (match_dup 0) (match_dup 2)) + (set (reg:BI REG_CC) (eq:BI (match_dup 2) (const_int 0))) + (set (pc) + (if_then_else (eq (reg:BI REG_CC) + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] + "") + +(define_insn "lsetup_with_autoinit" + [(set (match_operand:SI 0 "lt_register_operand" "=t") + (label_ref (match_operand 1 "" ""))) + (set (match_operand:SI 2 "lb_register_operand" "=u") + (label_ref (match_operand 3 "" ""))) + (set (match_operand:SI 4 "lc_register_operand" "=k") + (match_operand:SI 5 "register_operand" "a"))] + "" + "LSETUP (%1, %3) %4 = %5;" + [(set_attr "length" "4")]) + +(define_insn "lsetup_without_autoinit" + [(set (match_operand:SI 0 "lt_register_operand" "=t") + (label_ref (match_operand 1 "" ""))) + (set (match_operand:SI 2 "lb_register_operand" "=u") + (label_ref (match_operand 3 "" ""))) + (use (match_operand:SI 4 "lc_register_operand" "k"))] + "" + "LSETUP (%1, %3) %4;" + [(set_attr "length" "4")]) + ;; Call instructions.. +;; The explicit MEM inside the UNSPEC prevents the compiler from moving +;; the load before a branch after a NULL test, or before a store that +;; initializes a function descriptor. + +(define_insn_and_split "load_funcdescsi" + [(set (match_operand:SI 0 "register_operand" "=a") + (unspec_volatile:SI [(mem:SI (match_operand:SI 1 "address_operand" "p"))] + UNSPEC_VOLATILE_LOAD_FUNCDESC))] + "" + "#" + "reload_completed" + [(set (match_dup 0) (mem:SI (match_dup 1)))]) + (define_expand "call" [(parallel [(call (match_operand:SI 0 "" "") (match_operand 1 "" "")) @@ -1539,6 +1674,102 @@ DONE; }) +(define_insn "*call_symbol_fdpic" + [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "Q")) + (match_operand 1 "general_operand" "g")) + (use (match_operand:SI 2 "register_operand" "Z")) + (use (match_operand 3 "" ""))] + "! SIBLING_CALL_P (insn) + && GET_CODE (operands[0]) == SYMBOL_REF + && !bfin_longcall_p (operands[0], INTVAL (operands[3]))" + "call %0;" + [(set_attr "type" "call") + (set_attr "length" "4")]) + +(define_insn "*sibcall_symbol_fdpic" + [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "Q")) + (match_operand 1 "general_operand" "g")) + (use (match_operand:SI 2 "register_operand" "Z")) + (use (match_operand 3 "" "")) + (return)] + "SIBLING_CALL_P (insn) + && GET_CODE (operands[0]) == SYMBOL_REF + && !bfin_longcall_p (operands[0], INTVAL (operands[3]))" + "jump.l %0;" + [(set_attr "type" "br") + (set_attr "length" "4")]) + +(define_insn "*call_value_symbol_fdpic" + [(set (match_operand 0 "register_operand" "=d") + (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "Q")) + (match_operand 2 "general_operand" "g"))) + (use (match_operand:SI 3 "register_operand" "Z")) + (use (match_operand 4 "" ""))] + "! SIBLING_CALL_P (insn) + && GET_CODE (operands[1]) == SYMBOL_REF + && !bfin_longcall_p (operands[1], INTVAL (operands[4]))" + "call %1;" + [(set_attr "type" "call") + (set_attr "length" "4")]) + +(define_insn "*sibcall_value_symbol_fdpic" + [(set (match_operand 0 "register_operand" "=d") + (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "Q")) + (match_operand 2 "general_operand" "g"))) + (use (match_operand:SI 3 "register_operand" "Z")) + (use (match_operand 4 "" "")) + (return)] + "SIBLING_CALL_P (insn) + && GET_CODE (operands[1]) == SYMBOL_REF + && !bfin_longcall_p (operands[1], INTVAL (operands[4]))" + "jump.l %1;" + [(set_attr "type" "br") + (set_attr "length" "4")]) + +(define_insn "*call_insn_fdpic" + [(call (mem:SI (match_operand:SI 0 "register_no_elim_operand" "Y")) + (match_operand 1 "general_operand" "g")) + (use (match_operand:SI 2 "register_operand" "Z")) + (use (match_operand 3 "" ""))] + "! SIBLING_CALL_P (insn)" + "call (%0);" + [(set_attr "type" "call") + (set_attr "length" "2")]) + +(define_insn "*sibcall_insn_fdpic" + [(call (mem:SI (match_operand:SI 0 "register_no_elim_operand" "Y")) + (match_operand 1 "general_operand" "g")) + (use (match_operand:SI 2 "register_operand" "Z")) + (use (match_operand 3 "" "")) + (return)] + "SIBLING_CALL_P (insn)" + "jump (%0);" + [(set_attr "type" "br") + (set_attr "length" "2")]) + +(define_insn "*call_value_insn_fdpic" + [(set (match_operand 0 "register_operand" "=d") + (call (mem:SI (match_operand:SI 1 "register_no_elim_operand" "Y")) + (match_operand 2 "general_operand" "g"))) + (use (match_operand:SI 3 "register_operand" "Z")) + (use (match_operand 4 "" ""))] + "! SIBLING_CALL_P (insn)" + "call (%1);" + [(set_attr "type" "call") + (set_attr "length" "2")]) + +(define_insn "*sibcall_value_insn_fdpic" + [(set (match_operand 0 "register_operand" "=d") + (call (mem:SI (match_operand:SI 1 "register_no_elim_operand" "Y")) + (match_operand 2 "general_operand" "g"))) + (use (match_operand:SI 3 "register_operand" "Z")) + (use (match_operand 4 "" "")) + (return)] + "SIBLING_CALL_P (insn)" + "jump (%1);" + [(set_attr "type" "br") + (set_attr "length" "2")]) + (define_insn "*call_symbol" [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "Q")) (match_operand 1 "general_operand" "g")) @@ -1648,11 +1879,15 @@ (set (mem:BLK (match_dup 3)) (mem:BLK (match_dup 4))) (use (match_dup 2)) - (clobber (match_scratch:HI 5 "=&d"))] + (clobber (match_scratch:HI 5 "=&d")) + (clobber (reg:SI REG_LT1)) + (clobber (reg:SI REG_LC1)) + (clobber (reg:SI REG_LB1))] "" "%5 = [%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || [%3++] = %5 || %5 = [%4++]; [%3++] = %5;" [(set_attr "type" "misc") - (set_attr "length" "16")]) + (set_attr "length" "16") + (set_attr "seq_insns" "multi")]) (define_insn "rep_movhi" [(set (match_operand:SI 0 "register_operand" "=&a") @@ -1667,11 +1902,15 @@ (set (mem:BLK (match_dup 3)) (mem:BLK (match_dup 4))) (use (match_dup 2)) - (clobber (match_scratch:HI 5 "=&d"))] + (clobber (match_scratch:HI 5 "=&d")) + (clobber (reg:SI REG_LT1)) + (clobber (reg:SI REG_LC1)) + (clobber (reg:SI REG_LB1))] "" "%h5 = W[%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || W [%3++] = %5 || %h5 = W [%4++]; W [%3++] = %5;" [(set_attr "type" "misc") - (set_attr "length" "16")]) + (set_attr "length" "16") + (set_attr "seq_insns" "multi")]) (define_expand "movmemsi" [(match_operand:BLK 0 "general_operand" "") @@ -2203,7 +2442,8 @@ "" "if !cc jump 4 (bp); excpt 3;" [(set_attr "type" "misc") - (set_attr "length" "4")]) + (set_attr "length" "4") + (set_attr "seq_insns" "multi")]) ;;; Vector instructions diff --git a/gcc/config/bfin/bfin.opt b/gcc/config/bfin/bfin.opt index 43f56c4d624..5fe54c9cfb7 100644 --- a/gcc/config/bfin/bfin.opt +++ b/gcc/config/bfin/bfin.opt @@ -47,3 +47,7 @@ ID of shared library to build mlong-calls Target Report Mask(LONG_CALLS) Avoid generating pc-relative calls; use indirection + +mfdpic +Target Report Mask(FDPIC) +Enable Function Descriptor PIC mode diff --git a/gcc/config/bfin/crti.s b/gcc/config/bfin/crti.s index 5a13df19bbd..c9753599986 100644 --- a/gcc/config/bfin/crti.s +++ b/gcc/config/bfin/crti.s @@ -40,6 +40,8 @@ Boston, MA 02110-1301, USA. */ __init: #if defined __ID_SHARED_LIB__ [--SP] = P5; +#elif defined __BFIN_FDPIC__ + [--SP] = P3; #endif LINK 12; #if defined __ID_SHARED_LIB__ @@ -51,6 +53,8 @@ __init: __fini: #if defined __ID_SHARED_LIB__ [--SP] = P5; +#elif defined __BFIN_FDPIC__ + [--SP] = P3; #endif LINK 12; #if defined __ID_SHARED_LIB__ diff --git a/gcc/config/bfin/crtn.s b/gcc/config/bfin/crtn.s index 69a17c0184e..06af2bea9e7 100644 --- a/gcc/config/bfin/crtn.s +++ b/gcc/config/bfin/crtn.s @@ -38,6 +38,8 @@ Boston, MA 02110-1301, USA. */ unlink; #if defined __ID_SHARED_LIB__ P5 = [SP++]; +#elif defined __BFIN_FDPIC__ + P3 = [SP++]; #endif rts; @@ -45,5 +47,7 @@ Boston, MA 02110-1301, USA. */ unlink; #if defined __ID_SHARED_LIB__ P5 = [SP++]; +#elif defined __BFIN_FDPIC__ + P3 = [SP++]; #endif rts; diff --git a/gcc/config/bfin/elf.h b/gcc/config/bfin/elf.h index 621b786c94d..39d06881dfb 100644 --- a/gcc/config/bfin/elf.h +++ b/gcc/config/bfin/elf.h @@ -7,7 +7,7 @@ sprintf (LABEL, "*%s%s$%d", LOCAL_LABEL_PREFIX, PREFIX, (int) NUM) #undef STARTFILE_SPEC -#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s crtlibid%O%s" +#define STARTFILE_SPEC "%{!shared: crt0%O%s} crti%O%s crtbegin%O%s crtlibid%O%s" #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend%O%s crtn%O%s" @@ -15,4 +15,11 @@ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "_" +#ifdef __BFIN_FDPIC__ +#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ +asm (SECTION_OP); \ +asm ("P3 = [SP + 20];\n\tcall " USER_LABEL_PREFIX #FUNC ";"); \ +asm (TEXT_SECTION_ASM_OP); +#endif + #define NO_IMPLICIT_EXTERN_C diff --git a/gcc/config/bfin/predicates.md b/gcc/config/bfin/predicates.md index eccee2be4d2..1415ea0ab06 100644 --- a/gcc/config/bfin/predicates.md +++ b/gcc/config/bfin/predicates.md @@ -76,12 +76,44 @@ return 1; }) +;; Return nonzero if OP is a LC register. +(define_predicate "lc_register_operand" + (and (match_code "reg") + (match_test "REGNO (op) == REG_LC0 || REGNO (op) == REG_LC1"))) + +;; Return nonzero if OP is a LT register. +(define_predicate "lt_register_operand" + (and (match_code "reg") + (match_test "REGNO (op) == REG_LT0 || REGNO (op) == REG_LT1"))) + +;; Return nonzero if OP is a LB register. +(define_predicate "lb_register_operand" + (and (match_code "reg") + (match_test "REGNO (op) == REG_LB0 || REGNO (op) == REG_LB1"))) + ;; Return nonzero if OP is a register or a 7 bit signed constant. (define_predicate "reg_or_7bit_operand" (ior (match_operand 0 "register_operand") (and (match_code "const_int") (match_test "CONST_7BIT_IMM_P (INTVAL (op))")))) +;; Return nonzero if OP is a register other than DREG and PREG. +(define_predicate "nondp_register_operand" + (match_operand 0 "register_operand") +{ + unsigned int regno; + if (GET_CODE (op) == SUBREG) + op = SUBREG_REG (op); + + regno = REGNO (op); + return (regno >= FIRST_PSEUDO_REGISTER || !DP_REGNO_P (regno)); +}) + +;; Return nonzero if OP is a register other than DREG and PREG, or MEM. +(define_predicate "nondp_reg_or_memory_operand" + (ior (match_operand 0 "nondp_register_operand") + (match_operand 0 "memory_operand"))) + ;; Used for secondary reloads, this function returns 1 if OP is of the ;; form (plus (fp) (const_int)). (define_predicate "fp_plus_const_operand" diff --git a/gcc/config/bfin/t-bfin-elf b/gcc/config/bfin/t-bfin-elf index 64e71b0d3cf..8b30cf62497 100644 --- a/gcc/config/bfin/t-bfin-elf +++ b/gcc/config/bfin/t-bfin-elf @@ -3,7 +3,7 @@ LIB1ASMSRC = bfin/lib1funcs.asm LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 -EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o crtlibid.o +EXTRA_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o FPBIT = fp-bit.c DPBIT = dp-bit.c @@ -19,10 +19,13 @@ fp-bit.c: $(srcdir)/config/fp-bit.c # it is fixed in binutils (if it is necessary). GCC_CFLAGS += -N -MULTILIB_OPTIONS=mid-shared-library +CRTSTUFF_T_CFLAGS = -fpic +TARGET_LIBGCC2_CFLAGS = -fpic + +MULTILIB_OPTIONS=mid-shared-library mfdpic MULTILIB_DEFAULTS= MULTILIB_DIRNAMES= -MULTILIB_EXCEPTIONS= +MULTILIB_EXCEPTIONS=mid-shared-library/mfdpic # Assemble startup files. $(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES) @@ -38,4 +41,4 @@ $(T)crtlibid.o: $(srcdir)/config/bfin/crtlibid.s $(GCC_PASSES) -c -o $(T)crtlibid.o -x assembler-with-cpp \ $(srcdir)/config/bfin/crtlibid.s -EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crti.o crtn.o crtlibid.o +EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o diff --git a/gcc/config/bfin/uclinux.h b/gcc/config/bfin/uclinux.h index 7476df8255a..57e062dd68e 100644 --- a/gcc/config/bfin/uclinux.h +++ b/gcc/config/bfin/uclinux.h @@ -4,7 +4,7 @@ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ - "crt1%O%s crti%O%s crtbegin%O%s crtlibid%O%s" + "%{!shared: crt1%O%s} crti%O%s crtbegin%O%s crtlibid%O%s" #undef ENDFILE_SPEC #define ENDFILE_SPEC \ @@ -13,4 +13,11 @@ #undef LIB_SPEC #define LIB_SPEC "%{pthread:-lpthread} -lc" +#ifdef __BFIN_FDPIC__ +#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ +asm (SECTION_OP); \ +asm ("P3 = [SP + 20];\n\tcall " USER_LABEL_PREFIX #FUNC ";"); \ +asm (TEXT_SECTION_ASM_OP); +#endif + #define NO_IMPLICIT_EXTERN_C diff --git a/gcc/config/darwin-64.c b/gcc/config/darwin-64.c new file mode 100644 index 00000000000..33094e30785 --- /dev/null +++ b/gcc/config/darwin-64.c @@ -0,0 +1,77 @@ +/* Functions shipped in the ppc64 and x86_64 version of libgcc_s.1.dylib + in older Mac OS X versions, preserved for backwards compatibility. + Copyright (C) 2006 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ + +#if defined (__ppc64__) || defined (__x86_64__) +/* Many of these functions have probably never been used by anyone + anywhere on these targets, but it's hard to prove this, so they're defined + here. None are actually necessary, as demonstrated below by defining + each function using the operation it implements. */ + +typedef long DI; +typedef unsigned long uDI; +typedef int SI; +typedef unsigned int uSI; +typedef int word_type __attribute__ ((mode (__word__))); + +DI __ashldi3 (DI x, word_type c); +DI __ashrdi3 (DI x, word_type c); +int __clzsi2 (uSI x); +word_type __cmpdi2 (DI x, DI y); +int __ctzsi2 (uSI x); +DI __divdi3 (DI x, DI y); +uDI __lshrdi3 (uDI x, word_type c); +DI __moddi3 (DI x, DI y); +DI __muldi3 (DI x, DI y); +DI __negdi2 (DI x); +int __paritysi2 (uSI x); +int __popcountsi2 (uSI x); +word_type __ucmpdi2 (uDI x, uDI y); +uDI __udivdi3 (uDI x, uDI y); +uDI __udivmoddi4 (uDI x, uDI y, uDI *r); +uDI __umoddi3 (uDI x, uDI y); + +DI __ashldi3 (DI x, word_type c) { return x << c; } +DI __ashrdi3 (DI x, word_type c) { return x >> c; } +int __clzsi2 (uSI x) { return __builtin_clz (x); } +word_type __cmpdi2 (DI x, DI y) { return x < y ? 0 : x == y ? 1 : 2; } +int __ctzsi2 (uSI x) { return __builtin_ctz (x); } +DI __divdi3 (DI x, DI y) { return x / y; } +uDI __lshrdi3 (uDI x, word_type c) { return x >> c; } +DI __moddi3 (DI x, DI y) { return x % y; } +DI __muldi3 (DI x, DI y) { return x * y; } +DI __negdi2 (DI x) { return -x; } +int __paritysi2 (uSI x) { return __builtin_parity (x); } +int __popcountsi2 (uSI x) { return __builtin_popcount (x); } +word_type __ucmpdi2 (uDI x, uDI y) { return x < y ? 0 : x == y ? 1 : 2; } +uDI __udivdi3 (uDI x, uDI y) { return x / y; } +uDI __udivmoddi4 (uDI x, uDI y, uDI *r) { *r = x % y; return x / y; } +uDI __umoddi3 (uDI x, uDI y) { return x % y; } + +#endif /* __ppc64__ || __x86_64__ */ diff --git a/gcc/config/darwin-sections.def b/gcc/config/darwin-sections.def index 89d6371ea6b..148b77511ea 100644 --- a/gcc/config/darwin-sections.def +++ b/gcc/config/darwin-sections.def @@ -14,6 +14,7 @@ DEF_SECTION (data_coal_section, SECTION_WRITE, DEF_SECTION (cstring_section, SECTION_MERGE, ".cstring", 0) DEF_SECTION (literal4_section, SECTION_MERGE, ".literal4", 0) DEF_SECTION (literal8_section, SECTION_MERGE, ".literal8", 0) +DEF_SECTION (literal16_section, SECTION_MERGE, ".literal16", 0) DEF_SECTION (constructor_section, 0, ".constructor", 0) DEF_SECTION (mod_init_section, 0, ".mod_init_func", 0) DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0) diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 5ffe744ef78..e486594b702 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -1136,6 +1136,11 @@ machopic_select_section (tree exp, int reloc, TREE_INT_CST_LOW (size) == 8 && TREE_INT_CST_HIGH (size) == 0) return darwin_sections[literal8_section]; + else if (TARGET_64BIT + && TREE_CODE (size) == INTEGER_CST + && TREE_INT_CST_LOW (size) == 16 + && TREE_INT_CST_HIGH (size) == 0) + return darwin_sections[literal16_section]; else return base_section; } @@ -1234,6 +1239,12 @@ machopic_select_rtx_section (enum machine_mode mode, rtx x, && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)) return darwin_sections[literal4_section]; + else if (TARGET_64BIT + && GET_MODE_SIZE (mode) == 16 + && (GET_CODE (x) == CONST_INT + || GET_CODE (x) == CONST_DOUBLE + || GET_CODE (x) == CONST_VECTOR)) + return darwin_sections[literal16_section]; else if (MACHOPIC_INDIRECT && (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == CONST @@ -1524,6 +1535,8 @@ darwin_binds_local_p (tree decl) return default_binds_local_p_1 (decl, 0); } +#if 0 +/* See TARGET_ASM_OUTPUT_ANCHOR for why we can't do this yet. */ /* The Darwin's implementation of TARGET_ASM_OUTPUT_ANCHOR. Define the anchor relative to ".", the current section position. We cannot use the default one because ASM_OUTPUT_DEF is wrong for Darwin. */ @@ -1536,6 +1549,7 @@ darwin_asm_output_anchor (rtx symbol) fprintf (asm_out_file, ", . + " HOST_WIDE_INT_PRINT_DEC "\n", SYMBOL_REF_BLOCK_OFFSET (symbol)); } +#endif /* Set the darwin specific attributes on TYPE. */ void diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index dcfab427bdc..75623bbe3f2 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -698,7 +698,9 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS]; /* Set on a symbol with SYMBOL_FLAG_FUNCTION or MACHO_SYMBOL_FLAG_VARIABLE to indicate that the function or - variable has been defined in this translation unit. */ + variable has been defined in this translation unit. + When porting Mach-O to new architectures you need to make + sure these aren't clobbered by the backend. */ #define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP) #define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1) @@ -812,8 +814,6 @@ enum machopic_addr_class { goto DONE; \ } -#define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor - /* Experimentally, putting jump tables in text is faster on SPEC. Also this is needed for correctness for coalesced functions. */ @@ -827,6 +827,9 @@ enum machopic_addr_class { #undef TARGET_ASM_NAMED_SECTION #define TARGET_ASM_NAMED_SECTION darwin_asm_named_section +/* Handle pragma weak and pragma pack. */ +#define HANDLE_SYSV_PRAGMA 1 + #define DARWIN_REGISTER_TARGET_PRAGMAS() \ do { \ c_register_pragma (0, "mark", darwin_pragma_ignore); \ @@ -852,6 +855,7 @@ void add_framework_path (char *); #define TARGET_POSIX_IO /* All new versions of Darwin have C99 functions. */ + #define TARGET_C99_FUNCTIONS 1 #define WINT_TYPE "int" @@ -859,7 +863,20 @@ void add_framework_path (char *); /* Every program on darwin links against libSystem which contains the pthread routines, so there's no need to explicitly call out when doing threaded work. */ + #undef GOMP_SELF_SPECS #define GOMP_SELF_SPECS "" +/* Darwin can't support anchors until we can cope with the adjustments + to size that ASM_DECLARE_OBJECT_NAME and ASM_DECLARE_CONSTANT_NAME + when outputting members of an anchor block and the linker can be + taught to keep them together or we find some other suitable + code-gen technique. */ + +#if 0 +#define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor +#else +#define TARGET_ASM_OUTPUT_ANCHOR NULL +#endif + #endif /* CONFIG_DARWIN_H */ diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h index 31e309d9b07..a2bd49f909a 100644 --- a/gcc/config/elfos.h +++ b/gcc/config/elfos.h @@ -429,14 +429,15 @@ Boston, MA 02110-1301, USA. */ #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ do \ { \ - register const unsigned char *_ascii_bytes = \ + const unsigned char *_ascii_bytes = \ (const unsigned char *) (STR); \ - register const unsigned char *limit = _ascii_bytes + (LENGTH); \ - register unsigned bytes_in_chunk = 0; \ + const unsigned char *limit = _ascii_bytes + (LENGTH); \ + const unsigned char *last_null = NULL; \ + unsigned bytes_in_chunk = 0; \ \ for (; _ascii_bytes < limit; _ascii_bytes++) \ { \ - register const unsigned char *p; \ + const unsigned char *p; \ \ if (bytes_in_chunk >= 60) \ { \ @@ -444,8 +445,14 @@ Boston, MA 02110-1301, USA. */ bytes_in_chunk = 0; \ } \ \ - for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ - continue; \ + if (_ascii_bytes > last_null) \ + { \ + for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ + continue; \ + last_null = p; \ + } \ + else \ + p = last_null; \ \ if (p < limit && (p - _ascii_bytes) <= (long)STRING_LIMIT) \ { \ diff --git a/gcc/config/fr30/fr30.md b/gcc/config/fr30/fr30.md index 0deda961e85..c40a7097d60 100644 --- a/gcc/config/fr30/fr30.md +++ b/gcc/config/fr30/fr30.md @@ -35,7 +35,7 @@ ;; Define an attribute to be used by the delay slot code. -;; An instruction by default is considered to be 'delyabable' +;; An instruction by default is considered to be 'delayable' ;; that is, it can be placed into a delay slot, but it is not ;; itself a delayed branch type instruction. An instruction ;; whose type is 'delayed' is one which has a delay slot, and diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h index 9c1c1e2d39f..6c53a4dbe99 100644 --- a/gcc/config/frv/frv.h +++ b/gcc/config/frv/frv.h @@ -1376,6 +1376,9 @@ extern enum reg_class reg_class_from_letter[]; : (C) == 'U' ? EXTRA_CONSTRAINT_FOR_U (VALUE) \ : 0) +#define EXTRA_MEMORY_CONSTRAINT(C,STR) \ + ((C) == 'U' || (C) == 'R' || (C) == 'T') + #define CONSTRAINT_LEN(C, STR) \ ((C) == 'D' ? 3 : DEFAULT_CONSTRAINT_LEN ((C), (STR))) diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 9dd8b76bfb2..cfda1f3d098 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -5746,4 +5746,7 @@ h8300_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED) #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG h8300_reorg +#undef TARGET_DEFAULT_TARGET_FLAGS +#define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT + struct gcc_target targetm = TARGET_INITIALIZER; diff --git a/gcc/config/i386/crtfastmath.c b/gcc/config/i386/crtfastmath.c index fad1d574816..5991442686a 100644 --- a/gcc/config/i386/crtfastmath.c +++ b/gcc/config/i386/crtfastmath.c @@ -38,6 +38,12 @@ #define SSE (1 << 25) static void __attribute__((constructor)) +#ifndef __x86_64__ +/* The i386 ABI only requires 4-byte stack alignment, so this is necessary + to make sure the fxsave struct gets correct alignment. + See PR27537 and PR28621. */ +__attribute__ ((force_align_arg_pointer)) +#endif set_fast_math (void) { #ifndef __x86_64__ diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 1fe8e4e3f82..957c02eaf31 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -310,6 +310,16 @@ extern int i386_pe_dllimport_name_p (const char *); #undef BIGGEST_ALIGNMENT #define BIGGEST_ALIGNMENT 128 +/* Biggest alignment supported by the object file format of this + machine. Use this macro to limit the alignment which can be + specified using the `__attribute__ ((aligned (N)))' construct. If + not defined, the default value is `BIGGEST_ALIGNMENT'. */ +#undef MAX_OFILE_ALIGNMENT +/* IMAGE_SCN_ALIGN_8192BYTES is the largest section alignment flag + specified in the PECOFF60 spec. Native MS compiler also limits + user-specified alignment to 8192 bytes. */ +#define MAX_OFILE_ALIGNMENT (8192 * 8) + /* Native complier aligns internal doubles in structures on dword boundaries. */ #undef BIGGEST_FIELD_ALIGNMENT #define BIGGEST_FIELD_ALIGNMENT 64 diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 63e7bfde542..74d0f8c92ac 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -25,18 +25,41 @@ Boston, MA 02110-1301, USA. */ #define TARGET_VERSION fprintf (stderr, " (i686 Darwin)"); +#undef TARGET_64BIT +#define TARGET_64BIT (target_flags & MASK_64BIT) + +#ifdef IN_LIBGCC2 +#undef TARGET_64BIT +#ifdef __x86_64__ +#define TARGET_64BIT 1 +#else +#define TARGET_64BIT 0 +#endif +#endif + #undef TARGET_FPMATH_DEFAULT #define TARGET_FPMATH_DEFAULT (TARGET_SSE ? FPMATH_SSE : FPMATH_387) #define TARGET_OS_CPP_BUILTINS() \ do \ { \ - builtin_define ("__i386__"); \ builtin_define ("__LITTLE_ENDIAN__"); \ darwin_cpp_builtins (pfile); \ } \ while (0) +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +#undef MAX_BITS_PER_WORD +#define MAX_BITS_PER_WORD 64 + #undef FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN #define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN (0) @@ -48,13 +71,16 @@ Boston, MA 02110-1301, USA. */ %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }}" #undef ASM_SPEC -#define ASM_SPEC "-arch i386 -force_cpusubtype_ALL" +#define ASM_SPEC "-arch %(darwin_arch) -force_cpusubtype_ALL" + +#define DARWIN_ARCH_SPEC "%{m64:x86_64;:i386}" +#define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC #undef SUBTARGET_EXTRA_SPECS -#define SUBTARGET_EXTRA_SPECS \ - { "darwin_arch", "i386" }, \ - { "darwin_crt2", "" }, \ - { "darwin_subarch", "i386" }, +#define SUBTARGET_EXTRA_SPECS \ + { "darwin_arch", DARWIN_ARCH_SPEC }, \ + { "darwin_crt2", "" }, \ + { "darwin_subarch", DARWIN_SUBARCH_SPEC }, /* Use the following macro for any Darwin/x86-specific command-line option translation. */ @@ -85,7 +111,7 @@ extern void darwin_x86_file_end (void); /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ -#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE | MASK_ALIGN_DOUBLE) +#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE) /* For now, disable dynamic-no-pic. We'll need to go through i386.c with a fine-tooth comb looking for refs to flag_pic! */ @@ -109,7 +135,7 @@ extern void darwin_x86_file_end (void); #define ASM_BYTE_OP "\t.byte\t" #define ASM_SHORT "\t.word\t" #define ASM_LONG "\t.long\t" -/* Darwin as doesn't do ".quad". */ +#define ASM_QUAD "\t.quad\t" #define SUBTARGET_ENCODE_SECTION_INFO darwin_encode_section_info @@ -144,7 +170,7 @@ extern void darwin_x86_file_end (void); #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ do { \ - if (MACHOPIC_INDIRECT) \ + if (MACHOPIC_INDIRECT && !TARGET_64BIT) \ { \ const char *name = machopic_mcount_stub_name (); \ fprintf (FILE, "\tcall %s\n", name+1); /* skip '&' */ \ @@ -153,6 +179,10 @@ extern void darwin_x86_file_end (void); else fprintf (FILE, "\tcall mcount\n"); \ } while (0) +/* Darwin on x86_64 uses dwarf-2 by default. */ +#undef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE (TARGET_64BIT ? DWARF2_DEBUG : DBX_DEBUG) + /* Darwin uses the standard DWARF register numbers but the default register numbers for STABS. Fortunately for 64-bit code the default and the standard are the same. */ @@ -223,3 +253,32 @@ __enable_execute_stack (void *addr) \ #undef TARGET_SET_DEFAULT_TYPE_ATTRIBUTES #define TARGET_SET_DEFAULT_TYPE_ATTRIBUTES darwin_set_default_type_attributes + +/* For 64-bit, we need to add 4 because @GOTPCREL is relative to the + end of the instruction, but without the 4 we'd only have the right + address for the start of the instruction. */ +#undef ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX +#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ + if (TARGET_64BIT) \ + { \ + if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_pcrel) \ + { \ + fputs (ASM_LONG, FILE); \ + assemble_name (FILE, XSTR (ADDR, 0)); \ + fputs ("+4@GOTPCREL", FILE); \ + goto DONE; \ + } \ + } \ + else \ + { \ + if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) \ + { \ + darwin_non_lazy_pcrel (FILE, ADDR); \ + goto DONE; \ + } \ + } + +/* This needs to move since i386 uses the first flag and other flags are + used in Mach-O. */ +#undef MACHO_SYMBOL_FLAG_VARIABLE +#define MACHO_SYMBOL_FLAG_VARIABLE ((SYMBOL_FLAG_MACH_DEP) << 3) diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c index 8ea242b0a40..fc5a2cf6103 100644 --- a/gcc/config/i386/gmon-sol2.c +++ b/gcc/config/i386/gmon-sol2.c @@ -53,22 +53,19 @@ * This code could easily be integrated with the original gmon.c and perhaps * should be. */ +#include "tconfig.h" +#include "tsystem.h" +#include /* for creat() */ -#ifndef lint -static char sccsid[] = "@(#)gmon.c 5.3 (Berkeley) 5/22/91"; -#endif /* not lint */ - -#if 0 -#include - -#endif #ifdef DEBUG #include #endif -#if 0 -#include "i386/gmon.h" -#else +static void moncontrol (int); +extern void monstartup (char *, char *); +extern void _mcleanup (void); +extern void internal_mcount (void); + struct phdr { char *lpc; @@ -90,6 +87,7 @@ struct tostruct { long count; unsigned short link; }; + struct rawarc { unsigned long raw_frompc; unsigned long raw_selfpc; @@ -97,14 +95,9 @@ struct rawarc { }; #define ROUNDDOWN(x,y) (((x)/(y))*(y)) #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) -#endif /* char *minbrk; */ -#ifdef __alpha -extern char *sbrk (); -#endif - /* * froms is actually a bunch of unsigned shorts indexing tos */ @@ -126,9 +119,8 @@ static int s_scale; extern int errno; -monstartup(lowpc, highpc) - char *lowpc; - char *highpc; +void +monstartup(char *lowpc, char *highpc) { int monsize; char *buffer; @@ -139,10 +131,10 @@ monstartup(lowpc, highpc) * so the rest of the scaling (here and in gprof) stays in ints. */ lowpc = (char *) - ROUNDDOWN((unsigned)lowpc, HISTFRACTION*sizeof(HISTCOUNTER)); + ROUNDDOWN((unsigned long)lowpc, HISTFRACTION*sizeof(HISTCOUNTER)); s_lowpc = lowpc; highpc = (char *) - ROUNDUP((unsigned)highpc, HISTFRACTION*sizeof(HISTCOUNTER)); + ROUNDUP((unsigned long)highpc, HISTFRACTION*sizeof(HISTCOUNTER)); s_highpc = highpc; s_textsize = highpc - lowpc; monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr); @@ -203,7 +195,8 @@ monstartup(lowpc, highpc) moncontrol(1); } -_mcleanup() +void +_mcleanup (void) { int fd; int fromindex; @@ -220,7 +213,7 @@ _mcleanup() } # ifdef DEBUG fprintf( stderr , "[mcleanup] sbuf 0x%x ssiz %d\n" , sbuf , ssiz ); -# endif DEBUG +# endif /* DEBUG */ write( fd , sbuf , ssiz ); endfrom = s_textsize / (HASHFRACTION * sizeof(*froms)); @@ -234,7 +227,7 @@ _mcleanup() fprintf( stderr , "[mcleanup] frompc 0x%x selfpc 0x%x count %d\n" , frompc , tos[toindex].selfpc , tos[toindex].count ); -# endif DEBUG +# endif /* DEBUG */ rawarc.raw_frompc = (unsigned long) frompc; rawarc.raw_selfpc = (unsigned long) tos[toindex].selfpc; rawarc.raw_count = tos[toindex].count; @@ -249,7 +242,8 @@ asm(".globl _mcount; _mcount: jmp internal_mcount"); /* This is for compatibility with old versions of gcc which used mcount. */ asm(".globl mcount; mcount: jmp internal_mcount"); -internal_mcount() +void +internal_mcount (void) { register char *selfpc; register unsigned short *frompcindex; @@ -271,10 +265,10 @@ internal_mcount() frompcindex = (void *) __builtin_return_address (1); if(!already_setup) { - extern etext(); + extern char etext[]; already_setup = 1; /* monstartup(0, etext); */ - monstartup(0x08040000, etext); + monstartup((char*)0x08040000, etext); #ifdef USE_ONEXIT on_exit(_mcleanup, 0); #else @@ -387,15 +381,15 @@ overflow: * profiling is what mcount checks to see if * all the data structures are ready. */ -moncontrol(mode) - int mode; +static void +moncontrol(int mode) { if (mode) { /* start */ profil((unsigned short *)(sbuf + sizeof(struct phdr)), ssiz - sizeof(struct phdr), - (int)s_lowpc, s_scale); + (long)s_lowpc, s_scale); profiling = 0; } else { diff --git a/gcc/config/i386/i386-interix.h b/gcc/config/i386/i386-interix.h index 75e1e2b918f..5e9f7dadbc1 100644 --- a/gcc/config/i386/i386-interix.h +++ b/gcc/config/i386/i386-interix.h @@ -84,7 +84,7 @@ Boston, MA 02110-1301, USA. */ #undef CPP_SPEC /* Write out the correct language type definition for the header files. Unless we have assembler language, write out the symbols for C. - mieee is an Alpha specific variant. Cross polination a bad idea. + mieee is an Alpha specific variant. Cross pollination a bad idea. */ #define CPP_SPEC "-remap %{posix:-D_POSIX_SOURCE} \ -isystem %$INTERIX_ROOT/usr/include" diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 315487e8fd4..6b9ed89c75b 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -43,6 +43,7 @@ extern int standard_80387_constant_p (rtx); extern const char *standard_80387_constant_opcode (rtx); extern rtx standard_80387_constant_rtx (int); extern int standard_sse_constant_p (rtx); +extern const char *standard_sse_constant_opcode (rtx, rtx); extern int symbolic_reference_mentioned_p (rtx); extern bool extended_reg_mentioned_p (rtx); extern bool x86_extended_QIreg_mentioned_p (rtx); @@ -173,7 +174,7 @@ extern int ix86_data_alignment (tree, int); extern int ix86_local_alignment (tree, int); extern int ix86_constant_alignment (tree, int); extern tree ix86_handle_shared_attribute (tree *, tree, tree, int, bool *); -extern tree ix86_handle_selectany_attribute (tree *, tree, tree, int, bool *); +extern tree ix86_handle_selectany_attribute (tree *, tree, tree, int, bool *); extern unsigned int i386_pe_section_type_flags (tree, const char *, int); extern void i386_pe_asm_named_section (const char *, unsigned int, tree); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ec88a76551e..be17c02a246 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -68,7 +68,7 @@ Boston, MA 02110-1301, USA. */ #define COSTS_N_BYTES(N) ((N) * 2) static const -struct processor_costs size_cost = { /* costs for tunning for size */ +struct processor_costs size_cost = { /* costs for tuning for size */ COSTS_N_BYTES (2), /* cost of an add instruction */ COSTS_N_BYTES (3), /* cost of a lea instruction */ COSTS_N_BYTES (2), /* variable shift costs */ @@ -604,7 +604,7 @@ struct processor_costs generic64_cost = { COSTS_N_INSNS (1), /* cost of an add instruction */ /* On all chips taken into consideration lea is 2 cycles and more. With this cost however our current implementation of synth_mult results in - use of unnecesary temporary registers causing regression on several + use of unnecessary temporary registers causing regression on several SPECfp benchmarks. */ COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */ COSTS_N_INSNS (1), /* variable shift costs */ @@ -742,7 +742,7 @@ const int x86_movx = m_ATHLON_K8 | m_PPRO | m_PENT4 | m_NOCONA | m_GENERIC /* m_ const int x86_double_with_add = ~m_386; const int x86_use_bit_test = m_386; const int x86_unroll_strlen = m_486 | m_PENT | m_PPRO | m_ATHLON_K8 | m_K6 | m_GENERIC; -const int x86_cmove = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA; +const int x86_cmove = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA; const int x86_fisttp = m_NOCONA; const int x86_3dnow_a = m_ATHLON_K8; const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC; @@ -761,6 +761,7 @@ const int x86_use_sahf = m_PPRO | m_K6 | m_PENT4 | m_NOCONA | m_GENERIC32; /*m_G with partial reg. dependencies used by Athlon/P4 based chips, it is better to leave it off for generic32 for now. */ const int x86_partial_reg_stall = m_PPRO; +const int x86_partial_flag_reg_stall = m_GENERIC; const int x86_use_himode_fiop = m_386 | m_486 | m_K6; const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8 | m_PENT | m_GENERIC); const int x86_use_mov0 = m_K6; @@ -1537,12 +1538,17 @@ override_options (void) SUBTARGET_OVERRIDE_OPTIONS; #endif + /* -fPIC is the default for x86_64. */ + if (TARGET_MACHO && TARGET_64BIT) + flag_pic = 2; + /* Set the default values for switches whose default depends on TARGET_64BIT in case they weren't overwritten by command line options. */ if (TARGET_64BIT) { + /* Mach-O doesn't support omitting the frame pointer for now. */ if (flag_omit_frame_pointer == 2) - flag_omit_frame_pointer = 1; + flag_omit_frame_pointer = (TARGET_MACHO ? 0 : 1); if (flag_asynchronous_unwind_tables == 2) flag_asynchronous_unwind_tables = 1; if (flag_pcc_struct_return == 2) @@ -1798,22 +1804,6 @@ override_options (void) align_functions = processor_target_table[ix86_tune].align_func; } - /* Validate -mpreferred-stack-boundary= value, or provide default. - The default of 128 bits is for Pentium III's SSE __m128, but we - don't want additional code to keep the stack aligned when - optimizing for code size. */ - ix86_preferred_stack_boundary = ((TARGET_64BIT || TARGET_MACHO || !optimize_size) - ? 128 : 32); - if (ix86_preferred_stack_boundary_string) - { - i = atoi (ix86_preferred_stack_boundary_string); - if (i < (TARGET_64BIT ? 4 : 2) || i > 12) - error ("-mpreferred-stack-boundary=%d is not between %d and 12", i, - TARGET_64BIT ? 4 : 2); - else - ix86_preferred_stack_boundary = (1 << i) * BITS_PER_UNIT; - } - /* Validate -mbranch-cost= value, or provide default. */ ix86_branch_cost = ix86_cost->branch_cost; if (ix86_branch_cost_string) @@ -1908,6 +1898,23 @@ override_options (void) target_flags |= MASK_NO_RED_ZONE; } + /* Validate -mpreferred-stack-boundary= value, or provide default. + The default of 128 bits is for Pentium III's SSE __m128, but we + don't want additional code to keep the stack aligned when + optimizing for code size. */ + ix86_preferred_stack_boundary + = (TARGET_64BIT || TARGET_MACHO || TARGET_SSE || !optimize_size) + ? 128 : 32; + if (ix86_preferred_stack_boundary_string) + { + i = atoi (ix86_preferred_stack_boundary_string); + if (i < (TARGET_64BIT ? 4 : 2) || i > 12) + error ("-mpreferred-stack-boundary=%d is not between %d and 12", i, + TARGET_64BIT ? 4 : 2); + else + ix86_preferred_stack_boundary = (1 << i) * BITS_PER_UNIT; + } + /* Accept -msseregparm only if at least SSE support is enabled. */ if (TARGET_SSEREGPARM && ! TARGET_SSE) @@ -2784,7 +2791,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */ When we have only some of our vector isa extensions enabled, then there are some modes for which vector_mode_supported_p is false. For these modes, the generic vector support in gcc will choose some non-vector mode - in order to implement the type. By computing the natural mode, we'll + in order to implement the type. By computing the natural mode, we'll select the proper ABI location for the operand and not depend on whatever the middle-end decides to do with these vector types. */ @@ -3026,10 +3033,10 @@ classify_argument (enum machine_mode mode, tree type, subclasses[0] = X86_64_SSE_CLASS; if (subclasses[0] == X86_64_INTEGERSI_CLASS && bytes != 4) subclasses[0] = X86_64_INTEGER_CLASS; - + for (i = 0; i < words; i++) classes[i] = subclasses[i % num]; - + break; } case UNION_TYPE: @@ -3045,6 +3052,10 @@ classify_argument (enum machine_mode mode, tree type, if (TREE_CODE (field) == FIELD_DECL) { int num; + + if (TREE_TYPE (field) == error_mark_node) + continue; + num = classify_argument (TYPE_MODE (TREE_TYPE (field)), TREE_TYPE (field), subclasses, bit_offset); @@ -3183,12 +3194,12 @@ classify_argument (enum machine_mode mode, tree type, return 0; default: gcc_assert (VECTOR_MODE_P (mode)); - + if (bytes > 16) return 0; - + gcc_assert (GET_MODE_CLASS (GET_MODE_INNER (mode)) == MODE_INT); - + if (bit_offset + GET_MODE_BITSIZE (mode) <= 32) classes[0] = X86_64_INTEGERSI_CLASS; else @@ -3247,6 +3258,11 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, tree type, int in_return, int nintregs, int nsseregs, const int *intreg, int sse_regno) { + /* The following variables hold the static issued_error state. */ + static bool issued_sse_arg_error; + static bool issued_sse_ret_error; + static bool issued_x87_ret_error; + enum machine_mode tmpmode; int bytes = (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); @@ -3285,18 +3301,38 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, some less clueful developer tries to use floating-point anyway. */ if (needed_sseregs && !TARGET_SSE) { - static bool issued_error; - if (!issued_error) + if (in_return) { - issued_error = true; - if (in_return) - error ("SSE register return with SSE disabled"); - else - error ("SSE register argument with SSE disabled"); + if (!issued_sse_ret_error) + { + error ("SSE register return with SSE disabled"); + issued_sse_ret_error = true; + } + } + else if (!issued_sse_arg_error) + { + error ("SSE register argument with SSE disabled"); + issued_sse_arg_error = true; } return NULL; } + /* Likewise, error if the ABI requires us to return values in the + x87 registers and the user specified -mno-80387. */ + if (!TARGET_80387 && in_return) + for (i = 0; i < n; i++) + if (class[i] == X86_64_X87_CLASS + || class[i] == X86_64_X87UP_CLASS + || class[i] == X86_64_COMPLEX_X87_CLASS) + { + if (!issued_x87_ret_error) + { + error ("x87 register return with x87 disabled"); + issued_x87_ret_error = true; + } + return NULL; + } + /* First construct simple cases. Avoid SCmode, since we want to use single register to pass this type. */ if (n == 1 && mode != SCmode) @@ -3697,12 +3733,12 @@ contains_128bit_aligned_vector_p (tree type) case QUAL_UNION_TYPE: { tree field; - + if (TYPE_BINFO (type)) { tree binfo, base_binfo; int i; - + for (binfo = TYPE_BINFO (type), i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) if (contains_128bit_aligned_vector_p @@ -3724,7 +3760,7 @@ contains_128bit_aligned_vector_p (tree type) if (contains_128bit_aligned_vector_p (TREE_TYPE (type))) return true; break; - + default: gcc_unreachable (); } @@ -3951,14 +3987,16 @@ ix86_value_regno (enum machine_mode mode, tree func, tree fntype) gcc_assert (!TARGET_64BIT); /* 8-byte vector modes in %mm0. See ix86_return_in_memory for where - we prevent this case when mmx is not available. */ - if ((VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)) - return FIRST_MMX_REG; + we normally prevent this case when mmx is not available. However + some ABIs may require the result to be returned like DImode. */ + if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8) + return TARGET_MMX ? FIRST_MMX_REG : 0; /* 16-byte vector modes in %xmm0. See ix86_return_in_memory for where - we prevent this case when sse is not available. */ + we prevent this case when sse is not available. However some ABIs + may require the result to be returned like integer TImode. */ if (mode == TImode || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16)) - return FIRST_SSE_REG; + return TARGET_SSE ? FIRST_SSE_REG : 0; /* Decimal floating point values can go in %eax, unlike other float modes. */ if (DECIMAL_FLOAT_MODE_P (mode)) @@ -4593,14 +4631,60 @@ standard_80387_constant_rtx (int idx) XFmode); } +/* Return 1 if mode is a valid mode for sse. */ +static int +standard_sse_mode_p (enum machine_mode mode) +{ + switch (mode) + { + case V16QImode: + case V8HImode: + case V4SImode: + case V2DImode: + case V4SFmode: + case V2DFmode: + return 1; + + default: + return 0; + } +} + /* Return 1 if X is FP constant we can load to SSE register w/o using memory. */ int standard_sse_constant_p (rtx x) { - if (x == const0_rtx) + enum machine_mode mode = GET_MODE (x); + + if (x == const0_rtx || x == CONST0_RTX (GET_MODE (x))) return 1; - return (x == CONST0_RTX (GET_MODE (x))); + if (vector_all_ones_operand (x, mode) + && standard_sse_mode_p (mode)) + return TARGET_SSE2 ? 2 : -1; + + return 0; +} + +/* Return the opcode of the special instruction to be used to load + the constant X. */ + +const char * +standard_sse_constant_opcode (rtx insn, rtx x) +{ + switch (standard_sse_constant_p (x)) + { + case 1: + if (get_attr_mode (insn) == MODE_V4SF) + return "xorps\t%0, %0"; + else if (get_attr_mode (insn) == MODE_V2DF) + return "xorpd\t%0, %0"; + else + return "pxor\t%0, %0"; + case 2: + return "pcmpeqd\t%0, %0"; + } + gcc_unreachable (); } /* Returns 1 if OP contains a symbol reference */ @@ -4710,6 +4794,8 @@ static int pic_labels_used; static void get_pc_thunk_name (char name[32], unsigned int regno) { + gcc_assert (!TARGET_64BIT); + if (USE_HIDDEN_LINKONCE) sprintf (name, "__i686.get_pc_thunk.%s", reg_names[regno]); else @@ -4949,7 +5035,7 @@ ix86_initial_elimination_offset (int from, int to) if (from == ARG_POINTER_REGNUM) return frame.stack_pointer_offset; - + gcc_assert (from == FRAME_POINTER_REGNUM); return frame.stack_pointer_offset - frame.frame_pointer_offset; } @@ -5289,7 +5375,7 @@ ix86_expand_prologue (void) /* And here we cheat like madmen with the unwind info. We force the cfa register back to sp+4, which is exactly what it was at the start of the function. Re-pushing the return address results in - the return at the same spot relative to the cfa, and thus is + the return at the same spot relative to the cfa, and thus is correct wrt the unwind info. */ x = cfun->machine->force_align_arg_pointer; x = gen_frame_mem (Pmode, plus_constant (x, -4)); @@ -5625,6 +5711,23 @@ ix86_output_function_epilogue (FILE *file ATTRIBUTE_UNUSED, { if (pic_offset_table_rtx) REGNO (pic_offset_table_rtx) = REAL_PIC_OFFSET_TABLE_REGNUM; +#if TARGET_MACHO + /* Mach-O doesn't support labels at the end of objects, so if + it looks like we might want one, insert a NOP. */ + { + rtx insn = get_last_insn (); + while (insn + && NOTE_P (insn) + && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED_LABEL) + insn = PREV_INSN (insn); + if (insn + && (LABEL_P (insn) + || (NOTE_P (insn) + && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))) + fputs ("\tnop\n", file); + } +#endif + } /* Extract the parts of an RTL expression that is a valid memory address @@ -6079,7 +6182,7 @@ legitimate_pic_address_disp_p (rtx disp) if (GET_CODE (op1) != CONST_INT || INTVAL (op1) >= 16*1024*1024 || INTVAL (op1) < -16*1024*1024) - break; + break; if (GET_CODE (op0) == LABEL_REF) return true; if (GET_CODE (op0) != SYMBOL_REF) @@ -6214,7 +6317,7 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) { rtx reg; reason_rtx = base; - + if (REG_P (base)) reg = base; else if (GET_CODE (base) == SUBREG @@ -6314,7 +6417,7 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) goto is_legitimate_pic; reason = "64bit address unspec"; goto report_error; - + case UNSPEC_GOTPCREL: gcc_assert (flag_pic); goto is_legitimate_pic; @@ -6331,12 +6434,16 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) goto report_error; } - else if (flag_pic && (SYMBOLIC_CONST (disp) + else if (SYMBOLIC_CONST (disp) + && (flag_pic + || (TARGET_MACHO #if TARGET_MACHO - && !machopic_operand_p (disp) + && MACHOPIC_INDIRECT + && !machopic_operand_p (disp) #endif - )) + ))) { + is_legitimate_pic: if (TARGET_64BIT && (index || base)) { @@ -6449,10 +6556,13 @@ legitimize_pic_address (rtx orig, rtx reg) rtx base; #if TARGET_MACHO - if (reg == 0) - reg = gen_reg_rtx (Pmode); - /* Use the generic Mach-O PIC machinery. */ - return machopic_legitimize_pic_address (orig, GET_MODE (orig), reg); + if (TARGET_MACHO && !TARGET_64BIT) + { + if (reg == 0) + reg = gen_reg_rtx (Pmode); + /* Use the generic Mach-O PIC machinery. */ + return machopic_legitimize_pic_address (orig, GET_MODE (orig), reg); + } #endif if (TARGET_64BIT && legitimate_pic_address_disp_p (addr)) @@ -6721,15 +6831,22 @@ legitimize_tls_address (rtx x, enum tls_model model, int for_mov) { rtx x = ix86_tls_module_base (); - base = force_reg (Pmode, gen_rtx_PLUS (Pmode, tp, base)); - - set_unique_reg_note (get_last_insn (), REG_EQUIV, x); + set_unique_reg_note (get_last_insn (), REG_EQUIV, + gen_rtx_MINUS (Pmode, x, tp)); } off = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, x), UNSPEC_DTPOFF); off = gen_rtx_CONST (Pmode, off); dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, off)); + + if (TARGET_GNU2_TLS) + { + dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, dest, tp)); + + set_unique_reg_note (get_last_insn (), REG_EQUIV, x); + } + break; case TLS_MODEL_INITIAL_EXEC: @@ -7067,7 +7184,7 @@ output_pic_addr_const (FILE *file, rtx x, int code) putc ('+', file); output_pic_addr_const (file, XEXP (x, 1), code); } - else + else { gcc_assert (GET_CODE (XEXP (x, 1)) == CONST_INT); output_pic_addr_const (file, XEXP (x, 1), code); @@ -7159,7 +7276,7 @@ i386_output_dwarf_dtprel (FILE *file, int size, rtx x) /* In the name of slightly smaller debug output, and to cater to general assembler lossage, recognize PIC+GOTOFF and turn it back - into a direct symbol reference. + into a direct symbol reference. On Darwin, this is necessary to avoid a crash, because Darwin has a different PIC label for each routine but the DWARF debugging @@ -7238,7 +7355,7 @@ ix86_delegitimize_address (rtx orig_x) if (! result) return orig_x; - + if (const_addend) result = gen_rtx_PLUS (Pmode, result, const_addend); if (reg_addend) @@ -8487,7 +8604,7 @@ emit_i387_cw_initialization (int mode) emit_insn (gen_movsi_insv_1 (reg, GEN_INT (0x8))); slot = SLOT_CW_CEIL; break; - + case I387_CW_MASK_PM: /* mask precision exception for nearbyint() */ emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0020))); @@ -8542,6 +8659,34 @@ output_fix_trunc (rtx insn, rtx *operands, int fisttp) return ""; } +/* Output code for x87 ffreep insn. The OPNO argument, which may only + have the values zero or one, indicates the ffreep insn's operand + from the OPERANDS array. */ + +static const char * +output_387_ffreep (rtx *operands ATTRIBUTE_UNUSED, int opno) +{ + if (TARGET_USE_FFREEP) +#if HAVE_AS_IX86_FFREEP + return opno ? "ffreep\t%y1" : "ffreep\t%y0"; +#else + switch (REGNO (operands[opno])) + { + case FIRST_STACK_REG + 0: return ".word\t0xc0df"; + case FIRST_STACK_REG + 1: return ".word\t0xc1df"; + case FIRST_STACK_REG + 2: return ".word\t0xc2df"; + case FIRST_STACK_REG + 3: return ".word\t0xc3df"; + case FIRST_STACK_REG + 4: return ".word\t0xc4df"; + case FIRST_STACK_REG + 5: return ".word\t0xc5df"; + case FIRST_STACK_REG + 6: return ".word\t0xc6df"; + case FIRST_STACK_REG + 7: return ".word\t0xc7df"; + } +#endif + + return opno ? "fstp\t%y1" : "fstp\t%y0"; +} + + /* Output code for INSN to compare OPERANDS. EFLAGS_P is 1 when fcomi should be used. UNORDERED_P is true when fucom should be used. */ @@ -8586,7 +8731,7 @@ output_fp_compare (rtx insn, rtx *operands, int eflags_p, int unordered_p) if (stack_top_dies) { output_asm_insn ("ftst\n\tfnstsw\t%0", operands); - return TARGET_USE_FFREEP ? "ffreep\t%y1" : "fstp\t%y1"; + return output_387_ffreep (operands, 1); } else return "ftst\n\tfnstsw\t%0"; @@ -8609,7 +8754,7 @@ output_fp_compare (rtx insn, rtx *operands, int eflags_p, int unordered_p) output_asm_insn ("fucomip\t{%y1, %0|%0, %y1}", operands); else output_asm_insn ("fcomip\t{%y1, %0|%0, %y1}", operands); - return TARGET_USE_FFREEP ? "ffreep\t%y0" : "fstp\t%y0"; + return output_387_ffreep (operands, 0); } else { @@ -8779,27 +8924,32 @@ ix86_expand_move (enum machine_mode mode, rtx operands[]) if (flag_pic && mode == Pmode && symbolic_operand (op1, Pmode)) { + if (TARGET_MACHO && !TARGET_64BIT) + { #if TARGET_MACHO - if (MACHOPIC_PURE) - { - rtx temp = ((reload_in_progress - || ((op0 && GET_CODE (op0) == REG) - && mode == Pmode)) - ? op0 : gen_reg_rtx (Pmode)); - op1 = machopic_indirect_data_reference (op1, temp); - op1 = machopic_legitimize_pic_address (op1, mode, - temp == op1 ? 0 : temp); - } - else if (MACHOPIC_INDIRECT) - op1 = machopic_indirect_data_reference (op1, 0); - if (op0 == op1) - return; -#else - if (GET_CODE (op0) == MEM) - op1 = force_reg (Pmode, op1); - else - op1 = legitimize_address (op1, op1, Pmode); -#endif /* TARGET_MACHO */ + if (MACHOPIC_PURE) + { + rtx temp = ((reload_in_progress + || ((op0 && GET_CODE (op0) == REG) + && mode == Pmode)) + ? op0 : gen_reg_rtx (Pmode)); + op1 = machopic_indirect_data_reference (op1, temp); + op1 = machopic_legitimize_pic_address (op1, mode, + temp == op1 ? 0 : temp); + } + else if (MACHOPIC_INDIRECT) + op1 = machopic_indirect_data_reference (op1, 0); + if (op0 == op1) + return; +#endif + } + else + { + if (GET_CODE (op0) == MEM) + op1 = force_reg (Pmode, op1); + else + op1 = legitimize_address (op1, op1, Pmode); + } } else { @@ -8858,7 +9008,8 @@ ix86_expand_vector_move (enum machine_mode mode, rtx operands[]) to handle some of them more efficiently. */ if ((reload_in_progress | reload_completed) == 0 && register_operand (op0, mode) - && CONSTANT_P (op1) && op1 != CONST0_RTX (mode)) + && CONSTANT_P (op1) + && standard_sse_constant_p (op1) <= 0) op1 = validize_mem (force_const_mem (mode, op1)); /* Make operand1 a register if it isn't already. */ @@ -8873,7 +9024,7 @@ ix86_expand_vector_move (enum machine_mode mode, rtx operands[]) emit_insn (gen_rtx_SET (VOIDmode, op0, op1)); } -/* Implement the movmisalign patterns for SSE. Non-SSE modes go +/* Implement the movmisalign patterns for SSE. Non-SSE modes go straight to ix86_expand_vector_move. */ void @@ -9288,22 +9439,17 @@ ix86_expand_fp_absneg_operator (enum rtx_code code, enum machine_mode mode, if (use_sse) mask = ix86_build_signbit_mask (elt_mode, vector_mode, code == ABS); else - { - /* When not using SSE, we don't use the mask, but prefer to keep the - same general form of the insn pattern to reduce duplication when - it comes time to split. */ - mask = const0_rtx; - } + mask = NULL_RTX; dst = operands[0]; src = operands[1]; /* If the destination is memory, and we don't have matching source - operands, do things in registers. */ + operands or we're using the x87, do things in registers. */ matching_memory = false; if (MEM_P (dst)) { - if (rtx_equal_p (dst, src)) + if (use_sse && rtx_equal_p (dst, src)) matching_memory = true; else dst = gen_reg_rtx (mode); @@ -9321,9 +9467,15 @@ ix86_expand_fp_absneg_operator (enum rtx_code code, enum machine_mode mode, { set = gen_rtx_fmt_e (code, mode, src); set = gen_rtx_SET (VOIDmode, dst, set); - use = gen_rtx_USE (VOIDmode, mask); - clob = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCmode, FLAGS_REG)); - emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (3, set, use, clob))); + if (mask) + { + use = gen_rtx_USE (VOIDmode, mask); + clob = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCmode, FLAGS_REG)); + emit_insn (gen_rtx_PARALLEL (VOIDmode, + gen_rtvec (3, set, use, clob))); + } + else + emit_insn (set); } if (dst != operands[0]) @@ -10513,7 +10665,7 @@ ix86_expand_carry_flag_compare (enum rtx_code code, rtx op0, rtx op1, rtx *pop) enum machine_mode mode = GET_MODE (op0) != VOIDmode ? GET_MODE (op0) : GET_MODE (op1); - /* Do not handle DImode compares that go trought special path. Also we can't + /* Do not handle DImode compares that go through special path. Also we can't deal with FP compares yet. This is possible to add. */ if (mode == (TARGET_64BIT ? TImode : DImode)) return false; @@ -11485,6 +11637,8 @@ ix86_expand_int_vcond (rtx operands[]) tricks to turn this into a signed comparison against 0. */ if (code == GTU) { + cop0 = force_reg (mode, cop0); + switch (mode) { case V4SImode: @@ -11654,9 +11808,9 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) { /* The only non-offsetable memories we handle are pushes. */ int ok = push_operand (operand, VOIDmode); - + gcc_assert (ok); - + operand = copy_rtx (operand); PUT_MODE (operand, Pmode); parts[0] = parts[1] = parts[2] = operand; @@ -11914,7 +12068,7 @@ ix86_split_long_move (rtx operands[]) default: gcc_unreachable (); } - + if (GET_MODE (part[1][0]) == SImode) part[1][0] = part[1][1]; } @@ -12079,7 +12233,7 @@ ix86_split_ashl (rtx *operands, rtx scratch, enum machine_mode mode) ix86_expand_clear (low[0]); ix86_expand_clear (high[0]); emit_insn (gen_testqi_ccz_1 (operands[2], GEN_INT (single_width))); - + d = gen_lowpart (QImode, low[0]); d = gen_rtx_STRICT_LOW_PART (VOIDmode, d); s = gen_rtx_EQ (QImode, flags, const0_rtx); @@ -13195,15 +13349,21 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1, pop = NULL; gcc_assert (!TARGET_64BIT || !pop); + if (TARGET_MACHO && !TARGET_64BIT) + { #if TARGET_MACHO - if (flag_pic && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF) - fnaddr = machopic_indirect_call_target (fnaddr); -#else - /* Static functions and indirect calls don't need the pic register. */ - if (! TARGET_64BIT && flag_pic - && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF - && ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0))) - use_reg (&use, pic_offset_table_rtx); + if (flag_pic && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF) + fnaddr = machopic_indirect_call_target (fnaddr); +#endif + } + else + { + /* Static functions and indirect calls don't need the pic register. */ + if (! TARGET_64BIT && flag_pic + && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF + && ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0))) + use_reg (&use, pic_offset_table_rtx); + } if (TARGET_64BIT && INTVAL (callarg2) >= 0) { @@ -13211,7 +13371,6 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1, emit_move_insn (al, callarg2); use_reg (&use, al); } -#endif /* TARGET_MACHO */ if (! call_insn_operand (XEXP (fnaddr, 0), Pmode)) { @@ -13552,9 +13711,9 @@ ix86_agi_dependent (rtx insn, rtx dep_insn, enum attr_type insn_type) if (GET_CODE (addr) == PARALLEL) addr = XVECEXP (addr, 0, 0); - + gcc_assert (GET_CODE (addr) == SET); - + addr = SET_SRC (addr); } else @@ -15380,7 +15539,7 @@ ix86_init_mmx_sse_builtins (void) integer_type_node, NULL_TREE); def_builtin (MASK_SSE, "__builtin_ia32_vec_set_v8hi", ftype, IX86_BUILTIN_VEC_SET_V8HI); - + ftype = build_function_type_list (V4HI_type_node, V4HI_type_node, intHI_type_node, integer_type_node, NULL_TREE); @@ -15693,7 +15852,7 @@ get_element_number (tree vec_type, tree arg) instructions from inside the compiler, we can't allow the use of MMX registers unless the user explicitly asks for it. So we do *not* define vec_set/vec_extract/vec_init patterns for MMX modes in mmx.md. Instead - we have builtins invoked by mmintrin.h that gives us license to emit + we have builtins invoked by mmintrin.h that gives us license to emit these sorts of instructions. */ static rtx @@ -16230,7 +16389,7 @@ rtx ix86_force_to_memory (enum machine_mode mode, rtx operand) { rtx result; - + gcc_assert (reload_completed); if (TARGET_RED_ZONE) { @@ -16332,7 +16491,7 @@ ix86_preferred_reload_class (rtx x, enum reg_class class) { enum machine_mode mode = GET_MODE (x); - /* We're only allowed to return a subclass of CLASS. Many of the + /* We're only allowed to return a subclass of CLASS. Many of the following checks fail for NO_REGS, so eliminate that early. */ if (class == NO_REGS) return NO_REGS; @@ -16467,7 +16626,7 @@ ix86_secondary_memory_needed (enum reg_class class1, enum reg_class class2, if (!TARGET_SSE2) return true; - /* If the target says that inter-unit moves are more expensive + /* If the target says that inter-unit moves are more expensive than moving through memory, then don't generate them. */ if (!TARGET_INTER_UNIT_MOVES && !optimize_size) return true; @@ -16477,7 +16636,7 @@ ix86_secondary_memory_needed (enum reg_class class1, enum reg_class class2, return true; /* ??? For the cost of one register reformat penalty, we could use - the same instructions to move SFmode and DFmode data, but the + the same instructions to move SFmode and DFmode data, but the relevant move patterns don't support those alternatives. */ if (mode == SFmode || mode == DFmode) return true; @@ -16511,7 +16670,7 @@ ix86_cannot_change_mode_class (enum machine_mode from, enum machine_mode to, return true; /* Vector registers do not support subreg with nonzero offsets, which - are otherwise valid for integer registers. Since we can't see + are otherwise valid for integer registers. Since we can't see whether we have a nonzero offset from here, prohibit all nonparadoxical subregs changing size. */ if (GET_MODE_SIZE (to) < GET_MODE_SIZE (from)) @@ -16622,7 +16781,7 @@ ix86_hard_regno_mode_ok (int regno, enum machine_mode mode) else if (VALID_FP_MODE_P (mode)) return 1; /* Lots of MMX code casts 8 byte vector modes to DImode. If we then go - on to use that value in smaller contexts, this can easily force a + on to use that value in smaller contexts, this can easily force a pseudo to be allocated to GENERAL_REGS. Since this is no worse than supporting DImode, allow it. */ else if (VALID_MMX_REG_MODE_3DNOW (mode) || VALID_MMX_REG_MODE (mode)) @@ -16631,7 +16790,7 @@ ix86_hard_regno_mode_ok (int regno, enum machine_mode mode) return 0; } -/* A subroutine of ix86_modes_tieable_p. Return true if MODE is a +/* A subroutine of ix86_modes_tieable_p. Return true if MODE is a tieable integer mode. */ static bool @@ -16679,7 +16838,7 @@ ix86_modes_tieable_p (enum machine_mode mode1, enum machine_mode mode2) if (mode2 == DFmode) return mode1 == SFmode; - /* If MODE2 is only appropriate for an SSE register, then tie with + /* If MODE2 is only appropriate for an SSE register, then tie with any other mode acceptable to SSE registers. */ if (GET_MODE_SIZE (mode2) >= 8 && ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode2)) @@ -17115,6 +17274,9 @@ machopic_output_stub (FILE *file, const char *symb, const char *stub) char *binder_name, *symbol_name, lazy_ptr_name[32]; int label = ++current_machopic_label_num; + /* For 64-bit we shouldn't get here. */ + gcc_assert (!TARGET_64BIT); + /* Lose our funky encoding stuff so it doesn't contaminate the stub. */ symb = (*targetm.strip_name_encoding) (symb); @@ -17795,7 +17957,7 @@ ix86_expand_vector_init_duplicate (bool mmx_ok, enum machine_mode mode, { case V2SImode: case V2SFmode: - if (!mmx_ok && !TARGET_SSE) + if (!mmx_ok) return false; /* FALLTHRU */ @@ -17934,7 +18096,7 @@ ix86_expand_vector_init_one_nonzero (bool mmx_ok, enum machine_mode mode, { case V2SFmode: case V2SImode: - if (!mmx_ok && !TARGET_SSE) + if (!mmx_ok) return false; /* FALLTHRU */ @@ -18174,7 +18336,7 @@ ix86_expand_vector_init_general (bool mmx_ok, enum machine_mode mode, if (!register_operand (op1, half_mode)) op1 = force_reg (half_mode, op1); - emit_insn (gen_rtx_SET (VOIDmode, target, + emit_insn (gen_rtx_SET (VOIDmode, target, gen_rtx_VEC_CONCAT (mode, op0, op1))); } else @@ -18234,7 +18396,7 @@ ix86_expand_vector_init_general (bool mmx_ok, enum machine_mode mode, } } -/* Initialize vector TARGET via VALS. Suppress the use of MMX +/* Initialize vector TARGET via VALS. Suppress the use of MMX instructions unless MMX_OK is true. */ void @@ -18704,9 +18866,8 @@ output_387_reg_move (rtx insn, rtx *operands) if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) { - if (REGNO (operands[0]) == FIRST_STACK_REG - && TARGET_USE_FFREEP) - return "ffreep\t%y0"; + if (REGNO (operands[0]) == FIRST_STACK_REG) + return output_387_ffreep (operands, 0); return "fstp\t%y0"; } if (STACK_TOP_P (operands[0])) diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index df1ba2472b6..9474964255b 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -164,6 +164,7 @@ extern const int x86_use_bt; extern const int x86_cmpxchg, x86_cmpxchg8b, x86_cmpxchg16b, x86_xadd; extern const int x86_use_incdec; extern const int x86_pad_returns; +extern const int x86_partial_flag_reg_stall; extern int x86_prefetch_sse; #define TARGET_USE_LEAVE (x86_use_leave & TUNEMASK) @@ -182,6 +183,7 @@ extern int x86_prefetch_sse; #define TARGET_USE_SAHF ((x86_use_sahf & TUNEMASK) && !TARGET_64BIT) #define TARGET_MOVX (x86_movx & TUNEMASK) #define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & TUNEMASK) +#define TARGET_PARTIAL_FLAG_REG_STALL (x86_partial_flag_reg_stall & TUNEMASK) #define TARGET_USE_HIMODE_FIOP (x86_use_himode_fiop & TUNEMASK) #define TARGET_USE_SIMODE_FIOP (x86_use_simode_fiop & TUNEMASK) #define TARGET_USE_MOV0 (x86_use_mov0 & TUNEMASK) @@ -281,11 +283,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); { "local_cpu_detect", host_detect_local_cpu }, #endif -/* Support for configure-time defaults of some command line options. */ +/* Support for configure-time defaults of some command line options. + The order here is important so that -march doesn't squash the + tune or cpu values. */ #define OPTION_DEFAULT_SPECS \ - {"arch", "%{!march=*:-march=%(VALUE)}"}, \ {"tune", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \ - {"cpu", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" } + {"cpu", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \ + {"arch", "%{!march=*:-march=%(VALUE)}"} /* Specs for the compiler proper */ @@ -2007,11 +2011,13 @@ do { \ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ix86_output_addr_diff_elt ((FILE), (VALUE), (REL)) -/* Under some conditions we need jump tables in the text section, because - the assembler cannot handle label differences between sections. */ +/* Under some conditions we need jump tables in the text section, + because the assembler cannot handle label differences between + sections. This is the case for x86_64 on Mach-O for example. */ #define JUMP_TABLES_IN_TEXT_SECTION \ - (!TARGET_64BIT && flag_pic && !HAVE_AS_GOTOFF_IN_DATA) + (flag_pic && ((TARGET_MACHO && TARGET_64BIT) \ + || (!TARGET_64BIT && !HAVE_AS_GOTOFF_IN_DATA))) /* Switch to init or fini section via SECTION_OP, emit a call to FUNC, and switch back. For x86 we do this only to save a few bytes that @@ -2144,7 +2150,7 @@ enum ix86_entity MAX_386_ENTITIES }; -enum ix86_stack_slot +enum ix86_stack_slot { SLOT_TEMP = 0, SLOT_CW_STORED, diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index e08d1753d64..639f0b44f74 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6718,7 +6718,7 @@ (match_dup 2))))] "TARGET_64BIT && ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, SImode, operands)" - "sub{q}\t{%2, %0|%0, %2}" + "sub{l}\t{%2, %1|%1, %2}" [(set_attr "type" "alu") (set_attr "mode" "DI")]) @@ -9905,7 +9905,7 @@ (define_insn "*negsf2_1" [(set (match_operand:SF 0 "register_operand" "=f") (neg:SF (match_operand:SF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387 && (reload_completed || !TARGET_SSE_MATH)" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "SF")]) @@ -9913,7 +9913,7 @@ (define_insn "*negdf2_1" [(set (match_operand:DF 0 "register_operand" "=f") (neg:DF (match_operand:DF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387 && (reload_completed || !(TARGET_SSE2 && TARGET_SSE_MATH))" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) @@ -9921,7 +9921,7 @@ (define_insn "*negxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (match_operand:XF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) @@ -9929,7 +9929,7 @@ (define_insn "*abssf2_1" [(set (match_operand:SF 0 "register_operand" "=f") (abs:SF (match_operand:SF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387 && (reload_completed || !TARGET_SSE_MATH)" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "SF")]) @@ -9937,7 +9937,7 @@ (define_insn "*absdf2_1" [(set (match_operand:DF 0 "register_operand" "=f") (abs:DF (match_operand:DF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387 && (reload_completed || !(TARGET_SSE2 && TARGET_SSE_MATH))" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) @@ -9945,7 +9945,7 @@ (define_insn "*absxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (match_operand:XF 1 "register_operand" "0")))] - "TARGET_80387 && reload_completed" + "TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) @@ -10396,7 +10396,53 @@ (set (match_operand:DI 0 "nonimmediate_operand" "=rm") (ashift:DI (match_dup 1) (match_dup 2)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, DImode, operands)" + && ix86_binary_operator_ok (ASHIFT, DImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))" +{ + switch (get_attr_type (insn)) + { + case TYPE_ALU: + gcc_assert (operands[2] == const1_rtx); + return "add{q}\t{%0, %0|%0, %0}"; + + default: + if (REG_P (operands[2])) + return "sal{q}\t{%b2, %0|%0, %b2}"; + else if (operands[2] == const1_rtx + && (TARGET_SHIFT1 || optimize_size)) + return "sal{q}\t%0"; + else + return "sal{q}\t{%2, %0|%0, %2}"; + } +} + [(set (attr "type") + (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") + (const_int 0)) + (match_operand 0 "register_operand" "")) + (match_operand 2 "const1_operand" "")) + (const_string "alu") + ] + (const_string "ishift"))) + (set_attr "mode" "DI")]) + +(define_insn "*ashldi3_cconly_rex64" + [(set (reg FLAGS_REG) + (compare + (ashift:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "immediate_operand" "e")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFT, DImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || TARGET_DOUBLE_WITH_ADD)))" { switch (get_attr_type (insn)) { @@ -10677,7 +10723,53 @@ (set (match_operand:SI 0 "nonimmediate_operand" "=rm") (ashift:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, SImode, operands)" + && ix86_binary_operator_ok (ASHIFT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))" +{ + switch (get_attr_type (insn)) + { + case TYPE_ALU: + gcc_assert (operands[2] == const1_rtx); + return "add{l}\t{%0, %0|%0, %0}"; + + default: + if (REG_P (operands[2])) + return "sal{l}\t{%b2, %0|%0, %b2}"; + else if (operands[2] == const1_rtx + && (TARGET_SHIFT1 || optimize_size)) + return "sal{l}\t%0"; + else + return "sal{l}\t{%2, %0|%0, %2}"; + } +} + [(set (attr "type") + (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") + (const_int 0)) + (match_operand 0 "register_operand" "")) + (match_operand 2 "const1_operand" "")) + (const_string "alu") + ] + (const_string "ishift"))) + (set_attr "mode" "SI")]) + +(define_insn "*ashlsi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:SI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || TARGET_DOUBLE_WITH_ADD)))" { switch (get_attr_type (insn)) { @@ -10714,7 +10806,12 @@ (set (match_operand:DI 0 "register_operand" "=r") (zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, SImode, operands)" + && ix86_binary_operator_ok (ASHIFT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || TARGET_DOUBLE_WITH_ADD)))" { switch (get_attr_type (insn)) { @@ -10833,7 +10930,53 @@ (set (match_operand:HI 0 "nonimmediate_operand" "=rm") (ashift:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, HImode, operands)" + && ix86_binary_operator_ok (ASHIFT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))" +{ + switch (get_attr_type (insn)) + { + case TYPE_ALU: + gcc_assert (operands[2] == const1_rtx); + return "add{w}\t{%0, %0|%0, %0}"; + + default: + if (REG_P (operands[2])) + return "sal{w}\t{%b2, %0|%0, %b2}"; + else if (operands[2] == const1_rtx + && (TARGET_SHIFT1 || optimize_size)) + return "sal{w}\t%0"; + else + return "sal{w}\t{%2, %0|%0, %2}"; + } +} + [(set (attr "type") + (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") + (const_int 0)) + (match_operand 0 "register_operand" "")) + (match_operand 2 "const1_operand" "")) + (const_string "alu") + ] + (const_string "ishift"))) + (set_attr "mode" "HI")]) + +(define_insn "*ashlhi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:HI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || TARGET_DOUBLE_WITH_ADD)))" { switch (get_attr_type (insn)) { @@ -10991,7 +11134,53 @@ (set (match_operand:QI 0 "nonimmediate_operand" "=qm") (ashift:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, QImode, operands)" + && ix86_binary_operator_ok (ASHIFT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))" +{ + switch (get_attr_type (insn)) + { + case TYPE_ALU: + gcc_assert (operands[2] == const1_rtx); + return "add{b}\t{%0, %0|%0, %0}"; + + default: + if (REG_P (operands[2])) + return "sal{b}\t{%b2, %0|%0, %b2}"; + else if (operands[2] == const1_rtx + && (TARGET_SHIFT1 || optimize_size)) + return "sal{b}\t%0"; + else + return "sal{b}\t{%2, %0|%0, %2}"; + } +} + [(set (attr "type") + (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") + (const_int 0)) + (match_operand 0 "register_operand" "")) + (match_operand 2 "const1_operand" "")) + (const_string "alu") + ] + (const_string "ishift"))) + (set_attr "mode" "QI")]) + +(define_insn "*ashlqi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:QI 0 "=q"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL + || (operands[2] == const1_rtx + && (TARGET_SHIFT1 + || TARGET_DOUBLE_WITH_ADD)))" { switch (get_attr_type (insn)) { @@ -11162,6 +11351,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*ashrdi3_one_bit_cconly_rex64" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" + "sar{q}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -11174,7 +11377,24 @@ (set (match_operand:DI 0 "nonimmediate_operand" "=rm") (ashiftrt:DI (match_dup 1) (match_dup 2)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" + && ix86_binary_operator_ok (ASHIFTRT, DImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "sar{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "DI")]) + +(define_insn "*ashrdi3_cconly_rex64" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_int_operand" "n")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFTRT, DImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "sar{q}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "DI")]) @@ -11367,6 +11587,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*ashrsi3_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:SI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" + "sar{l}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + (define_insn "*ashrsi3_one_bit_cmp_zext" [(set (reg FLAGS_REG) (compare @@ -11394,7 +11628,24 @@ (set (match_operand:SI 0 "nonimmediate_operand" "=rm") (ashiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" + && ix86_binary_operator_ok (ASHIFTRT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "sar{l}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "SI")]) + +(define_insn "*ashrsi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:SI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFTRT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "sar{l}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) @@ -11408,7 +11659,9 @@ (set (match_operand:DI 0 "register_operand" "=r") (zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" + && ix86_binary_operator_ok (ASHIFTRT, SImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "sar{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) @@ -11468,6 +11721,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*ashrhi3_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:HI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" + "sar{w}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -11480,7 +11747,24 @@ (set (match_operand:HI 0 "nonimmediate_operand" "=rm") (ashiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" + && ix86_binary_operator_ok (ASHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "sar{w}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "HI")]) + +(define_insn "*ashrhi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:HI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "sar{w}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) @@ -11568,6 +11852,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*ashrqi3_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "I")) + (const_int 0))) + (clobber (match_scratch:QI 0 "=q"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" + "sar{b}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -11580,10 +11878,28 @@ (set (match_operand:QI 0 "nonimmediate_operand" "=qm") (ashiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" + && ix86_binary_operator_ok (ASHIFTRT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "sar{b}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) + +(define_insn "*ashrqi3_cconly" + [(set (reg FLAGS_REG) + (compare + (ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:QI 0 "=q"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFTRT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "sar{b}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "QI")]) + ;; Logical shift instructions @@ -11697,6 +12013,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*lshrdi3_cconly_one_bit_rex64" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + "shr{q}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -11709,7 +12039,24 @@ (set (match_operand:DI 0 "nonimmediate_operand" "=rm") (lshiftrt:DI (match_dup 1) (match_dup 2)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "shr{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "DI")]) + +(define_insn "*lshrdi3_cconly_rex64" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_int_operand" "e")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "shr{q}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "DI")]) @@ -11826,6 +12173,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*lshrsi3_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:SI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + "shr{l}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + (define_insn "*lshrsi3_cmp_one_bit_zext" [(set (reg FLAGS_REG) (compare @@ -11853,7 +12214,24 @@ (set (match_operand:SI 0 "nonimmediate_operand" "=rm") (lshiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "shr{l}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "SI")]) + +(define_insn "*lshrsi3_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:SI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "shr{l}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) @@ -11867,7 +12245,9 @@ (set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "shr{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) @@ -11927,6 +12307,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*lshrhi3_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:HI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + "shr{w}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -11939,7 +12333,24 @@ (set (match_operand:HI 0 "nonimmediate_operand" "=rm") (lshiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "shr{w}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "HI")]) + +(define_insn "*lshrhi3_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:HI 0 "=r"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "shr{w}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) @@ -12026,6 +12437,20 @@ (const_string "2") (const_string "*")))]) +(define_insn "*lshrqi2_one_bit_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const1_operand" "")) + (const_int 0))) + (clobber (match_scratch:QI 0 "=q"))] + "ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_SHIFT1 || optimize_size) + && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" + "shr{b}\t%0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. @@ -12038,7 +12463,24 @@ (set (match_operand:QI 0 "nonimmediate_operand" "=qm") (lshiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" + && ix86_binary_operator_ok (LSHIFTRT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" + "shr{b}\t{%2, %0|%0, %2}" + [(set_attr "type" "ishift") + (set_attr "mode" "QI")]) + +(define_insn "*lshrqi2_cconly" + [(set (reg FLAGS_REG) + (compare + (lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_1_to_31_operand" "I")) + (const_int 0))) + (clobber (match_scratch:QI 0 "=q"))] + "ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (LSHIFTRT, QImode, operands) + && (optimize_size + || !TARGET_PARTIAL_FLAG_REG_STALL)" "shr{b}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) @@ -13877,7 +14319,7 @@ #else /* It is tempting to use ASM_OUTPUT_ALIGN here, but we don't want to do that. The align insn is used to avoid 3 jump instructions in the row to improve - branch prediction and the benefits hardly outweight the cost of extra 8 + branch prediction and the benefits hardly outweigh the cost of extra 8 nops on the average inserted by full alignment pseudo operation. */ #endif return ""; @@ -14434,12 +14876,11 @@ (define_insn_and_split "*tls_dynamic_gnu2_combine_32" [(set (match_operand:SI 0 "register_operand" "=&a") (plus:SI - (plus:SI (match_operand:SI 3 "tp_or_register_operand" "ir") - (unspec:SI [(match_operand:SI 4 "tls_modbase_operand" "") - (match_operand:SI 5 "" "") - (match_operand:SI 2 "register_operand" "b") - (reg:SI SP_REG)] - UNSPEC_TLSDESC)) + (unspec:SI [(match_operand:SI 3 "tls_modbase_operand" "") + (match_operand:SI 4 "" "") + (match_operand:SI 2 "register_operand" "b") + (reg:SI SP_REG)] + UNSPEC_TLSDESC) (const:SI (unspec:SI [(match_operand:SI 1 "tls_symbolic_operand" "")] UNSPEC_DTPOFF)))) @@ -14447,11 +14888,7 @@ "!TARGET_64BIT && TARGET_GNU2_TLS" "#" "" - [(parallel - [(set (match_dup 0) - (plus:SI (match_dup 3) - (match_dup 5))) - (clobber (reg:CC FLAGS_REG))])] + [(set (match_dup 0) (match_dup 5))] { operands[5] = no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode); emit_insn (gen_tls_dynamic_gnu2_32 (operands[5], operands[1], operands[2])); @@ -14499,11 +14936,10 @@ (define_insn_and_split "*tls_dynamic_gnu2_combine_64" [(set (match_operand:DI 0 "register_operand" "=&a") (plus:DI - (plus:DI (match_operand:DI 2 "tp_or_register_operand" "ir") - (unspec:DI [(match_operand:DI 3 "tls_modbase_operand" "") - (match_operand:DI 4 "" "") - (reg:DI SP_REG)] - UNSPEC_TLSDESC)) + (unspec:DI [(match_operand:DI 2 "tls_modbase_operand" "") + (match_operand:DI 3 "" "") + (reg:DI SP_REG)] + UNSPEC_TLSDESC) (const:DI (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")] UNSPEC_DTPOFF)))) @@ -14511,11 +14947,7 @@ "TARGET_64BIT && TARGET_GNU2_TLS" "#" "" - [(parallel - [(set (match_dup 0) - (plus:DI (match_dup 2) - (match_dup 4))) - (clobber (reg:CC FLAGS_REG))])] + [(set (match_dup 0) (match_dup 4))] { operands[4] = no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode); emit_insn (gen_tls_dynamic_gnu2_64 (operands[4], operands[1])); @@ -14691,10 +15123,10 @@ "* return output_387_binary_op (insn, operands);" [(set (attr "type") (if_then_else (eq_attr "alternative" "1") - (if_then_else (match_operand:SF 3 "mult_operator" "") + (if_then_else (match_operand:DF 3 "mult_operator" "") (const_string "ssemul") (const_string "sseadd")) - (if_then_else (match_operand:SF 3 "mult_operator" "") + (if_then_else (match_operand:DF 3 "mult_operator" "") (const_string "fmul") (const_string "fop")))) (set_attr "mode" "DF")]) @@ -14709,7 +15141,7 @@ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") - (if_then_else (match_operand:SF 3 "mult_operator" "") + (if_then_else (match_operand:DF 3 "mult_operator" "") (const_string "ssemul") (const_string "sseadd"))) (set_attr "mode" "DF")]) @@ -14724,7 +15156,7 @@ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") - (if_then_else (match_operand:SF 3 "mult_operator" "") + (if_then_else (match_operand:DF 3 "mult_operator" "") (const_string "fmul") (const_string "fop"))) (set_attr "mode" "DF")]) @@ -14740,10 +15172,10 @@ "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(and (eq_attr "alternative" "2") - (match_operand:SF 3 "mult_operator" "")) + (match_operand:DF 3 "mult_operator" "")) (const_string "ssemul") (and (eq_attr "alternative" "2") - (match_operand:SF 3 "div_operator" "")) + (match_operand:DF 3 "div_operator" "")) (const_string "ssediv") (eq_attr "alternative" "2") (const_string "sseadd") @@ -14765,9 +15197,9 @@ "* return output_387_binary_op (insn, operands);" [(set_attr "mode" "DF") (set (attr "type") - (cond [(match_operand:SF 3 "mult_operator" "") + (cond [(match_operand:DF 3 "mult_operator" "") (const_string "ssemul") - (match_operand:SF 3 "div_operator" "") + (match_operand:DF 3 "div_operator" "") (const_string "ssediv") ] (const_string "sseadd")))]) @@ -18767,6 +19199,32 @@ [(set_attr "type" "sseadd") (set_attr "mode" "DF")]) +;; Make two stack loads independent: +;; fld aa fld aa +;; fld %st(0) -> fld bb +;; fmul bb fmul %st(1), %st +;; +;; Actually we only match the last two instructions for simplicity. +(define_peephole2 + [(set (match_operand 0 "fp_register_operand" "") + (match_operand 1 "fp_register_operand" "")) + (set (match_dup 0) + (match_operator 2 "binary_fp_operator" + [(match_dup 0) + (match_operand 3 "memory_operand" "")]))] + "REGNO (operands[0]) != REGNO (operands[1])" + [(set (match_dup 0) (match_dup 3)) + (set (match_dup 0) (match_dup 4))] + + ;; The % modifier is not operational anymore in peephole2's, so we have to + ;; swap the operands manually in the case of addition and multiplication. + "if (COMMUTATIVE_ARITH_P (operands[2])) + operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]), + operands[0], operands[1]); + else + operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]), + operands[1], operands[0]);") + ;; Conditional addition patterns (define_expand "addqicc" [(match_operand:QI 0 "register_operand" "") @@ -20403,7 +20861,15 @@ (set (match_scratch:DI 2 "=&r") (const_int 0)) (clobber (reg:CC FLAGS_REG))] "TARGET_64BIT" - "mov{q}\t{%%fs:%P1, %2|%2, QWORD PTR %%fs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2" + { + /* The kernel uses a different segment register for performance reasons; a + system call would not have to trash the userspace segment register, + which would be expensive */ + if (ix86_cmodel != CM_KERNEL) + return "mov{q}\t{%%fs:%P1, %2|%2, QWORD PTR %%fs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2"; + else + return "mov{q}\t{%%gs:%P1, %2|%2, QWORD PTR %%gs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2"; + } [(set_attr "type" "multi")]) (define_expand "stack_protect_test" @@ -20471,7 +20937,15 @@ UNSPEC_SP_TLS_TEST)) (clobber (match_scratch:DI 3 "=r"))] "TARGET_64BIT" - "mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%fs:%P2, %3|%3, QWORD PTR %%fs:%P2}" + { + /* The kernel uses a different segment register for performance reasons; a + system call would not have to trash the userspace segment register, + which would be expensive */ + if (ix86_cmodel != CM_KERNEL) + return "mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%fs:%P2, %3|%3, QWORD PTR %%fs:%P2}"; + else + return "mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%gs:%P2, %3|%3, QWORD PTR %%gs:%P2}"; + } [(set_attr "type" "multi")]) (include "sse.md") diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h index 6318831118f..bc18d64976d 100644 --- a/gcc/config/i386/mingw32.h +++ b/gcc/config/i386/mingw32.h @@ -108,3 +108,7 @@ do { \ /* Define as short unsigned for compatibility with MS runtime. */ #undef WINT_TYPE #define WINT_TYPE "short unsigned int" + +/* mingw32 doesn't understand the -pthread option. */ +#undef GOMP_SELF_SPECS +#define GOMP_SELF_SPECS "" diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 24f741b0031..457f5563a7b 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -678,11 +678,44 @@ return 1; }) -;; Return 1 when OP is operand acceptable for standard SSE move. +/* Return true if operand is a vector constant that is all ones. */ +(define_predicate "vector_all_ones_operand" + (match_code "const_vector") +{ + int nunits = GET_MODE_NUNITS (mode); + + if (GET_CODE (op) == CONST_VECTOR + && CONST_VECTOR_NUNITS (op) == nunits) + { + int i; + for (i = 0; i < nunits; ++i) + { + rtx x = CONST_VECTOR_ELT (op, i); + if (x != constm1_rtx) + return 0; + } + return 1; + } + + return 0; +}) + +; Return 1 when OP is operand acceptable for standard SSE move. (define_predicate "vector_move_operand" (ior (match_operand 0 "nonimmediate_operand") (match_operand 0 "const0_operand"))) +;; Return 1 when OP is nonimmediate or standard SSE constant. +(define_predicate "nonimmediate_or_sse_const_operand" + (match_operand 0 "general_operand") +{ + if (nonimmediate_operand (op, mode)) + return 1; + if (standard_sse_constant_p (op) > 0) + return 1; + return 0; +}) + ;; Return true if OP is a register or a zero. (define_predicate "reg_or_0_operand" (ior (match_operand 0 "register_operand") diff --git a/gcc/config/i386/sol2-10.h b/gcc/config/i386/sol2-10.h index e120aa1b762..af51b4cb376 100644 --- a/gcc/config/i386/sol2-10.h +++ b/gcc/config/i386/sol2-10.h @@ -22,9 +22,17 @@ Boston, MA 02110-1301, USA. */ #undef ASM_COMMENT_START #define ASM_COMMENT_START "/" +/* binutils' GNU as understands --32 and --64, but the native Solaris + assembler requires -xarch=generic or -xarch=generic64 instead. */ #undef ASM_SPEC +#ifdef USE_GAS #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} " \ "%{Wa,*:%*} %{m32:--32} %{m64:--64} -s %(asm_cpu)" +#else +#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} " \ + "%{Wa,*:%*} %{m32:-xarch=generic} %{m64:-xarch=generic64} " \ + "-s %(asm_cpu)" +#endif #undef NO_PROFILE_COUNTERS diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index ed36276c589..8886e1f0487 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -59,16 +59,13 @@ (define_insn "*mov_internal" [(set (match_operand:SSEMODEI 0 "nonimmediate_operand" "=x,x ,m") - (match_operand:SSEMODEI 1 "vector_move_operand" "C ,xm,x"))] + (match_operand:SSEMODEI 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))] "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))" { switch (which_alternative) { case 0: - if (get_attr_mode (insn) == MODE_V4SF) - return "xorps\t%0, %0"; - else - return "pxor\t%0, %0"; + return standard_sse_constant_opcode (insn, operands[1]); case 1: case 2: if (get_attr_mode (insn) == MODE_V4SF) @@ -101,12 +98,20 @@ (define_insn "*movv4sf_internal" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,x,m") - (match_operand:V4SF 1 "vector_move_operand" "C,xm,x"))] + (match_operand:V4SF 1 "nonimmediate_or_sse_const_operand" "C,xm,x"))] "TARGET_SSE" - "@ - xorps\t%0, %0 - movaps\t{%1, %0|%0, %1} - movaps\t{%1, %0|%0, %1}" +{ + switch (which_alternative) + { + case 0: + return standard_sse_constant_opcode (insn, operands[1]); + case 1: + case 2: + return "movaps\t{%1, %0|%0, %1}"; + default: + abort(); + } +} [(set_attr "type" "sselog1,ssemov,ssemov") (set_attr "mode" "V4SF")]) @@ -135,16 +140,13 @@ (define_insn "*movv2df_internal" [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m") - (match_operand:V2DF 1 "vector_move_operand" "C,xm,x"))] + (match_operand:V2DF 1 "nonimmediate_or_sse_const_operand" "C,xm,x"))] "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))" { switch (which_alternative) { case 0: - if (get_attr_mode (insn) == MODE_V4SF) - return "xorps\t%0, %0"; - else - return "xorpd\t%0, %0"; + return standard_sse_constant_opcode (insn, operands[1]); case 1: case 2: if (get_attr_mode (insn) == MODE_V4SF) diff --git a/gcc/config/i386/t-darwin b/gcc/config/i386/t-darwin index b2ff7cbc0a7..e79f3355aaa 100644 --- a/gcc/config/i386/t-darwin +++ b/gcc/config/i386/t-darwin @@ -1 +1,5 @@ SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc +MULTILIB_OPTIONS = m64 +MULTILIB_DIRNAMES = x86_64 +LIB2_SIDITI_CONV_FUNCS=yes +LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c diff --git a/gcc/config/i386/t-gthr-win32 b/gcc/config/i386/t-gthr-win32 new file mode 100644 index 00000000000..204a485bcd1 --- /dev/null +++ b/gcc/config/i386/t-gthr-win32 @@ -0,0 +1,3 @@ +# We hide calls to w32api needed for w32 thread support here: +LIB2FUNCS_EXTRA = $(srcdir)/config/i386/gthr-win32.c + diff --git a/gcc/config/i386/t-mingw32 b/gcc/config/i386/t-mingw32 index 8f775314151..6d043a37f6a 100644 --- a/gcc/config/i386/t-mingw32 +++ b/gcc/config/i386/t-mingw32 @@ -1,5 +1,2 @@ -# We hide calls to w32api needed for w32 thread support here: -LIB2FUNCS_EXTRA = $(srcdir)/config/i386/gthr-win32.c - # Match SYSTEM_INCLUDE_DIR NATIVE_SYSTEM_HEADER_DIR = /mingw/include diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index c7eae6cb85d..a46fc5b2b02 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -1,7 +1,7 @@ /* Subroutines for insn-output.c for Windows NT. Contributed by Douglas Rupp (drupp@cs.washington.edu) - Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -88,17 +88,10 @@ ix86_handle_selectany_attribute (tree *node, tree name, bool *no_add_attrs) { /* The attribute applies only to objects that are initialized and have - external linkage, */ - if (TREE_CODE (*node) == VAR_DECL && TREE_PUBLIC (*node) - && (DECL_INITIAL (*node) - /* If an object is initialized with a ctor, the static - initialization and destruction code for it is present in - each unit defining the object. The code that calls the - ctor is protected by a link-once guard variable, so that - the object still has link-once semantics, */ - || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (*node)))) - make_decl_one_only (*node); - else + external linkage. However, we may not know about initialization + until the language frontend has processed the decl. We'll check for + initialization later in encode_section_info. */ + if (TREE_CODE (*node) != VAR_DECL || !TREE_PUBLIC (*node)) { error ("%qs attribute applies only to initialized variables" " with external linkage", IDENTIFIER_POINTER (name)); @@ -148,18 +141,28 @@ i386_pe_dllimport_p (tree decl) && TREE_CODE (decl) != FUNCTION_DECL) return false; - /* Lookup the attribute rather than rely on the DECL_DLLIMPORT_P flag. + /* Lookup the attribute in addition to checking the DECL_DLLIMPORT_P flag. We may need to override an earlier decision. */ - if (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))) - return true; - + if (DECL_DLLIMPORT_P (decl) + && lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))) + { + /* Make a final check to see if this is a definition before we generate + RTL for an indirect reference. */ + if (!DECL_EXTERNAL (decl)) + { + error ("%q+D: definition is marked as dllimport", decl); + DECL_DLLIMPORT_P (decl) = 0; + return false; + } + return true; + } /* The DECL_DLLIMPORT_P flag was set for decls in the class definition by targetm.cxx.adjust_class_at_definition. Check again to emit warnings if the class attribute has been overridden by an out-of-class definition. */ - if (associated_type (decl) - && lookup_attribute ("dllimport", - TYPE_ATTRIBUTES (associated_type (decl)))) + else if (associated_type (decl) + && lookup_attribute ("dllimport", + TYPE_ATTRIBUTES (associated_type (decl)))) return i386_pe_type_dllimport_p (decl); return false; @@ -362,6 +365,22 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first) } } + else if (TREE_CODE (decl) == VAR_DECL + && lookup_attribute ("selectany", DECL_ATTRIBUTES (decl))) + { + if (DECL_INITIAL (decl) + /* If an object is initialized with a ctor, the static + initialization and destruction code for it is present in + each unit defining the object. The code that calls the + ctor is protected by a link-once guard variable, so that + the object still has link-once semantics, */ + || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))) + make_decl_one_only (decl); + else + error ("%q+D:'selectany' attribute applies only to initialized objects", + decl); + } + /* Mark the decl so we can tell from the rtl whether the object is dllexport'd or dllimport'd. tree.c: merge_dllimport_decl_attributes handles dllexport/dllimport override semantics. */ diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h index b05cdab6bf4..c4bf61d9829 100644 --- a/gcc/config/ia64/ia64-protos.h +++ b/gcc/config/ia64/ia64-protos.h @@ -110,3 +110,5 @@ extern enum direction ia64_hpux_function_arg_padding (enum machine_mode, tree); extern void ia64_hpux_handle_builtin_pragma (struct cpp_reader *); extern void ia64_output_function_profiler (FILE *, int); extern void ia64_profile_hook (int); + +extern void ia64_optimization_options (int, int); diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 65798146893..d38a19a1501 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -54,6 +54,7 @@ Boston, MA 02110-1301, USA. */ #include "tree-gimple.h" #include "intl.h" #include "debug.h" +#include "params.h" /* This is used for communication between ASM_OUTPUT_LABEL and ASM_OUTPUT_LABELREF. */ @@ -4655,11 +4656,13 @@ ia64_print_operand (FILE * file, rtx x, int code) int pred_val = INTVAL (XEXP (x, 0)); /* Guess top and bottom 10% statically predicted. */ - if (pred_val < REG_BR_PROB_BASE / 50) + if (pred_val < REG_BR_PROB_BASE / 50 + && br_prob_note_reliable_p (x)) which = ".spnt"; else if (pred_val < REG_BR_PROB_BASE / 2) which = ".dpnt"; - else if (pred_val < REG_BR_PROB_BASE / 100 * 98) + else if (pred_val < REG_BR_PROB_BASE / 100 * 98 + || !br_prob_note_reliable_p (x)) which = ".dptk"; else which = ".sptk"; @@ -9307,7 +9310,8 @@ ia64_select_rtx_section (enum machine_mode mode, rtx x, unsigned HOST_WIDE_INT align) { if (GET_MODE_SIZE (mode) > 0 - && GET_MODE_SIZE (mode) <= ia64_section_threshold) + && GET_MODE_SIZE (mode) <= ia64_section_threshold + && !TARGET_NO_SDATA) return sdata_section; else return default_elf_select_rtx_section (mode, x, align); @@ -9748,4 +9752,13 @@ ia64_invalid_binary_op (int op ATTRIBUTE_UNUSED, tree type1, tree type2) return NULL; } +/* Implement overriding of the optimization options. */ +void +ia64_optimization_options (int level ATTRIBUTE_UNUSED, + int size ATTRIBUTE_UNUSED) +{ + /* Let the scheduler form additional regions. */ + set_param_value ("max-sched-extend-regions-iters", 2); +} + #include "gt-ia64.h" diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index a4e0c7eba2c..c9bb4171662 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -2043,4 +2043,8 @@ struct machine_function GTY(()) /* Switch on code for querying unit reservations. */ #define CPU_UNITS_QUERY 1 +/* Define this to change the optimizations performed by default. */ +#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) \ + ia64_optimization_options ((LEVEL), (SIZE)) + /* End of ia64.h */ diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64 index e3713f91f23..60535882bb7 100644 --- a/gcc/config/ia64/t-ia64 +++ b/gcc/config/ia64/t-ia64 @@ -51,4 +51,4 @@ ia64-c.o: $(srcdir)/config/ia64/ia64-c.c $(CONFIG_H) $(SYSTEM_H) \ # genattrtab generates very long string literals. insn-attrtab.o-warn = -Wno-error -ia64.o: debug.h +ia64.o: debug.h $(PARAMS_H) diff --git a/gcc/config/m32c/addsub.md b/gcc/config/m32c/addsub.md index 83587564ebd..45bd3cd3664 100644 --- a/gcc/config/m32c/addsub.md +++ b/gcc/config/m32c/addsub.md @@ -72,6 +72,56 @@ [(set_attr "flags" "oszc,oszc,oszc,oszc,oszc,n,n")] ) +(define_expand "addsi3" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") + (plus:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0") + (match_operand:SI 2 "mrai_operand" "iRsiSd,?Rmm,iRsiSd,?Rmm")))] + "TARGET_A24 ||TARGET_A16" + "" + ) + +(define_insn "addsi3_1" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,??Rmm,RsiSd,RsiSd,??Rmm,??Rmm,??Rmm,RsiSd") + (plus:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0,0,0,0,0") + (match_operand 2 "mrai_operand" "IU2,IU2,i,?Rmm,i,RsiSd,?Rmm,RsiSd")))] + "TARGET_A16" + "* + + switch (which_alternative) + { + case 0: + return \"add.w %X2,%h0\;adcf.w %H0\"; + case 1: + return \"add.w %X2,%h0\;adcf.w %H0\"; + case 2: + output_asm_insn (\"add.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"adc.w %X2,%H0\"; + case 3: + return \"add.w %h2,%h0\;adc.w %H2,%H0\"; + case 4: + output_asm_insn (\"add.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"adc.w %X2,%H0\"; + case 5: + return \"add.w %h2,%h0\;adc.w %H2,%H0\"; + case 6: + return \"add.w %h2,%h0\;adc.w %H2,%H0\"; + case 7: + return \"add.w %h2,%h0\;adc.w %H2,%H0\"; + }" + [(set_attr "flags" "x,x,x,x,x,x,x,x")] +) + +(define_insn "addsi3_2" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") + (plus:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0") + (match_operand:SI 2 "mrai_operand" "iRsiSd,?Rmm,iRsiSd,?Rmm")))] + "TARGET_A24" + "add.l\t%2,%0" + [(set_attr "flags" "oszc")] +) + (define_insn "subqi3" [(set (match_operand:QI 0 "mra_or_sp_operand" "=SdRhl,SdRhl,??Rmm,??Rmm, Raa,Raa,SdRhl,??Rmm, *Rsp") @@ -111,6 +161,51 @@ [(set_attr "flags" "oszc")] ) +(define_expand "subsi3" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") + (minus:SI (match_operand:SI 1 "mra_operand" "0,0,0,0") + (match_operand:SI 2 "mrai_operand" "iRsiSd,?Rmm,iRsiSd,?Rmm")))] + "TARGET_A24 ||TARGET_A16" + "" +) + +(define_insn "subsi3_1" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm,??Rmm,RsiSd") + (minus:SI (match_operand:SI 1 "mra_operand" "0,0,0,0,0,0") + (match_operand:SI 2 "mrai_operand" "i,?Rmm,i,RsiSd,?Rmm,RsiSd")))] + "TARGET_A16" + "* + switch (which_alternative) + { + case 0: + output_asm_insn (\"sub.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"sbb.w %X2,%H0\"; + case 1: + return \"sub.w %h2,%h0\;sbb.w %H2,%H0\"; + case 2: + output_asm_insn (\"sub.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"sbb.w %X2,%H0\"; + case 3: + return \"sub.w %h2,%h0\;sbb.w %H2,%H0\"; + case 4: + return \"sub.w %h2,%h0\;sbb.w %H2,%H0\"; + case 5: + return \"sub.w %h2,%h0\;sbb.w %H2,%H0\"; + }" + [(set_attr "flags" "x,x,x,x,x,x")] +) + +(define_insn "subsi3_2" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") + (minus:SI (match_operand:SI 1 "mra_operand" "0,0,0,0") + (match_operand:SI 2 "mrai_operand" "iRsiSd,?Rmm,iRsiSd,?Rmm")))] + "TARGET_A24" + "sub.l\t%2,%0" + [(set_attr "flags" "oszc,oszc,oszc,oszc")] +) + (define_insn "negqi2" [(set (match_operand:QI 0 "mra_operand" "=SdRhl,??Rmm") (neg:QI (match_operand:QI 1 "mra_operand" "0,0")))] diff --git a/gcc/config/m32c/bitops.md b/gcc/config/m32c/bitops.md index 56d6a75e163..87322d38629 100644 --- a/gcc/config/m32c/bitops.md +++ b/gcc/config/m32c/bitops.md @@ -113,6 +113,33 @@ [(set_attr "flags" "n,n,n,sz,sz,sz,sz")] ) +(define_insn "andsi3" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm,??Rmm,RsiSd") + (and:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0,0,0") + (match_operand:SI 2 "mrai_operand" "i,?Rmm,i,RsiSd,?Rmm,RsiSd")))] + "" + "* + switch (which_alternative) + { + case 0: + output_asm_insn (\"and.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"and.w %X2,%H0\"; + case 1: + return \"and.w %h2,%h0\;and.w %H2,%H0\"; + case 2: + output_asm_insn (\"and.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"and.w %X2,%H0\"; + case 3: + return \"and.w %h2,%h0\;and.w %H2,%H0\"; + case 4: + return \"and.w %h2,%h0\;and.w %H2,%H0\"; + case 5: + return \"and.w %h2,%h0\;and.w %H2,%H0\"; + }" + [(set_attr "flags" "x,x,x,x,x,x")] +) (define_insn "iorqi3_16" @@ -264,6 +291,34 @@ DONE;" ) +(define_insn "iorsi3" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm,??Rmm,RsiSd") + (ior:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0,0,0") + (match_operand:SI 2 "mrai_operand" "i,?Rmm,i,RsiSd,?Rmm,RsiSd")))] + "" + "* + switch (which_alternative) + { + case 0: + output_asm_insn (\"or.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"or.w %X2,%H0\"; + case 1: + return \"or.w %h2,%h0\;or.w %H2,%H0\"; + case 2: + output_asm_insn (\"or.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"or.w %X2,%H0\"; + case 3: + return \"or.w %h2,%h0\;or.w %H2,%H0\"; + case 4: + return \"or.w %h2,%h0\;or.w %H2,%H0\"; + case 5: + return \"or.w %h2,%h0\;or.w %H2,%H0\"; + }" + [(set_attr "flags" "x,x,x,x,x,x")] +) + (define_insn "xorqi3" [(set (match_operand:QI 0 "mra_operand" "=RhlSd,RhlSd,??Rmm,??Rmm") (xor:QI (match_operand:QI 1 "mra_operand" "%0,0,0,0") @@ -282,6 +337,34 @@ [(set_attr "flags" "sz,sz,sz,sz")] ) +(define_insn "xorsi3" + [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm,??Rmm,RsiSd") + (xor:SI (match_operand:SI 1 "mra_operand" "%0,0,0,0,0,0") + (match_operand:SI 2 "mrai_operand" "i,?Rmm,i,RsiSd,?Rmm,RsiSd")))] + "" + "* + switch (which_alternative) + { + case 0: + output_asm_insn (\"xor.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"xor.w %X2,%H0\"; + case 1: + return \"xor.w %h2,%h0\;xor.w %H2,%H0\"; + case 2: + output_asm_insn (\"xor.w %X2,%h0\",operands); + operands[2]= GEN_INT (INTVAL (operands[2]) >> 16); + return \"xor.w %X2,%H0\"; + case 3: + return \"xor.w %h2,%h0\;xor.w %H2,%H0\"; + case 4: + return \"xor.w %h2,%h0\;xor.w %H2,%H0\"; + case 5: + return \"xor.w %h2,%h0\;xor.w %H2,%H0\"; + }" + [(set_attr "flags" "x,x,x,x,x,x")] +) + (define_insn "one_cmplqi2" [(set (match_operand:QI 0 "mra_operand" "=RhlSd,??Rmm") (not:QI (match_operand:QI 1 "mra_operand" "0,0")))] diff --git a/gcc/config/m32c/cond.md b/gcc/config/m32c/cond.md index 9df4d041409..be590afc49e 100644 --- a/gcc/config/m32c/cond.md +++ b/gcc/config/m32c/cond.md @@ -22,6 +22,20 @@ ; conditionals - cmp, jcc, setcc, etc. +; Special note about conditional instructions: GCC always emits the +; compare right before the insn, which is good, because m32c's mov +; insns modify the flags. However, this means that any conditional +; insn that may require reloading must be kept with its compare until +; after reload finishes, else the reload insns might clobber the +; flags. Thus, these rules: +; +; * the cmp* expanders just save the operands in compare_op0 and +; compare_op1 via m32c_pend_compare. +; * conditional insns that won't need reload can call +; m32c_unpend_compare before their expansion. +; * other insns must expand to include the compare operands within, +; then split after reload to a separate compare and conditional. + ; Until support for relaxing is supported in gas, we must assume that ; short labels won't reach, so we must use long labels. ; Unfortunately, there aren't any conditional jumps with long labels, @@ -41,7 +55,7 @@ (pc)))] "" "#" - "" + "reload_completed" [(set (reg:CC FLG_REGNO) (compare (match_dup 1) (match_dup 2))) @@ -56,7 +70,7 @@ (if_then_else:QI (eq (reg:CC FLG_REGNO) (const_int 0)) (match_operand:QI 1 "const_int_operand" "i,i,0") (match_operand:QI 2 "const_int_operand" "i,0,i")))] - "TARGET_A16" + "TARGET_A16 && reload_completed" "@ stzx\t%1,%2,%0 stz\t%1,%0 @@ -69,30 +83,30 @@ (if_then_else:QHI (eq (reg:CC FLG_REGNO) (const_int 0)) (match_operand:QHI 1 "const_int_operand" "i,i,0") (match_operand:QHI 2 "const_int_operand" "i,0,i")))] - "TARGET_A24" + "TARGET_A24 && reload_completed" "@ stzx.\t%1,%2,%0 stz.\t%1,%0 stnz.\t%2,%0" [(set_attr "flags" "n,n,n")]) -(define_insn_and_split "stzx_reversed" - [(set (match_operand 0 "m32c_r0_operand" "") - (if_then_else (ne (reg:CC FLG_REGNO) (const_int 0)) - (match_operand 1 "const_int_operand" "") - (match_operand 2 "const_int_operand" "")))] - "TARGET_A24 || GET_MODE (operands[0]) == QImode" +(define_insn_and_split "stzx_reversed_" + [(set (match_operand:QHI 0 "m32c_r0_operand" "") + (if_then_else:QHI (ne (reg:CC FLG_REGNO) (const_int 0)) + (match_operand:QHI 1 "const_int_operand" "") + (match_operand:QHI 2 "const_int_operand" "")))] + "(TARGET_A24 || GET_MODE (operands[0]) == QImode) && reload_completed" "#" "" [(set (match_dup 0) - (if_then_else (eq (reg:CC FLG_REGNO) (const_int 0)) + (if_then_else:QHI (eq (reg:CC FLG_REGNO) (const_int 0)) (match_dup 2) (match_dup 1)))] "" ) -(define_insn "cmp" +(define_insn "cmp_op" [(set (reg:CC FLG_REGNO) (compare (match_operand:QHPSI 0 "mra_operand" "RraSd") (match_operand:QHPSI 1 "mrai_operand" "RraSdi")))] @@ -100,7 +114,14 @@ "* return m32c_output_compare(insn, operands); " [(set_attr "flags" "oszc")]) -(define_insn "b" +(define_expand "cmp" + [(set (reg:CC FLG_REGNO) + (compare (match_operand:QHPSI 0 "mra_operand" "RraSd") + (match_operand:QHPSI 1 "mrai_operand" "RraSdi")))] + "" + "m32c_pend_compare (operands); DONE;") + +(define_insn "b_op" [(set (pc) (if_then_else (any_cond (reg:CC FLG_REGNO) (const_int 0)) @@ -111,23 +132,131 @@ [(set_attr "flags" "n")] ) +(define_expand "b" + [(set (pc) + (if_then_else (any_cond (reg:CC FLG_REGNO) + (const_int 0)) + (label_ref (match_operand 0 "")) + (pc)))] + "" + "m32c_unpend_compare ();" +) + ;; m32c_conditional_register_usage changes the setcc_gen_code array to ;; point to the _24 variants if needed. -(define_insn "s" +;; We need to keep the compare and conditional sets together through +;; reload, because reload might need to add address reloads to the +;; set, which would clobber the flags. By keeping them together, the +;; reloads get put before the compare, thus preserving the flags. + +;; These are the post-split patterns for the conditional sets. + +(define_insn "s_op" [(set (match_operand:QI 0 "register_operand" "=Rqi") (any_cond:QI (reg:CC FLG_REGNO) (const_int 0)))] - "TARGET_A16" + "TARGET_A16 && reload_completed" "* return m32c_scc_pattern(operands, );") -(define_insn "s_24" +(define_insn "s_24_op" [(set (match_operand:HI 0 "mra_operand" "=RhiSd") (any_cond:HI (reg:CC FLG_REGNO) (const_int 0)))] - "TARGET_A24" + "TARGET_A24 && reload_completed" "sc\t%0" [(set_attr "flags" "n")] ) +;; These are the pre-split patterns for the conditional sets. Yes, +;; there are a lot of permutations. + +(define_insn_and_split "s_" + [(set (match_operand:QI 0 "register_operand" "=Rqi") + (any_cond:QI (match_operand:QHPSI 1 "mra_operand" "RraSd") + (match_operand:QHPSI 2 "mrai_operand" "RraSdi")))] + "TARGET_A16" + "#" + "reload_completed" + [(set (reg:CC FLG_REGNO) + (compare (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (any_cond:QI (reg:CC FLG_REGNO) (const_int 0)))] + "" + [(set_attr "flags" "x")] +) + +(define_insn_and_split "s__24" + [(set (match_operand:HI 0 "mra_nopp_operand" "=RhiSd") + (any_cond:HI (match_operand:QHPSI 1 "mra_operand" "RraSd") + (match_operand:QHPSI 2 "mrai_operand" "RraSdi")))] + "TARGET_A24" + "#" + "reload_completed" + [(set (reg:CC FLG_REGNO) + (compare (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (any_cond:HI (reg:CC FLG_REGNO) (const_int 0)))] + "" + [(set_attr "flags" "x")] +) + +(define_insn_and_split "movqicc__" + [(set (match_operand:QI 0 "register_operand" "") + (if_then_else:QI (eqne_cond:QI (match_operand:QHPSI 1 "mra_operand" "RraSd") + (match_operand:QHPSI 2 "mrai_operand" "RraSdi")) + (match_operand:QI 3 "const_int_operand" "") + (match_operand:QI 4 "const_int_operand" "")))] + "" + "#" + "reload_completed" + [(set (reg:CC FLG_REGNO) + (compare (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (if_then_else:QI (eqne_cond:QI (reg:CC FLG_REGNO) (const_int 0)) + (match_dup 3) + (match_dup 4)))] + "" + [(set_attr "flags" "x")] + ) + +(define_insn_and_split "movhicc__" + [(set (match_operand:HI 0 "register_operand" "") + (if_then_else:HI (eqne_cond:HI (match_operand:QHPSI 1 "mra_operand" "RraSd") + (match_operand:QHPSI 2 "mrai_operand" "RraSdi")) + (match_operand:QI 3 "const_int_operand" "") + (match_operand:QI 4 "const_int_operand" "")))] + "TARGET_A24" + "#" + "reload_completed" + [(set (reg:CC FLG_REGNO) + (compare (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (if_then_else:HI (eqne_cond:HI (reg:CC FLG_REGNO) (const_int 0)) + (match_dup 3) + (match_dup 4)))] + "" + [(set_attr "flags" "x")] + ) + +;; And these are the expanders, which read the pending compare +;; operands to build a combined insn. + +(define_expand "s" + [(set (match_operand:QI 0 "register_operand" "=Rqi") + (any_cond:QI (reg:CC FLG_REGNO) (const_int 0)))] + "TARGET_A16" + "m32c_expand_scc (, operands); DONE;") + +(define_expand "s_24" + [(set (match_operand:HI 0 "mra_nopp_operand" "=RhiSd") + (any_cond:HI (reg:CC FLG_REGNO) (const_int 0)))] + "TARGET_A24" + "m32c_expand_scc (, operands); DONE;") + + (define_expand "movqicc" [(set (match_operand:QI 0 "register_operand" "") (if_then_else:QI (match_operand 1 "m32c_eqne_operator" "") diff --git a/gcc/config/m32c/m32c-lib1.S b/gcc/config/m32c/m32c-lib1.S index d45f1fad550..ee02411126b 100644 --- a/gcc/config/m32c/m32c-lib1.S +++ b/gcc/config/m32c/m32c-lib1.S @@ -152,14 +152,15 @@ __m32c_eh_return: ___mulsi3: enter #0 push.w r2 - mov.w SAL,mem0 - mov.w SAH,mem2 - mulu.w SBL,mem0 /* writes to r2r0 */ + mov.w SAL,r0 + mulu.w SBL,r0 /* writes to r2r0 */ + mov.w r0,mem0 + mov.w r2,mem2 mov.w SAL,r0 mulu.w SBH,r0 /* writes to r2r0 */ add.w r0,mem2 mov.w SAH,r0 - mulu.w SBL,r0 + mulu.w SBL,r0 /* writes to r2r0 */ add.w r0,mem2 pop.w r2 exitd diff --git a/gcc/config/m32c/m32c-protos.h b/gcc/config/m32c/m32c-protos.h index a7bcd334393..06bd0070ac3 100644 --- a/gcc/config/m32c/m32c-protos.h +++ b/gcc/config/m32c/m32c-protos.h @@ -46,6 +46,7 @@ void m32c_register_pragmas (void); int m32c_regno_ok_for_base_p (int); int m32c_trampoline_alignment (void); int m32c_trampoline_size (void); +void m32c_unpend_compare (void); #if defined(RTX_CODE) && defined(TREE_CODE) @@ -68,10 +69,12 @@ int m32c_expand_movmemhi (rtx *); int m32c_expand_movstr (rtx *); void m32c_expand_neg_mulpsi3 (rtx *); int m32c_expand_setmemhi (rtx *); +void m32c_expand_scc (int, rtx *); int m32c_extra_constraint_p (rtx, char, const char *); int m32c_extra_constraint_p2 (rtx, char, const char *); int m32c_hard_regno_nregs (int, MM); int m32c_hard_regno_ok (int, MM); +bool m32c_immd_dbl_mov (rtx *, MM); rtx m32c_incoming_return_addr_rtx (void); void m32c_initialize_trampoline (rtx, rtx, rtx); int m32c_legitimate_address_p (MM, rtx, int); @@ -85,6 +88,7 @@ int m32c_mode_dependent_address (rtx); int m32c_modes_tieable_p (MM, MM); bool m32c_mov_ok (rtx *, MM); char * m32c_output_compare (rtx, rtx *); +void m32c_pend_compare (rtx *); int m32c_preferred_output_reload_class (rtx, int); int m32c_preferred_reload_class (rtx, int); int m32c_prepare_move (rtx *, MM); diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 186f666d0fb..68467873976 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -2301,6 +2301,7 @@ m32c_print_operand (FILE * file, rtx x, int code) const char *comma; HOST_WIDE_INT ival; int unsigned_const = 0; + int force_sign; /* Multiplies; constants are converted to sign-extended format but we need unsigned, so 'u' and 'U' tell us what size unsigned we @@ -2463,6 +2464,7 @@ m32c_print_operand (FILE * file, rtx x, int code) code = 0; encode_pattern (x); + force_sign = 0; for (i = 0; conversions[i].pattern; i++) if (conversions[i].code == code && streq (conversions[i].pattern, pattern)) @@ -2576,6 +2578,8 @@ m32c_print_operand (FILE * file, rtx x, int code) /* Integers used as addresses are unsigned. */ ival &= (TARGET_A24 ? 0xffffff : 0xffff); } + if (force_sign && ival >= 0) + fputc ('+', file); fprintf (file, HOST_WIDE_INT_PRINT_DEC, ival); break; } @@ -2620,13 +2624,14 @@ m32c_print_operand (FILE * file, rtx x, int code) /* Signed displacements off symbols need to have signs blended cleanly. */ if (conversions[i].format[j] == '+' - && (!code || code == 'I') + && (!code || code == 'D' || code == 'd') && ISDIGIT (conversions[i].format[j + 1]) - && GET_CODE (patternr[conversions[i].format[j + 1] - '0']) - == CONST_INT - && INTVAL (patternr[conversions[i].format[j + 1] - '0']) < - 0) - continue; + && (GET_CODE (patternr[conversions[i].format[j + 1] - '0']) + == CONST_INT)) + { + force_sign = 1; + continue; + } fputc (conversions[i].format[j], file); } break; @@ -2787,6 +2792,102 @@ m32c_mov_ok (rtx * operands, enum machine_mode mode ATTRIBUTE_UNUSED) return true; } +/* Returns TRUE if two consecutive HImode mov instructions, generated + for moving an immediate double data to a double data type variable + location, can be combined into single SImode mov instruction. */ +bool +m32c_immd_dbl_mov (rtx * operands, + enum machine_mode mode ATTRIBUTE_UNUSED) +{ + int flag = 0, okflag = 0, offset1 = 0, offset2 = 0, offsetsign = 0; + const char *str1; + const char *str2; + + if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF + && MEM_SCALAR_P (operands[0]) + && !MEM_IN_STRUCT_P (operands[0]) + && GET_CODE (XEXP (operands[2], 0)) == CONST + && GET_CODE (XEXP (XEXP (operands[2], 0), 0)) == PLUS + && GET_CODE (XEXP (XEXP (XEXP (operands[2], 0), 0), 0)) == SYMBOL_REF + && GET_CODE (XEXP (XEXP (XEXP (operands[2], 0), 0), 1)) == CONST_INT + && MEM_SCALAR_P (operands[2]) + && !MEM_IN_STRUCT_P (operands[2])) + flag = 1; + + else if (GET_CODE (XEXP (operands[0], 0)) == CONST + && GET_CODE (XEXP (XEXP (operands[0], 0), 0)) == PLUS + && GET_CODE (XEXP (XEXP (XEXP (operands[0], 0), 0), 0)) == SYMBOL_REF + && MEM_SCALAR_P (operands[0]) + && !MEM_IN_STRUCT_P (operands[0]) + && !(XINT (XEXP (XEXP (XEXP (operands[0], 0), 0), 1), 0) %4) + && GET_CODE (XEXP (operands[2], 0)) == CONST + && GET_CODE (XEXP (XEXP (operands[2], 0), 0)) == PLUS + && GET_CODE (XEXP (XEXP (XEXP (operands[2], 0), 0), 0)) == SYMBOL_REF + && MEM_SCALAR_P (operands[2]) + && !MEM_IN_STRUCT_P (operands[2])) + flag = 2; + + else if (GET_CODE (XEXP (operands[0], 0)) == PLUS + && GET_CODE (XEXP (XEXP (operands[0], 0), 0)) == REG + && REGNO (XEXP (XEXP (operands[0], 0), 0)) == FB_REGNO + && GET_CODE (XEXP (XEXP (operands[0], 0), 1)) == CONST_INT + && MEM_SCALAR_P (operands[0]) + && !MEM_IN_STRUCT_P (operands[0]) + && !(XINT (XEXP (XEXP (operands[0], 0), 1), 0) %4) + && REGNO (XEXP (XEXP (operands[2], 0), 0)) == FB_REGNO + && GET_CODE (XEXP (XEXP (operands[2], 0), 1)) == CONST_INT + && MEM_SCALAR_P (operands[2]) + && !MEM_IN_STRUCT_P (operands[2])) + flag = 3; + + else + return false; + + switch (flag) + { + case 1: + str1 = XSTR (XEXP (operands[0], 0), 0); + str2 = XSTR (XEXP (XEXP (XEXP (operands[2], 0), 0), 0), 0); + if (strcmp (str1, str2) == 0) + okflag = 1; + else + okflag = 0; + break; + case 2: + str1 = XSTR (XEXP (XEXP (XEXP (operands[0], 0), 0), 0), 0); + str2 = XSTR (XEXP (XEXP (XEXP (operands[2], 0), 0), 0), 0); + if (strcmp(str1,str2) == 0) + okflag = 1; + else + okflag = 0; + break; + case 3: + offset1 = XINT (XEXP (XEXP (operands[0], 0), 1), 0); + offset2 = XINT (XEXP (XEXP (operands[2], 0), 1), 0); + offsetsign = offset1 >> ((sizeof (offset1) * 8) -1); + if (((offset2-offset1) == 2) && offsetsign != 0) + okflag = 1; + else + okflag = 0; + break; + default: + okflag = 0; + } + + if (okflag == 1) + { + HOST_WIDE_INT val; + operands[4] = gen_rtx_MEM (SImode, XEXP (operands[0], 0)); + + val = (XINT (operands[3], 0) << 16) + (XINT (operands[1], 0) & 0xFFFF); + operands[5] = gen_rtx_CONST_INT (VOIDmode, val); + + return true; + } + + return false; +} + /* Expanders */ /* Subregs are non-orthogonal for us, because our registers are all @@ -3387,6 +3488,42 @@ m32c_expand_neg_mulpsi3 (rtx * operands) emit_insn (gen_truncsipsi2 (operands[0], temp2)); } +static rtx compare_op0, compare_op1; + +void +m32c_pend_compare (rtx *operands) +{ + compare_op0 = operands[0]; + compare_op1 = operands[1]; +} + +void +m32c_unpend_compare (void) +{ + switch (GET_MODE (compare_op0)) + { + case QImode: + emit_insn (gen_cmpqi_op (compare_op0, compare_op1)); + case HImode: + emit_insn (gen_cmphi_op (compare_op0, compare_op1)); + case PSImode: + emit_insn (gen_cmppsi_op (compare_op0, compare_op1)); + } +} + +void +m32c_expand_scc (int code, rtx *operands) +{ + enum machine_mode mode = TARGET_A16 ? QImode : HImode; + + emit_insn (gen_rtx_SET (mode, + operands[0], + gen_rtx_fmt_ee (code, + mode, + compare_op0, + compare_op1))); +} + /* Pattern Output Functions */ /* Returns a (OP (reg:CC FLG_REGNO) (const_int 0)) from some other @@ -3404,6 +3541,8 @@ int m32c_expand_movcc (rtx *operands) { rtx rel = operands[1]; + rtx cmp; + if (GET_CODE (rel) != EQ && GET_CODE (rel) != NE) return 1; if (GET_CODE (operands[2]) != CONST_INT @@ -3416,12 +3555,17 @@ m32c_expand_movcc (rtx *operands) operands[2] = operands[3]; operands[3] = tmp; } - if (TARGET_A16) - emit_insn (gen_stzx_16 (operands[0], operands[2], operands[3])); - else if (GET_MODE (operands[0]) == QImode) - emit_insn (gen_stzx_24_qi (operands[0], operands[2], operands[3])); - else - emit_insn (gen_stzx_24_hi (operands[0], operands[2], operands[3])); + + cmp = gen_rtx_fmt_ee (GET_CODE (rel), + GET_MODE (rel), + compare_op0, + compare_op1); + + emit_move_insn (operands[0], + gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]), + cmp, + operands[2], + operands[3])); return 0; } @@ -3435,6 +3579,14 @@ m32c_expand_insv (rtx *operands) if (INTVAL (operands[1]) != 1) return 1; + /* Our insv opcode (bset, bclr) can only insert a one-bit constant. */ + if (GET_CODE (operands[3]) != CONST_INT) + return 1; + if (INTVAL (operands[3]) != 0 + && INTVAL (operands[3]) != 1 + && INTVAL (operands[3]) != -1) + return 1; + mask = 1 << INTVAL (operands[2]); op0 = operands[0]; diff --git a/gcc/config/m32c/mov.md b/gcc/config/m32c/mov.md index 791ac5dcdbd..fde98d3723c 100644 --- a/gcc/config/m32c/mov.md +++ b/gcc/config/m32c/mov.md @@ -135,6 +135,17 @@ (match_dup 3))] "") +; Peephole to generate SImode mov instructions for storing an +; immediate double data to a memory location. +(define_peephole2 + [(set (match_operand:HI 0 "memory_operand" "") + (match_operand 1 "const_int_operand" "")) + (set (match_operand:HI 2 "memory_operand" "") + (match_operand 3 "const_int_operand" ""))] + "TARGET_A24 && m32c_immd_dbl_mov (operands, HImode)" + [(set (match_dup 4) (match_dup 5))] + "" +) ; Some PSI moves must be split. (define_split diff --git a/gcc/config/m32c/muldiv.md b/gcc/config/m32c/muldiv.md index a4bde6496ab..6913ea9a729 100644 --- a/gcc/config/m32c/muldiv.md +++ b/gcc/config/m32c/muldiv.md @@ -80,18 +80,18 @@ ) (define_insn "mulhisi3_c" - [(set (match_operand:SI 0 "mra_operand" "=RsiSd,??Rmm") - (mult:SI (sign_extend:SI (match_operand:HI 1 "mra_operand" "%0,0")) - (match_operand 2 "immediate_operand" "i,i")))] + [(set (match_operand:SI 0 "ra_operand" "=Rsi") + (mult:SI (sign_extend:SI (match_operand:HI 1 "mra_operand" "%0")) + (match_operand 2 "immediate_operand" "i")))] "" "mul.w\t%2,%1" [(set_attr "flags" "o")] ) (define_insn "mulhisi3_r" - [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") - (mult:SI (sign_extend:SI (match_operand:HI 1 "mra_operand" "%0,0,0,0")) - (sign_extend:SI (match_operand:HI 2 "mra_operand" "RhiSd,?Rmm,RhiSd,?Rmm"))))] + [(set (match_operand:SI 0 "mra_operand" "=Rsi,Rsi") + (mult:SI (sign_extend:SI (match_operand:HI 1 "mra_operand" "%0,0")) + (sign_extend:SI (match_operand:HI 2 "mra_operand" "RhiSd,?Rmm"))))] "" "mul.w\t%2,%1" [(set_attr "flags" "o")] @@ -107,18 +107,18 @@ ) (define_insn "umulhisi3_c" - [(set (match_operand:SI 0 "mra_operand" "=RsiSd,??Rmm") - (mult:SI (zero_extend:SI (match_operand:HI 1 "mra_operand" "%0,0")) - (match_operand 2 "immediate_operand" "i,i")))] + [(set (match_operand:SI 0 "ra_operand" "=Rsi") + (mult:SI (zero_extend:SI (match_operand:HI 1 "mra_operand" "%0")) + (match_operand 2 "immediate_operand" "i")))] "" "mulu.w\t%u2,%1" [(set_attr "flags" "o")] ) (define_insn "umulhisi3_r" - [(set (match_operand:SI 0 "mra_operand" "=RsiSd,RsiSd,??Rmm,??Rmm") - (mult:SI (zero_extend:SI (match_operand:HI 1 "mra_operand" "%0,0,0,0")) - (zero_extend:SI (match_operand:HI 2 "mra_operand" "RhiSd,?Rmm,RhiSd,?Rmm"))))] + [(set (match_operand:SI 0 "mra_operand" "=Rsi,Rsi") + (mult:SI (zero_extend:SI (match_operand:HI 1 "mra_operand" "%0,0")) + (zero_extend:SI (match_operand:HI 2 "mra_operand" "RhiSd,?Rmm"))))] "" "mulu.w\t%u2,%1" [(set_attr "flags" "o")] @@ -152,7 +152,7 @@ (match_operand 2 "m32c_psi_scale" "Ilb")))] "TARGET_A24" "if (GET_CODE (operands[2]) != CONST_INT - || INTVAL(operands[2]) < 0) + || ! m32c_psi_scale (operands[2], PSImode)) { m32c_expand_neg_mulpsi3 (operands); DONE; diff --git a/gcc/config/m32c/predicates.md b/gcc/config/m32c/predicates.md index 5b9549c6f7b..b0fbc846c89 100644 --- a/gcc/config/m32c/predicates.md +++ b/gcc/config/m32c/predicates.md @@ -141,6 +141,17 @@ (and (match_operand 0 "nonimmediate_operand" "") (not (match_operand 1 "cr_operand" "")))) +; As above, but no push/pop operations +(define_predicate "mra_nopp_operand" + (match_operand 0 "mra_operand" "") +{ + if (GET_CODE (op) == MEM + && (GET_CODE (XEXP (op, 0)) == PRE_DEC + || (GET_CODE (XEXP (op, 0)) == POST_INC))) + return 0; + return 1; +}) + ; TRUE for memory, r0..r3, a0..a1, or immediates. (define_predicate "mrai_operand" (and (and (match_operand 0 "m32c_any_operand" "") diff --git a/gcc/config/m32r/initfini.c b/gcc/config/m32r/initfini.c index 84bdc13fa45..ecee1c80591 100644 --- a/gcc/config/m32r/initfini.c +++ b/gcc/config/m32r/initfini.c @@ -1,33 +1,33 @@ /* .init/.fini section handling + C++ global constructor/destructor handling. This file is based on crtstuff.c, sol2-crti.asm, sol2-crtn.asm. -Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -In addition to the permissions in the GNU General Public License, the -Free Software Foundation gives you unlimited permission to link the -compiled version of this file into combinations with other programs, -and to distribute those combinations without any restriction coming -from the use of this file. (The General Public License restrictions -do apply in other respects; for example, they cover modification of -the file, and distribution when not linked into a combine -executable.) - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ + Copyright (C) 1996, 1997, 1998, 2006 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* Declare a pointer to void function type. */ typedef void (*func_ptr) (void); @@ -72,7 +72,7 @@ static void __do_global_dtors (void) asm ("__do_global_dtors") __attribute__ ((used, section (".text"))); static void -__do_global_dtors () +__do_global_dtors (void) { func_ptr *p; @@ -137,7 +137,7 @@ static void __do_global_ctors (void) asm ("__do_global_ctors") __attribute__ ((used, section (".text"))); static void -__do_global_ctors () +__do_global_ctors (void) { func_ptr *p; diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index d2bc85b0da6..beef7c9d395 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, Renesas M32R cpu. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005 Free Software Foundation, Inc. + 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -1372,7 +1372,8 @@ L2: .word STATIC #define DBX_OUTPUT_SOURCE_LINE(file, line, counter) \ do \ { \ - rtx begin_label = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);\ + const char * begin_label = \ + XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \ char label[64]; \ ASM_GENERATE_INTERNAL_LABEL (label, "LM", counter); \ \ diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md index 9b35d14f74f..552dd3f0ef3 100644 --- a/gcc/config/m32r/m32r.md +++ b/gcc/config/m32r/m32r.md @@ -1378,15 +1378,16 @@ return instruction; }" [(set_attr "type" "branch") - ; We use 400/800 instead of 512,1024 to account for inaccurate insn + ; cf PR gcc/28508 + ; We use 300/600 instead of 512,1024 to account for inaccurate insn ; lengths and insn alignments that are complex to track. ; It's not important that we be hyper-precise here. It may be more ; important blah blah blah when the chip supports parallel execution ; blah blah blah but until then blah blah blah this is simple and ; suffices. (set (attr "length") (if_then_else (ltu (plus (minus (match_dup 0) (pc)) - (const_int 400)) - (const_int 800)) + (const_int 300)) + (const_int 600)) (const_int 2) (const_int 4)))]) @@ -1407,15 +1408,16 @@ return instruction; }" [(set_attr "type" "branch") - ; We use 400/800 instead of 512,1024 to account for inaccurate insn + ; cf PR gcc/28508 + ; We use 300/600 instead of 512,1024 to account for inaccurate insn ; lengths and insn alignments that are complex to track. ; It's not important that we be hyper-precise here. It may be more ; important blah blah blah when the chip supports parallel execution ; blah blah blah but until then blah blah blah this is simple and ; suffices. (set (attr "length") (if_then_else (ltu (plus (minus (match_dup 0) (pc)) - (const_int 400)) - (const_int 800)) + (const_int 300)) + (const_int 600)) (const_int 2) (const_int 4)))]) diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index 7b3a8ed43b7..af3a03f1ee6 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -1006,26 +1006,26 @@ m68k_output_function_epilogue (FILE *stream, { int offset; - /* stack already has registers in it. Find the offset from - the bottom of stack to where the FP registers go */ + /* Stack already has registers in it. Find the offset from + the bottom of stack to where the FP registers go. */ if (current_frame.reg_no <= 2) offset = 0; else offset = current_frame.reg_no * 4; if (offset) - asm_fprintf (stream, - "\tfmovem %Rsp@(%wd), %I0x%x\n", + asm_fprintf (stream, + "\tfmovem %Rsp@(%d), %I0x%x\n", offset, current_frame.fpu_rev_mask); else - asm_fprintf (stream, + asm_fprintf (stream, "\tfmovem %Rsp@, %I0x%x\n", current_frame.fpu_rev_mask); } - else - asm_fprintf (stream, MOTOROLA ? - "\tfmovm (%Rsp)+,%I0x%x\n" : - "\tfmovem %Rsp@+,%I0x%x\n", - current_frame.fpu_rev_mask); + else + asm_fprintf (stream, MOTOROLA ? + "\tfmovm (%Rsp)+,%I0x%x\n" : + "\tfmovem %Rsp@+,%I0x%x\n", + current_frame.fpu_rev_mask); } else { diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 8e565a65516..d00f131712e 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -1085,8 +1085,8 @@ }) (define_insn "" - [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f,!r") - (match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r,!r"))] + [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f,!r,m,!r") + (match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r,!r,!r,m"))] "TARGET_68881" { if (FP_REG_P (operands[0])) @@ -6164,6 +6164,17 @@ return MOTOROLA ? "fbolt %l0" : "fjolt %l0"; }) +(define_insn "*bungt_rev" + [(set (pc) + (if_then_else (ungt (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" +{ + gcc_assert (cc_prev_status.flags & CC_IN_68881); + return MOTOROLA ? "fbole %l0" : "fjole %l0"; +}) + (define_insn "*bunle_rev" [(set (pc) (if_then_else (unle (cc0) (const_int 0)) @@ -6915,6 +6926,13 @@ return "fmove%.d %f1,%0"; }) +(define_insn "truncxfsf2" + [(set (match_operand:SF 0 "nonimmediate_operand" "=dm") + (float_truncate:SF + (match_operand:XF 1 "general_operand" "f")))] + "TARGET_68881" + "fmove%.s %f1,%0") + (define_insn "sin2" [(set (match_operand:FP 0 "nonimmediate_operand" "=f") (unspec:FP diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index 9e9e002733c..8686b14fa94 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. IRIX version 6. Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, - 2005 + 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -93,7 +93,7 @@ Boston, MA 02110-1301, USA. */ -L/usr/lib64} \ %{!shared:" \ SUBTARGET_DONT_WARN_UNUSED_SPEC \ - " %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc " \ + " %{pthread:-lpthread} %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc " \ SUBTARGET_WARN_UNUSED_SPEC "}" /* Avoid getting two warnings for libgcc.a everytime we link. */ @@ -112,3 +112,7 @@ Boston, MA 02110-1301, USA. */ %{!mips4:/usr/lib64/mips3/crtn.o%s}}}" #define MIPS_TFMODE_FORMAT mips_extended_format + +#undef SUBTARGET_CPP_SPEC +#define SUBTARGET_CPP_SPEC "%{pthread:-D_REENTRANT}" + diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h index d4df7cd3d93..da1ccea80cb 100644 --- a/gcc/config/mips/mips-protos.h +++ b/gcc/config/mips/mips-protos.h @@ -189,6 +189,7 @@ extern void mips_va_start (tree, rtx); extern bool mips_expand_unaligned_load (rtx, rtx, unsigned int, int); extern bool mips_expand_unaligned_store (rtx, rtx, unsigned int, int); +extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x); extern void override_options (void); extern void mips_conditional_register_usage (void); extern void mips_order_regs_for_local_alloc (void); @@ -243,6 +244,7 @@ extern const char *mips_output_order_conditional_branch (rtx, rtx *, bool); extern const char *mips_output_division (const char *, rtx *); extern unsigned int mips_hard_regno_nregs (int, enum machine_mode); extern bool mips_linked_madd_p (rtx, rtx); +extern int mips_store_data_bypass_p (rtx, rtx); extern rtx mips_prefetch_cookie (rtx, rtx); extern void irix_asm_output_align (FILE *, unsigned); diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index a12e82af707..91e90e0918e 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -759,6 +759,7 @@ const struct mips_cpu_info mips_cpu_info_table[] = { { "5kf", PROCESSOR_5KF, 64 }, { "20kc", PROCESSOR_20KC, 64 }, { "sb1", PROCESSOR_SB1, 64 }, + { "sb1a", PROCESSOR_SB1A, 64 }, { "sr71000", PROCESSOR_SR71000, 64 }, /* End marker */ @@ -1016,6 +1017,21 @@ static struct mips_rtx_cost_data const mips_rtx_cost_data[PROCESSOR_MAX] = 4 /* memory_latency */ }, { /* SB1 */ + /* These costs are the same as the SB-1A below. */ + COSTS_N_INSNS (4), /* fp_add */ + COSTS_N_INSNS (4), /* fp_mult_sf */ + COSTS_N_INSNS (4), /* fp_mult_df */ + COSTS_N_INSNS (24), /* fp_div_sf */ + COSTS_N_INSNS (32), /* fp_div_df */ + COSTS_N_INSNS (3), /* int_mult_si */ + COSTS_N_INSNS (4), /* int_mult_di */ + COSTS_N_INSNS (36), /* int_div_si */ + COSTS_N_INSNS (68), /* int_div_di */ + 1, /* branch_cost */ + 4 /* memory_latency */ + }, + { /* SB1-A */ + /* These costs are the same as the SB-1 above. */ COSTS_N_INSNS (4), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (4), /* fp_mult_df */ @@ -3894,13 +3910,24 @@ function_arg (const CUMULATIVE_ARGS *cum, enum machine_mode mode, inner = GET_MODE_INNER (mode); reg = FP_ARG_FIRST + info.reg_offset; - real = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (inner, reg), - const0_rtx); - imag = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (inner, reg + info.reg_words / 2), - GEN_INT (GET_MODE_SIZE (inner))); - return gen_rtx_PARALLEL (mode, gen_rtvec (2, real, imag)); + if (info.reg_words * UNITS_PER_WORD == GET_MODE_SIZE (inner)) + { + /* Real part in registers, imaginary part on stack. */ + gcc_assert (info.stack_words == info.reg_words); + return gen_rtx_REG (inner, reg); + } + else + { + gcc_assert (info.stack_words == 0); + real = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (inner, reg), + const0_rtx); + imag = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (inner, + reg + info.reg_words / 2), + GEN_INT (GET_MODE_SIZE (inner))); + return gen_rtx_PARALLEL (mode, gen_rtvec (2, real, imag)); + } } if (!info.fpr_p) @@ -4514,13 +4541,15 @@ bool mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos) { rtx left, right; + enum machine_mode mode; if (!mips_get_unaligned_mem (&dest, width, bitpos, &left, &right)) return false; - src = gen_lowpart (mode_for_size (width, MODE_INT, 0), src); + mode = mode_for_size (width, MODE_INT, 0); + src = gen_lowpart (mode, src); - if (GET_MODE (src) == DImode) + if (mode == DImode) { emit_insn (gen_mov_sdl (dest, src, left)); emit_insn (gen_mov_sdr (copy_rtx (dest), copy_rtx (src), right)); @@ -4533,6 +4562,20 @@ mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos) return true; } +/* Return true if X is a MEM with the same size as MODE. */ + +bool +mips_mem_fits_mode_p (enum machine_mode mode, rtx x) +{ + rtx size; + + if (!MEM_P (x)) + return false; + + size = MEM_SIZE (x); + return size && INTVAL (size) == GET_MODE_SIZE (mode); +} + /* Return true if (zero_extract OP SIZE POSITION) can be used as the source of an "ext" instruction or the destination of an "ins" instruction. OP must be a register operand and the following @@ -5830,8 +5873,9 @@ mips_file_start (void) /* There is no ELF header flag to distinguish long32 forms of the EABI from long64 forms. Emit a special section to help tools - such as GDB. */ - if (mips_abi == ABI_EABI) + such as GDB. Do the same for o64, which is sometimes used with + -mlong64. */ + if (mips_abi == ABI_EABI || mips_abi == ABI_O64) fprintf (asm_out_file, "\t.section .gcc_compiled_long%d\n", TARGET_LONG64 ? 64 : 32); @@ -9892,6 +9936,7 @@ mips_issue_rate (void) return 2; case PROCESSOR_SB1: + case PROCESSOR_SB1A: /* This is actually 4, but we get better performance if we claim 3. This is partly because of unwanted speculative code motion with the larger number, and partly because in most common cases we can't @@ -9910,11 +9955,25 @@ static int mips_multipass_dfa_lookahead (void) { /* Can schedule up to 4 of the 6 function units in any one cycle. */ - if (mips_tune == PROCESSOR_SB1) + if (TUNE_SB1) return 4; return 0; } + +/* Implements a store data bypass check. We need this because the cprestore + pattern is type store, but defined using an UNSPEC. This UNSPEC causes the + default routine to abort. We just return false for that case. */ +/* ??? Should try to give a better result here than assuming false. */ + +int +mips_store_data_bypass_p (rtx out_insn, rtx in_insn) +{ + if (GET_CODE (PATTERN (in_insn)) == UNSPEC_VOLATILE) + return false; + + return ! store_data_bypass_p (out_insn, in_insn); +} /* Given that we have an rtx of the form (prefetch ... WRITE LOCALITY), return the first operand of the associated "pref" or "prefx" insn. */ diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index f0fe41193a0..4b72c8c8e3a 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -58,6 +58,7 @@ enum processor_type { PROCESSOR_R8000, PROCESSOR_R9000, PROCESSOR_SB1, + PROCESSOR_SB1A, PROCESSOR_SR71000, PROCESSOR_MAX }; @@ -208,7 +209,8 @@ extern const struct mips_rtx_cost_data *mips_cost; #define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500) #define TARGET_MIPS7000 (mips_arch == PROCESSOR_R7000) #define TARGET_MIPS9000 (mips_arch == PROCESSOR_R9000) -#define TARGET_SB1 (mips_arch == PROCESSOR_SB1) +#define TARGET_SB1 (mips_arch == PROCESSOR_SB1 \ + || mips_arch == PROCESSOR_SB1A) #define TARGET_SR71K (mips_arch == PROCESSOR_SR71000) /* Scheduling target defines. */ @@ -223,7 +225,8 @@ extern const struct mips_rtx_cost_data *mips_cost; #define TUNE_MIPS6000 (mips_tune == PROCESSOR_R6000) #define TUNE_MIPS7000 (mips_tune == PROCESSOR_R7000) #define TUNE_MIPS9000 (mips_tune == PROCESSOR_R9000) -#define TUNE_SB1 (mips_tune == PROCESSOR_SB1) +#define TUNE_SB1 (mips_tune == PROCESSOR_SB1 \ + || mips_tune == PROCESSOR_SB1A) /* True if the pre-reload scheduler should try to create chains of multiply-add or multiply-subtract instructions. For example, diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 47723564723..a9b9add0dcf 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -340,7 +340,7 @@ ;; Attribute describing the processor. This attribute must match exactly ;; with the processor_type enumeration in mips.h. (define_attr "cpu" - "r3000,4kc,4kp,5kc,5kf,20kc,24k,24kx,m4k,r3900,r6000,r4000,r4100,r4111,r4120,r4130,r4300,r4600,r4650,r5000,r5400,r5500,r7000,r8000,r9000,sb1,sr71000" + "r3000,4kc,4kp,5kc,5kf,20kc,24k,24kx,m4k,r3900,r6000,r4000,r4100,r4111,r4120,r4130,r4300,r4600,r4650,r5000,r5400,r5500,r7000,r8000,r9000,sb1,sb1a,sr71000" (const (symbol_ref "mips_tune"))) ;; The type of hardware hazard associated with this instruction. @@ -2970,7 +2970,7 @@ (unspec:GPR [(match_operand:BLK 1 "memory_operand" "m") (match_operand:QI 2 "memory_operand" "m")] UNSPEC_LOAD_LEFT))] - "!TARGET_MIPS16" + "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[1])" "l\t%0,%2" [(set_attr "type" "load") (set_attr "mode" "")]) @@ -2981,7 +2981,7 @@ (match_operand:QI 2 "memory_operand" "m") (match_operand:GPR 3 "register_operand" "0")] UNSPEC_LOAD_RIGHT))] - "!TARGET_MIPS16" + "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[1])" "r\t%0,%2" [(set_attr "type" "load") (set_attr "mode" "")]) @@ -2991,7 +2991,7 @@ (unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ") (match_operand:QI 2 "memory_operand" "m")] UNSPEC_STORE_LEFT))] - "!TARGET_MIPS16" + "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[0])" "l\t%z1,%2" [(set_attr "type" "store") (set_attr "mode" "")]) @@ -3002,7 +3002,7 @@ (match_operand:QI 2 "memory_operand" "m") (match_dup 0)] UNSPEC_STORE_RIGHT))] - "!TARGET_MIPS16" + "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[0])" "r\t%z1,%2" [(set_attr "type" "store") (set_attr "mode" "")]) @@ -5458,6 +5458,9 @@ "HAVE_AS_TLS && !TARGET_MIPS16" ".set\tpush\;.set\tmips32r2\t\;rdhwr\t%0,$29\;.set\tpop" [(set_attr "type" "unknown") + ; Since rdhwr always generates a trap for now, putting it in a delay + ; slot would make the kernel's emulation of it much slower. + (set_attr "can_delay" "no") (set_attr "mode" "")]) ; The MIPS Paired-Single Floating Point and MIPS-3D Instructions. diff --git a/gcc/config/mips/sb1.md b/gcc/config/mips/sb1.md index b1b085f45ed..7db31ef5516 100644 --- a/gcc/config/mips/sb1.md +++ b/gcc/config/mips/sb1.md @@ -90,7 +90,7 @@ ;; (define_insn_reservation "ir_sb1_unknown" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "unknown,multi")) "sb1_ls0+sb1_ls1+sb1_ex0+sb1_ex1+sb1_fp0+sb1_fp1") @@ -102,15 +102,16 @@ ;; investigated. Maybe using 2 here will give better results. (define_insn_reservation "ir_sb1_branch" 0 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "branch,jump,call")) "sb1_ex0") ;; ??? This is 1 cycle for ldl/ldr to ldl/ldr when they use the same data ;; register as destination. -;; ??? Can co-issue a load with a dependent arith insn if it executes on an EX -;; unit. Can not co-issue if the dependent insn executes on an LS unit. +;; ??? SB-1 can co-issue a load with a dependent arith insn if it executes on +;; an EX unit. Can not co-issue if the dependent insn executes on an LS unit. +;; SB-1A can always co-issue here. ;; A load normally has a latency of zero cycles. In some cases, dependent ;; insns can be issued in the same cycle. However, a value of 1 gives @@ -121,17 +122,22 @@ (eq_attr "type" "load,prefetch")) "sb1_ls0 | sb1_ls1") +(define_insn_reservation "ir_sb1a_load" 0 + (and (eq_attr "cpu" "sb1a") + (eq_attr "type" "load,prefetch")) + "sb1_ls0 | sb1_ls1") + ;; Can not co-issue fpload with fp exe when in 32-bit mode. (define_insn_reservation "ir_sb1_fpload" 0 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fpload") (ne (symbol_ref "TARGET_FLOAT64") (const_int 0)))) "sb1_ls0 | sb1_ls1") (define_insn_reservation "ir_sb1_fpload_32bitfp" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fpload") (eq (symbol_ref "TARGET_FLOAT64") (const_int 0)))) @@ -140,14 +146,14 @@ ;; Indexed loads can only execute on LS1 pipe. (define_insn_reservation "ir_sb1_fpidxload" 0 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fpidxload") (ne (symbol_ref "TARGET_FLOAT64") (const_int 0)))) "sb1_ls1") (define_insn_reservation "ir_sb1_fpidxload_32bitfp" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fpidxload") (eq (symbol_ref "TARGET_FLOAT64") (const_int 0)))) @@ -156,7 +162,7 @@ ;; prefx can only execute on the ls1 pipe. (define_insn_reservation "ir_sb1_prefetchx" 0 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "prefetchx")) "sb1_ls1") @@ -164,19 +170,19 @@ ;; there is a RAW dependency. (define_insn_reservation "ir_sb1_store" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "store")) "sb1_ls0+sb1_ex1 | sb1_ls0+sb1_ex0 | sb1_ls1+sb1_ex1 | sb1_ls1+sb1_ex0") (define_insn_reservation "ir_sb1_fpstore" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "fpstore")) "sb1_ls0+sb1_fp1 | sb1_ls0+sb1_fp0 | sb1_ls1+sb1_fp1 | sb1_ls1+sb1_fp0") ;; Indexed stores can only execute on LS1 pipe. (define_insn_reservation "ir_sb1_fpidxstore" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "fpidxstore")) "sb1_ls1+sb1_fp1 | sb1_ls1+sb1_fp0") @@ -188,18 +194,18 @@ ;; be an address dependence. (define_bypass 3 - "ir_sb1_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp,ir_sb1_fpidxload, - ir_sb1_fpidxload_32bitfp" - "ir_sb1_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp,ir_sb1_fpidxload, - ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") + "ir_sb1_load,ir_sb1a_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp, + ir_sb1_fpidxload,ir_sb1_fpidxload_32bitfp" + "ir_sb1_load,ir_sb1a_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp, + ir_sb1_fpidxload,ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") (define_bypass 3 - "ir_sb1_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp,ir_sb1_fpidxload, - ir_sb1_fpidxload_32bitfp" + "ir_sb1_load,ir_sb1a_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp, + ir_sb1_fpidxload,ir_sb1_fpidxload_32bitfp" "ir_sb1_store,ir_sb1_fpstore,ir_sb1_fpidxstore" - "store_data_bypass_p") + "mips_store_data_bypass_p") -;; Simple alu instructions can execute on the LS1 unit. +;; On SB-1, simple alu instructions can execute on the LS1 unit. ;; ??? A simple alu insn issued on an LS unit has 0 cycle latency to an EX ;; insn, to a store (for data), and to an xfer insn. It has 1 cycle latency to @@ -233,18 +239,26 @@ (eq_attr "type" "const,arith")) "sb1_ls1 | sb1_ex1 | sb1_ex0") +;; On SB-1A, simple alu instructions can not execute on the LS1 unit, and we +;; have none of the above problems. + +(define_insn_reservation "ir_sb1a_simple_alu" 1 + (and (eq_attr "cpu" "sb1a") + (eq_attr "type" "const,arith")) + "sb1_ex1 | sb1_ex0") + ;; ??? condmove also includes some FP instructions that execute on the FP ;; units. This needs to be clarified. (define_insn_reservation "ir_sb1_alu" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "condmove,nop,shift")) "sb1_ex1 | sb1_ex0") ;; These are type arith/darith that only execute on the EX0 unit. (define_insn_reservation "ir_sb1_alu_0" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "slt,clz,trap")) "sb1_ex0") @@ -255,25 +269,25 @@ ;; be an address dependence. (define_bypass 5 - "ir_sb1_alu,ir_sb1_alu_0,ir_sb1_mfhi,ir_sb1_mflo" - "ir_sb1_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp,ir_sb1_fpidxload, - ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") + "ir_sb1a_simple_alu,ir_sb1_alu,ir_sb1_alu_0,ir_sb1_mfhi,ir_sb1_mflo" + "ir_sb1_load,ir_sb1a_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp, + ir_sb1_fpidxload,ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") (define_bypass 5 - "ir_sb1_alu,ir_sb1_alu_0,ir_sb1_mfhi,ir_sb1_mflo" + "ir_sb1a_simple_alu,ir_sb1_alu,ir_sb1_alu_0,ir_sb1_mfhi,ir_sb1_mflo" "ir_sb1_store,ir_sb1_fpstore,ir_sb1_fpidxstore" - "store_data_bypass_p") + "mips_store_data_bypass_p") ;; mf{hi,lo} is 1 cycle. (define_insn_reservation "ir_sb1_mfhi" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "mfhilo") (not (match_operand 1 "lo_operand")))) "sb1_ex1") (define_insn_reservation "ir_sb1_mflo" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "mfhilo") (match_operand 1 "lo_operand"))) "sb1_ex1") @@ -281,7 +295,7 @@ ;; mt{hi,lo} to mul/div is 4 cycles. (define_insn_reservation "ir_sb1_mthilo" 4 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "mthilo")) "sb1_ex1") @@ -295,7 +309,7 @@ ;; to/from hilo registers. (define_insn_reservation "ir_sb1_mulsi" 3 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "imul,imul3,imadd") (eq_attr "mode" "SI"))) "sb1_ex1+sb1_mul") @@ -304,7 +318,7 @@ ;; Blocks any other multiply insn issue for 1 cycle. (define_insn_reservation "ir_sb1_muldi" 4 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "imul,imul3") (eq_attr "mode" "DI"))) "sb1_ex1+sb1_mul, sb1_mul") @@ -320,13 +334,13 @@ (define_bypass 7 "ir_sb1_mulsi,ir_sb1_muldi" - "ir_sb1_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp,ir_sb1_fpidxload, - ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") + "ir_sb1_load,ir_sb1a_load,ir_sb1_fpload,ir_sb1_fpload_32bitfp, + ir_sb1_fpidxload,ir_sb1_fpidxload_32bitfp,ir_sb1_prefetchx") (define_bypass 7 "ir_sb1_mulsi,ir_sb1_muldi" "ir_sb1_store,ir_sb1_fpstore,ir_sb1_fpidxstore" - "store_data_bypass_p") + "mips_store_data_bypass_p") ;; The divide unit is not pipelined. Divide busy is asserted in the 4th ;; cycle, and then deasserted on the latency cycle. So only one divide at @@ -340,37 +354,37 @@ ;; stall for 33 cycles. This does not seem significant enough to worry about. (define_insn_reservation "ir_sb1_divsi" 36 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "idiv") (eq_attr "mode" "SI"))) "sb1_ex1, nothing*3, sb1_div*32") (define_insn_reservation "ir_sb1_divdi" 68 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "idiv") (eq_attr "mode" "DI"))) "sb1_ex1, nothing*3, sb1_div*64") (define_insn_reservation "ir_sb1_fpu_2pipes" 4 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fmove,fadd,fmul,fabs,fneg,fcvt,frdiv1,frsqrt1") (eq_attr "sb1_fp_pipes" "two"))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_fpu_1pipe" 4 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fmove,fadd,fmul,fabs,fneg,fcvt,frdiv1,frsqrt1") (eq_attr "sb1_fp_pipes" "one"))) "sb1_fp1") (define_insn_reservation "ir_sb1_fpu_step2_2pipes" 8 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv2,frsqrt2") (eq_attr "sb1_fp_pipes" "two"))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_fpu_step2_1pipe" 8 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv2,frsqrt2") (eq_attr "sb1_fp_pipes" "one"))) "sb1_fp1") @@ -381,26 +395,26 @@ ;; ??? Blocks issue of another non-madd/msub after 4 cycles. (define_insn_reservation "ir_sb1_fmadd_2pipes" 8 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fmadd") (eq_attr "sb1_fp_pipes" "two"))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_fmadd_1pipe" 8 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fmadd") (eq_attr "sb1_fp_pipes" "one"))) "sb1_fp1") (define_insn_reservation "ir_sb1_fcmp" 4 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (eq_attr "type" "fcmp")) "sb1_fp1") ;; mtc1 latency 5 cycles. (define_insn_reservation "ir_sb1_mtxfer" 5 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "xfer") (match_operand 0 "fpr_operand"))) "sb1_fp0") @@ -408,7 +422,7 @@ ;; mfc1 latency 1 cycle. (define_insn_reservation "ir_sb1_mfxfer" 1 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "xfer") (not (match_operand 0 "fpr_operand")))) "sb1_fp0") @@ -417,14 +431,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_divsf_2pipes" 24 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_divsf_1pipe" 24 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "one")))) @@ -434,14 +448,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_divdf_2pipes" 32 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_divdf_1pipe" 32 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "one")))) @@ -451,14 +465,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_recipsf_2pipes" 12 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_recipsf_1pipe" 12 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "one")))) @@ -468,14 +482,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_recipdf_2pipes" 20 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_recipdf_1pipe" 20 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frdiv") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "one")))) @@ -485,14 +499,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_sqrtsf_2pipes" 28 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fsqrt") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_sqrtsf_1pipe" 28 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fsqrt") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "one")))) @@ -502,14 +516,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_sqrtdf_2pipes" 40 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fsqrt") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_sqrtdf_1pipe" 40 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "fsqrt") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "one")))) @@ -519,14 +533,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_rsqrtsf_2pipes" 16 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frsqrt") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_rsqrtsf_1pipe" 16 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frsqrt") (and (eq_attr "mode" "SF") (eq_attr "sb1_fp_pipes" "one")))) @@ -536,14 +550,14 @@ ;; restrictions. (define_insn_reservation "ir_sb1_rsqrtdf_2pipes" 28 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frsqrt") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "two")))) "sb1_fp1 | sb1_fp0") (define_insn_reservation "ir_sb1_rsqrtdf_1pipe" 28 - (and (eq_attr "cpu" "sb1") + (and (eq_attr "cpu" "sb1,sb1a") (and (eq_attr "type" "frsqrt") (and (eq_attr "mode" "DF") (eq_attr "sb1_fp_pipes" "one")))) diff --git a/gcc/config/mips/t-elf b/gcc/config/mips/t-elf index 7661ccb2d1a..f2da07d1bcd 100644 --- a/gcc/config/mips/t-elf +++ b/gcc/config/mips/t-elf @@ -33,8 +33,7 @@ TARGET_LIBGCC2_CFLAGS = -G 0 MULTILIB_OPTIONS = msoft-float EL/EB MULTILIB_DIRNAMES = soft-float el eb -MULTILIB_MATCHES = EL=mel EB=meb -MULTILIB_MATCHES = msingle-float=m4650 +MULTILIB_MATCHES = EL=mel EB=meb msingle-float=m4650 EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o LIBGCC = stmp-multilib diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 index 4f820ff2a56..0592e7fa999 100644 --- a/gcc/config/mips/t-linux64 +++ b/gcc/config/mips/t-linux64 @@ -11,7 +11,7 @@ tp-bit.c: $(srcdir)/config/fp-bit.c echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c echo '#endif' >> tp-bit.c echo '#if __LDBL_MANT_DIG__ == 113' >> tp-bit.c - echo '#define QUIET_NAN_NEGATED' >> dp-bit.c + echo '#define QUIET_NAN_NEGATED' >> tp-bit.c echo '# define TFLOAT' >> tp-bit.c cat $(srcdir)/config/fp-bit.c >> tp-bit.c echo '#endif' >> tp-bit.c diff --git a/gcc/config/mips/t-rtems b/gcc/config/mips/t-rtems dissimilarity index 84% index 742e4e32db6..b012100415a 100644 --- a/gcc/config/mips/t-rtems +++ b/gcc/config/mips/t-rtems @@ -1,5 +1,16 @@ -# Custom multilibs for RTEMS - -MULTILIB_OPTIONS = mips1/mips3/mips32 msoft-float/msingle-float -MULTILIB_DIRNAMES = mips1 mips3 mips32 soft-float single -MULTILIB_MATCHES = msingle-float=m4650 +# Custom multilibs for RTEMS + +# default is mips1 EB hard-float +MULTILIB_OPTIONS = mips1/mips3/mips32 EB/EL msoft-float +MULTILIB_DIRNAMES = mips1 mips3 mips32 eb el soft-float +MULTILIB_MATCHES = EL=mel EB=meb + +MULTILIB_EXCEPTIONS = + +# Big endian only +MULTILIB_EXCEPTIONS += EL* +MULTILIB_EXCEPTIONS += mips32/EL* + +# Little endian only +MULTILIB_EXCEPTIONS += mips3 +MULTILIB_EXCEPTIONS += mips3/msoft-float diff --git a/gcc/config/mips/t-sb1 b/gcc/config/mips/t-sb1 new file mode 100644 index 00000000000..b181bb7d00c --- /dev/null +++ b/gcc/config/mips/t-sb1 @@ -0,0 +1,44 @@ +# GP-rel: G0 only +# +# Endianness: EB or EL +# +# ABIs: mabi=32 +# mabi=o64 +# mabi=o64/mlong64 +# +# FPU: (default mhard-float) +# msoft-float (only for mabi=32) +# + +MULTILIB_EXTRA_OPTS = G0 + +MULTILIB_OPTIONS = \ + EB/EL \ + mabi=32/mabi=o64 \ + mips32/mips64 \ + mlong64/msoft-float \ + +MULTILIB_DIRNAMES = \ + eb el \ + o32 o64 \ + mips32 mips64 \ + long64 soft-float \ + +MULTILIB_MATCHES = \ + EB=meb EL=mel \ + +MULTILIB_EXCEPTIONS = \ + *mabi=32/*mlong64* \ + +MULTILIB_EXCLUSIONS = \ + mips32/!mabi=32 \ + mabi=32/!mips32 \ + msoft-float/!mabi=32 \ + +# Small multilib list for quick builds and tests. +# Must either comment out everything above these lines, or everything below +# these lines. + +#MULTILIB_OPTIONS = EB/EL msoft-float +#MULTILIB_DIRNAMES = eb el soft-float +#MULTILIB_MATCHES = EB=meb EL=mel diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index 84dd106f994..ef153e7f585 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -37,6 +37,8 @@ Boston, MA 02110-1301, USA. */ { \ builtin_define ("__mn10300__"); \ builtin_define ("__MN10300__"); \ + builtin_assert ("cpu=mn10300"); \ + builtin_assert ("machine=mn10300"); \ } \ while (0) diff --git a/gcc/config/rs6000/aix52.h b/gcc/config/rs6000/aix52.h index 723986ff5b1..87d2157c61e 100644 --- a/gcc/config/rs6000/aix52.h +++ b/gcc/config/rs6000/aix52.h @@ -68,6 +68,7 @@ do { \ %{mcpu=power4: -m620} \ %{mcpu=power5: -m620} \ %{mcpu=power5+: -m620} \ +%{mcpu=power6: -m620} \ %{mcpu=powerpc: -mppc} \ %{mcpu=rs64a: -mppc} \ %{mcpu=603: -m603} \ diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index d4bf08e228c..e0326856f1a 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -65,7 +65,6 @@ (UNSPEC_VPKSWUS 103) (UNSPEC_VRL 104) (UNSPEC_VSL 107) - (UNSPEC_VSLW 109) (UNSPEC_VSLV4SI 110) (UNSPEC_VSLO 111) (UNSPEC_VSR 118) @@ -546,13 +545,13 @@ rtx neg0; /* Generate [-0.0, -0.0, -0.0, -0.0]. */ - neg0 = gen_reg_rtx (V4SFmode); - emit_insn (gen_altivec_vspltisw_v4sf (neg0, constm1_rtx)); - emit_insn (gen_altivec_vslw_v4sf (neg0, neg0, neg0)); + neg0 = gen_reg_rtx (V4SImode); + emit_insn (gen_altivec_vspltisw (neg0, constm1_rtx)); + emit_insn (gen_altivec_vslw (neg0, neg0, neg0)); /* Use the multiply-add. */ emit_insn (gen_altivec_vmaddfp (operands[0], operands[1], operands[2], - neg0)); + gen_lowpart (V4SFmode, neg0))); DONE; }") @@ -1168,15 +1167,6 @@ "vsl %0,%1,%2" [(set_attr "type" "vecsimple")]) -(define_insn "altivec_vslw_v4sf" - [(set (match_operand:V4SF 0 "register_operand" "=v") - (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") - (match_operand:V4SF 2 "register_operand" "v")] - UNSPEC_VSLW))] - "TARGET_ALTIVEC" - "vslw %0,%1,%2" - [(set_attr "type" "vecsimple")]) - (define_insn "altivec_vsl" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") @@ -1317,14 +1307,6 @@ "vspltis %0,%1" [(set_attr "type" "vecperm")]) -(define_insn "altivec_vspltisw_v4sf" - [(set (match_operand:V4SF 0 "register_operand" "=v") - (vec_duplicate:V4SF - (float:SF (match_operand:QI 1 "s5bit_cint_operand" "i"))))] - "TARGET_ALTIVEC" - "vspltisw %0,%1" - [(set_attr "type" "vecperm")]) - (define_insn "ftruncv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=v") (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] @@ -1992,16 +1974,16 @@ ;; vandc %0,%1,SCRATCH2 (define_expand "absv4sf2" [(set (match_dup 2) - (vec_duplicate:V4SF (float:SF (const_int -1)))) + (vec_duplicate:V4SI (const_int -1))) (set (match_dup 3) - (unspec:V4SF [(match_dup 2) (match_dup 2)] UNSPEC_VSLW)) + (unspec:V4SI [(match_dup 2) (match_dup 2)] UNSPEC_VSL)) (set (match_operand:V4SF 0 "register_operand" "=v") - (and:V4SF (not:V4SF (match_dup 3)) + (and:V4SF (not:V4SF (subreg:V4SF (match_dup 3) 0)) (match_operand:V4SF 1 "register_operand" "v")))] "TARGET_ALTIVEC" { - operands[2] = gen_reg_rtx (V4SFmode); - operands[3] = gen_reg_rtx (V4SFmode); + operands[2] = gen_reg_rtx (V4SImode); + operands[3] = gen_reg_rtx (V4SImode); }) ;; Generate @@ -2230,12 +2212,13 @@ rtx neg0; /* Generate [-0.0, -0.0, -0.0, -0.0]. */ - neg0 = gen_reg_rtx (V4SFmode); - emit_insn (gen_altivec_vspltisw_v4sf (neg0, constm1_rtx)); - emit_insn (gen_altivec_vslw_v4sf (neg0, neg0, neg0)); + neg0 = gen_reg_rtx (V4SImode); + emit_insn (gen_altivec_vspltisw (neg0, constm1_rtx)); + emit_insn (gen_altivec_vslw (neg0, neg0, neg0)); /* XOR */ - emit_insn (gen_xorv4sf3 (operands[0], neg0, operands[1])); + emit_insn (gen_xorv4sf3 (operands[0], + gen_lowpart (V4SFmode, neg0), operands[1])); DONE; }") diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index f598914df56..0d97072a322 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -52,10 +52,6 @@ /* Translate config/rs6000/darwin.opt to config/darwin.h. */ #define TARGET_DYNAMIC_NO_PIC (TARGET_MACHO_DYNAMIC_NO_PIC) -/* Handle #pragma weak and #pragma pack. */ -#define HANDLE_SYSV_PRAGMA 1 - - #define TARGET_OS_CPP_BUILTINS() \ do \ { \ diff --git a/gcc/config/rs6000/host-darwin.c b/gcc/config/rs6000/host-darwin.c index 75c92a2a25b..be0c55f312a 100644 --- a/gcc/config/rs6000/host-darwin.c +++ b/gcc/config/rs6000/host-darwin.c @@ -1,5 +1,5 @@ /* Darwin/powerpc host-specific hook definitions. - Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -33,9 +33,19 @@ static void segv_crash_handler (int); static void segv_handler (int, siginfo_t *, void *); static void darwin_rs6000_extra_signals (void); +#ifndef HAVE_DECL_SIGALTSTACK /* This doesn't have a prototype in signal.h in 10.2.x and earlier, fixed in later releases. */ extern int sigaltstack(const struct sigaltstack *, struct sigaltstack *); +#endif + +/* The fields of the mcontext_t type have acquired underscores in later + OS versions. */ +#ifdef HAS_MCONTEXT_T_UNDERSCORES +#define MC_FLD(x) __ ## x +#else +#define MC_FLD(x) x +#endif #undef HOST_HOOKS_EXTRA_SIGNALS #define HOST_HOOKS_EXTRA_SIGNALS darwin_rs6000_extra_signals @@ -68,7 +78,7 @@ segv_handler (int sig ATTRIBUTE_UNUSED, sigaddset (&sigset, SIGSEGV); sigprocmask (SIG_UNBLOCK, &sigset, NULL); - faulting_insn = *(unsigned *)uc->uc_mcontext->ss.srr0; + faulting_insn = *(unsigned *)uc->uc_mcontext->MC_FLD(ss).MC_FLD(srr0); /* Note that this only has to work for GCC, so we don't have to deal with all the possible cases (GCC has no AltiVec code, for @@ -117,7 +127,8 @@ segv_handler (int sig ATTRIBUTE_UNUSED, } fprintf (stderr, "[address=%08lx pc=%08x]\n", - uc->uc_mcontext->es.dar, uc->uc_mcontext->ss.srr0); + uc->uc_mcontext->MC_FLD(es).MC_FLD(dar), + uc->uc_mcontext->MC_FLD(ss).MC_FLD(srr0)); internal_error ("Segmentation Fault"); exit (FATAL_EXIT_CODE); } diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 26f74967929..f52b2451abe 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -486,68 +486,6 @@ extern int dot_symbols; && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ && BITS_PER_WORD == HOST_BITS_PER_INT))))) -/* This ABI cannot use DBX_LINES_FUNCTION_RELATIVE, nor can it use - dbxout_stab_value_internal_label_diff, because we must - use the function code label, not the function descriptor label. */ -#define DBX_OUTPUT_SOURCE_LINE(FILE, LINE, COUNTER) \ -do \ - { \ - char temp[256]; \ - const char *s; \ - ASM_GENERATE_INTERNAL_LABEL (temp, "LM", COUNTER); \ - dbxout_begin_stabn_sline (LINE); \ - assemble_name (FILE, temp); \ - putc ('-', FILE); \ - s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \ - rs6000_output_function_entry (FILE, s); \ - putc ('\n', FILE); \ - targetm.asm_out.internal_label (FILE, "LM", COUNTER); \ - COUNTER += 1; \ - } \ -while (0) - -/* Similarly, we want the function code label here. Cannot use - dbxout_stab_value_label_diff, as we have to use - rs6000_output_function_entry. FIXME. */ -#define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \ - do \ - { \ - const char *s; \ - dbxout_begin_stabn (BRAC); \ - s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \ - /* dbxout_block passes this macro the function name as NAME, \ - assuming that it is the function code start label. In our \ - case, the function name is the OPD entry. dbxout_block is \ - broken, hack around it here. */ \ - if (NAME == s) \ - putc ('0', FILE); \ - else \ - { \ - assemble_name (FILE, NAME); \ - putc ('-', FILE); \ - rs6000_output_function_entry (FILE, s); \ - } \ - putc ('\n', FILE); \ - } \ - while (0) - -#define DBX_OUTPUT_LBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_LBRAC) -#define DBX_OUTPUT_RBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_RBRAC) - -/* Another case where we want the dot name. */ -#define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \ - do \ - { \ - const char *s; \ - dbxout_begin_empty_stabs (N_FUN); \ - assemble_name (FILE, LSCOPE); \ - putc ('-', FILE); \ - s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \ - rs6000_output_function_entry (FILE, s); \ - putc ('\n', FILE); \ - } \ - while (0) - /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is true if the symbol may be affected by dynamic relocations. */ diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index e0486a9b06f..f8e00ffecbe 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -278,9 +278,6 @@ { if (zero_constant (op, mode)) return true; - if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT) - return false; - return easy_altivec_constant (op, mode); } diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 6d78f84e557..780e905daac 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3421,6 +3421,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode, if (GET_CODE (x) == SYMBOL_REF && !ALTIVEC_VECTOR_MODE (mode) + && !SPE_VECTOR_MODE (mode) #if TARGET_MACHO && DEFAULT_ABI == ABI_DARWIN && (flag_pic || MACHO_DYNAMIC_NO_PIC_P) @@ -3522,6 +3523,7 @@ rs6000_legitimate_address (enum machine_mode mode, rtx x, int reg_ok_strict) if ((GET_CODE (x) == PRE_INC || GET_CODE (x) == PRE_DEC) && !ALTIVEC_VECTOR_MODE (mode) && !SPE_VECTOR_MODE (mode) + && mode != TFmode /* Restrict addressing for DI because of our SUBREG hackery. */ && !(TARGET_E500_DOUBLE && (mode == DFmode || mode == DImode)) && TARGET_UPDATE @@ -4485,7 +4487,12 @@ function_arg_padding (enum machine_mode mode, tree type) of an argument with the specified mode and type. If it is not defined, PARM_BOUNDARY is used for all arguments. - V.4 wants long longs to be double word aligned. + V.4 wants long longs and doubles to be double word aligned. Just + testing the mode size is a boneheaded way to do this as it means + that other types such as complex int are also double word aligned. + However, we're stuck with this because changing the ABI might break + existing library interfaces. + Doubleword align SPE vectors. Quadword align Altivec vectors. Quadword align large synthetic vector types. */ @@ -4493,7 +4500,11 @@ function_arg_padding (enum machine_mode mode, tree type) int function_arg_boundary (enum machine_mode mode, tree type) { - if (DEFAULT_ABI == ABI_V4 && GET_MODE_SIZE (mode) == 8) + if (DEFAULT_ABI == ABI_V4 + && (GET_MODE_SIZE (mode) == 8 + || (TARGET_HARD_FLOAT + && TARGET_FPRS + && mode == TFmode))) return 64; else if (SPE_VECTOR_MODE (mode) || (type && TREE_CODE (type) == VECTOR_TYPE @@ -9790,12 +9801,12 @@ effects of instruction do not correspond to semantics of RTL insn. */ int insvdi_rshift_rlwimi_p (rtx sizeop, rtx startop, rtx shiftop) { - if (INTVAL (startop) < 64 - && INTVAL (startop) > 32 - && (INTVAL (sizeop) + INTVAL (startop) < 64) - && (INTVAL (sizeop) + INTVAL (startop) > 33) - && (INTVAL (sizeop) + INTVAL (startop) + INTVAL (shiftop) < 96) - && (INTVAL (sizeop) + INTVAL (startop) + INTVAL (shiftop) >= 64) + if (INTVAL (startop) > 32 + && INTVAL (startop) < 64 + && INTVAL (sizeop) > 1 + && INTVAL (sizeop) + INTVAL (startop) < 64 + && INTVAL (shiftop) > 0 + && INTVAL (sizeop) + INTVAL (shiftop) < 32 && (64 - (INTVAL (shiftop) & 63)) >= INTVAL (sizeop)) return 1; @@ -10272,13 +10283,14 @@ print_operand (FILE *file, rtx x, int code) return; case 'D': - /* Like 'J' but get to the EQ bit. */ + /* Like 'J' but get to the GT bit only. */ gcc_assert (GET_CODE (x) == REG); - /* Bit 1 is EQ bit. */ - i = 4 * (REGNO (x) - CR0_REGNO) + 2; + /* Bit 1 is GT bit. */ + i = 4 * (REGNO (x) - CR0_REGNO) + 1; - fprintf (file, "%d", i); + /* Add one for shift count in rlinm for scc. */ + fprintf (file, "%d", i + 1); return; case 'E': @@ -10777,7 +10789,8 @@ print_operand (FILE *file, rtx x, int code) tmp = XEXP (x, 0); - if (TARGET_E500) + /* Ugly hack because %y is overloaded. */ + if (TARGET_E500 && GET_MODE_SIZE (GET_MODE (x)) == 8) { /* Handle [reg]. */ if (GET_CODE (tmp) == REG) @@ -11075,7 +11088,7 @@ rs6000_generate_compare (enum rtx_code code) /* First, the compare. */ compare_result = gen_reg_rtx (comp_mode); - /* SPE FP compare instructions on the GPRs. Yuck! */ + /* E500 FP compare instructions on the GPRs. Yuck! */ if ((TARGET_E500 && !TARGET_FPRS && TARGET_HARD_FLOAT) && rs6000_compare_fp_p) { @@ -11085,8 +11098,8 @@ rs6000_generate_compare (enum rtx_code code) if (op_mode == VOIDmode) op_mode = GET_MODE (rs6000_compare_op1); - /* Note: The E500 comparison instructions set the GT bit (x + - 1), on success. This explains the mess. */ + /* The E500 FP compare instructions toggle the GT bit (CR bit 1) only. + This explains the following mess. */ switch (code) { @@ -11486,7 +11499,8 @@ output_cbranch (rtx op, const char *label, int reversed, rtx insn) mispredicted taken branch is more expensive than a mispredicted not-taken branch. */ if (rs6000_always_hint - || abs (prob) > REG_BR_PROB_BASE / 100 * 48) + || (abs (prob) > REG_BR_PROB_BASE / 100 * 48 + && br_prob_note_reliable_p (note))) { if (abs (prob) > REG_BR_PROB_BASE / 20 && ((prob > 0) ^ need_longbranch)) @@ -18095,7 +18109,7 @@ machopic_output_stub (FILE *file, const char *symb, const char *stub) position-independent addresses go into a reg. This is REG if non zero, otherwise we allocate register(s) as necessary. */ -#define SMALL_INT(X) ((unsigned) (INTVAL (X) + 0x8000) < 0x10000) +#define SMALL_INT(X) ((UINTVAL (X) + 0x8000) < 0x10000) rtx rs6000_machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index f47324e3e12..c83c49529a9 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -74,6 +74,7 @@ %{mcpu=power4: -mpower4} \ %{mcpu=power5: -mpower4} \ %{mcpu=power5+: -mpower4} \ +%{mcpu=power6: -mpower4 -maltivec} \ %{mcpu=powerpc: -mppc} \ %{mcpu=rios: -mpwr} \ %{mcpu=rios1: -mpwr} \ @@ -502,7 +503,8 @@ extern enum rs6000_nop_insertion rs6000_sched_insert_nops; #define LOCAL_ALIGNMENT(TYPE, ALIGN) \ ((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) ? 128 : \ (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 : \ - (TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE) ? 64 : ALIGN) + (TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE \ + && SPE_VECTOR_MODE (TYPE_MODE (TYPE))) ? 64 : ALIGN) /* Alignment of field after `int : 0' in a structure. */ #define EMPTY_FIELD_BOUNDARY 32 diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 611d9e162bf..db60b8ef944 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -55,7 +55,7 @@ (UNSPEC_TLSGOTTPREL 28) (UNSPEC_TLSTLS 29) (UNSPEC_FIX_TRUNC_TF 30) ; fadd, rounding towards zero - (UNSPEC_MV_CR_GT 31) ; move_from_CR_eq_bit + (UNSPEC_MV_CR_GT 31) ; move_from_CR_gt_bit (UNSPEC_STFIWX 32) (UNSPEC_POPCNTB 33) (UNSPEC_FRES 34) @@ -7920,42 +7920,44 @@ "") (define_insn "*movcc_internal1" - [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,r,r,r,r,q,cl,r,m") - (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,h,r,r,m,r"))] + [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,y,r,r,r,r,r,q,cl,r,m") + (match_operand:CC 1 "general_operand" "y,r,r,O,x,y,r,I,h,r,r,m,r"))] "register_operand (operands[0], CCmode) || register_operand (operands[1], CCmode)" "@ mcrf %0,%1 mtcrf 128,%1 {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff + crxor %0,%0,%0 mfcr %0%Q1 mfcr %0%Q1\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000 mr %0,%1 + {lil|li} %0,%1 mf%1 %0 mt%0 %1 mt%0 %1 {l%U1%X1|lwz%U1%X1} %0,%1 {st%U0%U1|stw%U0%U1} %1,%0" [(set (attr "type") - (cond [(eq_attr "alternative" "0") + (cond [(eq_attr "alternative" "0,3") (const_string "cr_logical") (eq_attr "alternative" "1,2") (const_string "mtcr") - (eq_attr "alternative" "5,7") + (eq_attr "alternative" "6,7,9") (const_string "integer") - (eq_attr "alternative" "6") - (const_string "mfjmpr") (eq_attr "alternative" "8") + (const_string "mfjmpr") + (eq_attr "alternative" "10") (const_string "mtjmpr") - (eq_attr "alternative" "9") + (eq_attr "alternative" "11") (const_string "load") - (eq_attr "alternative" "10") + (eq_attr "alternative" "12") (const_string "store") (ne (symbol_ref "TARGET_MFCRF") (const_int 0)) (const_string "mfcrf") ] (const_string "mfcr"))) - (set_attr "length" "4,4,12,4,8,4,4,4,4,4,4")]) + (set_attr "length" "4,4,12,4,4,8,4,4,4,4,4,4,4")]) ;; For floating-point, we normally deal with the floating-point registers ;; unless -msoft-float is used. The sole exception is that parameter passing diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md index 8e636f8927a..930c48a090c 100644 --- a/gcc/config/rs6000/spe.md +++ b/gcc/config/rs6000/spe.md @@ -2211,11 +2211,13 @@ [(set_attr "length" "8")]) (define_insn "*frob_di_df_2" - [(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r") 0) - (match_operand:DF 1 "register_operand" "r"))] + [(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r,r") 0) + (match_operand:DF 1 "input_operand" "r,m"))] "TARGET_E500_DOUBLE" - "evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1" - [(set_attr "length" "8")]) + "@ + evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1 + evldd%X1 %0,%y1" + [(set_attr "length" "8,4")]) (define_insn "*mov_sidf_e500_subreg0" [(set (subreg:SI (match_operand:DF 0 "register_operand" "+r") 0) diff --git a/gcc/config/s390/linux-unwind.h b/gcc/config/s390/linux-unwind.h index d1e9b735edb..221a5d4bc0a 100644 --- a/gcc/config/s390/linux-unwind.h +++ b/gcc/config/s390/linux-unwind.h @@ -51,17 +51,33 @@ s390_fallback_frame_state (struct _Unwind_Context *context, } __attribute__ ((__aligned__ (8))) sigregs_; sigregs_ *regs; - int *signo = NULL; + int *signo; /* svc $__NR_sigreturn or svc $__NR_rt_sigreturn */ if (pc[0] != 0x0a || (pc[1] != 119 && pc[1] != 173)) return _URC_END_OF_STACK; + /* Legacy frames: + old signal mask (8 bytes) + pointer to sigregs (8 bytes) - points always to next location + sigregs + retcode + This frame layout was used on kernels < 2.6.9 for non-RT frames, + and on kernels < 2.4.13 for RT frames as well. Note that we need + to look at RA to detect this layout -- this means that if you use + sa_restorer to install a different signal restorer on a legacy + kernel, unwinding from signal frames will not work. */ + if (context->ra == context->cfa + 16 + sizeof (sigregs_)) + { + regs = (sigregs_ *)(context->cfa + 16); + signo = NULL; + } + /* New-style RT frame: retcode + alignment (8 bytes) siginfo (128 bytes) ucontext (contains sigregs) */ - if (context->ra == context->cfa) + else if (pc[1] == 173 /* __NR_rt_sigreturn */) { struct ucontext_ { @@ -75,18 +91,13 @@ s390_fallback_frame_state (struct _Unwind_Context *context, signo = context->cfa + sizeof(long); } - /* Old-style RT frame and all non-RT frames: + /* New-style non-RT frame: old signal mask (8 bytes) - pointer to sigregs */ + pointer to sigregs (followed by signal number) */ else { regs = *(sigregs_ **)(context->cfa + 8); - - /* Recent kernels store the signal number immediately after - the sigregs; old kernels have the return trampoline at - this location. */ - if ((void *)(regs + 1) != context->ra) - signo = (int *)(regs + 1); + signo = (int *)(regs + 1); } new_cfa = regs->gprs[15] + 16*sizeof(long) + 32; diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 6459c81b474..eb734e15e13 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -907,7 +907,11 @@ "" { /* Handle symbolic constants. */ - if (TARGET_64BIT && SYMBOLIC_CONST (operands[1])) + if (TARGET_64BIT + && (SYMBOLIC_CONST (operands[1]) + || (GET_CODE (operands[1]) == PLUS + && XEXP (operands[1], 0) == pic_offset_table_rtx + && SYMBOLIC_CONST (XEXP (operands[1], 1))))) emit_symbolic_move (operands); }) @@ -1158,7 +1162,11 @@ "" { /* Handle symbolic constants. */ - if (!TARGET_64BIT && SYMBOLIC_CONST (operands[1])) + if (!TARGET_64BIT + && (SYMBOLIC_CONST (operands[1]) + || (GET_CODE (operands[1]) == PLUS + && XEXP (operands[1], 0) == pic_offset_table_rtx + && SYMBOLIC_CONST (XEXP(operands[1], 1))))) emit_symbolic_move (operands); }) @@ -6779,13 +6787,13 @@ (define_insn_and_split "doloop_si64" [(set (pc) (if_then_else - (ne (match_operand:SI 1 "register_operand" "d,d") + (ne (match_operand:SI 1 "register_operand" "d,d,d") (const_int 1)) (label_ref (match_operand 0 "" "")) (pc))) - (set (match_operand:SI 2 "nonimmediate_operand" "=1,?*m*d") + (set (match_operand:SI 2 "nonimmediate_operand" "=1,?X,?X") (plus:SI (match_dup 1) (const_int -1))) - (clobber (match_scratch:SI 3 "=X,&1")) + (clobber (match_scratch:SI 3 "=X,&1,&?d")) (clobber (reg:CC CC_REGNUM))] "TARGET_CPU_ZARCH" { @@ -6799,7 +6807,8 @@ "&& reload_completed && (! REG_P (operands[2]) || ! rtx_equal_p (operands[1], operands[2]))" - [(parallel [(set (reg:CCAN CC_REGNUM) + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (reg:CCAN CC_REGNUM) (compare:CCAN (plus:SI (match_dup 3) (const_int -1)) (const_int 0))) (set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))]) @@ -6817,13 +6826,13 @@ (define_insn_and_split "doloop_si31" [(set (pc) (if_then_else - (ne (match_operand:SI 1 "register_operand" "d,d") + (ne (match_operand:SI 1 "register_operand" "d,d,d") (const_int 1)) (label_ref (match_operand 0 "" "")) (pc))) - (set (match_operand:SI 2 "nonimmediate_operand" "=1,?*m*d") + (set (match_operand:SI 2 "nonimmediate_operand" "=1,?X,?X") (plus:SI (match_dup 1) (const_int -1))) - (clobber (match_scratch:SI 3 "=X,&1")) + (clobber (match_scratch:SI 3 "=X,&1,&?d")) (clobber (reg:CC CC_REGNUM))] "!TARGET_CPU_ZARCH" { @@ -6837,7 +6846,8 @@ "&& reload_completed && (! REG_P (operands[2]) || ! rtx_equal_p (operands[1], operands[2]))" - [(parallel [(set (reg:CCAN CC_REGNUM) + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (reg:CCAN CC_REGNUM) (compare:CCAN (plus:SI (match_dup 3) (const_int -1)) (const_int 0))) (set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))]) @@ -6858,13 +6868,13 @@ (define_insn "*doloop_si_long" [(set (pc) (if_then_else - (ne (match_operand:SI 1 "register_operand" "d,d") + (ne (match_operand:SI 1 "register_operand" "d") (const_int 1)) - (match_operand 0 "address_operand" "U,U") + (match_operand 0 "address_operand" "U") (pc))) - (set (match_operand:SI 2 "register_operand" "=1,?*m*d") + (set (match_operand:SI 2 "register_operand" "=1") (plus:SI (match_dup 1) (const_int -1))) - (clobber (match_scratch:SI 3 "=X,&1")) + (clobber (match_scratch:SI 3 "=X")) (clobber (reg:CC CC_REGNUM))] "!TARGET_CPU_ZARCH" { @@ -6882,13 +6892,13 @@ (define_insn_and_split "doloop_di" [(set (pc) (if_then_else - (ne (match_operand:DI 1 "register_operand" "d,d") + (ne (match_operand:DI 1 "register_operand" "d,d,d") (const_int 1)) (label_ref (match_operand 0 "" "")) (pc))) - (set (match_operand:DI 2 "nonimmediate_operand" "=1,?*m*d") + (set (match_operand:DI 2 "nonimmediate_operand" "=1,?X,?X") (plus:DI (match_dup 1) (const_int -1))) - (clobber (match_scratch:DI 3 "=X,&1")) + (clobber (match_scratch:DI 3 "=X,&1,&?d")) (clobber (reg:CC CC_REGNUM))] "TARGET_64BIT" { @@ -6902,7 +6912,8 @@ "&& reload_completed && (! REG_P (operands[2]) || ! rtx_equal_p (operands[1], operands[2]))" - [(parallel [(set (reg:CCAN CC_REGNUM) + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (reg:CCAN CC_REGNUM) (compare:CCAN (plus:DI (match_dup 3) (const_int -1)) (const_int 0))) (set (match_dup 3) (plus:DI (match_dup 3) (const_int -1)))]) diff --git a/gcc/config/s390/t-tpf b/gcc/config/s390/t-tpf index 36971679c68..6e4c377697c 100644 --- a/gcc/config/s390/t-tpf +++ b/gcc/config/s390/t-tpf @@ -3,7 +3,7 @@ CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC # Compile libgcc2.a with pic. TARGET_LIBGCC2_CFLAGS = -fPIC -# Use unwind-dw2-fde. -LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \ +# Use unwind-dw2-fde-glibc. +LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h diff --git a/gcc/config/sh/lib1funcs-Os-4-200.asm b/gcc/config/sh/lib1funcs-Os-4-200.asm index e71ccd1de6e..e016bed2588 100644 --- a/gcc/config/sh/lib1funcs-Os-4-200.asm +++ b/gcc/config/sh/lib1funcs-Os-4-200.asm @@ -30,6 +30,7 @@ Boston, MA 02110-1301, USA. */ #include "lib1funcs.h" +#if !__SHMEDIA__ #ifdef L_udivsi3_i4i /* 88 bytes; sh4-200 cycle counts: @@ -323,3 +324,4 @@ L1: ENDFUNC(GLOBAL(sdivsi3_i4i)) #endif /* __SH_FPU_DOUBLE__ */ #endif /* L_sdivsi3_i4i */ +#endif /* !__SHMEDIA__ */ diff --git a/gcc/config/sh/lib1funcs.asm b/gcc/config/sh/lib1funcs.asm index a815c3619e9..466b89046f3 100644 --- a/gcc/config/sh/lib1funcs.asm +++ b/gcc/config/sh/lib1funcs.asm @@ -3843,3 +3843,51 @@ LOCAL(div_table_inv): #endif /* SH3 / SH4 */ #endif /* L_div_table */ + +#ifdef L_udiv_qrnnd_16 +#if !__SHMEDIA__ + HIDDEN_FUNC(GLOBAL(udiv_qrnnd_16)) + /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ + /* n1 < d, but n1 might be larger than d1. */ + .global GLOBAL(udiv_qrnnd_16) + .balign 8 +GLOBAL(udiv_qrnnd_16): + div0u + cmp/hi r6,r0 + bt .Lots + .rept 16 + div1 r6,r0 + .endr + extu.w r0,r1 + bt 0f + add r6,r0 +0: rotcl r1 + mulu.w r1,r5 + xtrct r4,r0 + swap.w r0,r0 + sts macl,r2 + cmp/hs r2,r0 + sub r2,r0 + bt 0f + addc r5,r0 + add #-1,r1 + bt 0f +1: add #-1,r1 + rts + add r5,r0 + .balign 8 +.Lots: + sub r5,r0 + swap.w r4,r1 + xtrct r0,r1 + clrt + mov r1,r0 + addc r5,r0 + mov #-1,r1 + SL1(bf, 1b, + shlr16 r1) +0: rts + nop + ENDFUNC(GLOBAL(udiv_qrnnd_16)) +#endif /* !__SHMEDIA__ */ +#endif /* L_udiv_qrnnd_16 */ diff --git a/gcc/config/sh/lib1funcs.h b/gcc/config/sh/lib1funcs.h index 566f3a5fc96..0e4100ee9ed 100644 --- a/gcc/config/sh/lib1funcs.h +++ b/gcc/config/sh/lib1funcs.h @@ -67,3 +67,15 @@ Boston, MA 02110-1301, USA. */ #define DR40 fr4 #define DR41 fr5 #endif /* !__LITTLE_ENDIAN__ */ + +#ifdef __sh1__ +#define SL(branch, dest, in_slot, in_slot_arg2) \ + in_slot, in_slot_arg2; branch dest +#define SL1(branch, dest, in_slot) \ + in_slot; branch dest +#else /* ! __sh1__ */ +#define SL(branch, dest, in_slot, in_slot_arg2) \ + branch##.s dest; in_slot, in_slot_arg2 +#define SL1(branch, dest, in_slot) \ + branch##/s dest; in_slot +#endif /* !__sh1__ */ diff --git a/gcc/config/sh/sh-modes.def b/gcc/config/sh/sh-modes.def index e4b6f018f26..d7586b2bb89 100644 --- a/gcc/config/sh/sh-modes.def +++ b/gcc/config/sh/sh-modes.def @@ -1,4 +1,4 @@ -/* Alpha extra machine modes. +/* SH extra machine modes. Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 929b60f89c8..15eae4c7cd7 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -662,7 +662,8 @@ print_operand_address (FILE *stream, rtx x) 'R' print the LSW of a dp value - changes if in little endian 'S' print the MSW of a dp value - changes if in little endian 'T' print the next word of a dp value - same as 'R' in big endian mode. - 'M' print an `x' if `m' will print `base,index'. + 'M' SHMEDIA: print an `x' if `m' will print `base,index'. + otherwise: print .b / .w / .l / .s / .d suffix if operand is a MEM. 'N' print 'r63' if the operand is (const_int 0). 'd' print a V2SF reg as dN instead of fpN. 'm' print a pair `base,offset' or `base,index', for LD and ST. @@ -820,11 +821,29 @@ print_operand (FILE *stream, rtx x, int code) } break; case 'M': - if (GET_CODE (x) == MEM - && GET_CODE (XEXP (x, 0)) == PLUS - && (GET_CODE (XEXP (XEXP (x, 0), 1)) == REG - || GET_CODE (XEXP (XEXP (x, 0), 1)) == SUBREG)) - fputc ('x', stream); + if (TARGET_SHMEDIA) + { + if (GET_CODE (x) == MEM + && GET_CODE (XEXP (x, 0)) == PLUS + && (GET_CODE (XEXP (XEXP (x, 0), 1)) == REG + || GET_CODE (XEXP (XEXP (x, 0), 1)) == SUBREG)) + fputc ('x', stream); + } + else + { + if (GET_CODE (x) == MEM) + { + switch (GET_MODE (x)) + { + case QImode: fputs (".b", stream); break; + case HImode: fputs (".w", stream); break; + case SImode: fputs (".l", stream); break; + case SFmode: fputs (".s", stream); break; + case DFmode: fputs (".d", stream); break; + default: gcc_unreachable (); + } + } + } break; case 'm': @@ -1925,7 +1944,7 @@ shiftcosts (rtx x) return 2; /* Everything else is invalid, because there is no pattern for it. */ - return 10000; + return MAX_COST; } /* If shift by a non constant, then this will be expensive. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT) @@ -4447,12 +4466,17 @@ sh_reorg (void) for (link = LOG_LINKS (insn); link; link = XEXP (link, 1)) { + rtx linked_insn; + if (REG_NOTE_KIND (link) != 0) continue; - set = single_set (XEXP (link, 0)); - if (set && rtx_equal_p (reg, SET_DEST (set))) + linked_insn = XEXP (link, 0); + set = single_set (linked_insn); + if (set + && rtx_equal_p (reg, SET_DEST (set)) + && ! INSN_DELETED_P (linked_insn)) { - link = XEXP (link, 0); + link = linked_insn; break; } } diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 272d9e57eb6..5ce7086d0b4 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -366,9 +366,9 @@ do { \ SUBTARGET_EXTRA_SPECS #if TARGET_CPU_DEFAULT & MASK_HARD_SH4 -#define SUBTARGET_ASM_RELAX_SPEC "%{!m1:%{!m2:%{!m3*:%{!m5*:-isa=sh4}}}}" +#define SUBTARGET_ASM_RELAX_SPEC "%{!m1:%{!m2:%{!m3*:%{!m5*:-isa=sh4-up}}}}" #else -#define SUBTARGET_ASM_RELAX_SPEC "%{m4*:-isa=sh4}" +#define SUBTARGET_ASM_RELAX_SPEC "%{m4*:-isa=sh4-up}" #endif #define SH_ASM_SPEC \ diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index d05fc10f840..97aa69811b5 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -148,6 +148,7 @@ (UNSPEC_DIV_INV_M2 32) (UNSPEC_DIV_INV_M3 33) (UNSPEC_DIV_INV20 34) + (UNSPEC_DIV_INV_TABLE 37) (UNSPEC_ASHIFTRT 35) (UNSPEC_THUNK 36) (UNSPEC_SP_SET 40) @@ -1829,6 +1830,21 @@ /* Emit the move of the address to a pseudo outside of the libcall. */ if (TARGET_DIVIDE_CALL_TABLE) { + /* libgcc2:__udivmoddi4 is not supposed to use an actual division, since + that causes problems when the divide code is supposed to come from a + separate library. Division by zero is undefined, so dividing 1 can be + implemented by comparing with the divisor. */ + if (operands[1] == const1_rtx && currently_expanding_to_rtl) + { + emit_insn (gen_cmpsi (operands[1], operands[2])); + emit_insn (gen_sgeu (operands[0])); + DONE; + } + else if (operands[2] == const0_rtx) + { + emit_move_insn (operands[0], operands[2]); + DONE; + } function_symbol (operands[3], \"__udivsi3_i4i\", SFUNC_GOT); last = gen_udivsi3_i4_int (operands[0], operands[3]); } @@ -2229,6 +2245,34 @@ DONE; }") +;; operands: scratch, tab_base, tab_ix +;; These are unspecs because we could generate an indexed addressing mode +;; even if -m5-32media, where INDEX_REG_CLASS == NO_REGS, and this would +;; confuse reload. See PR27117. + +(define_insn "divsi_inv_qitable" + [(set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI (unspec:QI [(match_operand:DI 1 "register_operand" "r") + (match_operand:DI 2 "register_operand" "r")] + UNSPEC_DIV_INV_TABLE)))] + "TARGET_SHMEDIA" + "@ + ldx.ub %1, %2, %0" + [(set_attr "type" "load_media") + (set_attr "highpart" "user")]) + +;; operands: scratch, tab_base, tab_ix +(define_insn "divsi_inv_hitable" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (unspec:HI [(match_operand:DI 1 "register_operand" "r") + (match_operand:DI 2 "register_operand" "r")] + UNSPEC_DIV_INV_TABLE)))] + "TARGET_SHMEDIA" + "@ + ldx.w %1, %2, %0" + [(set_attr "type" "load_media") + (set_attr "highpart" "user")]) + ;; operands: inv0, tab_base, tab_ix, norm32 ;; scratch equiv in sdivsi3_2: r19, r21 (define_expand "divsi_inv_m0" @@ -2263,12 +2307,10 @@ norm32: r25 rtx scratch1 = operands[5]; rtx mem; - mem = gen_const_mem (QImode, gen_rtx_PLUS (DImode, tab_base, tab_ix)); - emit_insn (gen_zero_extendqidi2 (scratch0, mem)); + emit_insn (gen_divsi_inv_qitable (scratch0, tab_base, tab_ix)); emit_insn (gen_ashldi3_media (scratch1, tab_ix, GEN_INT (1))); emit_insn (gen_mulsidi3_media (scratch0, norm32, scratch0_si)); - mem = gen_const_mem (HImode, gen_rtx_PLUS (DImode, tab_base, scratch1)); - emit_insn (gen_extendhidi2 (scratch1, mem)); + emit_insn (gen_divsi_inv_hitable (scratch1, tab_base, scratch1)); emit_insn (gen_ashrdi3_media (scratch0, scratch0, GEN_INT (24))); emit_insn (gen_subdisi3_media (inv0, scratch1, scratch0)); DONE; diff --git a/gcc/config/sh/superh.h b/gcc/config/sh/superh.h index 7ac96ef7734..49bb6206d43 100644 --- a/gcc/config/sh/superh.h +++ b/gcc/config/sh/superh.h @@ -28,7 +28,7 @@ Boston, MA 02110-1301, USA. */ defaults and provide options --defsym _start and --defsym _stack which are required by the SuperH configuration of GNU ld. - This file is intended to overide sh.h */ + This file is intended to override sh.h. */ #ifndef _SUPERH_H diff --git a/gcc/config/sh/superh64.h b/gcc/config/sh/superh64.h index a43e4c9943f..f768c38a952 100644 --- a/gcc/config/sh/superh64.h +++ b/gcc/config/sh/superh64.h @@ -25,7 +25,7 @@ Boston, MA 02110-1301, USA. */ /* This header file is used when the vendor name is set to 'superh'. It configures the compiler for SH5 only and switches the default endianess to little. - This file is intended to overide sh.h, superh.h and sh64.h (which + This file is intended to override sh.h, superh.h and sh64.h (which should have been included in that order) */ diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh index c81cc3fd020..3ebc09d6e3c 100644 --- a/gcc/config/sh/t-sh +++ b/gcc/config/sh/t-sh @@ -5,7 +5,7 @@ sh-c.o: $(srcdir)/config/sh/sh-c.c \ LIB1ASMSRC = sh/lib1funcs.asm LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movmem \ _movmem_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \ - _div_table \ + _div_table _udiv_qrnnd_16 \ $(LIB1ASMFUNCS_CACHE) # We want fine grained libraries, so use the new code to build the @@ -98,8 +98,11 @@ $(T)sdivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.asm $(GCC_PAS $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $@ -DL_sdivsi3_i4i -x assembler-with-cpp $< $(T)udivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.asm $(GCC_PASSES) $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $@ -DL_udivsi3_i4i -x assembler-with-cpp $< -$(T)libgcc-Os-4-200.a: $(T)sdivsi3_i4i-Os-4-200.o $(T)udivsi3_i4i-Os-4-200.o $(GCC_PASSES) - $(AR_CREATE_FOR_TARGET) $@ $(T)sdivsi3_i4i-Os-4-200.o $(T)udivsi3_i4i-Os-4-200.o +$(T)unwind-dw2-Os-4-200.o: $(srcdir)/unwind-dw2.c $(srcdir)/unwind-generic.h unwind-pe.h unwind.inc unwind-dw2-fde.h unwind-dw2.h $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h $(GCC_PASSES) + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) $(vis_hide) -fexceptions -Os -c -o $@ $< +OBJS_Os_4_200=$(T)sdivsi3_i4i-Os-4-200.o $(T)udivsi3_i4i-Os-4-200.o $(T)unwind-dw2-Os-4-200.o +$(T)libgcc-Os-4-200.a: $(OBJS_Os_4_200) $(GCC_PASSES) + $(AR_CREATE_FOR_TARGET) $@ $(OBJS_Os_4_200) # Local Variables: # mode: Makefile diff --git a/gcc/config/t-slibgcc-darwin b/gcc/config/t-slibgcc-darwin index e90f500d74c..0c6eded3de4 100644 --- a/gcc/config/t-slibgcc-darwin +++ b/gcc/config/t-slibgcc-darwin @@ -2,26 +2,25 @@ SHLIB_SOVERSION = 1 SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0 SHLIB_EXT = .dylib -SHLIB_SUFFIX = `if test @multilib_dir@ != . ; then echo _@multilib_dir@ ; fi` -SHLIB_SONAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT) +SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi` +SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT) +SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT) +SHLIB_SOLINK = @shlib_base_name@.so SHLIB_MAP = @shlib_map_file@ SHLIB_OBJS = @shlib_objs@ SHLIB_DIR = @multilib_dir@ +SHLIB_LC = -lc # Darwin only searches in /usr/lib for shared libraries, not in subdirectories, # so the libgcc variants have different names not different locations. # Note that this version is used for the loader, not the linker; the linker # uses the stub versions named by $(LIBGCC). SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \ - -Wl,-install_name,$(slibdir)/$(SHLIB_SONAME) \ - -single_module -o $(SHLIB_SONAME).tmp \ + -Wl,-install_name,$(slibdir)/$(SHLIB_INSTALL_NAME) \ + -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ -Wl,-exported_symbols_list,$(SHLIB_MAP) \ $(SHLIB_VERSTRING) \ - @multilib_flags@ $(SHLIB_OBJS) -lc && \ - if [ -f $(SHLIB_SONAME) ]; then \ - mv -f $(SHLIB_SONAME) $(SHLIB_SONAME).backup; \ - else true; fi && \ - mv $(SHLIB_SONAME).tmp $(SHLIB_SONAME) + @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. @@ -42,10 +41,10 @@ ASM_HIDDEN_OP = .private_extern # each system version supported. They are 'stub' libraries that # contain no code, just a list of exported symbols. # The actual use of the libraries is controlled by REAL_LIBGCC_SPEC. -# +# # This assumes each multilib corresponds to a different architecture. -libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc.a - # When builting multilibbed target libraries, all the required +libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver stmp-multilib + # When building multilibbed target libraries, all the required # libraries are expected to exist in the multilib directory. MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \ | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ @@ -54,22 +53,49 @@ libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc.a $(LN_S) ../$@ $${mlib}/$@ || exit 1 ; \ done MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \ - | sed -e 's/;.*$$//' -e '/^\.$$/d' -e 's/^/_/'` ; \ + | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ for mlib in '' $$MLIBS ; do \ $(STRIP_FOR_TARGET) -o $(@)_T$${mlib} \ -s $(SHLIB_VERPFX).$(*).ver -c -u \ - libgcc_s$${mlib}.$(SHLIB_SOVERSION)$(SHLIB_EXT) || exit 1 ; \ + ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \ done $(LIPO_FOR_TARGET) -output $@ -create $(@)_T* rm $(@)_T* +libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): stmp-multilib libgcc_s.10.4.dylib \ + libgcc_s.10.5.dylib + # When building multilibbed target libraries, all the required + # libraries are expected to exist in the multilib directory. + MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \ + | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ + for mlib in '' $$MLIBS ; do \ + cp ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \ + ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \ + done + $(LIPO_FOR_TARGET) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \ + -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T* + rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T* + # From the point-of-view of the Makefiles, libgcc is built by the 'strip' # and 'lipo' commands above. -LIBGCC=libgcc_s.10.4.dylib libgcc_s.10.5.dylib +LIBGCC=libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) libgcc_s.10.4.dylib \ + libgcc_s.10.5.dylib stmp-multilib + +INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib -install-darwin-libgcc-stubs : $(LIBGCC) installdirs - for d in $(LIBGCC) ; do \ +install-darwin-libgcc-stubs : $(INSTALL_FILES) installdirs + for d in $(INSTALL_FILES) ; do \ $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \ done + if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \ + rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \ + else true; fi + $(LN_S) libgcc_s.1.dylib \ + $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib + if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \ + rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \ + else true; fi + $(LN_S) libgcc_s.1.dylib \ + $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib -INSTALL_LIBGCC += install-darwin-libgcc-stubs +INSTALL_LIBGCC = install-darwin-libgcc-stubs install-multilib diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index eb2771c5715..22bb1512562 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -1070,7 +1070,7 @@ ep_memory_operand (rtx op, enum machine_mode mode, int unsigned_load) int mask; /* If we are not using the EP register on a per-function basis - then do not allow this optimisation at all. This is to + then do not allow this optimization at all. This is to prevent the use of the SLD/SST instructions which cannot be guaranteed to work properly due to a hardware bug. */ if (!TARGET_EP) diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index c1dbd783113..45bcead6d79 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -987,12 +987,14 @@ typedef enum /* This is how to output an element of a case-vector that is relative. */ +/* Disable the shift, which is for the currently disabled "switch" + opcode. Se casesi in v850.md. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ fprintf (FILE, "\t%s %s.L%d-.L%d%s\n", \ (TARGET_BIG_SWITCH ? ".long" : ".short"), \ - (! TARGET_BIG_SWITCH && TARGET_V850E ? "(" : ""), \ + (0 && ! TARGET_BIG_SWITCH && TARGET_V850E ? "(" : ""), \ VALUE, REL, \ - (! TARGET_BIG_SWITCH && TARGET_V850E ? ")>>1" : "")) + (0 && ! TARGET_BIG_SWITCH && TARGET_V850E ? ")>>1" : "")) #define ASM_OUTPUT_ALIGN(FILE, LOG) \ if ((LOG) != 0) \ diff --git a/gcc/config/xtensa/elf.h b/gcc/config/xtensa/elf.h index 306c57cb3a4..34cf379cb0d 100644 --- a/gcc/config/xtensa/elf.h +++ b/gcc/config/xtensa/elf.h @@ -80,19 +80,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA /* Do not force "-fpic" for this target. */ #define XTENSA_ALWAYS_PIC 0 -/* Redefine the standard ELF version of ASM_DECLARE_FUNCTION_SIZE to - allow adding the ".end literal_prefix" directive at the end of the - function. */ -#undef ASM_DECLARE_FUNCTION_SIZE -#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ - do \ - { \ - if (!flag_inhibit_size_directive) \ - ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \ - XTENSA_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL); \ - } \ - while (0) - /* Search for headers in $tooldir/arch/include and for libraries and startfiles in $tooldir/arch/lib. */ #define GCC_DRIVER_HOST_INITIALIZATION \ diff --git a/gcc/config/xtensa/lib1funcs.asm b/gcc/config/xtensa/lib1funcs.asm index 7d316ede805..2fc1399ec5f 100644 --- a/gcc/config/xtensa/lib1funcs.asm +++ b/gcc/config/xtensa/lib1funcs.asm @@ -30,12 +30,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "xtensa-config.h" -# Force each stack frame to contain an "Extra Save Area" (ESA) of at least -# 16 bytes. This is necessary for non-standard Xtensa configurations that -# only support a fixed register window size of 8, where even leaf functions -# (such as these) need the ESA for interrupt handlers. -#define MIN_ESA 16 - # Define macros for the ABS and ADDX* instructions to handle cases # where they are not included in the Xtensa processor configuration. @@ -83,7 +77,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA .macro leaf_entry reg, size #if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ - entry \reg, \size + MIN_ESA + entry \reg, \size #else /* do nothing */ #endif diff --git a/gcc/config/xtensa/linux.h b/gcc/config/xtensa/linux.h index 0a64a1ed0b3..71f6fc6de89 100644 --- a/gcc/config/xtensa/linux.h +++ b/gcc/config/xtensa/linux.h @@ -60,16 +60,3 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA /* Always enable "-fpic" for Xtensa Linux. */ #define XTENSA_ALWAYS_PIC 1 - -/* Redefine the standard ELF version of ASM_DECLARE_FUNCTION_SIZE to - allow adding the ".end literal_prefix" directive at the end of the - function. */ -#undef ASM_DECLARE_FUNCTION_SIZE -#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ - do \ - { \ - if (!flag_inhibit_size_directive) \ - ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \ - XTENSA_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL); \ - } \ - while (0) diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index d05d97e063e..836ae2e1687 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for Tensilica's Xtensa architecture. - Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. This file is part of GCC. @@ -1470,7 +1470,7 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, if (type && (TYPE_ALIGN (type) > BITS_PER_WORD)) { - int align = TYPE_ALIGN (type) / BITS_PER_WORD; + int align = MIN (TYPE_ALIGN (type), STACK_BOUNDARY) / BITS_PER_WORD; *arg_words = (*arg_words + align - 1) & -align; } @@ -1486,6 +1486,20 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, } +int +function_arg_boundary (enum machine_mode mode, tree type) +{ + unsigned int alignment; + + alignment = type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode); + if (alignment < PARM_BOUNDARY) + alignment = PARM_BOUNDARY; + if (alignment > STACK_BOUNDARY) + alignment = STACK_BOUNDARY; + return alignment; +} + + static bool xtensa_return_in_msb (tree valtype) { @@ -2185,7 +2199,7 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, if (TYPE_ALIGN (type) > BITS_PER_WORD) { - int align = TYPE_ALIGN (type) / BITS_PER_UNIT; + int align = MIN (TYPE_ALIGN (type), STACK_BOUNDARY) / BITS_PER_UNIT; t = build2 (PLUS_EXPR, integer_type_node, orig_ndx, build_int_cst (NULL_TREE, align - 1)); diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 0a48ebfbe36..bd5f1cd962c 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -1,5 +1,5 @@ /* Definitions of Tensilica's Xtensa target machine for GNU compiler. - Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. This file is part of GCC. @@ -728,15 +728,7 @@ typedef struct xtensa_args #define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \ function_arg (&CUM, MODE, TYPE, TRUE) -/* Specify function argument alignment. */ -#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \ - ((TYPE) != 0 \ - ? (TYPE_ALIGN (TYPE) <= PARM_BOUNDARY \ - ? PARM_BOUNDARY \ - : TYPE_ALIGN (TYPE)) \ - : (GET_MODE_ALIGNMENT (MODE) <= PARM_BOUNDARY \ - ? PARM_BOUNDARY \ - : GET_MODE_ALIGNMENT (MODE))) +#define FUNCTION_ARG_BOUNDARY function_arg_boundary /* Profiling Xtensa code is typically done with the built-in profiling feature of Tensilica's instruction set simulator, which does not @@ -1191,36 +1183,18 @@ typedef struct xtensa_args #define BSS_SECTION_ASM_OP "\t.section\t.bss" -/* Define output to appear before the constant pool. If the function - has been assigned to a specific ELF section, or if it goes into a - unique section, set the name of that section to be the literal - prefix. */ +/* Define output to appear before the constant pool. */ #define ASM_OUTPUT_POOL_PROLOGUE(FILE, FUNNAME, FUNDECL, SIZE) \ do { \ - tree fnsection; \ - resolve_unique_section ((FUNDECL), 0, flag_function_sections); \ - fnsection = DECL_SECTION_NAME (FUNDECL); \ - if (fnsection != NULL_TREE) \ - { \ - const char *fnsectname = TREE_STRING_POINTER (fnsection); \ - fprintf (FILE, "\t.begin\tliteral_prefix %s\n", \ - strcmp (fnsectname, ".text") ? fnsectname : ""); \ - } \ if ((SIZE) > 0) \ { \ + resolve_unique_section ((FUNDECL), 0, flag_function_sections); \ switch_to_section (function_section (FUNDECL)); \ fprintf (FILE, "\t.literal_position\n"); \ } \ } while (0) -/* Define code to write out the ".end literal_prefix" directive for a - function in a special section. This is appended to the standard ELF - code for ASM_DECLARE_FUNCTION_SIZE. */ -#define XTENSA_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ - if (DECL_SECTION_NAME (DECL) != NULL_TREE) \ - fprintf (FILE, "\t.end\tliteral_prefix\n") - /* A C statement (with or without semicolon) to output a constant in the constant pool, if it needs special treatment. */ #define ASM_OUTPUT_SPECIAL_POOL_ENTRY(FILE, X, MODE, ALIGN, LABELNO, JUMPTO) \ diff --git a/gcc/configure b/gcc/configure index 113d41c7372..962778cc1b5 100755 --- a/gcc/configure +++ b/gcc/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP EGREP strict1_warn cxx_compat_warn warn_cflags WERROR nocommon_flag TREEBROWSER valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_decimal_float enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR onestep SET_MAKE AWK LN_S LN RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON NM AR stage1_cflags COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LTLIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file extra_opt_files USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS host_cc_for_libada CROSS ALL SYSTEM_HEADER_DIR inhibit_libc CC_FOR_BUILD BUILD_CFLAGS STMP_FIXINC STMP_FIXPROTO collect2 gcc_cv_as ORIGINAL_AS_FOR_TARGET gcc_cv_ld ORIGINAL_LD_FOR_TARGET gcc_cv_nm ORIGINAL_NM_FOR_TARGET gcc_cv_objdump libgcc_visibility GGC zlibdir zlibinc MAINT gcc_tooldir dollar slibdir objdir subdirs srcdir all_boot_languages all_compilers all_gtfiles all_gtfiles_files_langs all_gtfiles_files_files all_lang_makefrags all_lang_makefiles all_languages all_selected_languages all_stagestuff build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines check_languages cc_set_by_configure quoted_cc_set_by_configure cpp_install_dir xmake_file tmake_file extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir libstdcxx_incdir host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file stage_prefix_set_by_configure quoted_stage_prefix_set_by_configure thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines c_target_objs cxx_target_objs target_cpu_default GMPLIBS GMPINC LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_libsubdir build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP EGREP strict1_warn cxx_compat_warn warn_cflags WERROR nocommon_flag TREEBROWSER valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_decimal_float enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR onestep datarootdir docdir htmldir SET_MAKE AWK LN_S LN RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON NM AR stage1_cflags COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LTLIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file extra_opt_files USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT host_cc_for_libada CROSS ALL SYSTEM_HEADER_DIR inhibit_libc CC_FOR_BUILD BUILD_CFLAGS STMP_FIXINC STMP_FIXPROTO collect2 gcc_cv_as ORIGINAL_AS_FOR_TARGET gcc_cv_ld ORIGINAL_LD_FOR_TARGET gcc_cv_nm ORIGINAL_NM_FOR_TARGET gcc_cv_objdump libgcc_visibility GGC zlibdir zlibinc MAINT gcc_tooldir dollar slibdir objdir subdirs srcdir all_boot_languages all_compilers all_gtfiles all_gtfiles_files_langs all_gtfiles_files_files all_lang_makefrags all_lang_makefiles all_languages all_selected_languages all_stagestuff build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines check_languages cc_set_by_configure quoted_cc_set_by_configure cpp_install_dir xmake_file tmake_file extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file stage_prefix_set_by_configure quoted_stage_prefix_set_by_configure thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines c_target_objs cxx_target_objs target_cpu_default GMPLIBS GMPINC LIBOBJS LTLIBOBJS' ac_subst_files='language_hooks' # Initialize some variables set by options. @@ -912,6 +912,7 @@ Optional Features: Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-build-libsubdir=DIR Directory where to find libraries for build system --with-local-prefix=DIR specifies directory to put local include --with-gxx-include-dir=DIR specifies directory to put g++ header files @@ -936,7 +937,10 @@ Optional Packages: --with-gc={page,zone} choose the garbage collection mechanism to use with the compiler --with-system-zlib use installed libz - --with-slibdir=DIR shared libraries in DIR LIBDIR + --with-slibdir=DIR shared libraries in DIR [LIBDIR] + --with-datarootdir=DIR Use DIR as the data root [PREFIX/share] + --with-docdir=DIR Install documentation in DIR [DATAROOTDIR] + --with-htmldir=DIR html documentation in in DIR [DOCDIR] Some influential environment variables: CC C compiler command @@ -1522,8 +1526,26 @@ esac # Determine the target- and build-specific subdirectories - # Prefix 'build-' so this never conflicts with target_subdir. + +# post-stage1 host modules use a different CC_FOR_BUILD so, in order to +# have matching libraries, they should use host libraries: Makefile.tpl +# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR). +# However, they still use the build modules, because the corresponding +# host modules (e.g. bison) are only built for the host when bootstrap +# finishes. So: +# - build_subdir is where we find build modules, and never changes. +# - build_libsubdir is where we find build libraries, and can be overridden. + +# Prefix 'build-' so this never conflicts with target_subdir. build_subdir="build-${build_noncanonical}" + +# Check whether --with-build-libsubdir or --without-build-libsubdir was given. +if test "${with_build_libsubdir+set}" = set; then + withval="$with_build_libsubdir" + build_libsubdir="$withval" +else + build_libsubdir="$build_subdir" +fi; # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories if ( test $srcdir = . && test -d gcc ) \ || test -d $srcdir/../host-${host_noncanonical}; then @@ -1655,12 +1677,16 @@ no) ;; esac fi; +# This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO. if test x${gcc_gxx_include_dir} = x; then if test x${enable_version_specific_runtime_libs} = xyes; then gcc_gxx_include_dir='${libsubdir}/include/c++' else - libstdcxx_incdir='c++/$(version)' - gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir} + libstdcxx_incdir='include/c++/$(version)' + if test x$host != x$target; then + libstdcxx_incdir="$target_alias/$libstdcxx_incdir" + fi + gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/$libstdcxx_incdir" fi fi @@ -2873,6 +2899,14 @@ fi +# Remove the -O2: for historical reasons, unless bootstrapping we prefer +# optimizations to be activated explicitly by the toplevel. +case "$CC" in + */prev-gcc/xgcc*) ;; + *) CFLAGS=`echo $CFLAGS | sed "s/-O[s0-9]* *//" ` ;; +esac + + # ------------------------- # Check C compiler features # ------------------------- @@ -7185,6 +7219,10 @@ else enable_languages=c fi; +# Used by documentation targets + + + # ------------------------- # Checks for other programs @@ -7613,7 +7651,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` - echo "configure:7616: version of makeinfo is $ac_prog_version" >&5 + echo "configure:7654: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[4-9]*) @@ -11756,6 +11794,88 @@ fi done + +for ac_func in sigaltstack +do + ac_tr_decl=`echo "HAVE_DECL_$ac_func" | $as_tr_cpp` +echo "$as_me:$LINENO: checking whether $ac_func is declared" >&5 +echo $ECHO_N "checking whether $ac_func is declared... $ECHO_C" >&6 +if eval "test \"\${gcc_cv_have_decl_$ac_func+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#undef $ac_tr_decl +#define $ac_tr_decl 1 + +#include "ansidecl.h" +#include "system.h" +#include + + +int +main () +{ +#ifndef $ac_func +char *(*pfn) = (char *(*)) $ac_func ; +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "gcc_cv_have_decl_$ac_func=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "gcc_cv_have_decl_$ac_func=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if eval "test \"`echo '$gcc_cv_have_decl_'$ac_func`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 ; cat >>confdefs.h <<_ACEOF +#define $ac_tr_decl 1 +_ACEOF + +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 ; cat >>confdefs.h <<_ACEOF +#define $ac_tr_decl 0 +_ACEOF + +fi + +done + + # More time-related stuff. echo "$as_me:$LINENO: checking for struct tms" >&5 echo $ECHO_N "checking for struct tms... $ECHO_C" >&6 @@ -12195,6 +12315,63 @@ if test "$host_xm_file" != "$build_xm_file"; then fi fi +case ${host} in + powerpc-*-darwin*) + echo "$as_me:$LINENO: checking whether mcontext_t fields have underscores" >&5 +echo $ECHO_N "checking whether mcontext_t fields have underscores... $ECHO_C" >&6 +if test "${gcc_cv_mcontext_underscores+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + +#include +#include +int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; } + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gcc_cv_mcontext_underscores=no +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gcc_cv_mcontext_underscores=yes +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $gcc_cv_mcontext_underscores" >&5 +echo "${ECHO_T}$gcc_cv_mcontext_underscores" >&6 + if test $gcc_cv_mcontext_underscores = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAS_MCONTEXT_T_UNDERSCORES +_ACEOF + + fi + ;; +esac + # --------- # Threading # --------- @@ -12456,8 +12633,9 @@ INCINTL= XGETTEXT= GMSGFMT= POSUB= -if test -f ../intl/config.intl; then - . ../intl/config.intl + +if test -f ../intl/config.intl; then + . ../intl/config.intl fi echo "$as_me:$LINENO: checking whether NLS is requested" >&5 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 @@ -12489,8 +12667,8 @@ echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 # by the backticks, then collapsed again by the double quotes, # leaving us with one backslash in the sed expression (right # before the dot that mustn't act as a wildcard). - cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!.gmo!"` - lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\.gmo!!"` + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` # The user is allowed to set LINGUAS to a list of languages to # install catalogs for. If it's empty that means "all of them." if test "x$LINGUAS" = x; then @@ -12507,6 +12685,16 @@ echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 LINGUAS="$XLINGUAS" echo "$as_me:$LINENO: result: $LINGUAS" >&5 echo "${ECHO_T}$LINGUAS" >&6 + + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + CATOBJEXT=.gmo + fi # If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get @@ -13781,11 +13969,14 @@ cat > conftest.big </dev/null \ | tail -3 > conftest.got \ - && { cmp conftest.lit conftest.got > /dev/null 2>&1 \ - || cmp conftest.big conftest.got > /dev/null 2>&1; } + && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \ + || diff -b conftest.big conftest.got > /dev/null 2>&1; } then gcc_cv_as_eh_frame=yes elif { ac_try='$gcc_cv_as -o conftest.o --traditional-format /dev/null' @@ -14867,6 +15058,39 @@ _ACEOF fi + echo "$as_me:$LINENO: checking assembler for ffreep mnemonic" >&5 +echo $ECHO_N "checking assembler for ffreep mnemonic... $ECHO_C" >&6 +if test "${gcc_cv_as_ix86_ffreep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gcc_cv_as_ix86_ffreep=no + if test x$gcc_cv_as != x; then + echo 'ffreep %st(1)' > conftest.s + if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } + then + gcc_cv_as_ix86_ffreep=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +echo "$as_me:$LINENO: result: $gcc_cv_as_ix86_ffreep" >&5 +echo "${ECHO_T}$gcc_cv_as_ix86_ffreep" >&6 +if test $gcc_cv_as_ix86_ffreep = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_AS_IX86_FFREEP 1 +_ACEOF + +fi + # This one is used unconditionally by i386.[ch]; it is to be defined # to 1 if the feature is present, 0 otherwise. echo "$as_me:$LINENO: checking assembler for GOTOFF in data" >&5 @@ -15824,12 +16048,8 @@ language_hooks="Make-hooks" for lang in ${srcdir}/*/config-lang.in do - case $lang in - # The odd quoting in the next line works around - # an apparent bug in bash 1.12 on linux. - ${srcdir}/[*]/config-lang.in) - continue ;; - *) + test "$lang" = "${srcdir}/*/config-lang.in" && continue + lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang` if test "x$lang_alias" = x then @@ -15847,26 +16067,40 @@ do ;; esac - if test -f $srcdir/$subdir/lang.opt; then - lang_opt_files="$lang_opt_files $srcdir/$subdir/lang.opt" - fi - if test -f $srcdir/$subdir/$subdir-tree.def; then - lang_tree_files="$lang_tree_files $srcdir/$subdir/$subdir-tree.def" - fi - language= boot_language= compilers= stagestuff= outputs= gtfiles= + subdir_requires= . ${srcdir}/$subdir/config-lang.in if test "x$language" = x then echo "${srcdir}/$subdir/config-lang.in doesn't set \$language." 1>&2 exit 1 fi + + ok=: + case ",$enable_languages," in + *,$lang_alias,*) ;; + *) + for i in $subdir_requires; do + test -f "${srcdir}/$i/config-lang.in" && continue + ok=false + break + done + ;; + esac + $ok || continue + all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$subdir/Make-lang.in" + if test -f $srcdir/$subdir/lang.opt; then + lang_opt_files="$lang_opt_files $srcdir/$subdir/lang.opt" + fi + if test -f $srcdir/$subdir/$subdir-tree.def; then + lang_tree_files="$lang_tree_files $srcdir/$subdir/$subdir-tree.def" + fi if test -f ${srcdir}/$subdir/Makefile.in then all_lang_makefiles="$subdir/Makefile" fi @@ -15879,13 +16113,11 @@ do all_stagestuff="$all_stagestuff $stagestuff" all_outputs="$all_outputs $outputs" all_gtfiles="$all_gtfiles $gtfiles" - for f in $gtfiles - do - all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} " - all_gtfiles_files_files="$all_gtfiles_files_files ${f} " - done - ;; - esac + for f in $gtfiles + do + all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} " + all_gtfiles_files_files="$all_gtfiles_files_files ${f} " + done done # Pick up gtfiles for c @@ -16010,8 +16242,37 @@ fi; objdir=`${PWDCMD-pwd}` -# Substitute configuration variables +# Check whether --with-datarootdir or --without-datarootdir was given. +if test "${with_datarootdir+set}" = set; then + withval="$with_datarootdir" + datarootdir="\${prefix}/$with_datarootdir" +else + datarootdir='$(prefix)/share' +fi; + + + +# Check whether --with-docdir or --without-docdir was given. +if test "${with_docdir+set}" = set; then + withval="$with_docdir" + docdir="\${prefix}/$with_docdir" +else + docdir='$(datarootdir)' +fi; + + + +# Check whether --with-htmldir or --without-htmldir was given. +if test "${with_htmldir+set}" = set; then + withval="$with_htmldir" + htmldir="\${prefix}/$with_htmldir" +else + htmldir='$(docdir)' +fi; + + +# Substitute configuration variables @@ -16741,6 +17002,7 @@ s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@target_noncanonical@,$target_noncanonical,;t t +s,@build_libsubdir@,$build_libsubdir,;t t s,@build_subdir@,$build_subdir,;t t s,@host_subdir@,$host_subdir,;t t s,@target_subdir@,$target_subdir,;t t @@ -16773,6 +17035,9 @@ s,@TARGET_SYSTEM_ROOT@,$TARGET_SYSTEM_ROOT,;t t s,@TARGET_SYSTEM_ROOT_DEFINE@,$TARGET_SYSTEM_ROOT_DEFINE,;t t s,@CROSS_SYSTEM_HEADER_DIR@,$CROSS_SYSTEM_HEADER_DIR,;t t s,@onestep@,$onestep,;t t +s,@datarootdir@,$datarootdir,;t t +s,@docdir@,$docdir,;t t +s,@htmldir@,$htmldir,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@AWK@,$AWK,;t t s,@LN_S@,$LN_S,;t t @@ -16813,6 +17078,10 @@ s,@XGETTEXT@,$XGETTEXT,;t t s,@GMSGFMT@,$GMSGFMT,;t t s,@POSUB@,$POSUB,;t t s,@CATALOGS@,$CATALOGS,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@GENCAT@,$GENCAT,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t s,@host_cc_for_libada@,$host_cc_for_libada,;t t s,@CROSS@,$CROSS,;t t s,@ALL@,$ALL,;t t @@ -16871,7 +17140,6 @@ s,@extra_programs@,$extra_programs,;t t s,@float_h_file@,$float_h_file,;t t s,@gcc_config_arguments@,$gcc_config_arguments,;t t s,@gcc_gxx_include_dir@,$gcc_gxx_include_dir,;t t -s,@libstdcxx_incdir@,$libstdcxx_incdir,;t t s,@host_exeext@,$host_exeext,;t t s,@host_xm_file_list@,$host_xm_file_list,;t t s,@host_xm_include_list@,$host_xm_include_list,;t t diff --git a/gcc/configure.ac b/gcc/configure.ac index a055581a451..5841da9bc87 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1,7 +1,7 @@ # configure.ac for GCC # Process this file with autoconf to generate a configuration script. -# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. #This file is part of GCC. @@ -132,13 +132,17 @@ no) ;; *) gcc_gxx_include_dir=$with_gxx_include_dir ;; esac]) +# This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO. if test x${gcc_gxx_include_dir} = x; then if test x${enable_version_specific_runtime_libs} = xyes; then gcc_gxx_include_dir='${libsubdir}/include/c++' else - libstdcxx_incdir='c++/$(version)' + libstdcxx_incdir='include/c++/$(version)' + if test x$host != x$target; then + libstdcxx_incdir="$target_alias/$libstdcxx_incdir" + fi changequote(<<, >>)dnl - gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir} + gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/$libstdcxx_incdir" changequote([, ])dnl fi fi @@ -278,6 +282,14 @@ fi AC_SUBST(NO_MINUS_C_MINUS_O) AC_SUBST(OUTPUT_OPTION) +# Remove the -O2: for historical reasons, unless bootstrapping we prefer +# optimizations to be activated explicitly by the toplevel. +case "$CC" in + */prev-gcc/xgcc*) ;; + *) CFLAGS=`echo $CFLAGS | sed "s/-O[[s0-9]]* *//" ` ;; +esac +AC_SUBST(CFLAGS) + # ------------------------- # Check C compiler features # ------------------------- @@ -817,6 +829,10 @@ AC_ARG_ENABLE(languages, esac], [enable_languages=c]) +# Used by documentation targets +AC_SUBST(datarootdir) +AC_SUBST(docdir) +AC_SUBST(htmldir) # ------------------------- # Checks for other programs @@ -1154,6 +1170,12 @@ gcc_AC_CHECK_DECLS(times, , ,[ #endif ]) +gcc_AC_CHECK_DECLS(sigaltstack, , ,[ +#include "ansidecl.h" +#include "system.h" +#include +]) + # More time-related stuff. AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @@ -1337,6 +1359,23 @@ if test "$host_xm_file" != "$build_xm_file"; then fi fi +case ${host} in + powerpc-*-darwin*) + AC_CACHE_CHECK([whether mcontext_t fields have underscores], + gcc_cv_mcontext_underscores, + AC_COMPILE_IFELSE([ +#include +#include +int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; } +], + gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes)) + if test $gcc_cv_mcontext_underscores = yes; then + AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl + [mcontext_t fields start with __]) + fi + ;; +esac + # --------- # Threading # --------- @@ -2170,11 +2209,14 @@ cat > conftest.big </dev/null \ | tail -3 > conftest.got \ - && { cmp conftest.lit conftest.got > /dev/null 2>&1 \ - || cmp conftest.big conftest.got > /dev/null 2>&1; } + && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \ + || diff -b conftest.big conftest.got > /dev/null 2>&1; } then gcc_cv_as_eh_frame=yes elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then @@ -2773,6 +2815,12 @@ foo: nop [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1, [Define if your assembler supports the Sun syntax for cmov.])]) + gcc_GAS_CHECK_FEATURE([ffreep mnemonic], + gcc_cv_as_ix86_ffreep,,, + [ffreep %st(1)],, + [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1, + [Define if your assembler supports the ffreep mnemonic.])]) + # This one is used unconditionally by i386.[ch]; it is to be defined # to 1 if the feature is present, 0 otherwise. gcc_GAS_CHECK_FEATURE([GOTOFF in data], @@ -3305,13 +3353,9 @@ language_hooks="Make-hooks" for lang in ${srcdir}/*/config-lang.in do - case $lang in - # The odd quoting in the next line works around - # an apparent bug in bash 1.12 on linux. changequote(,)dnl - ${srcdir}/[*]/config-lang.in) - continue ;; - *) + test "$lang" = "${srcdir}/*/config-lang.in" && continue + lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang` if test "x$lang_alias" = x then @@ -3330,26 +3374,40 @@ changequote(,)dnl esac changequote([,])dnl - if test -f $srcdir/$subdir/lang.opt; then - lang_opt_files="$lang_opt_files $srcdir/$subdir/lang.opt" - fi - if test -f $srcdir/$subdir/$subdir-tree.def; then - lang_tree_files="$lang_tree_files $srcdir/$subdir/$subdir-tree.def" - fi - language= boot_language= compilers= stagestuff= outputs= gtfiles= + subdir_requires= . ${srcdir}/$subdir/config-lang.in if test "x$language" = x then echo "${srcdir}/$subdir/config-lang.in doesn't set \$language." 1>&2 exit 1 fi + + ok=: + case ",$enable_languages," in + *,$lang_alias,*) ;; + *) + for i in $subdir_requires; do + test -f "${srcdir}/$i/config-lang.in" && continue + ok=false + break + done + ;; + esac + $ok || continue + all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$subdir/Make-lang.in" + if test -f $srcdir/$subdir/lang.opt; then + lang_opt_files="$lang_opt_files $srcdir/$subdir/lang.opt" + fi + if test -f $srcdir/$subdir/$subdir-tree.def; then + lang_tree_files="$lang_tree_files $srcdir/$subdir/$subdir-tree.def" + fi if test -f ${srcdir}/$subdir/Makefile.in then all_lang_makefiles="$subdir/Makefile" fi @@ -3362,13 +3420,11 @@ changequote([,])dnl all_stagestuff="$all_stagestuff $stagestuff" all_outputs="$all_outputs $outputs" all_gtfiles="$all_gtfiles $gtfiles" - for f in $gtfiles - do - all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} " - all_gtfiles_files_files="$all_gtfiles_files_files ${f} " - done - ;; - esac + for f in $gtfiles + do + all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} " + all_gtfiles_files_files="$all_gtfiles_files_files ${f} " + done done # Pick up gtfiles for c @@ -3476,7 +3532,7 @@ AC_ARG_ENABLE(version-specific-runtime-libs, installed in a compiler-specific directory]) AC_ARG_WITH(slibdir, -[ --with-slibdir=DIR shared libraries in DIR [LIBDIR]], +[ --with-slibdir=DIR shared libraries in DIR [[LIBDIR]]], slibdir="$with_slibdir", if test "${enable_version_specific_runtime_libs+set}" = set; then slibdir='$(libsubdir)' @@ -3490,6 +3546,24 @@ AC_SUBST(slibdir) objdir=`${PWDCMD-pwd}` AC_SUBST(objdir) +AC_ARG_WITH(datarootdir, +[ --with-datarootdir=DIR Use DIR as the data root [[PREFIX/share]]], +datarootdir="\${prefix}/$with_datarootdir", +datarootdir='$(prefix)/share') +AC_SUBST(datarootdir) + +AC_ARG_WITH(docdir, +[ --with-docdir=DIR Install documentation in DIR [[DATAROOTDIR]]], +docdir="\${prefix}/$with_docdir", +docdir='$(datarootdir)') +AC_SUBST(docdir) + +AC_ARG_WITH(htmldir, +[ --with-htmldir=DIR html documentation in in DIR [[DOCDIR]]], +htmldir="\${prefix}/$with_htmldir", +htmldir='$(docdir)') +AC_SUBST(htmldir) + # Substitute configuration variables AC_SUBST(subdirs) AC_SUBST(srcdir) @@ -3523,7 +3597,6 @@ AC_SUBST(extra_programs) AC_SUBST(float_h_file) AC_SUBST(gcc_config_arguments) AC_SUBST(gcc_gxx_include_dir) -AC_SUBST(libstdcxx_incdir) AC_SUBST(host_exeext) AC_SUBST(host_xm_file_list) AC_SUBST(host_xm_include_list) diff --git a/gcc/convert.c b/gcc/convert.c index 97977040755..118889fad44 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -315,8 +315,12 @@ convert_to_real (tree type, tree expr) switch (TREE_CODE (TREE_TYPE (expr))) { case REAL_TYPE: - return build1 (flag_float_store ? CONVERT_EXPR : NOP_EXPR, - type, expr); + /* Ignore the conversion if we don't need to store intermediate + results and neither type is a decimal float. */ + return build1 ((flag_float_store + || DECIMAL_FLOAT_TYPE_P (type) + || DECIMAL_FLOAT_TYPE_P (itype)) + ? CONVERT_EXPR : NOP_EXPR, type, expr); case INTEGER_TYPE: case ENUMERAL_TYPE: @@ -384,27 +388,36 @@ convert_to_integer (tree type, tree expr) /* Only convert in ISO C99 mode. */ if (!TARGET_C99_FUNCTIONS) break; - if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node)) - fn = mathfn_built_in (s_intype, BUILT_IN_LLCEIL); - else + if (outprec < TYPE_PRECISION (long_integer_type_node) + || (outprec == TYPE_PRECISION (long_integer_type_node) + && !TYPE_UNSIGNED (type))) fn = mathfn_built_in (s_intype, BUILT_IN_LCEIL); + else if (outprec == TYPE_PRECISION (long_long_integer_type_node) + && !TYPE_UNSIGNED (type)) + fn = mathfn_built_in (s_intype, BUILT_IN_LLCEIL); break; CASE_FLT_FN (BUILT_IN_FLOOR): /* Only convert in ISO C99 mode. */ if (!TARGET_C99_FUNCTIONS) break; - if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node)) - fn = mathfn_built_in (s_intype, BUILT_IN_LLFLOOR); - else + if (outprec < TYPE_PRECISION (long_integer_type_node) + || (outprec == TYPE_PRECISION (long_integer_type_node) + && !TYPE_UNSIGNED (type))) fn = mathfn_built_in (s_intype, BUILT_IN_LFLOOR); + else if (outprec == TYPE_PRECISION (long_long_integer_type_node) + && !TYPE_UNSIGNED (type)) + fn = mathfn_built_in (s_intype, BUILT_IN_LLFLOOR); break; CASE_FLT_FN (BUILT_IN_ROUND): - if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node)) - fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND); - else + if (outprec < TYPE_PRECISION (long_integer_type_node) + || (outprec == TYPE_PRECISION (long_integer_type_node) + && !TYPE_UNSIGNED (type))) fn = mathfn_built_in (s_intype, BUILT_IN_LROUND); + else if (outprec == TYPE_PRECISION (long_long_integer_type_node) + && !TYPE_UNSIGNED (type)) + fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND); break; CASE_FLT_FN (BUILT_IN_RINT): @@ -413,10 +426,13 @@ convert_to_integer (tree type, tree expr) break; /* ... Fall through ... */ CASE_FLT_FN (BUILT_IN_NEARBYINT): - if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node)) - fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT); - else - fn = mathfn_built_in (s_intype, BUILT_IN_LRINT); + if (outprec < TYPE_PRECISION (long_integer_type_node) + || (outprec == TYPE_PRECISION (long_integer_type_node) + && !TYPE_UNSIGNED (type))) + fn = mathfn_built_in (s_intype, BUILT_IN_LRINT); + else if (outprec == TYPE_PRECISION (long_long_integer_type_node) + && !TYPE_UNSIGNED (type)) + fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT); break; CASE_FLT_FN (BUILT_IN_TRUNC): @@ -471,6 +487,7 @@ convert_to_integer (tree type, tree expr) else if (outprec >= inprec) { enum tree_code code; + tree tem; /* If the precision of the EXPR's type is K bits and the destination mode has more bits, and the sign is changing, @@ -488,7 +505,13 @@ convert_to_integer (tree type, tree expr) else code = NOP_EXPR; - return fold_build1 (code, type, expr); + tem = fold_unary (code, type, expr); + if (tem) + return tem; + + tem = build1 (code, type, expr); + TREE_NO_WARNING (tem) = 1; + return tem; } /* If TYPE is an enumeral type or a type with a precision less diff --git a/gcc/coverage.c b/gcc/coverage.c index 38339304a30..5eaf4888fe3 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -388,15 +388,13 @@ coverage_counter_alloc (unsigned counter, unsigned num) if (!tree_ctr_tables[counter]) { - /* Generate and save a copy of this so it can be shared. */ - /* We don't know the size yet; make it big enough that nobody - will make any clever transformation on it. */ + /* Generate and save a copy of this so it can be shared. Leave + the index type unspecified for now; it will be set after all + functions have been compiled. */ char buf[20]; tree gcov_type_node = get_gcov_type (); - tree domain_tree - = build_index_type (build_int_cst (NULL_TREE, 1000)); /* replaced later */ tree gcov_type_array_type - = build_array_type (gcov_type_node, domain_tree); + = build_array_type (gcov_type_node, NULL_TREE); tree_ctr_tables[counter] = build_decl (VAR_DECL, NULL_TREE, gcov_type_array_type); TREE_STATIC (tree_ctr_tables[counter]) = 1; @@ -416,18 +414,13 @@ tree tree_coverage_counter_ref (unsigned counter, unsigned no) { tree gcov_type_node = get_gcov_type (); - tree domain_type = TYPE_DOMAIN (TREE_TYPE (tree_ctr_tables[counter])); gcc_assert (no < fn_n_ctrs[counter] - fn_b_ctrs[counter]); no += prg_n_ctrs[counter] + fn_b_ctrs[counter]; /* "no" here is an array index, scaled to bytes later. */ return build4 (ARRAY_REF, gcov_type_node, tree_ctr_tables[counter], - fold_convert (domain_type, - build_int_cst (NULL_TREE, no)), - TYPE_MIN_VALUE (domain_type), - size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (gcov_type_node), - size_int (TYPE_ALIGN_UNIT (gcov_type_node)))); + build_int_cst (NULL_TREE, no), NULL, NULL); } /* Generate a checksum for a string. CHKSUM is the current diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 45d25bb1f73..bcb6dc8fe61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,1119 @@ +2006-09-10 Mark Mitchell + + PR c++/28991 + * cp-objcp-common.c (cxx_staticp): New function. + * cp-objcp-common.h (LANG_HOOOKS_STATICP): Use it. + * cp-tree.h (cxx_staticp): New function. + +2006-09-09 Jason Merrill + + PR c++/28996 + * cvt.c (convert_to_void): Strip COMPONENT_REF to functions. + +2006-09-08 Volker Reichelt + + PR c++/28858 + * parser.c (cp_parser_skip_until_found): Rename to + cp_parser_skip_to_end_of_template_parameter_list. Remove last two + parameters. Track levels of '< ... >'. Stop at '{', '}', or ';'. + Reorganize. Adjust comment. + (cp_parser_template_declaration_after_export): Adjust call. + (cp_parser_enclosed_template_argument_list): Likewise. + +2006-09-07 Andrew Pinski + + PR C++/28906 + * init.c (build_new_1): Build a distinct type copy + for the array type that was returned from + build_cplus_array_type. + +2006-09-07 Jason Merrill + + PR c++/27371 + * cvt.c (convert_to_void): Enable previous change. + + PR c++/26957 + * method.c (use_thunk): Clear DECL_HAS_VALUE_EXPR_P on copied + parms. + +2006-09-07 Simon Martin + + PR c++/28284 + * pt.c (fold_non_dependent_expr): Make sure expr is not + dereferenced if it is NULL. + +2006-09-06 Zak Kipling + + PR c++/26195 + * decl.c (make_rtl_for_nonlocal_decl), + (start_preparsed_function): Don't use lbasename on + input_filename when calling get_fileinfo. + * semantics.c (begin_class_definition): Likewise. + * lex.c (cxx_make_type): Likewise. + (handle_pragma_interface): Call get_fileinfo on input_filename, + not on the parameter to the directive. + +2006-09-06 Mark Mitchell + + PR c++/28903 + * pt.c (tsubst): Use fold_non_dependent_expr to fold array + dimensions. + + PR c++/28886 + * pt.c (unify): Avoid unnecessary calls to fold_build2 for array + dimensions. + +2006-09-06 Jason Merrill + + PR c++/27371 + * cvt.c (convert_to_void): Strip useless TARGET_EXPR. + * cp-tree.h (TARGET_EXPR_IMPLICIT_P): New macro. + * tree.c (build_cplus_new): Set it. + + PR c++/26696 + * cvt.c (convert_to_void): Replace a subexpression with no side + effects with void_zero_node. + * tree.c (is_overloaded_fn): Look through COMPONENT_REF. + (get_first_fn): Ditto. + * decl.c (grokdeclarator): No need to look through COMPONENT_REF. + +2006-09-05 Jason Merrill + + PR c++/26571 + * parser.c (cp_parser_diagnose_invalid_type_name): Handle the case + where the name is a type used incorrectly. + + PR c++/26671 + * typeck.c (maybe_warn_about_returning_address_of_local): Look + through COMPONENT_REF and ARRAY_REF. + + PR c++/26102 + * name-lookup.c (do_class_using_decl): Try to find the base even + if bases_dependent_p. + * pt.c (type_dependent_expression_p): A USING_DECL is dependent. + + PR c++/19809 + * pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl. + +2006-09-04 Nathan Sidwell + + PR 23287 Revert my 2006-09-01 patch. + * parser.c: Reverted. + * pt.c: Reverted. + +2006-09-02 Lee Millward + + PR c++/27670 + PR c++/27493 + PR c++/27494 + PR c++/27397 + * parser.c (cp_parser_template_parameter_list): Add + invalid template parameters to the parameter list as + error_mark_node. + +2006-09-02 Jakub Jelinek + + PR c++/28878 + * except.c (build_throw): Only set current_function_returns_abnormally + if cfun is not NULL. + + PR c++/26917 + * repo.c (repo_file): Remove. + (open_repo_file, reopen_repo_file_for_write): Return fopened + FILE * instead of setting global repo_file variable. + (init_repo): Adjust caller. + (finish_repo): Likewise. Return instead of goto out before + reopen_repo_file_for_write has been called. + +2006-09-01 Nathan Sidwell + + PR c++/28705 + * semantics.c (finish_call_expr): Add assert. + * name-lookup.c (lookup_arg_dependent): Check we found an overload + or an object. + + PR c++/23287 + * parser.c (cp_parser_id_expression): Add member_p + argument. Update all callers. + (cp_parser_unqualified_id): Likewise. Lookup a destructor name in + the object's scope, if valid. + (cp_parser_global_scope_opt): Add object_scope_valid_p. Update + callers. + (cp_parser_postfix_dot_deref_expression): Set object_scope. + * pt.c (tsubst_copy_and_build): Lookup dependent dtor name here. + +2006-08-30 Jason Merrill + + PR c++/26670 + * class.c (check_field_decls): Don't unset TYPE_PACKED until all + the fields have been processed. + +2006-08-29 Andrew Pinski + + PR C++/28349 + * call.c (build_x_va_arg): Remove the reference type + from the type before creating the pointer type. + +2006-08-29 J"orn Rennecke + + PR c++/28139 + * except.c (expand_start_catch_block): Use correct types for bitwise + copy. + +2006-08-28 Jason Merrill + + PR c++/26670 + * class.c (check_field_decls): Unset TYPE_PACKED (t) if one of the + fields can't be packed. + + PR c++/26577 + * cvt.c (convert_to_void): Don't automatically load from volatiles + of TREE_ADDRESSABLE type. + +2006-08-28 Volker Reichelt + + PR c++/28860 + * cp-tree.h (maybe_process_partial_specialization): Return + tree instead of void. + * parser.c (cp_parser_class_head): Use return value of + maybe_process_partial_specialization. + * pt.c (maybe_process_partial_specialization): Return error_mark_node + for broken specializations, TYPE otherwise. Check for template + template parameters. + +2006-08-27 Mark Mitchell + + PR c++/28058 + * pt.c (register_specialization): Return error_mark_node for + specialization-after-instantiation. + * decl2.c (mark_used): Mark the main function used when one of its + clones is used. + +2006-08-27 Lee Millward + + PR c++/26573 + * class.c (check_field_decls): Don't issue error about + local classes containing static data members. + +2006-08-26 Joseph S. Myers + + PR c++/24009 + * parser.c (struct cp_token): Add input_file_stack_index. + (eof_token): Update. + (cp_lexer_get_preprocessor_token): Save input_file_stack_tick. + (cp_lexer_set_source_position_from_token): Restore input file + stack. + +2006-08-26 Lee Millward + + PR c++/28736 + PR c++/28737 + PR c++/28738 + * pt.c (process_template_parm): Store invalid template + parameters as a TREE_LIST with a TREE_VALUE of error_mark_node. + (push_inline_template_parms_recursive): Check for template + parameters having a TREE_VALUE of error_mark_node rather than + check the parameter itself. + (mangle_class_name_for_template): Likewise. + (comp_template_parms): When comparing the individual template + parameters, return 1 if either is error_mark_node. + (current_template_args): Robustify. + (redeclare_class_template): Likewise. + +2006-08-26 Mark Mitchell + + PR c++/28588 + * class.c (resolve_address_of_overloaded_function): Add + access_path parameter. Perform access checks. + (instantiate_type): Adjust call to + resolve_address_of_overloaded_function. Remove unnecessary code. + * tree.c (is_overloaded_fn): Document. Return 2 when there are + acutally multiple functions. + (really_overloaded_fn): Use is_overloaded_fn. + * mangle.c (write_expression): Handle BASELINKs. + * cp-tree.h (really_overloaded_fn): Return bool. + (baselink_for_fns): Declare. + * search.c (lookup_member): Check access for single static + functions here. + * pt.c (convert_nontype_argument_function): Handle BASELINKs. + (tsubst_copy_and_build): Generate BASELINKs for template-ids. + * semantics.c (finish_call_expr): Use baselink_for_fns. + (baselink_for_fns): New function. + (finish_id_expression): Use it. + * parser.c (cp_parser_template_argument): Don't strip BASELINKs. + + PR c++/28595 + * pt.c (tsubst): Issue errors about attempts to create VLAs at + template-instantiation time. + +2006-08-25 Volker Reichelt + + PR c++/28853 + * typeck2.c (cxx_incomplete_type_diagnostic): Handle template + template parameters. Improve error message for template type + parameters. + + PR c++/28852 + * cp-tree.h (grok_op_properties): Return bool instead of void. + * decl.c (grokfndecl): Discard invalid operator declarations. + (copy_fn_p): Revert change for PR 27547. + (grok_op_properties): Return error status (true on success). + * pt.c (tsubst_decl): Discard invalid operator declarations. + +2006-08-25 Mark Mitchell + + PR c++/28056 + * decl.c (grokdeclarator): Disallow declarations with qualified + names in local scopes. + +2006-08-25 Nathan Sidwell + + PR c++/27787 + * decl.c (make_typename_type): Only try and resolve it when + context is not dependent. Refactor. + * decl2.c (check_classfn): Push to class scope before looking for + the function. + +2006-08-24 Danny Smith + + PR driver/28528 + * g++spec.c (lang_specific_driver): Always check if we need to + swallow a space-separated arg to '-x'. + * lang-specs.h: Don't create ouput files for '-xc++-header' + if -fsyntax-only. + +2006-08-23 Jason Merrill + + PR c++/27714 + * pt.c (push_template_decl_real): A friend template with class + scope isn't primary. + +2006-08-23 Benjamin Smedberg + + PR c++/28687 + * rtti.c (build_dynamic_cast, build_dynamic_cast_1): + Move -fno-rtti check to be more specific. + +2006-08-22 Jason Merrill + + PR c++/23372 + * call.c (build_over_call): Don't make a copy here if build_call + will make one too. + +2006-08-22 Andrew Pinski + + PR C++/28450 + * cp/init.c (build_zero_init): Handle VECTOR_TYPE and + COMPLEX_TYPEs. + +2006-08-22 Simon Martin + + PR c++/28420 + * parser.c (cp_parser_postfix_expression): Make sure that the + saved value for parser->type_definition_forbidden_message is + restored before returning to avoid an invalid free(). + +2006-08-22 Jason Merrill + + PR c++/28659 + * typeck.c (merge_types): If either of the types have the right + attributes, return that one. + + * tree.c (cp_build_type_attribute_variant): Make sure we aren't + doing this to class types. + * typeck.c (original_type): Deal with type quals properly. + +2006-08-21 Jason Merrill + + PR c++/27115 + * semantics.c (finish_stmt_expr_expr): Don't try to voidify here, + just leave the expression as it is. + (finish_stmt_expr): If the statement-expression has class type, + wrap it in a TARGET_EXPR. + * cp-gimplify.c (cp_gimplify_init_expr): Don't bother with + CLEANUP_POINT_EXPR. + * except.c (build_throw): Give the CLEANUP_POINT_EXPR void type. + +2006-08-21 Lee Millward + + PR c++/26269 + * decl.c (duplicate_decls): Return early if either + newdecl or olddecl is error_mark_node. + + PR c++/28505 + * decl.c (grokdeclarator): Return early after + issuing diagnostic about an incomplete type. + + PR c++/28741 + * tree.c (decl_anon_ns_mem_p): Robustify. + * decl2.c (determine_visibility): Likewise. + +2006-08-20 Mark Mitchell + + PR c++/28341 + * tree.c (cast_valid_in_integral_constant_expression_p): New + function. + * cp-tree.h (tsubst_copy_and_build): Adjust prototype. + * pt.c (tsubst_expr): Add integral_constant_expression_p + parameter. + (fold_non_dependent_expr): Adjust callers of + tsubst_{expr,copy_and_build}. + (tsubst_friend_function): Likewise. + (tsubst_template_arg): Likewise. + (tsubst_default_argument): Likewise. + (tsubst_decl): Likewise. + (tsubst): Likewise. + (tsubst_omp_clasuses): Likewise. + (regenerate_decl_fromp_template): Likewise. + (instantiate_decl): Likewise. + (tsubst_initializer_list): Likewise. + (tsubst_enum): Likewise. + (tsubst_expr): Use RECUR throughout. + (tsubst_copy_and_build): Change definition of RECUR. Do not allow + invalid casts in integral constant expressions. + * parser.c (cp_parser_postfix_expression): Use + cast_valid_in_integral_constant_expression_p. + (cp_parser_cast_expression): Likewise. + (cp_parser_functional_cast): Likewise. + + PR c++/28346 + * pt.c (tsubst_qualified_id): Do not strip references from + OFFSET_REFs. + +2006-08-17 Volker Reichelt + + PR c++/28606 + * parser.c (cp_parser_diagnose_invalid_type_name): Handle BIT_NOT_EXPR. + Fix formatting. + (cp_parser_parse_and_diagnose_invalid_type_name): Tighten condition + for valid type-names. + (cp_parser_unqualified_id): Fix error handling for destructors. + + PR c++/28710 + * decl.c (xref_tag): Improve error message. Return early on error. + + PR c++/28711 + * pt.c (tsubst_copy_and_build) : Robustify. + +2006-08-17 Paolo Bonzini + + PR c++/28573 + * semantics.c (finish_offsetof): Add new argument to fold_offsetof. + +2006-08-16 Andrew Pinski + + PR c++/28302 + * typeck.c (build_unary_op ): Don't call + perform_integral_promotions for non integral type. + +2006-08-16 Jason Merrill + + PR c++/28385 + * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template + if arg is a function. + +2006-08-16 Volker Reichelt + + PR c++/28593 + * init.c (build_new): Return early on invalid placement. + +2006-08-15 Lee Millward + + PR c++/28594 + * pt.c (process_template_parm): Robustify. + +2006-08-14 Steve Ellcey + + PR c++/28288 + PR c++/14556 + * operators.def: Remove , ?= operators. + * parser.c: Remove CPP_MIN, CPP_MAX, CPP_MIN_EQ, and CPP_MAX_EQ. + (cp_parser_warn_min_max): Remove. + +2006-08-11 Jason Merrill + + PR c++/28559 + * parser.c (cp_parser_elaborated_type_specifier): Also ignore + attributes applied to a TYPENAME_TYPE. + +2006-08-09 Lee Millward + + PR c++/28637 + * pt.c (coerce_template_parms): Copy across the + invalid template arguments to the new template inner arguments. + (retrieve_specialization): Robustify. + + PR c++/28638 + * pt.c (coerce_template_template_parms): Robustify. + + PR c++/28639 + * error.c (dump_template_parms): Robustify. + + PR c++/28640 + * pt.c (redeclare_class_template): Robustify. + + PR c++/28641 + * pt.c (type_unification_real): Robustify. + +2006-08-03 Lee Millward + + PR c++/28347 + * decl.c (start_decl): Return error_mark_node if a + diagnostic was issed for an invalid typedef initialization. + +2006-08-03 Volker Reichelt + + PR c++/27508 + * parser.c (cp_parser_unqualified_id): Check for invalid scopes + when parsing destructor names. + + PR c++/28274 + * decl.c (duplicate_decls): Call check_default_args here. + (start_preparsed_function): Do not call check_default_args. + * name-lookup.c (pushdecl_maybe_friend): Only call + check_default_args if duplicate_decls got bypassed. + +2006-08-02 Richard Guenther + + PR c++/28479 + Revert + 2006-07-05 Richard Guenther + Andrew Pinski + + PR c++/27084 + * cp-objcp-common.c (cxx_types_compatible_p): Ignore + top level qualifiers for pointer type comparisons. + +2006-08-02 Mark Mitchell + + PR c++/28557 + * pt.c (tsubst_baselink): Substitute into BASELINK_OPTYPE. + +2006-07-31 Mark Mitchell + + PR c++/28523 + * tree.c (stabilize_expr): Tweak documentation. Add assertion. + (stabilize_call): Tweak documentation. + (stabilize_init): Only call stabilize_call for calls. + +2006-08-01 Steve Ellcey + + PR c++/28432 + * decl2.c (check_classfn): Remove early return. + * search.c (lookup_member): Return NULL with bad type. + +2006-08-01 Steve Ellcey + + PR c++/28256 + * decl.c (check_initializer): Check for 1 initializer on scalar types. + +2006-08-01 Daniel Jacobowitz + + PR debug/23336 + * pt.c (tsubst_copy_and_build): Mark used enum types. + * semantics.c (finish_id_expression): Likewise. + +2006-07-31 Volker Reichelt + + PR c++/6634 + * decl.c (grokdeclarator): Check whether "long" or "short" was + specified for non-integral types. + +2006-07-28 Volker Reichelt + + * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies. + +2006-07-28 Lee Millward + + PR c++/27668 + PR c++/27962 + * pt.c (process_template_parm) Store invalid template + parameters as error_mark_node in the paramater list. + (push_inline_template_parms_recursive): Handle invalid + template parameters. + (comp_template_parms): Likewise. + (check_default_tmpl_arg): Likewise. + (coerce_template_template_parms): Likewise. + (mangle_class_name_for_template): Likewise. + (tsubst_template_parms): Likewise. + * error.c (dump_template_argument_list): Likewise. + +2006-07-28 Kazu Hirata + + * cp-tree.h: Fix a comment typo. + +2006-07-24 Volker Reichelt + + PR c++/27572 + * decl.c (grokdeclarator): Return error_mark_node after invalid + typedef. + +2006-07-23 Daniel Jacobowitz + + PR c++/28460 + * decl.c (grokvardecl): Use FROB_CONTEXT. + * pt.c (register_specialization): Likewise. + +2006-07-23 Mark Mitchell + + PR c++/28025 + * cp-tree.h (LOOKUP_HIDDEN): New macro. Reformat comments. + * name-lookup.c (unqualified_namespace_lookup): There is no way to + have a hidden name in non-namespace scopes. + * pt.c (tsubst_friend_class): Look for hidden names. + * decl.c (lookup_and_check_tag): Fix typo in comment. + + * semantics.c (finish_compound_literal): Fix typo in comment. + +2006-07-21 Jason Merrill + + * decl2.c (determine_visibility): Don't propagate visibility from + type to decl. + (constrain_class_visibility): Don't warn in system headers. + Don't warn about pointer fields. + +2006-07-20 Mike Stump + + * decl2.c (determine_visibility_from_class): Don't use hidden + visibility for explicit instantiations. + +2006-07-21 Volker Reichelt + + PR c++/28250 + * pt.c (tsubst_expr): Only apply DECL_TEMPLATE_INSTANTIATED to + valid decls. Cleanup. + + PR c++/28363 + * semantics.c (check_template_template_default_arg): Simplify + error handling. + +2006-07-20 Jason Merrill + + PR c++/28407 + * decl.c (grokvardecl): Set DECL_THIS_STATIC on file-scope + const variables with implicit internal linkage. + * tree.c (decl_linkage): Only return lk_external if it's set. + + PR c++/28409 + * decl2.c (constrain_visibility): Ignore the anonymous namespace + for extern "C" decls. + (VISIBILITY_STATIC): Rename to VISIBILITY_ANON. + + * decl2.c (constrain_visibility): Remove specified and reason + parameters. Don't touch decls that already have explicit visibility. + (determine_visibility): Do copy DECL_VISIBILITY_SPECIFIED from + template. + (determine_visibility_from_class): Reverse sense of + DECL_VISIBILITY_SPECIFIED test for target-specific visibility rules. + (constrain_class_visibility): Only complain about member visibility + if the member type is another class. Don't change visibility of the + current class. + +2006-07-19 Mark Mitchell + + PR c++/28338 + * decl.c (layout_var_decl): Don't call push_local_name here. + (initialize_artificial_var): Assert artificiality. + (cp_finish_decl): Call push_local_name here. + +2006-07-18 Mark Mitchell + + PR c++/28337 + * typeck.c (build_binary_op): Short-circuit pointer arithmetic in + templates. + +2006-07-18 Mark Mitchell + + PR c++/28048 + * semantics.c (check_accessibility_of_qualified_id): Robustify. + + PR c++/28235 + * pt.c (tsubst_decl): Handling substitutions into a static data + member from within the scope of the tempalte itself. + +2006-07-18 Lee Millward + + PR c++/28258 + * method.c (locate_copy): Check for non_reference + returning error_mark_node. + + PR c++/28260 + * decl.c (duplicate_decls): Return error_mark_node + on ambiguous declaration. + +2006-07-18 Steve Ellcey + + PR c++/27495 + * search.c (adjust_result_of_qualified_name_lookup): Change + assert to part of if statement. + +2006-07-17 Steve Ellcey + + PR c++/28291 + * decl.c (reshape_init_class): Return error_mark_node on error. + +2006-07-17 Steve Ellcey + + PR c++/28304 + * decl2.c (check_classfn): Return NULL_TREE on error. + +2006-07-17 Volker Reichelt + + PR c++/28250 + * name-lookup.c (pushdecl_maybe_friend): Return early on + error_mark_node. + * except.c (expand_start_catch_block): Use error_mark_node instead + of NULL_TREE for invalid decls. + * parser.c (cp_parser_exception_declaration): Return error_mark_node + on invalid catch parameter. Simplify. + +2006-07-16 Jakub Jelinek + + PR c++/28370 + * decl2.c (note_vague_linkage_var): Removed. + (finish_static_data_member_decl): Add decl to pending_statics vector + directly. Do it even for non-public decls. + +2006-07-15 Lee Millward + + PR c++/28292 + * decl2.c (acceptable_java_type): Robustify. Use + proper Boolean return type instead of return 1. + (check_java_method): Don't issue error about + type not being an acceptable Java parameter if + it's error_mark_node. + + PR c++/28269 + * parser.c (cp_parser_elaborated_type_specifier): + Return early if an invalid type was detected. + +2006-07-15 Volker Reichelt + + PR c++/28249 + * parser.c (cp_parser_check_decl_spec): New function. + (cp_parser_decl_specifier_seq): Factor out check for repeated + decl-specifiers into cp_parser_check_decl_spec. Use it. + (cp_parser_type_specifier_seq): Use it. + + PR c++/28294 + * semantics.c (finish_offsetof): Use TREE_OPERAND for COMPONENT_REFs + only. + + PR c++/28387 + * decl2.c (cplus_decl_attributes): Check for invalid decls. + +2006-07-14 Volker Reichelt + + PR c++/28343 + * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node. + * decl2.c (grokfield): Likewise. + +2006-07-12 Geoffrey Keating + + * decl2.c (determine_visibility): Don't change visibility of + function locals because of -fvisibility-inlines-hidden. + +2006-07-12 Jason Merrill + + PR c++/28217 + * semantics.c (note_decl_for_pch): Don't premangle templates. + +2006-07-12 Martin Michlmayr + + * typeck.c (string_conv_p): Remove spurious quotation mark in + warning. + +2006-07-07 Lee Millward + Andrew Pinski + + PR c++/27820 + * decl.c (define_label): Return error_mark_node on error. + * semantics.c (finish_label_stmt): Don't call + add_stmt for invalid labels. + +2006-07-06 Jason Merrill + + PR c++/28279 + * decl2.c (finish_static_data_member_decl): Don't assert + TREE_PUBLIC. + +2006-07-05 Jason Merrill + + PR c++/13983 + PR c++/17519 + * class.c (check_field_decls): Check TYPE_PACKED after + stripping array types. + (finish_struct_bits): Don't copy TYPE_SIZE here. + + PR c++/18681 + * friend.c (is_friend): Fix DR 45 implementation. + +2006-07-05 Richard Guenther + Andrew Pinski + + PR c++/27084 + * cp-objcp-common.c (cxx_types_compatible_p): Ignore + top level qualifiers for pointer type comparisons. + +2006-07-01 Jason Merrill + + PR c++/28215 + * method.c (make_thunk): Unset DECL_USE_TEMPLATE and + DECL_TEMPLATE_INFO. + +2006-06-30 Jason Merrill + + PR c++/26577 + * call.c (build_new_method_call): Force evaluation of the + instance pointer, not the object. + +2006-06-30 Kazu Hirata + + * decl2.c: Fix a comment typo. + +2006-06-30 Jason Merrill + + PR c++/18698 + * decl2.c (grokfield): Only try to treat the decl as an access + declaration if the scope is a class. + +2006-06-29 Jason Merrill + + PR c++/26905 + PR c++/26612 + PR c++/27000 + PR c++/26984 + PR c++/19134 + * decl2.c (determine_visibility): Overhaul. + (determine_visibility_from_class): Likewise. + (min_vis_r, type_visibility, constrain_visibility): New fns. + (constrain_visibility_for_template): Likewise. + (constrain_class_visibility): Likewise. + * decl.c (cp_finish_decl): Call determine_visibility for function + decls, too. + * name-lookup.c (pushtag): Call determine_visibility. + * decl.c (duplicate_decls): Don't copy visibility from template to + specialization. + * pt.c (check_explicit_specialization): Likewise. + (lookup_template_class, tsubst_decl): Call determine_visibility. + * class.c (finish_struct_1): Call constrain_class_visibility. + + PR c++/26905 + PR c++/21675 + PR c++/17470 + * parser.c (cp_parser_explicit_instantiation): Pass the attributes + to grokdeclarator. + (cp_parser_type_specifier): Allow 'enum __attribute ((...)) E'. + (cp_parser_enum_specifier): Likewise. + (cp_parser_elaborated_type_specifier): Apply attributes if this + declares only the class. + (cp_parser_class_specifier): Apply leading attributes immediately. + * semantics.c (begin_class_definition): Add attributes parameter, + apply them to the type. + + PR c++/21581 + PR c++/25915 + * tree.c (decl_anon_ns_mem_p): New function. + * cp-tree.h: Declare it. + * decl2.c (determine_visibility): Make anonymous namespace + members static. + (min_vis_r, constrain_visibility): Likewise. + * rtti.c (create_pseudo_type_info): Set TREE_PUBLIC on + pseudo-types. + * decl.c (cxx_init_decl_processing): Set TREE_PUBLIC on + global_namespace. + * name-lookup.c (push_namespace_with_attribs): Don't set TREE_PUBLIC + on anonymous namespaces. + +2006-06-28 Jason Merrill + + PR c++/27424 + * pt.c (convert_template_argument): Pass all template arguments + on to coerce_template_template_parms. + +2006-06-25 Lee Millward + Mark Mitchell + + PR c++/28054 + * decl2.c (grokbitfied): Remove check for grokdeclarator + returning NULL_TREE, instead check for error_mark_node + to indicate failure. + * decl.c (grokdeclarator): Adjust block comment. + +2006-06-25 Lee Millward + + PR c++/28051 + * mangle.c (mangle_conv_op_name_for_type): Check for + invalid types. + * name-lookup.c (push_class_level_binding): Robustify. + (do_class_using_decl): Return early if name is error_mark_node. + +2006-06-23 Steve Ellcey + + PR c++/28114 + * name-lookup.c (pushtag): Return if we have error_mark_node. + +2006-06-23 Steve Ellcey + + PR c++/27019 + * typeck2.c (process_init_constructor_array): Set ce->value on errors. + +2006-06-23 Volker Reichelt + + PR c++/28112 + * parser.c (cp_parser_attribute_list): Skip attributes with invalid + arguments. Fix comment. + + PR c++/11468 + * init.c (build_new_1): Handle error_mark_nodes returned by + build_java_class_ref. + (build_java_class_ref): Do not abort compilation, but return + error_mark_node. Improve error message. Fix indentation. + +2006-06-23 Danny Smith + + PR target/27789 + * decl.c (start_decl): Check that dllimports are not initialized. + +2006-06-22 Lee Millward + + PR c++/27805 + * typeck2.c (build_m_component_ref): Use error_operand_p. + + PR c++/27821 + * decl.c (grokdeclarator): Return error_mark_node on + invalid uses of the scope resolution operator. + +2006-06-22 Volker Reichelt + + PR c++/28111 + * pt.c (determine_specialization): Check for invalid decls. + + PR c++/28110 + * pt.c (unify) : Check for invalid + parameters. + + PR c++/28109 + * rtti.c (get_tinfo_decl_dynamic): Robustify. + +2006-06-20 Volker Reichelt + + PR c++/28052 + * init.c (push_base_cleanups): Skip members with invalid types. + * typeck.c (build_class_member_access_expr): Robustify. + +2006-06-19 Mark Mitchell + + * pt.c (instantiate_template): Fix typo in comment. + +2006-06-19 Richard Guenther + + * parser.c (CP_LEXER_BUFFER_SIZE): Adjust to assure near + power-of-two token vector size. + +2006-06-16 Mark Mitchell + + PR c++/28016 + * decl.c (cp_finsh_decl): Do not emit uninstantiated static data + members. + + PR c++/27979 + * call.c (standard_conversion): Strip cv-qualifiers from bitfield + types. + + PR c++/27884 + * decl.c (have_extern_spec): Remove. + (start_decl): Do not check have_extern_spec. + (start_function): Likewise. + * cp-tree.h (have_extern_spec): Remove. + * parser.c (cp_parser_linkage_specification): Don't set + have_extern_spec. + (cp_parser_init_declarator): Likewise. + (cp_parser_parameter_declaration): Do not treat parameters as + within the scope of an unbraced linkage specification. + +2006-06-15 Mark Mitchell + + PR c++/27689 + * cp-tree.h (CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P): New + macro. + * pt.c (unify): Use it. + + PR c++/27666 + * call.c (build_conditional_expr): Robustify. + + PR c++/27640 + * pt.c (instantiate_template): Set processing_template_decl to + zero while performing substitutions. + +2006-06-14 Mark Mitchell + + PR c++/27665 + * parser.c (cp_parser_unqualified_id): Use constructor_name_p to + identify destructors. + (cp_parser_nested_name_specifier_opt): Remove invalid + optimization. + (cp_parser_template_id): Refine heuristic for determining whether + we are entering a scope. + + PR c++/27648 + * parser.c (cp_parser_declarator): Robustify. + + PR c++/26559 + * pt.c (tsubst_expr): Use finish_omp_atomic. + (value_dependent_expression_p): All CALL_EXPRs are dependent. + * semantics.c (finish_omp_atomic): Rework to use standard + paradigms for handling non-dependent expressions. + +2006-06-14 Gabriel Dos Reis + + * typeck.c (build_modify_expr): Tidy diagnostic message. + +2006-06-14 Mark Mitchell + + PR c++/28018 + * typeck.c (build_modify_expr): Disallow array assignment. + +2006-06-14 Gabriel Dos Reis + + * cp-tree.def: Fix typo. + +2006-06-13 Mark Mitchell + + PR c++/27227 + * decl.c (decls_match): Allow an extern "C" variable declarations + from different namespaces to match. + (duplicate_decls): Disallow redeclaring a variable with a + different linkage specification. + +2006-06-13 Jakub Jelinek + + PR middle-end/27793 + * cp-tree.h (cxx_int_tree_map): New struct. + (struct language_function): Add extern_decl_map field. + * name-lookup.c (pushdecl_maybe_friend): Add x -> t mapping + to cp_function_chain->extern_decl_map hash table instead of + copying over DECL_UID. + * cp-gimplify.c (cxx_int_tree_map_eq, cxx_int_tree_map_hash): New + functions. + (cp_genericize_r): Remap DECL_EXTERN local decls using + cp_function_chain->extern_decl_map hash table. + * decl.c (finish_function): Clear extern_decl_map. + +2006-06-12 Volker Reichelt + + PR c++/27601 + * semantics.c (finish_offsetof): Handle pseudo-destructors. + + PR c++/27933 + * name-lookup.c (lookup_qualified_name): Always return error_mark_node + if lookup fails. + + PR c++/27951 + * decl2.c (finish_anon_union): Return early if build_anon_union_vars + fails. + +2006-06-12 Roger Sayle + + PR c++/21210 + * typeck2.c (build_functional_cast): Use cp_convert to construct + non-aggregate initializers instead of the user-level build_c_cast. + +2006-06-07 Volker Reichelt + + PR c++/27601 + * cp-tree.h (finish_offsetof): Add prototype. + * semantics.c (finish_offsetof): New function. + * parser.c (cp_parser_builtin_offsetof): Call it instead of + fold_offsetof. + * pt.c (tsubst_copy_and_build): Likewise. + +2006-06-06 Mark Mitchell + + PR c++/27177 + * call.c (standard_conversion): Require that the derived type be + complete when performing a derived-to-base conversion. + +2006-06-04 Mark Mitchell + + PR c++/27819 + * decl.c (cp_finish_decl): Process initializers for static data + members with non-dependent initializers, even in templates. + + PR c++/27722 + * decl.c (maybe_deduce_size_from_array_init): If the declaration + is erroneous, give it an erroneous type. + (layout_var_decl): If the type is erroneous, give up. + (check_initializer): Likewise. + + PR c++/27807 + * cp-tree.h (TYPE_OBJ_P): New macro. + (TYPE_PTROB_P): Use it. + (TYPE_REF_OBJ_P): Likewise. + * semantics.c (finish_compound_literal): Do not permit compound + literals of non-object types. + + PR c++/27806 + * typeck.c (original_type): Robustify. + +2006-06-05 Volker Reichelt + + PR c++/27804 + * init.c (constant_value_1): Return decl instead of error_mark_node + for invalid initializers. + +2006-06-01 Andrew Pinski + + PR c++/27592 + * rtti.c (build_dynamic_cast_1): Call c_common_truthvalue_conversion + on operand of the COND_EXPR for the null pointer check. + +2006-06-01 Andrew Pinski + + PR c++/26740 + * typeck.c (build_unary_op): Mark the function as being used. + +2006-06-01 Alexandre Oliva + + PR c++/26660 + * parser.c (cp_parser_initial_pragma): Read one more token for + caller after reading PCH file in. + +2006-05-31 Mark Mitchell + + PR c++/27801 + * call.c (perform_implicit_conversion): Do not actually perform + conversions in templates. + + PR c++/26496 + * call.c (resolve_args): Check for invalid uses of bound + non-static member functions. + * init.c (build_offset_ref): Return error_mark_node for errors. + + PR c++/27385 + * decl.c (reshape_init): Robustify. + (reshape_init_array_1): Likewise. + +2006-05-30 Mark Mitchell + + PR c++/27808 + * parser.c (cp_parser_decl_specifier_seq): Issue errors about + "friend" specifiers that do not appear in class scopes. + + PR c++/27803 + * class.c (check_bitfield_decl): Ensure that all bitfields have + integral type. + +2006-05-29 Kazu Hirata + + * pt.c (convert_nontype_argument): Fix a typo in an error + message. + +2006-05-28 Kazu Hirata + + * decl.c, decl2.c, parser.c: Fix comment typos. Follow + spelling conventions. + 2006-05-24 Mark Mitchell PR c++/20103 @@ -97,7 +1213,7 @@ (cp_parser_pure_specifier): Likewise. PR c++/26068 - * parser.c (cp_parser_set_storage_class): Check for + * parser.c (cp_parser_set_storage_class): Check for invalid uses of storage classes on unbraced linkage specifications. (cp_parser_decl_specifier_seq): Pass keywords, not storage classes, @@ -132,7 +1248,7 @@ (cp_parser_explicit_specialization): Adjust call to cp_parser_single_declaration. (cp_parser_init_declarator): Perform template-parameter access - checks. + checks. (cp_parser_parameter_declaration): Do not defer checks for template parameter default arguments. (cp_parser_template_declaration_after_export): Gather access @@ -318,11 +1434,11 @@ type. (build_modify_expr): Remove spurious conversions. * class.c (layout_class_type): Modify the type of bitfields to - indicate a limited range. + indicate a limited range. * call.c (standard_conversion): Adjust the type of bitfield expressions used in an rvalue context. (build_conditional_expr): Likewise. - + 2006-04-22 Kazu Hirata * decl.c: Fix comment typos. @@ -479,8 +1595,8 @@ 2006-03-22 Jason Merrill - * name-lookup.c (push_namespace_with_attribs): Only apply hidden - visibility to anonymous namespaces if HAVE_GAS_HIDDEN. + * name-lookup.c (push_namespace_with_attribs): Only apply hidden + visibility to anonymous namespaces if HAVE_GAS_HIDDEN. 2006-03-21 Jakub Jelinek @@ -741,7 +1857,7 @@ bad_decls list. (decl_jump_unsafe): Check for error_mark_node types. (check_goto): Don't check cdtor_label. Don't use identify_goto. - * semantics.c (finish_return_stmt): Do check_omp_return before + * semantics.c (finish_return_stmt): Do check_omp_return before converting to cdtor_label goto. 2005-10-21 Richard Henderson @@ -864,7 +1980,8 @@ * cp-tree.h (OMP_ATOMIC_DEPENDENT_P, OMP_ATOMIC_CODE): New. (finish_omp_clauses, finish_omp_for, finish_omp_atomic): New. * parser.c (cp_parser_omp_clause_copyin): Remove. - (cp_parser_omp_all_clauses): Use cp_parser_omp_var_list instead. Call finish_omp_clauses. + (cp_parser_omp_all_clauses): Use cp_parser_omp_var_list instead. + Call finish_omp_clauses. (cp_parser_omp_clause_if): Don't do error checking here. (cp_parser_omp_clause_num_threads): Likewise. (cp_parser_omp_clause_schedule): Likewise. @@ -1186,31 +2303,31 @@ 2006-02-03 Lee Millward - * typeck.c (string_conv_p): Pass appropiate - OPT_Wxxxx values when calling warning(). - (build_array_ref, cxx_mark_addressable): Likewise. - (check_return_expr): Likewise. + * typeck.c (string_conv_p): Pass appropiate + OPT_Wxxxx values when calling warning(). + (build_array_ref, cxx_mark_addressable): Likewise. + (check_return_expr): Likewise. - * init.c (perform_member_init): Likewise. - (sort_mem_initializers, emit_mem_initializers): Likewise. + * init.c (perform_member_init): Likewise. + (sort_mem_initializers, emit_mem_initializers): Likewise. - * class.c (check_field_decls): Likewise. - (warn_about_ambiguous_bases): Likewise. + * class.c (check_field_decls): Likewise. + (warn_about_ambiguous_bases): Likewise. - * decl.c (pop_label, poplevel): Likewise. - (duplicate_decls, grok_op_properties): Likewise. - (start_preparsed_function, finish_function): Likewise. + * decl.c (pop_label, poplevel): Likewise. + (duplicate_decls, grok_op_properties): Likewise. + (start_preparsed_function, finish_function): Likewise. - * name-lookup.c (pushdecl_maybe_friend): Likewise. - (pushdecl_maybe_friend): Likewise. + * name-lookup.c (pushdecl_maybe_friend): Likewise. + (pushdecl_maybe_friend): Likewise. - * parser.c (cp_parser_warn_min_max): Likewise. - (cp_parser_cast_expression): Likewise. + * parser.c (cp_parser_warn_min_max): Likewise. + (cp_parser_cast_expression): Likewise. - * method.c (lazily_declare_fn): Likewise. - * cvt.c (convert_to_void): Likewise. - * mangle.c (finish_mangling): Likewise. - * cp-gimplify.c (gimplify_expr_stmt): Likewise. + * method.c (lazily_declare_fn): Likewise. + * cvt.c (convert_to_void): Likewise. + * mangle.c (finish_mangling): Likewise. + * cp-gimplify.c (gimplify_expr_stmt): Likewise. 2006-02-03 Mark Mitchell @@ -1794,7 +2911,7 @@ 2005-12-06 Aldy Hernandez - PR C++/24138 + PR C++/24138 * decl.c (reshape_init_array_1): Handle max_index of -1. 2005-12-06 Roger Sayle diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 9bb1bb41a40..884beebca85 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -219,80 +219,80 @@ c++.stagefeedback: stagefeedback-start # # .o: .h dependencies. -CXX_TREE_H = $(TREE_H) cp/name-lookup.h cp/cp-tree.h c-common.h \ - cp/cp-tree.def c-common.def \ - function.h varray.h $(SYSTEM_H) coretypes.h $(CONFIG_H) $(TARGET_H) \ - $(GGC_H) \ +CXX_TREE_H = $(TREE_H) cp/name-lookup.h cp/cp-tree.h $(C_COMMON_H) \ + cp/cp-tree.def c-common.def $(FUNCTION_H) $(VARRAY_H) \ + $(SYSTEM_H) coretypes.h $(CONFIG_H) $(TARGET_H) $(GGC_H) \ $(srcdir)/../include/hashtab.h $(srcdir)/../include/splay-tree.h CXX_PRETTY_PRINT_H = cp/cxx-pretty-print.h $(C_PRETTY_PRINT_H) -cp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) flags.h \ - c-pragma.h toplev.h output.h input.h cp/operators.def $(TM_P_H) +cp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) \ + $(C_PRAGMA_H) toplev.h output.h input.h cp/operators.def $(TM_P_H) cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h \ - $(LANGHOOKS_DEF_H) c-common.h gtype-cp.h \ + $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-cp.h \ $(DIAGNOSTIC_H) cp/cp-objcp-common.h -cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) flags.h cp/decl.h \ +cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h \ output.h $(EXPR_H) except.h toplev.h $(HASHTAB_H) $(RTL_H) \ - cp/operators.def $(TM_P_H) tree-inline.h diagnostic.h c-pragma.h \ - debug.h gt-cp-decl.h timevar.h $(TREE_FLOW_H) $(TARGET_H) -cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) flags.h cp/decl.h $(EXPR_H) \ - output.h except.h toplev.h $(RTL_H) c-common.h gt-cp-decl2.h cgraph.h \ - c-pragma.h $(TREE_DUMP_H) intl.h $(TARGET_H) + cp/operators.def $(TM_P_H) $(TREE_INLINE_H) $(DIAGNOSTIC_H) $(C_PRAGMA_H) \ + debug.h gt-cp-decl.h $(TIMEVAR_H) $(TREE_FLOW_H) $(TARGET_H) +cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h $(EXPR_H) \ + output.h except.h toplev.h $(RTL_H) $(C_COMMON_H) gt-cp-decl2.h $(CGRAPH_H) \ + $(C_PRAGMA_H) $(TREE_DUMP_H) intl.h $(TARGET_H) cp/cp-objcp-common.o : cp/cp-objcp-common.c $(CONFIG_H) $(SYSTEM_H) \ - coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) c-common.h toplev.h langhooks.h \ - $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h $(CXX_PRETTY_PRINT_H) \ - cp/cp-objcp-common.h gt-cp-cp-objcp-common.h -cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h output.h \ - $(TM_P_H) diagnostic.h gt-cp-typeck2.h -cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) $(EXPR_H) \ - toplev.h diagnostic.h convert.h c-common.h $(TARGET_H) -cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) \ + coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) $(C_COMMON_H) toplev.h \ + langhooks.h $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h \ + $(CXX_PRETTY_PRINT_H) cp/cp-objcp-common.h gt-cp-cp-objcp-common.h +cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h output.h \ + $(TM_P_H) $(DIAGNOSTIC_H) gt-cp-typeck2.h +cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) \ + toplev.h $(DIAGNOSTIC_H) convert.h $(C_COMMON_H) $(TARGET_H) +cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) \ $(TARGET_H) convert.h $(CGRAPH_H) $(TREE_DUMP_H) -cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) \ - $(EXPR_H) diagnostic.h intl.h gt-cp-call.h convert.h $(TARGET_H) -cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) toplev.h \ +cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) \ + $(EXPR_H) $(DIAGNOSTIC_H) intl.h gt-cp-call.h convert.h $(TARGET_H) +cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) toplev.h \ $(EXPR_H) -cp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) $(EXPR_H) \ +cp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) \ toplev.h except.h $(TARGET_H) cp/method.o: cp/method.c $(CXX_TREE_H) $(TM_H) toplev.h $(RTL_H) $(EXPR_H) \ - $(TM_P_H) $(TARGET_H) diagnostic.h gt-cp-method.h -cp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h flags.h toplev.h \ + $(TM_P_H) $(TARGET_H) $(DIAGNOSTIC_H) gt-cp-method.h +cp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h $(FLAGS_H) toplev.h \ convert.h $(TARGET_H) -cp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) -cp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h $(RTL_H) \ - insn-config.h integrate.h tree-inline.h real.h gt-cp-tree.h $(TARGET_H) \ - debug.h +cp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) +cp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) \ + insn-config.h $(INTEGRATE_H) $(TREE_INLINE_H) $(REAL_H) gt-cp-tree.h \ + $(TARGET_H) debug.h cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(TM_H) -cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) flags.h toplev.h convert.h \ +cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h convert.h \ gt-cp-rtti.h -cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) flags.h $(RTL_H) except.h \ - toplev.h cp/cfns.h $(EXPR_H) libfuncs.h tree-inline.h $(TARGET_H) -cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) flags.h $(EXPR_H) \ +cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) except.h \ + toplev.h cp/cfns.h $(EXPR_H) libfuncs.h $(TREE_INLINE_H) $(TARGET_H) +cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) $(FLAGS_H) $(EXPR_H) \ toplev.h except.h $(TM_P_H) cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h \ - toplev.h $(RTL_H) except.h tree-inline.h pointer-set.h gt-cp-pt.h vecprim.h + toplev.h $(RTL_H) except.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h \ + vecprim.h cp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) \ - flags.h real.h $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H) -cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h diagnostic.h \ + $(FLAGS_H) $(REAL_H) $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H) +cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) \ gt-cp-repo.h cp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) except.h toplev.h \ - flags.h debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \ - tree-inline.h cgraph.h $(TARGET_H) c-common.h -cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) tree-dump.h -cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h integrate.h \ - insn-config.h input.h $(PARAMS_H) debug.h tree-inline.h tree-gimple.h \ + $(FLAGS_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \ + $(TREE_INLINE_H) $(CGRAPH_H) $(TARGET_H) $(C_COMMON_H) +cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) $(TREE_DUMP_H) +cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h $(INTEGRATE_H) \ + insn-config.h input.h $(PARAMS_H) debug.h $(TREE_INLINE_H) $(TREE_GIMPLE_H) \ $(TARGET_H) -cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h real.h gt-cp-mangle.h \ - $(TARGET_H) $(TM_P_H) -cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) diagnostic.h gt-cp-parser.h \ +cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h $(REAL_H) \ + gt-cp-mangle.h $(TARGET_H) $(TM_P_H) +cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) $(DIAGNOSTIC_H) gt-cp-parser.h \ output.h $(TARGET_H) -cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h c-common.h \ +cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h $(C_COMMON_H) \ $(TM_H) coretypes.h pointer-set.h cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - $(TM_H) $(CXX_TREE_H) timevar.h gt-cp-name-lookup.h toplev.h \ - $(DIAGNOSTIC_H) flags.h debug.h + $(TM_H) $(CXX_TREE_H) $(TIMEVAR_H) gt-cp-name-lookup.h toplev.h \ + $(DIAGNOSTIC_H) $(FLAGS_H) debug.h cp/cxx-pretty-print.o: cp/cxx-pretty-print.c $(CXX_PRETTY_PRINT_H) \ $(CONFIG_H) $(SYSTEM_H) $(TM_H) coretypes.h $(CXX_TREE_H) diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 9378a00c35f..7a6646f7200 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -632,7 +632,7 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p, tree bitfield_type; bitfield_type = is_bitfield_expr_with_lowered_type (expr); if (bitfield_type) - from = bitfield_type; + from = strip_top_quals (bitfield_type); } conv = build_conv (ck_rvalue, from, conv); } @@ -727,7 +727,19 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p, that necessitates this conversion is ill-formed. Therefore, we use DERIVED_FROM_P, and do not check access or uniqueness. */ - && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from))) + && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)) + /* If FROM is not yet complete, then we must be parsing + the body of a class. We know what's derived from + what, but we can't actually perform a + derived-to-base conversion. For example, in: + + struct D : public B { + static const int i = sizeof((B*)(D*)0); + }; + + the D*-to-B* conversion is a reinterpret_cast, not a + static_cast. */ + && COMPLETE_TYPE_P (TREE_TYPE (from))) { from = cp_build_qualified_type (TREE_TYPE (to), @@ -2704,6 +2716,8 @@ resolve_args (tree args) error ("invalid use of void expression"); return error_mark_node; } + else if (invalid_nonstatic_memfn_p (arg)) + return error_mark_node; } return args; } @@ -2833,7 +2847,7 @@ build_new_function_call (tree fn, tree args, bool koenig_p) set, upon return, to the allocation function called. */ tree -build_operator_new_call (tree fnname, tree args, +build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size, tree *fn) { @@ -3300,20 +3314,29 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3) || (conv3 && conv3->kind == ck_ambig)) { error ("operands to ?: have different types %qT and %qT", - arg2_type, arg3_type); + arg2_type, arg3_type); result = error_mark_node; } - else if (conv2 && !conv2->bad_p) + else if (conv2 && (!conv2->bad_p || !conv3)) { arg2 = convert_like (conv2, arg2); arg2 = convert_from_reference (arg2); arg2_type = TREE_TYPE (arg2); + /* Even if CONV2 is a valid conversion, the result of the + conversion may be invalid. For example, if ARG3 has type + "volatile X", and X does not have a copy constructor + accepting a "volatile X&", then even if ARG2 can be + converted to X, the conversion will fail. */ + if (error_operand_p (arg2)) + result = error_mark_node; } - else if (conv3 && !conv3->bad_p) + else if (conv3 && (!conv3->bad_p || !conv2)) { arg3 = convert_like (conv3, arg3); arg3 = convert_from_reference (arg3); arg3_type = TREE_TYPE (arg3); + if (error_operand_p (arg3)) + result = error_mark_node; } /* Free all the conversions we allocated. */ @@ -3510,8 +3533,8 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3) if (!result_type) { - error ("operands to ?: have different types %qT and %qT", - arg2_type, arg3_type); + error ("operands to ?: have different types %qT and %qT", + arg2_type, arg3_type); return error_mark_node; } @@ -4521,10 +4544,12 @@ build_x_va_arg (tree expr, tree type) if (! pod_type_p (type)) { + /* Remove reference types so we don't ICE later on. */ + tree type1 = non_reference (type); /* Undefined behavior [expr.call] 5.2.2/7. */ warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; " "call will abort at runtime", type); - expr = convert (build_pointer_type (type), null_node); + expr = convert (build_pointer_type (type1), null_node); expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), call_builtin_trap (), expr); expr = build_indirect_ref (expr, NULL); @@ -4824,6 +4849,12 @@ build_over_call (struct z_candidate *cand, int flags) tree type = TREE_VALUE (parm); conv = convs[i]; + + /* Don't make a copy here if build_call is going to. */ + if (conv->kind == ck_rvalue + && !TREE_ADDRESSABLE (complete_type (type))) + conv = conv->u.next; + val = convert_like_with_context (conv, TREE_VALUE (arg), fn, i - is_method); @@ -5478,9 +5509,9 @@ build_new_method_call (tree instance, tree fns, tree args, none-the-less evaluated. */ if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE && !is_dummy_object (instance_ptr) - && TREE_SIDE_EFFECTS (instance)) + && TREE_SIDE_EFFECTS (instance_ptr)) call = build2 (COMPOUND_EXPR, TREE_TYPE (call), - instance, call); + instance_ptr, call); } } } @@ -6066,7 +6097,7 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn) if (warn) { warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT", - type, type1, type2); + type, type1, type2); warning (OPT_Wsign_promo, " in call to %qD", w->fn); } else @@ -6388,6 +6419,14 @@ perform_implicit_conversion (tree type, tree expr) error ("could not convert %qE to %qT", expr, type); expr = error_mark_node; } + else if (processing_template_decl) + { + /* In a template, we are only concerned about determining the + type of non-dependent expressions, so we do not have to + perform the actual conversion. */ + if (TREE_TYPE (expr) != type) + expr = build_nop (type, expr); + } else expr = convert_like (conv, expr); diff --git a/gcc/cp/cfns.h b/gcc/cp/cfns.h index 5dc71ce46cb..82cdef76466 100644 --- a/gcc/cp/cfns.h +++ b/gcc/cp/cfns.h @@ -57,13 +57,13 @@ hash (register const char *str, register unsigned int len) 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 0, 0, - 1, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 1, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 28, 90, 0, 95, 0, 51, 93, 114, 26, 109, 124, 5, 1, - 6, 13, 37, 128, 3, 0, 0, 49, 38, 0, + 6, 13, 37, 128, 3, 0, 0, 49, 38, 0, 104, 45, 0, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, @@ -84,23 +84,23 @@ hash (register const char *str, register unsigned int len) switch (hval) { default: - hval += asso_values[(unsigned char)str[5]+1]; + hval += asso_values[(unsigned char)str[5]+1]; /*FALLTHROUGH*/ case 5: - hval += asso_values[(unsigned char)str[4]]; + hval += asso_values[(unsigned char)str[4]]; /*FALLTHROUGH*/ case 4: - hval += asso_values[(unsigned char)str[3]]; + hval += asso_values[(unsigned char)str[3]]; /*FALLTHROUGH*/ case 3: - hval += asso_values[(unsigned char)str[2]]; + hval += asso_values[(unsigned char)str[2]]; /*FALLTHROUGH*/ case 2: - hval += asso_values[(unsigned char)str[1]]; + hval += asso_values[(unsigned char)str[1]]; /*FALLTHROUGH*/ case 1: - hval += asso_values[(unsigned char)str[0]]; - break; + hval += asso_values[(unsigned char)str[0]]; + break; } return hval + asso_values[(unsigned char)str[len - 1]]; } @@ -329,17 +329,17 @@ libc_name_p (register const char *str, register unsigned int len) register int key = hash (str, len); if (key <= MAX_HASH_VALUE && key >= 0) - { - register int index = lookup[key]; + { + register int index = lookup[key]; - if (index >= 0) - { - register const char *s = wordlist[index]; + if (index >= 0) + { + register const char *s = wordlist[index]; - if (*str == *s && !strcmp (str + 1, s + 1)) - return s; - } - } + if (*str == *s && !strcmp (str + 1, s + 1)) + return s; + } + } } return 0; } diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f592fe6805a..7361b5a1ba9 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -134,8 +134,6 @@ static int method_name_cmp (const void *, const void *); static int resort_method_name_cmp (const void *, const void *); static void add_implicitly_declared_members (tree, int, int); static tree fixed_type_or_null (tree, int *, int *); -static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t, - bool, tree); static tree build_simple_base_path (tree expr, tree binfo); static tree build_vtbl_ref_1 (tree, tree); static tree build_vtbl_initializer (tree, tree, tree, tree, int *); @@ -1066,7 +1064,7 @@ add_method (tree type, tree method, tree using_decl) } } - /* A class should never have more than one destructor. */ + /* A class should never have more than one destructor. */ if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method)) return false; @@ -1232,7 +1230,7 @@ check_bases (tree t, dtor is handled in finish_struct_1. */ if (!TYPE_POLYMORPHIC_P (basetype)) warning (OPT_Weffc__, - "base class %q#T has a non-virtual destructor", basetype); + "base class %q#T has a non-virtual destructor", basetype); /* If the base class doesn't have copy constructors or assignment operators that take const references, then the @@ -1433,8 +1431,6 @@ finish_struct_bits (tree t) TYPE_VFIELD (variants) = TYPE_VFIELD (t); TYPE_METHODS (variants) = TYPE_METHODS (t); TYPE_FIELDS (variants) = TYPE_FIELDS (t); - TYPE_SIZE (variants) = TYPE_SIZE (t); - TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t); } if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t)) @@ -1547,7 +1543,7 @@ maybe_warn_about_overly_private_class (tree t) if (!has_nonprivate_method) { warning (OPT_Wctor_dtor_privacy, - "all member functions in class %qT are private", t); + "all member functions in class %qT are private", t); return; } } @@ -1559,7 +1555,7 @@ maybe_warn_about_overly_private_class (tree t) if (fn && TREE_PRIVATE (fn)) { warning (OPT_Wctor_dtor_privacy, - "%q#T only defines a private destructor and has no friends", + "%q#T only defines a private destructor and has no friends", t); return; } @@ -1603,7 +1599,7 @@ maybe_warn_about_overly_private_class (tree t) if (nonprivate_ctor == 0) { warning (OPT_Wctor_dtor_privacy, - "%q#T only defines private constructors and has no friends", + "%q#T only defines private constructors and has no friends", t); return; } @@ -2625,21 +2621,25 @@ static void check_bitfield_decl (tree field) { tree type = TREE_TYPE (field); - tree w = NULL_TREE; + tree w; + + /* Extract the declared width of the bitfield, which has been + temporarily stashed in DECL_INITIAL. */ + w = DECL_INITIAL (field); + gcc_assert (w != NULL_TREE); + /* Remove the bit-field width indicator so that the rest of the + compiler does not treat that value as an initializer. */ + DECL_INITIAL (field) = NULL_TREE; /* Detect invalid bit-field type. */ - if (DECL_INITIAL (field) - && ! INTEGRAL_TYPE_P (TREE_TYPE (field))) + if (!INTEGRAL_TYPE_P (type)) { error ("bit-field %q+#D with non-integral type", field); + TREE_TYPE (field) = error_mark_node; w = error_mark_node; } - - /* Detect and ignore out of range field width. */ - if (DECL_INITIAL (field)) + else { - w = DECL_INITIAL (field); - /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */ STRIP_NOPS (w); @@ -2676,10 +2676,6 @@ check_bitfield_decl (tree field) warning (0, "%q+D is too small to hold all values of %q#T", field, type); } - /* Remove the bit-field width indicator so that the rest of the - compiler does not treat that value as an initializer. */ - DECL_INITIAL (field) = NULL_TREE; - if (w != error_mark_node) { DECL_SIZE (field) = convert (bitsizetype, w); @@ -2799,6 +2795,7 @@ check_field_decls (tree t, tree *access_decls, tree *next; bool has_pointers; int any_default_members; + int cant_pack = 0; /* Assume there are no access declarations. */ *access_decls = NULL_TREE; @@ -2815,40 +2812,6 @@ check_field_decls (tree t, tree *access_decls, next = &TREE_CHAIN (x); - if (TREE_CODE (x) == FIELD_DECL) - { - if (TYPE_PACKED (t)) - { - if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x))) - warning - (0, - "ignoring packed attribute on unpacked non-POD field %q+#D", - x); - else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT) - DECL_PACKED (x) = 1; - } - - if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x))) - /* We don't treat zero-width bitfields as making a class - non-empty. */ - ; - else - { - tree element_type; - - /* The class is non-empty. */ - CLASSTYPE_EMPTY_P (t) = 0; - /* The class is not even nearly empty. */ - CLASSTYPE_NEARLY_EMPTY_P (t) = 0; - /* If one of the data members contains an empty class, - so does T. */ - element_type = strip_array_types (type); - if (CLASS_TYPE_P (element_type) - && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type)) - CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1; - } - } - if (TREE_CODE (x) == USING_DECL) { /* Prune the access declaration from the list of fields. */ @@ -2894,10 +2857,6 @@ check_field_decls (tree t, tree *access_decls, } } - /* ``A local class cannot have static data members.'' ARM 9.4 */ - if (current_function_decl && TREE_STATIC (x)) - error ("field %q+D in local class cannot be static", x); - /* Perform error checking that did not get done in grokdeclarator. */ if (TREE_CODE (type) == FUNCTION_TYPE) @@ -2945,6 +2904,37 @@ check_field_decls (tree t, tree *access_decls, type = strip_array_types (type); + if (TYPE_PACKED (t)) + { + if (!pod_type_p (type) && !TYPE_PACKED (type)) + { + warning + (0, + "ignoring packed attribute because of unpacked non-POD field %q+#D", + x); + cant_pack = 1; + } + else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT) + DECL_PACKED (x) = 1; + } + + if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x))) + /* We don't treat zero-width bitfields as making a class + non-empty. */ + ; + else + { + /* The class is non-empty. */ + CLASSTYPE_EMPTY_P (t) = 0; + /* The class is not even nearly empty. */ + CLASSTYPE_NEARLY_EMPTY_P (t) = 0; + /* If one of the data members contains an empty class, + so does T. */ + if (CLASS_TYPE_P (type) + && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type)) + CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1; + } + /* This is used by -Weffc++ (see below). Warn only for pointers to members which might hold dynamic memory. So do not warn for pointers to functions or pointers to members. */ @@ -3029,26 +3019,29 @@ check_field_decls (tree t, tree *access_decls, is needed to free dynamic memory. This seems enough for practical purposes. */ - if (warn_ecpp - && has_pointers - && TYPE_HAS_CONSTRUCTOR (t) - && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) - && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t))) + if (warn_ecpp + && has_pointers + && TYPE_HAS_CONSTRUCTOR (t) + && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) + && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t))) { warning (OPT_Weffc__, "%q#T has pointer data members", t); if (! TYPE_HAS_INIT_REF (t)) { warning (OPT_Weffc__, - " but does not override %<%T(const %T&)%>", t, t); + " but does not override %<%T(const %T&)%>", t, t); if (!TYPE_HAS_ASSIGN_REF (t)) warning (OPT_Weffc__, " or %", t); } else if (! TYPE_HAS_ASSIGN_REF (t)) warning (OPT_Weffc__, - " but does not override %", t); + " but does not override %", t); } + /* If any of the fields couldn't be packed, unset TYPE_PACKED. */ + if (cant_pack) + TYPE_PACKED (t) = 0; /* Check anonymous struct/anonymous union fields. */ finish_struct_anon (t); @@ -3136,7 +3129,7 @@ walk_subobject_offsets (tree type, if (type == error_mark_node) return 0; - + if (!TYPE_P (type)) { if (abi_version_at_least (2)) @@ -3336,7 +3329,7 @@ record_subobject_offsets (tree type, other empty classes might later be placed) or at the end of the class (where other objects might then be placed, so other empty subobjects might later overlap). */ - if (is_data_member + if (is_data_member || !is_empty_class (BINFO_TYPE (type))) max_offset = sizeof_biggest_empty_class; else @@ -3503,7 +3496,7 @@ layout_empty_base (tree binfo, tree eoc, splay_tree offsets) (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo))); else warning (OPT_Wabi, - "offset of empty base %qT may not be ABI-compliant and may" + "offset of empty base %qT may not be ABI-compliant and may" "change in a future version of GCC", BINFO_TYPE (binfo)); } @@ -3616,7 +3609,7 @@ build_base_field (record_layout_info rli, tree binfo, CLASSTYPE_NEARLY_EMPTY_P (t) = 0; else warning (OPT_Wabi, - "class %qT will be considered nearly empty in a " + "class %qT will be considered nearly empty in a " "future version of GCC", t); } } @@ -4361,7 +4354,7 @@ layout_virtual_bases (record_layout_info rli, splay_tree offsets) bitsize_unit_node), BINFO_OFFSET (vbase)))) warning (OPT_Wabi, - "offset of virtual base %qT is not ABI-compliant and " + "offset of virtual base %qT is not ABI-compliant and " "may change in a future version of GCC", basetype); @@ -4691,7 +4684,7 @@ layout_class_type (tree t, tree *virtuals_p) /* Versions of G++ before G++ 3.4 did not reset the DECL_MODE. */ warning (OPT_Wabi, - "the offset of %qD may not be ABI-compliant and may " + "the offset of %qD may not be ABI-compliant and may " "change in a future version of GCC", field); } else @@ -4735,9 +4728,9 @@ layout_class_type (tree t, tree *virtuals_p) /* The middle end uses the type of expressions to determine the possible range of expression values. In order to optimize "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end - must be made aware of the width of "i", via its type. + must be made aware of the width of "i", via its type. - Because C++ does not have integer types of arbitrary width, + Because C++ does not have integer types of arbitrary width, we must (for the purposes of the front end) convert from the type assigned here to the declared type of the bitfield whenever a bitfield expression is used as an rvalue. @@ -4750,8 +4743,8 @@ layout_class_type (tree t, tree *virtuals_p) ftype = TREE_TYPE (field); width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1); if (width != TYPE_PRECISION (ftype)) - TREE_TYPE (field) - = c_build_bitfield_integer_type (width, + TREE_TYPE (field) + = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (ftype)); } @@ -4811,7 +4804,7 @@ layout_class_type (tree t, tree *virtuals_p) TYPE_SIZE_UNIT (base_t) = size_zero_node; if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli))) warning (OPT_Wabi, - "layout of classes derived from empty class %qT " + "layout of classes derived from empty class %qT " "may change in a future version of GCC", t); } @@ -4907,7 +4900,7 @@ layout_class_type (tree t, tree *virtuals_p) splay_tree_delete (empty_base_offsets); if (CLASSTYPE_EMPTY_P (t) - && tree_int_cst_lt (sizeof_biggest_empty_class, + && tree_int_cst_lt (sizeof_biggest_empty_class, TYPE_SIZE_UNIT (t))) sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t); } @@ -5084,6 +5077,9 @@ finish_struct_1 (tree t) DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec; } + /* Complain if one of the field types requires lower visibility. */ + constrain_class_visibility (t); + /* Make the rtl for any new vtables we have created, and unmark the base types we marked. */ finish_vtbls (t); @@ -5440,7 +5436,7 @@ pushclass (tree type) current_class_stack_size *= 2; current_class_stack = XRESIZEVEC (struct class_stack_node, current_class_stack, - current_class_stack_size); + current_class_stack_size); } /* Insert a new entry on the class stack. */ @@ -5678,18 +5674,21 @@ pop_lang_context (void) /* Given an OVERLOAD and a TARGET_TYPE, return the function that matches the TARGET_TYPE. If there is no satisfactory match, return - error_mark_node, and issue an error & warning messages under control - of FLAGS. Permit pointers to member function if FLAGS permits. If - TEMPLATE_ONLY, the name of the overloaded function was a - template-id, and EXPLICIT_TARGS are the explicitly provided - template arguments. */ + error_mark_node, and issue an error & warning messages under + control of FLAGS. Permit pointers to member function if FLAGS + permits. If TEMPLATE_ONLY, the name of the overloaded function was + a template-id, and EXPLICIT_TARGS are the explicitly provided + template arguments. If OVERLOAD is for one or more member + functions, then ACCESS_PATH is the base path used to reference + those member functions. */ static tree resolve_address_of_overloaded_function (tree target_type, tree overload, tsubst_flags_t flags, bool template_only, - tree explicit_targs) + tree explicit_targs, + tree access_path) { /* Here's what the standard says: @@ -5855,7 +5854,7 @@ resolve_address_of_overloaded_function (tree target_type, build_ptrmemfunc_type (build_pointer_type (instantiation_type)); else if (!is_reference) instantiation_type = build_pointer_type (instantiation_type); - if (can_convert_arg (target_type, instantiation_type, instantiation, + if (can_convert_arg (target_type, instantiation_type, instantiation, LOOKUP_NORMAL)) matches = tree_cons (instantiation, fn, matches); } @@ -5866,8 +5865,8 @@ resolve_address_of_overloaded_function (tree target_type, tree match = most_specialized_instantiation (matches); if (match != error_mark_node) - matches = tree_cons (TREE_PURPOSE (match), - NULL_TREE, + matches = tree_cons (TREE_PURPOSE (match), + NULL_TREE, NULL_TREE); } } @@ -5940,7 +5939,17 @@ resolve_address_of_overloaded_function (tree target_type, function used. If this conversion sequence is selected, the function will be marked as used at this point. */ if (!(flags & tf_conv)) - mark_used (fn); + { + mark_used (fn); + /* We could not check access when this expression was originally + created since we did not know at that time to which function + the expression referred. */ + if (DECL_FUNCTION_MEMBER_P (fn)) + { + gcc_assert (access_path); + perform_or_defer_access_check (access_path, fn); + } + } if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type)) return build_unary_op (ADDR_EXPR, fn, 0); @@ -5969,6 +5978,7 @@ tree instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) { tsubst_flags_t flags_in = flags; + tree access_path = NULL_TREE; flags &= ~tf_ptrmem_ok; @@ -5999,7 +6009,10 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) } if (TREE_CODE (rhs) == BASELINK) - rhs = BASELINK_FUNCTIONS (rhs); + { + access_path = BASELINK_ACCESS_BINFO (rhs); + rhs = BASELINK_FUNCTIONS (rhs); + } /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot deduce any type information. */ @@ -6010,6 +6023,13 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) return error_mark_node; } + /* There only a few kinds of expressions that may have a type + dependent on overload resolution. */ + gcc_assert (TREE_CODE (rhs) == ADDR_EXPR + || TREE_CODE (rhs) == COMPONENT_REF + || TREE_CODE (rhs) == COMPOUND_EXPR + || really_overloaded_fn (rhs)); + /* We don't overwrite rhs if it is an overloaded function. Copying it would destroy the tree link. */ if (TREE_CODE (rhs) != OVERLOAD) @@ -6022,32 +6042,6 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) switch (TREE_CODE (rhs)) { - case TYPE_EXPR: - case CONVERT_EXPR: - case SAVE_EXPR: - case CONSTRUCTOR: - gcc_unreachable (); - - case INDIRECT_REF: - case ARRAY_REF: - { - tree new_rhs; - - new_rhs = instantiate_type (build_pointer_type (lhstype), - TREE_OPERAND (rhs, 0), flags); - if (new_rhs == error_mark_node) - return error_mark_node; - - TREE_TYPE (rhs) = lhstype; - TREE_OPERAND (rhs, 0) = new_rhs; - return rhs; - } - - case NOP_EXPR: - rhs = copy_node (TREE_OPERAND (rhs, 0)); - TREE_TYPE (rhs) = unknown_type_node; - return instantiate_type (lhstype, rhs, flags); - case COMPONENT_REF: { tree member = TREE_OPERAND (rhs, 1); @@ -6064,7 +6058,7 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) case OFFSET_REF: rhs = TREE_OPERAND (rhs, 1); if (BASELINK_P (rhs)) - return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in); + return instantiate_type (lhstype, rhs, flags_in); /* This can happen if we are forming a pointer-to-member for a member template. */ @@ -6080,7 +6074,7 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) return resolve_address_of_overloaded_function (lhstype, fns, flags_in, /*template_only=*/true, - args); + args, access_path); } case OVERLOAD: @@ -6088,14 +6082,9 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) return resolve_address_of_overloaded_function (lhstype, rhs, flags_in, /*template_only=*/false, - /*explicit_targs=*/NULL_TREE); - - case CALL_EXPR: - /* This is too hard for now. */ - gcc_unreachable (); + /*explicit_targs=*/NULL_TREE, + access_path); - case PLUS_EXPR: - case MINUS_EXPR: case COMPOUND_EXPR: TREE_OPERAND (rhs, 0) = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags); @@ -6109,86 +6098,6 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags) TREE_TYPE (rhs) = lhstype; return rhs; - case MULT_EXPR: - case TRUNC_DIV_EXPR: - case FLOOR_DIV_EXPR: - case CEIL_DIV_EXPR: - case ROUND_DIV_EXPR: - case RDIV_EXPR: - case TRUNC_MOD_EXPR: - case FLOOR_MOD_EXPR: - case CEIL_MOD_EXPR: - case ROUND_MOD_EXPR: - case FIX_ROUND_EXPR: - case FIX_FLOOR_EXPR: - case FIX_CEIL_EXPR: - case FIX_TRUNC_EXPR: - case FLOAT_EXPR: - case NEGATE_EXPR: - case ABS_EXPR: - case MAX_EXPR: - case MIN_EXPR: - - case BIT_AND_EXPR: - case BIT_IOR_EXPR: - case BIT_XOR_EXPR: - case LSHIFT_EXPR: - case RSHIFT_EXPR: - case LROTATE_EXPR: - case RROTATE_EXPR: - - case PREINCREMENT_EXPR: - case PREDECREMENT_EXPR: - case POSTINCREMENT_EXPR: - case POSTDECREMENT_EXPR: - if (flags & tf_error) - error ("invalid operation on uninstantiated type"); - return error_mark_node; - - case TRUTH_AND_EXPR: - case TRUTH_OR_EXPR: - case TRUTH_XOR_EXPR: - case LT_EXPR: - case LE_EXPR: - case GT_EXPR: - case GE_EXPR: - case EQ_EXPR: - case NE_EXPR: - case TRUTH_ANDIF_EXPR: - case TRUTH_ORIF_EXPR: - case TRUTH_NOT_EXPR: - if (flags & tf_error) - error ("not enough type information"); - return error_mark_node; - - case COND_EXPR: - if (type_unknown_p (TREE_OPERAND (rhs, 0))) - { - if (flags & tf_error) - error ("not enough type information"); - return error_mark_node; - } - TREE_OPERAND (rhs, 1) - = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags); - if (TREE_OPERAND (rhs, 1) == error_mark_node) - return error_mark_node; - TREE_OPERAND (rhs, 2) - = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags); - if (TREE_OPERAND (rhs, 2) == error_mark_node) - return error_mark_node; - - TREE_TYPE (rhs) = lhstype; - return rhs; - - case MODIFY_EXPR: - TREE_OPERAND (rhs, 1) - = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags); - if (TREE_OPERAND (rhs, 1) == error_mark_node) - return error_mark_node; - - TREE_TYPE (rhs) = lhstype; - return rhs; - case ADDR_EXPR: { if (PTRMEM_OK_P (rhs)) @@ -6231,7 +6140,7 @@ get_vfield_name (tree type) type = BINFO_TYPE (binfo); buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT) - + TYPE_NAME_LENGTH (type) + 2); + + TYPE_NAME_LENGTH (type) + 2); sprintf (buf, VFIELD_NAME_FORMAT, IDENTIFIER_POINTER (constructor_name (type))); return get_identifier (buf); diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 4746103e618..bdb2edf2f41 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -320,7 +320,7 @@ gimplify_switch_stmt (tree *stmt_p) /* Hook into the middle of gimplifying an OMP_FOR node. This is required in order to properly gimplify CONTINUE statements. Here we merely manage the continue stack; the rest of the job is performed by the - regular gimplifier. */ + regular gimplifier. */ static enum gimplify_status cp_gimplify_omp_for (tree *expr_p) @@ -391,18 +391,15 @@ cp_gimplify_init_expr (tree *expr_p, tree *pre_p, tree *post_p) tree to = TREE_OPERAND (*expr_p, 0); tree sub; - /* If we are initializing something from a TARGET_EXPR, strip the - TARGET_EXPR and initialize it directly. */ /* What about code that pulls out the temp and uses it elsewhere? I think that such code never uses the TARGET_EXPR as an initializer. If I'm wrong, we'll abort because the temp won't have any RTL. In that case, I guess we'll need to replace references somehow. */ if (TREE_CODE (from) == TARGET_EXPR) from = TARGET_EXPR_INITIAL (from); - if (TREE_CODE (from) == CLEANUP_POINT_EXPR) - from = TREE_OPERAND (from, 0); - /* Look through any COMPOUND_EXPRs. */ + /* Look through any COMPOUND_EXPRs, since build_compound_expr pushes them + inside the TARGET_EXPR. */ sub = expr_last (from); /* If we are initializing from an AGGR_INIT_EXPR, drop the INIT_EXPR and @@ -601,6 +598,24 @@ is_invisiref_parm (tree t) && DECL_BY_REFERENCE (t)); } +/* Return true if the uid in both int tree maps are equal. */ + +int +cxx_int_tree_map_eq (const void *va, const void *vb) +{ + const struct cxx_int_tree_map *a = (const struct cxx_int_tree_map *) va; + const struct cxx_int_tree_map *b = (const struct cxx_int_tree_map *) vb; + return (a->uid == b->uid); +} + +/* Hash a UID in a cxx_int_tree_map. */ + +unsigned int +cxx_int_tree_map_hash (const void *item) +{ + return ((const struct cxx_int_tree_map *)item)->uid; +} + /* Perform any pre-gimplification lowering of C++ front end trees to GENERIC. */ @@ -613,13 +628,32 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) if (is_invisiref_parm (stmt) /* Don't dereference parms in a thunk, pass the references through. */ && !(DECL_THUNK_P (current_function_decl) - && TREE_CODE (stmt) == PARM_DECL)) + && TREE_CODE (stmt) == PARM_DECL)) { *stmt_p = convert_from_reference (stmt); *walk_subtrees = 0; return NULL; } + /* Map block scope extern declarations to visible declarations with the + same name and type in outer scopes if any. */ + if (cp_function_chain->extern_decl_map + && (TREE_CODE (stmt) == FUNCTION_DECL || TREE_CODE (stmt) == VAR_DECL) + && DECL_EXTERNAL (stmt)) + { + struct cxx_int_tree_map *h, in; + in.uid = DECL_UID (stmt); + h = (struct cxx_int_tree_map *) + htab_find_with_hash (cp_function_chain->extern_decl_map, + &in, in.uid); + if (h) + { + *stmt_p = h->to; + *walk_subtrees = 0; + return NULL; + } + } + /* Other than invisiref parms, don't walk the same tree twice. */ if (pointer_set_contains (p_set, stmt)) { diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 38e2e5acd82..60503278930 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -125,11 +125,11 @@ cp_init_ts (void) tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1; tree_contains_struct[USING_DECL][TS_DECL_WRTL] = 1; tree_contains_struct[TEMPLATE_DECL][TS_DECL_WRTL] = 1; - + tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; tree_contains_struct[USING_DECL][TS_DECL_COMMON] = 1; tree_contains_struct[TEMPLATE_DECL][TS_DECL_COMMON] = 1; - + tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; tree_contains_struct[USING_DECL][TS_DECL_MINIMAL] = 1; tree_contains_struct[TEMPLATE_DECL][TS_DECL_MINIMAL] = 1; diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index 8dae00f742a..f40be969695 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -185,6 +185,21 @@ cxx_types_compatible_p (tree x, tree y) return 0; } +tree +cxx_staticp (tree arg) +{ + switch (TREE_CODE (arg)) + { + case BASELINK: + return staticp (BASELINK_FUNCTIONS (arg)); + + default: + break; + } + + return NULL_TREE; +} + /* Stubs to keep c-opts.c happy. */ void push_file_scope (void) @@ -203,19 +218,19 @@ has_c_linkage (tree decl) return DECL_EXTERN_C_P (decl); } -static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map))) +static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map))) htab_t shadowed_var_for_decl; /* Lookup a shadowed var for FROM, and return it if we find one. */ -tree +tree decl_shadowed_for_var_lookup (tree from) { struct tree_map *h, in; in.from = from; - h = (struct tree_map *) htab_find_with_hash (shadowed_var_for_decl, &in, - htab_hash_pointer (from)); + h = (struct tree_map *) htab_find_with_hash (shadowed_var_for_decl, &in, + htab_hash_pointer (from)); if (h) return h->to; return NULL_TREE; diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h index 65eb6aedfa3..f420d93b191 100644 --- a/gcc/cp/cp-objcp-common.h +++ b/gcc/cp/cp-objcp-common.h @@ -59,6 +59,8 @@ extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t, #define LANG_HOOKS_EXPAND_DECL c_expand_decl #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE c_common_parse_file +#undef LANG_HOOKS_STATICP +#define LANG_HOOKS_STATICP cxx_staticp #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index 6b04818e0c3..55ef21ef790 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -168,7 +168,7 @@ DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0) BOUND_TEMPLATE_TEMPLATE_PARM. */ /* Index into a template parameter list. This parameter must be a type. - The type.value field will be a TEMPLATE_PARM_INDEX. */ + The type.values field will be a TEMPLATE_PARM_INDEX. */ DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0) /* A type designated by `typename T::t'. TYPE_CONTEXT is `T', diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 486a90da1eb..8f88976e787 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -55,6 +55,7 @@ struct diagnostic_context; OMP_ATOMIC_DEPENDENT_P (in OMP_ATOMIC) OMP_FOR_GIMPLIFYING_P (in OMP_FOR) BASELINK_QUALIFIED_P (in BASELINK) + TARGET_EXPR_IMPLICIT_P (in TARGET_EXPR) 1: IDENTIFIER_VIRTUAL_P (in IDENTIFIER_NODE) TI_PENDING_TEMPLATE_FLAG. TEMPLATE_PARMS_FOR_INLINE. @@ -179,7 +180,7 @@ struct diagnostic_context; #define NON_THUNK_FUNCTION_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ if (TREE_CODE (__t) != FUNCTION_DECL && \ - TREE_CODE (__t) != TEMPLATE_DECL && __t->decl_common.lang_specific \ + TREE_CODE (__t) != TEMPLATE_DECL && __t->decl_common.lang_specific \ && __t->decl_common.lang_specific->decl_flags.thunk_p) \ tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0); \ __t; }) @@ -187,7 +188,7 @@ struct diagnostic_context; ({ const tree __t = (NODE); \ if (TREE_CODE (__t) != FUNCTION_DECL || !__t->decl_common.lang_specific \ || !__t->decl_common.lang_specific->decl_flags.thunk_p) \ - tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0); \ + tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0); \ __t; }) #else #define NON_THUNK_FUNCTION_CHECK(NODE) (NODE) @@ -721,6 +722,15 @@ struct saved_scope GTY(()) extern GTY(()) struct saved_scope *scope_chain; +struct cxx_int_tree_map GTY(()) +{ + unsigned int uid; + tree to; +}; + +extern unsigned int cxx_int_tree_map_hash (const void *); +extern int cxx_int_tree_map_eq (const void *, const void *); + /* Global state pertinent to the current function. */ struct language_function GTY(()) @@ -747,6 +757,7 @@ struct language_function GTY(()) htab_t GTY((param_is(struct named_label_entry))) x_named_labels; struct cp_binding_level *bindings; VEC(tree,gc) *x_local_names; + htab_t GTY((param_is (struct cxx_int_tree_map))) extern_decl_map; }; /* The current C++-specific per-function global variables. */ @@ -1107,14 +1118,6 @@ struct lang_type GTY(()) #endif /* ENABLE_TREE_CHECKING */ -/* Indicates whether or not (and how) a template was expanded for this class. - 0=no information yet/non-template class - 1=implicit template instantiation - 2=explicit template specialization - 3=explicit template instantiation */ -#define CLASSTYPE_USE_TEMPLATE(NODE) \ - (LANG_TYPE_CLASS_CHECK (NODE)->use_template) - /* Fields used for storing information before the class is defined. After the class is defined, these fields hold other information. */ @@ -2086,15 +2089,15 @@ extern void decl_shadowed_for_var_insert (tree, tree); (DECL_LANG_SPECIFIC (DECL)->decl_flags.deferred) /* If non-NULL for a VAR_DECL, FUNCTION_DECL, TYPE_DECL or - TEMPLATE_DECL, the entity is a template specialization. In that - case, DECL_TEMPLATE_INFO is a TREE_LIST, whose TREE_PURPOSE is the - TEMPLATE_DECL of which this entity is a specialization. The TREE_ - TREE_VALUE is the template arguments used to specialize the - template. - - In general, DECL_TEMPLATE_INFO is non-NULL only if - DECL_USE_TEMPLATE is nonzero. However, for friends, we sometimes - have DECL_TEMPLATE_INFO even when DECL_USE_TEMPLATE is zero. + TEMPLATE_DECL, the entity is either a template specialization (if + DECL_USE_TEMPLATE is non-zero) or the abstract instance of the + template itself. + + In either case, DECL_TEMPLATE_INFO is a TREE_LIST, whose + TREE_PURPOSE is the TEMPLATE_DECL of which this entity is a + specialization or abstract instance. The TREE_VALUE is the + template arguments used to specialize the template. + Consider: template struct S { friend void f(T) {} }; @@ -2102,7 +2105,8 @@ extern void decl_shadowed_for_var_insert (tree, tree); In this case, S::f is, from the point of view of the compiler, an instantiation of a template -- but, from the point of view of the language, each instantiation of S results in a wholly unrelated - global function f. */ + global function f. In this case, DECL_TEMPLATE_INFO for S::f + will be non-NULL, but DECL_USE_TEMPLATE will be zero. */ #define DECL_TEMPLATE_INFO(NODE) \ (DECL_LANG_SPECIFIC (VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK (NODE)) \ ->decl_flags.u.template_info) @@ -2230,6 +2234,16 @@ extern void decl_shadowed_for_var_insert (tree, tree); are always the full set of arguments required to instantiate this declaration from the most general template specialized here. */ #define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE)) + +/* The TEMPLATE_DECL associated with NODE, a class type. Even if NODE + will be generated from a partial specialization, the TEMPLATE_DECL + referred to here will be the original template. For example, + given: + + template struct S {}; + template struct S {}; + + the CLASSTPYE_TI_TEMPLATE for S will be S, not the S. */ #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE)) #define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE)) @@ -2242,7 +2256,7 @@ extern void decl_shadowed_for_var_insert (tree, tree); (CLASSTYPE_TI_TEMPLATE ((TYPE))))) \ : (TYPE)) -/* Like DECL_TI_TEMPLATE, but for an ENUMERAL_, RECORD_, or UNION_TYPE. */ +/* Like CLASS_TI_TEMPLATE, but also works for ENUMERAL_TYPEs. */ #define TYPE_TI_TEMPLATE(NODE) \ (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE))) @@ -2515,30 +2529,43 @@ extern void decl_shadowed_for_var_insert (tree, tree); /* Returns true if NODE is a pointer. */ #define TYPE_PTR_P(NODE) \ (TREE_CODE (NODE) == POINTER_TYPE) + +/* Returns true if NODE is an object type: + + [basic.types] + + An object type is a (possibly cv-qualified) type that is not a + function type, not a reference type, and not a void type. + + Keep these checks in ascending order, for speed. */ +#define TYPE_OBJ_P(NODE) \ + (TREE_CODE (NODE) != REFERENCE_TYPE \ + && TREE_CODE (NODE) != VOID_TYPE \ + && TREE_CODE (NODE) != FUNCTION_TYPE \ + && TREE_CODE (NODE) != METHOD_TYPE) + /* Returns true if NODE is a pointer to an object. Keep these checks in ascending tree code order. */ #define TYPE_PTROB_P(NODE) \ - (TYPE_PTR_P (NODE) \ - && !(TREE_CODE (TREE_TYPE (NODE)) == VOID_TYPE \ - || TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE \ - || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)) + (TYPE_PTR_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE))) + /* Returns true if NODE is a reference to an object. Keep these checks in ascending tree code order. */ #define TYPE_REF_OBJ_P(NODE) \ - (TREE_CODE (NODE) == REFERENCE_TYPE \ - && !(TREE_CODE (TREE_TYPE (NODE)) == VOID_TYPE \ - || TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE \ - || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)) + (TREE_CODE (NODE) == REFERENCE_TYPE && TYPE_OBJ_P (TREE_TYPE (NODE))) + /* Returns true if NODE is a pointer to an object, or a pointer to void. Keep these checks in ascending tree code order. */ #define TYPE_PTROBV_P(NODE) \ (TYPE_PTR_P (NODE) \ && !(TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE \ || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)) + /* Returns true if NODE is a pointer to function. */ #define TYPE_PTRFN_P(NODE) \ (TREE_CODE (NODE) == POINTER_TYPE \ && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE) + /* Returns true if NODE is a reference to function. */ #define TYPE_REFFN_P(NODE) \ (TREE_CODE (NODE) == REFERENCE_TYPE \ @@ -2822,17 +2849,38 @@ extern void decl_shadowed_for_var_insert (tree, tree); /* Returns nonzero if NODE is a primary template. */ #define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == (NODE)) -/* Indicates whether or not (and how) a template was expanded for this - FUNCTION_DECL or VAR_DECL. - 0=normal declaration, e.g. int min (int, int); - 1=implicit template instantiation - 2=explicit template specialization, e.g. int min (int, int); - 3=explicit template instantiation, e.g. template int min (int, int); +/* Non-zero iff NODE is a specialization of a template. The value + indicates the type of specializations: - If DECL_USE_TEMPLATE is nonzero, then DECL_TEMPLATE_INFO will also + 1=implicit instantiation + 2=explicit specialization, e.g. int min (int, int); + 3=explicit instantiation, e.g. template int min (int, int); + + Note that NODE will be marked as a specialization even if the + template it is instantiating is not a primary template. For + example, given: + + template struct O { + void f(); + struct I {}; + }; + + both O::f and O::I will be marked as instantiations. + + If DECL_USE_TEMPLATE is non-zero, then DECL_TEMPLATE_INFO will also be non-NULL. */ #define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC (NODE)->decl_flags.use_template) +/* Like DECL_USE_TEMPLATE, but for class types. */ +#define CLASSTYPE_USE_TEMPLATE(NODE) \ + (LANG_TYPE_CLASS_CHECK (NODE)->use_template) + +/* True if NODE is a specialization of a primary template. */ +#define CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P(NODE) \ + (CLASS_TYPE_P (NODE) \ + && CLASSTYPE_USE_TEMPLATE (NODE) \ + && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (arg))) + #define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1) #define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \ (CLASSTYPE_USE_TEMPLATE (NODE) & 1) @@ -2979,12 +3027,12 @@ extern void decl_shadowed_for_var_insert (tree, tree); #define OMP_FOR_GIMPLIFYING_P(NODE) \ (TREE_LANG_FLAG_0 (OMP_FOR_CHECK (NODE))) -/* A language-specific token attached to the OpenMP data clauses to +/* A language-specific token attached to the OpenMP data clauses to hold code (or code fragments) related to ctors, dtors, and op=. See semantics.c for details. */ #define CP_OMP_CLAUSE_INFO(NODE) \ TREE_TYPE (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_PRIVATE, \ - OMP_CLAUSE_COPYPRIVATE)) + OMP_CLAUSE_COPYPRIVATE)) /* These macros provide convenient access to the various _STMT nodes created when parsing template declarations. */ @@ -3044,6 +3092,11 @@ extern void decl_shadowed_for_var_insert (tree, tree); expression statement. */ #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0) +/* True if this TARGET_EXPR was created by build_cplus_new, and so we can + discard it if it isn't useful. */ +#define TARGET_EXPR_IMPLICIT_P(NODE) \ + TREE_LANG_FLAG_0 (TARGET_EXPR_CHECK (NODE)) + /* An enumeration of the kind of tags that C++ accepts. */ enum tag_types { none_type = 0, /* Not a tag type. */ @@ -3333,46 +3386,51 @@ extern GTY(()) tree static_dtors; enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG }; -/* These are uses as bits in flags passed to build_new_method_call - to control its error reporting behavior. - - LOOKUP_PROTECT means flag access violations. - LOOKUP_COMPLAIN mean complain if no suitable member function - matching the arguments is found. - LOOKUP_NORMAL is just a combination of these two. - LOOKUP_NONVIRTUAL means make a direct call to the member function found - LOOKUP_ONLYCONVERTING means that non-conversion constructors are not tried. - DIRECT_BIND means that if a temporary is created, it should be created so - that it lives as long as the current variable bindings; otherwise it - only lives until the end of the complete-expression. It also forces - direct-initialization in cases where other parts of the compiler have - already generated a temporary, such as reference initialization and the - catch parameter. - LOOKUP_NO_CONVERSION means that user-defined conversions are not - permitted. Built-in conversions are permitted. - LOOKUP_DESTRUCTOR means explicit call to destructor. - LOOKUP_NO_TEMP_BIND means temporaries will not be bound to references. - - These are used in global lookup to support elaborated types and - qualifiers. - - LOOKUP_PREFER_TYPES means not to accept objects, and possibly namespaces. - LOOKUP_PREFER_NAMESPACES means not to accept objects, and possibly types. - LOOKUP_PREFER_BOTH means class-or-namespace-name. */ - +/* These are uses as bits in flags passed to various functions to + control their behavior. Despite the LOOKUP_ prefix, many of these + do not control name lookup. ??? Functions using these flags should + probably be modified to accept explicit boolean flags for the + behaviors relevant to them. */ +/* Check for access violations. */ #define LOOKUP_PROTECT (1 << 0) +/* Complain if no suitable member function matching the arguments is + found. */ #define LOOKUP_COMPLAIN (1 << 1) #define LOOKUP_NORMAL (LOOKUP_PROTECT | LOOKUP_COMPLAIN) +/* Even if the function found by lookup is a virtual function, it + should be called directly. */ #define LOOKUP_NONVIRTUAL (1 << 2) +/* Non-converting (i.e., "explicit") constructors are not tried. */ #define LOOKUP_ONLYCONVERTING (1 << 3) +/* If a temporary is created, it should be created so that it lives + as long as the current variable bindings; otherwise it only lives + until the end of the complete-expression. It also forces + direct-initialization in cases where other parts of the compiler + have already generated a temporary, such as reference + initialization and the catch parameter. */ #define DIRECT_BIND (1 << 4) +/* User-defined conversions are not permitted. (Built-in conversions + are permitted.) */ #define LOOKUP_NO_CONVERSION (1 << 5) +/* The user has explicitly called a destructor. (Therefore, we do + not need to check that the object is non-NULL before calling the + destructor.) */ #define LOOKUP_DESTRUCTOR (1 << 6) +/* Do not permit references to bind to temporaries. */ #define LOOKUP_NO_TEMP_BIND (1 << 7) +/* Do not accept objects, and possibly namespaces. */ #define LOOKUP_PREFER_TYPES (1 << 8) +/* Do not accept objects, and possibly types. */ #define LOOKUP_PREFER_NAMESPACES (1 << 9) +/* Accept types or namespaces. */ #define LOOKUP_PREFER_BOTH (LOOKUP_PREFER_TYPES | LOOKUP_PREFER_NAMESPACES) +/* We are checking that a constructor can be called -- but we do not + actually plan to call it. */ #define LOOKUP_CONSTRUCTOR_CALLABLE (1 << 10) +/* Return friend declarations and un-declared builtin functions. + (Normally, these entities are registered in the symbol table, but + not found by lookup.) */ +#define LOOKUP_HIDDEN (LOOKUP_CONSTRUCTOR_CALLABLE << 1) #define LOOKUP_NAMESPACES_ONLY(F) \ (((F) & LOOKUP_PREFER_NAMESPACES) && !((F) & LOOKUP_PREFER_TYPES)) @@ -3780,8 +3838,8 @@ extern tree cp_fold_obj_type_ref (tree, tree); extern void set_linkage_according_to_type (tree, tree); extern void determine_key_method (tree); extern void check_for_override (tree, tree); -extern void push_class_stack (void); -extern void pop_class_stack (void); +extern void push_class_stack (void); +extern void pop_class_stack (void); /* in cvt.c */ extern tree convert_to_reference (tree, tree, int, int, tree); @@ -3842,12 +3900,12 @@ extern int cp_complete_array_type (tree *, tree, bool); extern tree build_ptrmemfunc_type (tree); extern tree build_ptrmem_type (tree, tree); /* the grokdeclarator prototype is in decl.h */ -extern tree build_this_parm (tree, cp_cv_quals); +extern tree build_this_parm (tree, cp_cv_quals); extern int copy_fn_p (tree); extern tree get_scope_of_declarator (const cp_declarator *); extern void grok_special_member_properties (tree); extern int grok_ctor_properties (tree, tree); -extern void grok_op_properties (tree, bool); +extern bool grok_op_properties (tree, bool); extern tree xref_tag (enum tag_types, tree, tag_scope, bool); extern tree xref_tag_from_type (tree, tree, tag_scope); extern void xref_basetypes (tree, tree); @@ -3896,11 +3954,9 @@ extern void initialize_artificial_var (tree, tree); extern tree check_var_type (tree, tree); extern tree reshape_init (tree, tree); -extern bool have_extern_spec; - /* in decl2.c */ extern bool check_java_method (tree); -extern tree build_memfn_type (tree, tree, cp_cv_quals); +extern tree build_memfn_type (tree, tree, cp_cv_quals); extern void maybe_retrofit_in_chrg (tree); extern void maybe_make_one_only (tree); extern void grokclassfn (tree, tree, @@ -3920,6 +3976,8 @@ extern tree coerce_new_type (tree); extern tree coerce_delete_type (tree); extern void comdat_linkage (tree); extern void determine_visibility (tree); +extern void constrain_class_visibility (tree); +extern void update_member_visibility (tree); extern void import_export_decl (tree); extern tree build_cleanup (tree); extern tree build_offset_ref_call_from_tree (tree, tree); @@ -3934,7 +3992,7 @@ extern tree cxx_callgraph_analyze_expr (tree *, int *, tree); extern void mark_needed (tree); extern bool decl_needed_p (tree); extern void note_vague_linkage_fn (tree); -extern tree build_artificial_parm (tree, tree); +extern tree build_artificial_parm (tree, tree); /* in error.c */ extern void init_error (void); @@ -4059,13 +4117,13 @@ extern int template_class_depth (tree); extern int is_specialization_of (tree, tree); extern bool is_specialization_of_friend (tree, tree); extern int comp_template_args (tree, tree); -extern void maybe_process_partial_specialization (tree); +extern tree maybe_process_partial_specialization (tree); extern tree most_specialized_instantiation (tree); extern void print_candidates (tree); extern void instantiate_pending_templates (int); extern tree tsubst_default_argument (tree, tree, tree); extern tree tsubst_copy_and_build (tree, tree, tsubst_flags_t, - tree, bool); + tree, bool, bool); extern tree most_general_template (tree); extern tree get_mostly_instantiated_function_type (tree); extern int problematic_instantiation_changed (void); @@ -4152,7 +4210,7 @@ extern void stop_deferring_access_checks (void); extern void pop_deferring_access_checks (void); extern tree get_deferred_access_checks (void); extern void pop_to_parent_deferring_access_checks (void); -extern void perform_access_checks (tree); +extern void perform_access_checks (tree); extern void perform_deferred_access_checks (void); extern void perform_or_defer_access_check (tree, tree); extern int stmts_are_full_exprs_p (void); @@ -4226,19 +4284,20 @@ extern tree finish_fname (tree); extern void finish_translation_unit (void); extern tree finish_template_type_parm (tree, tree); extern tree finish_template_template_parm (tree, tree); -extern tree begin_class_definition (tree); +extern tree begin_class_definition (tree, tree); extern void finish_template_decl (tree); extern tree finish_template_type (tree, tree, int); extern tree finish_base_specifier (tree, tree, bool); extern void finish_member_declaration (tree); extern void qualified_name_lookup_error (tree, tree, tree); -extern void check_template_keyword (tree); +extern void check_template_keyword (tree); extern tree finish_id_expression (tree, tree, tree, cp_id_kind *, bool, bool, bool *, bool, bool, bool, bool, const char **); extern tree finish_typeof (tree); +extern tree finish_offsetof (tree); extern void finish_decl_cleanup (tree, tree); extern void finish_eh_cleanup (tree); extern void expand_body (tree); @@ -4268,6 +4327,7 @@ extern tree cxx_omp_clause_copy_ctor (tree, tree, tree); extern tree cxx_omp_clause_assign_op (tree, tree, tree); extern tree cxx_omp_clause_dtor (tree, tree); extern bool cxx_omp_privatize_by_reference (tree); +extern tree baselink_for_fns (tree); /* in tree.c */ extern void lang_check_failed (const char *, int, @@ -4294,7 +4354,7 @@ extern tree get_target_expr (tree); extern tree build_cplus_array_type (tree, tree); extern tree hash_tree_cons (tree, tree, tree); extern tree hash_tree_chain (tree, tree); -extern tree build_qualified_name (tree, tree, tree, bool); +extern tree build_qualified_name (tree, tree, tree, bool); extern int is_overloaded_fn (tree); extern tree get_first_fn (tree); extern tree ovl_cons (tree, tree); @@ -4307,10 +4367,11 @@ extern tree array_type_nelts_top (tree); extern tree break_out_target_exprs (tree); extern tree get_type_decl (tree); extern tree decl_namespace_context (tree); +extern bool decl_anon_ns_mem_p (tree); extern tree lvalue_type (tree); extern tree error_type (tree); extern int varargs_function_p (tree); -extern int really_overloaded_fn (tree); +extern bool really_overloaded_fn (tree); extern bool cp_tree_equal (tree, tree); extern tree no_linkage_check (tree, bool); extern void debug_binfo (tree); @@ -4334,10 +4395,11 @@ extern int cp_cannot_inline_tree_fn (tree*); extern tree cp_add_pending_fn_decls (void*,tree); extern int cp_auto_var_in_fn_p (tree,tree); extern tree fold_if_not_in_template (tree); -extern tree rvalue (tree); +extern tree rvalue (tree); extern tree convert_bitfield_to_declared_type (tree); -extern tree cp_save_expr (tree); - +extern tree cp_save_expr (tree); +extern bool cast_valid_in_integral_constant_expression_p (tree); + /* in typeck.c */ extern int string_conv_p (tree, tree, int); extern tree cp_truthvalue_conversion (tree); @@ -4355,7 +4417,7 @@ extern tree cxx_sizeof_or_alignof_expr (tree, enum tree_code); extern tree cxx_sizeof_or_alignof_type (tree, enum tree_code, bool); #define cxx_sizeof_nowarn(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, false) extern tree inline_conversion (tree); -extern tree is_bitfield_expr_with_lowered_type (tree); +extern tree is_bitfield_expr_with_lowered_type (tree); extern tree decay_conversion (tree); extern tree build_class_member_access_expr (tree, tree, tree, bool); extern tree finish_class_member_access_expr (tree, tree, bool); @@ -4380,7 +4442,7 @@ extern tree build_modify_expr (tree, enum tree_code, tree); extern tree convert_for_initialization (tree, tree, tree, int, const char *, tree, int); extern int comp_ptr_ttypes (tree, tree); -extern bool comp_ptr_ttypes_const (tree, tree); +extern bool comp_ptr_ttypes_const (tree, tree); extern int ptr_reasonably_similar (tree, tree); extern tree build_ptrmemfunc (tree, tree, int, bool); extern int cp_type_quals (tree); @@ -4457,6 +4519,7 @@ extern bool cp_var_mod_type_p (tree, tree); extern void cxx_initialize_diagnostics (struct diagnostic_context *); extern int cxx_types_compatible_p (tree, tree); extern void init_shadowed_var_for_decl (void); +extern tree cxx_staticp (tree); /* in cp-gimplify.c */ extern int cp_gimplify_expr (tree *, tree *, tree *); diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 902372ea191..6f61218b232 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -864,14 +864,17 @@ convert_to_void (tree expr, const char *implicit) int is_volatile = TYPE_VOLATILE (type); int is_complete = COMPLETE_TYPE_P (complete_type (type)); + /* Can't load the value if we don't know the type. */ if (is_volatile && !is_complete) warning (0, "object of incomplete type %qT will not be accessed in %s", type, implicit ? implicit : "void context"); - else if (is_reference && is_volatile) + /* Don't load the value if this is an implicit dereference, or if + the type needs to be handled by ctors/dtors. */ + else if (is_volatile && (is_reference || TREE_ADDRESSABLE (type))) warning (0, "object of type %qT will not be accessed in %s", TREE_TYPE (TREE_OPERAND (expr, 0)), implicit ? implicit : "void context"); - if (is_reference || !is_volatile || !is_complete) + if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type)) expr = TREE_OPERAND (expr, 0); break; @@ -889,6 +892,25 @@ convert_to_void (tree expr, const char *implicit) break; } + case TARGET_EXPR: + /* Don't bother with the temporary object returned from a function if + we don't use it and don't need to destroy it. We'll still + allocate space for it in expand_call or declare_return_variable, + but we don't need to track it through all the tree phases. */ + if (TARGET_EXPR_IMPLICIT_P (expr) + && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (expr))) + { + tree init = TARGET_EXPR_INITIAL (expr); + if (TREE_CODE (init) == AGGR_INIT_EXPR + && !AGGR_INIT_VIA_CTOR_P (init)) + { + tree fn = TREE_OPERAND (init, 0); + expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), + fn, TREE_OPERAND (init, 1), NULL_TREE); + } + } + break; + default:; } { @@ -905,9 +927,13 @@ convert_to_void (tree expr, const char *implicit) expr = void_zero_node; } else if (implicit && probe == expr && is_overloaded_fn (probe)) - /* Only warn when there is no &. */ - warning (0, "%s is a reference, not call, to function %qE", - implicit, expr); + { + /* Only warn when there is no &. */ + warning (0, "%s is a reference, not call, to function %qE", + implicit, expr); + if (TREE_CODE (expr) == COMPONENT_REF) + expr = TREE_OPERAND (expr, 0); + } } if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr))) @@ -957,6 +983,8 @@ convert_to_void (tree expr, const char *implicit) } expr = build1 (CONVERT_EXPR, void_type_node, expr); } + if (! TREE_SIDE_EFFECTS (expr)) + expr = void_zero_node; return expr; } diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 43fbe2b3bfa..5ceca61a4cb 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -300,12 +300,12 @@ pp_cxx_constant (cxx_pretty_printer *pp, tree t) { case STRING_CST: { - const bool in_parens = PAREN_STRING_LITERAL_P (t); - if (in_parens) - pp_cxx_left_paren (pp); - pp_c_constant (pp_c_base (pp), t); - if (in_parens) - pp_cxx_right_paren (pp); + const bool in_parens = PAREN_STRING_LITERAL_P (t); + if (in_parens) + pp_cxx_left_paren (pp); + pp_c_constant (pp_c_base (pp), t); + if (in_parens) + pp_cxx_right_paren (pp); } break; @@ -1757,7 +1757,7 @@ pp_cxx_namespace_alias_definition (cxx_pretty_printer *pp, tree t) pp_equal (pp); pp_cxx_whitespace (pp); if (DECL_CONTEXT (DECL_NAMESPACE_ALIAS (t))) - pp_cxx_nested_name_specifier (pp, + pp_cxx_nested_name_specifier (pp, DECL_CONTEXT (DECL_NAMESPACE_ALIAS (t))); pp_cxx_qualified_id (pp, DECL_NAMESPACE_ALIAS (t)); pp_cxx_semicolon (pp); @@ -1803,8 +1803,7 @@ pp_cxx_template_parameter_list (cxx_pretty_printer *pp, tree t) typename identifier(opt) typename identifier(opt) = type-id template < template-parameter-list > class identifier(opt) - template < template-parameter-list > class identifier(opt) = template-name -*/ + template < template-parameter-list > class identifier(opt) = template-name */ static void pp_cxx_template_parameter (cxx_pretty_printer *pp, tree t) diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index fef09edb694..46c1d33874c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -141,9 +141,7 @@ static tree next_initializable_field (tree); Used by RTTI tree type_info_type_node, tinfo_decl_id, tinfo_decl_type; - tree tinfo_var_id; - -*/ + tree tinfo_var_id; */ tree cp_global_trees[CPTI_MAX]; @@ -204,7 +202,7 @@ struct named_label_entry GTY(()) This is initially set to the binding level in which the label is defined, but is modified as scopes are closed. */ struct cp_binding_level *binding_level; - /* The head of the names list that was current when the label was + /* The head of the names list that was current when the label was defined, or the inner scope popped. These are the decls that will be skipped when jumping to the label. */ tree names_in_scope; @@ -217,7 +215,7 @@ struct named_label_entry GTY(()) /* The following bits are set after the label is defined, and are updated as scopes are popped. They indicate that a backward jump - to the label will illegally enter a scope of the given flavour. */ + to the label will illegally enter a scope of the given flavor. */ bool in_try_scope; bool in_catch_scope; bool in_omp_scope; @@ -242,10 +240,6 @@ enum deprecated_states { static enum deprecated_states deprecated_state = DEPRECATED_NORMAL; -/* True if a declaration with an `extern' linkage specifier is being - processed. */ -bool have_extern_spec; - /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the @@ -1001,7 +995,13 @@ decls_match (tree newdecl, tree olddecl) /* Need to check scope for variable declaration (VAR_DECL). For typedef (TYPE_DECL), scope is ignored. */ if (TREE_CODE (newdecl) == VAR_DECL - && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)) + && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl) + /* [dcl.link] + Two declarations for an object with C language linkage + with the same name (ignoring the namespace that qualify + it) that appear in different namespace scopes refer to + the same object. */ + && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl))) return 0; if (TREE_TYPE (newdecl) == error_mark_node) @@ -1087,7 +1087,7 @@ check_redeclaration_exception_specification (tree new_decl, if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl)) && ! DECL_IS_BUILTIN (old_decl) && flag_exceptions - && !comp_except_specs (new_exceptions, old_exceptions, + && !comp_except_specs (new_exceptions, old_exceptions, /*exact=*/true)) { error ("declaration of %qF throws different exceptions", new_decl); @@ -1124,7 +1124,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) about the same declaration, so just pretend the types match here. */ if (TREE_TYPE (newdecl) == error_mark_node || TREE_TYPE (olddecl) == error_mark_node) - types_match = 1; + return error_mark_node; if (DECL_P (olddecl) && TREE_CODE (newdecl) == FUNCTION_DECL @@ -1371,6 +1371,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) { error ("new declaration %q#D", newdecl); error ("ambiguates old declaration %q+#D", olddecl); + return error_mark_node; } else return NULL_TREE; @@ -1455,14 +1456,42 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) warning (0, "prototype for %q+#D", newdecl); warning (0, "%Jfollows non-prototype definition here", olddecl); } - else if (TREE_CODE (olddecl) == FUNCTION_DECL + else if ((TREE_CODE (olddecl) == FUNCTION_DECL + || TREE_CODE (olddecl) == VAR_DECL) && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)) { - /* extern "C" int foo (); - int foo () { bar (); } - is OK. */ + /* [dcl.link] + If two declarations of the same function or object + specify different linkage-specifications ..., the program + is ill-formed.... Except for functions with C++ linkage, + a function declaration without a linkage specification + shall not precede the first linkage specification for + that function. A function can be declared without a + linkage specification after an explicit linkage + specification has been seen; the linkage explicitly + specified in the earlier declaration is not affected by + such a function declaration. + + DR 563 raises the question why the restrictions on + functions should not also apply to objects. Older + versions of G++ silently ignore the linkage-specification + for this example: + + namespace N { + extern int i; + extern "C" int i; + } + + which is clearly wrong. Therefore, we now treat objects + like functions. */ if (current_lang_depth () == 0) - SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); + { + /* There is no explicit linkage-specification, so we use + the linkage from the previous declaration. */ + if (!DECL_LANG_SPECIFIC (newdecl)) + retrofit_lang_decl (newdecl); + SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); + } else { error ("previous declaration of %q+#D with %qL linkage", @@ -1638,7 +1667,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) { DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl); DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl); - DECL_NONTRIVIALLY_INITIALIZED_P (newdecl) + DECL_NONTRIVIALLY_INITIALIZED_P (newdecl) |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl); DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl) |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl); @@ -1662,6 +1691,9 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) check_redeclaration_exception_specification (newdecl, olddecl); TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype; + if (TREE_CODE (newdecl) == FUNCTION_DECL) + check_default_args (newdecl); + /* Lay the type out, unless already done. */ if (! same_type_p (newtype, oldtype) && TREE_TYPE (newdecl) != error_mark_node @@ -1829,6 +1861,11 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) SET_DECL_TEMPLATE_SPECIALIZATION (olddecl); + /* Don't propagate visibility from the template to the + specialization here. We'll do that in determine_visibility if + appropriate. */ + DECL_VISIBILITY_SPECIFIED (olddecl) = 0; + /* [temp.expl.spec/14] We don't inline explicit specialization just because the primary template says so. */ } @@ -1914,7 +1951,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); DECL_VISIBILITY_SPECIFIED (newdecl) = 1; } - /* Init priority used to be merged from newdecl to olddecl by the memcpy, + /* Init priority used to be merged from newdecl to olddecl by the memcpy, so keep this behavior. */ if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl)) { @@ -1976,7 +2013,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) memcpy ((char *) olddecl + sizeof (struct tree_common), (char *) newdecl + sizeof (struct tree_common), sizeof (struct tree_decl_common) - sizeof (struct tree_common)); - switch (TREE_CODE (olddecl)) + switch (TREE_CODE (olddecl)) { case LABEL_DECL: case VAR_DECL: @@ -2282,7 +2319,7 @@ identify_goto (tree decl, const location_t *locus) /* Check that a single previously seen jump to a newly defined label is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for the jump context; NAMES are the names in scope in LEVEL at the jump - context; LOCUS is the source position of the jump or 0. Returns + context; LOCUS is the source position of the jump or 0. Returns true if all is well. */ static bool @@ -2510,7 +2547,10 @@ define_label (location_t location, tree name) pedwarn ("label named wchar_t"); if (DECL_INITIAL (decl) != NULL_TREE) - error ("duplicate label %qD", decl); + { + error ("duplicate label %qD", decl); + POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node); + } else { struct named_label_use_entry *use; @@ -2739,6 +2779,8 @@ make_typename_type (tree context, tree name, enum tag_types tag_type, tsubst_flags_t complain) { tree fullname; + tree t; + bool want_template; if (name == error_mark_node || context == NULL_TREE @@ -2776,73 +2818,60 @@ make_typename_type (tree context, tree name, enum tag_types tag_type, gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE); gcc_assert (TYPE_P (context)); - if (!dependent_type_p (context) - || currently_open_class (context)) - { - if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR) - { - tree tmpl = NULL_TREE; - if (IS_AGGR_TYPE (context)) - tmpl = lookup_field (context, name, 0, false); - if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl)) - { - if (complain & tf_error) - error ("no class template named %q#T in %q#T", - name, context); - return error_mark_node; - } - - if (complain & tf_error) - perform_or_defer_access_check (TYPE_BINFO (context), tmpl); - - return lookup_template_class (tmpl, - TREE_OPERAND (fullname, 1), - NULL_TREE, context, - /*entering_scope=*/0, - tf_warning_or_error | tf_user); - } - else - { - tree t; - - if (!IS_AGGR_TYPE (context)) - { - if (complain & tf_error) - error ("no type named %q#T in %q#T", name, context); - return error_mark_node; - } - - t = lookup_field (context, name, 0, true); - if (t) - { - if (TREE_CODE (t) != TYPE_DECL) - { - if (complain & tf_error) - error ("no type named %q#T in %q#T", name, context); - return error_mark_node; - } - - if (complain & tf_error) - perform_or_defer_access_check (TYPE_BINFO (context), t); - - if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl)) - t = TREE_TYPE (t); + /* When the CONTEXT is a dependent type, NAME could refer to a + dependent base class of CONTEXT. So we cannot peek inside it, + even if CONTEXT is a currently open scope. */ + if (dependent_type_p (context)) + return build_typename_type (context, name, fullname, tag_type); - return t; - } - } + if (!IS_AGGR_TYPE (context)) + { + if (complain & tf_error) + error ("%q#T is not a class", context); + return error_mark_node; } - - /* If the CONTEXT is not a template type, then either the field is - there now or its never going to be. */ - if (!dependent_type_p (context)) + + want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR; + + /* We should only set WANT_TYPE when we're a nested typename type. + Then we can give better diagnostics if we find a non-type. */ + t = lookup_field (context, name, 0, /*want_type=*/true); + if (!t) { if (complain & tf_error) - error ("no type named %q#T in %q#T", name, context); + error (want_template ? "no class template named %q#T in %q#T" + : "no type named %q#T in %q#T", name, context); return error_mark_node; } - - return build_typename_type (context, name, fullname, tag_type); + + if (want_template && !DECL_CLASS_TEMPLATE_P (t)) + { + if (complain & tf_error) + error ("% names %q#T, which is not a class template", + context, name, t); + return error_mark_node; + } + if (!want_template && TREE_CODE (t) != TYPE_DECL) + { + if (complain & tf_error) + error ("% names %q#T, which is not a type", + context, name, t); + return error_mark_node; + } + + if (complain & tf_error) + perform_or_defer_access_check (TYPE_BINFO (context), t); + + if (want_template) + return lookup_template_class (t, TREE_OPERAND (fullname, 1), + NULL_TREE, context, + /*entering_scope=*/0, + tf_warning_or_error | tf_user); + + if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl)) + t = TREE_TYPE (t); + + return t; } /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name @@ -3091,6 +3120,7 @@ cxx_init_decl_processing (void) gcc_assert (global_namespace == NULL_TREE); global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name, void_type_node); + TREE_PUBLIC (global_namespace) = 1; begin_scope (sk_namespace, global_namespace); current_lang_name = NULL_TREE; @@ -3320,7 +3350,7 @@ cp_make_fname_decl (tree id, int type_dep) while (b->level_chain->kind != sk_function_parms) b = b->level_chain; pushdecl_with_scope (decl, b, /*is_friend=*/false); - cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE, + cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE, LOOKUP_ONLYCONVERTING); } else @@ -3782,13 +3812,6 @@ start_decl (const cp_declarator *declarator, *pushed_scope_p = NULL_TREE; - /* This should only be done once on the top most decl. */ - if (have_extern_spec) - { - declspecs->storage_class = sc_extern; - have_extern_spec = false; - } - /* An object declared as __attribute__((deprecated)) suppresses warnings of uses of other deprecated items. */ if (lookup_attribute ("deprecated", attributes)) @@ -3826,8 +3849,7 @@ start_decl (const cp_declarator *declarator, { case TYPE_DECL: error ("typedef %qD is initialized (use __typeof__ instead)", decl); - initialized = 0; - break; + return error_mark_node; case FUNCTION_DECL: error ("function %q#D is initialized like a variable", decl); @@ -3852,6 +3874,16 @@ start_decl (const cp_declarator *declarator, /* Set attributes here so if duplicate decl, will have proper attributes. */ cplus_decl_attributes (&decl, attributes, 0); + /* Dllimported symbols cannot be defined. Static data members (which + can be initialized in-class and dllimported) go through grokfield, + not here, so we don't need to exclude those decls when checking for + a definition. */ + if (initialized && DECL_DLLIMPORT_P (decl)) + { + error ("definition of %q#D is marked %", decl); + DECL_DLLIMPORT_P (decl) = 0; + } + /* If #pragma weak was used, mark the decl weak now. */ maybe_apply_pragma_weak (decl); @@ -4111,12 +4143,17 @@ maybe_deduce_size_from_array_init (tree decl, tree init) do_default); if (failure == 1) - error ("initializer fails to determine size of %qD", decl); - - if (failure == 2) + { + error ("initializer fails to determine size of %qD", decl); + TREE_TYPE (decl) = error_mark_node; + } + else if (failure == 2) { if (do_default) - error ("array size missing in %qD", decl); + { + error ("array size missing in %qD", decl); + TREE_TYPE (decl) = error_mark_node; + } /* If a `static' var's size isn't known, make it extern as well as static, so it does not get allocated. If it's not `static', then don't mark it extern; finish_incomplete_decl @@ -4124,9 +4161,11 @@ maybe_deduce_size_from_array_init (tree decl, tree init) else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl)) DECL_EXTERNAL (decl) = 1; } - - if (failure == 3) - error ("zero-size array %qD", decl); + else if (failure == 3) + { + error ("zero-size array %qD", decl); + TREE_TYPE (decl) = error_mark_node; + } cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl); @@ -4140,7 +4179,11 @@ maybe_deduce_size_from_array_init (tree decl, tree init) static void layout_var_decl (tree decl) { - tree type = TREE_TYPE (decl); + tree type; + + type = TREE_TYPE (decl); + if (type == error_mark_node) + return; /* If we haven't already layed out this declaration, do so now. Note that we must not call complete type for an external object @@ -4186,12 +4229,6 @@ layout_var_decl (tree decl) else error ("storage size of %qD isn't constant", decl); } - - if (TREE_STATIC (decl) - && !DECL_ARTIFICIAL (decl) - && current_function_decl - && DECL_CONTEXT (decl) == current_function_decl) - push_local_name (decl); } /* If a local static variable is declared in an inline function, or if @@ -4352,6 +4389,8 @@ reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d) } elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false); + if (elt_init == error_mark_node) + return error_mark_node; CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init); } @@ -4392,7 +4431,7 @@ reshape_init_vector (tree type, reshape_iter *d) { error ("invalid type %qT as initializer for a vector of type %qT", TREE_TYPE (d->cur->value), type); - value = error_mark_node; + value = error_mark_node; } ++d->cur; return value; @@ -4448,12 +4487,15 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p) { if (pedantic) pedwarn ("ISO C++ does not allow designated initializers"); - + field = lookup_field_1 (type, d->cur->index, /*want_type=*/false); if (!field || TREE_CODE (field) != FIELD_DECL) - error ("%qT has no non-static data member named %qD", type, - d->cur->index); + { + error ("%qT has no non-static data member named %qD", type, + d->cur->index); + return error_mark_node; + } } /* If we processed all the member of the class, we are done. */ @@ -4504,7 +4546,7 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p) error ("braces around scalar initializer for type %qT", type); init = error_mark_node; } - + d->cur++; return init; } @@ -4537,7 +4579,7 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p) tree str_init = init; /* Strip one level of braces if and only if they enclose a single - element (as allowed by [dcl.init.string]). */ + element (as allowed by [dcl.init.string]). */ if (!first_initializer_p && TREE_CODE (str_init) == CONSTRUCTOR && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1) @@ -4545,9 +4587,9 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p) str_init = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (str_init), 0)->value; } - + /* If it's a string literal, then it's the initializer for the array - as a whole. Otherwise, continue with normal initialization for + as a whole. Otherwise, continue with normal initialization for array types (one value per array element). */ if (TREE_CODE (str_init) == STRING_CST) { @@ -4630,6 +4672,8 @@ reshape_init (tree type, tree init) d.end = d.cur + VEC_length (constructor_elt, v); new_init = reshape_init_r (type, &d, true); + if (new_init == error_mark_node) + return error_mark_node; /* Make sure all the element of the constructor were used. Otherwise, issue an error about exceeding initializers. */ @@ -4677,6 +4721,14 @@ check_initializer (tree decl, tree init, int flags, tree *cleanup) TREE_TYPE (decl) = error_mark_node; init = NULL_TREE; } + else if (!CP_AGGREGATE_TYPE_P (type) + && init && BRACE_ENCLOSED_INITIALIZER_P (init) + && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) != 1) + { + error ("scalar object %qD requires one element in initializer", decl); + TREE_TYPE (decl) = error_mark_node; + init = NULL_TREE; + } if (TREE_CODE (decl) == CONST_DECL) { @@ -4692,7 +4744,7 @@ check_initializer (tree decl, tree init, int flags, tree *cleanup) else if (init) { /* Do not reshape constructors of vectors (they don't need to be - reshaped. */ + reshaped. */ if (TREE_CODE (init) == CONSTRUCTOR && !COMPOUND_LITERAL_P (init) && !TREE_TYPE (init)) /* ptrmemfunc */ @@ -4710,6 +4762,8 @@ check_initializer (tree decl, tree init, int flags, tree *cleanup) array size from the initializer. */ maybe_deduce_size_from_array_init (decl, init); type = TREE_TYPE (decl); + if (type == error_mark_node) + return NULL_TREE; if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type)) { @@ -4854,7 +4908,7 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) { /* Fool with the linkage of static consts according to #pragma interface. */ - struct c_fileinfo *finfo = get_fileinfo (lbasename (filename)); + struct c_fileinfo *finfo = get_fileinfo (filename); if (!finfo->interface_unknown && !TREE_PUBLIC (decl)) { TREE_PUBLIC (decl) = 1; @@ -4942,6 +4996,7 @@ initialize_local_var (tree decl, tree init) void initialize_artificial_var (tree decl, tree init) { + gcc_assert (DECL_ARTIFICIAL (decl)); if (TREE_CODE (init) == TREE_LIST) init = build_constructor_from_list (NULL_TREE, init); gcc_assert (TREE_CODE (init) == CONSTRUCTOR); @@ -4965,7 +5020,7 @@ initialize_artificial_var (tree decl, tree init) if the (init) syntax was used. */ void -cp_finish_decl (tree decl, tree init, bool init_const_expr_p, +cp_finish_decl (tree decl, tree init, bool init_const_expr_p, tree asmspec_tree, int flags) { tree type; @@ -4973,6 +5028,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, const char *asmspec = NULL; int was_readonly = 0; bool var_definition_p = false; + int saved_processing_template_decl; if (decl == error_mark_node) return; @@ -4984,61 +5040,65 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, } gcc_assert (TREE_CODE (decl) != RESULT_DECL); + /* Parameters are handled by store_parm_decls, not cp_finish_decl. */ + gcc_assert (TREE_CODE (decl) != PARM_DECL); + + type = TREE_TYPE (decl); + if (type == error_mark_node) + return; /* Assume no cleanup is required. */ cleanup = NULL_TREE; + saved_processing_template_decl = processing_template_decl; /* If a name was specified, get the string. */ if (global_scope_p (current_binding_level)) asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree); - if (asmspec_tree) + if (asmspec_tree && asmspec_tree != error_mark_node) asmspec = TREE_STRING_POINTER (asmspec_tree); - if (init && TREE_CODE (init) == NAMESPACE_DECL) - { - error ("cannot initialize %qD to namespace %qD", decl, init); - init = NULL_TREE; - } - if (current_class_type && CP_DECL_CONTEXT (decl) == current_class_type && TYPE_BEING_DEFINED (current_class_type) && (DECL_INITIAL (decl) || init)) DECL_INITIALIZED_IN_CLASS_P (decl) = 1; - type = TREE_TYPE (decl); - - if (type == error_mark_node) - goto finish_end; - if (processing_template_decl) { + bool type_dependent_p; + /* Add this declaration to the statement-tree. */ if (at_function_scope_p ()) add_decl_expr (decl); - if (init) + type_dependent_p = dependent_type_p (type); + + if (init && init_const_expr_p) { - DECL_INITIAL (decl) = init; - if (init_const_expr_p) - { - DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1; - if (DECL_INTEGRAL_CONSTANT_VAR_P (decl)) - TREE_CONSTANT (decl) = 1; - } + DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1; + if (DECL_INTEGRAL_CONSTANT_VAR_P (decl)) + TREE_CONSTANT (decl) = 1; } - if (TREE_CODE (decl) == VAR_DECL - && !DECL_PRETTY_FUNCTION_P (decl) - && !dependent_type_p (TREE_TYPE (decl))) - maybe_deduce_size_from_array_init (decl, init); + if (!init + || !DECL_CLASS_SCOPE_P (decl) + || !DECL_INTEGRAL_CONSTANT_VAR_P (decl) + || type_dependent_p + || value_dependent_expression_p (init)) + { + if (init) + DECL_INITIAL (decl) = init; + if (TREE_CODE (decl) == VAR_DECL + && !DECL_PRETTY_FUNCTION_P (decl) + && !type_dependent_p) + maybe_deduce_size_from_array_init (decl, init); + goto finish_end; + } - goto finish_end; + init = fold_non_dependent_expr (init); + processing_template_decl = 0; } - /* Parameters are handled by store_parm_decls, not cp_finish_decl. */ - gcc_assert (TREE_CODE (decl) != PARM_DECL); - /* Take care of TYPE_DECLs up front. */ if (TREE_CODE (decl) == TYPE_DECL) { @@ -5078,6 +5138,17 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl))) error ("%qD cannot be thread-local because it has non-POD type %qT", decl, TREE_TYPE (decl)); + /* If this is a local variable that will need a mangled name, + register it now. We must do this before processing the + initializer for the variable, since the initialization might + require a guard variable, and since the mangled name of the + guard variable will depend on the mangled name of this + variable. */ + if (!processing_template_decl + && DECL_FUNCTION_SCOPE_P (decl) + && TREE_STATIC (decl) + && !DECL_ARTIFICIAL (decl)) + push_local_name (decl); /* Convert the initializer to the type of DECL, if we have not already initialized DECL. */ if (!DECL_INITIALIZED_P (decl) @@ -5113,7 +5184,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, occurs. Therefore, in: struct S { static const int i = 7 / 0; }; - + we issue an error at this point. It would probably be better to forbid division by zero in integral constant expressions. */ @@ -5164,16 +5235,25 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, if (at_function_scope_p ()) add_decl_expr (decl); - if (TREE_CODE (decl) == VAR_DECL) - layout_var_decl (decl); - - /* Output the assembler code and/or RTL code for variables and functions, - unless the type is an undefined structure or union. - If not, it will get done when the type is completed. */ - if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL) + /* Let the middle end know about variables and functions -- but not + static data members in uninstantiated class templates. */ + if (!saved_processing_template_decl + && (TREE_CODE (decl) == VAR_DECL + || TREE_CODE (decl) == FUNCTION_DECL)) { if (TREE_CODE (decl) == VAR_DECL) - maybe_commonize_var (decl); + { + layout_var_decl (decl); + maybe_commonize_var (decl); + if (DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) + && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl)) + { + /* This is a const variable with implicit 'static'. Set + DECL_THIS_STATIC so we can tell it from variables that are + !TREE_PUBLIC because of the anonymous namespace. */ + DECL_THIS_STATIC (decl) = 1; + } + } make_rtl_for_nonlocal_decl (decl, init, asmspec); @@ -5186,6 +5266,9 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, else abstract_virtuals_error (decl, type); + /* This needs to happen after the linkage is set. */ + determine_visibility (decl); + if (TREE_CODE (decl) == FUNCTION_DECL || TREE_TYPE (decl) == error_mark_node) /* No initialization required. */ @@ -5209,10 +5292,6 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, initialize_local_var (decl, init); } - /* The variable is being defined, so determine its visibility. - This needs to happen after the linkage is set. */ - determine_visibility (decl); - /* If a variable is defined, and then a subsequent definition with external linkage is encountered, we will get here twice for the same variable. We want to avoid @@ -5232,6 +5311,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, push_cleanup (decl, cleanup, false); finish_end: + processing_template_decl = saved_processing_template_decl; if (was_readonly) TREE_READONLY (decl) = 1; @@ -5785,7 +5865,7 @@ check_class_member_definition_namespace (tree decl) /* Build a PARM_DECL for the "this" parameter. TYPE is the METHOD_TYPE for a non-static member function; QUALS are the cv-qualifiers that apply to the function. */ - + tree build_this_parm (tree type, cp_cv_quals quals) { @@ -5802,7 +5882,7 @@ build_this_parm (tree type, cp_cv_quals quals) parm = build_artificial_parm (this_identifier, qual_type); cp_apply_type_quals_to_decl (this_quals, parm); return parm; -} +} /* CTYPE is class type, or null if non-class. TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE @@ -5970,7 +6050,7 @@ grokfndecl (tree ctype, tree newtype; error ("%<::main%> must return %"); newtype = build_function_type (integer_type_node, - oldtypeargs); + oldtypeargs); TREE_TYPE (decl) = newtype; } inlinep = 0; @@ -6037,8 +6117,9 @@ grokfndecl (tree ctype, quals = TYPE_UNQUALIFIED; } - if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))) - grok_op_properties (decl, /*complain=*/true); + if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)) + && !grok_op_properties (decl, /*complain=*/true)) + return NULL_TREE; if (ctype && decl_function_context (decl)) DECL_NO_STATIC_CHAIN (decl) = 1; @@ -6208,7 +6289,7 @@ grokvardecl (tree type, if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL) set_decl_namespace (decl, explicit_scope, 0); else - DECL_CONTEXT (decl) = scope; + DECL_CONTEXT (decl) = FROB_CONTEXT (scope); if (declspecs->storage_class == sc_extern) { @@ -6757,7 +6838,11 @@ check_var_type (tree identifier, tree type) void S::f() { ... } when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE - should not be `S'. */ + should not be `S'. + + Returns a DECL (if a declarator is present), a TYPE (if there is no + declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an + error occurs. */ tree grokdeclarator (const cp_declarator *declarator, @@ -6864,7 +6949,27 @@ grokdeclarator (const cp_declarator *declarator, break; if (qualifying_scope) { - if (TYPE_P (qualifying_scope)) + if (at_function_scope_p ()) + { + /* [dcl.meaning] + + A declarator-id shall not be qualified except + for ... + + None of the cases are permitted in block + scope. */ + if (qualifying_scope == global_namespace) + error ("invalid use of qualified-name %<::%D%>", + decl); + else if (TYPE_P (qualifying_scope)) + error ("invalid use of qualified-name %<%T::%D%>", + qualifying_scope, decl); + else + error ("invalid use of qualified-name %<%D::%D%>", + qualifying_scope, decl); + return error_mark_node; + } + else if (TYPE_P (qualifying_scope)) { ctype = qualifying_scope; if (innermost_code != cdk_function @@ -6909,8 +7014,6 @@ grokdeclarator (const cp_declarator *declarator, tree fns = TREE_OPERAND (decl, 0); dname = fns; - if (TREE_CODE (dname) == COMPONENT_REF) - dname = TREE_OPERAND (dname, 1); if (TREE_CODE (dname) != IDENTIFIER_NODE) { gcc_assert (is_overloaded_fn (dname)); @@ -6967,7 +7070,7 @@ grokdeclarator (const cp_declarator *declarator, } /* [dcl.fct.edf] - + The declarator in a function-definition shall have the form D1 ( parameter-declaration-clause) ... */ if (funcdef_flag && innermost_code != cdk_function) @@ -7113,6 +7216,8 @@ grokdeclarator (const cp_declarator *declarator, error ("% invalid for %qs", name); else if (short_p && TREE_CODE (type) == REAL_TYPE) error ("% invalid for %qs", name); + else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE) + error ("% or % invalid for %qs", name); else if ((long_p || short_p) && explicit_char) error ("% or % specified with char for %qs", name); else if (long_p && short_p) @@ -7266,7 +7371,10 @@ grokdeclarator (const cp_declarator *declarator, if (decl_context == PARM) { if (declspecs->specs[(int)ds_typedef]) - error ("typedef declaration invalid in parameter declaration"); + { + error ("typedef declaration invalid in parameter declaration"); + return error_mark_node; + } else if (storage_class == sc_static || storage_class == sc_extern || thread_p) @@ -7479,15 +7587,15 @@ grokdeclarator (const cp_declarator *declarator, is the same as the class name, and we are defining a function, then it is a constructor/destructor, and therefore returns a void type. */ - + /* ISO C++ 12.4/2. A destructor may not be declared const or volatile. A destructor may not be static. - + ISO C++ 12.1. A constructor may not be declared const or volatile. A constructor may not be virtual. A constructor may not be static. */ - if (staticp == 2) + if (staticp == 2) error ((flags == DTOR_FLAG) ? "destructor cannot be static member function" : "constructor cannot be static member function"); @@ -7586,7 +7694,7 @@ grokdeclarator (const cp_declarator *declarator, && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals)) { memfn_quals |= cp_type_quals (type); - type = build_memfn_type (type, + type = build_memfn_type (type, declarator->u.pointer.class_type, memfn_quals); memfn_quals = TYPE_UNQUALIFIED; @@ -7698,7 +7806,7 @@ grokdeclarator (const cp_declarator *declarator, !COMPLETE_TYPE_P (ctype) && (/* If the function is being defined, then qualifying type must certainly be complete. */ - funcdef_flag + funcdef_flag /* A friend declaration of "T::f" is OK, even if "T" is a template parameter. But, if this function is not a friend, the qualifying type @@ -7826,14 +7934,14 @@ grokdeclarator (const cp_declarator *declarator, in typenames, fields or parameters. */ if (current_lang_name == lang_name_java) TYPE_FOR_JAVA (type) = 1; - + /* This declaration: - typedef void f(int) const; + typedef void f(int) const; - declares a function type which is not a member of any + declares a function type which is not a member of any particular class, but which is cv-qualified; for - example "f S::*" declares a pointer to a const-qualified + example "f S::*" declares a pointer to a const-qualified member function of S. We record the cv-qualification in the function type. */ if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE) @@ -7908,7 +8016,7 @@ grokdeclarator (const cp_declarator *declarator, || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))) C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1; - bad_specifiers (decl, "type", virtualp, + bad_specifiers (decl, "type", virtualp, memfn_quals != TYPE_UNQUALIFIED, inlinep, friendp, raises != NULL_TREE); @@ -8082,7 +8190,7 @@ grokdeclarator (const cp_declarator *declarator, { decl = cp_build_parm_decl (unqualified_id, type); - bad_specifiers (decl, "parameter", virtualp, + bad_specifiers (decl, "parameter", virtualp, memfn_quals != TYPE_UNQUALIFIED, inlinep, friendp, raises != NULL_TREE); } @@ -8106,7 +8214,7 @@ grokdeclarator (const cp_declarator *declarator, { /* Something like struct S { int N::j; }; */ error ("invalid use of %<::%>"); - decl = NULL_TREE; + return error_mark_node; } else if (TREE_CODE (type) == FUNCTION_TYPE) { @@ -8254,8 +8362,7 @@ grokdeclarator (const cp_declarator *declarator, error (" in instantiation of template %qT", current_class_type); - type = error_mark_node; - decl = NULL_TREE; + return error_mark_node; } else { @@ -8285,7 +8392,7 @@ grokdeclarator (const cp_declarator *declarator, } decl = do_friend (ctype, unqualified_id, decl, - *attrlist, flags, + *attrlist, flags, funcdef_flag); return decl; } @@ -8365,7 +8472,7 @@ grokdeclarator (const cp_declarator *declarator, } } - bad_specifiers (decl, "field", virtualp, + bad_specifiers (decl, "field", virtualp, memfn_quals != TYPE_UNQUALIFIED, inlinep, friendp, raises != NULL_TREE); } @@ -8470,7 +8577,7 @@ grokdeclarator (const cp_declarator *declarator, initialized, (type_quals & TYPE_QUAL_CONST) != 0, ctype ? ctype : in_namespace); - bad_specifiers (decl, "variable", virtualp, + bad_specifiers (decl, "variable", virtualp, memfn_quals != TYPE_UNQUALIFIED, inlinep, friendp, raises != NULL_TREE); @@ -8792,9 +8899,7 @@ copy_fn_p (tree d) tree arg_type; int result = 1; - if (!DECL_FUNCTION_MEMBER_P (d)) - /* Non-members are invalid. We complained, but kept the declaration. */ - return 0; + gcc_assert (DECL_FUNCTION_MEMBER_P (d)); if (TREE_CODE (d) == TEMPLATE_DECL || (DECL_TEMPLATE_INFO (d) @@ -8947,7 +9052,7 @@ unary_op_p (enum tree_code code) /* DECL is a declaration for an overloaded operator. If COMPLAIN is true, errors are issued for invalid declarations. */ -void +bool grok_op_properties (tree decl, bool complain) { tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl)); @@ -9033,9 +9138,15 @@ grok_op_properties (tree decl, bool complain) if (DECL_NAMESPACE_SCOPE_P (decl)) { if (CP_DECL_CONTEXT (decl) != global_namespace) - error ("%qD may not be declared within a namespace", decl); + { + error ("%qD may not be declared within a namespace", decl); + return false; + } else if (!TREE_PUBLIC (decl)) - error ("%qD may not be declared as static", decl); + { + error ("%qD may not be declared as static", decl); + return false; + } } } @@ -9057,7 +9168,7 @@ grok_op_properties (tree decl, bool complain) || operator_code == NOP_EXPR) { error ("%qD must be a nonstatic member function", decl); - return; + return false; } else { @@ -9067,14 +9178,14 @@ grok_op_properties (tree decl, bool complain) { error ("%qD must be either a non-static member " "function or a non-member function", decl); - return; + return false; } for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p)) { tree arg = non_reference (TREE_VALUE (p)); if (arg == error_mark_node) - return; + return false; /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used because these checks are performed even on @@ -9085,12 +9196,10 @@ grok_op_properties (tree decl, bool complain) if (!p || p == void_list_node) { - if (!complain) - return; - - error ("%qD must have an argument of class or " - "enumerated type", - decl); + if (complain) + error ("%qD must have an argument of class or " + "enumerated type", decl); + return false; } } } @@ -9098,7 +9207,7 @@ grok_op_properties (tree decl, bool complain) /* There are no restrictions on the arguments to an overloaded "operator ()". */ if (operator_code == CALL_EXPR) - return; + return true; /* Warn about conversion operators that will never be used. */ if (IDENTIFIER_TYPENAME_P (name) @@ -9138,9 +9247,13 @@ grok_op_properties (tree decl, bool complain) { /* 13.4.0.3 */ error ("ISO C++ prohibits overloading operator ?:"); + return false; } else if (ellipsis_p) - error ("%qD must not have variable number of arguments", decl); + { + error ("%qD must not have variable number of arguments", decl); + return false; + } else if (ambi_op_p (operator_code)) { if (arity == 1) @@ -9190,11 +9303,11 @@ grok_op_properties (tree decl, bool complain) { if (methodp) error ("postfix %qD must take % as its argument", - decl); + decl); else - error - ("postfix %qD must take % as its second argument", - decl); + error ("postfix %qD must take % as its second " + "argument", decl); + return false; } } else @@ -9203,6 +9316,7 @@ grok_op_properties (tree decl, bool complain) error ("%qD must take either zero or one argument", decl); else error ("%qD must take either one or two arguments", decl); + return false; } /* More Effective C++ rule 6. */ @@ -9241,6 +9355,7 @@ grok_op_properties (tree decl, bool complain) error ("%qD must take %", decl); else error ("%qD must take exactly one argument", decl); + return false; } } else /* if (binary_op_p (operator_code)) */ @@ -9251,6 +9366,7 @@ grok_op_properties (tree decl, bool complain) error ("%qD must take exactly one argument", decl); else error ("%qD must take exactly two arguments", decl); + return false; } /* More Effective C++ rule 7. */ @@ -9287,11 +9403,13 @@ grok_op_properties (tree decl, bool complain) pedwarn ("%qD cannot have default arguments", decl); } else - error ("%qD cannot have default arguments", decl); + { + error ("%qD cannot have default arguments", decl); + return false; + } } - } - + return true; } /* Return a string giving the keyword associate with CODE. */ @@ -9418,7 +9536,7 @@ lookup_and_check_tag (enum tag_types tag_code, tree name, /* If that fails, the name will be placed in the smallest non-class, non-function-prototype scope according to 3.3.1/5. We may already have a hidden name declared as friend in this - scope. So lookup again but not ignoring hidden name. + scope. So lookup again but not ignoring hidden names. If we find one, that name will be made visible rather than creating a new tag. */ if (!decl) @@ -9595,7 +9713,8 @@ xref_tag (enum tag_types tag_code, tree name, && CLASSTYPE_IS_TEMPLATE (t)) { error ("redeclaration of %qT as a non-template", t); - t = error_mark_node; + error ("previous declaration %q+D", t); + POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node); } /* Make injected friend class visible. */ @@ -10192,7 +10311,7 @@ check_function_type (tree decl, tree current_function_parms) if (!COMPLETE_OR_VOID_TYPE_P (return_type)) { tree args = TYPE_ARG_TYPES (fntype); - + error ("return type %q#T is incomplete", return_type); /* Make it return void instead. */ @@ -10238,7 +10357,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags) struct cp_binding_level *bl; tree current_function_parms; struct c_fileinfo *finfo - = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)))); + = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))); bool honor_interface; /* Sanity check. */ @@ -10337,8 +10456,6 @@ start_preparsed_function (tree decl1, tree attrs, int flags) you declare a function, these types can be incomplete, but they must be complete when you define the function. */ check_function_type (decl1, current_function_parms); - /* Make sure no default arg is missing. */ - check_default_args (decl1); /* Build the return declaration for the function. */ restype = TREE_TYPE (fntype); @@ -10467,7 +10584,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags) ignore interface specifications for compiler-generated functions. */ && !DECL_ARTIFICIAL (decl1)); - + if (DECL_INTERFACE_KNOWN (decl1)) { tree ctx = decl_function_context (decl1); @@ -10577,13 +10694,6 @@ start_function (cp_decl_specifier_seq *declspecs, { tree decl1; - if (have_extern_spec) - { - declspecs->storage_class = sc_extern; - /* This should only be done once on the outermost decl. */ - have_extern_spec = false; - } - decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs); /* If the declarator is not suitable for a function definition, cause a syntax error. */ @@ -10767,7 +10877,7 @@ begin_destructor_body (void) tables. */ initialize_vtbl_ptrs (current_class_ptr); finish_compound_stmt (compound_stmt); - + /* And insert cleanups for our bases and members so that they will be properly destroyed if we throw. */ push_base_cleanups (); @@ -10798,10 +10908,10 @@ finish_destructor_body (void) an implicit definition), non-placement operator delete shall be looked up in the scope of the destructor's class and if found shall be accessible and unambiguous. */ - exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr, + exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr, virtual_size, - /*global_p=*/false, - /*placement=*/NULL_TREE, + /*global_p=*/false, + /*placement=*/NULL_TREE, /*alloc_fn=*/NULL_TREE); if_stmt = begin_if_stmt (); @@ -10872,7 +10982,7 @@ finish_function_body (tree compstmt) { if (compstmt == NULL_TREE) return; - + /* Close the block. */ finish_compound_stmt (compstmt); @@ -11081,6 +11191,7 @@ finish_function (int flags) f->x_vtt_parm = NULL; f->x_return_value = NULL; f->bindings = NULL; + f->extern_decl_map = NULL; /* Handle attribute((warn_unused_result)). Relies on gimple input. */ c_warn_unused_result (&DECL_SAVED_TREE (fndecl)); diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index c0bea8c3dad..a6187e28006 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -469,8 +469,11 @@ check_member_template (tree tmpl) static bool acceptable_java_type (tree type) { + if (type == error_mark_node) + return false; + if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type)) - return 1; + return true; if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE) { type = TREE_TYPE (type); @@ -526,8 +529,9 @@ check_java_method (tree method) tree type = TREE_VALUE (arg_types); if (!acceptable_java_type (type)) { - error ("Java method %qD has non-Java parameter type %qT", - method, type); + if (type != error_mark_node) + error ("Java method %qD has non-Java parameter type %qT", + method, type); jerr = true; } } @@ -549,7 +553,8 @@ check_classfn (tree ctype, tree function, tree template_parms) { int ix; bool is_template; - + tree pushed_scope; + if (DECL_USE_TEMPLATE (function) && !(TREE_CODE (function) == TEMPLATE_DECL && DECL_TEMPLATE_SPECIALIZATION (function)) @@ -579,16 +584,18 @@ check_classfn (tree ctype, tree function, tree template_parms) /* OK, is this a definition of a member template? */ is_template = (template_parms != NULL_TREE); + /* We must enter the scope here, because conversion operators are + named by target type, and type equivalence relies on typenames + resolving within the scope of CTYPE. */ + pushed_scope = push_scope (ctype); ix = class_method_index_for_fn (complete_type (ctype), function); if (ix >= 0) { VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype); tree fndecls, fndecl = 0; bool is_conv_op; - tree pushed_scope; const char *format = NULL; - pushed_scope = push_scope (ctype); for (fndecls = VEC_index (tree, methods, ix); fndecls; fndecls = OVL_NEXT (fndecls)) { @@ -627,10 +634,13 @@ check_classfn (tree ctype, tree function, tree template_parms) == DECL_TI_TEMPLATE (fndecl)))) break; } - if (pushed_scope) - pop_scope (pushed_scope); if (fndecls) - return OVL_CURRENT (fndecls); + { + if (pushed_scope) + pop_scope (pushed_scope); + return OVL_CURRENT (fndecls); + } + error ("prototype for %q#D does not match any in class %qT", function, ctype); is_conv_op = DECL_CONV_FN_P (fndecl); @@ -678,6 +688,9 @@ check_classfn (tree ctype, tree function, tree template_parms) properly within the class. */ if (COMPLETE_TYPE_P (ctype)) add_method (ctype, function, NULL_TREE); + + if (pushed_scope) + pop_scope (pushed_scope); return NULL_TREE; } @@ -696,25 +709,15 @@ note_vague_linkage_fn (tree decl) } } -/* Like note_vague_linkage_fn but for variables. */ - -static void -note_vague_linkage_var (tree var) -{ - VEC_safe_push (tree, gc, pending_statics, var); -} - /* We have just processed the DECL, which is a static data member. The other parameters are as for cp_finish_decl. */ void -finish_static_data_member_decl (tree decl, +finish_static_data_member_decl (tree decl, tree init, bool init_const_expr_p, tree asmspec_tree, int flags) { - gcc_assert (TREE_PUBLIC (decl)); - DECL_CONTEXT (decl) = current_class_type; /* We cannot call pushdecl here, because that would fill in the @@ -722,7 +725,7 @@ finish_static_data_member_decl (tree decl, the right thing, namely, to put this decl out straight away. */ if (! processing_template_decl) - note_vague_linkage_var (decl); + VEC_safe_push (tree, gc, pending_statics, decl); if (LOCAL_CLASS_P (current_class_type)) pedwarn ("local class %q#T shall not have static data member %q#D", @@ -753,7 +756,7 @@ finish_static_data_member_decl (tree decl, /* DECLARATOR and DECLSPECS correspond to a class member. The other parameters are as for cp_finish_decl. Return the DECL for the - class member declared. */ + class member declared. */ tree grokfield (const cp_declarator *declarator, @@ -769,6 +772,8 @@ grokfield (const cp_declarator *declarator, if (!declspecs->any_specifiers_p && declarator->kind == cdk_id && declarator->u.id.qualifying_scope + && TYPE_P (declarator->u.id.qualifying_scope) + && IS_AGGR_TYPE (declarator->u.id.qualifying_scope) && TREE_CODE (declarator->u.id.unqualified_name) == IDENTIFIER_NODE) /* Access declaration */ return do_class_using_decl (declarator->u.id.qualifying_scope, @@ -837,7 +842,7 @@ grokfield (const cp_declarator *declarator, return void_type_node; } - if (asmspec_tree) + if (asmspec_tree && asmspec_tree != error_mark_node) asmspec = TREE_STRING_POINTER (asmspec_tree); if (init) @@ -907,7 +912,7 @@ grokfield (const cp_declarator *declarator, error ("% specifiers are not permitted on non-static data members"); if (DECL_INITIAL (value) == error_mark_node) init = error_mark_node; - cp_finish_decl (value, init, /*init_const_expr_p=*/false, + cp_finish_decl (value, init, /*init_const_expr_p=*/false, NULL_TREE, flags); DECL_INITIAL (value) = init; DECL_IN_AGGR_P (value) = 1; @@ -917,9 +922,9 @@ grokfield (const cp_declarator *declarator, if (asmspec) set_user_assembler_name (value, asmspec); - cp_finish_decl (value, - /*init=*/NULL_TREE, - /*init_const_expr_p=*/false, + cp_finish_decl (value, + /*init=*/NULL_TREE, + /*init_const_expr_p=*/false, asmspec_tree, flags); /* Pass friends back this way. */ @@ -944,7 +949,8 @@ grokbitfield (const cp_declarator *declarator, { tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, NULL); - if (! value) return NULL_TREE; /* friends went bad. */ + if (value == error_mark_node) + return NULL_TREE; /* friends went bad. */ /* Pass friendly classes back. */ if (TREE_CODE (value) == VOID_TYPE) @@ -996,7 +1002,8 @@ grokbitfield (const cp_declarator *declarator, void cplus_decl_attributes (tree *decl, tree attributes, int flags) { - if (*decl == NULL_TREE || *decl == void_type_node) + if (*decl == NULL_TREE || *decl == void_type_node + || *decl == error_mark_node) return; if (TREE_CODE (*decl) == TEMPLATE_DECL) @@ -1109,6 +1116,8 @@ finish_anon_union (tree anon_union_decl) } main_decl = build_anon_union_vars (type, anon_union_decl); + if (main_decl == error_mark_node) + return; if (main_decl == NULL_TREE) { warning (0, "anonymous union with no members"); @@ -1530,6 +1539,109 @@ maybe_emit_vtables (tree ctype) return true; } +/* A special return value from type_visibility meaning internal + linkage. */ + +enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 }; + +/* walk_tree helper function for type_visibility. */ + +static tree +min_vis_r (tree *tp, int *walk_subtrees, void *data) +{ + int *vis_p = (int *)data; + if (! TYPE_P (*tp)) + { + *walk_subtrees = 0; + } + else if (CLASS_TYPE_P (*tp)) + { + if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp))) + { + *vis_p = VISIBILITY_ANON; + return *tp; + } + else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p) + *vis_p = CLASSTYPE_VISIBILITY (*tp); + } + return NULL; +} + +/* Returns the visibility of TYPE, which is the minimum visibility of its + component types. */ + +static int +type_visibility (tree type) +{ + int vis = VISIBILITY_DEFAULT; + walk_tree_without_duplicates (&type, min_vis_r, &vis); + return vis; +} + +/* Limit the visibility of DECL to VISIBILITY, if not explicitly + specified (or if VISIBILITY is static). */ + +static bool +constrain_visibility (tree decl, int visibility) +{ + if (visibility == VISIBILITY_ANON) + { + /* extern "C" declarations aren't affected by the anonymous + namespace. */ + if (!DECL_EXTERN_C_P (decl)) + { + TREE_PUBLIC (decl) = 0; + DECL_INTERFACE_KNOWN (decl) = 1; + if (DECL_LANG_SPECIFIC (decl)) + DECL_NOT_REALLY_EXTERN (decl) = 1; + } + } + else if (visibility > DECL_VISIBILITY (decl) + && !DECL_VISIBILITY_SPECIFIED (decl)) + { + DECL_VISIBILITY (decl) = visibility; + return true; + } + return false; +} + +/* Constrain the visibility of DECL based on the visibility of its template + arguments. */ + +static void +constrain_visibility_for_template (tree decl, tree targs) +{ + /* If this is a template instantiation, check the innermost + template args for visibility constraints. The outer template + args are covered by the class check. */ + tree args = INNERMOST_TEMPLATE_ARGS (targs); + int i; + for (i = TREE_VEC_LENGTH (args); i > 0; --i) + { + int vis = 0; + + tree arg = TREE_VEC_ELT (args, i-1); + if (TYPE_P (arg)) + vis = type_visibility (arg); + else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg))) + { + STRIP_NOPS (arg); + if (TREE_CODE (arg) == ADDR_EXPR) + arg = TREE_OPERAND (arg, 0); + if (TREE_CODE (arg) == VAR_DECL + || TREE_CODE (arg) == FUNCTION_DECL) + { + if (! TREE_PUBLIC (arg)) + vis = VISIBILITY_ANON; + else + vis = DECL_VISIBILITY (arg); + } + } + if (vis) + constrain_visibility (decl, vis); + } +} + /* Like c_determine_visibility, but with additional C++-specific behavior. @@ -1541,12 +1653,18 @@ maybe_emit_vtables (tree ctype) Note that because namespaces have multiple independent definitions, namespace visibility is handled elsewhere using the #pragma visibility - machinery rather than by decorating the namespace declaration. */ + machinery rather than by decorating the namespace declaration. + + The goal is for constraints from the type to give a diagnostic, and + other constraints to be applied silently. */ void determine_visibility (tree decl) { - tree class_type; + tree class_type = NULL_TREE; + bool use_template; + + /* Remember that all decls get VISIBILITY_DEFAULT when built. */ /* Only relevant for names with external linkage. */ if (!TREE_PUBLIC (decl)) @@ -1557,9 +1675,30 @@ determine_visibility (tree decl) maybe_clone_body. */ gcc_assert (!DECL_CLONED_FUNCTION_P (decl)); - /* Give the common code a chance to make a determination. */ - if (c_determine_visibility (decl)) - return; + if (TREE_CODE (decl) == TYPE_DECL) + { + if (CLASS_TYPE_P (TREE_TYPE (decl))) + use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)); + else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl))) + use_template = 1; + else + use_template = 0; + } + else if (DECL_LANG_SPECIFIC (decl)) + use_template = DECL_USE_TEMPLATE (decl); + else + use_template = 0; + + /* Anything that is exported must have default visibility. */ + if (TARGET_DLLIMPORT_DECL_ATTRIBUTES + && lookup_attribute ("dllexport", + TREE_CODE (decl) == TYPE_DECL + ? TYPE_ATTRIBUTES (TREE_TYPE (decl)) + : DECL_ATTRIBUTES (decl))) + { + DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; + DECL_VISIBILITY_SPECIFIED (decl) = 1; + } /* If DECL is a member of a class, visibility specifiers on the class can influence the visibility of the DECL. */ @@ -1571,83 +1710,187 @@ determine_visibility (tree decl) class_type = TREE_TYPE (DECL_NAME (decl)); else { + /* Not a class member. */ + /* Virtual tables have DECL_CONTEXT set to their associated class, so they are automatically handled above. */ gcc_assert (TREE_CODE (decl) != VAR_DECL || !DECL_VTABLE_OR_VTT_P (decl)); - if (DECL_FUNCTION_SCOPE_P (decl)) + if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl)) { + /* Local statics and classes get the visibility of their + containing function by default, except that + -fvisibility-inlines-hidden doesn't affect them. */ tree fn = DECL_CONTEXT (decl); - DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn); - DECL_VISIBILITY_SPECIFIED (decl) = DECL_VISIBILITY_SPECIFIED (fn); + if (DECL_VISIBILITY_SPECIFIED (fn) || ! DECL_CLASS_SCOPE_P (fn)) + { + DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn); + DECL_VISIBILITY_SPECIFIED (decl) = + DECL_VISIBILITY_SPECIFIED (fn); + } + else + determine_visibility_from_class (decl, DECL_CONTEXT (fn)); + + /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set, + but have no TEMPLATE_INFO, so don't try to check it. */ + use_template = 0; + } + else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)) + { + /* tinfo visibility is based on the type it's for. */ + constrain_visibility + (decl, type_visibility (TREE_TYPE (DECL_NAME (decl)))); + } + else if (use_template) + /* Template instantiations and specializations get visibility based + on their template unless they override it with an attribute. */; + else if (! DECL_VISIBILITY_SPECIFIED (decl)) + { + /* Set default visibility to whatever the user supplied with + #pragma GCC visibility or a namespace visibility attribute. */ + DECL_VISIBILITY (decl) = default_visibility; + DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma; } + } - /* Entities not associated with any class just get the - visibility specified by their attributes. */ - return; + if (use_template) + { + /* If the specialization doesn't specify visibility, use the + visibility from the template. */ + tree tinfo = (TREE_CODE (decl) == TYPE_DECL + ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl)) + : DECL_TEMPLATE_INFO (decl)); + tree args = TI_ARGS (tinfo); + + if (args != error_mark_node) + { + int depth = TMPL_ARGS_DEPTH (args); + tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo)); + + if (!DECL_VISIBILITY_SPECIFIED (decl)) + { + DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern); + DECL_VISIBILITY_SPECIFIED (decl) + = DECL_VISIBILITY_SPECIFIED (pattern); + } + + /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */ + if (args && depth > template_class_depth (class_type)) + /* Limit visibility based on its template arguments. */ + constrain_visibility_for_template (decl, args); + } } - /* By default, static data members and function members receive - the visibility of their containing class. */ if (class_type) + determine_visibility_from_class (decl, class_type); + + if (decl_anon_ns_mem_p (decl)) + /* Names in an anonymous namespace get internal linkage. + This might change once we implement export. */ + constrain_visibility (decl, VISIBILITY_ANON); + else if (TREE_CODE (decl) != TYPE_DECL) { - determine_visibility_from_class (decl, class_type); - - /* Give the target a chance to override the visibility associated - with DECL. */ - if (TREE_CODE (decl) == VAR_DECL - && (DECL_TINFO_P (decl) - || (DECL_VTABLE_OR_VTT_P (decl) - /* Construction virtual tables are not exported because - they cannot be referred to from other object files; - their name is not standardized by the ABI. */ - && !DECL_CONSTRUCTION_VTABLE_P (decl))) - && TREE_PUBLIC (decl) - && !DECL_REALLY_EXTERN (decl) - && DECL_VISIBILITY_SPECIFIED (decl) - && (!class_type || !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))) - targetm.cxx.determine_class_data_visibility (decl); - } + /* Propagate anonymity from type to decl. */ + int tvis = type_visibility (TREE_TYPE (decl)); + if (tvis == VISIBILITY_ANON) + constrain_visibility (decl, tvis); + } } +/* By default, static data members and function members receive + the visibility of their containing class. */ + static void determine_visibility_from_class (tree decl, tree class_type) { - if (TARGET_DLLIMPORT_DECL_ATTRIBUTES - && lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type))) - { - DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; - DECL_VISIBILITY_SPECIFIED (decl) = 1; - } - else if (TREE_CODE (decl) == FUNCTION_DECL - && DECL_DECLARED_INLINE_P (decl) - && visibility_options.inlines_hidden) - { - /* Don't change it if it has been set explicitly by user. */ - if (!DECL_VISIBILITY_SPECIFIED (decl)) - { - DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; - DECL_VISIBILITY_SPECIFIED (decl) = 1; - } - } - else if (CLASSTYPE_VISIBILITY_SPECIFIED (class_type)) + if (visibility_options.inlines_hidden + /* Don't do this for inline templates; specializations might not be + inline, and we don't want them to inherit the hidden + visibility. We'll set it here for all inline instantiations. */ + && !processing_template_decl + && ! DECL_VISIBILITY_SPECIFIED (decl) + && TREE_CODE (decl) == FUNCTION_DECL + && DECL_DECLARED_INLINE_P (decl) + && (! DECL_LANG_SPECIFIC (decl) + || ! DECL_EXPLICIT_INSTANTIATION (decl))) + DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; + else if (!DECL_VISIBILITY_SPECIFIED (decl)) { + /* Default to the class visibility. */ DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type); - DECL_VISIBILITY_SPECIFIED (decl) = 1; - } - else if (TYPE_CLASS_SCOPE_P (class_type)) - determine_visibility_from_class (decl, TYPE_CONTEXT (class_type)); - else if (TYPE_FUNCTION_SCOPE_P (class_type)) - { - tree fn = TYPE_CONTEXT (class_type); - DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn); - DECL_VISIBILITY_SPECIFIED (decl) = DECL_VISIBILITY_SPECIFIED (fn); + DECL_VISIBILITY_SPECIFIED (decl) + = CLASSTYPE_VISIBILITY_SPECIFIED (class_type); } - else if (!DECL_VISIBILITY_SPECIFIED (decl)) + + /* Give the target a chance to override the visibility associated + with DECL. */ + if (TREE_CODE (decl) == VAR_DECL + && (DECL_TINFO_P (decl) + || (DECL_VTABLE_OR_VTT_P (decl) + /* Construction virtual tables are not exported because + they cannot be referred to from other object files; + their name is not standardized by the ABI. */ + && !DECL_CONSTRUCTION_VTABLE_P (decl))) + && TREE_PUBLIC (decl) + && !DECL_REALLY_EXTERN (decl) + && !DECL_VISIBILITY_SPECIFIED (decl) + && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type)) + targetm.cxx.determine_class_data_visibility (decl); +} + +/* Constrain the visibility of a class TYPE based on the visibility of its + field types. Warn if any fields require lesser visibility. */ + +void +constrain_class_visibility (tree type) +{ + tree binfo; + tree t; + int i; + + int vis = type_visibility (type); + + if (vis == VISIBILITY_ANON + || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type))) + return; + + /* Don't warn about visibility if the class has explicit visibility. */ + if (CLASSTYPE_VISIBILITY_SPECIFIED (type)) + vis = VISIBILITY_INTERNAL; + + for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t)) + if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node) + { + tree ftype = strip_array_types (TREE_TYPE (t)); + int subvis = type_visibility (ftype); + + if (subvis == VISIBILITY_ANON) + warning (0, "\ +%qT has a field %qD whose type uses the anonymous namespace", + type, t); + else if (IS_AGGR_TYPE (ftype) + && vis < VISIBILITY_HIDDEN + && subvis >= VISIBILITY_HIDDEN) + warning (OPT_Wattributes, "\ +%qT declared with greater visibility than the type of its field %qD", + type, t); + } + + binfo = TYPE_BINFO (type); + for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i) { - DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type); - DECL_VISIBILITY_SPECIFIED (decl) = 0; + int subvis = type_visibility (TREE_TYPE (t)); + + if (subvis == VISIBILITY_ANON) + warning (0, "\ +%qT has a base %qT whose type uses the anonymous namespace", + type, TREE_TYPE (t)); + else if (vis < VISIBILITY_HIDDEN + && subvis >= VISIBILITY_HIDDEN) + warning (OPT_Wattributes, "\ +%qT declared with greater visibility than its base %qT", + type, TREE_TYPE (t)); } } @@ -2106,7 +2349,7 @@ start_objects (int method_type, int initp) /* We cannot allow these functions to be elided, even if they do not have external linkage. And, there's no point in deferring - compilation of thes functions; they're all going to have to be + compilation of these functions; they're all going to have to be out anyhow. */ DECL_INLINE (current_function_decl) = 0; DECL_UNINLINABLE (current_function_decl) = 1; @@ -2420,12 +2663,12 @@ one_static_initialization_or_destruction (tree decl, tree init, bool initp) if (initp) { if (init) - finish_expr_stmt (init); + finish_expr_stmt (init); /* If we're using __cxa_atexit, register a function that calls the - destructor for the object. */ + destructor for the object. */ if (flag_use_cxa_atexit) - finish_expr_stmt (register_dtor_fn (decl)); + finish_expr_stmt (register_dtor_fn (decl)); } else finish_expr_stmt (build_cleanup (decl)); @@ -2498,7 +2741,7 @@ do_static_initialization_or_destruction (tree vars, bool initp) node = TREE_CHAIN (node)) /* Do one initialization or destruction. */ one_static_initialization_or_destruction (TREE_VALUE (node), - TREE_PURPOSE (node), initp); + TREE_PURPOSE (node), initp); /* Finish up the priority if-stmt body. */ finish_then_clause (priority_if_stmt); @@ -2994,7 +3237,7 @@ cp_finish_file (void) DECL_EXTERNAL appropriately, so there's no need to check again, and we do not want to clear DECL_EXTERNAL if a previous call to import_export_decl set it. - + This is done in a separate for cycle, because if some deferred function is contained in another deferred function later in deferred_fns varray, @@ -3087,7 +3330,7 @@ cp_finish_file (void) else { /* If we have a ctor or this is obj-c++ and we need a static init, - call generate_ctor_or_dtor_function. */ + call generate_ctor_or_dtor_function. */ if (static_ctors || (c_dialect_objc () && objc_static_init_needed_p ())) generate_ctor_or_dtor_function (/*constructor_p=*/true, DEFAULT_INIT_PRIORITY, &locus); @@ -3116,7 +3359,7 @@ cp_finish_file (void) if (VEC_length (tree, pending_statics) != 0) { check_global_declarations (VEC_address (tree, pending_statics), - VEC_length (tree, pending_statics)); + VEC_length (tree, pending_statics)); emit_debug_global_declarations (VEC_address (tree, pending_statics), VEC_length (tree, pending_statics)); } @@ -3251,7 +3494,9 @@ mark_used (tree decl) } TREE_USED (decl) = 1; - /* If we don't need a value, then we don't need to synthesize DECL. */ + if (DECL_CLONED_FUNCTION_P (decl)) + TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1; + /* If we don't need a value, then we don't need to synthesize DECL. */ if (skip_evaluation) return; /* Normally, we can wait until instantiation-time to synthesize @@ -3275,9 +3520,9 @@ mark_used (tree decl) saved_processing_template_decl = processing_template_decl; processing_template_decl = 0; } - + if (processing_template_decl) - return; + return; if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl) && !TREE_ASM_WRITTEN (decl)) @@ -3329,12 +3574,12 @@ mark_used (tree decl) template, we now know that we will need to actually do the instantiation. We check that DECL is not an explicit instantiation because that is not checked in instantiate_decl. - + We put off instantiating functions in order to improve compile times. Maintaining a stack of active functions is expensive, and the inliner knows to instantiate any functions it might need. Therefore, we always try to defer instantiation. */ - instantiate_decl (decl, /*defer_ok=*/true, + instantiate_decl (decl, /*defer_ok=*/true, /*expl_inst_class_mem_p=*/false); processing_template_decl = saved_processing_template_decl; diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 8696ff9731e..f87355893cb 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -166,8 +166,14 @@ dump_template_argument_list (tree args, int flags) static void dump_template_parameter (tree parm, int flags) { - tree p = TREE_VALUE (parm); - tree a = TREE_PURPOSE (parm); + tree p; + tree a; + + if (parm == error_mark_node) + return; + + p = TREE_VALUE (parm); + a = TREE_PURPOSE (parm); if (TREE_CODE (p) == TYPE_DECL) { @@ -1236,7 +1242,15 @@ dump_template_parms (tree info, int primary, int flags) for (ix = 0; ix != len; ix++) { - tree parm = TREE_VALUE (TREE_VEC_ELT (parms, ix)); + tree parm; + + if (TREE_VEC_ELT (parms, ix) == error_mark_node) + { + pp_identifier (cxx_pp, "