aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog421
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in9
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/adaint.c37
-rw-r--r--gcc/ada/adaint.h21
-rw-r--r--gcc/ada/gnatchop.adb184
-rw-r--r--gcc/c-common.c9
-rw-r--r--gcc/c-common.h1
-rw-r--r--gcc/cfgexpand.c89
-rw-r--r--gcc/cfglayout.c255
-rw-r--r--gcc/cfgloop.h1
-rw-r--r--gcc/config/alpha/alpha.c4
-rw-r--r--gcc/config/arm/bpabi.S17
-rw-r--r--gcc/config/bfin/bfin.c95
-rw-r--r--gcc/config/bfin/bfin.md124
-rw-r--r--gcc/config/bfin/lib1funcs.asm3
-rw-r--r--gcc/config/darwin.h1
-rw-r--r--gcc/config/frv/predicates.md2
-rw-r--r--gcc/config/i386/gmon-sol2.c77
-rw-r--r--gcc/config/i386/i386.c21
-rw-r--r--gcc/config/i386/i386.h11
-rw-r--r--gcc/config/i386/i386.opt16
-rw-r--r--gcc/config/ia64/ia64.c3
-rw-r--r--gcc/config/m68k/constraints.md107
-rw-r--r--gcc/config/m68k/m68k.c1
-rw-r--r--gcc/config/m68k/m68k.h68
-rw-r--r--gcc/config/m68k/m68k.md1
-rw-r--r--gcc/config/mips/mips.c3
-rw-r--r--gcc/config/mips/mips.h7
-rw-r--r--gcc/config/rs6000/darwin-ldouble.c25
-rw-r--r--gcc/config/rs6000/libgcc-ppc-glibc.ver7
-rw-r--r--gcc/config/rs6000/rs6000.c13
-rw-r--r--gcc/config/rs6000/rs6000.md20
-rw-r--r--gcc/config/score/score.c3
-rw-r--r--gcc/config/sh/sh.c3
-rw-r--r--gcc/config/soft-fp/double.h14
-rw-r--r--gcc/config/soft-fp/extended.h54
-rw-r--r--gcc/config/soft-fp/floatundidf.c5
-rw-r--r--gcc/config/soft-fp/floatundisf.c5
-rw-r--r--gcc/config/soft-fp/floatunsidf.c5
-rw-r--r--gcc/config/soft-fp/floatunsisf.c5
-rw-r--r--gcc/config/soft-fp/op-2.h4
-rw-r--r--gcc/config/soft-fp/op-4.h4
-rw-r--r--gcc/config/soft-fp/op-common.h40
-rw-r--r--gcc/config/soft-fp/quad.h18
-rw-r--r--gcc/config/sparc/sparc.c3
-rw-r--r--gcc/config/xtensa/lib1funcs.asm18
-rw-r--r--gcc/cp/ChangeLog7030
-rw-r--r--gcc/cp/ChangeLog-20053521
-rw-r--r--gcc/cp/ChangeLog-20063495
-rw-r--r--gcc/cp/decl.c11
-rw-r--r--gcc/cp/decl2.c2
-rw-r--r--gcc/df-scan.c29
-rw-r--r--gcc/doc/invoke.texi16
-rw-r--r--gcc/doc/sourcebuild.texi3
-rw-r--r--gcc/doc/trouble.texi14
-rw-r--r--gcc/double-int.c78
-rw-r--r--gcc/double-int.h9
-rw-r--r--gcc/emit-rtl.c42
-rw-r--r--gcc/expr.c7
-rw-r--r--gcc/fold-const.c70
-rw-r--r--gcc/fortran/ChangeLog63
-rw-r--r--gcc/fortran/dependency.c18
-rw-r--r--gcc/fortran/gfortran.texi63
-rw-r--r--gcc/fortran/intrinsic.c132
-rw-r--r--gcc/fortran/intrinsic.texi1072
-rw-r--r--gcc/fortran/invoke.texi44
-rw-r--r--gcc/fortran/options.c2
-rw-r--r--gcc/fortran/scanner.c27
-rw-r--r--gcc/fortran/simplify.c159
-rw-r--r--gcc/fortran/trans-array.c2
-rw-r--r--gcc/fortran/trans-const.c119
-rw-r--r--gcc/fortran/trans-const.h6
-rw-r--r--gcc/function.c70
-rw-r--r--gcc/function.h8
-rw-r--r--gcc/gengtype.c1
-rw-r--r--gcc/gimplify.c27
-rw-r--r--gcc/lambda-code.c3
-rw-r--r--gcc/passes.c1
-rw-r--r--gcc/predict.c3
-rw-r--r--gcc/regclass.c64
-rw-r--r--gcc/rtl.def3
-rw-r--r--gcc/rtl.h7
-rw-r--r--gcc/system.h3
-rw-r--r--gcc/testsuite/ChangeLog162
-rw-r--r--gcc/testsuite/g++.dg/ext/vector7.C8
-rw-r--r--gcc/testsuite/g++.dg/init/ptrfn2.C14
-rw-r--r--gcc/testsuite/g++.dg/init/ptrfn3.C14
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C24
-rw-r--r--gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C29
-rw-r--r--gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20070501-1.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-blockid.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-caselabels.c21
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-declparen.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-enumconst.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-exprparen.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-externalid.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-fnargs.c20
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c17
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-idexternal.c11
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-idinternal.c11
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-pointer.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-stringlit.c10
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-structmem.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-structnest.c23
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/arm-eabi1.c82
-rw-r--r--gcc/testsuite/gcc.dg/cpp/if-div.c6
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr28709.c8
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loop-27.c14
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c9
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr30771.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr31699.c35
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-iv-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-iv-9.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c23
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-multitypes-11.c45
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c18
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16a.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16b.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/bfin/arith.c2
-rw-r--r--gcc/testsuite/gcc.target/bfin/frmul.c2
-rw-r--r--gcc/testsuite/gcc.target/bfin/mul-combine.c2
-rw-r--r--gcc/testsuite/gcc.target/bfin/shift.c2
-rw-r--r--gcc/testsuite/gfortran.dg/array_memset_2.f9038
-rw-r--r--gcc/testsuite/gfortran.dg/bom_UTF-32.f90bin0 -> 204 bytes
-rw-r--r--gcc/testsuite/gfortran.dg/bom_UTF-8.f903
-rw-r--r--gcc/testsuite/gfortran.dg/bom_UTF-8_F.F903
-rw-r--r--gcc/testsuite/gfortran.dg/bom_UTF16-BE.f90bin0 -> 102 bytes
-rw-r--r--gcc/testsuite/gfortran.dg/bom_UTF16-LE.f90bin0 -> 102 bytes
-rw-r--r--gcc/testsuite/gfortran.dg/bom_error.f904
-rw-r--r--gcc/testsuite/gfortran.dg/bom_include.f902
-rw-r--r--gcc/testsuite/gfortran.dg/bom_include.inc2
-rw-r--r--gcc/testsuite/gfortran.dg/bound_simplification_1.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_21.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/inquire_5.f902
-rw-r--r--gcc/testsuite/gfortran.dg/secnds-1.f2
-rw-r--r--gcc/testsuite/gfortran.dg/secnds.f2
-rw-r--r--gcc/testsuite/gfortran.dg/vect/vect-5.f902
-rw-r--r--gcc/testsuite/lib/target-supports.exp49
-rw-r--r--gcc/tree-cfg.c59
-rw-r--r--gcc/tree-inline.c1
-rw-r--r--gcc/tree-pass.h1
-rw-r--r--gcc/tree-sra.c587
-rw-r--r--gcc/tree-ssa-ccp.c111
-rw-r--r--gcc/tree-ssa-forwprop.c21
-rw-r--r--gcc/tree-ssa-loop-ivopts.c22
-rw-r--r--gcc/tree-ssa-loop-manip.c3
-rw-r--r--gcc/tree-ssa-loop-niter.c94
-rw-r--r--gcc/tree-vect-analyze.c22
-rw-r--r--gcc/tree-vect-transform.c47
-rw-r--r--gcc/tree-vectorizer.c8
-rw-r--r--gcc/tree-vrp.c247
-rw-r--r--gcc/tree.c67
-rw-r--r--gcc/tree.h5
-rw-r--r--gnattools/ChangeLog5
-rw-r--r--gnattools/Makefile.in3
-rw-r--r--libcpp/ChangeLog10
-rw-r--r--libcpp/expr.c7
-rw-r--r--libcpp/macro.c21
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/io/io.h17
-rw-r--r--libgfortran/io/list_read.c6
-rw-r--r--libgfortran/io/transfer.c17
-rw-r--r--libgfortran/io/unit.c27
-rw-r--r--libiberty/ChangeLog8
-rw-r--r--libiberty/Makefile.in3
-rw-r--r--libiberty/filename_cmp.c6
-rw-r--r--libjava/ChangeLog33
-rw-r--r--libjava/Makefile.in1
-rw-r--r--libjava/classpath/ChangeLog7
-rw-r--r--libjava/classpath/gnu/javax/management/Server.java21
-rw-r--r--libjava/classpath/javax/swing/text/html/HTMLEditorKit.java2
-rw-r--r--libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$IdFactory.classbin2659 -> 3138 bytes
-rw-r--r--libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$ReferenceKey.classbin983 -> 1266 bytes
-rw-r--r--libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager.classbin3083 -> 3711 bytes
-rw-r--r--libjava/classpath/lib/gnu/javax/management/Server$ServerInfo.classbin898 -> 898 bytes
-rw-r--r--libjava/classpath/lib/gnu/javax/management/Server$ServerInputStream.classbin1219 -> 1219 bytes
-rw-r--r--libjava/classpath/lib/gnu/javax/management/Server$ServerNotificationListener.classbin1282 -> 1282 bytes
-rw-r--r--libjava/classpath/lib/gnu/javax/management/Server.classbin23419 -> 24096 bytes
-rw-r--r--libjava/classpath/resource/javax/swing/text/html/default.css (renamed from libjava/classpath/javax/swing/text/html/default.css)0
-rw-r--r--libjava/gnu/javax/management/Server.h3
-rw-r--r--libjava/include/java-interp.h2
-rw-r--r--libjava/interpret-run.cc5
-rw-r--r--libjava/java/lang/natCharacter.cc18
-rwxr-xr-xlibjava/scripts/makemake.tcl3
-rw-r--r--libjava/sources.am1
-rw-r--r--libstdc++-v3/ChangeLog750
-rw-r--r--libstdc++-v3/include/Makefile.am2
-rw-r--r--libstdc++-v3/include/Makefile.in2
-rw-r--r--libstdc++-v3/include/bits/basic_ios.h24
-rw-r--r--libstdc++-v3/include/bits/basic_ios.tcc12
-rw-r--r--libstdc++-v3/include/bits/localefwd.h59
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h267
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h4
-rw-r--r--libstdc++-v3/include/ext/pool_allocator.h6
-rw-r--r--libstdc++-v3/include/std/type_traits300
-rw-r--r--libstdc++-v3/include/tr1/type_traits6
-rw-r--r--libstdc++-v3/include/tr1/type_traitsfwd.h (renamed from libstdc++-v3/include/tr1/type_traits_fwd.h)6
-rw-r--r--libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc42
-rw-r--r--libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc33
-rw-r--r--libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc54
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc59
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/typedefs.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/value.cc56
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/typedefs.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/value.cc59
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs.cc68
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc53
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs.cc68
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc53
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/assign_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_1_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_2_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/insert_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/assign_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_1_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_2_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/insert_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/assign_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/bool/constructor.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/bool/constructor.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_1_neg.cc)2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_2_neg.cc)2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc (renamed from libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/insert_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiations.cc)0
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp2
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_const.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_cv.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/add_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/add_reference.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_volatile.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/aligned_storage.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/alignment_of.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/extent.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/has_nothrow_assign.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/has_nothrow_constructor.cc)6
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/has_nothrow_copy.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/has_trivial_assign.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/has_trivial_constructor.cc)6
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/has_trivial_copy.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/has_trivial_destructor.cc)6
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/has_virtual_destructor.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/static_definition.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/static_definition.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_type_typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type_typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/is_abstract.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/is_arithmetic.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/is_base_of.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/is_class.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/is_compound.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/is_const.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/is_empty.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/24808.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/24808.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/is_enum.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/is_floating_point.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/24808.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/24808.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/is_function.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/is_fundamental.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/is_integral.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/is_member_function_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/is_member_object_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/is_member_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/24808.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/24808.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/is_object.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/is_pod.cc)6
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/is_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/24809.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/24809.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/is_polymorphic.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/is_reference.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/is_same.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/is_scalar.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/is_signed.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/is_union.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/is_unsigned.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/is_void.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/is_volatile.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/typedefs.cc33
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/typedefs.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/typedefs.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/rank.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_all_extents.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_extent.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/remove_pointer.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/remove_reference.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/value.cc (renamed from libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc)0
411 files changed, 15676 insertions, 9797 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 808197144a8..f656742ec47 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,416 @@
+2007-05-03 Dirk Mueller <dmueller@suse.de>
+
+ * doc/invoke.texi (-m386,-m486,-mpentium,-mpentiumpro): Remove.
+
+ * config/i386/i386.h (CC1_CPU_SPEC): Remove handling for deprecated
+ options.
+
+ * config/i386/i386.opt (m386,m486,mpentium,mpentiumpro): Remove.
+
+2007-05-03 Janis Johnson <janis187@us.ibm.com>
+
+ * doc/sourcebuild.texi (Test Directives) Clarify dg-excess-errors.
+
+2007-05-03 Joseph Myers <joseph@codesourcery.com>
+
+ * config/soft-fp/double.h, config/soft-fp/extended.h,
+ config/soft-fp/floatundidf.c, config/soft-fp/floatundisf.c,
+ config/soft-fp/floatunsidf.c, config/soft-fp/floatunsisf.c,
+ config/soft-fp/op-2.h, config/soft-fp/op-4.h,
+ config/soft-fp/op-common.h, config/soft-fp/quad.h: Update from
+ glibc CVS.
+
+2007-05-03 Ian Lance Taylor <iant@google.com>
+
+ * config/rs6000/rs6000.c (rs6000_override_options): Don't se
+ MASK_PPC_GFXOPT for 8540 or 8548.
+
+2007-05-03 Uros Bizjak <ubizjak@gmail.com>
+
+ * tree-vect-transform.c (vect_update_inits_of_drs): Use
+ vect_print_dump_info() to output debug information.
+
+2007-05-03 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/31768
+ * config/i386/i386.c (print_operand) ['z']: Output 'w' for
+ operands of size 2 when operand is not MEM_P.
+
+2007-05-03 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/30565
+ * lambda-code.c (perfect_nestify): Fix updating of dominators.
+
+2007-05-03 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin.md (addpdi3, us_truncpdisi2): New patterns.
+ (umulsi3_highpart): Use them.
+ * config/bfin/lib1funcs.asm (__umulsi3_highpart): Use unsigned move
+ for final accumulator to D regisster tranfser.
+
+2007-05-03 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/31699
+ * tree-vect-analyze.c (vect_update_misalignment_for_peel): Remove wrong
+ code.
+ (vect_enhance_data_refs_alignment): Compute peel amount using
+ TYPE_VECTOR_SUBPARTS instead of vf.
+ * tree-vect-transform.c (vect_gen_niters_for_prolog_loop): Likewise.
+
+2007-05-02 Brooks Moses <brooks.moses@codesourcery.com>
+
+ PR bootstrap/31776
+ * system.h: Remove inclusion of double-int.h
+ * tree.h: Include double-int.h
+ * gengtype.c: Likewise
+ * cfgloop.h: Likewise
+ * Makefile.in: Adjust dependencies on double-int.h
+
+2007-05-02 Eric Christopher <echristo@apple.com>
+
+ * config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Translate
+ -shared to -Zdynamiclib.
+
+2007-05-02 Seongbae Park <seongbae.park@gmail.com>
+
+ PR c++/31663
+ * c-common.c (strip_pointer_or_array_types): New function.
+ * c-common.h (strip_pointer_or_array_types): New function declaration.
+
+2007-05-03 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/31771
+ * tree-cfg.c (move_block_to_fn): Assign bb to the correct index.
+
+2007-05-02 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/bpabi.S (aeabi_lcmp): Fix result on overflow.
+
+2007-05-02 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR middle-end/29715
+ * fold-const.c (fold_comparision): Remove the "foo++ == CONST"
+ transformation.
+
+2007-05-02 Nick Clifton <nickc@redhat.com>
+
+ * config/frv/predicates.md (symbolic_operand): Accept CONSTs.
+
+2007-05-02 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/31146
+ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): New
+ argument, single_use_p. If we have a single use that is
+ a conversion to the definition rhs type, propagate that rhs.
+ (forward_propagate_addr_expr): Pass single_use_p argument
+ to forward_propagate_addr_expr_1.
+
+2007-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/i386/i386.c (ix86_expand_sse_comi): Remove unused
+ variable.
+
+2007-05-01 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * doc/invoke.texi: Fix typo, 'AMD Family 10h core' instead of
+ 'AMD Family 10 core'.
+
+2007-05-01 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * config/i386/i386.c (override_options): Accept k8-sse3, opteron-sse3
+ and athlon64-sse3 as improved versions of k8, opteron and athlon64
+ with SSE3 instruction set support.
+ * doc/invoke.texi: Likewise.
+
+2007-05-01 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * config/i386/i386.c (override_options): Tuning 32-byte loop
+ alignment for amdfam10 architecture. Increasing the max loop
+ alignment to 24 bytes.
+
+2007-05-01 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/m68k/constraints.md: New.
+ * config/m68k/m68k.h (REG_CLASS_FROM_LETTER,
+ CONST_OK_FOR_LETTER_P, CONST_DOUBLE_OK_FOR_LETTER_P,
+ EXTRA_CONSTRAINT): Remove.
+ * config/m68k/m68k.md: Include constraints.md.
+ * expr.c (expand_expr_real_1): Copy DECL_RTL before using it.
+
+2007-05-01 Ian Lance Taylor <iant@google.com>
+
+ PR tree-optimization/31739
+ * tree-vrp.c (vrp_val_is_max): New static function.
+ (vrp_val_is_min): New static function.
+ (set_value_range_to_value): Use TYPE_{MAX,MIN}_VALUE rather than
+ copying the node.
+ (set_value_range): Use vrp_val_is_{max,min}.
+ (extract_range_from_assert): Likewise.
+ (extract_range_from_binary_expr): Likewise.
+ (extract_range_from_unary_expr): Likewise.
+ (dump_value_range, vrp_meet): Likewise.
+ (vrp_visit_phi_node): Likewise.
+ * tree.c (build_distinct_type_copy): Revert change of 2007-04-27.
+
+2007-05-01 Mark Mitchell <mark@codesourcery.com>
+
+ * config/i386/gmon-sol2.c (size_t): New type.
+ (intptr_t): Likewise.
+ (s_textsize): Declare as size_t.
+ (sbrk): Declare.
+ (monstartup): Use size_t for sizes.
+ (_mcount): Save and restore registers.
+ (internal_mcount): Pass 0 as the first argument to monstartup
+ in 64-bit mode.
+ (moncontrol): Convert pointer to appropriately sized integer
+ before passing to profil.
+
+2007-05-01 Joseph Myers <joseph@codesourcery.com>
+
+ * config/rs6000/darwin-ldouble.c (__gcc_qunord): Define if
+ __NO_FPRS__, not just if _SOFT_DOUBLE.
+ * config/rs6000/libgcc-ppc-glibc.ver (__gcc_qunord): Likewise.
+ * config/rs6000/rs6000.c (rs6000_init_libfuncs): Use __gcc_qunord
+ also for E500 double.
+ * config/rs6000/rs6000.md (buneq, bunge, bungt, bunle, bunlt,
+ suneq, sunge, sungt, sunle, sunlt): Disable for (TARGET_HARD_FLOAT
+ && !TARGET_FPRS).
+
+2007-05-01 Richard Guenther <rguenther@suse.de>
+
+ * tree-ssa-loop-manip.c (ip_normal_pos): Check if last stmt
+ is NULL.
+
+2007-05-01 Joseph Myers <joseph@codesourcery.com>
+
+ * config/rs6000/libgcc-ppc-glibc.ver (__gcc_qgt): Fix typo.
+
+2007-05-01 Jan Hubicka <jh@suse.cz>
+
+ * tree-vectorize.c (vect_is_simple_use): gimple_min_invariant is
+ invariant.
+
+2007-05-01 Jan Hubicka <jh@suse.cz>
+
+ * tree.h (maybe_fold_offset_to_component_ref): Remove.
+ (maybe_fold_offset_to_reference): Declare.
+ * fold-const.c (fold_unary): Do not fold
+ (type *)&A into &A->field_of_type_and_offset_0
+ * tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): When base type
+ size is unknown, give up.
+ (maybe_fold_offset_to_component_ref): Ignore firelds with unknown
+ offsets.
+ (maybe_fold_offset_to_reference): New.
+ (maybe_fold_stmt_indirect): Use it.
+ (fold_stmt_r): Fold (type *)&A+offset into A->field_if_type_and_offset.
+ * gimplify.c (gimplify_conversion): Canonicalize conversions to
+ field references.
+ (gimplify_expr): Likewise for plus_expr.
+
+2007-05-01 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Use
+ bsi_after_labels. Always insert statements before bsi.
+ * tree-vect-transform.c (vect_create_epilog_for_reduction): Ditto.
+ * predict.c (apply_return_prediction): Check for empty blocks.
+ * cfgexpand.c (lab_rtx_for_bb): New variable.
+ (label_rtx_for_bb): Do not create new tree labels.
+ (expand_gimple_basic_block): Add labels recorded in lab_rtx_for_bb.
+ (tree_expand_cfg): Initialize lab_rtx_for_bb.
+ * tree-cfg.c (build_tree_cfg): Call cleanup_dead_labels after
+ creating edges.
+ (label_for_bb): Add field used.
+ (update_eh_label, main_block_label): Mark the label used.
+ (cleanup_dead_labels): Remove unused labels.
+
+2007-05-01 Richard Guenther <rguenther@suse.de>
+
+ * tree-vrp.c (set_value_range): Do not allocate equiv bitmap
+ if it is not about to be set.
+ (get_value_range): Do not pre-allocate equiv bitmap.
+ (update_value_range): No need to clear equiv field.
+ (add_equivalence): Change prototype to get bitmap pointer.
+ Allocate bitmap here if it is not already.
+ (extract_range_from_assert): Do not allocate bitmap here.
+ Update callers to add_equivalence.
+ (extract_range_from_ssa_name): Likewise.
+ (get_vr_for_comparison): New static helper.
+ (compare_name_with_value): Handle NULL equiv bitmap by
+ peeling the first iteration of the comparison loop.
+ Use get_vr_for_comparison.
+ (compare_names): Handle NULL equiv bitmaps by using fake
+ ones. Use get_vr_for_comparison.
+
+2007-04-30 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * double-int.c (mpz_set_double_int): Moved from
+ tree-ssa-loop-niter.c.
+ (mpz_get_double_int): Likewise; also, add option to wrap
+ out-of-range integers.
+ * double-int.h: New prototypes for above.
+ * tree.c (get_static_type_bounds): Moved from
+ tree-ssa-loop-niter.c; now returns TYPE_MIN_VALUE and
+ TYPE_MAX_VALUE if they exist..
+ * tree.h: New prototype for above.
+ * tree-ssa-loop-niter.c: Adjust mpz_to_double_int and
+ get_type_bounds calls.
+ (mpz_set_double_int): Move to double-int.c.
+ (get_type_bounds): Move to tree.c, rename to
+ get_static_type_bounds.
+ (mpz_to_double_int): Move to double-int.c, rename to
+ mpz_get_double_int.
+
+2007-04-30 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa/lib1funcs.asm (__umodsi3, __modsi3): Rearrange so that
+ DIV0 exception can fall through to a normal return.
+
+2007-04-30 Alexandre Oliva <aoliva@redhat.com>
+
+ PR middle-end/22156
+ Temporarily revert:
+ 2007-04-06 Andreas Tobler <a.tobler@schweiz.org>
+ * tree-sra.c (sra_build_elt_assignment): Initialize min/maxshift.
+ 2007-04-05 Alexandre Oliva <aoliva@redhat.com>
+ * tree-sra.c (try_instantiate_multiple_fields): Needlessly
+ initialize align to silence bogus warning.
+ 2007-04-05 Alexandre Oliva <aoliva@redhat.com>
+ * tree-sra.c (struct sra_elt): Add in_bitfld_block. Remove
+ all_no_warning.
+ (struct sra_walk_fns): Remove use_all parameter from use.
+ (sra_hash_tree): Handle BIT_FIELD_REFs.
+ (sra_elt_hash): Don't hash bitfld blocks.
+ (sra_elt_eq): Skip them in parent compares as well. Handle
+ BIT_FIELD_REFs.
+ (sra_walk_expr): Don't maintain or pass down use_all_p.
+ (scan_use): Remove use_all parameter.
+ (scalarize_use): Likewise. Re-expand assignment to
+ BIT_FIELD_REF of gimple_reg. De-scalarize before input or
+ output, and re-scalarize after output. Don't mark anything
+ for no warning.
+ (scalarize_ldst): Adjust.
+ (scalarize_walk_gimple_modify_statement): Likewise.
+ (build_element_name_1): Handle BIT_FIELD_REFs.
+ (instantiate_element): Don't warn for any element whose parent
+ is used as a whole.
+ (instantiate_missing_elements_1): Return the sra_elt.
+ (canon_type_for_field): New.
+ (try_instantiate_multiple_fields): New.
+ (instantiate_missing_elemnts): Use them.
+ (mark_no_warning): Removed.
+ (generate_one_element_ref): Handle BIT_FIELD_REFs.
+ (REPLDUP, sra_build_elt_assignment): New.
+ (generate_copy_inout): Use them.
+ (generate_element_copy): Likewise. Handle bitfld differences.
+ (generate_element_zero): Don't recurse for blocks. Use
+ sra_build_elt_assignment.
+ (generate_one_element_int): Take elt instead of var. Use
+ sra_build_elt_assignment.
+ (generate_element_init_1): Adjust.
+ (scalarize_use, scalarize_copy): Use REPLDUP.
+ (scalarize_ldst): Move assert before dereference.
+ (dump_sra_elt_name): Handle BIT_FIELD_REFs.
+
+2007-04-30 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/31721
+ * tree.c (reconstruct_complex_type): Reconstruct a reference
+ correctly.
+ Also use the same mode for the pointer as the old pointer type.
+
+2007-04-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ * doc/trouble.texi (Interoperation): Remove note about Ultrix
+ Fortran compiler.
+
+2007-04-29 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR rtl-optimization/31676
+ * df-scan.c (record_nonlocal_goto_receiver_defs): New function.
+ (df_refs_record): Call it.
+
+2007-04-29 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * rtl.def (SS_ABS): New code.
+ * config/bfin/bfin.c (print_operand): New modifier 'v'.
+ (enum bfin_builtins): Add BFIN_BUILTIN_SUM_2X16, BFIN_BUILTIN_ABS_1x32,
+ BFIN_BUILTIN_ROUND_1x32, BFIN_BUILTIN_MULT_1x32x32,
+ BFIN_BUILTIN_MULT_1x32x32NS, BFIN_BUILTIN_SSASHIFT_1x32.
+ (bfin_init_builtins): Define them.
+ (bdesc_1arg, bdesc_2arg): Add some of them here, ...
+ (bfin_expand_builtin): ... and handle the others here.
+ * config/bfin/bfin.md (ssabssi2, ssroundsi2, ssashiftsi3,
+ flag_mul_macv2hi_parts_acconly_andcc0): New patterns.
+ (ss_absv2hi2): Renamed from absv2hi; use ss_abs code.
+ (ssashiftv2hi3, ssashifthi3, lshiftv2hi3, lshifthi3): Shift count
+ operand is only HImode.
+
+2007-04-29 Steven Bosscher <steven@gcc.gnu.org>
+
+ * regclass.c (scan_one_insn): Remove splitting of
+ two address insns.
+
+2007-04-28 Sandra Loosemore <sandra@codesourcery.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * config/mips/mips.h (SLOW_BYTE_ACCESS): Turn off for MIPS16.
+
+2007-04-28 Jan Hubicka <jh@suse.cz>
+
+ * config/alpha/alpha.c (alpha_output_mi_thunk_osf): Use
+ insn_locators_alloc instead of insn_locators_initialize;
+ call reset_block_changes.
+ * config/sparc/sparc.c (sparc_output_mi_thunk): Likewise.
+ * config/sh/sh.c (sparc_output_mi_thunk): Likewise.
+ * config/is64/ia64.c (ia64_output_mi_thunk): Likewise.
+ * config/rs6000/rs6000.c (rs6000_output_mi_thunk): Likewise.
+ * config/score/score.c (th_output_mi_thunk): Likewise.
+ * config/mips/mips.c (mips_output_mi_thunk): Likewise.
+ * cfglyaout.c (set_curr_insn_source_location, set_curr_insn_block):
+ tolerate uninitialized locator info.
+
+ Re-apply:
+ * function.c (init_function_start): Don't init line number info.
+ (expand_function_end): Update.
+ (reset_block_changes, record_block_change, finalize_block_changes,
+ check_block_change, free_block_changes): Kill.
+ * function.h (reset_block_changes, record_block_change,
+ finalize_block_changes, check_block_change, free_block_changes): Remove
+ prototypes.
+ (struct function): Remove ib_boundaries_block.
+ * emit-rtl.c (make_insn_raw, make_jump_insn_raw, make_call_insn_raw):
+ Use curr_insn_locator to initialize locator.
+ (emit_line_note): Remove.
+ * cfgexpand.c (expand_gimple_cond_expr): Update.
+ (construct_exit_block): Likewise.
+ (tree_expand_cfg): Initialize/finalize locators.
+ * expr.c (expand_expr_real): Update.
+ * cfglayout.c (line_locators_locs, line_locators_lines,
+ file_locators_locs, file_locators_files): Remove.
+ (set_block_levels): Move to cfgexpand.c.
+ (insn_locators_initialize): Remove.
+ (pass_insn_locators_initialize): Remove.
+ (locations_locators_locs, locations_locators_vals): New static vars.
+ (curr_location, last_location, curr_block, last_block, curr_rtl_loc):
+ Likewise.
+ (insn_locators_alloc, insn_locators_finalize,
+ set_curr_insn_source_location, set_curr_insn_block, curr_insn_locator):
+ New functions.
+ (locator_location): New.
+ (locator_line, locator_file): Rewrite.
+ * rtl.h (emit_line_note): Kill.
+ (insn_locators_alloc, insn_locators_finalize,
+ set_curr_insn_source_location, set_curr_insn_block, curr_insn_locator):
+ Declare.
+ * tree-inline.c (initialize_cfun): Do not initialize
+ ib_boundaries_block.
+ * passes.c (pass_insn_locators_initialize): Remove.
+
+2007-04-28 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-cfg.c (move_block_to_fn): Release bb from dominance
+ info. Update last_basic_block correctly.
+
2007-04-27 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/31701
@@ -196,7 +609,7 @@
2007-04-26 Anatoly Sokolov <aesok@post.ru>
- * config/avr/avr.c (avr_mcu_types): Add support for ATmega8HVA and
+ * config/avr/avr.c (avr_mcu_types): Add support for ATmega8HVA and
ATmega16HVA devices. Move AT90USB82 device to 'avr5' architecture.
* config/avr/avr.h (LINK_SPEC, CRT_BINUTILS_SPECS): (Ditto.).
* config/avr/t-avr (MULTILIB_MATCHES): (Ditto.).
@@ -383,12 +796,12 @@
2007-04-24 Richard Guenther <rguenther@suse.de>
Olga Golovanevsky <olga@il.ibm.com>
- * fold-const.c (multiple_of_p): Check for bottom
- to be zero.
+ * fold-const.c (multiple_of_p): Check for bottom
+ to be zero.
2007-04-24 Richard Henderson <rth@redhat.com>
- * libgcc2.h (AVOID_FP_TYPE_CONVERSION): Rename from
+ * libgcc2.h (AVOID_FP_TYPE_CONVERSION): Rename from
IS_IBM_EXTENDED. Also define in terms of WIDEST_HARDWARE_FP_SIZE.
* libgcc2.c (__floatdisf): Avoid double-word arithmetic when
looking for non-zero bits shifted out. Avoid a recursive call
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 315eb228109..b69d4a4a432 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20070428
+20070503
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index dbbba98ab74..7d214872e6b 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -733,7 +733,8 @@ RTL_H = $(RTL_BASE_H) genrtl.h
PARAMS_H = params.h params.def
BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def
TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h $(BUILTINS_DEF) \
- input.h statistics.h vec.h treestruct.def $(HASHTAB_H)
+ input.h statistics.h vec.h treestruct.def $(HASHTAB_H) \
+ double-int.h
BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
hard-reg-set.h cfghooks.h $(OBSTACK_H)
GCOV_IO_H = gcov-io.h gcov-iov.h auto-host.h
@@ -751,7 +752,7 @@ 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)
CFGLAYOUT_H = cfglayout.h $(BASIC_BLOCK_H)
-CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H) vecprim.h
+CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H) vecprim.h double-int.h
IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H)
IPA_REFERENCE_H = ipa-reference.h bitmap.h $(TREE_H)
IPA_TYPE_ESCAPE_H = ipa-type-escape.h $(TREE_H)
@@ -765,7 +766,7 @@ INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H) $(GGC_H)
C_PRAGMA_H = c-pragma.h $(CPPLIB_H)
C_TREE_H = c-tree.h $(C_COMMON_H) toplev.h $(DIAGNOSTIC_H)
-SYSTEM_H = system.h hwint.h double-int.h $(srcdir)/../include/libiberty.h
+SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
PREDICT_H = predict.h predict.def
CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \
$(srcdir)/../libcpp/include/cpplib.h
@@ -3065,7 +3066,7 @@ build/gengtype-lex.o : gengtype-lex.c gengtype.h $(BCONFIG_H) $(SYSTEM_H)
build/gengtype-parse.o : gengtype-parse.c gengtype.h $(BCONFIG_H) \
$(SYSTEM_H)
build/gengtype.o : gengtype.c $(BCONFIG_H) $(SYSTEM_H) gengtype.h \
- rtl.def insn-notes.def errors.h
+ rtl.def insn-notes.def errors.h double-int.h
build/genmddeps.o: genmddeps.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
$(GTM_H) $(RTL_BASE_H) errors.h gensupport.h
build/genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h \
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index ef55b792f87..e85a5a0d98b 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2007-05-02 Pascal Obry <obry@adacore.com>
+
+ * gnatchop.adb (Write_Source_Reference_Pragma): Change implementation
+ to use Stream_IO.File_Type. This is needed to make use of the UTF-8
+ encoding support of Stream_IO.
+ (Write_Unit): Idem.
+
+ * adaint.h, adaint.c (__gnat_os_filename): New routine. Returns the
+ filename and corresponding encoding to match the OS requirement.
+ (__gnat_file_exists): Do not call __gnat_stat() on Windows as this
+ routine will fail on specific devices like CON: AUX: ...
+
+ PR ada/29856: Add missing braces
+
2007-04-22 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR ada/31660
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 9952bc849f7..ff2d0a4bb01 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 1992-2006, Free Software Foundation, Inc. *
+ * Copyright (C) 1992-2007, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
@@ -619,6 +619,25 @@ __gnat_get_debuggable_suffix_ptr (int *len, const char **value)
return;
}
+/* Returns the OS filename and corresponding encoding. */
+
+void
+__gnat_os_filename (char *filename, char *w_filename,
+ char *os_name, int *o_length,
+ char *encoding, int *e_length)
+{
+#if defined (_WIN32) && ! defined (__vxworks) && ! defined (CROSS_DIRECTORY_STRUCTURE)
+ WS2SU (os_name, (TCHAR *)w_filename, o_length);
+ *o_length = strlen (os_name);
+ strcpy (encoding, "encoding=utf8");
+ *e_length = strlen (encoding);
+#else
+ strcpy (os_name, filename);
+ *o_length = strlen (filename);
+ *e_length = 0;
+#endif
+}
+
FILE *
__gnat_fopen (char *path, char *mode, int encoding)
{
@@ -991,8 +1010,10 @@ __gnat_readdir (DIR *dirp, char *buffer, int *len)
#elif defined (HAVE_READDIR_R)
/* If possible, try to use the thread-safe version. */
if (readdir_r (dirp, buffer) != NULL)
- *len = strlen (((struct dirent*) buffer)->d_name);
- return ((struct dirent*) buffer)->d_name;
+ {
+ *len = strlen (((struct dirent*) buffer)->d_name);
+ return ((struct dirent*) buffer)->d_name;
+ }
else
return NULL;
@@ -1513,9 +1534,19 @@ __gnat_stat (char *name, struct stat *statbuf)
int
__gnat_file_exists (char *name)
{
+#ifdef __MINGW32__
+ /* On Windows do not use __gnat_stat() because a bug in Microsoft
+ _stat() routine. When the system time-zone is set with a negative
+ offset the _stat() routine fails on specific files like CON: */
+ TCHAR wname [GNAT_MAX_PATH_LEN + 2];
+
+ S2WSU (wname, name, GNAT_MAX_PATH_LEN + 2);
+ return GetFileAttributes (wname) != INVALID_FILE_ATTRIBUTES;
+#else
struct stat statbuf;
return !__gnat_stat (name, &statbuf);
+#endif
}
int
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 6fbb93d9a03..131fe1f2dd5 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2006, Free Software Foundation, Inc. *
+ * Copyright (C) 1992-2007, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
@@ -47,10 +47,9 @@ typedef long OS_Time; /* Type corresponding to GNAT.OS_Lib.OS_Time */
extern int __gnat_max_path_len;
extern OS_Time __gnat_current_time (void);
-extern void __gnat_to_gm_time (OS_Time *, int *,
- int *, int *,
- int *, int *,
- int *);
+extern void __gnat_to_gm_time (OS_Time *, int *, int *,
+ int *, int *,
+ int *, int *);
extern int __gnat_get_maximum_file_name_length (void);
extern int __gnat_get_switches_case_sensitive (void);
extern int __gnat_get_file_names_case_sensitive (void);
@@ -72,7 +71,8 @@ extern int __gnat_mkdir (char *);
extern int __gnat_stat (char *,
struct stat *);
extern FILE *__gnat_fopen (char *, char *, int);
-extern FILE *__gnat_freopen (char *, char *, FILE *, int);
+extern FILE *__gnat_freopen (char *, char *, FILE *,
+ int);
extern int __gnat_open_read (char *, int);
extern int __gnat_open_rw (char *, int);
extern int __gnat_open_create (char *, int);
@@ -165,6 +165,9 @@ extern int __gnat_set_close_on_exec (int, int);
extern int __gnat_dup (int);
extern int __gnat_dup2 (int, int);
+extern void __gnat_os_filename (char *, char *, char *,
+ int *, char *, int *);
+
#ifdef __MINGW32__
extern void __gnat_plist_init (void);
#endif
@@ -175,7 +178,7 @@ extern void __gnat_plist_init (void);
#endif
/* This function returns the version of GCC being used. Here it's GCC 3. */
-extern int get_gcc_version (void);
+extern int get_gcc_version (void);
-extern int __gnat_binder_supports_auto_init (void);
-extern int __gnat_sals_init_using_constructors (void);
+extern int __gnat_binder_supports_auto_init (void);
+extern int __gnat_sals_init_using_constructors (void);
diff --git a/gcc/ada/gnatchop.adb b/gcc/ada/gnatchop.adb
index 086548c5b81..713e830e9b2 100644
--- a/gcc/ada/gnatchop.adb
+++ b/gcc/ada/gnatchop.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2006, AdaCore --
+-- Copyright (C) 1998-2007, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -24,19 +24,21 @@
-- --
------------------------------------------------------------------------------
-with Ada.Command_Line; use Ada.Command_Line;
-with Ada.Text_IO; use Ada.Text_IO;
+with Ada.Characters.Conversions; use Ada.Characters.Conversions;
+with Ada.Command_Line; use Ada.Command_Line;
+with Ada.Directories; use Ada.Directories;
+with Ada.Streams.Stream_IO; use Ada.Streams;
+with Ada.Text_IO; use Ada.Text_IO;
+with System.CRTL; use System; use System.CRTL;
-with GNAT.Command_Line; use GNAT.Command_Line;
-with GNAT.OS_Lib; use GNAT.OS_Lib;
+with GNAT.Command_Line; use GNAT.Command_Line;
+with GNAT.OS_Lib; use GNAT.OS_Lib;
with GNAT.Heap_Sort_G;
with GNAT.Table;
with Gnatvsn;
with Hostparm;
-with System.CRTL; use System.CRTL;
-
procedure Gnatchop is
Terminate_Program : exception;
@@ -155,7 +157,6 @@ procedure Gnatchop is
Bufferg : String_Access;
-- Pointer to buffer containing configuration pragmas to be
-- prepended. Null if no pragmas to be prepended.
-
end record;
-- The following table stores the unit offset information
@@ -227,8 +228,7 @@ procedure Gnatchop is
function Locate_Executable
(Program_Name : String;
- Look_For_Prefix : Boolean := True)
- return String_Access;
+ Look_For_Prefix : Boolean := True) return String_Access;
-- Locate executable for given program name. This takes into account
-- the target-prefix of the current command, if Look_For_Prefix is True.
@@ -241,8 +241,7 @@ procedure Gnatchop is
function Get_EOL
(Source : not null access String;
- Start : Positive)
- return EOL_String;
+ Start : Positive) return EOL_String;
-- Return the line terminator used in the passed string
procedure Parse_EOL
@@ -307,8 +306,7 @@ procedure Gnatchop is
function Get_Config_Pragmas
(Input : File_Num;
- U : Unit_Num)
- return String_Access;
+ U : Unit_Num) return String_Access;
-- Call to read configuration pragmas from given unit entry, and
-- return a buffer containing the pragmas to be appended to
-- following units. Input is the file number for the chop file and
@@ -317,7 +315,7 @@ procedure Gnatchop is
procedure Write_Source_Reference_Pragma
(Info : Unit_Info;
Line : Line_Num;
- FD : File_Descriptor;
+ File : Stream_IO.File_Type;
EOL : EOL_String;
Success : in out Boolean);
-- If Success is True on entry, writes a source reference pragma using
@@ -338,7 +336,7 @@ procedure Gnatchop is
-- dup --
---------
- function dup (handle : File_Descriptor) return File_Descriptor is
+ function dup (handle : File_Descriptor) return File_Descriptor is
begin
return File_Descriptor (System.CRTL.dup (int (handle)));
end dup;
@@ -1461,7 +1459,6 @@ procedure Gnatchop is
Close (FD);
return Success;
-
end Write_Chopped_Files;
-----------------------
@@ -1562,11 +1559,11 @@ procedure Gnatchop is
procedure Write_Source_Reference_Pragma
(Info : Unit_Info;
Line : Line_Num;
- FD : File_Descriptor;
+ File : Stream_IO.File_Type;
EOL : EOL_String;
Success : in out Boolean)
is
- FTE : File_Entry renames File.Table (Info.Chop_File);
+ FTE : File_Entry renames Gnatchop.File.Table (Info.Chop_File);
Nam : String_Access;
begin
@@ -1578,7 +1575,7 @@ procedure Gnatchop is
end if;
declare
- Reference : aliased String :=
+ Reference : String :=
"pragma Source_Reference (000000, """
& Nam.all & """);" & EOL.Str;
@@ -1601,9 +1598,13 @@ procedure Gnatchop is
pragma Assert (Lin = 0);
- Success :=
- Write (FD, Reference'Address, Reference'Length)
- = Reference'Length;
+ begin
+ String'Write (Stream_IO.Stream (File), Reference);
+ Success := True;
+ exception
+ when others =>
+ Success := False;
+ end;
end;
end if;
end Write_Source_Reference_Pragma;
@@ -1618,12 +1619,36 @@ procedure Gnatchop is
TS_Time : OS_Time;
Success : out Boolean)
is
- Info : Unit_Info renames Unit.Table (Num);
- FD : File_Descriptor;
- Name : aliased constant String := Info.File_Name.all & ASCII.NUL;
- Length : File_Offset;
- EOL : constant EOL_String :=
- Get_EOL (Source, Source'First + Info.Offset);
+
+ procedure OS_Filename
+ (Name : String;
+ W_Name : Wide_String;
+ OS_Name : Address;
+ N_Length : access Natural;
+ Encoding : Address;
+ E_Length : access Natural);
+ pragma Import (C, OS_Filename, "__gnat_os_filename");
+ -- Returns in OS_Name the proper name for the OS when used with the
+ -- returned Encoding value. For example on Windows this will return the
+ -- UTF-8 encoded name into OS_Name and set Encoding to encoding=utf8
+ -- (form parameter Stream_IO).
+ -- Name is the filename and W_Name the same filename in Unicode 16 bits
+ -- (this corresponds to Win32 Unicode ISO/IEC 10646). N_Length and
+ -- E_Length are the length returned in OS_Name and Encoding
+ -- respectively.
+
+ Info : Unit_Info renames Unit.Table (Num);
+ Name : aliased constant String := Info.File_Name.all & ASCII.NUL;
+ W_Name : aliased constant Wide_String := To_Wide_String (Name);
+ EOL : constant EOL_String :=
+ Get_EOL (Source, Source'First + Info.Offset);
+
+ OS_Name : aliased String (1 .. Name'Length * 2);
+ O_Length : aliased Natural := OS_Name'Length;
+ Encoding : aliased String (1 .. 64);
+ E_Length : aliased Natural := Encoding'Length;
+
+ Length : File_Offset;
begin
-- Skip duplicated files
@@ -1634,60 +1659,77 @@ procedure Gnatchop is
return;
end if;
- if Overwrite_Files then
- FD := Create_File (Name'Address, Binary);
- else
- FD := Create_New_File (Name'Address, Binary);
- end if;
-
- Success := FD /= Invalid_FD;
+ -- Get OS filename
- if not Success then
- Error_Msg ("cannot create " & Info.File_Name.all);
- return;
- end if;
+ OS_Filename
+ (Name, W_Name,
+ OS_Name'Address, O_Length'Access,
+ Encoding'Address, E_Length'Access);
- -- A length of 0 indicates that the rest of the file belongs to
- -- this unit. The actual length must be calculated now. Take into
- -- account that the last character (EOF) must not be written.
+ declare
+ E_Name : constant String := OS_Name (1 .. O_Length);
+ C_Name : aliased constant String := E_Name & ASCII.Nul;
+ OS_Encoding : constant String := Encoding (1 .. E_Length);
+ File : Stream_IO.File_Type;
+ begin
+ begin
+ if not Overwrite_Files and then Exists (E_Name) then
+ raise Stream_IO.Name_Error;
+ else
+ Stream_IO.Create
+ (File, Stream_IO.Out_File, E_Name, OS_Encoding);
+ Success := True;
+ end if;
+ exception
+ when Stream_IO.Name_Error | Stream_IO.Use_Error =>
+ Error_Msg ("cannot create " & Info.File_Name.all);
+ return;
+ end;
- if Info.Length = 0 then
- Length := Source'Last - (Source'First + Info.Offset);
- else
- Length := Info.Length;
- end if;
+ -- A length of 0 indicates that the rest of the file belongs to
+ -- this unit. The actual length must be calculated now. Take into
+ -- account that the last character (EOF) must not be written.
- -- Prepend configuration pragmas if necessary
+ if Info.Length = 0 then
+ Length := Source'Last - (Source'First + Info.Offset);
+ else
+ Length := Info.Length;
+ end if;
- if Success and then Info.Bufferg /= null then
- Write_Source_Reference_Pragma (Info, 1, FD, EOL, Success);
- Success :=
- Write (FD, Info.Bufferg.all'Address, Info.Bufferg'Length) =
- Info.Bufferg'Length;
- end if;
+ -- Prepend configuration pragmas if necessary
- Write_Source_Reference_Pragma (Info, Info.Start_Line, FD, EOL, Success);
+ if Success and then Info.Bufferg /= null then
+ Write_Source_Reference_Pragma (Info, 1, File, EOL, Success);
- if Success then
- Success := Write (FD, Source (Source'First + Info.Offset)'Address,
- Length) = Length;
- end if;
+ String'Write (Stream_IO.Stream (File), Info.Bufferg.all);
+ end if;
- if not Success then
- Error_Msg ("disk full writing " & Info.File_Name.all);
- return;
- end if;
+ Write_Source_Reference_Pragma
+ (Info, Info.Start_Line, File, EOL, Success);
- if not Quiet_Mode then
- Put_Line (" " & Info.File_Name.all);
- end if;
+ if Success then
+ begin
+ String'Write
+ (Stream_IO.Stream (File),
+ Source (Source'First + Info.Offset ..
+ Source'First + Info.Offset + Length - 1));
+ exception
+ when Stream_IO.Use_Error | Stream_IO.Device_Error =>
+ Error_Msg ("disk full writing " & Info.File_Name.all);
+ return;
+ end;
+ end if;
- Close (FD);
+ if not Quiet_Mode then
+ Put_Line (" " & Info.File_Name.all);
+ end if;
- if Preserve_Mode then
- File_Time_Stamp (Name'Address, TS_Time);
- end if;
+ Stream_IO.Close (File);
+ if Preserve_Mode then
+ File_Time_Stamp (C_Name'Address, TS_Time);
+ end if;
+ end;
end Write_Unit;
-- Start of processing for gnatchop
diff --git a/gcc/c-common.c b/gcc/c-common.c
index fbe44b229ff..7b27a08dd6b 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -4093,6 +4093,15 @@ strip_pointer_operator (tree t)
return t;
}
+/* Recursively remove pointer or array type from TYPE. */
+tree
+strip_pointer_or_array_types (tree t)
+{
+ while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
+ t = TREE_TYPE (t);
+ return t;
+}
+
/* Used to compare case labels. K1 and K2 are actually tree nodes
representing case labels, or NULL_TREE for a `default' label.
Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
diff --git a/gcc/c-common.h b/gcc/c-common.h
index 793bd0e9a73..14652600165 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -730,6 +730,7 @@ extern bool c_promoting_integer_type_p (tree);
extern int self_promoting_args_p (tree);
extern tree strip_array_types (tree);
extern tree strip_pointer_operator (tree);
+extern tree strip_pointer_or_array_types (tree);
extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
/* This is the basic parsing function. */
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 643ff207108..da1e8552e24 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1244,6 +1244,10 @@ maybe_dump_rtl_for_tree_stmt (tree stmt, rtx since)
}
}
+/* Maps the blocks that do not contain tree labels to rtx labels. */
+
+static struct pointer_map_t *lab_rtx_for_bb;
+
/* Returns the label_rtx expression for a label starting basic block BB. */
static rtx
@@ -1251,12 +1255,17 @@ label_rtx_for_bb (basic_block bb)
{
tree_stmt_iterator tsi;
tree lab, lab_stmt;
+ void **elt;
if (bb->flags & BB_RTL)
return block_label (bb);
- /* We cannot use tree_block_label, as we no longer have stmt annotations.
- TODO -- avoid creating the new tree labels. */
+ elt = pointer_map_contains (lab_rtx_for_bb, bb);
+ if (elt)
+ return *elt;
+
+ /* Find the tree label if it is present. */
+
for (tsi = tsi_start (bb_stmt_list (bb)); !tsi_end_p (tsi); tsi_next (&tsi))
{
lab_stmt = tsi_stmt (tsi);
@@ -1270,10 +1279,9 @@ label_rtx_for_bb (basic_block bb)
return label_rtx (lab);
}
- lab = create_artificial_label ();
- lab_stmt = build1 (LABEL_EXPR, void_type_node, lab);
- tsi_link_before (&tsi, lab_stmt, TSI_NEW_STMT);
- return label_rtx (lab);
+ elt = pointer_map_insert (lab_rtx_for_bb, bb);
+ *elt = gen_label_rtx ();
+ return *elt;
}
/* A subroutine of expand_gimple_basic_block. Expand one COND_EXPR.
@@ -1297,8 +1305,8 @@ expand_gimple_cond_expr (basic_block bb, tree stmt)
extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
if (EXPR_LOCUS (stmt))
{
- emit_line_note (*(EXPR_LOCUS (stmt)));
- record_block_change (TREE_BLOCK (stmt));
+ set_curr_insn_source_location (*(EXPR_LOCUS (stmt)));
+ set_curr_insn_block (TREE_BLOCK (stmt));
}
/* These flags have no purpose in RTL land. */
@@ -1313,7 +1321,7 @@ expand_gimple_cond_expr (basic_block bb, tree stmt)
add_reg_br_prob_note (last, true_edge->probability);
maybe_dump_rtl_for_tree_stmt (stmt, last);
if (true_edge->goto_locus)
- emit_line_note (*true_edge->goto_locus);
+ set_curr_insn_source_location (*true_edge->goto_locus);
false_edge->flags |= EDGE_FALLTHRU;
return NULL;
}
@@ -1323,7 +1331,7 @@ expand_gimple_cond_expr (basic_block bb, tree stmt)
add_reg_br_prob_note (last, false_edge->probability);
maybe_dump_rtl_for_tree_stmt (stmt, last);
if (false_edge->goto_locus)
- emit_line_note (*false_edge->goto_locus);
+ set_curr_insn_source_location (*false_edge->goto_locus);
true_edge->flags |= EDGE_FALLTHRU;
return NULL;
}
@@ -1354,7 +1362,7 @@ expand_gimple_cond_expr (basic_block bb, tree stmt)
maybe_dump_rtl_for_tree_stmt (stmt, last2);
if (false_edge->goto_locus)
- emit_line_note (*false_edge->goto_locus);
+ set_curr_insn_source_location (*false_edge->goto_locus);
return new_bb;
}
@@ -1477,6 +1485,7 @@ expand_gimple_basic_block (basic_block bb)
rtx note, last;
edge e;
edge_iterator ei;
+ void **elt;
if (dump_file)
{
@@ -1510,20 +1519,32 @@ expand_gimple_basic_block (basic_block bb)
tsi = tsi_start (stmts);
if (!tsi_end_p (tsi))
- stmt = tsi_stmt (tsi);
+ {
+ stmt = tsi_stmt (tsi);
+ if (TREE_CODE (stmt) != LABEL_EXPR)
+ stmt = NULL_TREE;
+ }
- if (stmt && TREE_CODE (stmt) == LABEL_EXPR)
+ elt = pointer_map_contains (lab_rtx_for_bb, bb);
+
+ if (stmt || elt)
{
last = get_last_insn ();
- expand_expr_stmt (stmt);
+ if (stmt)
+ {
+ expand_expr_stmt (stmt);
+ tsi_next (&tsi);
+ }
+
+ if (elt)
+ emit_label (*elt);
/* Java emits line number notes in the top of labels.
??? Make this go away once line number notes are obsoleted. */
BB_HEAD (bb) = NEXT_INSN (last);
if (NOTE_P (BB_HEAD (bb)))
BB_HEAD (bb) = NEXT_INSN (BB_HEAD (bb));
- tsi_next (&tsi);
note = emit_note_after (NOTE_INSN_BASIC_BLOCK, BB_HEAD (bb));
maybe_dump_rtl_for_tree_stmt (stmt, last);
@@ -1608,7 +1629,7 @@ expand_gimple_basic_block (basic_block bb)
{
emit_jump (label_rtx_for_bb (e->dest));
if (e->goto_locus)
- emit_line_note (*e->goto_locus);
+ set_curr_insn_source_location (*e->goto_locus);
e->flags &= ~EDGE_FALLTHRU;
}
@@ -1679,6 +1700,19 @@ construct_init_block (void)
return init_block;
}
+/* For each lexical block, set BLOCK_NUMBER to the depth at which it is
+ found in the block tree. */
+
+static void
+set_block_levels (tree block, int level)
+{
+ while (block)
+ {
+ BLOCK_NUMBER (block) = level;
+ set_block_levels (BLOCK_SUBBLOCKS (block), level + 1);
+ block = BLOCK_CHAIN (block);
+ }
+}
/* Create a block containing landing pads and similar stuff. */
@@ -1703,7 +1737,7 @@ construct_exit_block (void)
input_location = cfun->function_end_locus;
/* The following insns belong to the top scope. */
- record_block_change (DECL_INITIAL (current_function_decl));
+ set_curr_insn_block (DECL_INITIAL (current_function_decl));
/* Generate rtl for function exit. */
expand_function_end ();
@@ -1831,8 +1865,16 @@ tree_expand_cfg (void)
/* Some backends want to know that we are expanding to RTL. */
currently_expanding_to_rtl = 1;
- /* Prepare the rtl middle end to start recording block changes. */
- reset_block_changes ();
+ insn_locators_alloc ();
+ if (!DECL_BUILT_IN (current_function_decl))
+ set_curr_insn_source_location (DECL_SOURCE_LOCATION (current_function_decl));
+ set_curr_insn_block (DECL_INITIAL (current_function_decl));
+ prologue_locator = curr_insn_locator ();
+
+ /* Make sure first insn is a note even if we don't want linenums.
+ This makes sure the first insn will never be deleted.
+ Also, final expects a note to appear there. */
+ emit_note (NOTE_INSN_DELETED);
/* Mark arrays indexed with non-constant indices with TREE_ADDRESSABLE. */
discover_nonconstant_array_refs ();
@@ -1875,10 +1917,14 @@ tree_expand_cfg (void)
FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
e->flags &= ~EDGE_EXECUTABLE;
+ lab_rtx_for_bb = pointer_map_create ();
FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR, next_bb)
bb = expand_gimple_basic_block (bb);
+ pointer_map_destroy (lab_rtx_for_bb);
construct_exit_block ();
+ set_curr_insn_block (DECL_INITIAL (current_function_decl));
+ insn_locators_finalize ();
/* We're done expanding trees to RTL. */
currently_expanding_to_rtl = 0;
@@ -1909,8 +1955,6 @@ tree_expand_cfg (void)
more CONCATs anywhere. */
generating_concat_p = 0;
- finalize_block_changes ();
-
if (dump_file)
{
fprintf (dump_file,
@@ -1941,6 +1985,9 @@ tree_expand_cfg (void)
return_label = NULL;
naked_return_label = NULL;
free_histograms ();
+ /* Tag the blocks with a depth number so that change_scope can find
+ the common parent easily. */
+ set_block_levels (DECL_INITIAL (cfun->decl), 0);
return 0;
}
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 01784319c19..b40695fa306 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -48,7 +48,6 @@ static void record_effective_endpoints (void);
static rtx label_for_bb (basic_block);
static void fixup_reorder_chain (void);
-static void set_block_levels (tree, int);
static void change_scope (rtx, tree, tree);
void verify_insn_chain (void);
@@ -232,120 +231,111 @@ record_effective_endpoints (void)
than the following one. Similarly for the other properties. */
static VEC(int,heap) *block_locators_locs;
static GTY(()) VEC(tree,gc) *block_locators_blocks;
-static VEC(int,heap) *line_locators_locs;
-static VEC(int,heap) *line_locators_lines;
-static VEC(int,heap) *file_locators_locs;
-static GTY(()) varray_type file_locators_files;
+static VEC(int,heap) *locations_locators_locs;
+DEF_VEC_O(location_t);
+DEF_VEC_ALLOC_O(location_t,heap);
+static VEC(location_t,heap) *locations_locators_vals;
int prologue_locator;
int epilogue_locator;
-/* During the RTL expansion the lexical blocks and line numbers are
- represented via INSN_NOTEs. Replace them by representation using
- INSN_LOCATORs. */
+/* Hold current location information and last location information, so the
+ datastructures are built lazilly only when some instructions in given
+ place are needed. */
+location_t curr_location, last_location;
+static tree curr_block, last_block;
+static int curr_rtl_loc = -1;
-unsigned int
-insn_locators_initialize (void)
+/* Allocate insn locator datastructure. */
+void
+insn_locators_alloc (void)
{
- tree block = NULL;
- tree last_block = NULL;
- rtx insn, next;
- int loc = 0;
- int line_number = 0, last_line_number = 0;
- const char *file_name = NULL, *last_file_name = NULL;
-
prologue_locator = epilogue_locator = 0;
block_locators_locs = VEC_alloc (int, heap, 32);
block_locators_blocks = VEC_alloc (tree, gc, 32);
- line_locators_locs = VEC_alloc (int, heap, 32);
- line_locators_lines = VEC_alloc (int, heap, 32);
- file_locators_locs = VEC_alloc (int, heap, 32);
- VARRAY_CHAR_PTR_INIT (file_locators_files, 32, "file_locators_files");
-
- for (insn = get_insns (); insn; insn = next)
- {
- int active = 0;
-
- next = NEXT_INSN (insn);
-
- if (NOTE_P (insn))
- {
- gcc_assert (NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_BEG
- && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_END);
- if (NOTE_LINE_NUMBER (insn) > 0)
- {
- expanded_location xloc;
- NOTE_EXPANDED_LOCATION (xloc, insn);
- line_number = xloc.line;
- file_name = xloc.file;
- delete_insn (insn);
- }
- }
- else
- active = (active_insn_p (insn)
- && GET_CODE (PATTERN (insn)) != ADDR_VEC
- && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
-
- check_block_change (insn, &block);
+ locations_locators_locs = VEC_alloc (int, heap, 32);
+ locations_locators_vals = VEC_alloc (location_t, heap, 32);
+
+#ifdef USE_MAPPED_LOCATION
+ last_location = -1;
+ curr_location = -1;
+#else
+ last_location.line = -1;
+ curr_location.line = -1;
+#endif
+ curr_block = NULL;
+ last_block = NULL;
+ curr_rtl_loc = 0;
+}
- if (active
- || !next
- || (!prologue_locator && file_name))
- {
- if (last_block != block)
- {
- loc++;
- VEC_safe_push (int, heap, block_locators_locs, loc);
- VEC_safe_push (tree, gc, block_locators_blocks, block);
- last_block = block;
- }
- if (last_line_number != line_number)
- {
- loc++;
- VEC_safe_push (int, heap, line_locators_locs, loc);
- VEC_safe_push (int, heap, line_locators_lines, line_number);
- last_line_number = line_number;
- }
- if (last_file_name != file_name)
- {
- loc++;
- VEC_safe_push (int, heap, file_locators_locs, loc);
- VARRAY_PUSH_CHAR_PTR (file_locators_files, (char *) file_name);
- last_file_name = file_name;
- }
- if (!prologue_locator && file_name)
- prologue_locator = loc;
- if (!next)
- epilogue_locator = loc;
- if (active)
- INSN_LOCATOR (insn) = loc;
- }
- }
+/* At the end of emit stage, clear current location. */
+void
+insn_locators_finalize (void)
+{
+ if (curr_rtl_loc >= 0)
+ epilogue_locator = curr_insn_locator ();
+ curr_rtl_loc = -1;
+}
- /* Tag the blocks with a depth number so that change_scope can find
- the common parent easily. */
- set_block_levels (DECL_INITIAL (cfun->decl), 0);
+/* Set current location. */
+void
+set_curr_insn_source_location (location_t location)
+{
+ /* IV opts calls into RTL expansion to compute costs of operations. At this
+ time locators are not initialized. */
+ if (curr_rtl_loc == -1)
+ return;
+#ifdef USE_MAPPED_LOCATION
+ if (location == last_location)
+ return;
+#else
+ if (location.file && last_location.file
+ && !strcmp (location.file, last_location.file)
+ && location.line == last_location.line)
+ return;
+#endif
+ curr_location = location;
+}
- free_block_changes ();
- return 0;
+/* Set current scope block. */
+void
+set_curr_insn_block (tree b)
+{
+ /* IV opts calls into RTL expansion to compute costs of operations. At this
+ time locators are not initialized. */
+ if (curr_rtl_loc == -1)
+ return;
+ if (b)
+ curr_block = b;
}
-struct tree_opt_pass pass_insn_locators_initialize =
+/* Return current insn locator. */
+int
+curr_insn_locator (void)
{
- "locators", /* name */
- NULL, /* gate */
- insn_locators_initialize, /* execute */
- NULL, /* sub */
- NULL, /* next */
- 0, /* static_pass_number */
- 0, /* tv_id */
- 0, /* properties_required */
- 0, /* properties_provided */
- 0, /* properties_destroyed */
- 0, /* todo_flags_start */
- TODO_dump_func, /* todo_flags_finish */
- 0 /* letter */
-};
+ if (curr_rtl_loc == -1)
+ return 0;
+ if (last_block != curr_block)
+ {
+ curr_rtl_loc++;
+ VEC_safe_push (int, heap, block_locators_locs, curr_rtl_loc);
+ VEC_safe_push (tree, gc, block_locators_blocks, curr_block);
+ last_block = curr_block;
+ }
+#ifdef USE_MAPPED_LOCATION
+ if (last_location != curr_location)
+#else
+ if (last_location.file != curr_location.file
+ || last_location.line != curr_location.line)
+#endif
+ {
+ curr_rtl_loc++;
+ VEC_safe_push (int, heap, locations_locators_locs, curr_rtl_loc);
+ VEC_safe_push (location_t, heap, locations_locators_vals, &curr_location);
+ last_location = curr_location;
+ }
+ return curr_rtl_loc;
+}
static unsigned int
into_cfg_layout_mode (void)
@@ -401,20 +391,6 @@ struct tree_opt_pass pass_outof_cfg_layout_mode =
TODO_dump_func, /* todo_flags_finish */
0 /* letter */
};
-
-/* For each lexical block, set BLOCK_NUMBER to the depth at which it is
- found in the block tree. */
-
-static void
-set_block_levels (tree block, int level)
-{
- while (block)
- {
- BLOCK_NUMBER (block) = level;
- set_block_levels (BLOCK_SUBBLOCKS (block), level + 1);
- block = BLOCK_CHAIN (block);
- }
-}
/* Return sope resulting from combination of S1 and S2. */
static tree
@@ -514,18 +490,16 @@ insn_scope (rtx insn)
}
/* Return line number of the statement specified by the locator. */
-int
-locator_line (int loc)
+static location_t
+locator_location (int loc)
{
- int max = VEC_length (int, line_locators_locs);
+ int max = VEC_length (int, locations_locators_locs);
int min = 0;
- if (!max || !loc)
- return 0;
while (1)
{
int pos = (min + max) / 2;
- int tmp = VEC_index (int, line_locators_locs, pos);
+ int tmp = VEC_index (int, locations_locators_locs, pos);
if (tmp <= loc && min != pos)
min = pos;
@@ -537,7 +511,19 @@ locator_line (int loc)
break;
}
}
- return VEC_index (int, line_locators_lines, min);
+ return *VEC_index (location_t, locations_locators_vals, min);
+}
+
+/* Return source line of the statement that produced this insn. */
+int
+locator_line (int loc)
+{
+ expanded_location xloc;
+ if (!loc)
+ return 0;
+ else
+ xloc = expand_location (locator_location (loc));
+ return xloc.line;
}
/* Return line number of the statement that produced this insn. */
@@ -551,27 +537,12 @@ insn_line (rtx insn)
const char *
locator_file (int loc)
{
- int max = VEC_length (int, file_locators_locs);
- int min = 0;
-
- if (!max || !loc)
- return NULL;
- while (1)
- {
- int pos = (min + max) / 2;
- int tmp = VEC_index (int, file_locators_locs, pos);
-
- if (tmp <= loc && min != pos)
- min = pos;
- else if (tmp > loc && max != pos)
- max = pos;
- else
- {
- min = pos;
- break;
- }
- }
- return VARRAY_CHAR_PTR (file_locators_files, min);
+ expanded_location xloc;
+ if (!loc)
+ return 0;
+ else
+ xloc = expand_location (locator_location (loc));
+ return xloc.file;
}
/* Return source file of the statement that produced this insn. */
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 52160635bb9..ef70a71c981 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -26,6 +26,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
/* For rtx_code. */
#include "rtl.h"
#include "vecprim.h"
+#include "double-int.h"
/* Structure to hold decision about unrolling/peeling. */
enum lpt_dec
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 32bb92c89d0..55d35a45f59 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -8264,8 +8264,6 @@ alpha_output_mi_thunk_osf (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
HOST_WIDE_INT hi, lo;
rtx this, insn, funexp;
- reset_block_changes ();
-
/* We always require a valid GP. */
emit_insn (gen_prologue_ldgp ());
emit_note (NOTE_INSN_PROLOGUE_END);
@@ -8342,7 +8340,7 @@ alpha_output_mi_thunk_osf (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
instruction scheduling worth while. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
insn = get_insns ();
- insn_locators_initialize ();
+ insn_locators_alloc ();
shorten_branches (insn);
final_start_function (insn, file, 1);
final (insn, file, 1);
diff --git a/gcc/config/arm/bpabi.S b/gcc/config/arm/bpabi.S
index c9f6d21c06d..1f083465980 100644
--- a/gcc/config/arm/bpabi.S
+++ b/gcc/config/arm/bpabi.S
@@ -42,11 +42,18 @@
#ifdef L_aeabi_lcmp
ARM_FUNC_START aeabi_lcmp
- subs ip, xxl, yyl
- sbcs ip, xxh, yyh
- do_it eq
- COND(sub,s,eq) ip, xxl, yyl
- mov r0, ip
+ cmp xxh, yyh
+ do_it lt
+ movlt r0, #-1
+ do_it gt
+ movgt r0, #1
+ do_it ne
+ RETc(ne)
+ subs r0, xxl, yyl
+ do_it lo
+ movlo r0, #-1
+ do_it hi
+ movhi r0, #1
RET
FUNC_END aeabi_lcmp
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index 16b40968523..727f2ca9b81 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -1302,6 +1302,15 @@ print_operand (FILE *file, rtx x, char code)
gcc_assert (REGNO (x) == REG_A0 || REGNO (x) == REG_A1);
fprintf (file, "%s.x", reg_names[REGNO (x)]);
}
+ else if (code == 'v')
+ {
+ if (REGNO (x) == REG_A0)
+ fprintf (file, "AV0");
+ else if (REGNO (x) == REG_A1)
+ fprintf (file, "AV1");
+ else
+ output_operand_lossage ("invalid operand for code '%c'", code);
+ }
else if (code == 'D')
{
fprintf (file, "%s", dregs_pair_names[REGNO (x)]);
@@ -4627,16 +4636,21 @@ enum bfin_builtins
BFIN_BUILTIN_MIN_1X16,
BFIN_BUILTIN_MAX_1X16,
+ BFIN_BUILTIN_SUM_2X16,
BFIN_BUILTIN_DIFFHL_2X16,
BFIN_BUILTIN_DIFFLH_2X16,
BFIN_BUILTIN_SSADD_1X32,
BFIN_BUILTIN_SSSUB_1X32,
BFIN_BUILTIN_NORM_1X32,
+ BFIN_BUILTIN_ROUND_1X32,
BFIN_BUILTIN_NEG_1X32,
+ BFIN_BUILTIN_ABS_1X32,
BFIN_BUILTIN_MIN_1X32,
BFIN_BUILTIN_MAX_1X32,
BFIN_BUILTIN_MULT_1X32,
+ BFIN_BUILTIN_MULT_1X32X32,
+ BFIN_BUILTIN_MULT_1X32X32NS,
BFIN_BUILTIN_MULHISILL,
BFIN_BUILTIN_MULHISILH,
@@ -4647,6 +4661,7 @@ enum bfin_builtins
BFIN_BUILTIN_LSHIFT_2X16,
BFIN_BUILTIN_SSASHIFT_1X16,
BFIN_BUILTIN_SSASHIFT_2X16,
+ BFIN_BUILTIN_SSASHIFT_1X32,
BFIN_BUILTIN_CPLX_MUL_16,
BFIN_BUILTIN_CPLX_MAC_16,
@@ -4755,6 +4770,8 @@ bfin_init_builtins (void)
def_builtin ("__builtin_bfin_norm_fr1x16", short_ftype_int,
BFIN_BUILTIN_NORM_1X16);
+ def_builtin ("__builtin_bfin_sum_fr2x16", short_ftype_v2hi,
+ BFIN_BUILTIN_SUM_2X16);
def_builtin ("__builtin_bfin_diff_hl_fr2x16", short_ftype_v2hi,
BFIN_BUILTIN_DIFFHL_2X16);
def_builtin ("__builtin_bfin_diff_lh_fr2x16", short_ftype_v2hi,
@@ -4775,10 +4792,18 @@ bfin_init_builtins (void)
BFIN_BUILTIN_SSSUB_1X32);
def_builtin ("__builtin_bfin_negate_fr1x32", int_ftype_int,
BFIN_BUILTIN_NEG_1X32);
+ def_builtin ("__builtin_bfin_abs_fr1x32", int_ftype_int,
+ BFIN_BUILTIN_ABS_1X32);
def_builtin ("__builtin_bfin_norm_fr1x32", short_ftype_int,
BFIN_BUILTIN_NORM_1X32);
+ def_builtin ("__builtin_bfin_round_fr1x32", short_ftype_int,
+ BFIN_BUILTIN_ROUND_1X32);
def_builtin ("__builtin_bfin_mult_fr1x32", int_ftype_short_short,
BFIN_BUILTIN_MULT_1X32);
+ def_builtin ("__builtin_bfin_mult_fr1x32x32", int_ftype_int_int,
+ BFIN_BUILTIN_MULT_1X32X32);
+ def_builtin ("__builtin_bfin_mult_fr1x32x32NS", int_ftype_int_int,
+ BFIN_BUILTIN_MULT_1X32X32NS);
/* Shifts. */
def_builtin ("__builtin_bfin_shl_fr1x16", short_ftype_int_int,
@@ -4789,6 +4814,8 @@ bfin_init_builtins (void)
BFIN_BUILTIN_LSHIFT_1X16);
def_builtin ("__builtin_bfin_lshl_fr2x16", v2hi_ftype_v2hi_int,
BFIN_BUILTIN_LSHIFT_2X16);
+ def_builtin ("__builtin_bfin_shl_fr1x32", int_ftype_int_int,
+ BFIN_BUILTIN_SSASHIFT_1X32);
/* Complex numbers. */
def_builtin ("__builtin_bfin_cmplx_mul", v2hi_ftype_v2hi_v2hi,
@@ -4816,6 +4843,7 @@ static const struct builtin_description bdesc_2arg[] =
{ CODE_FOR_ssashifthi3, "__builtin_bfin_shl_fr1x16", BFIN_BUILTIN_SSASHIFT_1X16, -1 },
{ CODE_FOR_lshiftv2hi3, "__builtin_bfin_lshl_fr2x16", BFIN_BUILTIN_LSHIFT_2X16, -1 },
{ CODE_FOR_lshifthi3, "__builtin_bfin_lshl_fr1x16", BFIN_BUILTIN_LSHIFT_1X16, -1 },
+ { CODE_FOR_ssashiftsi3, "__builtin_bfin_shl_fr1x32", BFIN_BUILTIN_SSASHIFT_1X32, -1 },
{ CODE_FOR_sminhi3, "__builtin_bfin_min_fr1x16", BFIN_BUILTIN_MIN_1X16, -1 },
{ CODE_FOR_smaxhi3, "__builtin_bfin_max_fr1x16", BFIN_BUILTIN_MAX_1X16, -1 },
@@ -4848,12 +4876,14 @@ static const struct builtin_description bdesc_1arg[] =
{ CODE_FOR_abshi2, "__builtin_bfin_abs_fr1x16", BFIN_BUILTIN_ABS_1X16, 0 },
{ CODE_FOR_signbitssi2, "__builtin_bfin_norm_fr1x32", BFIN_BUILTIN_NORM_1X32, 0 },
+ { CODE_FOR_ssroundsi2, "__builtin_bfin_round_fr1x32", BFIN_BUILTIN_ROUND_1X32, 0 },
{ CODE_FOR_ssnegsi2, "__builtin_bfin_negate_fr1x32", BFIN_BUILTIN_NEG_1X32, 0 },
+ { CODE_FOR_ssabssi2, "__builtin_bfin_abs_fr1x32", BFIN_BUILTIN_ABS_1X32, 0 },
{ CODE_FOR_movv2hi_hi_low, "__builtin_bfin_extract_lo", BFIN_BUILTIN_EXTRACTLO, 0 },
{ CODE_FOR_movv2hi_hi_high, "__builtin_bfin_extract_hi", BFIN_BUILTIN_EXTRACTHI, 0 },
{ CODE_FOR_ssnegv2hi2, "__builtin_bfin_negate_fr2x16", BFIN_BUILTIN_NEG_2X16, 0 },
- { CODE_FOR_absv2hi2, "__builtin_bfin_abs_fr2x16", BFIN_BUILTIN_ABS_2X16, 0 }
+ { CODE_FOR_ssabsv2hi2, "__builtin_bfin_abs_fr2x16", BFIN_BUILTIN_ABS_2X16, 0 }
};
/* Errors in the source file can cause expand_expr to return const0_rtx
@@ -4985,7 +5015,7 @@ bfin_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
tree arg0, arg1, arg2;
- rtx op0, op1, op2, accvec, pat, tmp1, tmp2;
+ rtx op0, op1, op2, accvec, pat, tmp1, tmp2, a0reg, a1reg;
enum machine_mode tmode, mode0;
switch (fcode)
@@ -4999,10 +5029,12 @@ bfin_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
case BFIN_BUILTIN_DIFFHL_2X16:
case BFIN_BUILTIN_DIFFLH_2X16:
+ case BFIN_BUILTIN_SUM_2X16:
arg0 = CALL_EXPR_ARG (exp, 0);
op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
- icode = (fcode == BFIN_BUILTIN_DIFFHL_2X16
- ? CODE_FOR_subhilov2hi3 : CODE_FOR_sublohiv2hi3);
+ icode = (fcode == BFIN_BUILTIN_DIFFHL_2X16 ? CODE_FOR_subhilov2hi3
+ : fcode == BFIN_BUILTIN_DIFFLH_2X16 ? CODE_FOR_sublohiv2hi3
+ : CODE_FOR_ssaddhilov2hi3);
tmode = insn_data[icode].operand[0].mode;
mode0 = insn_data[icode].operand[1].mode;
@@ -5023,6 +5055,61 @@ bfin_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
emit_insn (pat);
return target;
+ case BFIN_BUILTIN_MULT_1X32X32:
+ case BFIN_BUILTIN_MULT_1X32X32NS:
+ arg0 = CALL_EXPR_ARG (exp, 0);
+ arg1 = CALL_EXPR_ARG (exp, 1);
+ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
+ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
+ if (! target
+ || !register_operand (target, SImode))
+ target = gen_reg_rtx (SImode);
+
+ a1reg = gen_rtx_REG (PDImode, REG_A1);
+ a0reg = gen_rtx_REG (PDImode, REG_A0);
+ tmp1 = gen_lowpart (V2HImode, op0);
+ tmp2 = gen_lowpart (V2HImode, op1);
+ emit_insn (gen_flag_macinit1hi (a1reg,
+ gen_lowpart (HImode, op0),
+ gen_lowpart (HImode, op1),
+ GEN_INT (MACFLAG_FU)));
+ emit_insn (gen_lshrpdi3 (a1reg, a1reg, GEN_INT (16)));
+
+ if (fcode == BFIN_BUILTIN_MULT_1X32X32)
+ emit_insn (gen_flag_mul_macv2hi_parts_acconly (a0reg, a1reg, tmp1, tmp2,
+ const1_rtx, const1_rtx,
+ const1_rtx, const0_rtx, a1reg,
+ const0_rtx, GEN_INT (MACFLAG_NONE),
+ GEN_INT (MACFLAG_M)));
+ else
+ {
+ /* For saturating multiplication, there's exactly one special case
+ to be handled: multiplying the smallest negative value with
+ itself. Due to shift correction in fractional multiplies, this
+ can overflow. Iff this happens, OP2 will contain 1, which, when
+ added in 32 bits to the smallest negative, wraps to the largest
+ positive, which is the result we want. */
+ op2 = gen_reg_rtx (V2HImode);
+ emit_insn (gen_packv2hi (op2, tmp1, tmp2, const0_rtx, const0_rtx));
+ emit_insn (gen_movsibi (gen_rtx_REG (BImode, REG_CC),
+ gen_lowpart (SImode, op2)));
+ emit_insn (gen_flag_mul_macv2hi_parts_acconly_andcc0 (a0reg, a1reg, tmp1, tmp2,
+ const1_rtx, const1_rtx,
+ const1_rtx, const0_rtx, a1reg,
+ const0_rtx, GEN_INT (MACFLAG_NONE),
+ GEN_INT (MACFLAG_M)));
+ op2 = gen_reg_rtx (SImode);
+ emit_insn (gen_movbisi (op2, gen_rtx_REG (BImode, REG_CC)));
+ }
+ emit_insn (gen_flag_machi_parts_acconly (a1reg, tmp2, tmp1,
+ const1_rtx, const0_rtx,
+ a1reg, const0_rtx, GEN_INT (MACFLAG_M)));
+ emit_insn (gen_ashrpdi3 (a1reg, a1reg, GEN_INT (15)));
+ emit_insn (gen_sum_of_accumulators (target, a0reg, a0reg, a1reg));
+ if (fcode == BFIN_BUILTIN_MULT_1X32X32NS)
+ emit_insn (gen_addsi3 (target, target, op2));
+ return target;
+
case BFIN_BUILTIN_CPLX_MUL_16:
arg0 = CALL_EXPR_ARG (exp, 0);
arg1 = CALL_EXPR_ARG (exp, 1);
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index 853024cb148..217c26d7d15 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -1227,6 +1227,14 @@
;; Accumulator addition
+(define_insn "addpdi3"
+ [(set (match_operand:PDI 0 "register_operand" "=A")
+ (ss_plus:PDI (match_operand:PDI 1 "register_operand" "%0")
+ (match_operand:PDI 2 "nonmemory_operand" "B")))]
+ ""
+ "A0 += A1%!"
+ [(set_attr "type" "dsp32")])
+
(define_insn "sum_of_accumulators"
[(set (match_operand:SI 0 "register_operand" "=d")
(ss_truncate:SI
@@ -1238,6 +1246,13 @@
"%0 = (A0 += A1)%!"
[(set_attr "type" "dsp32")])
+(define_insn "us_truncpdisi2"
+ [(set (match_operand:SI 0 "register_operand" "=D,W")
+ (us_truncate:SI (match_operand:PDI 1 "register_operand" "A,B")))]
+ ""
+ "%0 = %1 (FU)%!"
+ [(set_attr "type" "dsp32")])
+
;; Bit test instructions
(define_insn "*not_bittst"
@@ -1362,6 +1377,13 @@
"%0 = abs %1%!"
[(set_attr "type" "dsp32")])
+(define_insn "ssabssi2"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (ss_abs:SI (match_operand:SI 1 "register_operand" "d")))]
+ ""
+ "%0 = abs %1%!"
+ [(set_attr "type" "dsp32")])
+
(define_insn "negsi2"
[(set (match_operand:SI 0 "register_operand" "=d")
(neg:SI (match_operand:SI 1 "register_operand" "d")))]
@@ -1393,6 +1415,16 @@
"%h0 = signbits %1%!"
[(set_attr "type" "dsp32")])
+(define_insn "ssroundsi2"
+ [(set (match_operand:HI 0 "register_operand" "=d")
+ (truncate:HI
+ (lshiftrt:SI (ss_plus:SI (match_operand:SI 1 "register_operand" "d")
+ (const_int 32768))
+ (const_int 16))))]
+ ""
+ "%h0 = %1 (RND)%!"
+ [(set_attr "type" "dsp32")])
+
(define_insn "smaxhi3"
[(set (match_operand:HI 0 "register_operand" "=d")
(smax:HI (match_operand:HI 1 "register_operand" "d")
@@ -1484,7 +1516,8 @@
const1_rtx, const0_rtx,
a1reg, const0_rtx, GEN_INT (MACFLAG_FU)));
emit_insn (gen_lshrpdi3 (a1reg, a1reg, GEN_INT (16)));
- emit_insn (gen_sum_of_accumulators (operands[0], a0reg, a0reg, a1reg));
+ emit_insn (gen_addpdi3 (a0reg, a0reg, a1reg));
+ emit_insn (gen_us_truncpdisi2 (operands[0], a0reg));
}
else
{
@@ -2374,6 +2407,69 @@
operands[3] = gen_rtx_NE (BImode, operands[1], const0_rtx);
})
+;; Same as above, but and CC with the overflow bit generated by the first
+;; multiplication.
+(define_insn "flag_mul_macv2hi_parts_acconly_andcc0"
+ [(set (match_operand:PDI 0 "register_operand" "=B,e,e")
+ (unspec:PDI [(vec_select:HI
+ (match_operand:V2HI 2 "register_operand" "d,d,d")
+ (parallel [(match_operand 4 "const01_operand" "P0P1,P0P1,P0P1")]))
+ (vec_select:HI
+ (match_operand:V2HI 3 "register_operand" "d,d,d")
+ (parallel [(match_operand 6 "const01_operand" "P0P1,P0P1,P0P1")]))
+ (match_operand 10 "const_int_operand" "PB,PA,PA")]
+ UNSPEC_MUL_WITH_FLAG))
+ (set (match_operand:PDI 1 "register_operand" "=B,e,e")
+ (unspec:PDI [(vec_select:HI
+ (match_dup 2)
+ (parallel [(match_operand 5 "const01_operand" "P0P1,P0P1,P0P1")]))
+ (vec_select:HI
+ (match_dup 3)
+ (parallel [(match_operand 7 "const01_operand" "P0P1,P0P1,P0P1")]))
+ (match_operand:PDI 8 "register_operand" "1,1,1")
+ (match_operand 9 "const01_operand" "P0P1,P0P1,P0P1")
+ (match_operand 11 "const_int_operand" "PA,PB,PA")]
+ UNSPEC_MAC_WITH_FLAG))
+ (set (reg:BI REG_CC)
+ (and:BI (reg:BI REG_CC)
+ (unspec:BI [(vec_select:HI (match_dup 2) (parallel [(match_dup 4)]))
+ (vec_select:HI (match_dup 3) (parallel [(match_dup 6)]))
+ (match_dup 10)]
+ UNSPEC_MUL_WITH_FLAG)))]
+ "MACFLAGS_MATCH_P (INTVAL (operands[10]), INTVAL (operands[11]))"
+{
+ rtx xops[6];
+ const char *templates[] = {
+ "%0 = %h2 * %h3, %1 %b4 %h2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %h3, %1 %b4 %h2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %h3, %1 %b4 %d2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %h3, %1 %b4 %d2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %d3, %1 %b4 %h2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %d3, %1 %b4 %h2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %d3, %1 %b4 %d2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %d3, %1 %b4 %d2 * %h3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %h3, %1 %b4 %h2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %h3, %1 %b4 %h2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %h3, %1 %b4 %d2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %h3, %1 %b4 %d2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %d3, %1 %b4 %h2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %d3, %1 %b4 %h2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %h2 * %d3, %1 %b4 %d2 * %d3 %M5;\n\tCC &= %v0;",
+ "%0 = %d2 * %d3, %1 %b4 %d2 * %d3 %M5;\n\tCC &= %v0;" };
+ int alt = (INTVAL (operands[4]) + (INTVAL (operands[5]) << 1)
+ + (INTVAL (operands[6]) << 2) + (INTVAL (operands[7]) << 3));
+ xops[0] = operands[0];
+ xops[1] = operands[1];
+ xops[2] = operands[2];
+ xops[3] = operands[3];
+ xops[4] = operands[9];
+ xops[5] = which_alternative == 0 ? operands[10] : operands[11];
+ output_asm_insn (templates[alt], xops);
+ return "";
+}
+ [(set_attr "type" "misc")
+ (set_attr "length" "6")
+ (set_attr "seq_insns" "multi")])
(define_expand "bge"
[(set (match_dup 1) (match_dup 2))
@@ -3966,9 +4062,9 @@
"%0 = - %1 (V)%!"
[(set_attr "type" "dsp32")])
-(define_insn "absv2hi2"
+(define_insn "ssabsv2hi2"
[(set (match_operand:V2HI 0 "register_operand" "=d")
- (abs:V2HI (match_operand:V2HI 1 "register_operand" "d")))]
+ (ss_abs:V2HI (match_operand:V2HI 1 "register_operand" "d")))]
""
"%0 = ABS %1 (V)%!"
[(set_attr "type" "dsp32")])
@@ -3978,7 +4074,7 @@
(define_insn "ssashiftv2hi3"
[(set (match_operand:V2HI 0 "register_operand" "=d,d,d")
(if_then_else:V2HI
- (lt (match_operand:SI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
+ (lt (match_operand:HI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
(ashiftrt:V2HI (match_operand:V2HI 1 "register_operand" "d,d,d")
(match_dup 2))
(ss_ashift:V2HI (match_dup 1) (match_dup 2))))]
@@ -3992,7 +4088,7 @@
(define_insn "ssashifthi3"
[(set (match_operand:HI 0 "register_operand" "=d,d,d")
(if_then_else:HI
- (lt (match_operand:SI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
+ (lt (match_operand:HI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
(ashiftrt:HI (match_operand:HI 1 "register_operand" "d,d,d")
(match_dup 2))
(ss_ashift:HI (match_dup 1) (match_dup 2))))]
@@ -4003,10 +4099,24 @@
%0 = %1 >>> %N2 (V,S)%!"
[(set_attr "type" "dsp32")])
+(define_insn "ssashiftsi3"
+ [(set (match_operand:SI 0 "register_operand" "=d,d,d")
+ (if_then_else:SI
+ (lt (match_operand:HI 2 "reg_or_const_int_operand" "d,Ku5,Ks5") (const_int 0))
+ (ashiftrt:SI (match_operand:HI 1 "register_operand" "d,d,d")
+ (match_dup 2))
+ (ss_ashift:SI (match_dup 1) (match_dup 2))))]
+ ""
+ "@
+ %0 = ASHIFT %1 BY %h2 (S)%!
+ %0 = %1 << %2 (S)%!
+ %0 = %1 >>> %N2 (S)%!"
+ [(set_attr "type" "dsp32")])
+
(define_insn "lshiftv2hi3"
[(set (match_operand:V2HI 0 "register_operand" "=d,d,d")
(if_then_else:V2HI
- (lt (match_operand:SI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
+ (lt (match_operand:HI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
(lshiftrt:V2HI (match_operand:V2HI 1 "register_operand" "d,d,d")
(match_dup 2))
(ashift:V2HI (match_dup 1) (match_dup 2))))]
@@ -4020,7 +4130,7 @@
(define_insn "lshifthi3"
[(set (match_operand:HI 0 "register_operand" "=d,d,d")
(if_then_else:HI
- (lt (match_operand:SI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
+ (lt (match_operand:HI 2 "vec_shift_operand" "d,Ku4,Ks4") (const_int 0))
(lshiftrt:HI (match_operand:HI 1 "register_operand" "d,d,d")
(match_dup 2))
(ashift:HI (match_dup 1) (match_dup 2))))]
diff --git a/gcc/config/bfin/lib1funcs.asm b/gcc/config/bfin/lib1funcs.asm
index fe4c3d53eb5..c8d7fe855cf 100644
--- a/gcc/config/bfin/lib1funcs.asm
+++ b/gcc/config/bfin/lib1funcs.asm
@@ -128,7 +128,8 @@ ___umulsi3_highpart:
A0 = R1.H * R0.H, A1 += R1.L * R0.H (FU);
A1 += R0.L * R1.H (FU);
A1 = A1 >> 16;
- R0 = (A0 += A1);
+ A0 += A1;
+ R0 = A0 (FU);
RTS;
#endif
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 6512a0f5aed..773787e3d29 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -147,6 +147,7 @@ extern GTY(()) int darwin_ms_struct;
{ "-multiply_defined", "-Zmultiply_defined" }, \
{ "-multi_module", "-Zmulti_module" }, \
{ "-static", "-static -Wa,-static" }, \
+ { "-shared", "-Zdynamiclib" }, \
{ "-single_module", "-Zsingle_module" }, \
{ "-unexported_symbols_list", "-Zunexported_symbols_list" }, \
SUBTARGET_OPTION_TRANSLATE_TABLE
diff --git a/gcc/config/frv/predicates.md b/gcc/config/frv/predicates.md
index 11400abef9c..51d21ebd358 100644
--- a/gcc/config/frv/predicates.md
+++ b/gcc/config/frv/predicates.md
@@ -1124,7 +1124,7 @@
;; Returns 1 if OP is either a SYMBOL_REF or a constant.
(define_predicate "symbolic_operand"
- (match_code "symbol_ref,const_int")
+ (match_code "symbol_ref,const,const_int")
{
enum rtx_code c = GET_CODE (op);
diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c
index fc5a2cf6103..d20762156a6 100644
--- a/gcc/config/i386/gmon-sol2.c
+++ b/gcc/config/i386/gmon-sol2.c
@@ -64,7 +64,13 @@
static void moncontrol (int);
extern void monstartup (char *, char *);
extern void _mcleanup (void);
-extern void internal_mcount (void);
+extern void internal_mcount (
+#ifdef __x86_64__
+ char *, unsigned short *
+#else
+ void
+#endif
+ );
struct phdr {
@@ -98,6 +104,9 @@ struct rawarc {
/* char *minbrk; */
+typedef __SIZE_TYPE__ size_t;
+typedef __PTRDIFF_TYPE__ intptr_t;
+
/*
* froms is actually a bunch of unsigned shorts indexing tos
*/
@@ -107,7 +116,7 @@ static struct tostruct *tos = 0;
static long tolimit = 0;
static char *s_lowpc = 0;
static char *s_highpc = 0;
-static unsigned long s_textsize = 0;
+static size_t s_textsize = 0;
static int ssiz;
static char *sbuf;
@@ -119,22 +128,24 @@ static int s_scale;
extern int errno;
+extern void *sbrk (intptr_t);
+
void
monstartup(char *lowpc, char *highpc)
{
- int monsize;
+ size_t monsize;
char *buffer;
- register int o;
+ register size_t o;
/*
* round lowpc and highpc to multiples of the density we're using
* so the rest of the scaling (here and in gprof) stays in ints.
*/
lowpc = (char *)
- ROUNDDOWN((unsigned long)lowpc, HISTFRACTION*sizeof(HISTCOUNTER));
+ ROUNDDOWN((size_t)lowpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_lowpc = lowpc;
highpc = (char *)
- ROUNDUP((unsigned long)highpc, HISTFRACTION*sizeof(HISTCOUNTER));
+ ROUNDUP((size_t)highpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_highpc = highpc;
s_textsize = highpc - lowpc;
monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr);
@@ -237,21 +248,65 @@ _mcleanup (void)
close( fd );
}
+#ifdef __x86_64__
+/* See GLIBC for additional information about this technique. */
+asm(".globl _mcount\n"
+ "\t.type\t_mcount, @function\n"
+ "_mcount:\n"
+ /* The compiler calls _mcount after the prologue, and does not
+ save any of the registers. Therefore we must preserve all
+ seven registers which may contain function arguments. */
+ "\tsubq\t$0x38,%rsp\n"
+ "\tmovq\t%rax,(%rsp)\n"
+ "\tmovq\t%rcx,0x08(%rsp)\n"
+ "\tmovq\t%rdx,0x10(%rsp)\n"
+ "\tmovq\t%rsi,0x18(%rsp)\n"
+ "\tmovq\t%rdi,0x20(%rsp)\n"
+ "\tmovq\t%r8,0x28(%rsp)\n"
+ "\tmovq\t%r9,0x30(%rsp)\n"
+ /* Get SELFPC (pushed by the call to this function) and
+ FROMPCINDEX (via the frame pointer. */
+ "\tmovq\t0x38(%rsp),%rdi\n"
+ "\tmovq\t0x8(%rbp),%rsi\n"
+ "\tcallq\tinternal_mcount\n"
+ /* Restore the saved registers. */
+ "\tmovq\t0x30(%rsp),%r9\n"
+ "\tmovq\t0x28(%rsp),%r8\n"
+ "\tmovq\t0x20(%rsp),%rdi\n"
+ "\tmovq\t0x18(%rsp),%rsi\n"
+ "\tmovq\t0x10(%rsp),%rdx\n"
+ "\tmovq\t0x08(%rsp),%rdx\n"
+ "\tmovq\t(%rsp),%rax\n"
+ "\taddq\t$0x38,%rsp\n"
+ "\tretq\n"
+ );
+#else
/* Solaris 2 libraries use _mcount. */
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");
+#endif
void
-internal_mcount (void)
+internal_mcount (
+#ifdef __x86_64__
+ char *selfpc,
+ unsigned short *frompcindex
+#else
+ void
+#endif
+ )
{
+#ifndef __x86_64__
register char *selfpc;
register unsigned short *frompcindex;
+#endif
register struct tostruct *top;
register struct tostruct *prevtop;
register long toindex;
static char already_setup;
+#ifndef __x86_64__
/*
* find the return address for mcount,
* and the return address for mcount's caller.
@@ -263,12 +318,16 @@ internal_mcount (void)
/* frompcindex = pc in preceding frame.
This identifies the caller of the function just entered. */
frompcindex = (void *) __builtin_return_address (1);
+#endif
if(!already_setup) {
extern char etext[];
already_setup = 1;
-/* monstartup(0, etext); */
+#ifdef __x86_64__
+ monstartup(0, etext);
+#else
monstartup((char*)0x08040000, etext);
+#endif
#ifdef USE_ONEXIT
on_exit(_mcleanup, 0);
#else
@@ -389,7 +448,7 @@ moncontrol(int mode)
/* start */
profil((unsigned short *)(sbuf + sizeof(struct phdr)),
ssiz - sizeof(struct phdr),
- (long)s_lowpc, s_scale);
+ (size_t)s_lowpc, s_scale);
profiling = 0;
} else {
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 51f46edc1ae..a3936546d7b 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1651,7 +1651,7 @@ override_options (void)
{&core2_cost, 0, 0, 16, 7, 16, 7, 16},
{&generic32_cost, 0, 0, 16, 7, 16, 7, 16},
{&generic64_cost, 0, 0, 16, 7, 16, 7, 16},
- {&amdfam10_cost, 0, 0, 32, 7, 32, 7, 32}
+ {&amdfam10_cost, 0, 0, 32, 24, 32, 7, 32}
};
static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES;
@@ -1726,12 +1726,21 @@ override_options (void)
{"k8", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
| PTA_3DNOW_A | PTA_SSE | PTA_SSE2
| PTA_NO_SAHF},
+ {"k8-sse3", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
+ | PTA_3DNOW_A | PTA_SSE | PTA_SSE2
+ | PTA_SSE3 | PTA_NO_SAHF},
{"opteron", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
| PTA_64BIT | PTA_3DNOW_A | PTA_SSE
| PTA_SSE2 | PTA_NO_SAHF},
+ {"opteron-sse3", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
+ | PTA_64BIT | PTA_3DNOW_A | PTA_SSE
+ | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF},
{"athlon64", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
| PTA_64BIT | PTA_3DNOW_A | PTA_SSE
| PTA_SSE2 | PTA_NO_SAHF},
+ {"athlon64-sse3", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
+ | PTA_64BIT | PTA_3DNOW_A | PTA_SSE
+ | PTA_SSE2 | PTA_SSE3 | PTA_NO_SAHF},
{"athlon-fx", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
| PTA_64BIT | PTA_3DNOW_A | PTA_SSE
| PTA_SSE2 | PTA_NO_SAHF},
@@ -8363,9 +8372,15 @@ print_operand (FILE *file, rtx x, int code)
return;
case 2:
+ if (MEM_P (x))
+ {
#ifdef HAVE_GAS_FILDS_FISTS
- putc ('s', file);
+ putc ('s', file);
#endif
+ return;
+ }
+ else
+ putc ('w', file);
return;
case 4:
@@ -17804,7 +17819,6 @@ ix86_expand_sse_comi (const struct builtin_description *d, tree exp,
tree arg1 = CALL_EXPR_ARG (exp, 1);
rtx op0 = expand_normal (arg0);
rtx op1 = expand_normal (arg1);
- rtx op2;
enum machine_mode mode0 = insn_data[d->icode].operand[0].mode;
enum machine_mode mode1 = insn_data[d->icode].operand[1].mode;
enum rtx_code comparison = d->comparison;
@@ -17834,7 +17848,6 @@ ix86_expand_sse_comi (const struct builtin_description *d, tree exp,
|| !(*insn_data[d->icode].operand[1].predicate) (op1, mode1))
op1 = copy_to_mode_reg (mode1, op1);
- op2 = gen_rtx_fmt_ee (comparison, mode0, op0, op1);
pat = GEN_FCN (d->icode) (op0, op1);
if (! pat)
return 0;
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 0ed9c1245c1..21ed8ad0ff2 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -426,17 +426,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#ifndef CC1_CPU_SPEC
#define CC1_CPU_SPEC_1 "\
-%{!mtune*: \
-%{m386:mtune=i386 \
-%n`-m386' is deprecated. Use `-march=i386' or `-mtune=i386' instead.\n} \
-%{m486:-mtune=i486 \
-%n`-m486' is deprecated. Use `-march=i486' or `-mtune=i486' instead.\n} \
-%{mpentium:-mtune=pentium \
-%n`-mpentium' is deprecated. Use `-march=pentium' or `-mtune=pentium' instead.\n} \
-%{mpentiumpro:-mtune=pentiumpro \
-%n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mtune=pentiumpro' instead.\n} \
%{mcpu=*:-mtune=%* \
-%n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.\n}} \
+%n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.\n} \
%<mcpu=* \
%{mintel-syntax:-masm=intel \
%n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 9889ba17580..7362601a562 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -27,18 +27,10 @@ m32
Target RejectNegative Negative(m64) Report InverseMask(64BIT)
Generate 32bit i386 code
-m386
-Target RejectNegative Undocumented
-;; Deprecated
-
m3dnow
Target Report Mask(3DNOW)
Support 3DNow! built-in functions
-m486
-Target RejectNegative Undocumented
-;; Deprecated
-
m64
Target RejectNegative Negative(m32) Report Mask(64BIT)
Generate 64bit x86-64 code
@@ -155,14 +147,6 @@ mpc
Target RejectNegative Report Joined Var(ix87_precision_string)
Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)
-mpentium
-Target RejectNegative Undocumented
-;; Deprecated
-
-mpentiumpro
-Target RejectNegative Undocumented
-;; Deprecated
-
mpreferred-stack-boundary=
Target RejectNegative Joined Var(ix86_preferred_stack_boundary_string)
Attempt to keep stack aligned to this power of 2
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 2bbd6819f7b..87056ddcc54 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -9370,7 +9370,6 @@ ia64_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
reload_completed = 1;
epilogue_completed = 1;
no_new_pseudos = 1;
- reset_block_changes ();
/* Set things up as ia64_expand_prologue might. */
last_scratch_gr_reg = 15;
@@ -9485,7 +9484,7 @@ ia64_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
instruction scheduling worth while. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
- insn_locators_initialize ();
+ insn_locators_alloc ();
emit_all_insn_group_barriers (NULL);
insn = get_insns ();
shorten_branches (insn);
diff --git a/gcc/config/m68k/constraints.md b/gcc/config/m68k/constraints.md
new file mode 100644
index 00000000000..17c49893828
--- /dev/null
+++ b/gcc/config/m68k/constraints.md
@@ -0,0 +1,107 @@
+;; Constraint definitions for m68k
+;; Copyright (C) 2007 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.
+
+;; 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.
+
+(define_register_constraint "a" "ADDR_REGS"
+ "Address register.")
+
+(define_register_constraint "d" "DATA_REGS"
+ "Data register.")
+
+(define_register_constraint "f" "TARGET_HARD_FLOAT ? FP_REGS : NO_REGS"
+ "Floating point register.")
+
+(define_constraint "I"
+ "Integer constant in the range 1 @dots 8, for immediate shift counts and addq."
+ (and (match_code "const_int")
+ (match_test "ival > 0 && ival <= 8")))
+
+(define_constraint "J"
+ "Signed 16-bit integer constant."
+ (and (match_code "const_int")
+ (match_test "ival >= -0x8000 && ival <= 0x7fff")))
+
+(define_constraint "K"
+ "Integer constant that moveq can't handle."
+ (and (match_code "const_int")
+ (match_test "ival < -0x80 || ival >= 0x80")))
+
+(define_constraint "L"
+ "Integer constant in the range -8 @dots -1, for subq."
+ (and (match_code "const_int")
+ (match_test "ival < 0 && ival >= -8")))
+
+(define_constraint "M"
+ "Integer constant that moveq+notb can't handle."
+ (and (match_code "const_int")
+ (match_test "ival < -0x100 || ival >= 0x100")))
+
+(define_constraint "N"
+ "Integer constant in the range 24 @dots 31, for rotatert:SI 8 to 1 expressed as rotate."
+ (and (match_code "const_int")
+ (match_test "ival >= 24 && ival <= 31")))
+
+(define_constraint "O"
+ "Integer constant 16, for rotate using swap."
+ (and (match_code "const_int")
+ (match_test "ival == 16")))
+
+(define_constraint "P"
+ "Integer constant in the range 8 @dots 15, for rotatert:HI 8 to 1 expressed as rotate."
+ (and (match_code "const_int")
+ (match_test "ival >= 8 && ival <= 15")))
+
+(define_constraint "R"
+ "Integer constant that mov3q can handle."
+ (and (match_code "const_int")
+ (match_test "valid_mov3q_const (ival)")))
+
+(define_constraint "G"
+ "Defines all of the floating constants that are *NOT* 68881
+ constants. This is so 68881 constants get reloaded and the fpmovecr
+ is used."
+ (and (match_code "const_double")
+ (match_test "!(TARGET_68881 && standard_68881_constant_p (op))")))
+
+(define_constraint "S"
+ "Used for operands that satisfy 'm' when -mpcrel is in effect."
+ (and (match_code "mem")
+ (match_test "TARGET_PCREL
+ && (GET_CODE (XEXP (op, 0)) == SYMBOL_REF
+ || GET_CODE (XEXP (op, 0)) == LABEL_REF
+ || GET_CODE (XEXP (op, 0)) == CONST)")))
+
+(define_constraint "T"
+ "Used for operands that satisfy 's' when -mpcrel is not in effect."
+ (and (match_code "symbol_ref,label_ref,const")
+ (match_test "!flag_pic")))
+
+(define_memory_constraint "Q"
+ "Means address register indirect addressing mode."
+ (and (match_code "mem")
+ (match_test "m68k_matches_q_p (op)")))
+
+(define_constraint "U"
+ "Used for register offset addressing."
+ (and (match_code "mem")
+ (match_test "m68k_matches_u_p (op)")))
+
+(define_constraint "W"
+ "Used for const_call_operands."
+ (match_operand 0 "const_call_operand"))
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index 2df2a7c8904..f975e06fea9 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -4112,7 +4112,6 @@ m68k_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
/* Pretend to be a post-reload pass while generating rtl. */
no_new_pseudos = 1;
reload_completed = 1;
- reset_block_changes ();
allocate_reg_info (FIRST_PSEUDO_REGISTER, true, true);
/* The "this" pointer is stored at 4(%sp). */
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index b8d1e79a292..baa5bcb6651 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -485,74 +485,6 @@ extern enum reg_class regno_reg_class[];
#define INDEX_REG_CLASS GENERAL_REGS
#define BASE_REG_CLASS ADDR_REGS
-/* We do a trick here to modify the effective constraints on the
- machine description; we zorch the constraint letters that aren't
- appropriate for a specific target. This allows us to guarantee
- that a specific kind of register will not be used for a given target
- without fiddling with the register classes above. */
-#define REG_CLASS_FROM_LETTER(C) \
- ((C) == 'a' ? ADDR_REGS : \
- ((C) == 'd' ? DATA_REGS : \
- ((C) == 'f' ? (TARGET_HARD_FLOAT ? \
- FP_REGS : NO_REGS) : \
- NO_REGS)))
-
-/* For the m68k, `I' is used for the range 1 to 8
- allowed as immediate shift counts and in addq.
- `J' is used for the range of signed numbers that fit in 16 bits.
- `K' is for numbers that moveq can't handle.
- `L' is for range -8 to -1, range of values that can be added with subq.
- `M' is for numbers that moveq+notb can't handle.
- 'N' is for range 24 to 31, rotatert:SI 8 to 1 expressed as rotate.
- 'O' is for 16 (for rotate using swap).
- 'P' is for range 8 to 15, rotatert:HI 8 to 1 expressed as rotate.
- 'R' is for numbers that mov3q can handle. */
-#define CONST_OK_FOR_LETTER_P(VALUE, C) \
- ((C) == 'I' ? (VALUE) > 0 && (VALUE) <= 8 : \
- (C) == 'J' ? (VALUE) >= -0x8000 && (VALUE) <= 0x7FFF : \
- (C) == 'K' ? (VALUE) < -0x80 || (VALUE) >= 0x80 : \
- (C) == 'L' ? (VALUE) < 0 && (VALUE) >= -8 : \
- (C) == 'M' ? (VALUE) < -0x100 || (VALUE) >= 0x100 : \
- (C) == 'N' ? (VALUE) >= 24 && (VALUE) <= 31 : \
- (C) == 'O' ? (VALUE) == 16 : \
- (C) == 'P' ? (VALUE) >= 8 && (VALUE) <= 15 : \
- (C) == 'R' ? valid_mov3q_const (VALUE) : 0)
-
-/* "G" defines all of the floating constants that are *NOT* 68881
- constants. This is so 68881 constants get reloaded and the
- fpmovecr is used. */
-#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
- ((C) == 'G' ? ! (TARGET_68881 && standard_68881_constant_p (VALUE)) : 0 )
-
-/* `Q' means address register indirect addressing mode.
- `S' is for operands that satisfy 'm' when -mpcrel is in effect.
- `T' is for operands that satisfy 's' when -mpcrel is not in effect.
- `U' is for register offset addressing.
- `W' is for const_call_operands. */
-#define EXTRA_CONSTRAINT(OP,CODE) \
- ((CODE) == 'S' \
- ? (TARGET_PCREL \
- && GET_CODE (OP) == MEM \
- && (GET_CODE (XEXP (OP, 0)) == SYMBOL_REF \
- || GET_CODE (XEXP (OP, 0)) == LABEL_REF \
- || GET_CODE (XEXP (OP, 0)) == CONST)) \
- : \
- (CODE) == 'T' \
- ? (!flag_pic \
- && (GET_CODE (OP) == SYMBOL_REF \
- || GET_CODE (OP) == LABEL_REF \
- || GET_CODE (OP) == CONST)) \
- : \
- (CODE) == 'Q' \
- ? m68k_matches_q_p (OP) \
- : \
- (CODE) == 'U' \
- ? m68k_matches_u_p (OP) \
- : \
- (CODE) == 'W' \
- ? const_call_operand (OP, VOIDmode) \
- : 0)
-
#define PREFERRED_RELOAD_CLASS(X,CLASS) \
m68k_preferred_reload_class (X, CLASS)
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index bbedab5c445..78ddf58f71e 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -135,6 +135,7 @@
])
(include "predicates.md")
+(include "constraints.md")
;; Mode macros for floating point operations.
;; Valid floating point modes
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 24287270545..b540ff507f0 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -7185,7 +7185,6 @@ mips_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
/* Pretend to be a post-reload pass while generating rtl. */
no_new_pseudos = 1;
reload_completed = 1;
- reset_block_changes ();
/* Pick a global pointer. Use a call-clobbered register if
TARGET_CALL_SAVED_GP, so that we can use a sibcall. */
@@ -7271,7 +7270,7 @@ mips_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
/* Run just enough of rest_of_compilation. This sequence was
"borrowed" from alpha.c. */
insn = get_insns ();
- insn_locators_initialize ();
+ insn_locators_alloc ();
split_all_insns_noflow ();
if (TARGET_MIPS16)
mips16_lay_out_constants ();
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 88ac9ea5d5d..093ff2a3dd6 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2251,8 +2251,11 @@ typedef struct mips_args {
difference in cost between byte and (aligned) word loads.
On RISC machines, it tends to generate better code to define
- this as 1, since it avoids making a QI or HI mode register. */
-#define SLOW_BYTE_ACCESS 1
+ this as 1, since it avoids making a QI or HI mode register.
+
+ But, generating word accesses for -mips16 is generally bad as shifts
+ (often extended) would be needed for byte accesses. */
+#define SLOW_BYTE_ACCESS (!TARGET_MIPS16)
/* Define this to be nonzero if shift instructions ignore all but the low-order
few bits. */
diff --git a/gcc/config/rs6000/darwin-ldouble.c b/gcc/config/rs6000/darwin-ldouble.c
index 7405448706a..7aa15b6d019 100644
--- a/gcc/config/rs6000/darwin-ldouble.c
+++ b/gcc/config/rs6000/darwin-ldouble.c
@@ -225,7 +225,6 @@ int __gcc_qeq (double, double, double, double);
int __gcc_qne (double, double, double, double);
int __gcc_qge (double, double, double, double);
int __gcc_qle (double, double, double, double);
-int __gcc_qunord (double, double, double, double);
long double __gcc_stoq (float);
long double __gcc_dtoq (double);
float __gcc_qtos (double, double);
@@ -238,7 +237,6 @@ long double __gcc_utoq (unsigned int);
extern int __eqdf2 (double, double);
extern int __ledf2 (double, double);
extern int __gedf2 (double, double);
-extern int __unorddf2 (double, double);
/* Negate 'long double' value and return the result. */
long double
@@ -284,15 +282,6 @@ __gcc_qge (double a, double aa, double c, double cc)
strong_alias (__gcc_qge, __gcc_qgt);
-/* Compare two 'long double' values for unordered. */
-int
-__gcc_qunord (double a, double aa, double c, double cc)
-{
- if (__eqdf2 (a, c) == 0)
- return __unorddf2 (aa, cc);
- return __unorddf2 (a, c);
-}
-
/* Convert single to long double. */
long double
__gcc_stoq (float a)
@@ -365,6 +354,20 @@ __gcc_utoq (unsigned int a)
#ifdef __NO_FPRS__
+int __gcc_qunord (double, double, double, double);
+
+extern int __eqdf2 (double, double);
+extern int __unorddf2 (double, double);
+
+/* Compare two 'long double' values for unordered. */
+int
+__gcc_qunord (double a, double aa, double c, double cc)
+{
+ if (__eqdf2 (a, c) == 0)
+ return __unorddf2 (aa, cc);
+ return __unorddf2 (a, c);
+}
+
#include "config/soft-fp/soft-fp.h"
#include "config/soft-fp/double.h"
#include "config/soft-fp/quad.h"
diff --git a/gcc/config/rs6000/libgcc-ppc-glibc.ver b/gcc/config/rs6000/libgcc-ppc-glibc.ver
index d065c13bca4..c74d732e572 100644
--- a/gcc/config/rs6000/libgcc-ppc-glibc.ver
+++ b/gcc/config/rs6000/libgcc-ppc-glibc.ver
@@ -35,11 +35,10 @@ GCC_4.2.0 {
__gcc_qneg
__gcc_qeq
__gcc_qne
- __gcc_ggt
+ __gcc_qgt
__gcc_qge
__gcc_qlt
__gcc_qle
- __gcc_qunord
__gcc_stoq
__gcc_dtoq
__gcc_qtos
@@ -49,4 +48,8 @@ GCC_4.2.0 {
__gcc_itoq
__gcc_utoq
%endif
+
+%ifdef __NO_FPRS__
+ __gcc_qunord
+%endif
}
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 9172e28de04..61564a270b4 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1296,11 +1296,9 @@ rs6000_override_options (const char *default_cpu)
{"801", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
{"821", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
{"823", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
- {"8540", PROCESSOR_PPC8540,
- POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_STRICT_ALIGN},
+ {"8540", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN},
/* 8548 has a dummy entry for now. */
- {"8548", PROCESSOR_PPC8540,
- POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_STRICT_ALIGN},
+ {"8548", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN},
{"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
{"970", PROCESSOR_POWER4,
POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64},
@@ -9587,7 +9585,6 @@ rs6000_init_libfuncs (void)
set_optab_libfunc (ge_optab, TFmode, "__gcc_qge");
set_optab_libfunc (lt_optab, TFmode, "__gcc_qlt");
set_optab_libfunc (le_optab, TFmode, "__gcc_qle");
- set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord");
set_conv_libfunc (sext_optab, TFmode, SFmode, "__gcc_stoq");
set_conv_libfunc (sext_optab, TFmode, DFmode, "__gcc_dtoq");
@@ -9598,6 +9595,9 @@ rs6000_init_libfuncs (void)
set_conv_libfunc (sfloat_optab, TFmode, SImode, "__gcc_itoq");
set_conv_libfunc (ufloat_optab, TFmode, SImode, "__gcc_utoq");
}
+
+ if (!(TARGET_HARD_FLOAT && TARGET_FPRS))
+ set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord");
}
else
{
@@ -16039,7 +16039,6 @@ rs6000_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
reload_completed = 1;
epilogue_completed = 1;
no_new_pseudos = 1;
- reset_block_changes ();
/* Mark the end of the (empty) prologue. */
emit_note (NOTE_INSN_PROLOGUE_END);
@@ -16119,7 +16118,7 @@ rs6000_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
instruction scheduling worth while. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
insn = get_insns ();
- insn_locators_initialize ();
+ insn_locators_alloc ();
shorten_branches (insn);
final_start_function (insn, file, 1);
final (insn, file, 1);
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 2359b9e2b77..477f12e429b 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -11530,27 +11530,27 @@
(define_expand "buneq"
[(use (match_operand 0 "" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_cbranch (UNEQ, operands[0]); DONE; }")
(define_expand "bunge"
[(use (match_operand 0 "" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_cbranch (UNGE, operands[0]); DONE; }")
(define_expand "bungt"
[(use (match_operand 0 "" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_cbranch (UNGT, operands[0]); DONE; }")
(define_expand "bunle"
[(use (match_operand 0 "" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_cbranch (UNLE, operands[0]); DONE; }")
(define_expand "bunlt"
[(use (match_operand 0 "" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_cbranch (UNLT, operands[0]); DONE; }")
(define_expand "bltgt"
@@ -11664,27 +11664,27 @@
(define_expand "suneq"
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_sCOND (UNEQ, operands[0]); DONE; }")
(define_expand "sunge"
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_sCOND (UNGE, operands[0]); DONE; }")
(define_expand "sungt"
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_sCOND (UNGT, operands[0]); DONE; }")
(define_expand "sunle"
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_sCOND (UNLE, operands[0]); DONE; }")
(define_expand "sunlt"
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
- ""
+ "! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
"{ rs6000_emit_sCOND (UNLT, operands[0]); DONE; }")
(define_expand "sltgt"
diff --git a/gcc/config/score/score.c b/gcc/config/score/score.c
index 34352a67e4d..9fc179e1534 100644
--- a/gcc/config/score/score.c
+++ b/gcc/config/score/score.c
@@ -183,7 +183,6 @@ th_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
/* Pretend to be a post-reload pass while generating rtl. */
no_new_pseudos = 1;
reload_completed = 1;
- reset_block_changes ();
/* We need two temporary registers in some cases. */
temp1 = gen_rtx_REG (Pmode, 8);
@@ -231,7 +230,7 @@ th_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
/* Run just enough of rest_of_compilation. This sequence was
"borrowed" from alpha.c. */
insn = get_insns ();
- insn_locators_initialize ();
+ insn_locators_alloc ();
split_all_insns_noflow ();
shorten_branches (insn);
final_start_function (insn, file, 1);
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index ffa25095eb4..ab9ea90232b 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -10167,7 +10167,6 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
epilogue_completed = 1;
no_new_pseudos = 1;
current_function_uses_only_leaf_regs = 1;
- reset_block_changes ();
emit_note (NOTE_INSN_PROLOGUE_END);
@@ -10324,7 +10323,7 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
the insns emitted. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
- insn_locators_initialize ();
+ insn_locators_alloc ();
insns = get_insns ();
if (optimize > 0)
diff --git a/gcc/config/soft-fp/double.h b/gcc/config/soft-fp/double.h
index c8f4420af85..b012d9d51be 100644
--- a/gcc/config/soft-fp/double.h
+++ b/gcc/config/soft-fp/double.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Double Precision
- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -168,13 +168,13 @@ union _FP_UNION_D
DFtype flt;
struct {
#if __BYTE_ORDER == __BIG_ENDIAN
- unsigned sign : 1;
- unsigned exp : _FP_EXPBITS_D;
- unsigned long frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0);
+ unsigned sign : 1;
+ unsigned exp : _FP_EXPBITS_D;
+ _FP_W_TYPE frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0);
#else
- unsigned long frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0);
- unsigned exp : _FP_EXPBITS_D;
- unsigned sign : 1;
+ _FP_W_TYPE frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0);
+ unsigned exp : _FP_EXPBITS_D;
+ unsigned sign : 1;
#endif
} bits __attribute__((packed));
};
diff --git a/gcc/config/soft-fp/extended.h b/gcc/config/soft-fp/extended.h
index bbf39429e7f..e5f16debecb 100644
--- a/gcc/config/soft-fp/extended.h
+++ b/gcc/config/soft-fp/extended.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Extended Precision.
- Copyright (C) 1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1999,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek (jj@ultra.linux.cz).
@@ -94,12 +94,6 @@ union _FP_UNION_E
X##_f[1] = _flo.bits.frac1; \
X##_e = _flo.bits.exp; \
X##_s = _flo.bits.sign; \
- if (!X##_e && (X##_f[1] || X##_f[0]) \
- && !(X##_f[1] & _FP_IMPLBIT_E)) \
- { \
- X##_e++; \
- FP_SET_EXCEPTION(FP_EX_DENORM); \
- } \
} while (0)
#define FP_UNPACK_RAW_EP(X, val) \
@@ -112,12 +106,6 @@ union _FP_UNION_E
X##_f[1] = _flo->bits.frac1; \
X##_e = _flo->bits.exp; \
X##_s = _flo->bits.sign; \
- if (!X##_e && (X##_f[1] || X##_f[0]) \
- && !(X##_f[1] & _FP_IMPLBIT_E)) \
- { \
- X##_e++; \
- FP_SET_EXCEPTION(FP_EX_DENORM); \
- } \
} while (0)
#define FP_PACK_RAW_E(val, X) \
@@ -164,13 +152,13 @@ union _FP_UNION_E
#define FP_UNPACK_SEMIRAW_E(X,val) \
do { \
- _FP_UNPACK_RAW_E(X,val); \
+ FP_UNPACK_RAW_E(X,val); \
_FP_UNPACK_SEMIRAW(E,4,X); \
} while (0)
#define FP_UNPACK_SEMIRAW_EP(X,val) \
do { \
- _FP_UNPACK_RAW_EP(X,val); \
+ FP_UNPACK_RAW_EP(X,val); \
_FP_UNPACK_SEMIRAW(E,4,X); \
} while (0)
@@ -189,13 +177,13 @@ union _FP_UNION_E
#define FP_PACK_SEMIRAW_E(val,X) \
do { \
_FP_PACK_SEMIRAW(E,4,X); \
- _FP_PACK_RAW_E(val,X); \
+ FP_PACK_RAW_E(val,X); \
} while (0)
#define FP_PACK_SEMIRAW_EP(val,X) \
do { \
_FP_PACK_SEMIRAW(E,4,X); \
- _FP_PACK_RAW_EP(val,X); \
+ FP_PACK_RAW_EP(val,X); \
} while (0)
#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,4,X)
@@ -277,14 +265,14 @@ union _FP_UNION_E
XFtype flt;
struct {
#if __BYTE_ORDER == __BIG_ENDIAN
- unsigned long pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
- unsigned sign : 1;
- unsigned exp : _FP_EXPBITS_E;
- unsigned long frac : _FP_W_TYPE_SIZE;
+ _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
+ unsigned sign : 1;
+ unsigned exp : _FP_EXPBITS_E;
+ _FP_W_TYPE frac : _FP_W_TYPE_SIZE;
#else
- unsigned long frac : _FP_W_TYPE_SIZE;
- unsigned exp : _FP_EXPBITS_E;
- unsigned sign : 1;
+ _FP_W_TYPE frac : _FP_W_TYPE_SIZE;
+ unsigned exp : _FP_EXPBITS_E;
+ unsigned sign : 1;
#endif
} bits;
};
@@ -299,11 +287,6 @@ union _FP_UNION_E
X##_f1 = 0; \
X##_e = _flo.bits.exp; \
X##_s = _flo.bits.sign; \
- if (!X##_e && X##_f0 && !(X##_f0 & _FP_IMPLBIT_E)) \
- { \
- X##_e++; \
- FP_SET_EXCEPTION(FP_EX_DENORM); \
- } \
} while (0)
#define FP_UNPACK_RAW_EP(X, val) \
@@ -315,11 +298,6 @@ union _FP_UNION_E
X##_f1 = 0; \
X##_e = _flo->bits.exp; \
X##_s = _flo->bits.sign; \
- if (!X##_e && X##_f0 && !(X##_f0 & _FP_IMPLBIT_E)) \
- { \
- X##_e++; \
- FP_SET_EXCEPTION(FP_EX_DENORM); \
- } \
} while (0)
#define FP_PACK_RAW_E(val, X) \
@@ -365,13 +343,13 @@ union _FP_UNION_E
#define FP_UNPACK_SEMIRAW_E(X,val) \
do { \
- _FP_UNPACK_RAW_E(X,val); \
+ FP_UNPACK_RAW_E(X,val); \
_FP_UNPACK_SEMIRAW(E,2,X); \
} while (0)
#define FP_UNPACK_SEMIRAW_EP(X,val) \
do { \
- _FP_UNPACK_RAW_EP(X,val); \
+ FP_UNPACK_RAW_EP(X,val); \
_FP_UNPACK_SEMIRAW(E,2,X); \
} while (0)
@@ -390,13 +368,13 @@ union _FP_UNION_E
#define FP_PACK_SEMIRAW_E(val,X) \
do { \
_FP_PACK_SEMIRAW(E,2,X); \
- _FP_PACK_RAW_E(val,X); \
+ FP_PACK_RAW_E(val,X); \
} while (0)
#define FP_PACK_SEMIRAW_EP(val,X) \
do { \
_FP_PACK_SEMIRAW(E,2,X); \
- _FP_PACK_RAW_EP(val,X); \
+ FP_PACK_RAW_EP(val,X); \
} while (0)
#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,2,X)
diff --git a/gcc/config/soft-fp/floatundidf.c b/gcc/config/soft-fp/floatundidf.c
index 2169a3f1988..af8e4a5aefe 100644
--- a/gcc/config/soft-fp/floatundidf.c
+++ b/gcc/config/soft-fp/floatundidf.c
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Convert a 64bit unsigned integer to IEEE double
- Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com) and
Jakub Jelinek (jj@ultra.linux.cz).
@@ -32,8 +32,7 @@
#include "soft-fp.h"
#include "double.h"
-double
-__floatundidf(UDItype i)
+DFtype __floatundidf(UDItype i)
{
FP_DECL_EX;
FP_DECL_D(A);
diff --git a/gcc/config/soft-fp/floatundisf.c b/gcc/config/soft-fp/floatundisf.c
index 5f08764dc50..977f7dfc79f 100644
--- a/gcc/config/soft-fp/floatundisf.c
+++ b/gcc/config/soft-fp/floatundisf.c
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Convert a 64bit unsigned integer to IEEE single
- Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com) and
Jakub Jelinek (jj@ultra.linux.cz).
@@ -32,8 +32,7 @@
#include "soft-fp.h"
#include "single.h"
-float
-__floatundisf(UDItype i)
+SFtype __floatundisf(UDItype i)
{
FP_DECL_EX;
FP_DECL_S(A);
diff --git a/gcc/config/soft-fp/floatunsidf.c b/gcc/config/soft-fp/floatunsidf.c
index 97b488ab68a..12d0f25bf0f 100644
--- a/gcc/config/soft-fp/floatunsidf.c
+++ b/gcc/config/soft-fp/floatunsidf.c
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Convert a 32bit unsigned integer to IEEE double
- Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com) and
Jakub Jelinek (jj@ultra.linux.cz).
@@ -32,8 +32,7 @@
#include "soft-fp.h"
#include "double.h"
-double
-__floatunsidf(USItype i)
+DFtype __floatunsidf(USItype i)
{
FP_DECL_EX;
FP_DECL_D(A);
diff --git a/gcc/config/soft-fp/floatunsisf.c b/gcc/config/soft-fp/floatunsisf.c
index 2ec16ba7b7f..80c5d3d359f 100644
--- a/gcc/config/soft-fp/floatunsisf.c
+++ b/gcc/config/soft-fp/floatunsisf.c
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Convert a 32bit unsigned integer to IEEE single
- Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com) and
Jakub Jelinek (jj@ultra.linux.cz).
@@ -32,8 +32,7 @@
#include "soft-fp.h"
#include "single.h"
-float
-__floatunsisf(USItype i)
+SFtype __floatunsisf(USItype i)
{
FP_DECL_EX;
FP_DECL_S(A);
diff --git a/gcc/config/soft-fp/op-2.h b/gcc/config/soft-fp/op-2.h
index 5c9bce4c179..3a3b3aa0691 100644
--- a/gcc/config/soft-fp/op-2.h
+++ b/gcc/config/soft-fp/op-2.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Basic two-word fraction declaration and manipulation.
- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -613,3 +613,5 @@
#define _FP_FRAC_COPY_1_2(D, S) (D##_f = S##_f0)
#define _FP_FRAC_COPY_2_1(D, S) ((D##_f0 = S##_f), (D##_f1 = 0))
+
+#define _FP_FRAC_COPY_2_2(D,S) _FP_FRAC_COPY_2(D,S)
diff --git a/gcc/config/soft-fp/op-4.h b/gcc/config/soft-fp/op-4.h
index 1b90535c56e..70b9fafbe5a 100644
--- a/gcc/config/soft-fp/op-4.h
+++ b/gcc/config/soft-fp/op-4.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Basic four-word fraction declaration and manipulation.
- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -684,3 +684,5 @@ do { \
D##_f[1] = S##_f1; \
D##_f[2] = D##_f[3] = 0; \
} while (0)
+
+#define _FP_FRAC_COPY_4_4(D,S) _FP_FRAC_COPY_4(D,S)
diff --git a/gcc/config/soft-fp/op-common.h b/gcc/config/soft-fp/op-common.h
index 0aa6e3e05d8..ef11b527b70 100644
--- a/gcc/config/soft-fp/op-common.h
+++ b/gcc/config/soft-fp/op-common.h
@@ -1153,7 +1153,8 @@ do { \
if (_FP_FRACBITS_##dfs < _FP_FRACBITS_##sfs \
|| (_FP_EXPMAX_##dfs - _FP_EXPBIAS_##dfs \
< _FP_EXPMAX_##sfs - _FP_EXPBIAS_##sfs) \
- || _FP_EXPBIAS_##dfs < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1) \
+ || (_FP_EXPBIAS_##dfs < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1 \
+ && _FP_EXPBIAS_##dfs != _FP_EXPBIAS_##sfs)) \
abort(); \
D##_s = S##_s; \
_FP_FRAC_COPY_##dwc##_##swc(D, S); \
@@ -1168,6 +1169,14 @@ do { \
{ \
if (_FP_FRAC_ZEROP_##swc(S)) \
D##_e = 0; \
+ else if (_FP_EXPBIAS_##dfs \
+ < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1) \
+ { \
+ FP_SET_EXCEPTION(FP_EX_DENORM); \
+ _FP_FRAC_SLL_##dwc(D, (_FP_FRACBITS_##dfs \
+ - _FP_FRACBITS_##sfs)); \
+ D##_e = 0; \
+ } \
else \
{ \
int _lz; \
@@ -1199,7 +1208,8 @@ do { \
#define FP_TRUNC(dfs,sfs,dwc,swc,D,S) \
do { \
if (_FP_FRACBITS_##sfs < _FP_FRACBITS_##dfs \
- || _FP_EXPBIAS_##sfs < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1) \
+ || (_FP_EXPBIAS_##sfs < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1 \
+ && _FP_EXPBIAS_##sfs != _FP_EXPBIAS_##dfs)) \
abort(); \
D##_s = S##_s; \
if (_FP_EXP_NORMAL(sfs, swc, S)) \
@@ -1211,8 +1221,11 @@ do { \
{ \
if (D##_e <= 0) \
{ \
- if (D##_e <= 1 - _FP_FRACBITS_##dfs) \
- _FP_FRAC_SET_##swc(S, _FP_ZEROFRAC_##swc); \
+ if (D##_e < 1 - _FP_FRACBITS_##dfs) \
+ { \
+ _FP_FRAC_SET_##swc(S, _FP_ZEROFRAC_##swc); \
+ _FP_FRAC_LOW_##swc(S) |= 1; \
+ } \
else \
{ \
_FP_FRAC_HIGH_##sfs(S) |= _FP_IMPLBIT_SH_##sfs; \
@@ -1234,11 +1247,24 @@ do { \
if (S##_e == 0) \
{ \
D##_e = 0; \
- _FP_FRAC_SET_##dwc(D, _FP_ZEROFRAC_##dwc); \
- if (!_FP_FRAC_ZEROP_##swc(S)) \
+ if (_FP_FRAC_ZEROP_##swc(S)) \
+ _FP_FRAC_SET_##dwc(D, _FP_ZEROFRAC_##dwc); \
+ else \
{ \
FP_SET_EXCEPTION(FP_EX_DENORM); \
- FP_SET_EXCEPTION(FP_EX_INEXACT); \
+ if (_FP_EXPBIAS_##sfs \
+ < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1) \
+ { \
+ _FP_FRAC_SRS_##swc(S, (_FP_WFRACBITS_##sfs \
+ - _FP_WFRACBITS_##dfs), \
+ _FP_WFRACBITS_##sfs); \
+ _FP_FRAC_COPY_##dwc##_##swc(D, S); \
+ } \
+ else \
+ { \
+ _FP_FRAC_SET_##dwc(D, _FP_ZEROFRAC_##dwc); \
+ _FP_FRAC_LOW_##dwc(D) |= 1; \
+ } \
} \
} \
else \
diff --git a/gcc/config/soft-fp/quad.h b/gcc/config/soft-fp/quad.h
index d7840ff0662..c22e944029f 100644
--- a/gcc/config/soft-fp/quad.h
+++ b/gcc/config/soft-fp/quad.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Quad Precision.
- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -176,15 +176,15 @@ union _FP_UNION_Q
} longs;
struct {
#if __BYTE_ORDER == __BIG_ENDIAN
- unsigned sign : 1;
- unsigned exp : _FP_EXPBITS_Q;
- unsigned long frac1 : _FP_FRACBITS_Q-(_FP_IMPLBIT_Q != 0)-_FP_W_TYPE_SIZE;
- unsigned long frac0 : _FP_W_TYPE_SIZE;
+ unsigned sign : 1;
+ unsigned exp : _FP_EXPBITS_Q;
+ _FP_W_TYPE frac1 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0) - _FP_W_TYPE_SIZE;
+ _FP_W_TYPE frac0 : _FP_W_TYPE_SIZE;
#else
- unsigned long frac0 : _FP_W_TYPE_SIZE;
- unsigned long frac1 : _FP_FRACBITS_Q-(_FP_IMPLBIT_Q != 0)-_FP_W_TYPE_SIZE;
- unsigned exp : _FP_EXPBITS_Q;
- unsigned sign : 1;
+ _FP_W_TYPE frac0 : _FP_W_TYPE_SIZE;
+ _FP_W_TYPE frac1 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0) - _FP_W_TYPE_SIZE;
+ unsigned exp : _FP_EXPBITS_Q;
+ unsigned sign : 1;
#endif
} bits;
};
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 9b881e1176d..be07ce7d3d0 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -8546,7 +8546,6 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
reload_completed = 1;
epilogue_completed = 1;
no_new_pseudos = 1;
- reset_block_changes ();
emit_note (NOTE_INSN_PROLOGUE_END);
@@ -8724,7 +8723,7 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
instruction scheduling worth while. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
insn = get_insns ();
- insn_locators_initialize ();
+ insn_locators_alloc ();
shorten_branches (insn);
final_start_function (insn, file, 1);
final (insn, file, 1);
diff --git a/gcc/config/xtensa/lib1funcs.asm b/gcc/config/xtensa/lib1funcs.asm
index 6db2a7d7239..7cb994dfd2e 100644
--- a/gcc/config/xtensa/lib1funcs.asm
+++ b/gcc/config/xtensa/lib1funcs.asm
@@ -654,16 +654,17 @@ __umodsi3:
leaf_return
.Lle_one:
- beqz a3, .Lerror
- movi a2, 0
- leaf_return
+ bnez a3, .Lreturn0
-.Lerror:
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+ leaf_return
.size __umodsi3,.-__umodsi3
#endif /* L_umodsi3 */
@@ -712,16 +713,17 @@ __modsi3:
leaf_return
.Lle_one:
- beqz a3, .Lerror
- movi a2, 0
- leaf_return
+ bnez a3, .Lreturn0
-.Lerror:
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+ leaf_return
.size __modsi3,.-__modsi3
#endif /* L_modsi3 */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 11f1396b71f..d0b0dd9fadc 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,15 @@
+2007-05-02 Seongbae Park <seongbae.park@gmail.com>
+
+ PR c++/31663
+ * decl2.c (constrain_class_visibility):
+ Use strip_pointer_or_array_types instead of strip_array_types.
+
+2007-04-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/30221
+ * decl.c (reshape_init_r): Don't reshape the first element if it
+ is a pointer to member function.
+
2007-04-27 Simon Baldwin <simonb@google.com>
* decl.c (grokparms): Changed message format from %qD to %qE.
@@ -1075,7 +1087,7 @@ o2007-02-06 Mark Mitchell <mark@codesourcery.com>
* pt.c: Fix a comment typo.
-2006-01-02 Ian Lance Taylor <iant@google.com>
+2007-01-02 Ian Lance Taylor <iant@google.com>
* semantics.c (maybe_convert_cond): Optionally warn when using an
assignment as a condition.
@@ -1135,7019 +1147,3 @@ o2007-02-06 Mark Mitchell <mark@codesourcery.com>
canonical reduced type parameter.
(any_template_arguments_need_structural_equality_p): New.
-2006-12-31 Simon Martin <simartin@users.sourceforge.net>
-
- PR c++/29731
- * parser.c (cp_parser_primary_expression): Return error_mark_node when
- a statement-expression is found outside of a function body.
-
-2006-12-28 Kazu Hirata <kazu@codesourcery.com>
-
- * cp-tree.h (TYPE_NAMESPACE_SCOPE_P, TYPE_FUNCTION_SCOPE_P):
- Remove.
-
- * decl2.c: Fix a comment typo.
-
-2006-12-21 Andrew Pinski <pinskia@gmail.com>
-
- PR C++/30225
- * decl.c (cxx_builtin_function): Only copy the decl if adding
- it to the std namespace.
-
-2006-12-21 Andrew Pinski <pinskia@gmail.com>
-
- PR C++/30168
- * optimize.c (update_cloned_parm): Copy DECL_GIMPLE_REG_P also.
-
-2006-12-22 Kazu Hirata <kazu@codesourcery.com>
-
- * decl.c: Fix a coment typo.
-
-2006-12-18 Ian Lance Taylor <iant@google.com>
-
- * decl.c (start_preparsed_function): Add support for
- -Wmissing-declarations.
-
-2006-12-16 Simon Martin <simartin@users.sourceforge.net>
-
- PR c++/29475
- * cp-tree.h (struct deferred_access_check): New structure to represent a
- deferred access check. It replaces the previous representation as a tree.
- (get_deferred_access_checks): Return a vector of struct
- deferred_access_check instead of a tree list.
- (perform_access_checks): Take a vector of struct deferred_access_check
- instead of a tree list.
- * semantics.c (struct deferred_access): Store the deferred access checks
- as a vector of struct deferred_access_check instead of a tree list.
- (push_deferring_access_checks): Handle the change in struct
- deferred_access.
- (get_deferred_access_checks): Likewise.
- (pop_to_parent_deferring_access_checks): Likewise.
- (perform_or_defer_access_check): Likewise.
- (perform_access_checks): Take a vector of struct deferred_access_check
- instead of a tree list.
- * parser.c (struct tree_check): New structure to store various data
- associated with a CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID token.
- (struct cp_token): Changed the value field to be a union with a pointer to
- a struct tree_check for CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID
- tokens and a tree field for all other tokens.
- (eof_token): Adjusted due to the change in struct cp_token.
- (cp_lexer_get_preprocessor_token): Likewise.
- (cp_lexer_purge_token): Likewise.
- (cp_lexer_purge_tokens_after): Likewise.
- (cp_lexer_print_token): Likewise.
- (cp_parser_error): Likewise.
- (cp_parser_identifier): Likewise.
- (cp_parser_string_literal): Likewise.
- (cp_parser_primary_expression): Likewise.
- (cp_parser_unqualified_id): Likewise.
- (cp_parser_parenthesized_expression_list): Likewise.
- (cp_parser_storage_class_specifier_opt): Likewise.
- (cp_parser_function_specifier_opt): Likewise.
- (cp_parser_type_specifier): Likewise.
- (cp_parser_simple_type_specifier): Likewise.
- (cp_parser_initializer_list): Likewise.
- (cp_parser_member_specification_opt): Likewise.
- (cp_parser_attribute_list): Likewise.
- (cp_parser_objc_expression): Likewise.
- (cp_parser_objc_protocol_qualifiers): Likewise.
- (cp_parser_objc_selector): Likewise.
- (cp_parser_objc_declaration): Likewise.
- (cp_parser_objc_statement): Likewise.
- (cp_parser_omp_clause_name): Likewise.
- (cp_parser_omp_clause_default): Likewise.
- (cp_parser_omp_clause_schedule): Likewise.
- (cp_parser_omp_parallel): Likewise.
- (cp_parser_initial_pragma): Likewise.
- (pragma_lex): Likewise.
- (cp_parser_pre_parsed_nested_name_specifier): Likewise.
- (cp_parser_nested_name_specifier_opt): Likewise.
- Use cp_token::u::tree_check_value to save the token's value, the
- associated deferred checks and its qualifying scope.
- (cp_parser_template_id): Likewise.
- (cp_parser_template_declaration_after_export): Adjusted the call to
- get_deferred_access_checks.
- (cp_parser_init_declarator): Take the access checks as a vector of struct
- deferred_access_check instead of a tree list.
- (cp_parser_single_declaration): Likewise.
- (cp_parser_perform_template_parameter_access_checks): Likewise.
- (cp_parser_simple_declaration): Adjusted the call to
- cp_parser_init_declarator.
- (cp_parser_explicit_specialization): Adjusted the call to
- cp_parser_single_declaration.
-
-2006-12-13 Ian Lance Taylor <iant@google.com>
-
- PR c++/19564
- PR c++/19756
- * parser.c (cp_parser_expression_stack_entry): Add field
- lhs_type.
- (cp_parser_binary_expression): Track tree code of left hand side
- of expression. Use it when calling build_x_binary_op.
- (cp_parser_selection_statement): Add if_p parameter. Change all
- callers. Warn about ambiguous else.
- (cp_parser_statement): Add if_p parameter. Change all callers.
- (cp_parser_implicitly_scoped_statement): Likewise.
- * typeck.c (build_x_binary_op): Add parameters arg1_code and
- arg2_code. Change all callers. Call warn_about_parentheses.
- * cp-tree.h (build_x_binary_op): Update declaration.
-
-2006-12-12 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
-
- * decl.c (build_enumerator): Update error message to match C
- front-end.
-
-2006-12-11 Jan Hubicka <jh@suse.cz>
-
- * decl2.c (var_finalized_p): Update for renamed varpool functions.
-
-2006-12-09 Zack Weinberg <zackw@panix.com>
-
- * parser.c (yydebug, enum pragma_omp_clause): Delete.
-
-2006-12-07 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29732
- * cp-tree.h (DECL_USE_TEMPLATE): Mention partial specializations.
- (explicit_class_specialization_p): Declare.
- * pt.c (explicit_class_specialization_p): New function.
- * parser.c (cp_parser_init_declarator): Check correct number of
- template parameters for in-class function definitions.
- (cp_parser_check_declrator_template_parameters): Stop looking for
- template classes when we find an explicit specialization.
-
-2006-12-07 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/29980
- * cp_parser_elaborated_type_specifier: Check
- the return value of check_elaborated_type_specifier.
-
-2006-12-06 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29730
- * parser.c (cp_parser_init_declarator): Reject initialization of
- functions.
-
-2006-12-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29729
- * decl2.c (check_member_template): Move check for member
- templates in local classes to ...
- * parser.c (cp_parser_template_declaration_after_export):
- ... here.
-
- PR c++/29728
- * decl.c (check_array_designated_initializer): New function.
- (maybe_deduce_size_from_array_init): Use it.
- (reshape_init_array): Likewise.
-
-2006-12-05 Aldy Hernandez <aldyh@redhat.com>
-
- Merge from gimple-tuples-branch.
-
- 2006-10-05 Aldy Hernandez <aldyh@redhat.com>
-
- * cp-gimplify.c (cp_gimplify_expr): Adjust for GIMPLE_MODIFY_STMT.
- (cxx_omp_clause_apply_fn): Adjust for GIMPLE_MODIFY_STMT.
- (cxx_omp_clause_copy_ctor): Same.
- (cxx_omp_clause_assign_op): Same.
-
- 2006-09-28 Aldy Hernandez <aldyh@redhat.com>
-
- * cp-tree.h (union lang_tree_node): Gimple statements do not
- have a TREE_CHAIN.
- (TREE_INDIRECT_USING): Look in base.
-
-2006-12-04 Jan Hubicka <jh@suse.cz>
-
- * cp-objcp-common.c (cp_expr_size): Return NULL in the case
- size is undefined.
-
-2006-12-04 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29733
- * pt.c (tsubst_decl): Disallow variables of function type.
-
- PR c++/29632
- * call.c (add_builtin_candidate): Do not permit NULL pointer
- constants to be compared with template parameters.
-
-2006-12-04 Eric Botcazou <ebotcazou@adacore.com>
-
- * pt.c (for_each_template_parm_r) <INTEGER_TYPE>: New case.
- Call for_each_template_parm on TYPE_MIN_VALUE and TYPE_MAX_VALUE.
-
-2006-12-03 Richard Henderson <rth@redhat.com>
- Andrew Pinski <pinskia@gmail.com>
-
- PR C++/14329
- * error.c (cp_printer) <'D'>: Handle DECL_DEBUG_EXPR.
-
-2006-12-02 Andrew Pinski <andrew_pinski@playstation.sony.com>
-
- PR C++/30033
- * decl.c (cp_tree_node_structure): Handle STATIC_ASSERT.
-
-2006-12-02 Kazu Hirata <kazu@codesourcery.com>
-
- * name-lookup.c: Follow spelling conventions.
-
-2006-12-01 Geoffrey Keating <geoffk@apple.com>
-
- * decl.c (poplevel): Check DECL_INITIAL invariant.
- (duplicate_decls): Preserve DECL_INITIAL when eliminating
- a new definition in favour of an old declaration.
- (start_preparsed_function): Define and document value of
- DECL_INITIAL before and after routine.
- (finish_function): Check DECL_INITIAL invariant.
- * parser.c
- (cp_parser_function_definition_from_specifiers_and_declarator):
- Skip duplicate function definitions.
-
-2006-12-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/30022
- * typeck.c (type_after_usual_arithmetic_conversions):
- Fix assertion for vector types.
- (build_binary_op): Use temporary for inner type of vector types.
-
-2006-12-01 Ryan Mansfield <rmansfield@qnx.com>
-
- PR c++/29066
- * typeck.c (build_binary_op): Fix pointer to member function
- comparison for ptrmemfunc_vbit_in_delta targets.
-
-2006-12-01 Dirk Mueller <dmueller@suse.de>
-
- PR c++/18313
- * decl.c (grokdeclarator): Warn for type qualifiers on return
- type for non-dependent types.
- * pt.c (tsubst_function_type): Warn for type qualifiers on
- return type for dependent types.
-
-2006-11-30 Geoffrey Keating <geoffk@apple.com>
-
- * rtti.c (get_tinfo_decl): Handle return value from
- pushdecl_top_level_and_finish.
-
-2006-11-29 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/29022
- * parser.c (cp_parser_class_head): Move processing
- of any base classes to...
- (cp_parser_class_specifier) ...here. Take an extra
- tree* parameter for any base classes. Only process
- them if the opening brace was found.
-
-2006-11-28 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/29735
- * decl.c (grokfndecl): Check main's type after applying
- attributes, not before.
-
-2006-11-27 Mark Mitchell <mark@codesourcery.com>
-
- * class.c (build_vcall_offset_vtbl_entries): Do not add vcall
- entries for a primary construction virtual table.
-
-2006-11-26 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29886
- * parser.c (cp_parser): Add in_function_body.
- (cp_parser_new): Initialize it.
- (cp_parser_primary_expression): Use parser->in_function_body
- instead of at_function_scope_p.
- (cp_parser_asm_definition): Likewise.
- (cp_parser_direct_declarator): Likewise.
- (cp_parser_class_specifier): Clear parser->in_function_body.
- (cp_parser_constructor_declarator_p): Use parser->in_function_body
- instead of at_function_scope_p.
- (cp_parser_function_body_after_declarator): Set
- parser->in_function_body.
-
-2006-11-21 Douglas Gregor <doug.gregor@gmail.com>
-
- * cp-tree.def (STATIC_ASSERT): New.
- * cp-objcp-common.c (cp_tree_size): Handle STATIC_ASSERT.
- * error.c (dump_decl): Handle STATIC_ASSERT.
- * cp-tree.h (STATIC_ASSERT_CONDITION): New.
- (STATIC_ASSERT_MESSAGE): New.
- (STATIC_ASSERT_SOURCE_LOCATION): New.
- (struct tree_static_assert): New.
- (enum cp_tree_node_structure_enum): Add TS_CP_STATIC_ASSERT.
- (union lang_tree_node): Add static_assertion.
- (finish_static_assert): Declare.
- * cxx-pretty-print.c (pp_cxx_statement): Handle STATIC_ASSERT.
- (pp_cxx_declaration): Handle STATIC_ASSERT.
- * pt.c (instantiate_class_template): Handle
- STATIC_ASSERT members.
- (tsubst_expr): Handle STATIC_ASSERT statements.
- * semantics.c (finish_static_assert): New.
- * lex.c (D_CPP0X): New.
- (reswords): Add static_assert keyword.
- (init_reswords): If not flag_cpp0x, mask out C++0x keywords.
- * parser.c (cp_parser_block_declaration): Parse static
- assertions.
- (cp_parser_static_assert): New.
- (cp_parser_member_declaration): Parse static assertions.
-
-2006-11-21 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/29570
- * decl.c (cp_finish_decl): Check for value dependent brace enclosed
- scalar initializer.
-
- PR c++/29734
- * cp-tree.h (WANT_VECTOR): Define.
- (WANT_ARITH): Add WANT_VECTOR.
- * cvt.c (build_expr_type_conversion): Handle vector types.
- * typeck.c (build_unary_op): Add WANT_VECTOR to
- build_expr_type_conversion flags.
-
-2006-11-20 Simon Martin <simartin@users.sourceforge.net>
-
- PR c++/29475
- * cp-tree.h (enforce_access, perform_or_defer_access_check): Added an
- extra argument that represents the declaration to use to print
- potential error messages.
- * init.c (build_offset_ref): Adjusted the call to
- perform_or_defer_access_check.
- * class.c (alter_access, resolve_address_of_overloaded_function):
- Likewise.
- * decl.c (make_typename_type, make_unbound_class_template): Likewise.
- * search.c (lookup_member): Likewise.
- * friend.c (add_friend): Likewise.
- * parser.c (cp_parser_template_id,
- cp_parser_pre_parsed_nested_name_specifier): Likewise.
- * semantics.c (finish_non_static_data_member,
- check_accessibility_of_qualified_id, finish_id_expression): Likewise.
- (pop_to_parent_deferring_access_checks, perform_access_checks,
- perform_or_defer_access_check): Adjusted the call to enforce_access.
- * call.c (enforce_access): Use the new extra argument to build the
- error message.
- (build_op_delete_call): Adjusted the call to
- perform_or_defer_access_check.
- (build_over_call): Likewise.
-
-2006-11-16 Dirk Mueller <dmueller@suse.de>
-
- * name-lookup.c (begin_scope): Use GGC_CNEW instead of
- GGC_NEW and memset.
-
-2006-11-13 Roger Sayle <roger@eyesopen.com>
-
- * rtti.c (get_pseudo_ti_init): Ensure that the offset field of the
- base type info initializer has the correct type.
-
-2006-11-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29518
- * pt.c (coerce_template_parms): Do not skip_evaluation while
- substituting template arguments.
-
-2006-11-11 Richard Guenther <rguenther@suse.de>
-
- * typeck.c (build_unary_op): Remove handling of FIX_CEIL_EXPR,
- FIX_FLOOR_EXPR and FIX_ROUND_EXPR.
-
-2006-11-03 Roger Sayle <roger@eyesopen.com>
-
- * call.c (build_op_delete_call): Test user-visible type against
- size_type_node, instead of against the internal type, sizetype.
- * class.c (type_requires_array_cookie): Likewise.
- * mangle.c (write_builtin_type) <INTEGER_TYPE>: Remove special
- handling of TYPE_IS_SIZETYPE.
- * typeck.c (type_after_usual_arithmetic_conversions): Remove
- special case handling of TYPE_IS_SIZETYPE.
- (comptypes): Likewise.
-
-2006-11-01 Danny Smith <dannysmith@users.sourceforge.net>
-
- * decl.c (get_atexit_node): Reference atexit, not __cxa_exit.
- if targetm.cxx.use_atexit_for cxa_atexit.
- (start_cleanup_fn): Likewise.
- (register_dtor_fn): Likewise.
-
-2006-09-25 Geoffrey Keating <geoffk@apple.com>
-
- * decl2.c (cp_write_global_declarations): Rename from
- cp_finish_file.
- * cp-lang.c (finish_file): Don't call cp_finish_file.
- * cp-tree.h (cp_write_global_declarations): Rename from
- cp_finish_file.
- * cp-objcp-common.h (LANG_HOOKS_WRITE_GLOBALS): Define to
- cp_write_global_declarations.
-
-2006-10-31 Geoffrey Keating <geoffk@apple.com>
-
- * name-lookup.c (get_anonymous_namespace_name): New.
- (push_namespace_with_attribs): Use get_anonymous_namespace_name.
- * decl2.c (start_objects): Update for rename of
- get_file_function_name_long.
-
-2006-10-30 Dirk Mueller <dmueller@suse.de>
-
- PR c++/28704
- * decl.c (grokdeclarator): Duplicate diagnostic message
- for easier translation.
- * decl.c (grokdeclarator): Fix line-wrapping.
-
-2006-10-30 Dirk Mueller <dmueller@suse.de>
-
- PR c++/6321
- * decl.c (grokfndecl): Use check_main_parameter_types.
-
-2006-10-30 Dirk Mueller <dmueller@suse.de>
-
- PR c++/28669
- * decl.c (grokfndecl): Duplicate warning message for
- easier translation.
-
-2006-10-30 Dirk Mueller <dmueller@suse.de>
-
- * typeck.c (build_unary_op): Fix indenting. Use G_().
-
-2006-10-29 Dirk Mueller <dmueller@suse.de>
-
- PR c++/29089
- * typeck.c (build_unary_op): Duplicate warning message
- for easier translation.
-
-2006-10-29 Dirk Mueller <dmueller@suse.de>
-
- PR c++/16307
- * typeck.c (build_array_ref): Warn for char subscriptions
- on pointers.
-
-2006-10-29 Kazu Hirata <kazu@codesourcery.com>
-
- * decl.c: Fix a comment typo.
-
-2006-10-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
-
- PR C++/29295
- * typeck.c (build_unary_op): Use same_type_p when comparing to
- boolean type.
-
-2006-10-29 Dirk Mueller <dmueller@suse.de>
-
- PR c++/29033
- * typeck.c (build_binary_op): Duplicate warning message
- for better translation.
-
-2006-10-23 Rafael Avila de Espindola <rafael.espindola@gmail.com>
-
- * decl.c (builtin_function_1): Move common code to
- add_builtin_function.
- (builtin_function): Rename to cxx_builtin_function.
- Change the signature.
- * call.c: Include langhooks.h.
- (build_java_interface_fn_ref): Replace calls to
- builtin_function with add_builtin_function.
- * Make-lang.in (cp/call.o): Depend on langhooks.h.
- * cp-objcp-common.h (LANG_HOOKS_BUILTIN_FUNCTION): Define as
- cxx_builtin_function.
- * cp-tree.h (builtin_function): Rename to cxx_builtin_function.
- Change the signature.
-
-2006-10-22 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20647
- * rtti.c (tinfo_base_init): The type info string is always global.
-
-2006-10-20 Lee Millward <lee.millward@codesourcery.com>
- Mark Mitchell <mark@codesourcery.com>
-
- PR c++/28053
- * decl2.c (grokbitfield): Detect invalid non-integral
- types earlier when possible.
-
-2006-10-18 Mark Shinwell <shinwell@codesourcery.com>
-
- PR c++/26884
- * typeck2.c (digest_init): Raise error upon attempts to
- initialize arrays with variables.
-
-2006-10-17 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/27952
- * cp-tree.h (xref_basetypes): Return bool instead of void.
- * decl.c (xref_basetypes): Adjust definition. Return false
- if the class bases are invalid.
- * parser.c (cp_parser_class_head): Check the return value
- from xref_basetypes.
-
-2006-10-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/28261
- * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Add
- comment.
-
- PR c++/28261
- * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): New
- function.
- (cp_parser_constructor_declarator_p): Use it.
- (cp_parser_check_type_definition): Return a value indicating
- whether or not the definition is valid.
- (cp_parser_enum_specifier): Skip invalid enum definitions.
-
-2006-10-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29039
- * typeck2.c (build_functional_cast): Don't zero-initialize
- non-PODs; instead, call their constructors.
- * method.c (synthesize_method): Always build mem-initializers, if
- we're synthesizing the default constructor.
-
-2006-10-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27270
- * decl.c (reshape_init_class): Move check for designated
- to ...
- * parser.c (cp_parser_initializer_list): ... here.
- * pt.c (tsubst_copy_and_build): Use finish_compound_literal.
-
-2006-10-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27270
- * typeck2.c (process_init_constructor_array): Reword comment.
- * pt.c (tsubst_copy_and_built): Call reshape_init before calling
- digest_init.
-
- PR c++/29408
- * parser.c (cp_parser_using_declaration): Stop parsing when
- something goes wrong with an access declaration.
-
- PR c++/29435
- * typeck.c (cxx_sizeof_or_alignof_type): Complete non-dependent
- types when their sizes are required. Refine test for VLAs.
-
- PR c++/28211
- * parser.c (cp_parser_template_argument): Don't consider "&var" a
- possible constant-expression.
- * pt.c (convert_nontype_argument): Refine handling of arguments of
- pointer type.
-
-2006-10-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/28506
- * parser.c (function_declarator_p): New function.
- (cp_parser_init_declarator): Use it.
- (cp_parser_member_declaration): Likewise.
-
-2006-10-12 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29318
- * rtti.c (get_tinfo_decl): Refuse to create type info objects for
- variably modified types.
-
-2006-10-12 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/27961
- * decl.c (start_decl): Return error_mark_node if a
- function is initialized like a variable.
- (check_var_type): If a variable of field is declared void,
- set the type to error_mark_node.
- (grokdeclarator): Check the return type of check_var_type.
- * class.c (finish_struct_1): Robustify.
-
-2006-10-11 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29175
- * decl.c (check_initializer): Issue errors about trying to
- initialize arrays whose elements have variable size.
-
-2006-10-11 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/29024
- * cp-tree (struct cp_decl_specifier_seq): Rename to
- conflicting_specifiers_p
- * parser.c (cp_parser_set_storage_class): Set
- conflicting_specifiers_p for the input decl specifier
- if a typedef specifier is present. Rename uses of
- multiple_specifiers_p to conflicting_specifiers_p.
- (cp_parser_decl_specifier_seq) <RID_TYPEDEF>: If a storage
- class specifier has already been set for this declaration,
- set conflicting_specifiers_p to true on the decl_specs.
- * decl.c (grokdeclarator): Rename uses of
- multiple_specifiers_p to conflicting_specifiers_p.
-
-2006-10-10 Brooks Moses <bmoses@stanford.edu>
-
- * Make-lang.in: Added "c++.pdf" target support.
-
-2006-10-10 Richard Guenther <rguenther@suse.de>
-
- PR rtl-optimization/29323
- * decl.c (finish_function): Set TREE_NOTHROW only for
- functions that bind local.
-
-2006-10-09 Richard Henderson <rth@redhat.com>
-
- Revert emutls patch.
-
-2006-10-04 Richard Henderson <rth@redhat.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * decl.c (grokvardecl): Don't error if !have_tls.
- (grokdeclarator): Likewise.
- * parser.c (cp_parser_omp_threadprivate): Likewise.
-
-2006-10-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29020
- * friend.c (do_friend): Improve comments; add assertion.
- * parser.c (cp_parser_nested_name_specifier_opt): Resolve
- typenames for qualified names used in declarations, even when
- caching qualified name lookup.
-
- PR c++/29138
- * decl2.c (grokfield): Don't handle access declarations here.
- * parser.c (cp_parser_using_declaration): Handle access
- declarations too.
- (cp_parser_block_declaration): Adjust calls to
- cp_parser_using_declaration.
- (cp_parser_member_declaration): Likewise. Use
- cp_parser_using_declaration to look for access_declarations.
-
-2006-10-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/29291
- * init.c (build_new): Check for invalid init.
-
-2006-10-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29226
- * typeck.c (cxx_sizeof_or_alignof_type): Tidy. In templates, do
- not try to actually evaluate sizeof for a VLA type.
-
-2006-10-01 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29105
- * pt.c (tsubst_baselink): Substituteinto the qualifying scope.
- * semantics.c (baselink_for_fns): Build a baselink, even when
- processing a template.
-
- PR c++/29080
- * parser.c (cp_parser_postfix_dot_deref_expression): Use
- BASELINK_ACCESS_BINFO as the qualifying scope when calling
- adjust_result_of_qualified_name_lookup.
-
-2006-09-25 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/27329
- PR c++/26938
- * cp-tree.h (redeclare_class_template): Adjust declaration
- to return bool instead of void.
- * pt.c (redeclare_class_template): Update definition.
- Return false on error.
- * decl.c (xref_tag): Return error_mark_node if
- redeclare_class_template returned false.
-
- PR c++/27667
- * cp-tree.h (begin_specialization): Return bool
- instead of void.
- * pt.c (check_specialization_scope): Likwise.
- Adjust comment. Return false if a specialization
- isn't permitted in the current scope.
- (begin_specialization): Use the return value of
- check_specialization_scope.
- * parser.c (cp_parser_explicit_specialization): If
- begin_specialization returned false, skip the rest
- of the specialization.
-
-2006-09-21 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/29016
- * typeck.c (build_unary_op): Don't form an ADDR_EXPR around a
- BASELINK.
-
-2006-09-21 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/28861
- * decl.c (shadow_tag): Return error_mark_node
- if maybe_process_partial_specialization failed.
-
- PR c++/28303
- * decl.c (grokdeclarator): Return error_mark_node on
- declaration with two or more data types.
-
-2006-09-20 Danny Smith <dannysmith@users.sourceforge.net>
-
- PR target/27650
- * class.c (check_for_override): Remove dllimport from virtual
- methods.
-
-2006-09-18 Steven Bosscher <steven@gcc.gnu.org>
-
- PR c++/29087
- * parser.c (cp_parser_labeled_statement): Return nothing. Do
- not take in_statement_expr and in_compound as arguments. Rename
- to cp_parser_label_for_labeled_statement. Parse only the label,
- not the statement.
- (cp_parser_statement): Parse the statement of a labeled-statement
- from here, using tail recursion.
-
-2006-09-14 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/29002
- * init.c (build_zero_init): If we have an error mark node for
- the array size, return.
-
-2006-09-10 Mark Mitchell <mark@codesourcery.com>
-
- 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 <jason@redhat.com>
-
- PR c++/28996
- * cvt.c (convert_to_void): Strip COMPONENT_REF to functions.
-
-2006-09-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- 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 <pinskia@physics.uc.edu>
-
- 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 <jason@redhat.com>
-
- 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 <simartin@users.sourceforge.net>
-
- PR c++/28284
- * pt.c (fold_non_dependent_expr): Make sure expr is not
- dereferenced if it is NULL.
-
-2006-09-06 Zak Kipling <zak@transversal.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <jason@redhat.com>
-
- 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 <jason@redhat.com>
-
- 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 <nathan@codesourcery.com>
-
- PR 23287 Revert my 2006-09-01 patch.
- * parser.c: Reverted.
- * pt.c: Reverted.
-
-2006-09-02 Lee Millward <lee.millward@codesourcery.com>
-
- 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 <jakub@redhat.com>
-
- 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 <nathan@codesourcery.com>
-
- 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 <jason@redhat.com>
-
- 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 <pinskia@physics.uc.edu>
-
- 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 <joern.rennecke@st.com>
-
- PR c++/28139
- * except.c (expand_start_catch_block): Use correct types for bitwise
- copy.
-
-2006-08-28 Jason Merrill <jason@redhat.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <mark@codesourcery.com>
-
- 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 <lee.millward@codesourcery.com>
-
- 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 <joseph@codesourcery.com>
-
- 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 <lee.millward@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <mark@codesourcery.com>
-
- PR c++/28056
- * decl.c (grokdeclarator): Disallow declarations with qualified
- names in local scopes.
-
-2006-08-25 Nathan Sidwell <nathan@codesourcery.com>
-
- 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 <dannysmith@users.sourceforge.net>
-
- 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 <jason@redhat.com>
-
- PR c++/27714
- * pt.c (push_template_decl_real): A friend template with class
- scope isn't primary.
-
-2006-08-23 Benjamin Smedberg <benjamin@smedbergs.us>
-
- 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 <jason@redhat.com>
-
- 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 <pinskia@physics.uc.edu>
-
- PR C++/28450
- * cp/init.c (build_zero_init): Handle VECTOR_TYPE and
- COMPLEX_TYPEs.
-
-2006-08-22 Simon Martin <simartin@users.sourceforge.net>
-
- 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 <jason@redhat.com>
-
- 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 <jason@redhat.com>
-
- 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 <lee.millward@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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) <case CONSTRUCTOR>: Robustify.
-
-2006-08-17 Paolo Bonzini <bonzini@gnu.org>
-
- PR c++/28573
- * semantics.c (finish_offsetof): Add new argument to fold_offsetof.
-
-2006-08-16 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR c++/28302
- * typeck.c (build_unary_op <case BIT_NOT_EXPR:>): Don't call
- perform_integral_promotions for non integral type.
-
-2006-08-16 Jason Merrill <jason@redhat.com>
-
- PR c++/28385
- * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template
- if arg is a function.
-
-2006-08-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/28593
- * init.c (build_new): Return early on invalid placement.
-
-2006-08-15 Lee Millward <lee.millward@codesourcery.com>
-
- PR c++/28594
- * pt.c (process_template_parm): Robustify.
-
-2006-08-14 Steve Ellcey <sje@cup.hp.com>
-
- PR c++/28288
- PR c++/14556
- * operators.def: Remove <?, ?>, <?=, and >?= 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 <jason@redhat.com>
-
- PR c++/28559
- * parser.c (cp_parser_elaborated_type_specifier): Also ignore
- attributes applied to a TYPENAME_TYPE.
-
-2006-08-09 Lee Millward <lee.millward@codesourcery.com>
-
- 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 <lee.millward@codesourcery.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <rguenther@suse.de>
-
- PR c++/28479
- Revert
- 2006-07-05 Richard Guenther <rguenther@suse.de>
- Andrew Pinski <pinskia@gcc.gnu.org>
-
- PR c++/27084
- * cp-objcp-common.c (cxx_types_compatible_p): Ignore
- top level qualifiers for pointer type comparisons.
-
-2006-08-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/28557
- * pt.c (tsubst_baselink): Substitute into BASELINK_OPTYPE.
-
-2006-07-31 Mark Mitchell <mark@codesourcery.com>
-
- 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 <sje@cup.hp.com>
-
- PR c++/28432
- * decl2.c (check_classfn): Remove early return.
- * search.c (lookup_member): Return NULL with bad type.
-
-2006-08-01 Steve Ellcey <sje@cup.hp.com>
-
- PR c++/28256
- * decl.c (check_initializer): Check for 1 initializer on scalar types.
-
-2006-08-01 Daniel Jacobowitz <dan@codesourcery.com>
-
- PR debug/23336
- * pt.c (tsubst_copy_and_build): Mark used enum types.
- * semantics.c (finish_id_expression): Likewise.
-
-2006-07-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/6634
- * decl.c (grokdeclarator): Check whether "long" or "short" was
- specified for non-integral types.
-
-2006-07-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies.
-
-2006-07-28 Lee Millward <lee.millward@codesourcery.com>
-
- 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 <kazu@codesourcery.com>
-
- * cp-tree.h: Fix a comment typo.
-
-2006-07-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27572
- * decl.c (grokdeclarator): Return error_mark_node after invalid
- typedef.
-
-2006-07-23 Daniel Jacobowitz <dan@codesourcery.com>
-
- PR c++/28460
- * decl.c (grokvardecl): Use FROB_CONTEXT.
- * pt.c (register_specialization): Likewise.
-
-2006-07-23 Mark Mitchell <mark@codesourcery.com>
-
- 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 <jason@redhat.com>
-
- * 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 <mrs@apple.com>
-
- * decl2.c (determine_visibility_from_class): Don't use hidden
- visibility for explicit instantiations.
-
-2006-07-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- 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 <jason@redhat.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- PR c++/28337
- * typeck.c (build_binary_op): Short-circuit pointer arithmetic in
- templates.
-
-2006-07-18 Mark Mitchell <mark@codesourcery.com>
-
- 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 <lee.millward@gmail.com>
-
- 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 <sje@cup.hp.com>
-
- PR c++/27495
- * search.c (adjust_result_of_qualified_name_lookup): Change
- assert to part of if statement.
-
-2006-07-17 Steve Ellcey <sje@cup.hp.com>
-
- PR c++/28291
- * decl.c (reshape_init_class): Return error_mark_node on error.
-
-2006-07-17 Steve Ellcey <sje@cup.hp.com>
-
- PR c++/28304
- * decl2.c (check_classfn): Return NULL_TREE on error.
-
-2006-07-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- 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 <jakub@redhat.com>
-
- 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 <lee.millward@gmail.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- PR c++/28343
- * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node.
- * decl2.c (grokfield): Likewise.
-
-2006-07-12 Geoffrey Keating <geoffk@apple.com>
-
- * decl2.c (determine_visibility): Don't change visibility of
- function locals because of -fvisibility-inlines-hidden.
-
-2006-07-12 Jason Merrill <jason@redhat.com>
-
- PR c++/28217
- * semantics.c (note_decl_for_pch): Don't premangle templates.
-
-2006-07-12 Martin Michlmayr <tbm@cyrius.com>
-
- * typeck.c (string_conv_p): Remove spurious quotation mark in
- warning.
-
-2006-07-07 Lee Millward <lee.millward@gmail.com>
- Andrew Pinski <pinskia@gmail.com>
-
- 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 <jason@redhat.com>
-
- PR c++/28279
- * decl2.c (finish_static_data_member_decl): Don't assert
- TREE_PUBLIC.
-
-2006-07-05 Jason Merrill <jason@redhat.com>
-
- 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 <rguenther@suse.de>
- Andrew Pinski <pinskia@gcc.gnu.org>
-
- PR c++/27084
- * cp-objcp-common.c (cxx_types_compatible_p): Ignore
- top level qualifiers for pointer type comparisons.
-
-2006-07-01 Jason Merrill <jason@redhat.com>
-
- PR c++/28215
- * method.c (make_thunk): Unset DECL_USE_TEMPLATE and
- DECL_TEMPLATE_INFO.
-
-2006-06-30 Jason Merrill <jason@redhat.com>
-
- PR c++/26577
- * call.c (build_new_method_call): Force evaluation of the
- instance pointer, not the object.
-
-2006-06-30 Kazu Hirata <kazu@codesourcery.com>
-
- * decl2.c: Fix a comment typo.
-
-2006-06-30 Jason Merrill <jason@redhat.com>
-
- 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 <jason@redhat.com>
-
- 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 <jason@redhat.com>
-
- PR c++/27424
- * pt.c (convert_template_argument): Pass all template arguments
- on to coerce_template_template_parms.
-
-2006-06-25 Lee Millward <lee.millward@gmail.com>
- Mark Mitchell <mark@codesuorcery.com>
-
- 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 <lee.millward@gmail.com>
-
- 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 <sje@cup.hp.com>
-
- PR c++/28114
- * name-lookup.c (pushtag): Return if we have error_mark_node.
-
-2006-06-23 Steve Ellcey <sje@cup.hp.com>
-
- PR c++/27019
- * typeck2.c (process_init_constructor_array): Set ce->value on errors.
-
-2006-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- 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 <dannysmith@users.sourceforge.net>
-
- PR target/27789
- * decl.c (start_decl): Check that dllimports are not initialized.
-
-2006-06-22 Lee Millward <lee.millward@gmail.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- PR c++/28111
- * pt.c (determine_specialization): Check for invalid decls.
-
- PR c++/28110
- * pt.c (unify) <case TEMPLATE_PARM_INDEX>: Check for invalid
- parameters.
-
- PR c++/28109
- * rtti.c (get_tinfo_decl_dynamic): Robustify.
-
-2006-06-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- 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 <mark@codesourcery.com>
-
- * pt.c (instantiate_template): Fix typo in comment.
-
-2006-06-19 Richard Guenther <rguenther@suse.de>
-
- * parser.c (CP_LEXER_BUFFER_SIZE): Adjust to assure near
- power-of-two token vector size.
-
-2006-06-16 Mark Mitchell <mark@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <gdr@integrable-solutions.net>
-
- * typeck.c (build_modify_expr): Tidy diagnostic message.
-
-2006-06-14 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/28018
- * typeck.c (build_modify_expr): Disallow array assignment.
-
-2006-06-14 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * cp-tree.def: Fix typo.
-
-2006-06-13 Mark Mitchell <mark@codesourcery.com>
-
- 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 <jakub@redhat.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <roger@eyesopen.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- 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 <mark@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27804
- * init.c (constant_value_1): Return decl instead of error_mark_node
- for invalid initializers.
-
-2006-06-01 Andrew Pinski <pinskia@physics.uc.edu>
-
- 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 <pinskia@physics.uc.edu>
-
- PR c++/26740
- * typeck.c (build_unary_op): Mark the function as being used.
-
-2006-06-01 Alexandre Oliva <aoliva@redhat.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <mark@codesourcery.com>
-
- 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 <kazu@codesourcery.com>
-
- * pt.c (convert_nontype_argument): Fix a typo in an error
- message.
-
-2006-05-28 Kazu Hirata <kazu@codesourcery.com>
-
- * decl.c, decl2.c, parser.c: Fix comment typos. Follow
- spelling conventions.
-
-2006-05-24 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20103
- * decl.c (cp_make_fname_decl): Don't set DECL_INITIAL to
- error_mark_node to indicate an initialization is OK.
- (start_decl): Likewise. Adjust call to start_decl_1.
- (start_decl_1): Add initialized parameter. Simplify.
- * except.c (initialize_handler_parm): Adjust call to
- setart_decl_1.
- (expand_start_catch_block): Let cp_finish_decl initialize catch
- parameters.
- * cp-tree.h (start_decl_1): Adjust prototype.
- * pt.c (tsubst_expr): Don't set DECL_INITIAL to error_mark_node.
- (instantiate_decl): Let cp_finish_decl handle initialization.
- * semantics.c (finish_compound_literal): Create a temporary
- variable for the literal.
- * typeck.c (build_unary_op): Remove COMPOUND_LITERAL_P special
- cases.
- * decl2.c (finish_static_data_member_decl): Don't set
- DECL_INITIAL.
- (grokfield): Do not try to initialize functions.
-
-2006-05-23 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20173
- * pt.c (determine_specialization): Disallow partial
- specializations of templates.
-
-2006-05-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27716
- * typeck.c (build_modify_expr): Test arguments for error_operand_p.
-
- * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE.
-
-2006-05-21 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27210
- * cp-tree.h (cp_save_expr): New function.
- * init.c (build_new): Correct logic for zero-element array
- warning. Use cp_save_expr.
- * tree.c (cp_save_expr): New function.
-
-2006-05-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27398
- * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE
- or void_type_node.
-
-2006-05-19 Mike Stump <mrs@apple.com>
-
- * typeck.c (default_conversion): Remove static.
-
-2006-05-19 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/26433
- * cp-tree.h (begin_function_try_block): Change prototype.
- (finish_function_handler_sequence): Likewise.
- * parser.c (cp_parser_function_try_block): Adjust calls.
- * pt.c (tsubst_expr): Adjust calls.
- * semantics.c (begin_function_try_block): Create an artificial
- outer scope.
- (finish_function_handler_sequence): Close it.
-
-2006-05-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27471
- PR c++/27506
- * typeck.c (decay_conversion): Convert bitfields to their declared
- types here. Improve documentation. Avoid use of cp_convert.
- (default_conversion): Make it static. Perform integral promotions
- before lvalue-to-rvalue, function-to-pointer, and array-to-pointer
- conversions.
- * init.c (build_init): Remove.
- (expand_default_init): Do not call rvalue.
- * call.c (null_ptr_cst_p): Robustify.
- (build_conditional_expr): Tidy.
- * except.c (build_throw): Do not perform lvalue-to-rvalue
- conversion on operand before initializing temporary.
- * tree.c (convert.h): Include it.
- (convert_bitfield_to_declared_type): Use convert_to_integer, not
- cp_convert.
- (rvalue): Don't convert bitfields to their declared type here.
- * cp-tree.h (build_init): Remove.
- (default_conversion): Likewise.
- * typeck2.c (build_m_component_ref): Do not perform
- lvalue-to-rvalue, function-to-pointer, or array-to-pointer
- conversions here. Correct error message.
-
-2006-05-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/26122
- * decl2.c (check_member_template): Remove checks for virtual
- functions.
- * parser.c (cp_parser_function_specifier_opt): Complain about
- virtual templates.
- (cp_parser_pure_specifier): Likewise.
-
- PR c++/26068
- * 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,
- to cp_parser_set_storage_class.
-
-2006-05-17 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/27491
- * semantics.c (finish_compound_literal): Only set TREE_HAS_CONSTRUCTOR
- on CONSTRUCTORs.
-
- PR middle-end/27415
- * parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
- on combined parallel workshare constructs.
- * pt.c (tsubst_expr): Copy OMP_PARALLEL_COMBINED flag.
-
-2006-05-16 H.J. Lu <hongjiu.lu@intel.com>
-
- PR driver/26885
- * Make-lang.in (GXX_OBJS): Replace gcc.o with $(GCC_OBJS).
-
-2006-05-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27339
- * cp-tree.h (perform_access_checks): New function.
- * semantics.c (perform_access_checks): New function.
- (perform_deferred_access_checks): Use it.
- * parser.c (cp_parser_simple_declaration): Adjust call to
- cp_parser_init_declarator.
- (cp_parser_type_parameter): Do not defer checks in default
- arguments.
- (cp_parser_explicit_specialization): Adjust call to
- cp_parser_single_declaration.
- (cp_parser_init_declarator): Perform template-parameter access
- checks.
- (cp_parser_parameter_declaration): Do not defer checks for
- template parameter default arguments.
- (cp_parser_template_declaration_after_export): Gather access
- checks for template parameters, and pass them to
- cp_parser_single_declaration.
- (cp_parser_template_parameter_access_checks): New function.
- (cp_parser_single_declaration): Add checks parameter.
-
- PR c++/27505
- * call.c (convert_like_real): Convert bitfields to their declared
- types when forming an rvalue.
- * tree.c (convert_bitfield_to_declared_type): New function.
- (rvalue): Use it.
- * cp-tree.h (convert_bitfield_to_declare_type): Declare it.
-
-2006-05-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27582
- * pt.c (any_dependent_template_arguments_p): Return early on invalid
- argument list.
-
- PR c++/27581
- * search.c (adjust_result_of_qualified_name_lookup): Skip on
- invalid context_class.
-
- PR c++/27315
- * pt.c (do_decl_instantiation): Return early on invalid decl.
-
- PR c++/27559
- * pt.c (push_template_decl_real): Return error_mark_node instead
- of broken decl.
-
- PR c++/27496
- * pt.c (tsubst_friend_class): Return early on invalid friend
- declarations.
-
-2006-05-14 H.J. Lu <hongjiu.lu@intel.com>
-
- * Make-lang.in (cp/decl.o): Add dependency on $(TARGET_H).
- (cp/decl2.o): Likewise.
- (cp/typeck.o): Likewise.
- (cp/cvt.o): Likewise.
- (cp/parser.o): Likewise.
- (cp/call.o): Replace target.h with $(TARGET_H).
-
-2006-05-14 Alexandre Oliva <aoliva@redhat.com>
-
- * pt.c (build_non_dependent_expr): Leave ADDR_EXPR of
- COMPONENT_REF alone.
-
-2006-05-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27547
- * decl.c (copy_fn_p): Return early on non-member functions.
-
-2006-05-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27447
- * decl2.c (build_memfn_type): Skip invalid functions and class types.
-
-2006-05-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27427
- * pt.c (convert_nontype_argument): Return early on invalid arguments.
-
- * pt.c (process_template_parm): Remove superfluous temporary.
-
- PR c++/27430
- * pt.c (process_template_parm): Handle erroneous non-type parameters.
-
- PR c++/27423
- * typeck.c (convert_for_initialization): Skip erroneous types.
-
- PR c++/27422
- * typeck.c (convert_arguments): Return early on args with
- invalid types.
-
-2006-05-03 Aldy Hernandez <aldyh@redhat.com>
-
- PR/21391
- * typeck.c (build_static_cast_1): Save casted types in used types
- hash table.
- (build_reinterpret_cast_1): Same.
- * rtti.c (build_dynamic_cast_1): Same.
-
-2006-05-04 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/27359
- * parser.c (cp_parser_omp_for_loop): Only call
- cp_parser_abort_tentative_parse if cp_parser_parse_definitely was not
- called.
-
-2006-05-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27102
- * decl.c (grokdeclarator): Robustify checks for defining members
- of incomplete types.
-
- PR c++/27309
- * class.c (add_method): Call grok_special_member_properties.
- * decl.c (grokdeclarator): Don't call it here.
- (copy_fn_p): A TEMPLATE_DECL is never a copy constructor or
- assignment operator. Set TYPE_HAS_CONSTURCTOR if DECL is a
- constructor.
- (start_method): Don't call grok_special_member_properties.
- * method.c (implicitly_declare_fn): Likewise.
- * pt.c (instantiate_class_template): Likewise.
- * decl2.c (grokfield): Likewise.
-
-2006-05-02 Jakub Jelinek <jakub@redhat.com>
-
- PR middle-end/27337
- * cp-gimplify.c (cxx_omp_privatize_by_reference): New function.
- * cp-tree.h (cxx_omp_privatize_by_reference): New prototype.
- * cp-objcp-common.h (LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE): Define.
-
-2006-04-30 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27094
- * pt.c (tsubst_default_argument): Increment function_depth around
- call to tsubst_expr.
- * parser.c (cp_parser_parameter_declaration): Likewise.
- * decl2.c (mark_used): Tidy.
-
-2006-04-30 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27278
- * decl.c (grok_op_properties): Skip operators with invalid args
- when checking for class-type or enum-type args.
-
-2006-04-29 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/27279
- * decl.c (copy_fn_p): Skip functions with invalid first arg.
-
-2006-04-27 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27292
- * tree.c (rvalue): Convert bitfields to their declared types.
-
- PR c++/27102
- * typeck2.c (cxx_incomplete_type_diagnostic): Handle
- TYPENAME_TYPE.
-
-2006-04-24 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27292
- * typeck.c (decay_conversion): Don't adjust bitfield types.
- (perform_integral_promotions): Treat bitfield enums as enums, not
- as short integer types.
- * tree.c (rvalue): Convert bitfields to their correct types.
-
-2006-04-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/19963
- * class.c (layout_class_type): Skip fields with invalid types.
-
-2006-04-23 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/26912
- * cp-tree.h (build_this_parm): Declare.
- (grok_method_quals): Remove.
- (build_memfn_type): Declare.
- (build_artificial_parm): Declare.
- (do_friend): Remove quals parameter.
- * decl.c (build_this_parm): New function.
- (grokfndecl): Use it. Do not pass quals to grokclassfn.
- (grokdeclarator): Rename quals to memfn_quals. Avoid allocating
- unnecessary TYPE_DECLs. Correct qualification of member function
- types. Tidy.
- * method.c (implicitly_declare_fn): Use build_this_parm.
- * friend.c (do_friend): Remove quals parameter.
- * decl2.c (grok_method_quals): Remove.
- (build_memfn_type): New function.
- (build_artificial_parm): Give it external linkage.
- (grokclassfn): Remove quals parameter. Do not build "this"
- PARM_DECL here.
-
- PR c++/26534
- * cp-tree.h (is_bitfield_expr_with_lowered_type): New function.
- * typeck.c (is_bitfield_expr_with_lowered_type): New function.
- (decay_conversion): Convert bitfield expressions to the correct
- type.
- (build_modify_expr): Remove spurious conversions.
- * class.c (layout_class_type): Modify the type of bitfields to
- 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 <kazu@codesourcery.com>
-
- * decl.c: Fix comment typos.
-
-2006-04-21 Eric Christopher <echristo@apple.com>
-
- * decl.c: Fix typo in function name.
-
-2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/26558
- * parser.c (cp_parser_class_name): Check for invalid typenames.
- Rearrange code.
-
- PR c++/26739
- * pt.c (tsubst_friend_function): Return early if
- pushdecl_namespace_level fails.
-
- PR c++/26036
- * typeck.c (convert_arguments): Return error_mark_node instead of
- error_mark_list.
- * cp-tree.h (error_mark_list): Remove declaration.
- * decl.c (error_mark_list): Remove definition.
- (cxx_init_decl_processing): Do not initialize error_mark_list.
-
- PR c++/10385
- * rtti.c (build_dynamic_cast_1): Check for invalid conversions
- before calling convert_to_reference.
- * cvt.c (convert_to_reference): Assert that reftype is a
- REFERENCE_TYPE.
-
-2006-04-19 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/27102
- * class.c (currently_open_class): Tidy.
- * decl.c (grokdeclarator): If we encounter an erroneous
- declarator, assume that we have already issued an error message
- and return. Return error_mark_node instead of NULL_TREE in more
- places. Issue errors about function definitions that do not have
- a function declarator. Check for complete types for all function
- definitions.
- * cp-tree.h (cp_error_declarator): Remove.
- (currently_open_class): Change return type.
- * parser.c (cp_parser_id_expression): Add optional_p parameter.
- (cp_parser_parse_diagnose_invalid_type_name): Adjust calls.
- (cp_parser_id_expression): Likewise.
- (cp_parser_unqualified_id): If the name is optional, return
- NULL_TREE.
- (cp_parser_postfix_dot_deref_expression): Adjust calls.
- (cp_parser_type_parameter): Likewise.
- (cp_parser_unqualified_id): Likewise.
- (cp_parser_direct_declarator): Likewise.
- (cp_parser_declarator_id): Add optional_p parameter.
- (cp_parser_function_definition_from_specifiers_and_declarator):
- Assume that start_function indicates failure only if it has issued
- an error.
- (cp_parser_omp_var_list_no_open): Adjust calls.
-
-2006-04-17 Janis Johnson <janis187@us.ibm.com>
-
- PR c++/26114, c++/26115
- * typeck.c (cxx_mark_addressable): Restore check for extra_warnings.
- * class.c (check_field_decls): Ditto.
-
-2006-04-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * init.c (build_offset_ref): Remove superfluous temporary.
-
-2006-04-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/26365
- * typeck.c (finish_class_member_access_expr): Robustify
-
-2006-04-15 Kazu Hirata <kazu@codesourcery.com>
-
- * Make-lang.in (cp/pt.o): Depend on vecprim.h.
- * pt.c: Include vecprim.h.
- (inline_parm_levels): Change the type to VEC(int,heap) *.
- (inline_parm_levels_used): Remove.
- (maybe_begin_member_template_processing,
- maybe_end_member_template_processing): Use VEC instead of
- VARRAY.
-
- * cp/call.c: Fix comment typos.
-
-2006-04-12 Mark Mitchell <mark@codesourcery.com>
-
- * parser.c (cp_parser_init_declarator): Initialize local variables
- aggressively.
-
-2006-04-12 Roger Sayle <roger@eyesopen.com>
-
- * parser.c (cp_parser_init_declarator): Initialise
- is_parenthesized_init to false to avoid compiler warning.
-
-2006-04-11 Mark Mitchell <mark@codesourcery.com>
-
- * cp-tree.h (build_operator_new_call): Adjust prototype.
- (build_new_method_call): Likewise.
- (build_op_delete_call): Likewise.
- * init.c (build_raw_new_expr): New function.
- (build_new_1): Pass information as parameters, rather than
- bundling it into a NEW_EXPR.
- (build_new): Adjust accordingly.
- (build_vec_delete_1): Adjust for changes to build_op_delete_call.
- (build_delete): Likewise.
- * decl.c (finish_destructor_body): Likewise.
- * call.c (build_operator_new_call): Return the allocation function
- used.
- (build_op_delete_call): Take allocation function as parameter.
- (build_special_member_call): Adjust call to build_new_method_call.
- (build_new_method_call): Return function called.
- * pt.c (tsubst_copy_and_build): Adjust call to
- build_new_method_call.
- * semantics.c (finish_call_expr): Likewise.
- * parser.c (cp_parser_postfix_expression): Likewise.
- * typeck2.c (cxx_incomplete_type_diagnostic): Refer to
- "incomplete", not "undefined", types.
-
- PR c++/26295
- * decl.c (grokdeclarator): Remove namespace-handling code for
- pointers-to-members.
- * parser.c (cp_parser_ptr_operator): Check for qualified names
- using namespaces.
-
- PR c++/26122
- * parser.c (cp_parser_init_declarator): Adjust logic for deciding
- whether or not to look for a pure-specifier.
- (cp_parser_member_declaration): Likewise.
-
-2006-04-08 Kazu Hirata <kazu@codesourcery.com>
-
- * decl2.c, pt.c, semantics.c: Fix comment typos.
-
-2006-04-06 Roger Sayle <roger@eyesopen.com>
-
- * call.c (null_ptr_cst_p): Add explicit TREE_CONSTANT_OVERFLOW check.
-
-2006-04-05 Jason Merrill <jason@redhat.com>
-
- * name-lookup.c (push_namespace_with_attribs): Temporarily disable
- default hidden visibility for anonymous namespace.
-
-2006-03-29 Roger Sayle <roger@eyesopen.com>
-
- PR c++/22494
- * init.c (build_vec_delete_1): Convert BASE pointer's type to
- the base pointer type to avoid a type mismatch in the EQ_EXPR.
-
-2006-03-24 Carlos O'Donell <carlos@codesourcery.com>
-
- * search.c (maybe_suppress_debug_info): If
- flag_emit_class_debug_always then don't suppress.
-
-2006-03-22 Jason Merrill <jason@redhat.com>
-
- * name-lookup.c (push_namespace_with_attribs): Only apply hidden
- visibility to anonymous namespaces if HAVE_GAS_HIDDEN.
-
-2006-03-21 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/26691
- * cp-gimplify.c (cxx_omp_clause_apply_fn): Handle default arguments.
-
-2006-03-21 Jason Merrill <jason@redhat.com>
-
- PR c++/21581
- * parser.c (cp_parser_declaration): Support attributes on
- anonymous namespaces.
- * name-lookup.c (push_namespace_with_attribs): Anonymous
- namespaces default to hidden visibility.
-
-2006-03-20 Jason Merrill <jason@redhat.com>
-
- PR c++/21764, c++/19238
- * decl.c (cp_finish_decl): Call determine_visibility later.
- (start_preparsed_function): Likewise.
- * cp-tree.h (CP_TYPE_CONTEXT, TYPE_NAMESPACE_SCOPE_P): New macros.
- (TYPE_CLASS_SCOPE_P, TYPE_FUNCTION_SCOPE_P): New macros.
- * name-lookup.h (struct cp_binding_level): Add has_visibility
- bitfield.
- * name-lookup.c: Include c-pragma.h.
- (push_namespace_with_attribs): Split out from push_namespace.
- Push visibility if appropriate. Set TREE_PUBLIC on namespaces.
- (leave_scope): Pop visibility if appropriate.
- * decl2.c (determine_visibility_from_class): Split out from...
- (determine_visibility): ...here. Handle function scope and
- nested classes.
- (import_export_decl): Move visibility handling to
- determine_visibility_from_class.
- * parser.c (cp_parser_declaration, cp_parser_namespace_name): Allow
- attributes on namespace declarations.
-
-2006-03-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/6634
- * decl.c (grokdeclarator): Do not accept long long double.
- Reorganize checks for invalid (combinations of) type modifiers.
- Quote modifiers in messages.
-
-2006-03-09 Jason Merrill <jason@redhat.com>
-
- PR c++/16387, c++/16389
- * typeck.c (cxx_alignof_expr, cxx_sizeof_expr): New functions.
- (cxx_sizeof_or_alignof_expr): Split out from here.
-
-2006-03-09 Diego Novillo <dnovillo@redhat.com>
-
- Merge from gomp-20050608-branch
-
- 2006-02-02 Diego Novillo <dnovillo@redhat.com>
-
- * decl.c (pop_labels_1): Use appropriate pointer casting.
- (poplevel_named_label_1): Likewise.
- (named_label_entry_hash): Likewise.
- (named_label_entry_eq): Likewise.
- (check_goto): Likewise.
- (define_label): Likewise.
-
- 2006-01-26 Diego Novillo <dnovillo@redhat.com>
-
- * cp-tree.h (CP_OMP_CLAUSE_INFO): Use TREE_TYPE instead
- of TREE_BLOCK.
- * pt.c: Use OMP_CLAUSE_CODE and OMP_CLAUSE_OPERAND
- instead of TREE_CODE/TREE_OPERAND.
- * semantics.c: Likewise.
- * parser.c: Likewise.
-
- 2005-11-10 Diego Novillo <dnovillo@redhat.com>
-
- * parser.c (cp_parser_omp_threadprivate): Emit diagnostic if
- target does not support TLS.
-
- 2005-11-09 Jakub Jelinek <jakub@redhat.com>
-
- * decl.c (redeclaration_error_message): Don't error about
- DECL_THREAD_LOCAL_P mismatches if CP_DECL_THREADPRIVATE_P
- (olddecl).
-
- 2005-11-08 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/24735
- * semantics.c (finish_omp_barrier, finish_omp_flush): New
- functions.
- * parser.c (cp_parser_omp_barrier): Call finish_omp_barrier.
- (cp_parser_omp_flush): Call finish_omp_flush.
- * cp-tree.h (finish_omp_barrier, finish_omp_flush): New
- prototypes.
-
- PR c++/24734
- * pt.c (tsubst_expr): Handle OMP_MASTER and OMP_ORDERED.
-
- 2005-11-03 Jakub Jelinek <jakub@redhat.com>
-
- * semantics.c (finish_omp_threadprivate): Error on class-scope
- variables.
-
- 2005-11-02 Jakub Jelinek <jakub@redhat.com>
-
- * parser.c (cp_parser_omp_all_clauses): If some clause
- type is not allowed, don't remove just one of the
- clauses, but all clauses added in that loop round.
-
- * semantics.c (finish_omp_clauses): Fix function
- comment. Don't handle non-const or mutable specially,
- as const and not mutable is predetermined shared and
- that leads to double error. Don't ICE if copyin var is
- PARM_DECL.
-
- PR c++/24613
- * parser.c (cp_parser_pragma): Diagnose
- PRAGMA_OMP_SECTION outside of PRAGMA_OMP_SECTIONS
- construct.
-
- * semantics.c (finish_omp_threadprivate): Error if V
- is automatic variable or has incomplete type.
-
- 2005-11-01 Diego Novillo <dnovillo@redhat.com>
-
- * parser.c (cp_parser_omp_all_clauses): Use
- OMP_CLAUSE_CHAIN instead of TREE_CHAIN.
-
- 2005-11-01 Diego Novillo <dnovillo@redhat.com>
-
- * parser.c (cp_parser_omp_all_clauses): When emitting an
- error message, remove the invalid clause from the list.
-
- 2005-10-31 Diego Novillo <dnovillo@redhat.com>
-
- * parser.c (cp_parser_omp_parallel): Do not allow 'nowait' in
- combined parallel+workshare directives.
-
- 2005-10-31 Richard Henderson <rth@redhat.com>
-
- * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DTOR):
- Use cxx_omp_clause_dtor.
- * cp-tree.h (CP_OMP_CLAUSE_INFO): New.
- (cxx_omp_clause_dtor): New.
- * cp-gimplify.c (cxx_omp_clause_apply_fn): New.
- (cxx_omp_clause_default_ctor): Use it.
- (cxx_omp_clause_copy_ctor, cxx_omp_clause_assign_op):
- Likewise.
- (cxx_omp_clause_dtor): New.
- * semantics.c (finish_omp_clauses): Rewrite cdtor
- checking to fill in CP_OMP_CLAUSE_INFO. Don't
- specialcase LASTPRIVATE for removal.
- (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor,
- cxx_omp_clause_assign_op): Move to cp-gimplify.c.
-
- 2005-10-28 Jakub Jelinek <jakub@redhat.com>
-
- * semantics.c (finish_omp_threadprivate): If
- DECL_RTL_SET_P, call make_decl_rtl again so that
- encode_section_info can update SYMBOL_REF's flags.
-
- 2005-10-26 Jakub Jelinek <jakub@redhat.com>
-
- * semantics.c (finish_omp_for): Don't segfault if COND
- or INCR is NULL. If not calling c_finish_omp_for
- right away and one of COND and INCR is NULL, issue
- error and don't expand anything.
-
- PR c++/24512
- * cp-tree.h (finish_omp_for): Add PRE_BODY argument.
- * semantics.c (finish_omp_for): Likewise. Set
- OMP_FOR_PRE_BODY to PRE_BODY if deferring, add it
- into the current statement list if not processing
- template decl or pass it to c_finish_omp_for.
-
- * parser.c (cp_parser_omp_for_loop): Expand optional DECL_EXPRs
- into PRE_BODY statement list. Pass it to finish_omp_for.
- * pt.c (tsubst_expr) <case OMP_FOR>: tsubst_expr also
- OMP_FOR_PRE_BODY into PRE_BODY stmt list, pass it to
- finish_omp_for. Put all the statements into sk_omp
- scope.
-
- 2005-10-25 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/24516
- * parser.c (struct cp_parser): Rename in_iteration_statement
- field to in_statement.
- (IN_SWITCH_STMT, IN_ITERATION_STMT): Define.
- (IN_OMP_BLOCK, IN_OMP_FOR): Change values.
- (cp_parser_new, cp_parser_begin_omp_structured_block,
- cp_parser_end_omp_structured_block,
- cp_parser_omp_for_loop): Adjust for
- in_iteration_statement renaming.
- (cp_parser_selection_statement): Save
- parser->in_iteration, or it temporarily with
- IN_SWITCH_STMT for the
- cp_parser_implicitly_scoped_statement call.
- (cp_parser_iteration_statement): Adjust for
- in_iteration_statement renaming. Use
- IN_ITERATION_STMT rather than true.
- (cp_parser_jump_statement): Adjust for
- in_iteration_statement renaming and new values. Don't
- error on break in a switch statement within OMP_FOR or
- OpenMP structured block.
-
- PR c++/24513
- * parser.c (cp_parser_cache_group): Don't stop if next
- token is CPP_PRAGMA_EOL and end is CPP_PRAGMA_EOL as
- well. If current token is CPP_PRAGMA, consume
- everything until CPP_PRAGMA_EOL inclusive.
-
- 2005-10-24 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/24502
- * semantics.c (finish_omp_for): Handle MODOP_EXPR in
- addition to MODIFY_EXPR.
-
- 2005-10-23 Richard Henderson <rth@redhat.com>
-
- * cp-gimplify.c (struct cp_gimplify_ctx): Remove.
- (bc_label): New.
- (begin_bc_block, finish_bc_block): Use it.
- (push_context, pop_context): Remove.
- (cp_genericize): Don't use them. Assert bc_label is null.
- * semantics.c (finish_omp_clauses): Create a fake data
- element of TYPE for probing ctors.
-
- 2005-10-23 Richard Henderson <rth@redhat.com>
-
- * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): New.
- (LANG_HOOKS_OMP_CLAUSE_COPY_CTOR): New.
- (LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP): New.
- (LANG_HOOKS_OMP_CLAUSE_DTOR): New.
- * semantics.c (finish_omp_clauses): Look through
- arrays when looking up special member calls. Also
- remove FIRSTPRIVATE when LASTPRIVATE fails.
- (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor): New.
- (cxx_omp_clause_assign_op): New.
- * cp-tree.h: Declare them.
-
- 2005-10-21 Richard Henderson <rth@redhat.com>
-
- * decl.c (check_previous_goto_1): Return false if error.
- (check_switch_goto): Likewise.
- (finish_case_label): Don't emit the case label on error.
- * parser.c (struct cp_parser): Revert
- in_switch_statement_p changes.
- (cp_parser_labeled_statement,
- cp_parser_selection_statement): Likewise.
- (cp_parser_begin_omp_structured_block): Don't save...
- (cp_parser_end_omp_structured_block): or restore
- in_switch_statement_p.
-
- 2005-10-21 Richard Henderson <rth@redhat.com>
-
- * semantics.c (finish_omp_threadprivate): Set
- decl_flags.u2sel when necessary.
-
- 2005-10-21 Richard Henderson <rth@redhat.com>
-
- * decl.c (poplevel_named_label_1): Restore creation of the
- 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
- converting to cdtor_label goto.
-
- 2005-10-21 Richard Henderson <rth@redhat.com>
-
- PR c++/24451
- * decl.c (check_omp_return): Return false on error.
- * cp-tree.h (check_omp_return): Update decl.
- * semantics.c (finish_return_stmt): Avoid adding
- return on error.
-
- 2005-10-21 Richard Henderson <rth@redhat.com>
-
- * cp-tree.h (struct language_function): Remove
- x_named_label_uses.
- Change x_named_labels to a hashtable.
- (check_omp_return): Declare.
- * decl.c (struct named_label_use_entry): Rename from
- named_label_use_list. Remove label_decl.
- (struct named_label_entry): Rename from
- named_label_list. Remove old_value and next. Change
- in_try_scope and in_catch_scope to bool. Add
- in_omp_scope.
- (pop_labels_1): New.
- (pop_labels): Use it.
- (pop_local_label, poplevel_named_label_1): New.
- (poplevel): Use them.
- (named_label_entry_hash, named_label_entry_eq): New.
- (make_label_decl): Create named_labels. Move label
- creation bits from lookup_label.
- (declare_local_label): Tidy.
- (identify_goto): Split out from ...
- (check_previous_goto_1): Add exited_omp argument.
- Handle omp scopes.
-
- (use_label): Merge into...
- (check_goto): ... here. Handle omp scopes.
- (check_omp_return): New.
- (check_previous_gotos): Merge into...
- (define_label): ... here.
- (save_function_data): Remove x_named_label_uses reference.
- (finish_function): Likewise.
- * name-lookup.h (sk_omp): New.
- * name-lookup.c (begin_scope): Handle it.
- * parser.c (cp_parser_omp_for): Don't create extra
- compound stmt.
-
- (cp_parser_omp_sections): Likewise.
- * semantics.c (finish_return_stmt): Call check_omp_return.
- (begin_omp_structured_block): Use sk_omp.
- (finish_omp_structured_block): Use do_poplevel. Don't build a
- MUST_NOT_THROW expression here.
- (begin_omp_parallel, finish_omp_parallel): Don't create extra
- compound statements.
-
- 2005-10-21 Diego Novillo <dnovillo@redhat.com>
-
- PR 24455
- * cp/cp-tree.h (struct lang_decl_flags): Add field
- threadprivate_p.
- (CP_DECL_IS_THREADPRIVATE): Define.
- * cp/semantics.c (finish_omp_threadprivate): Set. Do
- not error out if CP_DECL_IS_THREADPRIVATE is set
- already.
- * cp/decl.c (duplicate_decls): Merge
- CP_DECL_THREADPRIVATE_P.
-
- 2005-10-20 Richard Henderson <rth@redhat.com>
-
- * cp-gimplify.c (cp_gimplify_omp_for): New.
- (cp_gimplify_expr): Call it.
- * cp-tree.h (OMP_FOR_GIMPLIFYING_P): New.
- * parser.c (struct cp_parser): Rename
- in_iteration_statement_p to in_iteration_statement and
- change to unsigned char. Similarly with
- in_switch_statement. Update all users.
- (IN_OMP_BLOCK, IN_OMP_FOR): New.
- (cp_parser_labeled_statement): Diagnose case labels
- binding closer to an openmp block nested than the
- switch.
- (cp_parser_jump_statement): Diagnose break and
- continue labels binding closer to an openmp block than
- an iteration or switch.
- (cp_parser_omp_for_loop): Mark in_iteration_statement
- for an omp for.
- (cp_parser_begin_omp_structured_block): New.
- (cp_parser_end_omp_structured_block): New.
- (cp_parser_omp_structured_block): Use them.
- (cp_parser_omp_for, cp_parser_omp_sections_scope): Likewise.
- (cp_parser_omp_parallel): Likewise.
-
- 2005-10-20 Richard Henderson <rth@redhat.com>
-
- * semantics.c (begin_omp_structured_block): New.
- (finish_omp_structured_block): New.
- (begin_omp_parallel, finish_omp_parallel): Use them.
- * parser.c (cp_parser_omp_structured_block): Likewise.
- (cp_parser_omp_for): Likewise.
- (cp_parser_omp_sections_scope): Likewise.
- * cp-tree.h: Declare them.
-
- 2005-10-20 Richard Henderson <rth@redhat.com>
-
- * parser.c (cp_parser_omp_master): Return the statement.
- (cp_parser_omp_ordered): Likewise.
- (cp_parser_omp_construct): Set the locus for them.
-
- 2005-10-19 Richard Henderson <rth@redhat.com>
-
- * semantics.c (finish_omp_atomic): Revert to
- uses_template_parms.
-
- 2005-10-19 Richard Henderson <rth@redhat.com>
-
- * semantics.c (finish_omp_clauses): Avoid
- DECL_THREAD_LOCAL_P on a PARM_DECL. Remove some
- stub asserts guaranteed to fail.
-
- 2005-10-19 Richard Henderson <rth@redhat.com>
-
- * 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_clause_if): Don't do error checking here.
- (cp_parser_omp_clause_num_threads): Likewise.
- (cp_parser_omp_clause_schedule): Likewise.
- (cp_parser_omp_atomic): Use finish_omp_atomic.
- (cp_parser_omp_for_loop): Don't discard DECL_EXPR.
- Don't decompose assignment statment here. Use
- finish_omp_for.
-
- * pt.c (tsubst_omp_clauses): New.
- (tsubst_expr): Handle OMP_PARALLEL, OMP_FOR, OMP_SECTIONS,
- OMP_SINGLE, OMP_SECTION, OMP_CRITICAL, OMP_ATOMIC.
- * semantics.c (finish_omp_clauses): New.
- (begin_omp_parallel, finish_omp_parallel): Know Less about the
- internals of the stmt_list stack.
- (finish_omp_for, finish_omp_atomic): New.
-
- 2005-10-18 Jakub Jelinek <jakub@redhat.com>
-
- * semantics.c (cxx_omp_predetermined_sharing): New function.
- * cp-tree.h (cxx_omp_predetermined_sharing): New prototype.
- * cp-objcp-common.h
- (LANG_HOOKS_OMP_PREDETERMINED_SHARING): Redefine.
-
- 2005-10-18 Richard Henderson <rth@redhat.com>
-
- * parser.c (cp_parser_omp_single): Use make_node and accessors
- instead of build.
-
- 2005-10-17 Richard Henderson <rth@redhat.com>
-
- * parser.c (cp_parser_omp_for_loop): Handle declarations.
-
- 2005-10-12 Richard Henderson <rth@redhat.com>
-
- * Make-lang.in (CXX_C_OBJS): Add c-omp.o.
- * cp-tree.h (begin_omp_parallel, finish_omp_parallel): Declare.
- (finish_omp_threadprivate): Declare.
- * parser.c (struct cp_lexer): Add in_pragma.
- (cp_lexer_consume_token): Don't consume a PRAGMA_EOL
- when in_pragma.
- (cp_parser_skip_to_closing_parenthesis): Stop at PRAGMA_EOL.
- (cp_parser_skip_to_end_of_statement): Likewise.
- (cp_parser_skip_to_end_of_block_or_statement): Likewise.
- (cp_parser_skip_to_closing_brace): Likewise.
- (cp_parser_skip_to_pragma_eol): Reset in_pragma.
- (cp_parser_require_pragma_eol): New.
- (cp_parser_statement): Add in_compound argument;
- update all callers.
- Restart if a non-statement pragma seen outside a
- compound.
- (cp_parser_statement_seq_opt): Stop at PRAGMA_EOL.
- (cp_parser_declaration_seq_opt): Likewise.
- (cp_parser_member_specification_opt): Likewise.
- (cp_parser_function_definition_after_decl): Likewise.
- (cp_parser_skip_until_found): Likewise.
- (cp_parser_cache_group): Likewise.
- (enum pragma_omp_clause, cp_parser_omp_clause_name,
- check_no_duplicate_clause,
- cp_parser_omp_var_list_no_open,
- cp_parser_omp_var_list, cp_parser_omp_clause_copyin,
- cp_parser_omp_clause_default, cp_parser_omp_clause_if,
- cp_parser_omp_clause_nowait,
- cp_parser_omp_clause_num_threads,
- cp_parser_omp_clause_ordered,
- cp_parser_omp_clause_reduction,
- cp_parser_omp_clause_schedule,
- cp_parser_omp_all_clauses,
- cp_parser_omp_structured_block, cp_parser_omp_atomic,
- cp_parser_omp_barrier, cp_parser_omp_critical,
- cp_parser_omp_flush, cp_parser_omp_for_loop,
- cp_parser_omp_for, cp_parser_omp_master,
- cp_parser_omp_ordered, cp_parser_omp_sections_scope,
- cp_parser_omp_sections, cp_parser_omp_parallel,
- cp_parser_omp_single, cp_parser_omp_threadprivate,
- cp_parser_omp_construct): New.
- (cp_parser_pragma): Handle OpenMP pragmas.
- * semantics.c (finish_omp_threadprivate): New.
- (begin_omp_parallel, finish_omp_parallel): New.
-
- 2005-10-11 Richard Henderson <rth@redhat.com>
-
- * parser.c (struct cp_token): Add pragma_kind.
- (eof_token): Initialize it.
- (cp_lexer_handle_pragma): Remove.
- (cp_parser_initial_pragma): New.
- (cp_lexer_new_main): Use it.
- (cp_lexer_get_preprocessor_token): Initialize pragma_kind.
- (cp_lexer_print_token): Don't handle CPP_PRAGMA.
- (cp_parser_skip_to_pragma_eol): New.
- (cp_parser_error): Use it.
- (pragma_lex): New.
-
- 2005-10-09 Richard Henderson <rth@redhat.com>
-
- * lex.c (parse_strconst_pragma): Update for c_lex name change.
- (handle_pragma_java_exceptions): Likewise.
- * parser.c (cp_lexer_new_main): Likewise.
-
- 2005-10-06 Richard Henderson <rth@redhat.com>
-
- * parser.c (cp_lexer_new_main): Comment out defer_pragmas.
- (cp_lexer_handle_pragma): Comment out
- cpp_handle_deferred_pragma.
-
- 2005-10-01 Richard Henderson <rth@redhat.com>
-
- * name-lookup.c (lookup_name): Remove prefer_type argument.
- (lookup_name_prefer_type): New function.
- * name-lookup.h (lookup_name_prefer_type): Declare it.
- * decl.c (lookup_and_check_tag): Use it.
- * pt.c (tsubst_friend_class): Likewise. Update for
- lookup_name change.
- (lookup_template_class, tsubst_copy_and_build): Likewise.
-
-2006-03-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/15759
- * tree.c (bot_manip): Don't call mark_used.
-
-2006-03-02 Mike Stump <mrs@apple.com>
-
- * decl2.c (import_export_decl): Remove redundant call to
- targetm.cxx.key_method_may_be_inline ().
-
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
-
- * decl.c (start_decl): Use have_global_bss_p when deciding
- whether to make the decl common.
-
-2006-03-01 Mike Stump <mrs@apple.com>
-
- PR darwin/25908
- * decl2.c (import_export_decl): Fix ABI breakage on darwin.
-
-2006-02-24 Geoffrey Keating <geoffk@apple.com>
-
- * except.c (expand_start_catch_block): Handle
- flag_use_cxa_get_exception_ptr.
-
-2006-02-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/26291
- * decl.c (grok_op_properties): Check for ellipsis in arguments of
- operators.
-
-2006-02-20 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * Make-lang.in (C++): Remove.
- (.PHONY): Remove C++.
-
-2006-02-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/26266
- * cp-tree.h (cp_finish_decl): Adjust declaration.
- (grokbitfield): Likewise.
- (finish_static_data_member_decl): Likewise.
- * init.c (constant_value_1): Ensure processing_template_decl when
- folding non-dependent initializers for static data members of
- dependent types. Return error_mark_node for erroneous
- initailizers.
- * class.c (get_vtable_decl): Use finish_decl, not cp_finish_decl.
- * decl.c (cp_make_fname_decl): Adjust call to cp_finish_decl.
- (cp_finish_decl): Add init_const_expr_p parameter. Set
- DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
- (finish_decl): Adjust call to cp_finish_decl.
- (compute_array_index_type): Robustify.
- (start_method): Use finish_decl, not cp_finish_decl.
- * rtti.c (emit_tinfo_decl): Likewise.
- * except.c (initialize_handler_parm): Adjust call to
- cp_finish_decl.
- (expand_start_catch_block): Likewise.
- * cvt.c (build_up_reference): Adjust call to cp_finish_decl.
- * pt.c (instantiate_class_template): Adjust call to
- finish_static_data_member_decl.
- (tsubst_expr): Use finish_decl, not cp_finish_decl.
- (instantiate_decl): Adjust call to cp_finish_decl.
- * name-lookup.c (pushdecl_top_level_1): Use finish_decl, not
- cp_finish_decl.
- * decl2.c (finish_static_data_member_decl): Add init_const_expr_p
- parameter.
- (grokfield): Likewise.
- * parser.c (cp_parser_condition): Check for constant initializers.
- (cp_parser_init_declarator): Adjust calls to grokfield and
- cp_finish_decl. Don't set
- DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
- (cp_parser_member_declaration): Likewise.
- (cp_parser_objc_class_ivars): Likewise.
-
-2006-02-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * call.c (standard_conversion): Return NULL instead of 0.
- (build_user_type_conversion_1): Likewise.
- (tourney): Likewise.
- * decl.c (redeclaration_error_message): Likewise.
- * error.c (language_to_string): Likewise.
-
-2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-tree.h (warn_hidden): Remove prototype.
- * class.c (warn_hidden): Make static.
-
- * cp-tree.h (build_type_conversion): Remove prototype.
- * cvt.c (build_type_conversion): Add prototype, make static.
-
- * cp-tree.h (push_tinst_level): Remove prototype.
- (pop_tinst_level): Likewise.
- * pt.c (push_tinst_level): Add prototype, make static.
- (pop_tinst_level): Likewise.
-
-2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * decl.c (grokdeclarator): Return NULL_TREE instead of 0.
- * typeck.c (unary_complex_lvalue): Likewise.
-
-2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * lex.c (parse_strconst_pragma): Return error_mark_node instead of
- "(tree)-1" to indicate failure. Simplify.
- (handle_pragma_interface): Test for error_mark_node instead of
- "(tree)-1".
- (handle_pragma_implementation): Likewise.
-
-2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/26151
- * parser.c (cp_parser_decl_specifier_seq): Check for duplicate
- decl-specifiers. Remove extra check for duplicate 'friend'.
- * decl.c (grokdeclarator): Remove check for duplicate
- decl-specifiers. Set longlong together with long_p.
-
-2006-02-12 Jason Merrill <jason@redhat.com>
-
- PR c++/24996
- * except.c (build_throw): Add a CLEANUP_POINT_EXPR inside the
- TRY_CATCH_EXPR or MUST_NOT_THROW_EXPR.
-
-2006-02-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * class.c (debug_class): Remove extern.
- (debug_thunks): Likewise.
-
-2006-02-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * typeck.c (string_conv_p): Don't test for flag_const_strings.
-
-2006-02-08 Jason Merrill <jason@redhat.com>
-
- PR c++/25979
- * cp-gimplify.c (cp_gimplify_expr): Don't call
- cp_gimplify_init_expr for MODIFY_EXPRs.
- * typeck2.c (split_nonconstant_init_1): Use INIT_EXPR.
-
-2006-02-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/26071
- * decl.c (grokdeclarator): Set dname also for destructor.
-
- PR c++/26070
- * decl.c (grokdeclarator): Clear storage_class together with staticp.
-
-2006-02-07 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * cp-tree.h (tf_warning_or_error): Renamed from tf_warn_or_error.
- (cp_build_qualified_type): Propogate renaming.
- * call.c (convert_like_real): Likewise.
- * cvt.c (cp_convert_to_pointer, convert_to_reference): Likewise.
- * decl.c (make_typename_type, grokdeclarator): Likewise.
- * pt.c (tsubst_friend_function, instantiate_class_template,
- tsubst_default_argument, instantiate_decl,
- tsubst_initializer_list, tsubst_enum): Likewise.
- * semantics.c (finish_template_type): Likewise.
- * typeck.c (build_ptrmemfunc, convert_for_assignment): Likewise.
-
-2006-02-07 Dirk Mueller <dmueller@suse.com>
-
- * typeck.c (build_binary_op): Annotate div-by-zero
- warnings to make -Wno-div-by-zero have an effect.
-
-2006-02-07 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/9737
- * pt.c (coerce_template_template_parms): Do not templates with
- excess default arguments to match template template parameters
- with fewer parameters.
- (coerce_template_parms): Add use_default_args parameter; use
- default arguments only when true.
- (lookup_template_class): Adjust call to coerce_template_parms.
- (fn_type_unification): Likewise.
- (unify): Likewise.
- (get_bindings): Likewise.
- (dependent_type_p): Add assertions.
-
-2006-02-06 Roger Sayle <roger@eyesopen.com>
-
- * decl.c (grokdeclarator): Don't bother checking for CHAR_TYPE.
- * rtti.c (typeinfo_in_lib_p): Likewise.
- * cp-tree.h (INTEGRAL_CODE_P, CP_INTEGRAL_TYPE_P): Likewise.
- * name-lookup.c (arg_assoc_type): Likewise.
-
-2006-02-04 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * cp-tree.h (tf_warn_or_error): New substituion flag.
- (cp_build_qualified_type): Use it.
- * call.c (convert_like_real): Likewise.
- * cvt.c (cp_convert_to_pointer): Likewise.
- (convert_to_reference): Likewise.
- * decl.c (make_typename_type): Likewise.
- (grokdeclarator): Likewise.
- * pt.c (tsubst_friend_function): Likewise.
- (tsubst_friend_class): Likewise.
- (instantiate_class_template): Likewise.
- (tsubst_default_argument): Likewise.
- (instantiate_decl): Likewise.
- (tsubst_initializer_list): Likewise.
- (tsubst_enum): Likewise.
- * semantics.c (finish_template_type): Likewise.
- * typeck.c (build_ptrmemfunc): Likewise.
- (convert_for_assignment): Likewise.
-
-2006-02-03 Lee Millward <lee.millward@gmail.com>
-
- * 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.
-
- * 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.
-
- * name-lookup.c (pushdecl_maybe_friend): Likewise.
- (pushdecl_maybe_friend): 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.
-
-2006-02-03 Mark Mitchell <mark@codesourcery.com>
-
- * name-lookup.c (do_class_using_decl): Use IDENTIFIER_TYPENAME_P,
- not IDENTIFIER_OPNAME_P.
-
-2006-01-31 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25342
- * cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Revise
- documentation.
- * pt.c (determine_specialization): Use INNERMOST_TEMPLATE_PARMS,
- not TREE_VALUE.
- (instantiate_class_template): Simplify.
- (verify_class_unification): Remove.
- (unify): Document parameters. Use INNERMOST_TEMPLATE_ARGS to
- permit multiple levels of template arguments.
- (more_specialized_class): Simplify.
- (get_class_bindings): Pass full arguments to unify. Fold
- verify_class_unification into this function. Return full
- arguments.
- (most_specialized_class): Adjust for changes to
- get_class_bindings. Issue errors here for ambiguity. Return the
- fully deduced arguments for the most specialized class, in
- addition to the partial specialization.
-
-2006-01-31 Ben Elliston <bje@au.ibm.com>
-
- * mangle.c: Comment fix.
-
-2006-01-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * Make-lang.in (cp-warn): Include CXX_COMPAT_WARN.
- * repo.c (extract_string, afgets): Use cast when converting from
- void *.
-
-2006-01-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * call.c (alloc_conversion): Use cast when converting from void *.
- (alloc_conversions): Likewise.
- (add_candidate): Likewise.
- (print_z_candidates): Likewise.
- (add_warning): Likewise.
- * pt.c (retrieve_local_specialization): Likewise.
- (process_partial_specialization): Likewise.
- (mangle_class_name_for_template): Likewise.
- (tsubst_template_args): Likewise.
- * typeck2.c (pat_calc_hash): Likewise.
- (pat_compare): Likewise.
- (abstract_virtuals_error): Likewise.
- * class.c (method_name_cmp): Likewise.
- (resort_method_name_cmp): Likewise.
- (get_vfield_name): Likewise.
- * decl2.c (generate_ctor_and_dtor_functions_for_priority): Likewise.
- * lex.c (init_reswords): Likewise.
- * rtti.c (create_pseudo_type_info): Likewise.
- * search.c (dfs_lookup_base): Likewise.
- (dfs_dcast_hint_pre): Likewise.
- (dfs_dcast_hint_post): Likewise.
- * tree.c (hash_tree_cons): Likewise.
- * repo.c (extract_string): Likewise.
- (afgets): Likewise.
- * cp-objcp-common.c (decl_shadowed_for_var_lookup): Likewise.
- * g++spec.c (lang_specific_driver): Likewise.
-
-2006-01-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * call.c (joust): Pass option code to warning. Use inform for
- explanation.
- * class.c (check_bases): Likewise.
- (maybe_warn_about_overly_private_class): Likewise.
- (check_field_decls): Likewise.
- (layout_empty_base): Likewise.
- (layout_virtual_bases): Likewise.
- (layout_class_type): Likewise.
-
-2006-01-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25999
- * decl.c (start_preparsed_function): Call maybe_apply_pragma_weak
- here, not ...
- (start_function): ... here.
-
-2006-01-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25855
- * class.c (resolve_address_of_overloaded_function): Adjust use of
- return value from most_specialized_instantiation.
- * pt.c (determine_specialization): Avoid multiple calls to
- get_bindings.
- (most_specialized_instantiation): When a tie occurs, set the
- current presumed champion to the next template. Return the
- TREE_LIST node containing the template, rather than the template
- itself.
- (most_specialized): Remove.
- * name-lookup.c (push_overloaded_decl): When duplicate_decls
- indicates a failed redeclaration, report that to callers.
-
-2006-01-26 Jason Merrill <jason@redhat.com>
-
- PR c++/16021
- * name-lookup.c (parse_using_directive): Require strong using to
- name a nested namespace.
-
-2006-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- Revert:
- * cp-tree.h (do_poplevel): Remove prototype.
- * semantics.c (do_poplevel): Add prototype. Make static.
-
- Revert:
- * cp-tree.h (default_conversion): Remove prototype.
- * typeck.c (default_conversion): Make static.
-
-2006-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-tree.h (get_primary_binfo): Remove prototype.
- (push_using_decl): Likewise.
- (current_template_args): Likewise.
- (more_specialized_class): Likewise.
- (mark_class_instantiated): Likewise.
- (default_conversion): Likewise.
- (pfn_from_ptrmemfunc): Likewise.
- * class.c (get_primary_binfo): Add prototype, make static, simplify.
- * name-lookup.c (push_using_decl): Make static.
- * pt.c (current_template_args): Likewise.
- (more_specialized_class): Likewise.
- (mark_class_instantiated): Likewise.
- * typeck.c (default_conversion): Make static.
- (pfn_from_ptrmemfunc): Add prototype, make static.
-
-2006-01-24 Dirk Mueller <dmueller@suse.de>
-
- * typeck.c (build_binary_op): Use OPT_Wfloat_equal in warning().
-
-2006-01-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/25552
- * parser.c (cp_parser_unqualified_id): Check that destructor name
- and scope match.
- * call.c (check_dtor_name): Do not expect a BIT_NOT_EXPR.
- Adjust comment. Return early if possible.
- Use same_type_p to compare types.
- * typeck.c (lookup_destructor): Adjust call to check_dtor_name.
-
-2006-01-24 Mark Mitchell <mark@codesourcery.com>
-
- * semantics.c: Remove outdated comment.
-
-2006-01-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-tree.h (do_poplevel): Remove prototype.
- * semantics.c (do_poplevel): Add prototype. Make static.
-
- * cp-tree.h (original_type): Remove prototype.
- * typeck.c (original_type): Make static.
-
- * cp-tree.h (declare_global_var): Remove prototype.
- * decl.c (declare_global_var): Make static.
-
- * cp-tree.h (implicitly_declare_fn): Remove prototype.
- * method.c (implicitly_declare_fn): Make static.
-
- * cp-tree.h (fold_decl_constant_value): Remove prototype.
- * pt.c (fold_decl_constant_value): Make static.
-
- * cp-tree.h (build_x_delete): Remove prototype.
- * init.c (build_vec_delete_1): Call build_op_delete_call directly
- and not via build_x_delete.
- (build_x_delete): Remove.
-
- * cp-tree.h (get_vtt_name): Remove prototype.
- * class.c (get_vtt_name): Remove.
- (build_vtt): Call mangle_vtt_for_type instead of get_vtt_name.
-
-2006-01-22 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * rtti.c (build_dynamic_cast): Fix comment.
-
-2006-01-22 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR c++/10891
- * rtti.c (build_dynamic_cast): Reject dynamic_cast use if
- -fno-rtti.
-
-2006-01-21 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25895
- * class.c (build_base_path): Generate a NOP_EXPR instead of a
- COMPONENT_REF if the base and derived classes are at the same
- address.
-
- PR c++/25856
- * decl.c (begin_destructor_body): Robustify.
-
- PR c++/25858
- * parser.c (cp_parser_direct_declarator): Robustify.
-
-2006-01-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * parser.c (cp_lexer_next_token_is_keyword): Simplify.
-
- * parser.c (clear_decl_specs): Remove prototype.
-
- * parser.c (cp_parser_expression_fn): Remove.
-
- * call.c (add_builtin_candidates): Remove superfluous return.
- * name-lookup.c (do_toplevel_using_decl): Likewise.
- * parser.c (cp_parser_type_specifier_seq): Likewise.
- (cp_parser_save_default_args): Likewise.
-
-2006-01-20 Dirk Mueller <dmueller@suse.com>
-
- PR c++/5520
- * semantics.c (finish_if_stmt): Call empty_body_warning.
- * parser.c (cp_parser_implicitly_scoped_statement):
- Mark empty statement with an empty stmt.
-
-2006-01-19 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22136
- * name-lookup.c (do_class_using_decl): Don't try to look up base
- classes in templates with dependent base types.
-
-2006-01-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/25854
- * pt.c (maybe_process_partial_specialization): Return early on
- error_mark_node.
-
-2006-01-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/16829
- * decl.c (start_preparsed_function): Check default arguments
- unconditionally.
- * name-lookup.c (pushdecl_maybe_friend): Check default arguments
- of all functions and function templates.
- * parser.c (cp_parser_late_parsing_default_args): Check default
- arguments.
- * decl2.c (check_default_args): Set missing default arguments to
- error_mark_node.
-
-2006-01-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25836
- * cp-tree.h (push_class_stack): New function.
- (pop_class_stack): Likewise.
- * class.c (class_stack_node): Add hidden field.
- (pushclass): Clear it.
- (push_class_stack): New function.
- (pop_class_stack): Likewise.
- (currently_open_class): Ignore hidden classes.
- (currently_open_derived_class): Likewise.
- * name-lookup.c (push_to_top_level): Call push_class_stack.
- (pop_from_top_level): Call pop_class_stack.
-
-2006-01-18 Kazu Hirata <kazu@codesourcery.com>
-
- * tree.c (find_tree_t, find_tree): Remove.
- * cp-tree.h: Remove the prototype for find_tree.
-
-2006-01-18 Jakub Jelinek <jakub@redhat.com>
-
- * search.c (lookup_conversions_r): Fix a pasto.
-
-2006-01-17 Eric Christopher <echristo@apple.com>
-
- * call.c (convert_like_real): When issuing conversion
- warnings, depend on OPT_Wconversion.
- * cvt.c (build_expr_type_conversion): Ditto.
-
-2006-01-17 Kazu Hirata <kazu@codesourcery.com>
-
- * name-lookup.c (lookup_namespace_name): Remove.
- * name-lookup.h: Remove the prototype for
- lookup_namespace_name.
-
-2006-01-17 Jakub Jelinek <jakub@redhat.com>
-
- PR c/25682
- * decl.c (compute_array_index_type): After issuing not an integral
- constant-expression error, set size to 1 to avoid ICEs later on.
-
-2006-01-16 Ian Lance Taylor <ian@airs.com>
-
- * parser.c: Include "cgraph.h".
- (cp_parser_asm_definition): Call cgraph_add_asm_node rather than
- assemble_asm.
-
-2006-01-16 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
-
- * g++spec.c (lang_specific_spec_functions): Remove.
-
-2006-01-15 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * decl.c (check_initializer): Fix thinko.
-
-2006-01-14 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25663
- * parser.c (cp_parser_direct_declarator): Use cp_parser_error
- instead of error.
-
-2006-01-13 Jason Merrill <jason@redhat.com>
-
- * pt.c (check_explicit_specialization): Use CP_DECL_CONTEXT even more.
-
- * name-lookup.c (set_decl_namespace): Use CP_DECL_CONTEXT.
- * pt.c (check_explicit_specialization): Likewise.
-
-2006-01-12 Jason Merrill <jason@redhat.com>
-
- PR libstdc++/24660
- * pt.c (check_explicit_specialization): Handle namespace
- association.
- * name-lookup.c (set_decl_namespace): Likewise.
-
-2006-01-12 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/24824
- * class.c (handle_using_decl): Pass correct scope to
- cp_emit_debug_info_for_using.
-
-2006-01-11 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/25386
- * tree.c (lvalue_p_1): Any part of a COMPONENT_REF affects
- packedness.
-
-2006-01-06 Gabriel Dos Reis <gdr@integrablesolutions.net>
-
- * parser.c (cp_parser_primary_expression): Document the grammar
- for the built-in offsetof, a GNU extension.
-
-2006-01-04 Zdenek Dvorak <dvorakz@suse.cz>
-
- PR c++/25632
- * init.c (constant_value_1): Unshare use of DECL_INITIAL. Fix a typo
- in condition.
-
-2006-01-04 Chris Lattner <sabre@gnu.org>
-
- * typeck2.c: update copyright to 2006
- (split_nonconstant_init_1): Set TREE_CONSTANT to true.
-
-2006-01-04 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24782
- * parser.c (cp_parser_nested_name_specifier_opt): Preserve access
- checks, even when parsing tentatively.
-
-2006-01-04 Richard Henderson <rth@redhat.com>
-
- Merge from gomp branch.
- * lex.c (handle_pragma_java_exceptions): Fix whitespace.
- * parser.c (struct cp_token): Add pragma_kind.
- (eof_token): Update to match.
- (struct cp_lexer): Add in_pragma; rearrange next for better packing.
- (cp_parser_initial_pragma): New.
- (cp_lexer_new_main): Use it. Don't bother clearing
- c_lex_return_raw_strings.
- (cp_lexer_get_preprocessor_token): Always initialize keyword
- and pragma_kind fields. Handle CPP_PRAGMA.
- (cp_lexer_consume_token): Don't allow CPP_PRAGMA_EOL when
- in_pragma is set.
- (cp_lexer_handle_pragma): Remove. Update callers to cp_parser_pragma.
- (cp_lexer_print_token) <CPP_PRAGMA>: Don't print as a string.
- (cp_parser_skip_to_pragma_eol): New.
- (cp_parser_error): Use it.
- (cp_parser_skip_to_closing_parenthesis): Stop at CPP_PRAGMA_EOL;
- rearrange with switch statement.
- (cp_parser_skip_to_end_of_statement): Likewise.
- (cp_parser_skip_to_end_of_block_or_statement): Likewise.
- (cp_parser_skip_to_closing_brace): Likewise.
- (cp_parser_skip_until_found): Likewise.
- (cp_parser_statement): Add in_compound argument; update callers.
- Use it to decide how to handle pragma parsing.
- (cp_parser_labeled_statement): Add in_compound argument; pass
- it on to cp_parser_statement.
- (cp_parser_statement_seq_opt): Stop at CPP_PRAGMA_EOL.
- (cp_parser_declaration_seq_opt): Likewise.
- (cp_parser_parameter_declaration): Likewise.
- (cp_parser_member_specification_opt): Likewise.
- (cp_parser_function_definition_after_decl): Likewise.
- (cp_parser_cache_group): Handle CPP_PRAGMA/CPP_PRAGMA_EOL pairs.
- (cp_parser_pragma): New.
- (pragma_lex): New.
-
-2006-01-04 Dirk Mueller <dmueller@suse.com>
-
- * decl.c (finish_constructor_body): create simple
- compound stmt instead of a if(1) { } construct.
-
-2006-01-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25492
- * name-lookup.c (push_class_level_binding): When a derived class
- provides a type binding, eliminate any type binding from a base
- class.
-
- PR c++/25625
- * repo.c (repo_emit_p): Always instantiate static data members
- initialized by constant expressions, so that there values are
- available.
-
-2006-01-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25635
- * class.c (add_method): Set TYPE_HAS_CONVERSION for classes with a
- conversion operator.
- * decl.c (grokdeclarator): Do not set TYPE_HAS_CONVERSION here.
-
- PR c++/25638
- * class.c (add_method): Never associate more than one destructor
- with a single class.
-
- PR c++/25637
- * cp-tree.h (do_friend): Adjust prototype.
- * decl.c (grokfndecl): Make funcdef_flag a bool, not an int.
- (grokdeclarator): Likewise. Refine check for invalid
- declarations/definitions of member functions outside of their own
- class.
- * friend.c (do_friend): Make funcdef_flag a bool, not an int.
-
- PR c++/25633
- * parser.c (cp_parser_mem_initializer_list): Check result of
- cp_parser_mem_initializer against error_mark_node, not NULL_TREE.
- (cp_parser_mem_initializer): Return error_mark_node for failure.
-
- PR c++/25634
- * parser.c (cp_parser_template_parameter_list): Call
- begin_template_parm_list and end_template_parm_list here.
- (cp_parser_type_parameter): Not here.
- (cp_parser_template_declaration_after_export): Or here.
- (cp_parser_elaborated_type_specifier): Call
- cp_parser_check_template_parameters.
-
- * tree.c (build_target_expr_with_type): Use force_target_expr.
-
- * decl2.c (mark_used): Fix typo in comment.
-
-2006-01-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * parser.c (cp_parser_using_declaration): Skip name-lookup on
- invalid scope.
-
-2005-12-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * cxx-pretty-print.c (pp_cxx_constant): New. Print
- string-literal in parens if input program says so.
- (pp_cxx_primary_expression): Hand off constant printing to
- pp_cxx_constant.
- (pp_cxx_pretty_printer_init): Set pp->c_base.constant.
- (pp_cxx_expression): Use pp_cxx_constant for literals.
- * error.c (dump_expr): Use pp_constant for literals.
-
-2005-12-29 Nathan Sidwell <nathan@codesourcery.com>
-
- * method.c (make_thunk): Don't set comdat_linkage here.
- (use_thunk): Make thunk one only here, if thunk target is
- DECL_ONE_ONLY.
-
-2005-12-26 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25439
- * decl.c (grokdeclarator): Remove dead code.
- * ptree.c (cxx_print_xnode): Handle BASELINK.
- * parser.c (make_id_declarator): Add sfk parameter.
- (cp_parser_direct_declarator): Do not pass TYPE_DECLs to
- make_id_declarator.
- (cp_parser_declarator_id): Simplify BASELINKs here.
- (cp_parser_member_declaration): Adjust calls to
- make_id_declarator.
-
-2005-12-26 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23171, c++/23172, c++/25417.
- * typeck.c (build_unary_op): Create temporary variables for
- compound literals whose addresses are taken.
- * init.c (expand_aggr_init_1): Use COMPOUND_LITERAL_P.
- * decl.c (reshape_init_vector): Likewise.
- (reshape_init): Give it external linkage.
- (check_initializer): Use COMPOUND_LITERAL_P.
- (initialize_artificial_var): Allow the initializer to be a
- CONSTRUCTOR.
- * call.c (make_temporary_var_for_ref_to_temp): Use
- create_temporary_var.
- * cp-tree.h (COMPOUND_LITERAL_P): New macro.
- (rehape_init): Declare.
- * typeck2.c (digest_init): Use COMPOUND_LITERAL_P.
- * semantics.c (finish_compound_literal): Use reshape_init.
-
-2005-12-23 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24671
- * pt.c (instantiate_template): Handle SFINAE.
-
-2005-12-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * decl.c (grokdeclarator): Improve diagnostic for friend
- declarations of class members.
-
-2005-12-22 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25369
- * tree.c (really_overloaded_fn): Tweak comment.
- * pt.c (tsubst_call_declarator_parms): Remove.
- (tsubst_copy): Call mark_used on the member referenced by an
- OFFSET_REF.
- * semantics.c (finish_qualified_id_expr): Simplify.
- * decl2.c (mark_used): Accept BASELINKs.
-
- PR c++/25364
- * typeck.c (build_unary_op): Pass DECLs not names to
- build_offset_refs.
- * init.c (build_offset_ref): Do not do name lookup. Do not call
- mark_used.
- * call.c (build_call): Simplify and tidy.
- * semantics.c (finish_qualified_id_expr): Call mark_used.
-
-2005-12-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23333
- * parser.c (cp_parser_pure_specifier): Check for PURE_ZERO to
- identify a single '0'.
-
-2005-12-20 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21228
- * decl.c (use_eh_spec_block): New function.
- (store_parm_decls): Use it.
- (finish_function): Likewise.
-
-2005-12-19 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24278
- * init.c (expand_member_init): Print messages about baseclasses
- using %T rather than %D.
-
- PR c++/24915
- * class.c (add_method): Do not treat templates as identical unless
- their return types are the same.
-
-2005-12-12 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25300
- * tree.c (build_qualified_name): Return error_mark_node for
- erroneous input.
-
-2005-12-10 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/25337
- * pt.c (tsubst_copy_and_build): Permit dependent types for the
- object in a class member access expression.
-
-2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
-
- PR java/9861
- * mangle.c (write_bare_function_type): Mangle return type for
- methods of Java classes
-
-2005-12-08 Th�dore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
-
- * call.c (build_conditional_expr): Print types in error messages.
-
-2005-12-07 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * expr.c (cxx_expand_expr): Call gcc_unreachable instead of abort.
-
-2005-12-07 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-gimplify.c (gimplify_cp_loop): Use fold_build3.
-
-2005-12-07 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
-
- * Make-lang.in (c++.all.build, c++.install-normal): Remove.
-
-2005-12-07 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
-
- * Make-lang.in: Remove all dependencies on s-gtype.
-
-2005-12-06 Aldy Hernandez <aldyh@redhat.com>
-
- PR C++/24138
- * decl.c (reshape_init_array_1): Handle max_index of -1.
-
-2005-12-06 Roger Sayle <roger@eyesopen.com>
-
- * typeck.c (build_binary_op): Issue warning if either operand of a
- comparison operator is a string literal, except for testing equality
- or inequality against NULL.
-
-2005-12-06 Roger Sayle <roger@eyesopen.com>
-
- PR c++/25263
- * decl.c (compute_array_index_type): Check that itype is an
- INTEGER_CST node before testing/clearing TREE_OVERFLOW.
-
-2005-12-05 Daniel Berlin <dberlin@dberlin.org>
-
- * ptree.c (cxx_print_decl): Update to check for decl_common
- structure.
-
-2005-12-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24173
- * decl.c (duplicate_decls): Don't rely on DECL_TEMPLATE_INFO after
- clobbering newdecl.
-
-2005-12-02 Richard Guenther <rguenther@suse.de>
-
- * semantics.c (simplify_aggr_init_expr): Use buildN instead
- of build.
-
-2005-12-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * parser.c (cp_lexer_new_main): Usr GGC_RESIZEVEC instead of
- ggc_realloc.
- (cp_parser_template_argument_list): Use XRESIZEVEC instead of
- xrealloc.
- * class.c (pushclass): Likewise.
-
-2005-12-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * decl2.c (get_priority_info): Use XNEW, not xmalloc.
- * decl.c (push_switch): Likewise.
- * lex.c (handle_pragma_implementation): Likewise.
- * cp-objcp-common.c (decl_shadowed_for_var_insert): Use GGC_NEW,
- not ggc_alloc.
- (cxx_initialize_diagnostics): Use XNEW, not xmalloc.
- * class.c (init_class_processing): Use XNEWVEC, not xmalloc.
- * g++spec.c (lang_specific_driver): Likewise.
- * mangle.c (save_partially_mangled_name): Likewise.
- * parser.c (cp_lexer_new_main): Use GGC_NEWVEC, not ggc_alloc.
- (cp_parser_template_argument_list): Use XNEWVEC, nto xmalloc.
- (cp_parser_sizeof_operand): Likewise.
- * repo.c (open_repo_file, open_repo_file): Likewise.
-
-2005-12-01 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * parser.c (cp_parser_make_typename_type): Call make_typename_type
- with tf_none instead of magic value 0.
- (cp_parser_explicit_instantiation): Call do_type_instantiation
- with tf_error instead of magic value 1.
- (cp_parser_elaborated_type_specifier): Call make_typename_type
- with tf_error instead of magic value 1.
- (cp_parser_class_name): Likewise.
- (cp_parser_lookup_name): Likewise.
-
-2005-12-01 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * parser.c (cp_parser_declaration): Set token2.type to CPP_EOF,
- not RID_MAX.
-
-2005-11-30 Jason Merrill <jason@redhat.com>
-
- PR c++/21123
- * cp-gimplify.c (cp_genericize_r): Don't dereference invisible reference
- parms in a thunk.
-
-2005-11-30 Ben Elliston <bje@au.ibm.com>
-
- * typeck.c (build_x_unary_op): Correct spelling in error message.
-
-2005-11-28 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21166
- * class.c (check_field_decls): Only set DECL_PACKED on a field
- when its natural alignment is > BITS_PER_UNIT.
-
-2005-11-27 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/24979
- * cp-tree.h (DECL_MAIN_P): Remove duplicate definition.
-
-2005-11-26 Richard Henderson <rth@redhat.com>
-
- * lex.c: Update for pragma_lex rename.
- * parser.c: Likewise.
-
-2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/9278
- * decl.c (grokparms): Do not allow typedef-names in a '(void)'
- parmlist.
-
-2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * typeck2.c (process_init_constructor_union): Remove check for
- unnamed union members.
-
-2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * name-lookup.c (lookup_name_real): Merge two if's.
-
-2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * pt.c (instantiate_class_template): Clean-up.
-
-2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * pt.c (template_class_depth_real): Remove. Move functionality to ...
- (template_class_depth): ... here, replacing count_specializations
- with 0. Adjust comment.
-
-2005-11-24 Richard Guenther <rguenther@suse.de>
- Dirk Mueller <dmueller@suse.de>
-
- PR c++/14024
- * typeck.c (build_reinterpret_cast_1): Use
- strict_aliasing_warning.
-
-2005-11-23 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR c++/24235
- * pt.c (check_instantiated_args): Reword diagnostic message about
- template argument involving local types.
-
-2005-11-23 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR c++/21667
- * typeck.c (build_array_ref): Avoid code duplicate. Use common
- C/C++ diagnostic function warn_array_subscript_with_type_char.
-
-2005-11-21 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR c++/22238
- * error.c (resolve_virtual_fun_from_obj_type_ref): New.
- (dump_expr): Use it in <case CALL_EXPR>.
-
-2005-11-21 Richard Henderson <rth@redhat.com>
-
- * cp-objcp-common.h, name-lookup.c, name-lookup.h: Revert 11-18 patch.
-
- * name-lookup.c (lookup_name): Remove prefer_type argument.
- (lookup_name_prefer_type): New.
- * decl.c (lookup_and_check_tag): Use them.
- * pt.c (tsubst_friend_class): Likewise.
- (lookup_template_class): Likewise.
- (tsubst_copy_and_build): Likewise.
- * name-lookup.h (lookup_name_prefer_type): New.
- (lookup_name): Remove declaration.
-
-2005-11-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/8355
- * decl.c (grokfndecl): Set up DECL_TEMPLATE_INFO before calling
- set_decl_namespace.
- * name-lookup.c (set_decl_namespace):
-
-2005-11-18 Mike Stump <mrs@apple.com>
-
- * cp-objcp-common.h (LANG_HOOKS_LOOKUP_NAME): Add.
- * name-lookup.c (lookup_name_two): Remove.
- (lookup_name_one): Add.
- * name-lookup.h (lookup_name_two): Remove.
- (lookup_name_one): Add.
-
-2005-11-15 Jason Merrill <jason@redhat.com>
-
- PR c++/24580
- * method.c (locate_copy): Also use skip_artificial_parms here.
- (synthesize_exception_spec): Use CLASS_TYPE_P rather than checking
- for RECORD_TYPE.
- (locate_ctor): Abort if we fail to find a default constructor.
-
-2005-11-15 Mike Stump <mrs@apple.com>
-
- * name-lookup.c (lookup_name_two): Add.
- * name-lookup.h: Likewise.
-
-2005-11-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24667
- * typeck.c (check_for_casting_away_constness): Use the diag_fn.
- (build_const_cast_1): Call it, for C-style casts.
-
-2005-11-14 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24687
- * pt.c (check_explicit_specialization): Don't check for C linkage.
- (push_template_decl_real): Likewise.
- * parser.c (cp_parser_explicit_specialization): Check here.
- (cp_parser_template_declaration_after_export): And here.
-
- * parser.c (cp_lexer_get_preprocessor_token): Initialize keyword
- field.
-
-2005-11-14 Jason Merrill <jason@redhat.com>
-
- PR c++/24580
- * method.c (locate_ctor): Skip all artificial parms, not just
- 'this'.
-
-2005-11-14 Mark Mitchell <mark@codesourcery.com>
-
- * parser.c (eof_token): Add initializer for ambiguous_p.
-
-2005-11-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24817
- * decl.c (check_redeclaration_exception_specification): New
- function.
- (duplicate_decls): Use it.
- * error.c (fndecl_to_string): Print the template parameter list.
-
- PR c++/20293
- * cxx-pretty-print.c (pp_cxx_statement): Print qualifying scopes
- for namespaces.
- (pp_cxx_original_namespace_definition): Likewise.
- * name-lookup.c (ambiguous_decl): Don't issue error messages;
- instead return lists of ambiguous candidates.
- (select_decl): Handle ambiguous namespace lookups.
- * parser.c (cp_token): Add ambiguous_p.
- (cp_lexer_get_preprocessor_token): Set it.
- (cp_parser_diagnose_invalid_type_name): Avoid duplicate messages
- when a qualified name uses an invalid scope.
- (cp_parser_primary_expression): Print ambiguous candidates.
- (cp_parser_type_parameter): Adjust comment to reflect new
- parameter name for cp_parser_lookup_name.
- (cp_parser_template_argument): Likewise.
- (cp_parser_elaborated_type_specifier): Likewise.
- (cp_parser_namespace_name): Likewise.
- (cp_parser_class_name): Print ambiguous candidates.
- (cp_parser_lookup_name): Rename ambiguous_p parameter to
- ambiguous_decls. Use it to return a list of ambiguous candiates
- when a lookup is ambiguous.
- (cp_parser_lookup_name_simple): Adjust comment to reflect new
- parameter name for cp_parser_lookup_name.
-
-2005-11-12 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/24780
- * typeck.c (complete_type): Set TYPE_NEEDS_CONSTRUCTING
- and TYPE_HAS_NONTRIVIAL_DESTRUCTOR flags for all variants
- of array type.
-
- PR c++/24761
- * pt.c (tsubst_copy_asm_operands): New function.
- (tsubst_expr) <case ASM_EXPR>: Use it.
-
-2005-11-08 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/19450
- * decl.c (redeclaration_error_message): Issue diagnostics about
- olddecl and newdecl disagreement on __thread property.
- (grokdeclarator): Set DECL_TLS_MODEL on class static variables.
-
-2005-11-08 Jason Merrill <jason@redhat.com>
-
- PR c++/21123
- * method.c (use_thunk): Use build_cplus_new instead of
- force_target_expr.
-
-2005-11-06 Jason Merrill <jason@redhat.com>
- James A. Morrison <phython@gcc.gnu.org>
-
- PR c++/17256
- * decl2.c (cp_finish_file): Fix conditions for undefined warning.
- Set TREE_NO_WARNING instead of TREE_PUBLIC.
- * pt.c (instantiate_pending_templates): Set DECL_INITIAL to avoid
- a warning on a function we didn't instantiate because of excessive
- recursion.
-
-2005-11-06 Mark Mitchell <mark@codesourcery.com>
-
- * class.c (record_subobject_offsets): Don't record offsets past
- biggest empty class for non-empty base classes.
- (layout_class_type): Use TYPE_SIZE_UNIT, not TYPE_SIZE, when
- keeping track of the size of emptyclasses.
-
- PR c++/21308
- * class.c (sizeof_biggest_empty_class): New variable.
- (record_subobject_offsets): Don't record offsets past biggest
- empty class for data members. Replace vbases_p parameter with
- is_data_member parameter.
- (build_base_field): Adjust call.
- (layout_class_type): Likewise. Maintain
- sizeof_biggest_empty_class.
-
-2005-11-05 Kazu Hirata <kazu@codesourcery.com>
-
- * decl2.c, init.c, typeck.c: Fix comment typos.
-
-2005-11-04 Richard Guenther <rguenther@suse.de>
-
- PR c++/22487
- * init.c (build_vec_init): Build comparison of matching
- types.
-
-2005-11-03 Josh Conner <jconner@apple.com>
-
- PR c++/19989
- pt.c (tsubst): Accept zero-length array if tf_error is set
- in complain flags. Change error message for negative-
- length array.
-
-2005-11-04 Joseph S. Myers <joseph@codesourcery.com>
-
- * cp-tree.h (cp_cpp_error), error.c (cp_cpp_error): Take va_list*
- parameter.
-
-2005-11-03 Joseph S. Myers <joseph@codesourcery.com>
-
- PR c++/17964
- * error.c (cp_cpp_error): New function.
- * cp-tree.h (cp_cpp_error): Declare.
- * parser.c (cp_lexer_new_main): Set CPP option client_diagnostic
- and error callback after lexing.
-
-2005-11-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21627
- * pt.c (register_specialization): Update inline flags on clones.y
-
-2005-11-03 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR c++/24582
- * decl.c (declare_local_label): Return 0 for variables
- with error_mark_node as their types.
-
-2005-11-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22434
- * call.c (build_conditional_expr): Do bad conversions, if there's
- no other choice.
-
- PR c++/24560
- * parser.c (cp_parser_postfix_dot_deref_expression): Improve error
- message for use of overloaded functions on LHS of "." operator.
-
- PR c++/19253
- * parser.c (cp_parser_postfix_expression): Use
- cp_parser_elaborated_type_specifier to handle typename-types in
- functional casts.
- (cp_parser_enclosed_argument_list): Skip ahead to the end of the
- template argument list if the closing ">" is not found.
-
- PR c++/24569
- * pt.c (instantiate_decl): Use cp_finish_decl, not
- finish_static_data_member_decl.
-
-2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
-
- * decl.c (grokfndecl): Remove the setting
- of the return type of the function type
- of main after erroring about must returning
- int.
-
-2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/23229
- * decl.c (grokfndecl): Create a new function type
- after erroring out about main not returning int.
-
-2005-10-28 Josh Conner <jconner@apple.com>
-
- PR c++/22153
- * parser.c (cp_parser_member_declaration): Detect and handle
- a template specialization.
-
-2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/23426
- * decl.c (start_decl): Check that the decl is an
- error_mark_node before getting the type.
- Remove the check for the decl's type being an
- error_mark_node.
-
-2005-10-21 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24260
- * parser.c (cp_parser_init_declarator): Pass attributes to
- grokfield.
-
-2005-10-20 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22618
- * search.c (accessible_p): Check access in the outermost set of
- template parameters.
-
-2005-10-20 Richard Guenther <rguenther@suse.de>
-
- * decl.c (grokdeclarator): Fix ambiguous pedwarn message.
-
-2005-10-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/22293
- * decl.c (grokdeclarator): Reject unqualified destructors in
- friend declarations.
-
-2005-10-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23293
- * pt.c (convert_template_argument): Use canonical type variants in
- template specializations.
-
-2005-10-18 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21383
- * name-lookup.c (arg_assoc): Template args can be null in a
- template-id-expr.
-
- PR c++/22604
- * class.c (update_vtable_entry_for_fn): Don't process invalid
- covariant overriders.
-
- PR c++/23118
- * cp-tree.h (add_method): Add return value.
- * class.c (add_method): Return success indicator.
- * semantics.c (finish_member_declaration): Don't add an invalid
- method to the method list.
-
-2005-10-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21908
- * call.c (build_new_method_call): Do not show VTT parameters to
- the user.
-
-2005-10-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23440
- * parser.c (cp_parser_statement): If the parser reached CPP_EOF,
- only complain about missing statement.
-
-2005-10-17 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/24386
- * cp-tree.h (BASELINK_QUALIFIED_P): New.
- * pt.c (tsubst_copy_and_build): <CALL_EXPR case>: Use it.
- * typeck.c (finish_class_member_access_expr): Set it.
-
- PR c++/21353
- * decl.c (check_default_argument): Don't check
- processing_template_decl or uses_template_parms here.
- (grokparms): Only call check_default_argument when not processing
- a template decl.
- * parser.c (cp_parser_late_parsing_default_arg): Call
- check_default_argument when not processing a template decl.
-
-2005-10-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24389
- * decl2.c (mark_used): Use uses_template_parms instead of
- dependent_type_p.
- * init.c (constant_value_1): Handle uninstantiated templates
- specially.
- * pt.c (instantiate_decl): Add sanity check.
-
-2005-10-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22173
- * typeck.c (check_template_keyword): Fix thinko.
-
-2005-10-16 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR c++/23959
- * decl.c (pop_switch): Only call c_do_switch_warnings
- when not processing templates.
-
-2005-10-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22173
- * cp-tree.h (QUALIFIED_NAME_IS_TEMPLATE): New macro.
- (check_template_keyword): New function.
- (finish_id_expression): Change prototoype.
- (finish_qualified_id_expr): Change prototype.
- (build_qualified_name): New function.
- (finish_class_member_access_expr): Change prototype.
- * init.c (build_offset_ref): Use build_qualified_name.
- * mangle.c (write_expression): Likewise.
- * parser.c (cp_parser_primary_expression): Remove qualifying_class
- parameter. Add address_p and template_arg_p. Use
- build_qualified_name.
- (cp_parser_id_expression): Default *template_p to
- template_keyword_p. Check for invalid uses of the template
- keyword.
- (cp_parser_postfix_expression): Eliminate special handling for
- qualified names. Adjust call to cp_parser_primary_expression.
- (cp_parser_postfix_dot_deref_expression): Adjust call to
- cp_parser_id_expression and finish_class_member_access_expr.
- (cp_parser_template_argument_list): Add comment.
- (cp_parser_template_argument): Adjust use of
- cp_parser_primary_expression. Remove call to
- finish_qualified_id_expr.
- (cp_parser_lookup_name): Use build_qualified_name.
- * pt.c (tsubst): Use build_qualified_name.
- (tsubst_qualified_id): Likewise. Adjust call to
- finish_qualified_id_expr.
- (tsubst_copy): Use build_qualified_name.
- (tsubst_copy_and_build): Adjusts call to finish_id_expression and
- finish_class_member_access_expr.
- * semantics.c (finish_non_static_data_member): Use
- build_qualified_name.
- (finish_qualified_id_expr): Add template_p and template_arg_p
- parameters.
- (finish_id_expression): Remove qualifiying_class parameter. Add
- template_p, done, address_p, and template_arg_p. Use
- build_qualified_name. Adjust calls to
- finish_class_member_acess_expr.
- * tree.c (build_qualified_name): New function.
- * typeck.c (check_template_keyword): New function.
- (finish_class_member_access_expr): Add template_p argument. Check
- for invalid uses of the template keyword.
-
-2005-10-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21347
- * class.c (maybe_warn_about_overly_private_class): Lazy
- constructors are public.
-
-2005-10-14 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19565
- * call.c (convert_like_real): Rely on convert_and_check to issue
- warnings about overflow and conversion to unsigned.
- * decl.c (finish_enum): Use the location of the enumerators, not
- the closing brace of the enumeration, when reporting warnings
- about conversions.
- (build_enumerator): Use error_mark_node for erroneous values.
- * typeck2.c (digest_init): Remove reference to "signature pointer"
- from comment.
-
-2005-10-14 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/17796
- * optimize.c (update_cloned_parm): Add FIRST parameter. Use it.
- (maybe_clone_body): Track the first clone.
-
-2005-10-13 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/23984
- * class.c (build_base_path): The vtable is always the first thing
- in the vtt.
-
-2005-10-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20721
- * cp-tree.h (DECL_NONTRIVIALLY_INITIALIZED_P): New macro.
- * decl.c (duplicate_decls): Merge it into new declarations.
- (decl_jump_unsafe): Use it, rather than DECL_INITIAL.
- (cp_finish_decl): Set it, when appropriate.
-
- PR c++/22180
- * call.c (build_new_method_call): Correct pretty-printing of
- destructor names.
- * pt.c (tsubst_qualified_id): Recognize invalid uses of "~T" as an
- identifier.
-
- PR c++/23694
- * decl.c (start_method): Return error_mark_node for errors.
-
- PR c++/23307
- * pt.c (push_template_decl_real): Complain about attempts to
- declare template variables.
-
- PR c++/22352
- * pt.c (tsubst_template_parms): Set processing_template_decl while
- processing the parameters.
- (tsubst_decl): Set processing_template_decl when substituting into
- a TEMPLATE_DECL.
-
- PR c++/22405
- * pt.c (most_specialized_instantiation): Robustify.
-
- PR c++/22464
- * semantics.c (finish_id_expression): Issue errors about uses of
- local variables in containing functions even in templates.
-
-2005-10-12 Danny Smith <dannysmith@users.sourceforge.net>
-
- PR target/21801
- PR target/23589
- * class.c (finish_struct_1): Call
- targetm.cxx.adjust_class_at_definition.
-
-
-2005-10-12 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21592
- * pt.c (build_non_dependent_expr): Don't wrap a COMPONENT_REF
- with already looked up member functions. Assert we're not
- returning a NON_DEPENDENT_EXPR with unknown type.
- * typeck.c (finish_class_member_access_expr): We can get
- non-template-id-expr baselinks. If the lookup finds a baselink,
- remember it even inside templates.
-
- PR c++/23797
- * parser.c (cp_parser_functional_cast): Cope when TYPE is not a
- TYPE_DECL. Use dependent_type_p to check type.
- * pt.c (uses_template_parms_p): Use dependent_type_p for a
- TYPE_DECL.
- (type_dependent_expression_p): Assert we've not been given a
- TYPE_DECL.
-
- PR c++/21117
- * decl.c (check_function_type): Correctly overwrite incomplete
- return type with void type.
- * typeck.c (check_return_expr): If the function's return type is
- void, don't try and convert a return expr.
-
-2005-10-12 David Edelsohn <edelsohn@gnu.org>
-
- PR c++/23730
- * call.c (build_object_call): If BINFO is NULL, bypass
- lookup_fnfields and set fns to NULL_TREE.
-
-2005-10-12 Paolo Bonzini <bonzini@gnu.org>
-
- PR c++/24052
- * error.c (dump_expr): Pass LABEL_DECL to dump_decl. Print
- an ADDR_EXPR of a LABEL_DECL as &&.
-
-2005-10-12 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19964
- * class.c (walk_subobject_offsets): Don't walk error_mark_node.
-
-2005-10-11 Ian Lance Taylor <ian@airs.com>
-
- PR c++/8057
- * cvt.c (convert_to_void): Don't warn about unused values when
- processing a template declaration.
-
-2005-10-11 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21089
- * call.c (convert_like_real): Use decl_constant_value, not
- integral_constant_value.
- * init.c (constant_value_1): New function.
- (integral_constant_value): Use it.
- (decl_constant_value): Likewise.
- * typeck.c (decay_conversion): Use decl_constant_value, not
- integral_constant_value.
-
- PR c++/21369
- * parser.c (cp_parser_elaborated_type_specifier): Don't treat
- class types as templates if the type is not appearing as part of a
- type definition or declaration.
-
-2005-10-10 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24277
- * pt.c (instantiate_decl): Call finish_static_data_member_decl for
- static data members.
-
-2005-10-10 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23437
- * parser.c (cp_parser_template_argument_list): Do not treat
- contents of argument list as part of a constant expression.
-
-2005-10-10 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/24139
- * decl.c (grokdeclarator): Do not require template parameter lists
- for explicitly specialized class.
- * error.c (dump_aggr_type): Do not dump template arguments for
- non-primary specializations.
- (dump_function_name): Likewise.
-
- PR c++/24275
- * pt.c (instantiate_decl): Instantiate the initializer of
- a static data member in the namespace containing the class
- containing the static data member.
-
-2005-10-08 James A. Morrison <phython@gcc.gnu.org>
-
- PR c++/22172
- * parser.c (cp_parser_postfix_expression) <RID_TYPENAME>: Treat nontype
- scopes as nondependent.
-
-2005-10-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * call.c (resolve_args): Remove redundant test.
-
-2005-10-05 Paolo Bonzini <bonzini@gnu.org>
-
- PR tree-optimization/21419
- PR tree-optimization/24146
- PR tree-optimization/24151
-
- * semantics.c (finish_asm_stmt): Call readonly_error if outputs are
- read-only. Set ASM_VOLATILE_P for asms without outputs.
-
-2005-10-05 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/23513
- * call.c (joust): Adjust length count to more_specialized_fn.
- * pt.c (more_specialized_fn): Cope with non-static member vs
- non-member.
-
-2005-10-04 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR middle-end/23125
- * decl.c (make_rtl_for_nonlocal_decl): Use set_user_assembler_name
- instead of change_decl_assembler_name.
-
-2005-10-03 Alexandre Oliva <aoliva@redhat.com>
-
- * error.c (dump_type) <UNKNOWN_TYPE>: Print reworded message.
-
-2005-10-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/17775
- * repo.c: Include flags.h.
- (finish_repo): Add -frandom-seed to the arguments.
-
-2005-10-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22621
- * parser.c (cp_parser_template_argument): Don't turn "T::f" into
- "(*this).T::f".
- * pt.c (convert_nontype_argument): Remove ??? comment.
-
- PR c++/23840
- * tree.c (lvalue_p_1): A VA_ARG_EXPR with class type is an lvalue,
- when class rvalues are lvalues.
-
-2005-09-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/16782
- * decl.c (grokdeclarator): Always pedwarn about overqualified
- member names.
-
-2005-09-27 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22147
- * name-lookup.c (maybe_process_template_type_declaration): Don't
- treat forward declarations of classes as templates just because
- we're processing_template_decl.
- * pt.c (tsubst_decl): Clear DECL_TEMPLATE_INFO for friend
- functions.
-
-2005-09-26 Jason Merrill <jason@redhat.com>
-
- PR c++/13764
- * cp-tree.h (FUNCTION_NEEDS_BODY_BLOCK): New macro.
- * name-lookup.c (pushdecl_maybe_friend): Check it.
- * decl.c (begin_function_body): Do nothing if it's false.
- (finish_function_body): Ditto.
- (outer_curly_brace_block): New fn.
- (finish_function): Use it.
-
-2005-09-26 Richard Guenther <rguenther@suse.de>
-
- PR middle-end/15855
- * decl2.c (do_static_destruction): Remove.
- (finish_static_initialization_or_destruction): Likewise.
- (DECL_EFFECTIVE_INIT_PRIORITY): New macro.
- (NEEDS_GUARD_P): Likewise.
- (do_static_initialization): Rename to
- do_static_initialization_or_destruction. Process all
- initializers/destructors and handle common conditionalizing.
- (start_static_initialization_or_destruction): Rename to
- one_static_initialization_or_destruction. Handle only
- decl-specific conditionalizing.
- (cp_finish_file): Call do_static_initialization_or_destruction.
-
-2005-09-22 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/21983
- * class.c (find_final_overrider): Move diagnostic about no unique final
- overrider to...
- (update_vtable_entry_for_fn): ... here.
-
-2005-09-21 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23993
- * init.c (integral_constant_value): Use DECL_INTEGRAL_CONSTANT_VAR_P.
-
-2005-09-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23965
- * call.c (resolve_args): Return error_mark_node on arguments
- whose TREE_TYPE is error_mark_node.
-
-2005-09-20 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/23947
- * rtti.c (get_pseudo_ti_init): Recompute ti pointer after
- get_tinfo_ptr calls.
-
-2005-09-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23914
- * parser.c (cp_parser_enclosed_template_argument_list): Make sure
- skip_evaluation is false when processing template arguments.
-
- PR c++/21514
- * pt.c (check_instantiated_args): Treat uses of anonymous types as
- causing type-deduction failure.
-
-2005-09-15 Jason Merrill <jason@redhat.com>
-
- PR c++/23357
- * cp-tree.def (SIZEOF_EXPR, ALIGNOF_EXPR): Change code class to
- tcc_expression.
-
-2005-09-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23896
- * pt.c (tsubst_aggr_type): Make sure skip_evaluation is false when
- processing template arguments.
-
- * pt.c (check_explicit_instantiation_namespace): Fix typo.
-
- PR c++/13140
- * decl.c (check_class_member_definition_namespace): New function.
- (grokfndecl): Use it.
- (grokvardecl): Likewise.
- (grokdecl): Improve documentation.
- * pt.c (check_explicit_instantiation_namespace): New function.
- (register_specialization): Call check_specialization_namespace
- when replacing an implicitly instantiated function.
- (check_explicit_specialization): Ensure that DECL_CONTEXT is set
- correctly for namespace-scope specializations.
- (do_decl_instantiation): Use
- check_explicit_instantiation_namespace.
- (do_type_instantiation): Likewise.
-
-2005-09-15 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/23725
- * error.c (dump_decl): <USING_DECL case> Use USING_DECL_SCOPE.
-
-2005-09-13 Bastian Blank <waldi@debian.org>
-
- PR c++/16171
- * mangle.c (find_substitution): Do not use special substitutions
- for identifiers not in std::.
-
-2005-09-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23839
- * typeck.c (cxx_mark_addressable): Only check DECL_HARD_REGISTER
- for VAR_DECLs.
-
-2005-09-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23842
- * pt.c (tsubst_default_argument): Do treat default argument
- expressions as occurring in the context of the function called.
-
-2005-09-12 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23841
- * parser.c (cp_parser_primary_expression): Recognize the closing
- ">" of a template-argument-list after a floating-point literal as
- the end of a cast expression.
-
-2005-09-12 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23789
- * cvt.c (perform_qualification_conversions): Don't create
- unnecessary NOP_EXPRs.
- * pt.c (tsubst_template_arg): Use fold_non_dependent_expr.
-
-2005-09-12 Ian Lance Taylor <ian@airs.com>
-
- PR g++/7874
- * cp-tree.h (struct lang_decl_flags): Add hidden_friend_p
- bitfield. Make dummy bitfield one bit smaller.
- (DECL_HIDDEN_FRIEND_P): Define.
- (pushdecl_maybe_friend): Declare.
- (pushdecl_top_level_maybe_friend): Declare.
- * decl.c (duplicate_decls): Add newdecl_is_friend parameter.
- Change prototype and all callers. Add assertion that a
- DECL_ARTIFICIAL FUNCTION_DECL is not DECL_HIDDEN_FRIEND_P. Set
- DECL_ANTICIPATED and DECL_HIDDEN_FRIEND_P in duplicated decl if
- appropriate.
- * name-lookup.c (supplement_binding): Don't ignore a
- DECL_HIDDEN_FRIEND_P.
- (pushdecl_maybe_friend): Break out contents of pushdecl. Add
- is_friend parameter. Set DECL_ANTICIPATED and
- DECL_HIDDEN_FRIEND_P for a friend function.
- (pushdecl): Just call pushdecl_maybe_friend.
- (pushdecl_with_scope): Add is_friend parameter. Change prototype
- and all callers.
- (pushdecl_namespace_level): Likewise.
- (push_overloaded_decl): Likewise. Check DECL_HIDDEN_FRIEND_P as
- well as DECL_ANTICIPATED when checking for a builtin.
- (do_nonmember_using_decl): Check DECL_HIDDEN_FRIEND_P as well as
- DECL_ANTICIPATED when checking for a builtin.
- (do_nonmember_using_decl): Likewise.
- (pushdecl_top_level_1): Add is_friend parameter. Change all
- callers.
- (pushdecl_top_level_maybe_friend): New function.
- (remove_hidden_names): New function.
- (struct arg_lookup): Add args field.
- (friend_of_associated_class_p): New static function.
- (arg_assoc_namespace): Ignore hidden functions which are not
- friends of an associated class of some argument.
- (lookup_arg_dependent): Remove hidden functions from list passed
- in. Initialize k.args.
- * name-lookup.h (remove_hidden_names): Declare.
- * friend.c (do_friend): Call pushdecl_maybe_friend instead of
- pushdecl.
- * call.c (add_function_candidate): Change DECL_ANTICIPATED test to
- an assertion, with a check for DECL_HIDDEN_FRIEND_P.
- (build_new_function_call): Add koenig_p parameter. Change
- prototype and callers.
- * pt.c (register_specialization): Add is_friend parameter. Change
- all callers.
- (push_template_decl_real): Change is_friend parameter to bool.
- Change prototype and all callers.
- (tsubst_friend_class): Call pushdecl_top_level_maybe_friend
- instead of pushdecl_top_level.
-
-2005-09-11 Richard Henderson <rth@redhat.com>
-
- * decl2.c (build_anon_union_vars): Copy attributes from the base addr.
- * pt.c (tsubst_decl): Substitute in DECL_VALUE_EXPR.
-
-2005-09-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * parser.c (cp_parser_translation_unit): Simplify. The while-block
- was actually executed at most once.
-
-2005-09-09 Richard Henderson <rth@redhat.com>
-
- PR debug/20998
- * cp-tree.def (ALIAS_DECL): Remove.
- * cp-lang.c (cp_init_ts): Remove support for it.
- * error.c (dump_decl): Likewise.
- * name-lookup.c (pushdecl): Likewise.
- * semantics.c (finish_id_expression): Likewise.
- * decl2.c (build_anon_union_vars): Use a VAR_DECL with
- DECL_VALUE_EXPR instead.
-
-2005-09-09 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22252
- * decl.c (start_preparsed_function): Do not pay attention to
- #pragma interface for implicitly-defined methods.
- * decl2.c (cp_finish_file): Do not complain about uses of inline
- functions that have bodies, even if we decided not to emit the
- body in this translation unit.
- * semantics.c (note_decl_for_pch): Do not mess with linkage.
- (expand_or_defer_fn): Make inline, non-template functions COMDAT
- at this point.
-
-2005-09-08 Richard Henderson <rth@redhat.com>
-
- PR debug/23190
- * decl.c (wrapup_globals_for_namespace): Call
- emit_debug_global_declarations.
- * decl2.c (cp_finish_file): Likewise.
-
-2005-09-08 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23691
- * decl2.c (mark_used): Instantiate static data members initialized
- by constants, even in a template.
-
-2005-09-08 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR obj-c++/16816
- * parser.c (cp_parser_objc_selector_expression): Treat CPP_SCOPE as
- two CPP_COLON.
-
-2005-09-07 Richard Guenther <rguenther@suse.de>
-
- * cp-gimplify.c (cp_gimplify_expr): Create empty CONSTRUCTOR
- for EMPTY_CLASS_EXPR.
-
-2005-09-06 Jakub Jelinek <jakub@redhat.com>
-
- PR c/23075
- * typeck.c (check_return_expr): Add no_warning argument. Set
- *no_warning to true if "return-statement with no value, in function
- returning" warning has been issued.
- * cp-tree.h (check_return_expr): Adjust prototype.
- * semantics.c (finish_return_stmt): Set TREE_NO_WARNING if
- check_return_expr set *no_warning to true.
-
-2005-09-06 Mark Mitchell <mark@codesourcery.com>
-
- * cp-tree.h (rvalue): New function.
- * call.c (build_conditional_expr): Use it.
- * init.c (build_new_1): Likewise.
- * rtti.c (build_dynamic_cast_1): Likewise.
- * tree.c (rvalue): New function.
- * typeck.c (build_unary_op): Use it.
- (build_static_cast_1): Likewise.
-
- PR c++/9782
- * init.c (build_new_1): Make sure the entire array type is
- complete, not just its element types.
-
-2005-09-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * decl.c (check_elaborated_type_specifier): Remove redundant check.
-
-2005-09-06 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/23056
- * typeck.c (ignore_overflows): New helper function.
- (build_static_cast_1): Use it.
-
-2005-09-06 Kazu Hirata <kazu@codesourcery.com>
-
- * cp-tree.h, decl.c, decl2.c, semantics.c: Fix comment typos.
- Follow spelling conventions.
-
-2005-09-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23667
- * pt.c (tsubst_decl): Clear DECL_TEMPLATE_INSTANTIATED when
- copying a VAR_DECL.
-
-2005-09-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21440
- * semantics.c (finish_stmt_expr_expr): Add an explicit
- initialization to the last statement in the statement-expression.
- * (finish_stmt_expr): Adjust accordingly.
-
-2005-09-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23699
- * decl2.c (mark_used): Always instantiate static data members
- initialized by constant expressions.
- * pt.c (instantiate_decl): Instantiate the initializers for static
- data members initialized by constant expressions.
-
- PR c++/21687
- * semantics.c (expand_or_defer_fn): Do not call ggc_collect when
- finishing processing for a template function in a local class.
- Revert:
- 2005-09-02 Mark Mitchell <mark@codesourcery.com>
- * parser.c (cp_parser_class_specifier): Push/pop GC contexts
- around functions in local classes.
-
-2005-09-02 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21687
- * parser.c (cp_parser_class_specifier): Push/pop GC contexts
- around functions in local classes.
-
-2005-08-31 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR obj-c++/23640
- * decl2.c (cp_finish_file): If this is obj-c++ and we need a static
- init, call generate_ctor_or_dtor_function.
-
-2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/13377
- * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to
- lookup_name_real on final parse.
-
-2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23639
- * semantics.c (qualified_name_lookup_error): Do not complain again
- on invalid scope.
-
-2005-08-30 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23586
- * parser.c (cp_parser_namespace_name): Move diagnostic for
- invalid namespace-name to here from ...
- * name-lookup.c (do_namespace_alias): ... here and ...
- (do_using_directive): ... here. Remove dead code.
-
-2005-08-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/23099
- * cp-tree.h (saved_scope): Add skip_evaluation.
- * decl.c (start_decl): Use DECL_INITIALIZED_IN_CLASS_P, not
- DECL_INITIAL, to determine whether or not a static data member was
- initialized in the class-specifier.
- (cp_finish_decl): Add comment.
- * init.c (integral_constant_value): Subtitute into the
- initializers for static data members in templates.
- * name-lookup.c (push_to_top_level): Save skip_evaluation.
- (pop_from_top_level): Restore it.
- * pt.c (instantiate_class_template): Do not substitute into the
- intializers of static data members when instantiating a class.
- (regenerate_decl_from_template): Simplify.
- (instantiate_decl): Tidy. Substitute into the initializer for a
- static data member even when the definition of the data member is
- not available.
-
-2005-08-26 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19004
- * pt.c (uses_template_parms): Handle IDENTIFIER_NODE.
- (type_dependent_expression_p): Allow BASELINKs whose associated
- functions are simply a FUNCTION_DECL.
-
- PR c++/23491
- * cp-tree.h (build_vec_init): Adjust prototype.
- * init.c (perform_member_init): Adjust call to build_vec_init.
- (build_aggr_init): Likewise.
- (build_new_1): Do not call build_default_init for array types.
- (build_vec_init): Add explicit_default_init_p parameter. Perform
- default initialization of vector elements when set.
- * typeck.c (build_modify_expr): Adjust call to build_vec_init.
-
-2005-08-25 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20817
- * typeck.c (build_x_unary_op): Make sure OFFSET_REF is not for a
- ->*.
-
-2005-08-24 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/22454
- * parser.c (cp_lexer_peek_nth_token): Relax assert.
-
-2005-08-23 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/23044
- * pt.c (tsubst_qualified_id): A SCOPE_REF can still remain.
-
-2005-08-22 James E Wilson <wilson@specifix.com>
-
- PR tree-optimization/23426
- * decl.c (grokdeclarator): Use TYPE_SIZE_UNIT not TYPE_SIZE for
- array size check.
-
-2005-08-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/22233
- * pt.c (push_template_decl_real): Return error_mark_node if the
- number of template parameters does not match previous definition.
-
-2005-08-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23089
- * decl.c (require_complete_types_for_parms): Mark incomplete types
- as invalid.
-
-2005-08-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * parser.c (cp_parser_nth_token_starts_template_argument_list_p):
- Fix typo in leading comment.
-
-2005-08-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * name-lookup.c, ptree.c: Delete HOST_PTR_PRINTF.
-
-2005-08-15 Fariborz Jahanian <fjahanian@apple.com>
-
- * cp-tree.h (can_convert_arg, fn_type_unification): New argument.
- * call.c (add_template_candidate_real): Pass down 'flags' to
- fn_type_unification.
- (can_convert_arg): New 'flags' argument. Pass it to call to
- implicit_conversion instead of LOOKUP_NORMAL.
- (can_convert): Add LOOKUP_NORMAL to call to can_convert_arg.
- * class.c (resolve_address_of_overloaded_function): Ditto.
- (resolve_address_of_overloaded_function): Ditto.
- * decl.c (reshape_init, check_default_argument): Ditto.
- * typeck.c (build_ptrmemfunc): Ditto.
- * pt.c (type_unification_real): Add 'flags' argument.
- (fn_type_unification): Pass 'flags' to type_unification_real.
- (type_unification_real): Pass new 'flags' argument to call to
- can_convert_arg.
-
-2005-08-12 Giovanni Bajo <giovannibajo@libero.it>
- Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21799
- PR c++/8271
- * pt.c (unify) <METHOD_TYPE>: Check this-pointer cv-qualifiers
- explicitly.
-
-2005-08-12 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21799
- Revert my 2005-07-08 patch
- * pt.c (type_unification_real): Remove is_method_argument and
- assoicated checks.
- (fn_type_unification, unify): Adjust type_unification_real calls.
-
-2005-08-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23266
- * decl2.c (grokfield): Check that method is not static before
- marking it as pure.
-
-2005-08-11 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/23219
- * name-lookup.c (pushtag): Process the template type before
- altering the identifier lookup fields. Remove unreachable code
- creating an empty stub decl.
-
-2005-08-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/20646
- * decl.c (grokdeclarator): Reset storage_class after error.
-
-2005-08-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/22508
- * init.c (build_new_1): Check for empty candidate list.
-
-2005-08-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/23191
- * pt.c (tsubst) <case METHOD_TYPE>: Check for error_mark_node
- before calling build_exception_variant.
-
-2005-08-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/19498
- * pt.c (tsubst_decl) <case TEMPLATE_DECL>: Return ERROR_MARK_NODE
- if substitution of template args did not succeed.
-
-2005-08-06 Michael Matz <matz@suse.de>
-
- * method.c (use_thunk): Call init_insn_lengths.
-
-2005-08-05 James A. Morrison <phython@gcc.gnu.org>
-
- PR c++/22514
- * name-lookup.c (cp_emit_debug_info_for_using): Do nothing if
- sorrycount or errorcount are nonzero.
-
-2005-08-05 Mark Mitchell <mark@codesourcery.com>
-
- * name-lookup.c (pushtag): Remove accidental commit from:
- 2004-12-21 Mark Mitchell <mark@codesourcery.com>
- PR c++/19063
- * decl.c (grokdeclarator): Return error_mark_node, not
- void_type_node, to indicate errors.
- * parser.c (cp_parser_template_parameter_list): Robustify.
- (cp_parser_template_parameter): Likewise.
-
-2005-08-01 Kazu Hirata <kazu@codesourcery.com>
-
- * class.c, decl.c, name-lookup.c, pt.c, typeck.c, typeck2.c:
- Fix comment typos.
-
-2005-07-29 Kazu Hirata <kazu@codesourcery.com>
-
- * method.c: Fix a comment typo.
-
-2005-07-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22545
- * call.c (add_builtin_candidate): Adjust for changes in
- representation of pointer-to-member types.
-
-2005-07-28 Mike Stump <mrs@apple.com>
-
- * pt.c (check_explicit_specialization): Add visibility logic.
- (lookup_template_class): Likewise.
- (instantiate_class_template): Likewise.
-
-2005-07-27 Devang Patel <dpatel@apple.com>
-
- * name-lookup.c (pushtag): Do no set DECL_IGNORED_P bit.
-
-2005-07-25 Ian Lance Taylor <ian@airs.com>
-
- * ptree.c (cxx_print_identifier): Print a leading space if the
- indent level is 0.
-
-2005-07-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * call.c (convert_for_arg_passing): Check function pointers when
- -Wmissing-format-attribute is activated.
- * typeck.c (convert_for_assignment): Likewise.
-
-2005-07-22 Manfred Hollstein <mh@suse.com>
-
- * parser.c (cp_parser_declaration): Fix unitialised warnings.
-
-2005-07-21 Andrew Pinski <pinskia@physics.uc.edu>
-
- * class.c (build_base_path): Fix typo.
-
-2005-07-21 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/22358
- * class.c (build_base_path): Convert BINFO_OFFSET to the correct type.
-
-2005-07-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * call.c: Fix comment typo(s).
- * cxx-pretty-print.h: Likewise.
- * name-lookup.c: Likewise.
- * parser.c: Likewise.
-
-2005-07-20 Douglas Gregor <doug.gregor@gmail.com>
-
- PR c++/2922
- * semantics.c (perform_koenig_lookup): For dependent calls, just
- return the set of functions we've found so far. Later, it will be
- augmented by those found through argument-dependent lookup.
- * name-lookup.c (lookup_arg_dependent): Implement DR 164 by removing
- the optimization that skips namespaces where the functions were
- originally found.
-
-2005-07-20 Giovanni Bajo <giovannibajo@libero.it>
-
- Make CONSTRUCTOR use VEC to store initializers.
- * call.c (convert_default_arg): Update call to digest_init.
- * class.c (dump_class_hierarchy, dump_array): Update to cope with
- VEC in CONSTRUCTOR_ELTS.
- * cp-tree.h (EMPTY_CONSTRUCTOR_P): Likewise.
- (finish_compound_literal, digest_init): Update declaration.
- * decl.c (struct reshape_iter): New data type.
- (reshape_init_array): Rename to...
- (reshape_init_array_1): Update to cope with VEC in CONSTRUCTOR_ELTS.
- (reshape_init): Rewrite from scratch. Split parts into...
- (reshape_init_array, reshape_init_vector, reshape_init_class,
- reshape_init_r): New functions.
- (check_initializer): Update call to reshape_init. Remove obsolete
- code.
- (initialize_artificial_var, cp_complete_array_type): Update to cope
- with VEC in CONSTRUCTOR_ELTS.
- * decl2.c (grokfield): Update calls to digest_init.
- (mark_vtable_entries): Update to cope with VEC in CONSTRUCTOR_ELTS.
- * error.c (dump_expr_init_vec): New function.
- (dump_expr): Use dump_expr_init_vec.
- * init.c (build_zero_init, build_vec_init): Update to cope with VEC
- in CONSTRUCTOR_ELTS.
- (expand_default_init): Update call to digest_init.
- * parser.c (cp_parser_postfix_expression): Use a VEC for the
- initializers.
- (cp_parser_initializer_list): Build a VEC of initializers.
- * pt.c (tsubst_copy, tsubst_copy_and_build): Update to cope with VEC
- in CONSTRUCTOR_ELTS.
- * rtti.c (tinfo_base_init, generic_initializer, ptr_initializer,
- ptm_initializer, class_initializer, get_pseudo_ti_init): Use
- build_constructor_from_list instead of build_constructor.
- * semantics.c (finish_compound_literal): Update call to digest_init.
- * tree.c (stabilize_init): Update to cope with VEC in
- CONSTRUCTOR_ELTS.
- * typeck.c (build_ptrmemfunc1): Likewise.
- * typeck2.c: (cxx_incomplete_type_error, split_nonconstant_init_1):
- Likewise.
- (store_init_value): Use build_constructor_from_list and update call
- to digest_init.
- (digest_init): Rewrite.
- (process_init_constructor): Rewrite from scratch. Split into...
- (process_init_constructor_array, picflag_from_initializer,
- process_init_constructor_record, process_init_constructor_union):
- New functions.
- (PICFLAG_ERRONEOUS, PICFLAG_NOT_ALL_CONSTANT, PICFLAG_NOT_ALL_SIMPLE):
- New macros.
- (build_functional_cast): Use build_constructor_from_list instead of
- build_constructor.
-
-2005-07-18 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22263
- * cp-tree.h (instantiate_decl): Change prototype.
- * decl2.c (mark_used): Adjust accordingly.
- * pt.c (do_decl_instantiation): Likewise.
- (instantiate_class_member): Likewise.
- (instantiate_decl): Rename undefined_ok as expl_inst_class_mem_p.
- Clear DECL_INTERFACE_KNOWN for an explicitly instantiated template
- that has no definition available.
- (instantiate_pending_templates): Adjust call to instantiate_decl.
-
-2005-07-17 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22139
- * cp-tree.h (DECL_TEMPLATE_INFO): Improve documentation.
- * decl.c (duplicate_decls): Re-register template specializations
- for functions that have DECL_TEMLPLATE_INFO, even if they do not
- have DECL_TEMPLATE_INSTANTIATION set.
-
-2005-07-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * call.c (diagnostic_fn_t): New.
- (build_temp, convert_like_real): Use diagnostic_fn_t.
-
-2005-07-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22204
- * repo.c (repo_emit_p): Robustify.
-
-2005-07-14 Daniel Berlin <dberlin@dberlin.org>
-
- Fix PR c++/22452
- * tree.c (decl_linkage): Don't check DECL_COMDAT on CONST_DECL.
-
-2005-07-15 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/22132
- * call.c (implicit_conversion): Add c_cast_p parameter.
- (standard_conversion): Likewise. Allow conversions between
- differently-qualified pointer types when performing a C-style
- cast.
- (add_function_candidate): Adjust callee.
- (build_builtin_candidate): Likewise.
- (build_user_type_conversion_1): Likewise.
- (conditional_conversion): Likewise.
- (can_convert_arg): Likewise.
- (can_convert_arg_bad): Likewise.
- (perform_implicit_conversion): Likewise.
- * cp-tree.h (comp_ptr_ttypes_const): Declare.
- * typeck.c (comp_ptr_ttypes_const): Give it external linkage.
- Return bool.
-
-2005-07-12 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20172
- * pt.c (tsubst_template_parms): Check for invalid non-type
- parameters.
-
-2005-07-09 Andrew Pinski <pinskia@physics.uc.edu>
-
- * cp-lang.c (shadowed_var_for_decl, decl_shadowed_for_var_lookup,
- decl_shadowed_for_var_insert): Move over to cp-objcp-common.c.
- (cp_init_ts): Call init_shadowed_var_for_decl.
- Remove include of gt-cp-cp-lang.h.
- * cp-objcp-common.c (shadowed_var_for_decl,
- decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert): Moved from
- cp-lang.c.
- (init_shadowed_var_for_decl): New function to initialize
- shadowed_var_for_decl.
- Include gt-cp-cp-objcp-common.h.
- * Make-lang.in (gt-cp-lang.h): Remove.
- (gt-cp-cp-objcp-common.h): Add.
- (cp/cp-lang.o): Remove dependancy on gt-cp-lang.h.
- (cp/cp-objcp-common.o): Add dependancy on gt-cp-cp-objcp-common.h.
- * config-lang.in (gtfiles): Remove cp-lang.c and Add cp-objcp-common.c.
- * cp-tree (init_shadowed_var_for_decl): Add prototype.
-
-2005-07-08 Daniel Berlin <dberlin@dberlin.org>
-
- * Make-lang.in: Add gt-cp-lang.h.
- (cp-lang.o): Ditto.
- * class.c (create_vtable_ptr): Stop setting DECL_ASSEMBLER_NAME on
- the field.
- * config-lang.in: Add cp-lang.c to gtfiles.
- * cp-lang.c: Include hashtab.h.
- (cp_init_ts): New function.
- (LANG_HOOK_INIT_TS): Use macro.
- (decl_shadowed_for_var_lookup): New function.
- (decl_shadowed_for_var_insert): Ditto.
- * cp-tree.h (THUNK_FUNCTION_CHECK): Use decl_common.
- (NON_THUNK_FUNCTION_CHECK): Ditto.
- (DECL_NAMESPACE_ASSOCIATIONS): Use decl_non_common.
- (DECL_INIT_PRIORITY): Ditto.
- (DECL_HAS_SHADOWED_FOR_VAR_P): Ditto.
- (DECL_SHADOWED_FOR_VAR): Use hashtable.
- (SET_DECL_SHADOWED_FOR_VAR): Ditto.
- * decl.c (duplicate_decls): Update for new/updated structures.
- (poplevel): Use SET_DECL_SHADOWED_FOR_VAR.
- * decl2.c (start_static_initialization_or_destruction): Deal with
- priority.
- * pt.c (tsubst_decl): Check TS_DECL_WRTL before doing
- SET_DECL_RTL.
- * tree.c (handle_init_priority_attribute): Handle priority.
-
-2005-07-08 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21799
- * pt.c (type_unification_real): Add is_method argument. Use it
- for this pointer unification.
- (fn_type_unification): Adjust type_unification_real call.
- (unify): Likewise.
-
-2005-07-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * pt.c (type_unification_real): Remove allow_incomplete argument.
- Remove unreachable code.
- (fn_type_unification): Adjust call to type_unification_real.
- (unify): Likewise.
-
-2005-07-05 Paolo Bonzini <bonzini@gnu.org>
-
- * Makefile.in (class.o, decl2.o): Adjust dependencies.
- * class.c: Include tree-dump.h.
- * decl2.c: Include tree-dump.h.
-
-2005-07-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * dump.c: Use dump_string_field.
-
-2005-07-03 Joseph S. Myers <joseph@codesourcery.com>
-
- * cp-tree.h (GCC_DIAG_STYLE): #undef before defining. Change
- minimum GCC version for format checking to 4.1.
-
-2005-07-02 Kazu Hirata <kazu@codesourcery.com>
-
- * Make-lang.in (cc1plus-checksum.c): Use
- build/genchecksum$(build_exeext), not build/genchecksum$(exeext).
-
-2005-07-02 Joseph S. Myers <joseph@codesourcery.com>
-
- * name-lookup.c, parser.c: Use %q, %< and %> to quote in
- diagnostics.
-
-2005-07-02 Zack Weinberg <zack@codesourcery.com>
- Joseph S. Myers <joseph@codesourcery.com>
-
- * error.c (location_of): Add comment.
- (locate_error, cp_error_at, cp_warning_at, cp_pedwarn_at): Remove.
- * cp-tree.h (cp_error_at, cp_warning_at, cp_pedwarn_at): Remove.
- * call.c, class.c, decl.c, decl2.c, friend.c, init.c,
- name-lookup.c, parser.c, pt.c, search.c, semantics.c, typeck.c,
- typeck2.c: Use '+' flag instead of %J, cp_error_at, cp_warning_at
- or cp_pedwarn_at. Mark up some diagnostic strings with N_.
-
-2005-06-30 Daniel Berlin <dberlin@dberlin.org>
-
- * decl.c (require_complete_types_for_parms): Call relayout_decl
- instead of layout_decl.
-
-2005-06-30 Zack Weinberg <zack@codesourcery.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * cp-lang.c: No need to include cxx-pretty-print.h.
- * error.c (cp_printer): Update signature. No need to process
- flags.
- (print_instantiation_partial_context): Output last newline
- with pp_base_newline.
- * Make-lang.in: Update dependencies.
-
-2005-06-30 Steven Bosscher <stevenb@suse.de>
-
- * decl.c (start_decl): Replace DECL_THREAD_LOCAL with
- DECL_THREAD_LOCAL_P.
- (cp_finish_decl): Likewise.
- (grokvardecl): Set the default DECL_TLS_MODEL here.
-
-2005-06-28 Joseph S. Myers <joseph@codesourcery.com>
-
- * cvt.c (ocp_convert): Use invalid_conversion hook.
- * typeck.c (build_binary_op): Use invalid_binary_op hook.
- (build_unary_op): Use invalid_unary_op hook.
-
-2005-06-28 Paul Brook <paul@codesourcery.com>
-
- * Make-lang.in (cp/except.o): Depend on $(TARGET_H)
- * except.c: Include target.h.
- (init_exception_processing): Initialize unwind_resume_libfunc.
- * doc/tm.texi: Document TARGET_ASM_TTYPE
-
-2005-06-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * call.c (build_over_call): Pass in named argument list to
- `check_function_arguments'.
- * typeck.c (build_function_call): Likewise.
-
-2005-06-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cp-tree.h (lang_check_failed): Add noreturn attribute.
-
-2005-06-25 Kelley Cook <kcook@gcc.gnu.org>
-
- * all files: Update FSF address in copyright headers.
-
-2005-06-23 Jason Merrill <jason@redhat.com>
-
- PR c++/19317
- * semantics.c (simplify_aggr_init_expr): Use
- CALL_EXPR_RETURN_SLOT_OPT, not CALL_EXPR_HAS_RETURN_SLOT_ADDR.
-
-2005-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * pt.c (register_specialization): Remove superfluous assertion.
-
-2005-06-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * call.c (convert_like_real): Add format attribute.
- * typeck.c (check_for_casting_away_constness,
- build_static_cast_1): Likewise.
- * typeck2.c (readonly_error, cxx_incomplete_type_diagnostic):
- Likewise.
-
-2005-06-17 Geoffrey Keating <geoffk@apple.com>
-
- PR c++/17413
- * pt.c (type_unification_real): Apply template type deduction even
- to procedure parameters that are not dependent on a template
- parameter.
-
-2005-06-16 Nathan Sidwell <nathan@codesourcery.com>
-
- * rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might
- change.
- (create_pseudo_type_info): First parameter is an int.
-
-2005-06-15 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20678
- * error.c (dump_expr) <COMPONENT_REF case>: Check DECL_NAME is not
- null.
-
- * Make-lang.in: Reformat some long lines.
- (gt-cp-rtti.h): New target.
- (cp/rtti.o): Add dependency.
- * config-lang.in (gtfiles): Add cp/rtti.c.
- * cp-tree.h (CPTI_TI_DESC_TYPE, CPTI_BLTN_DESC_TYPE,
- CPTI_PTR_DESC_TYPE, CPTI_ARY_DESC_TYPE, CPTI_FUNC_DESC_TYPE,
- CPTI_ENUM_DESC_TYPE, CPTI_CLASS_DESC_TYPE,
- CPTI_SI_CLASS_DESC_TYPE, CPTI_VMI_CLASS_DESC_TYPE,
- CPTI_PTM_DESC_TYPE, CPTI_BASE_DESC_TYPE): Remove.
- (ti_desc_type_node, bltn_desc_type_node, ptr_desc_type_node,
- ary_desc_type_node, func_desc_type_node, enum_desc_type_node,
- class_desc_type_node, si_class_desc_type_node,
- vmi_class_desc_type_node, ptm_desc_type_node,
- base_desc_type_node): Remove.
- * decl.c: Adjust documentation of global trees.
- * rtti.c (TINFO_PSEUDO_TYPE, TINFO_VTABLE_DECL,
- TINFO_REAL_NAME): Remove.
- (struct tinfo_s): New.
- (enum tinfo_kind): New.
- (tinfo_descs): New.
- (get_tinfo_decl): Adjust use of tinfo descriptor.
- (tinfo_base_init, generic_initializer, ptr_initializer,
- ptm_initializer, class_initializer): Likewise.
- (get_pseudo_ti_init): Take descriptor index. Adjust.
- (create_pseudo_type_info): Likewise.
- (get_pseudo_ti_desc): Return descriptor index. Adjust.
- (create_tinfo_types): Adjust use of create_pseudo_type_info.
- (emit_tinfo_decl): Adjust use of tinfo descriptor.
-
-2005-06-14 Roger Sayle <roger@eyesopen.com>
-
- * decl.c (grokdeclarator): Only check TREE_OVERFLOW on INTEGER_CST.
-
-2005-06-13 Geoffrey Keating <geoffk@apple.com>
-
- * Make-lang.in (c++.install-man): Doesn't really depend on installdirs.
- (rule for installing g++.1 manpage): Does depend on installdirs.
-
-2005-06-13 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20789
- * decl.c (cp_finish_decl): Clear runtime runtime initialization if
- in-class decl's initializer is bad.
-
- PR c++/21929
- * parser.c (struct cp_parser): Document that scope could be
- error_mark.
- (cp_parser_diagnose_invalid_type_name): Cope with error_mark for
- scope.
- (cp_parser_nested_name_specifier): Return NULL_TREE on error.
- (cp_parser_postfix_expression): Deal with null or error_mark
- scope.
- (cp_parser_elaborated_type_specifier): Adjust
- cp_parser_nested_name_specifier call.
-
- * parser (cp_parser_skip_to_end_of_block_or_statement): Cleanup.
-
-2005-06-12 Roger Sayle <roger@eyesopen.com>
-
- PR c++/21930
- * error.c (dump_expr): UNARY_PLUS_EXPR need not handle void types.
- Treat CONVERT_EXPR identically to NOP_EXPR.
-
-2005-06-10 Aldy Hernandez <aldyh@redhat.com>
-
- PR c++/10611
- * cvt.c (build_expr_type_conversion): Same.
- * typeck.c (build_binary_op): Handle vectors.
- (common_type): Same.
- (type_after_usual_arithmetic_conversions): Same.
-
-2005-06-08 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19497
- * cp-tree.def (USING_DECL): Update documentation.
- * cp-tree.h (DECL_DEPENDENT_P): New.
- (USING_DECL_DECLS, USING_DECL_SCOPE): New.
- * class.c (handle_using_decl): Move most of the processing to ...
- * name-lookup.c (do_class_using_decl): ... here. Make stricter.
- (push_using_decl): Use USING_DECL_SCOPE.
- (cp_emit_debug_info_for_using): Make extern.
- * cxx-pretty-print.c (pp_cxx_statement) <USING_DECL case>: Adjust.
- * name-lookup.h (cp_emit_debug_info_for_using): Declare.
- * pt.c (tsubst_decl) <USING_DECL case>: Use do_class_using_decl
- when tsubsting.
- (tsubst_expr): Use USING_DECL_SCOPE.
- * search.c (lookup_field_1): Use DECL_DEPENDENT_P.
- * semantics.c (finish_member_declaration): Likewise.
-
-2005-06-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/19894
- * pt.c (tsubst): Reject pointer-to-member of type void.
-
- PR c++/20563
- * parser.c (cp_parser_label_declaration): Deal with invalid/missing
- identifiers.
-
-2005-06-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * cp-tree.def (DEFAULT_ARG): Adjust documentation.
- * cp-tree.h (DEFARG_INSTANTIATIONS): New.
- (struct tree_default_arg): Add instantiations member.
- * parser.c (cp_parser_late_parsing_default_args): Adjust to use a
- VEC.
- * pt.c (tsubst_arg_types): Likewise.
-
- * parser.c (cp_parser_late_parsing_default_args): Fix overeager
- assert in previous patch.
-
-2005-06-06 Jakub Jelinek <jakub@redhat.com>
-
- * error.c (locate_error): Use gmsgid instead of msgid for argument
- name.
- (cp_error_at, cp_warning_at, cp_pedwarn_at): Likewise.
-
-2005-06-06 Nathan Sidwell <nathan@codesourcery.com>
-
- PR 21903
- * cp-tree.def (DEFAULT_ARG): Document TREE_CHAIN use.
- * parser.c (cp_parser_late_parsing_default_args): Propagate parsed
- argument to any early instantiations.
- * pt.c (tsubst_arg_types): Chain early instantiation of default arg.
-
- PR c++/20637
- * cp-tree.h (add_method): Add using_decl parameter.
- * class.c (add_method): Add using_decl parameter. Adjust error
- messages.
- (handle_using_decl): Pass the using decl to add_method.
- (clone_function_decl): Adjust add_member calls.
- * decl2.c (check_classfn): Likewise.
- * method.c (lazily_declare_fn): Likewise.
- * semantics.c (finish_member_declaration): Likewise.
-
- * method.c (synthesize_method): Use inform, not warning.
-
-2005-06-06 Hans-Peter Nilsson <hp@axis.se>
-
- * config-lang.in (target_libs): Remove target-gperf.
-
-2005-06-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21619
- * cp-tree.h (DECL_IS_BUILTIN_CONSTANT_P): New macro.
- * parser.c (cp_parser_postfix_expression): Allow non-constant
- expressions as arguments to __builtin_constant_p.
- * tree.c (builtin_valid_in_constant_expr_p): Use
- DECL_IS_BUILTIN_CONSTANT_P.
-
-2005-06-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21853
- * typeck.c (casts_away_constness_r): Do not drop cv-qualifiers on
- the pointed-to type for a pointer-to-member.
-
- PR c++/21336
- * cp-tree.h (grok_op_properties): Remove friendp parameter.
- * decl.c (grokfndecl): Adjust call.
- (grok_op_properties): Determine the class of which the function is
- a member by looking at its DECL_CONTEXT, not current_class_type.
- * pt.c (tsubst_decl): Adjust call to grok_op_properties.
-
-2005-06-02 Nathan Sidwell <nathan@codesourcery.com>
-
- * method.c (synthesize_method): Add addtional arg to warning call.
-
- PR c++/21280
- * Make-lang.in (method.o): Add diagnostic.h
- * decl.c (start_preparsed_function): Use decl's location for file
- info.
- * decl2.c (cp_finish_file): Set input_location before synthesizing
- a function.
- (mark_used): When deferring a synthesized function, save current
- location. Do not set function's location when actually
- synthesizing it.
- * method.c: #include diagnostic.h.
- (synthesize_method): Set the functions source location. Show
- needed location if errors are emitted.
-
- * decl.c (start_decl): Simplify specialization handling. Remove
- unneeded CLASSTYPE_TEMPLATE_INSTANTIATION check.
- * mangle.c (discriminator_for_local_entity): Use VEC_index.
-
- PR c++/20350
- * decl.c (duplicate_decls): Copy all of DECL_USE_TEMPLATE.
-
- PR c++/21151
- * name-lookup.c (pushtag): Push local class even in a template.
-
-2005-05-31 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21165
- * init.c (integral_constant_value): Check the type of the
- initializer, not the decl.
-
-2005-05-30 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21784
- * name-lookup.c (do_nonmember_using_decl): Ignore builtin
- functions, even when the used name is not a function.
-
-2005-05-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * operators.def, optimize.c: Update copyright.
-
-2005-05-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21210
- * call.c (standard_conversion): Permit conversions to complex
- types if conversion to the corresponding scalar type would be
- permitted.
-
- PR c++/21340
- * method.c (implicitly_declare_fn): Clear processing_template_decl
- when generating implicit declaration.
-
-2005-05-27 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21614
- * typeck.c (get_member_function_from_ptrfunc): Do not attempt
- conversions to base classes of incomplete types.
-
-2005-05-27 Ian Lance Taylor <ian@airs.com>
-
- * semantics.c (add_stmt): Add C++ frontend specific version.
- * cp-tree.h (STMT_IS_FULL_EXPR_P): Define.
- (stmts_are_full_exprs_p): Declare.
-
-2005-05-27 Roger Sayle <roger@eyesopen.com>
- Giovanni Bajo <giovannibajo@gcc.gnu.org>
-
- * cp-tree.def (UNARY_PLUS_EXPR): New C++ unary tree code.
- * parser.c (cp_parser_unary_expression): Use UNARY_PLUS_EXPR instead
- of CONVERT_EXPR.
- (cp_parser_unary_expression): Likewise.
- * typeck.c (build_unary_op): Likewise.
- * call.c (add_builtin_candidate, build_new_op): Likewise.
- * error.c (dump_expr): Likewise.
- * pt.c (tsubst_copy, tsubst_copy_and_build): Likewise.
- * decl.c (ambi_op_p, grok_op_properties): Likewise.
- * dump.c (dump_op): Likewise.
- * lex.c (init_operators): Likewise.
- * operators.def ("+"): Likewise.
- * cp-gimplify.c (cp_gimplify_expr): Handle UNARY_PLUS_EXPR like a
- conversion, if the result and argument types differ.
- * tree.c (fold_if_not_in_template): Fold UNARY_PLUS_EXPR much
- like a NOP_EXPR when !processing_template_decl.
-
- * cxx-pretty-print.c (pp_cxx_cast_expression): Prototype.
- (pp_cxx_unary_expression): Handle new UNARY_PLUS_EXPR tree code.
-
-2005-05-27 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/21455
- * typeck.c (get_delta_difference): Cope with incomplete but equal
- classes. Reorder if.
-
- PR c++/21681
- * parser.c (cp_parser_late_parsing_for_member): Disable access
- checking for template functions.
-
-2005-05-26 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/21768
- * pt.c (redeclare_class_template): Change error message according
- to coding conventions.
-
-2005-05-26 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * call.c (build_op_delete_call): Fix quoting in error message.
-
-2005-05-25 Richard Henderson <rth@redhat.com>
-
- PR libgcj/21692
- * cp-tree.h (make_alias_for): Declare.
- * decl2.c (build_java_method_aliases): New.
- (cp_finish_file): Call it.
- * method.c (make_alias_for): Split out from ...
- (make_alias_for_thunk): ... here.
-
-2005-05-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/21686
- * semantics.c (finish_id_expression): Fix quoting in error message.
-
-2005-05-25 DJ Delorie <dj@redhat.com>
-
- * decl.c (duplicate_decls): Move warning control from if() to
- warning(OPT_*).
- * name-lookup.c (parse_using_directive): Likewise.
- * parser.c (cp_parser_elaborated_type_specifier): Likewise.
- (cp_parser_init_declarator): Likewise.
- * tree.c (handle_com_interface_attribute): Likewise.
-
-2005-05-24 Ziemowit Laski <zlaski@apple.com>
-
- * class.c (layout_class_type): Do not issue C++ ABI warnings
- for ObjC structs.
- * decl.c (objc_mark_locals_volatile): Streamline by calling
- objc_volatilize_decl().
- * parser.c (cp_parser_objc_message_expression): Allow simple
- type specifiers (instead of merely type names) as message
- receivers.
- * pt.c (template_args_equal): Do not call objc_comptypes().
- * typeck.c (composite_pointer_type): If both pointers are
- ObjC-esque, arbitrarily choose the first; do not call
- objc_comptypes().
- (comptypes): Do not call objc_comptypes().
- (convert_for_assignment): Call objc_compare_types().
- (comp_ptr_ttypes_real): Call objc_type_quals_match() before
- concluding that types do not match.
-
-2005-05-24 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/21645
- * optimize.c (update_cloned_parm): Copy the TYPE also from the
- original one.
-
-2005-05-19 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/21495
- * decl.c (grokdeclarator): Fix "storage class specified for"
- error reporting.
-
-2005-05-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * parser.c: Fix comment typos.
-
-2005-05-18 Geoffrey Keating <geoffk@apple.com>
-
- * Make-lang.in (cc1plus-dummy): New.
- (cc1plus-checksum.c): New.
- (cc1plus-checksum.o): New.
- (cc1plus): Add cc1plus-checksum.o.
-
-2005-05-17 H.J. Lu <hongjiu.lu@intel.com>
-
- PR C++/19664
- * decl2.c (determine_visibility): Don't set visibility to
- hidden if it has been set explicitly by user.
-
-2005-05-17 Ziemowit Laski <zlaski@apple.com>
- Mike Stump <mrs@apple.com>
-
- Yet more Objective-C++...
-
- * cp-objcp-common.h (cxx_get_alias_set): Move from
- here...
- (cxx_warn_unused_global_decl): Likewise.
- (cp_expr_size): Likewise.
- (cp_tree_size): Likewise.
- (cp_var_mod_type_p): Likewise.
- (cxx_initialize_diagnostics): Likewise.
- (cxx_types_compatible_p): Likewise.
- * cp-tree.h: to here.
- (do_poplevel): Add.
- * lex.c (D_OBJC): Add.
- (init_reswords): Add.
- * Make-lang.in (cp/pt.o): Add cp/cp-objcp-common.h.
- * parser.c: Add c-common.h include.
- * pt.c: Add c-common.h and cp-objcp-common.h includes.
- (template_args_equal): Use objc_comptypes as well.
- (tsubst_copy_and_build): Use objcp_tsubst_copy_and_build as well.
- * semantics.c (do_poplevel): Remove static.
-
- * decl.c (objc_mark_locals_volatile): Don't change decls that are
- already ok.
- * decl2.c (generate_ctor_or_dtor_function): Add code to initialize
- Objective C++ early enough.
- * lex.c (struct resword reswords): Add Objective-C++ support.
- * parser.c (cp_lexer_get_preprocessor_token): Add Objective-C++.
- (cp_parser_objc_message_receiver): Add.
- (cp_parser_objc_message_args): Likewise.
- (cp_parser_objc_message_expression): Likewise.
- (cp_parser_objc_encode_expression): Likewise.
- (cp_parser_objc_defs_expression): Likewise.
- (cp_parser_objc_protocol_expression): Likewise.
- (cp_parser_objc_selector_expression): Likewise.
- (cp_parser_objc_expression): Likewise.
- (cp_parser_objc_visibility_spec): Likewise.
- (cp_parser_objc_method_type): Likewise.
- (cp_parser_objc_protocol_qualifiers): Likewise.
- (cp_parser_objc_typename): Likewise.
- (cp_parser_objc_selector_p): Likewise.
- (cp_parser_objc_selector): Likewise.
- (cp_parser_objc_method_keyword_params): Likewise.
- (cp_parser_objc_method_tail_params_opt): Likewise.
- (cp_parser_objc_interstitial_code): Likewise.
- (cp_parser_objc_method_signature): Likewise.
- (cp_parser_objc_method_prototype_list): Likewise.
- (cp_parser_objc_method_definition_list): Likewise.
- (cp_parser_objc_class_ivars): Likewise.
- (cp_parser_objc_identifier_list): Likewise.
- (cp_parser_objc_alias_declaration): Likewise.
- (cp_parser_objc_class_declaration): Likewise.
- (cp_parser_objc_protocol_declaration): Likewise.
- (cp_parser_objc_protocol_refs_opt): Likewise.
- (cp_parser_objc_superclass_or_category): Likewise.
- (cp_parser_objc_class_interface): Likewise.
- (cp_parser_objc_class_implementation): Likewise.
- (cp_parser_objc_end_implementation): Likewise.
- (cp_parser_objc_declaration): Likewise.
- (cp_parser_objc_try_catch_finally_statement): Likewise.
- (cp_parser_objc_synchronized_statement): Likewise.
- (cp_parser_objc_throw_statement): Likewise.
- (cp_parser_objc_statement): Likewise.
- (cp_parser_primary_expression): Add Objective-C++.
- (cp_parser_statement): Likewise.
- (cp_parser_declaration): Likewise.
- (cp_parser_simple_type_specifier): Likewise.
- (cp_parser_type_name): Likewise.
- (cp_parser_parameter_declaration_list): Likewise.
- (cp_parser_member_declaration) Likewise.
- * tree.c: Include debug.h.
- * typeck.c (composite_pointer_type): Add Objective-C++ support.
- (finish_class_member_access_expr): Likewise.
- (build_function_call): Allow objc to rewrite FUNCTION_DECLs.
- (build_modify_expr): Allow objc to generate write barriers.
-
- * Make-lang.in (cp/tree.o): Add debug.h.
- * tree.c (lvalue_p_1, case CONST_DECL): Add.
-
-2005-05-18 Jan Hubicka <jh@suse.cz>
-
- * method.c: Include tree-pass.h
- (use_thunk): Lower body before expanding.
-
-2005-05-17 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/21454
- * decl.c (maybe_deduce_size_from_array_init): Call
- cp_apply_type_quals_to_decl after completing array type.
-
-2005-05-16 Richard Henderson <rth@redhat.com>
-
- * decl.c (build_library_fn_1): Move setting TREE_NOTHROW ...
- (build_library_fn): ... here.
-
-2005-05-12 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.h (cp_stmt_codes): Don't define.
- (statement_code_p): Declare.
- (STATEMENT_CODE_P): Define.
- * lex.c (statement_code_p): Define.
- (cxx_init): Use actual codes in stmt_codes initializer, not
- cp_stmt_codes macro. Initialize statement_code_p directly, rather
- than using INIT_STATEMENT_CODES.
-
-2005-05-09 Mark Mitchell <mark@codesourcery.com>
-
- * typeck.c (build_unary_op): Do not resort to address arithmetic
- when taking the address of a COMPONENT_REF.
-
-2005-05-08 Kazu Hirata <kazu@cs.umass.edu>
-
- * class.c (vtbl_init_data_s): Change the type of fns to
- VEC(tree,gc)*.
- (build_vtbl_initializer, add_vcall_offset, add_vcall_offset):
- Use VEC instead of VARRAY.
-
-2005-05-07 Richard Sandiford <rsandifo@redhat.com>
-
- * mangle.c: Remove a reference to the MIPS -mint64 option.
-
-2005-05-07 Kazu Hirata <kazu@cs.umass.edu>
-
- * decl.c (wrapup_globals_for_namespace): Use VEC instead of
- VARRAY.
- * name-lookup.c (add_decl_to_level, begin_scope): Likewise.
- * name-lookup.h (cp_binding_level): Change the type of
- static_decls to VEC(tree,gc)*.
-
- * mangle.c (globals): Change the type of substitutions to
- VEC(tree,gc)*.
- (dump_substitution_candidates, add_substitution,
- find_substitution, finish_mangling, init_mangle): Use VEC
- instead of VARRAY.
-
-2005-05-06 Kazu Hirata <kazu@cs.umass.edu>
-
- * decl2.c (spew_debug): Remove.
-
- * decl2.c (ssdf_decls, start_static_storage_duration_function,
- generate_ctor_or_dtor_function): Use VEC instead of VARRAY.
-
- * decl2.c (pending_statics, note_vague_linkage_var,
- cp_finish_file): Use VEC instead of VARRAY.
- (pending_statics_used): Remove.
-
-2005-05-05 Kazu Hirata <kazu@cs.umass.edu>
-
- * decl2.c (deferred_fns, note_vague_linkage_fn,
- cp_finish_file): Use VEC instead of VARRAY.
-
-2005-05-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21352
- * pt.c (build_non_dependent_expr): Use is_overloaded_fn.
-
-2005-05-05 Kazu Hirata <kazu@cs.umass.edu>
-
- * pt.c: Fix a comment typo.
-
-2005-05-04 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (language_function): Change the type of
- x_local_names to VEC.
- * decl.c (push_local_name): Adjust uses of local_names.
-
-2005-05-03 Kazu Hirata <kazu@cs.umass.edu>
-
- * friend.c, lex.c, mangle.c, repo.c: Update copyright.
-
-2005-05-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * class.c (local_classes, init_class_processing): Use VEC
- instead of VARRAY.
- * cp-tree.h (local_classes): Likewise.
- * mangle.c (discriminator_for_local_entity): Likewise.
- * name-lookup.c (pushtag): Likewise.
-
- * class.c (current_lang_depth, push_lang_context,
- pop_lang_context): Use VEC instead of VARRAY.
- * cp-tree.h (saved_scope): Use VEC for lang_base instead of
- VARRAY.
- * name-lookup.c (push_to_top_level): Use VEC instead of
- VARRAY.
-
-2005-05-02 Paolo Bonzini <bonzini@gnu.org>
-
- * semantics.c (finish_call_expr): Call resolve_overloaded_builtin
- for BUILT_IN_MD built-ins.
-
-2005-05-02 Michael Matz <matz@suse.de>
-
- PR c++/19542
- * cp-tree.h (cp_tree_index): Remove CPTI_NULL, to be defined in C
- common frontend.
- (null_node): Remove.
- * lex.c (cxx_init): Move null_node initialisation to C common frontend.
-
-2005-04-25 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.def: Add EXPR_STMT.
- * cp-tree.h (cp_stmt_codes): Add EXPR_STMT.
- (EXPR_STMT_EXPR): Define.
- * cp-gimplify.c: Include "flags.h".
- (gimplify_expr_stmt): New static function.
- (cp_gimplify_expr): Handle EXPR_STMT.
- * cxx-pretty-print.c (pp_cxx_statement): Use pp_cxx_expression
- rather than pp_expression.
- (pp_cxx_statement): Handle EXPR_STMT.
- * dump.c (cp_dump_tree): Handle EXPR_STMT.
- * lex.c (cxx_init): Don't use c_common_stmt_codes in stmt_codes
- initializer.
-
-2005-04-25 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR C++/21188
- * rtti.c (ifnonnull): Cast the zero comparison operand
- to the correct type.
-
-2005-04-24 Jakub Jelinek <jakub@redhat.com>
-
- PR middle-end/20991
- * class.c: Include cgraph.h.
- (cp_fold_obj_type_ref): Set node->local.vtable_method.
- * Make-lang.in (cgraph.o): Depend on $(CGRAPH_H).
-
-2005-04-12 Markus F.X.J. Oberhumer <markus@oberhumer.com>
-
- * mangle.c (write_builtin_type): Handle integer types which are
- not one of the shared integer type nodes and emit a "vendor
- extended builtin type" with an encoding in the form of "u5int96".
-
-2005-04-24 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.def (USING_STMT): Change class to tcc_statement.
- (TRY_BLOCK, EH_SPEC_BLOCK, HANDLER, CLEANUP_STMT): Likewise.
- (IF_STMT, FOR_STMT, WHILE_STMT, DO_STMT): Likewise.
- (BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
-
-2005-04-23 DJ Delorie <dj@redhat.com>
-
- * call.c, class.c, cvt.c, decl.c, decl2.c, except.c, friend.c,
- init.c, lex.c, mangle.c, method.c, name-lookup.c, parser.c,
- repo.c, rtti.c, tree.c, typeck.c, typeck2.c: Adjust warning()
- callers.
-
-2005-04-22 Per Bothner <per@bothner.com>
-
- * decl.c (make_rtl_for_nonlocal_decl): Don't try get_fileinfo if
- input_filename is NULL, as it is for (say) __PRETTY_FUNCTION__.
-
-2005-04-22 Alexandre Oliva <aoliva@redhat.com>
-
- PR c++/21087
- * name-lookup.c (push_overloaded_decl): Do not overload with
- non-duplicate anticipated built-in.
-
-2005-04-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (THROW_NAME, AUTO_VTABLE_NAME, AUTO_TEMP_FORMAT,
- VTABLE_BASE, VTABLE_NAME_PREFIX, STATIC_NAME_FORMAT): Remove.
-
-2005-04-21 Nathan Sidwell <nathan@codesourcery.com>
-
- * cp-tree.h: Adjust for new VEC API.
- Define VEC(tree_pair_s,gc).
- (struct save_scope): Adjust.
- (struct lang_type_class): Adjust.
- (unemitted_tinfo_decls): Adjust.
- * class.c (add_method, resort_type_method_vec,
- finish_struct_methods, struct find_final_overrider_data,
- dfs_find_final_overrider_pre, find_final_overrider,
- get_vcall_index, warn_hidden, walk_subobject_offsets,
- check_methods, fixup_inline_methods, end_of_class,
- warn_about_ambiguous_bases, finish_struct, build_vtbl_initializer,
- add_vcall_offset): Adjust.
- * decl.c (xref_basetypes, finish_method): Adjust.
- * decl2.c (check_classfn): Adjust.
- * init.c (sort_mem_initializers, push_base_cleanups): Adjust.
- * method.c (do_build_copy_constructor): Adjust.
- * name-lookup.c (new_class_binding, store_binding,
- store_bindings, store_class_bindings): Adjust.
- * name-lookup.h: Define VEC(cxx_saved_binding,gc),
- VEC(cp_class_binding,gc).
- (struct cp_binding_level): Adjust.
- * parser.c: Define VEC(cp_token_position,heap).
- (struct cp_lexer): Adjust.
- (cp_lexer_new_main, cp_lexer_new_from_tokens, cp_lexer_destroy,
- cp_lexer_save_tokens): Adjust.
- * pt.c (retrieve_specialization,
- check_explicit_specialization): Adjust.
- * rtti.c (unemitted_tinfo_decls): Adjust.
- (init_rtti_processing, get_tinfo_decl, get_pseudo_ti_init,
- get_pseudo_ti_desc): Adjust.
- * search.c (dfs_access_in_type, lookup_conversion_operator,
- lookup_fnfields_1, dfs_walk_once, dfs_walk_once_accessible,
- dfs_get_pure_virtuals, lookup_conversions_r, binfo_for_vbase): Adjust.
- * semantics.c: Define VEC(deferred_access,gc).
- (push_deferring_access_checks): Adjust.
- * typeck2.c (abstract_virtuals_error): Adjust.
-
-2005-04-20 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.def: Add STMT_EXPR.
- * cp-tree.h (STMT_EXPR_NO_SCOPE): Define.
- (STMT_EXPR_STMT): Define.
- * cxx-pretty-print.c (pp_cxx_primary_expression): Handle
- STMT_EXPR.
- (pp_cxx_expression): Likewise.
- (pp_cxx_statement): Call pp_cxx_statement, not pp_statement.
- * dump.c (cp_dump_tree): Handle STMT_EXPR.
-
-2005-04-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * decl.c (expand_static_init): Call build2 and build3 instead
- of build.
-
- * cp-tree.h (VPTR_NAME, VPTR_NAME_P): Remove.
-
-2005-04-17 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.def: Add SIZEOF_EXPR, ARROW_EXPR and ALIGNOF_EXPR.
- * cxx-pretty-print.c (pp_cxx_postfix_expression): Handle
- ARROW_EXPR.
- (pp_cxx_unary_expression): Handle SIZEOF_EXPR and ALIGNOF_EXPR.
- (pp_cxx_expression): Handle ARROW_EXPR, SIZEOF_EXPR, and
- ALIGNOF_EXPR.
- * typeck.c (cxx_sizeof_or_alignof_type): Update call to
- c_sizeof_or_alignof_type for change in parameter type.
-
-2005-04-16 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/21025
- * typeck.c (cxx_sizeof_or_alignof_type): Check whether the type to
- which sizeof/alignof is dependent, rather than just whether we are
- processing_template_decl.
-
-2005-04-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (LOOKUP_GLOBAL): Remove.
- (LOOKUP_ONLYCONVERTING, DIRECT_BIND, LOOKUP_NO_CONVERSION,
- LOOKUP_DESTRUCTOR, LOOKUP_NO_TEMP_BIND, LOOKUP_PREFER_TYPES,
- LOOKUP_PREFER_NAMESPACES, LOOKUP_CONSTRUCTOR_CALLABLE): Adjust
- their values.
-
-2005-04-15 Richard Henderson <rth@redhat.com>
-
- PR middle-end/14311
- * semantics.c (finish_call_expr): Call resolve_overloaded_builtin.
-
-2005-04-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (lang_type_class): Remove redefined. Move
- java_interface into where redefined was. Increment the width
- of dummy.
- (TYPE_REDEFINED): Remove.
-
-2005-04-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (SET_TMPL_ARG, ENUM_TI_TEMPLATE, ENUM_TI_ARGS,
- CLASSTYPE_TEMPLATE_LEVEL): Remove.
-
-2005-04-11 Mark Mitchell <mark@codesourcery.com>
-
- * decl2.c (determine_visibility): Don't use export_class_data.
- (import_export_decl): Honor TARGET_CXX_CLASS_DATA_ALWAYS_WEAK and
- TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY.
-
-2005-04-09 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h (cxx_alignof): Remove.
-
- * cp-tree.h (DECL_ARRAY_DELETE_OPERATOR_P): Remove.
-
- * cp-tree.h (EXCEPTION_CLEANUP_NAME, B_SET, B_CLR, B_TST,
- CONV_STATIC_CAST): Remove.
-
- * pt.c (UNIFY_ALLOW_MAX_CORRECTION): Remove.
-
- * cp-tree.h (VF_BINFO_VALUE, VF_BASETYPE_VALUE): Remove.
-
- * cp-tree.h (cp_deprecated): Remove.
-
-2005-04-08 Ian Lance Taylor <ian@airs.com>
-
- * cp-tree.def: Define FOR_STMT, WHILE_STMT, DO_STMT, BREAK_STMT,
- CONTINUE_STMT, SWITCH_STMT.
- * cp-tree.h (cp_stmt_codes): Add FOR_STMT, WHILE_STMT, DO_STMT,
- BREAK_STMT, CONTINUE_STMT, SWITCH_STMT.
- (WHILE_COND, WHILE_BODY): Define.
- (DO_COND, DO_BODY): Define.
- (FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY): Define.
- (SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE): Define.
- * cp-gimplify.c (enum bc_t): Define.
- (struct cp_gimplify_ctx, ctxp): Define.
- (push_context, pop_context): New static functions.
- (begin_bc_block, finish_bc_block): New static functions.
- (build_bc_goto): New static function.
- (gimplify_cp_loop, gimplify_for_stmt): New static functions.
- (gimplify_while_stmt, gimplify_do_stmt): Likewise.
- (gimplify_switch_stmt): Likewise.
- (cp_gimplify_expr): Handle FOR_STMT, WHILE_STMT, DO_STMT,
- SWITCH_STMT, CONTINUE_STMT, BREAK_STMT.
- (cp_genericize): Call push_context and pop_context.
- * semantics.c (finish_break_stmt): Just call build_stmt
- (BREAK_STMT) rather than build_break_stmt.
- (finish_continue_stmt): Corresponding change.
- * decl.c (pop_switch): Update call to c_do_switch_warnings for new
- parameters.
- * cxx-pretty-print.c (pp_cxx_statement): Handle SWITCH_STMT,
- WHILE_STMT, DO_STMT, FOR_STMT, BREAK_STMT, CONTINUE_STMT.
- * dump.c (cp_dump_tree): Likewise.
-
-2005-04-08 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20905
- * parser.c (cp_parser_type_specifier_seq): Add is_condition
- parameter.
- (cp_parser_new_type_id): Pass it.
- (cp_parser_condition): Likewise.
- (cp_parser_conversion_type_id): Likewise.
- (cp_parser_type_id): Likewise.
- (cp_parser_type_specifier_seq): In a condition, do not allow
- invalid type-specifier combinations.
- (cp_parser_exception_declaration): Adjust call to
- cp_parser_type_specifier_seq.
-
- * cp-tree.def (TINST_LEVEL): Document TINST_IN_SYSTEM_HEADER_P.
- * cp-tree.h (struct tinst_level): Add in_system_header_p.
- (TINST_IN_SYSTEM_HEADER_P): New macro.
- (make_tinst_level): Remove.
- * pt.c (lookup_template_class): Preserve DECL_IN_SYSTEM_HEADER on
- the instantiated class.
- (push_tinst_level): Do not use make_tinst_level. Set
- TINST_IN_SYSTEM_HEADER_P.
- (pop_tinst_level): Likewise.
- (instantiate_class_template): Set in_system_header.
- (instantiate_pending_templates): Likewise.
- * tree.c (make_tinst_level): Remove.
-
-2005-04-06 Joseph S. Myers <joseph@codesourcery.com>
-
- * decl.c (start_decl): Apply pending #pragma weak regardless of
- scope.
-
-2005-04-06 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20212
- * pt.c (regenerate_decl_from_template): Copy attributes for
- parameters from the pattern to the instantiation.
-
-2005-04-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20734
- * cp-tree.def (OFFSET_REF): Correct comments.
- * init.c (build_offset_ref): Remove misleading comment.
- * typeck.c (build_unary_op): Handle pointer-to-member creation
- here, rather than ...
- (unary_complex_lvalue): ... here.
-
-2005-04-06 Jason Merrill <jason@redhat.com>
-
- PR c++/19312
- * tree.c (stabilize_init): Don't bother trying to stabilize
- something with no side-effects.
-
-2005-04-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20763
- * decl.c (grokdeclarator): Correct attribute handling.
-
-2005-04-05 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19159
- * decl2.c (import_export_decl): Use non-COMDAT external linkage
- for virtual tables, typeinfo, etc. that will be emitted in only
- one translation unit on systems without weak symbols.
-
-2005-04-04 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20679
- * parser.c (cp_parser_template_name): Fix thinko.
-
-2005-04-04 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20746
- * method.c (use_thunk): Protect covariant pointer return
- adjustments from NULL pointers.
-
-2005-04-04 Jan Hubicka <jh@suse.cz>
-
- * decl2.c (finish_objects): Revert my previous patch.
- (cp_finish_file): Likewise.
-
-2005-04-03 Kazu Hirata <kazu@cs.umass.edu>
-
- * pt.c: Fix comment typos.
-
-2005-04-03 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20723
- * pt.c (more_specialized_fn): Member functions are unordered wrt
- non-members. Conversion operators are unordered wrt other
- functions.
-
-2005-04-01 Nathan Sidwell <nathan@codesourcery.com>
-
- * call.c (add_template_candidates_real): Remove length parameter
- from fn_type_unification call.
- * class.c (resolve_address_of_overloaded_function): Likewise
- * cp-tree.h (fn_type_unification): Remove length parameter.
- * pt.c (get_bindings_overload): Remove.
- (get_bindings_real): Rename to ...
- (get_bindings): ... here. Remove length and strict
- parameters. Change return type flag to boolean. Remove original
- forwarding function.
- (determine_specialization): Adjust get_bindings call.
- (fn_type_unification): Remove length parameter. Adjust.
- (type_unification_real): Remove length parameter. Adjust.
- (resolve_overloaded_unification): Adjust get_bindings call.
- (try_one_overload): Simplify confusing cascaded if control flow.
- (unify): Remove length paramter from type_unification_real call.
- (most_specialized_instantiation): Adjust get_bindings calls.
- (most_specialized): Likewise.
-
-2005-03-31 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19203, implement DR 214
- * call.c (joust): Use more_specialized_fn.
- * cp-tree.h (DEDUCE_ORDER): Remove.
- (more_specialized): Replace with ...
- (more_specialized_fn): ... this.
- * pt.c (maybe_adjust_types_for_deduction): Remove DEDUCE_ORDER
- case.
- (type_unification_real): Remove DEDUCE_ORDER case.
- (more_specialized): Replace with ...
- (more_specialized_fn): ... this. Implement DR 214.
- (most_specialized_instantiation): Use get_bindings_real directly.
-
-2005-03-31 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR c++/18644
- * call.c (build_new_op): Remove check for -Wsynth.
-
-2005-03-31 Jan Hubicka <jh@suse.cz>
-
- * decl2.c (finish_objects): Mark ctor as needed.
- (cp_finish_file): Output variables only in nonunit-at-a-time.
-
-2005-03-29 Richard Henderson <rth@redhat.com>
-
- PR c/20519
- * decl.c (cp_complete_array_type): Rename from complete_array_type.
- Use the new complete_array_type in c-common.c. Update all callers.
- * cp-tree.h (cp_complete_array_type): Update to match.
-
-2005-03-24 Geoffrey Keating <geoffk@apple.com>
-
- * typeck.c (build_static_cast_1): Allow scalar_cast between
- any integral, floating, or enumeration type.
-
-2005-03-24 Steven Bosscher <stevenb@suse.de>
-
- * typeck.c (comptypes): First determine if the types are compatible
- from a target-independent point of view. Check target attributes
- last.
-
- * class.c (build_base_path):
- (build_vbase_offset_vtbl_entries):
- (add_vcall_offset): Replace fold (buildN (...)) with fold_buildN.
- * error.c (dump_expr): Likewise.
- * init.c (build_zero_init, expand_cleanup_for_base,
- build_vec_delete_1): Likewise.
- * mangle.c (write_integer_cst): Likewise.
- * method.c (thunk_adjust): Likewise.
- * pt.c (convert_nontype_argument, tsubst, unify): Likewise.
- * tree.c (cxx_print_statistics, array_type_nelts_total): Likewise.
- * typeck.c (build_ptrmemfunc_access_expr,
- (get_member_function_from_ptrfunc): Likewise.
-
-2005-03-23 Joseph S. Myers <joseph@codesourcery.com>
-
- * cp-objcp-common.h (LANG_HOOKS_TRUTHVALUE_CONVERSION): Remove.
-
-2005-03-23 Joseph S. Myers <joseph@codesourcery.com>
-
- * cp-tree.h (perform_integral_promotions): Remove.
- (default_conversion): Add.
-
-2005-03-22 Mark Mitchell <mark@codesourcery.com>
-
- * parser.c (cp_parser_warn_min_max): New function.
- (cp_parser_binary_expression): Use it.
- (cp_parser_assignment_operator_opt): Likewise.
- (cp_parser_operator): Likewise.
-
-2005-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/19980
- * decl.c (start_preparsed_function): Robustify.
-
-2005-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/20499
- * parser.c (cp_parser_class_head): Return NULL_TREE when
- encountering a redefinition.
-
-2005-03-22 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20465
- PR c++/20381
- * typeck.c (build_ptrmemfunc): Allow OFFSET_REF when processing a
- template.
-
-2005-03-21 Paolo Carlini <pcarlini@suse.de>
-
- PR c++/20461
- PR c++/20536
- * init.c (emit_mem_initializers): Don't crash on undefined
- types.
-
-2005-03-21 Paolo Carlini <pcarlini@suse.de>
-
- PR c++/20147
- * semantics.c (finish_stmt_expr_expr): Return immediately
- if error_operand_p (expr).
-
-2005-03-21 Joseph S. Myers <joseph@codesourcery.com>
-
- * cp-tree.h (lvalue_or_else, lvalue_p): New.
- * typeck.c (lvalue_or_else): New. Call lvalue_error.
-
-2005-03-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/20240
- * decl.c (decls_match): Compare context of VAR_DECL.
-
-2005-03-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/20333
- * parser.c (cp_parser_postfix_expression) <case RID_TYPENAME>:
- Check the return value of cp_parser_nested_name_specifier.
-
-2005-03-18 Dale Johannesen <dalej@apple.com>
-
- * cp/tree.c (cp_tree_equal): Handle SSA_NAME.
-
-2005-03-18 Paolo Carlini <pcarlini@suse.de>
-
- PR c++/20463
- * parser.c (cp_parser_diagnose_invalid_type_name):
- Check TYPE_BINFO (current_class_type) before attempting
- to emit inform messages.
-
-2005-03-17 Paolo Carlini <pcarlini@suse.de>
-
- PR c++/19966
- * cp-tree.h (grok_op_properties): Change return type to void.
- * decl.c (grok_op_properties): Return early - don't check the
- arity - in case of a static member or an operator that cannot
- be non-member; tidy a bit.
-
-2005-03-17 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20186
- * pt.c (contains_dependent_cast_p): Remove.
- (fold_non_dependent_expr): Don't use it.
- (value_dependent_expression_p): Use a switch statement.
- reference_exprs can be dependent.
-
-2005-03-14 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/4403
- PR c++/9783, DR433
- * name-lookup.c (pushtag): Skip template parameter scope when
- scope is ts_global. Don't push tag into template parameter
- scope.
- * pt.c (instantiate_class_template): Reorder friend class
- template substitution to handle non-dependent friend class
- that hasn't been previously declared.
-
-2005-03-14 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- Friend class name lookup 5/n
- PR c++/1016
- * cp-tree.h (pushtag): Adjust declaration.
- * decl.c (lookup_and_check_tag): Call lookup_type_scope if
- lookup_name fails.
- (xref_tag): Adjust call to pushtag. Make hidden class visible.
- (start_enum): Adjust call to pushtag.
- * name-lookup.c (ambiguous_decl): Ignore hidden names.
- (qualify_lookup): Change return type to bool.
- (hidden_name_p): New function.
- (lookup_namespace_name, unqualified_namespace_lookup,
- lookup_name_real): Use it.
- (lookup_type_scope): Update comments.
- (maybe_process_template_type_declaration): Change parameter name
- from globalize to is_friend.
- (pushtag): Change globalize parameter of type int to tag_scope.
- Hide name if introduced by friend declaration.
- * name-lookup.h (hidden_name_p): Add declaration.
- * parser.c (cp_parser_lookup_name): Don't deal with hidden name
- here.
- * pt.c (push_template_decl_real): Make hidden class template
- visible.
- (lookup_template_class, instantiate_class_template): Adjust call
- to pushtag.
- * semantics.c (begin_class_definition): Likewise.
- * rtti.c (init_rtti_processing, build_dynamic_cast_1,
- tinfo_base_init, emit_support_tinfos): Use ts_current instead of
- ts_global.
-
-2005-03-13 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20157
- * pt.c (determine_specialization): Reject non-specializations.
-
-2005-03-11 Per Bothner <per@bothner.com>
-
- * cp-tree.h (struct cp_declarator): New id_loc field.
- * cp/parser.c (cp_lexer_get_preprocessor_token): Set cp_token's
- location using c_lex_with_flags, instead of input_location.
- (cp_parser_direct_declarator): Set declarator's id_loc from
- cp_token's id_loc.
-
-2005-03-10 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/18384, c++/18327
- * decl.c (reshape_init_array): Use UHWI type for max_index_cst
- and index. Convert max_index to size_type_node if it isn't
- host_integerp (, 1).
-
-2005-03-09 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20208
- * pt.c (tsubst_decl): Apply array-to-pointer and
- function-to-pointer conversions to function arguments.
- (regenerate_decl_from_template): Likewise.
-
-2005-03-09 Paolo Carlini <pcarlini@suse.de>
-
- PR c++/16859
- * decl.c (complete_array_type): In pedantic mode, return
- 3 for an empty initializer list as the initializer for an
- array of unknown bound (8.5.1/4).
- (maybe_deduce_size_from_array_init): Fix final test to use
- the above.
-
-2005-03-08 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20186
- * pt.c (contains_dependent_cast_p): New.
- (fold_non_dependent_expr): Call it.
-
-2005-03-08 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20142
- * cp-tree.h (target_type): Remove.
- * decl.c (layout_var_decl): Remove #if 0'd code.
- (cp_finish_decl): Remove dead code.
- * init.c (build_vec_init): When determining whether or not the
- element type has an asignment operator, look through all array
- dimensions.
- * typeck.c (target_type): Remove.
-
-2005-03-07 Mark Mitchell <mark@codesourcery.com>
-
- * class.c (finish_struct_1): Do not warn about non-virtual
- destructors in Java classes.
-
-2005-03-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/19311
- * init.c (build_offset_ref): Don't build non-dependent SCOPE_REF.
- * pt.c (build_non_dependent_expr): Don't build NON_DEPENDENT_EXPR
- for OFFSET_TYPE.
- * typeck.c (build_x_unary_op): Don't build non-dependent SCOPE_REF.
- Also set PTRMEM_OK_P for NON_DEPENDENT_EXPR.
- (build_unary_op): Handle building ADDR_EXPR of OFFSET_REF inside
- template.
-
-2005-03-02 Alexandre Oliva <aoliva@redhat.com>
-
- * name-lookup.c (push_overloaded_decl): Don't error if the new
- decl matches the old one.
- * decl.c (redeclaration_error_message): Likewise.
-
-2005-03-01 Per Bothner <per@bothner.com>
-
- * decl.c (finish_function): Use SET_EXPR_LOCATION instead of
- unavailable annotate_with_file_line, if USE_MAPPED_LOCATION.
-
-2005-03-01 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/20232
- * class.c (update_vtable_entry_for_fn): Don't crash on invalid
- covariancy.
-
- * cp-tree.g (THUNK_TARGET): Expand comment.
- * method.c (use_thunk): Make sure we also use the target, if that
- is a thunk.
-
-2005-02-27 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/20206
- * decl.c (cxx_comdat_group): Put thunks for
- TARGET_USE_LOCAL_THUNK_ALIAS_P (function) functions into the same
- comdat group as the thunk target.
-
-2005-02-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * call.c, class.c, cp-tree.h, decl2.c, error.c, init.c, mangle.c,
- parser.c: Fix comment typo(s).
-
-2005-02-24 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/20175
- * decl.c (reshape_init): Don't warn about missing braces if STRING_CST
- initializes a char/wchar_t array.
-
-2005-02-23 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19878
- * decl.c (grokvardecl): Set DECL_INTERFACE_KNOWN for declarations
- with internal linkage.
-
-2005-02-23 Alexandre Oliva <aoliva@redhat.com>
-
- * decl.c (grokvardecl): Don't exempt anonymous types from having
- linkage for variables that have linkage other than "C".
-
-2005-02-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-objcp-common.h, error.c: Update copyright.
-
-2005-02-22 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/20073
- * decl.c (start_decl_1): Don't clear TREE_READONLY.
- (cp_finish_decl): Likewise.
- (complete_vars): Call cp_apply_type_quals_to_decl.
- * typeck.c (cp_apply_type_quals): Avoid setting TREE_READONLY in
- cases where that's not valid.
-
- PR c++/19991
- * init.c (integral_constant_value): Iterate if the value of a decl
- is itself a constant.
-
- PR c++/20152
- * parser.c (cp_parser_class_head): Check for redefintions here.
- * semantics.c (begin_class_definition): Not here.
-
- PR c++/20153
- * decl2.c (build_anon_union_vars): Add type parameter.
- (finish_anon_union): Pass it.
-
- PR c++/20148
- * error.c (dump_expr): Do not print the body of a BIND_EXPR.
- Handle STATEMENT_LIST.
-
- PR c++/19883
- * parser.c (cp_parser_direct_declarator): Always complain about
- non-constant array bounds when in a function scope.
- * semantics.c (finish_id_expression): Do not mark dependent names
- as non-constant.
-
-2005-02-21 Douglas Gregor <dgregor@cs.indiana.edu>
-
- PR c++/19076
- PR c++/6628
- * cp-tree.h (cp_apply_type_quals_to_decl): Declared.
- * decl.c (grokdeclarator): Pedwarn about qualifying a function
- type.
- Add qualifiers when declaring a typedef of a function type.
- Member function pointers pick up the qualifiers of the typedef
- used to declare them.
- Don't complain about creating cv-qualified function types.
- Complain about qualified function typedefs that are used to
- declare non-static member functions or free functions.
- Use cp_apply_type_quals_to_decl.
- (start_preparsed_function): Use cp_apply_type_quals_to_decl.
- (grokclassfn): Use cp_apply_type_quals_to_decl.
- * error.c (dump_type_suffix): Print qualifiers for function
- types.
- * pt.c (tsubst_decl): Use cp_apply_type_quals_to_decl.
- (tsubst): When substituting a function type into a member
- pointer type, pass along the qualifiers.
- (unify): Unify member pointers to member function pointers.
- * tree.c (cp_build_qualified_type_real): Function types may be
- qualified. This includes restrict qualifiers.
- * typeck.c (cp_apply_type_quals_to_decl): New function to replace
- use of c_apply_type_quals_to_decl. Drops qualifiers that are being
- added to function types.
-
-2005-02-20 Zack Weinberg <zack@codesourcery.com>
-
- PR 18785
- * cp-objcp-common.h (LANG_HOOKS_TO_TARGET_CHARSET): Set to
- c_common_to_target_charset. Delete bogus comment.
-
-2005-02-18 Richard Henderson <rth@redhat.com>
-
- PR libstdc++/10606
- * except.c (do_get_exception_ptr): New.
- (expand_start_catch_block): Use it.
-
-2005-02-19 Jakub Jelinek <jakub@redhat.com>
-
- * decl.c (start_decl_1): Only check TYPE_NEEDS_CONSTRUCTING
- if type is not error_mark_node.
-
-2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org>
-
- PR c++/19508
- * decl2.c (grokfield): Do not apply attributes to template parameters
- as they are ignored by tsubst anyway.
-
-2005-02-18 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/19813
- * decl.c (start_decl_1): Clear TREE_READONLY flag if
- its type has TYPE_NEEDS_CONSTRUCTING.
- (complete_vars): Likewise.
-
-2005-02-17 Alexandre Oliva <aoliva@redhat.com>
-
- PR c++/20028
- * class.c (finish_struct): Initialize TYPE_SIZE_UNIT of a
- template along with TYPE_SIZE.
-
- PR c++/20022
- * semantics.c (perform_deferred_access_checks): Use
- get_deferred_access_checks to get the top of the stack.
-
-2005-02-15 Alexandre Oliva <aoliva@redhat.com>
-
- PR c++/17788
- * class.c (add_implicitly_declared_members, check_field_decl)
- (check_field_decls, check_bases): Remove arguments, tests and
- assignments of cant_have_default_ctor-related variables.
-
-2005-02-15 Alexandre Oliva <aoliva@redhat.com>
-
- * decl2.c (mark_used): Set the source location of the used decl to
- the current input location here...
- * method.c (synthesize_method): ... not here. Set input_location
- from the decl instead.
-
-2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19608
- * parser.c (cp_parser_late_parsing_for_member): Use
- current_function_decl as scope to push to and from.
-
- PR c++/19884
- * pt.c (check_explicit_specialization): Make sure namespace
- binding lookup found an overloaded function.
- (lookup_template_function): Just assert FNS is an overloaded
- function.
-
- PR c++/19895
- * decl.c (grokdeclarator): Check for error mark node in ptrmem
- construction.
-
-2005-02-14 Alexandre Oliva <aoliva@redhat.com>
-
- PR c++/17816
- * decl.c (redeclaration_error_message): Report redefinition of
- pure virtual function.
-
-2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19891
- * class.c (build_simple_base_path): Build the component_ref
- directly.
- (update_vtable_entry_for_fn): Walk the covariant's binfo chain
- rather than using lookup_base.
- * search.c (dfs_walk_once): Add non-recursive assert check.
- * typeck.c (build_class_member_access_expr): It is possible for
- the member type to be both const and volatile.
-
-2005-02-12 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/14479
- PR c++/19487
- * pt.c (maybe_check_template_type): Remove.
- * cp-tree.h (maybe_check_template_type): Remove prototype.
- * name-lookup.c (maybe_process_template_type_declaration): Don't
- use maybe_check_template_type.
-
-2005-02-11 Richard Henderson <rth@redhat.com>
-
- PR c++/19632
- * pt.c (get_mostly_instantiated_function_type): Save and restore
- flag_access_control instead of push/pop_access_scope.
-
-2005-02-10 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19755
- * decl.c (reshape_init): Issue warnings about missing braces.
-
-2005-02-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.def, except.c, ptree.c: Update copyright.
-
-2005-02-09 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19811
- * call.c (build_op_delete_call): Check COMPLETE_TYPE_P before
- attempting name lookup.
-
- * parser.c (cp_parser_unqualified_id): Initialize type_decl.
-
- PR c++/19787
- * call.c (initialize_reference): Robustify.
-
- PR ++/19732
- * decl.c (grokdeclarator): Check for invalid use of destructor
- names.
-
- PR c++/19762
- * parser.c (cp_parser_unqualified_id): Avoid creating destructor
- names with invalid types.
-
- PR c++/19826
- * parser.c (cp_parser_direct_declarator): Allow type-dependent
- expressions as array bounds.
-
- PR c++/19739
- * parser.c (cp_parser_attributes_list): Allow empty lists.
-
-2005-02-08 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19733
- * class.c (add_method): Don't set TYPE_HAS_DESTRUCTOR.
- (check_bases): Give warnings about a base class with a
- non-virtual destructor, even if it is implicit.
- (finish_struct_bits): Don't copy TYPE_HAS_DESTRUCTOR.
- (maybe_warn_about_overly_private_class): Don't use
- TYPE_HAS_DESTRUCTOR.
- (finish_struct_methods): Don't set TYPE_HAS_DESTRUCTOR.
- (check_for_override): Give it external linkage.
- (add_implicitly_declared_members): Generate destructors lazily.
- (check_field_decls): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR, not
- TYPE_HAS_DESTRUCTOR.
- (check_bases_and_members): Call check_methods before
- check_field_decls.
- (check_bases_and_members): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR, not
- TYPE_HAS_DESTRUCTOR.
- (finish_struct_1): Do not use TYPE_HAS_DESTRUCTOR.
- * cp-tree.def (PSEUDO_DTOR_EXPR): Document.
- * cp-tree.h (TYPE_HAS_DESTRUCTOR): Remove.
- (lang_type_class): Add lazy_destructor.
- (CLASSTYPE_LAZY_DESTRUCTOR): New macro.
- (CLASSTYPE_DESTRUCTORS): Robustify.
- (TYPE_HAS_DESTRUCTOR): Remove.
- (check_for_override): Declare.
- (build_vbase_delete): Remove.
- * cvt.c (convert_to_void): Issue errors about pseudo-destructor
- expressions.
- * decl.c (cxx_maybe_build_cleanup): Remove dead code.
- * except.c (dtor_nothrow): Lazily create destructors if necessary.
- (build_throw): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR.
- * init.c (build_delete): Lazily create destructors, if necessary.
- (build_vbase_delete): Remove.
- * method.c (locate_dtor): Simplify.
- (implicitly_declare_fn): Add support for destructors.
- * parser.c (cp_parser_lookup_name): Lazily create destructors, if
- necessary.
- * pt.c (check_explicit_specialization): Don't use
- TYPE_HAS_DESTRUCTOR.
- (instantiate_class_template): Likewise.
- * ptree.c (cxx_print_type): Don't print TYPE_HAS_DESTRUCTOR.
- * rtti.c (emit_support_tinfos): Robustify.
- * search.c (lookup_fnfields_1): Lazily create destructors.
- * typeck.c (build_class_member_access_expr): Remove
- PSEUDO_DTOR_EXPR handling.
- (lookup_destructor): Likewise.
-
-2005-02-08 Kazu Hirata <kazu@cs.umass.edu>
-
- * cxx-pretty-print.c, cxx-pretty-print.h, decl.h: Update
- copyright.
-
-2005-02-07 Mark Mitchell <mark@codesourcery.com>
-
- * parser.c (cp_lexer_start_debugging): Avoid arithmetic operations
- on boolean variables.
- (cp_lexer_stop_debugging): Likewise.
-
-2005-02-03 Giovanni Bajo <giovannibajo@gcc.gnu.org>
-
- PR c++/17401
- * parser.c (cp_parser_pure_specifier): Emit a specific error
- message with an invalid pure specifier.
- * decl2.c (grok_function_init): Remove.
- (grokfield): An initializer for a method is a always a pure
- specifier.
-
-2005-02-02 Matt Austern <austern@apple.com>
-
- PR c++/19628
- * cp-tree.h (builtin_valid_in_constant_expr_p): Declare.
- * parser.c (cp_parser_postfix_expression): Accept function call in
- constant expression if builtin_valid_in_constant_expr_p is true
- for that function.
- * pt.c (value_dependent_expression_p): Handle CALL_EXPRs properly.
- * semantics.c (finish_id_expression): Accept function call in constant
- expression if builtin_valid_in_constant_expr_p is true for that
- function.
- * tree.c (builtin_valid_in_constant_expr_p): New.
-
-2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/17413
- * pt.c (check_instantiated_args): Improve error message.
- Fix logic when to print its second part.
-
-2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-tree.h (complete_type_or_else): Remove macro.
- (complete_type_or_diagnostic): Rename to complete_type_or_else
- and remove last argument.
- * typeck.c (complete_type_or_diagnostic): Rename to
- complete_type_or_else and remove last argument.
-
-2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cp-tree.h (commonparms): Remove prototype.
- (convert_arguments): Likewise.
- (PFN_FROM_PTRMEMFUNC): Remove.
- * typeck.c (commonparms): Make static.
- (convert_arguments): Add prototype. Make static.
- (PFN_FROM_PTRMEMFUNC): Replace by pfn_from_ptrmemfunc.
-
-2005-01-31 Mark Mitchell <mark@codesourcery.com>
-
- * parser.c (cp_parser_primary_expression): Don't complain about
- floating-point literals in integral constant expressions when
- !pedantic.
-
-2005-02-01 Alexandre Oliva <aoliva@redhat.com>
-
- * parser.c (cp_parser_template_id): Revert comment patch too.
-
- PR c++/18757
- PR c++/19366
- PR c++/19499
- * parser.c (cp_parser_template_id): Revert 2004-12-09's patch.
- Issue an error when creating the template id.
- * pt.c (fn_type_unification): Return early if the explicit
- template arg list is an error_mark_node.
-
-2005-01-31 Mark Mitchell <mark@codesourcery.com>
-
- * decl.c (build_enumerator): Do not issue duplicate error messages
- about invalid enumeration constants.
- * parser.c (cp_parser_non_integral_constant_expression): Always
- set parser->non_integral_constant_expression_p.
- (cp_parser_primary_expression): Add cast_p parameter. Issue
- errors about invalid uses of floating-point literals in
- cast-expressions.
- (cp_parser_postfix_expression): Add cast_p parameter.
- (cp_parser_open_square_expression): Pass it.
- (cp_parser_parenthesized_expression_list): Add cast_p parameter.
- (cp_parser_unary_expression): Likewise.
- (cp_parser_new_placement): Pass it.
- (cp_parser_direct_new_declarator): Likewise.
- (cp_parser_new_initializer): Likewise.
- (cp_parser_cast_expression): Add cast_p parameter.
- (cp_parser_binary_expression): Likewise.
- (cp_parser_question_colon_clause): Likewise.
- (cp_parser_assignment_expression): Likewise.
- (cp_parser_expression): Likewise.
- (cp_parser_constant_expression): If an integral constant
- expression is invalid, return error_mark_node.
- (cp_parser_expression_statement): Pass cast_p.
- (cp_parser_condition): Likewise.
- (cp_parser_iteration_statement): Likewise.
- (cp_parser_jump_statement): Likewise.
- (cp_parser_mem_initializer): Likewise.
- (cp_parser_template_argument): Likewise.
- (cp_parser_parameter_declaration): Likewise.
- (cp_parser_initializer): Likewise.
- (cp_parser_throw_expression): Likewise.
- (cp_parser_attribute_list): Likewise.
- (cp_parser_simple_cast_expression): Likewise.
- (cp_parser_functional_cast): Likewise.
- (cp_parser_late_parsing_default_args): Likewise.
- (cp_parser_sizeof_operand): Save/restore
- non_integral_constant_expression_p.
-
-2005-01-31 Mike Stump <mrs@apple.com>
-
- * parser.c (cp_lexer_new_main): Get the first token, first, before
- doing anything.
-
-2005-01-31 Mark Mitchell <mark@codesourcery.com>
-
- * decl.c (start_decl): Add missing parentheses.
-
-2005-01-30 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19555
- * cp-tree.h (DECL_USE_TEMPLATE): Expand documentation.
- * decl.c (duplicate_decls): Do not discard
- DECL_IMPLICIT_INSTANTIATION when merging declarations.
- (start_decl): Do not SET_DECL_TEMPLATE_SPECIALIZATION for
- variables that do not have DECL_USE_TEMPLATE.
-
- PR c++/19395
- * decl.c (grokdeclarator): Refactor code so that qualified names
- are never allowed as the declarator in a typedef.
-
- PR c++/19367
- * name-lookup.c (do_nonmember_using_decl): Avoid overloading
- builtin declarations.
-
- PR c++/19457
- * call.c (convert_like_real): Inline call to
- dubious_conversion_warnings here.
- * cp-tree.h (dubious_conversion_warnings): Remove.
- * semantics.c (finish_unary_op_expr): Copy INTEGER_CSTs before
- setting TREE_NEGATED_INT.
- * typeck.c (dubious_conversion_warnings): Remove.
-
- PR c++/19349
- * name-lookup.c (pushdecl_namespace_level): Avoid accessing free'd
- memory.
-
-2005-01-28 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19253
- * parser.c (cp_parser_diagnose_invalid_type_name): Commit to
- tentative parses.
-
- PR c++/19667
- * pt.c (redeclare_class_template): Robustify.
-
-2005-01-27 Steven Bosscher <stevenb@suse.de>
-
- * decl.c (finish_case_label): Use SWITCH_STMT accessor macros
- instead of SWITCH_EXPR ones.
- * pt.c (tsubst_expr): Likewise.
- * semantics.c (begin_switch_stmt, finish_switch_cond,
- finish_switch_stmt): Likewise.
-
-2005-01-26 J"orn Rennecke <joern.rennecke@st.com>
-
- PR c++/18370
- * parser.c (cp_parser_initializer_clause): Initialize *non_constant_p.
-
-2005-01-25 Andrew Pinski <pinskia@physics.uc.edu>
-
- * class.c (abort_fndecl_addr): New variable.
- (build_vtbl_initializer): If we have a pure virtual function
- share the abort function's address.
- Include gt-cp-class.h at the end.
- * config-lang.in (gtfiles): Add cp/class.c.
-
-2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * cxx-pretty-print.c (pp_cxx_statement): Add prototype. Make static.
- (pp_cxx_function_definition): Make static.
- * cxx-pretty-print.h (pp_cxx_statement): Remove prototype.
- (pp_cxx_function_definition): Likewise.
-
-2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * name-lookup.c (print_binding_level): Make static.
- (constructor_name_full): Make static inline.
- (current_decl_namespace): Make static.
- * name-lookup.h (constructor_name_full): Remove prototype.
- (print_binding_level): Likewise.
- (current_decl_namespace): Likewise.
-
-2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * decl.h (debug_bindings_indentation): Remove.
-
-2005-01-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * typeck.c: Fix a comment typo.
-
-2005-01-21 Giovanni Bajo <giovannibajo@gcc.gnu.org>
-
- PR c++/19208
- * pt.c (fold_decl_constant_value): Always call fold_non_dependent_expr
- at least once.
- (tsubst): Use fold_decl_constant_value in place of a bare call to
- integral_constant_value.
-
-2005-01-20 Kazu Hirata <kazu@cs.umass.edu>
-
- * typeck.c (more_qualified_p): Remove.
- * cp-tree.h: Remove the corresponding prototype.
-
-2005-01-19 Matt Austern <austern@apple.com>
-
- * typeck.c (comptypes): Handle return code from objc_comptypes
- correctly.
-
-2005-01-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h, name-lookup.h: Remove unused prototypes.
-
-2005-01-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/19375
- * semantics.c (finish_id_expression): Disable access checking for
- already lookuped FIELD_DECL.
-
-2005-01-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * decl.c (delete_block): Remove.
- * cp-tree.h: Remove the corresponding prototype.
-
- * decl.c (vtable_decl_p, vtype_decl_p, walk_globals_data,
- walk_vtables_r, walk_vtables, walk_globals_r, walk_globals):
- Remove.
- * cp-tree.h: Remove the corresponding prototypes.
-
- * tree.c (count_functions, bound_pmf_p, cp_is_overload_p,
- cp_update_decl_after_saving, name_p): Remove.
- * cp-tree.h: Remove the corresponding prototypes.
-
-2005-01-18 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR c/19472
- * semantics.c (finish_asm_stmt): Strip nops off
- input memory operands.
-
-2005-01-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * Make-lang.in, call.c, cvt.c, init.c, rtti.c, tree.c,
- typeck2.c: Update copyright.
-
-2005-01-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * class.c (get_enclosing_class): Remove.
- * cp-tree.h: Remove the corresponding prototypes.
-
- * cvt.c (convert_lvalue): Remove.
- * cp-tree.h: Remove the corresponding prototype.
-
- * pt.c (tinst_for_decl): Remove.
- * cp-tree.h: Remove the corresponding prototypes.
-
- * tree.c (hash_chainon): Remove.
- * cp-tree.h: Remove the corresponding prototypes.
-
-2005-01-15 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/19263
- * typeck2.c (split_nonconstant_init_1) <case VECTOR_TYPE>: Put a copy
- of CONSTRUCTOR's node into MODIFY_EXPR, as the original is modified.
-
-2005-01-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Make-lang.in (cp-warn): Don't append $(WERROR).
-
-2005-01-10 Kazu Hirata <kazu@cs.umass.edu>
-
- * cp-tree.h: Fix a comment typo.
-
-2005-01-07 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19298
- * pt.c (tsubst_qualified_id): Call convert_from_reference.
-
-2005-01-06 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/19244
- * class.c (add_implicitly_declared_members): Remove dead code.
- * decl.c (grokfndecl): Add sfk parameter. Use it do set
- DECL_CONSTRUCTOR_P.
- (grokdeclarator): Adjust calls to grokfndecl.
- * method.c (implicitly_declare_fn): Improve documentation.
- * parser.c (cp_parser_direct_declarator): Do not consider a
- function to be a constructor if the containing class was
- originally anonymous.
-
-2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/17154
- * search.c (lookup_field_1): Handle using declaration in
- class template partial specialization.
-
-2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
-
- PR c++/19258
- * pt.c (push_access_scope): Handle friend defined in class.
- (pop_access_scope): Likewise.
-
-2005-01-06 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19270
- * pt.c (tsubst_copy) <ARRAY_REF case>: Handle separately.
- (tsubst_copy_and_build) <ARRAY_REF case>: Remove obsolete
- array-new handling code. Use build_x_binary_op.
-
-2005-01-05 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/19030
- * cp-tree.h (start_decl): Take pointer to pushed scope, not bool.
- * name-lookup.h (push_scope): Return pushed scope, not flag.
- * name-lookup.c (push_scope): Return scope that should be popped,
- not a flag.
- * decl.c (start_decl): Adjust.
- (grokfndecl): Adjust scope push and pop.
- * decl2.c (check_classfn): Likewise.
- * parser.c (cp_parser_condition, cp_parser_conversion_function_id,
- cp_parser_init_declarator, cp_parser_direct_declarator,
- cp_parser_class_specifier, cp_parser_class_head,
- cp_parser_lookup_name,
- cp_parser_constructor_declarator_p): Likewise.
- * pt.c (instantiate_class_template,
- resolve_typename_type): Likewise.
-
-2005-01-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c++/14136
- * parser.c (cp_parser_unqualified_id): Do not issue error message
- for typedef-name as destructor declarator when performing an
- uncommitted tentative parse.
-
-2005-01-01 Steven Bosscher <stevenb@suse.de>
-
- PR middle-end/17544
- * decl.c (finish_function): Fix comment. Annotate the compiler
- generated return with the current file name and line 0.
diff --git a/gcc/cp/ChangeLog-2005 b/gcc/cp/ChangeLog-2005
new file mode 100644
index 00000000000..02f0b9d846f
--- /dev/null
+++ b/gcc/cp/ChangeLog-2005
@@ -0,0 +1,3521 @@
+2005-12-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cxx-pretty-print.c (pp_cxx_constant): New. Print
+ string-literal in parens if input program says so.
+ (pp_cxx_primary_expression): Hand off constant printing to
+ pp_cxx_constant.
+ (pp_cxx_pretty_printer_init): Set pp->c_base.constant.
+ (pp_cxx_expression): Use pp_cxx_constant for literals.
+ * error.c (dump_expr): Use pp_constant for literals.
+
+2005-12-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * method.c (make_thunk): Don't set comdat_linkage here.
+ (use_thunk): Make thunk one only here, if thunk target is
+ DECL_ONE_ONLY.
+
+2005-12-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25439
+ * decl.c (grokdeclarator): Remove dead code.
+ * ptree.c (cxx_print_xnode): Handle BASELINK.
+ * parser.c (make_id_declarator): Add sfk parameter.
+ (cp_parser_direct_declarator): Do not pass TYPE_DECLs to
+ make_id_declarator.
+ (cp_parser_declarator_id): Simplify BASELINKs here.
+ (cp_parser_member_declaration): Adjust calls to
+ make_id_declarator.
+
+2005-12-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23171, c++/23172, c++/25417.
+ * typeck.c (build_unary_op): Create temporary variables for
+ compound literals whose addresses are taken.
+ * init.c (expand_aggr_init_1): Use COMPOUND_LITERAL_P.
+ * decl.c (reshape_init_vector): Likewise.
+ (reshape_init): Give it external linkage.
+ (check_initializer): Use COMPOUND_LITERAL_P.
+ (initialize_artificial_var): Allow the initializer to be a
+ CONSTRUCTOR.
+ * call.c (make_temporary_var_for_ref_to_temp): Use
+ create_temporary_var.
+ * cp-tree.h (COMPOUND_LITERAL_P): New macro.
+ (rehape_init): Declare.
+ * typeck2.c (digest_init): Use COMPOUND_LITERAL_P.
+ * semantics.c (finish_compound_literal): Use reshape_init.
+
+2005-12-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24671
+ * pt.c (instantiate_template): Handle SFINAE.
+
+2005-12-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * decl.c (grokdeclarator): Improve diagnostic for friend
+ declarations of class members.
+
+2005-12-22 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25369
+ * tree.c (really_overloaded_fn): Tweak comment.
+ * pt.c (tsubst_call_declarator_parms): Remove.
+ (tsubst_copy): Call mark_used on the member referenced by an
+ OFFSET_REF.
+ * semantics.c (finish_qualified_id_expr): Simplify.
+ * decl2.c (mark_used): Accept BASELINKs.
+
+ PR c++/25364
+ * typeck.c (build_unary_op): Pass DECLs not names to
+ build_offset_refs.
+ * init.c (build_offset_ref): Do not do name lookup. Do not call
+ mark_used.
+ * call.c (build_call): Simplify and tidy.
+ * semantics.c (finish_qualified_id_expr): Call mark_used.
+
+2005-12-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23333
+ * parser.c (cp_parser_pure_specifier): Check for PURE_ZERO to
+ identify a single '0'.
+
+2005-12-20 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21228
+ * decl.c (use_eh_spec_block): New function.
+ (store_parm_decls): Use it.
+ (finish_function): Likewise.
+
+2005-12-19 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24278
+ * init.c (expand_member_init): Print messages about baseclasses
+ using %T rather than %D.
+
+ PR c++/24915
+ * class.c (add_method): Do not treat templates as identical unless
+ their return types are the same.
+
+2005-12-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25300
+ * tree.c (build_qualified_name): Return error_mark_node for
+ erroneous input.
+
+2005-12-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25337
+ * pt.c (tsubst_copy_and_build): Permit dependent types for the
+ object in a class member access expression.
+
+2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
+
+ PR java/9861
+ * mangle.c (write_bare_function_type): Mangle return type for
+ methods of Java classes
+
+2005-12-08 Th�dore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
+
+ * call.c (build_conditional_expr): Print types in error messages.
+
+2005-12-07 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * expr.c (cxx_expand_expr): Call gcc_unreachable instead of abort.
+
+2005-12-07 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-gimplify.c (gimplify_cp_loop): Use fold_build3.
+
+2005-12-07 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
+
+ * Make-lang.in (c++.all.build, c++.install-normal): Remove.
+
+2005-12-07 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
+
+ * Make-lang.in: Remove all dependencies on s-gtype.
+
+2005-12-06 Aldy Hernandez <aldyh@redhat.com>
+
+ PR C++/24138
+ * decl.c (reshape_init_array_1): Handle max_index of -1.
+
+2005-12-06 Roger Sayle <roger@eyesopen.com>
+
+ * typeck.c (build_binary_op): Issue warning if either operand of a
+ comparison operator is a string literal, except for testing equality
+ or inequality against NULL.
+
+2005-12-06 Roger Sayle <roger@eyesopen.com>
+
+ PR c++/25263
+ * decl.c (compute_array_index_type): Check that itype is an
+ INTEGER_CST node before testing/clearing TREE_OVERFLOW.
+
+2005-12-05 Daniel Berlin <dberlin@dberlin.org>
+
+ * ptree.c (cxx_print_decl): Update to check for decl_common
+ structure.
+
+2005-12-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24173
+ * decl.c (duplicate_decls): Don't rely on DECL_TEMPLATE_INFO after
+ clobbering newdecl.
+
+2005-12-02 Richard Guenther <rguenther@suse.de>
+
+ * semantics.c (simplify_aggr_init_expr): Use buildN instead
+ of build.
+
+2005-12-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * parser.c (cp_lexer_new_main): Usr GGC_RESIZEVEC instead of
+ ggc_realloc.
+ (cp_parser_template_argument_list): Use XRESIZEVEC instead of
+ xrealloc.
+ * class.c (pushclass): Likewise.
+
+2005-12-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * decl2.c (get_priority_info): Use XNEW, not xmalloc.
+ * decl.c (push_switch): Likewise.
+ * lex.c (handle_pragma_implementation): Likewise.
+ * cp-objcp-common.c (decl_shadowed_for_var_insert): Use GGC_NEW,
+ not ggc_alloc.
+ (cxx_initialize_diagnostics): Use XNEW, not xmalloc.
+ * class.c (init_class_processing): Use XNEWVEC, not xmalloc.
+ * g++spec.c (lang_specific_driver): Likewise.
+ * mangle.c (save_partially_mangled_name): Likewise.
+ * parser.c (cp_lexer_new_main): Use GGC_NEWVEC, not ggc_alloc.
+ (cp_parser_template_argument_list): Use XNEWVEC, nto xmalloc.
+ (cp_parser_sizeof_operand): Likewise.
+ * repo.c (open_repo_file, open_repo_file): Likewise.
+
+2005-12-01 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * parser.c (cp_parser_make_typename_type): Call make_typename_type
+ with tf_none instead of magic value 0.
+ (cp_parser_explicit_instantiation): Call do_type_instantiation
+ with tf_error instead of magic value 1.
+ (cp_parser_elaborated_type_specifier): Call make_typename_type
+ with tf_error instead of magic value 1.
+ (cp_parser_class_name): Likewise.
+ (cp_parser_lookup_name): Likewise.
+
+2005-12-01 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * parser.c (cp_parser_declaration): Set token2.type to CPP_EOF,
+ not RID_MAX.
+
+2005-11-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/21123
+ * cp-gimplify.c (cp_genericize_r): Don't dereference invisible reference
+ parms in a thunk.
+
+2005-11-30 Ben Elliston <bje@au.ibm.com>
+
+ * typeck.c (build_x_unary_op): Correct spelling in error message.
+
+2005-11-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21166
+ * class.c (check_field_decls): Only set DECL_PACKED on a field
+ when its natural alignment is > BITS_PER_UNIT.
+
+2005-11-27 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/24979
+ * cp-tree.h (DECL_MAIN_P): Remove duplicate definition.
+
+2005-11-26 Richard Henderson <rth@redhat.com>
+
+ * lex.c: Update for pragma_lex rename.
+ * parser.c: Likewise.
+
+2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/9278
+ * decl.c (grokparms): Do not allow typedef-names in a '(void)'
+ parmlist.
+
+2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * typeck2.c (process_init_constructor_union): Remove check for
+ unnamed union members.
+
+2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * name-lookup.c (lookup_name_real): Merge two if's.
+
+2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * pt.c (instantiate_class_template): Clean-up.
+
+2005-11-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * pt.c (template_class_depth_real): Remove. Move functionality to ...
+ (template_class_depth): ... here, replacing count_specializations
+ with 0. Adjust comment.
+
+2005-11-24 Richard Guenther <rguenther@suse.de>
+ Dirk Mueller <dmueller@suse.de>
+
+ PR c++/14024
+ * typeck.c (build_reinterpret_cast_1): Use
+ strict_aliasing_warning.
+
+2005-11-23 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR c++/24235
+ * pt.c (check_instantiated_args): Reword diagnostic message about
+ template argument involving local types.
+
+2005-11-23 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR c++/21667
+ * typeck.c (build_array_ref): Avoid code duplicate. Use common
+ C/C++ diagnostic function warn_array_subscript_with_type_char.
+
+2005-11-21 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR c++/22238
+ * error.c (resolve_virtual_fun_from_obj_type_ref): New.
+ (dump_expr): Use it in <case CALL_EXPR>.
+
+2005-11-21 Richard Henderson <rth@redhat.com>
+
+ * cp-objcp-common.h, name-lookup.c, name-lookup.h: Revert 11-18 patch.
+
+ * name-lookup.c (lookup_name): Remove prefer_type argument.
+ (lookup_name_prefer_type): New.
+ * decl.c (lookup_and_check_tag): Use them.
+ * pt.c (tsubst_friend_class): Likewise.
+ (lookup_template_class): Likewise.
+ (tsubst_copy_and_build): Likewise.
+ * name-lookup.h (lookup_name_prefer_type): New.
+ (lookup_name): Remove declaration.
+
+2005-11-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8355
+ * decl.c (grokfndecl): Set up DECL_TEMPLATE_INFO before calling
+ set_decl_namespace.
+ * name-lookup.c (set_decl_namespace):
+
+2005-11-18 Mike Stump <mrs@apple.com>
+
+ * cp-objcp-common.h (LANG_HOOKS_LOOKUP_NAME): Add.
+ * name-lookup.c (lookup_name_two): Remove.
+ (lookup_name_one): Add.
+ * name-lookup.h (lookup_name_two): Remove.
+ (lookup_name_one): Add.
+
+2005-11-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/24580
+ * method.c (locate_copy): Also use skip_artificial_parms here.
+ (synthesize_exception_spec): Use CLASS_TYPE_P rather than checking
+ for RECORD_TYPE.
+ (locate_ctor): Abort if we fail to find a default constructor.
+
+2005-11-15 Mike Stump <mrs@apple.com>
+
+ * name-lookup.c (lookup_name_two): Add.
+ * name-lookup.h: Likewise.
+
+2005-11-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24667
+ * typeck.c (check_for_casting_away_constness): Use the diag_fn.
+ (build_const_cast_1): Call it, for C-style casts.
+
+2005-11-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24687
+ * pt.c (check_explicit_specialization): Don't check for C linkage.
+ (push_template_decl_real): Likewise.
+ * parser.c (cp_parser_explicit_specialization): Check here.
+ (cp_parser_template_declaration_after_export): And here.
+
+ * parser.c (cp_lexer_get_preprocessor_token): Initialize keyword
+ field.
+
+2005-11-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/24580
+ * method.c (locate_ctor): Skip all artificial parms, not just
+ 'this'.
+
+2005-11-14 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (eof_token): Add initializer for ambiguous_p.
+
+2005-11-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24817
+ * decl.c (check_redeclaration_exception_specification): New
+ function.
+ (duplicate_decls): Use it.
+ * error.c (fndecl_to_string): Print the template parameter list.
+
+ PR c++/20293
+ * cxx-pretty-print.c (pp_cxx_statement): Print qualifying scopes
+ for namespaces.
+ (pp_cxx_original_namespace_definition): Likewise.
+ * name-lookup.c (ambiguous_decl): Don't issue error messages;
+ instead return lists of ambiguous candidates.
+ (select_decl): Handle ambiguous namespace lookups.
+ * parser.c (cp_token): Add ambiguous_p.
+ (cp_lexer_get_preprocessor_token): Set it.
+ (cp_parser_diagnose_invalid_type_name): Avoid duplicate messages
+ when a qualified name uses an invalid scope.
+ (cp_parser_primary_expression): Print ambiguous candidates.
+ (cp_parser_type_parameter): Adjust comment to reflect new
+ parameter name for cp_parser_lookup_name.
+ (cp_parser_template_argument): Likewise.
+ (cp_parser_elaborated_type_specifier): Likewise.
+ (cp_parser_namespace_name): Likewise.
+ (cp_parser_class_name): Print ambiguous candidates.
+ (cp_parser_lookup_name): Rename ambiguous_p parameter to
+ ambiguous_decls. Use it to return a list of ambiguous candiates
+ when a lookup is ambiguous.
+ (cp_parser_lookup_name_simple): Adjust comment to reflect new
+ parameter name for cp_parser_lookup_name.
+
+2005-11-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/24780
+ * typeck.c (complete_type): Set TYPE_NEEDS_CONSTRUCTING
+ and TYPE_HAS_NONTRIVIAL_DESTRUCTOR flags for all variants
+ of array type.
+
+ PR c++/24761
+ * pt.c (tsubst_copy_asm_operands): New function.
+ (tsubst_expr) <case ASM_EXPR>: Use it.
+
+2005-11-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/19450
+ * decl.c (redeclaration_error_message): Issue diagnostics about
+ olddecl and newdecl disagreement on __thread property.
+ (grokdeclarator): Set DECL_TLS_MODEL on class static variables.
+
+2005-11-08 Jason Merrill <jason@redhat.com>
+
+ PR c++/21123
+ * method.c (use_thunk): Use build_cplus_new instead of
+ force_target_expr.
+
+2005-11-06 Jason Merrill <jason@redhat.com>
+ James A. Morrison <phython@gcc.gnu.org>
+
+ PR c++/17256
+ * decl2.c (cp_finish_file): Fix conditions for undefined warning.
+ Set TREE_NO_WARNING instead of TREE_PUBLIC.
+ * pt.c (instantiate_pending_templates): Set DECL_INITIAL to avoid
+ a warning on a function we didn't instantiate because of excessive
+ recursion.
+
+2005-11-06 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (record_subobject_offsets): Don't record offsets past
+ biggest empty class for non-empty base classes.
+ (layout_class_type): Use TYPE_SIZE_UNIT, not TYPE_SIZE, when
+ keeping track of the size of emptyclasses.
+
+ PR c++/21308
+ * class.c (sizeof_biggest_empty_class): New variable.
+ (record_subobject_offsets): Don't record offsets past biggest
+ empty class for data members. Replace vbases_p parameter with
+ is_data_member parameter.
+ (build_base_field): Adjust call.
+ (layout_class_type): Likewise. Maintain
+ sizeof_biggest_empty_class.
+
+2005-11-05 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl2.c, init.c, typeck.c: Fix comment typos.
+
+2005-11-04 Richard Guenther <rguenther@suse.de>
+
+ PR c++/22487
+ * init.c (build_vec_init): Build comparison of matching
+ types.
+
+2005-11-03 Josh Conner <jconner@apple.com>
+
+ PR c++/19989
+ pt.c (tsubst): Accept zero-length array if tf_error is set
+ in complain flags. Change error message for negative-
+ length array.
+
+2005-11-04 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cp-tree.h (cp_cpp_error), error.c (cp_cpp_error): Take va_list*
+ parameter.
+
+2005-11-03 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c++/17964
+ * error.c (cp_cpp_error): New function.
+ * cp-tree.h (cp_cpp_error): Declare.
+ * parser.c (cp_lexer_new_main): Set CPP option client_diagnostic
+ and error callback after lexing.
+
+2005-11-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21627
+ * pt.c (register_specialization): Update inline flags on clones.y
+
+2005-11-03 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/24582
+ * decl.c (declare_local_label): Return 0 for variables
+ with error_mark_node as their types.
+
+2005-11-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22434
+ * call.c (build_conditional_expr): Do bad conversions, if there's
+ no other choice.
+
+ PR c++/24560
+ * parser.c (cp_parser_postfix_dot_deref_expression): Improve error
+ message for use of overloaded functions on LHS of "." operator.
+
+ PR c++/19253
+ * parser.c (cp_parser_postfix_expression): Use
+ cp_parser_elaborated_type_specifier to handle typename-types in
+ functional casts.
+ (cp_parser_enclosed_argument_list): Skip ahead to the end of the
+ template argument list if the closing ">" is not found.
+
+ PR c++/24569
+ * pt.c (instantiate_decl): Use cp_finish_decl, not
+ finish_static_data_member_decl.
+
+2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * decl.c (grokfndecl): Remove the setting
+ of the return type of the function type
+ of main after erroring about must returning
+ int.
+
+2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/23229
+ * decl.c (grokfndecl): Create a new function type
+ after erroring out about main not returning int.
+
+2005-10-28 Josh Conner <jconner@apple.com>
+
+ PR c++/22153
+ * parser.c (cp_parser_member_declaration): Detect and handle
+ a template specialization.
+
+2005-10-28 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/23426
+ * decl.c (start_decl): Check that the decl is an
+ error_mark_node before getting the type.
+ Remove the check for the decl's type being an
+ error_mark_node.
+
+2005-10-21 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24260
+ * parser.c (cp_parser_init_declarator): Pass attributes to
+ grokfield.
+
+2005-10-20 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22618
+ * search.c (accessible_p): Check access in the outermost set of
+ template parameters.
+
+2005-10-20 Richard Guenther <rguenther@suse.de>
+
+ * decl.c (grokdeclarator): Fix ambiguous pedwarn message.
+
+2005-10-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/22293
+ * decl.c (grokdeclarator): Reject unqualified destructors in
+ friend declarations.
+
+2005-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23293
+ * pt.c (convert_template_argument): Use canonical type variants in
+ template specializations.
+
+2005-10-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21383
+ * name-lookup.c (arg_assoc): Template args can be null in a
+ template-id-expr.
+
+ PR c++/22604
+ * class.c (update_vtable_entry_for_fn): Don't process invalid
+ covariant overriders.
+
+ PR c++/23118
+ * cp-tree.h (add_method): Add return value.
+ * class.c (add_method): Return success indicator.
+ * semantics.c (finish_member_declaration): Don't add an invalid
+ method to the method list.
+
+2005-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21908
+ * call.c (build_new_method_call): Do not show VTT parameters to
+ the user.
+
+2005-10-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23440
+ * parser.c (cp_parser_statement): If the parser reached CPP_EOF,
+ only complain about missing statement.
+
+2005-10-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/24386
+ * cp-tree.h (BASELINK_QUALIFIED_P): New.
+ * pt.c (tsubst_copy_and_build): <CALL_EXPR case>: Use it.
+ * typeck.c (finish_class_member_access_expr): Set it.
+
+ PR c++/21353
+ * decl.c (check_default_argument): Don't check
+ processing_template_decl or uses_template_parms here.
+ (grokparms): Only call check_default_argument when not processing
+ a template decl.
+ * parser.c (cp_parser_late_parsing_default_arg): Call
+ check_default_argument when not processing a template decl.
+
+2005-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24389
+ * decl2.c (mark_used): Use uses_template_parms instead of
+ dependent_type_p.
+ * init.c (constant_value_1): Handle uninstantiated templates
+ specially.
+ * pt.c (instantiate_decl): Add sanity check.
+
+2005-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22173
+ * typeck.c (check_template_keyword): Fix thinko.
+
+2005-10-16 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/23959
+ * decl.c (pop_switch): Only call c_do_switch_warnings
+ when not processing templates.
+
+2005-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22173
+ * cp-tree.h (QUALIFIED_NAME_IS_TEMPLATE): New macro.
+ (check_template_keyword): New function.
+ (finish_id_expression): Change prototoype.
+ (finish_qualified_id_expr): Change prototype.
+ (build_qualified_name): New function.
+ (finish_class_member_access_expr): Change prototype.
+ * init.c (build_offset_ref): Use build_qualified_name.
+ * mangle.c (write_expression): Likewise.
+ * parser.c (cp_parser_primary_expression): Remove qualifying_class
+ parameter. Add address_p and template_arg_p. Use
+ build_qualified_name.
+ (cp_parser_id_expression): Default *template_p to
+ template_keyword_p. Check for invalid uses of the template
+ keyword.
+ (cp_parser_postfix_expression): Eliminate special handling for
+ qualified names. Adjust call to cp_parser_primary_expression.
+ (cp_parser_postfix_dot_deref_expression): Adjust call to
+ cp_parser_id_expression and finish_class_member_access_expr.
+ (cp_parser_template_argument_list): Add comment.
+ (cp_parser_template_argument): Adjust use of
+ cp_parser_primary_expression. Remove call to
+ finish_qualified_id_expr.
+ (cp_parser_lookup_name): Use build_qualified_name.
+ * pt.c (tsubst): Use build_qualified_name.
+ (tsubst_qualified_id): Likewise. Adjust call to
+ finish_qualified_id_expr.
+ (tsubst_copy): Use build_qualified_name.
+ (tsubst_copy_and_build): Adjusts call to finish_id_expression and
+ finish_class_member_access_expr.
+ * semantics.c (finish_non_static_data_member): Use
+ build_qualified_name.
+ (finish_qualified_id_expr): Add template_p and template_arg_p
+ parameters.
+ (finish_id_expression): Remove qualifiying_class parameter. Add
+ template_p, done, address_p, and template_arg_p. Use
+ build_qualified_name. Adjust calls to
+ finish_class_member_acess_expr.
+ * tree.c (build_qualified_name): New function.
+ * typeck.c (check_template_keyword): New function.
+ (finish_class_member_access_expr): Add template_p argument. Check
+ for invalid uses of the template keyword.
+
+2005-10-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21347
+ * class.c (maybe_warn_about_overly_private_class): Lazy
+ constructors are public.
+
+2005-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19565
+ * call.c (convert_like_real): Rely on convert_and_check to issue
+ warnings about overflow and conversion to unsigned.
+ * decl.c (finish_enum): Use the location of the enumerators, not
+ the closing brace of the enumeration, when reporting warnings
+ about conversions.
+ (build_enumerator): Use error_mark_node for erroneous values.
+ * typeck2.c (digest_init): Remove reference to "signature pointer"
+ from comment.
+
+2005-10-14 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/17796
+ * optimize.c (update_cloned_parm): Add FIRST parameter. Use it.
+ (maybe_clone_body): Track the first clone.
+
+2005-10-13 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/23984
+ * class.c (build_base_path): The vtable is always the first thing
+ in the vtt.
+
+2005-10-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20721
+ * cp-tree.h (DECL_NONTRIVIALLY_INITIALIZED_P): New macro.
+ * decl.c (duplicate_decls): Merge it into new declarations.
+ (decl_jump_unsafe): Use it, rather than DECL_INITIAL.
+ (cp_finish_decl): Set it, when appropriate.
+
+ PR c++/22180
+ * call.c (build_new_method_call): Correct pretty-printing of
+ destructor names.
+ * pt.c (tsubst_qualified_id): Recognize invalid uses of "~T" as an
+ identifier.
+
+ PR c++/23694
+ * decl.c (start_method): Return error_mark_node for errors.
+
+ PR c++/23307
+ * pt.c (push_template_decl_real): Complain about attempts to
+ declare template variables.
+
+ PR c++/22352
+ * pt.c (tsubst_template_parms): Set processing_template_decl while
+ processing the parameters.
+ (tsubst_decl): Set processing_template_decl when substituting into
+ a TEMPLATE_DECL.
+
+ PR c++/22405
+ * pt.c (most_specialized_instantiation): Robustify.
+
+ PR c++/22464
+ * semantics.c (finish_id_expression): Issue errors about uses of
+ local variables in containing functions even in templates.
+
+2005-10-12 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR target/21801
+ PR target/23589
+ * class.c (finish_struct_1): Call
+ targetm.cxx.adjust_class_at_definition.
+
+
+2005-10-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21592
+ * pt.c (build_non_dependent_expr): Don't wrap a COMPONENT_REF
+ with already looked up member functions. Assert we're not
+ returning a NON_DEPENDENT_EXPR with unknown type.
+ * typeck.c (finish_class_member_access_expr): We can get
+ non-template-id-expr baselinks. If the lookup finds a baselink,
+ remember it even inside templates.
+
+ PR c++/23797
+ * parser.c (cp_parser_functional_cast): Cope when TYPE is not a
+ TYPE_DECL. Use dependent_type_p to check type.
+ * pt.c (uses_template_parms_p): Use dependent_type_p for a
+ TYPE_DECL.
+ (type_dependent_expression_p): Assert we've not been given a
+ TYPE_DECL.
+
+ PR c++/21117
+ * decl.c (check_function_type): Correctly overwrite incomplete
+ return type with void type.
+ * typeck.c (check_return_expr): If the function's return type is
+ void, don't try and convert a return expr.
+
+2005-10-12 David Edelsohn <edelsohn@gnu.org>
+
+ PR c++/23730
+ * call.c (build_object_call): If BINFO is NULL, bypass
+ lookup_fnfields and set fns to NULL_TREE.
+
+2005-10-12 Paolo Bonzini <bonzini@gnu.org>
+
+ PR c++/24052
+ * error.c (dump_expr): Pass LABEL_DECL to dump_decl. Print
+ an ADDR_EXPR of a LABEL_DECL as &&.
+
+2005-10-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19964
+ * class.c (walk_subobject_offsets): Don't walk error_mark_node.
+
+2005-10-11 Ian Lance Taylor <ian@airs.com>
+
+ PR c++/8057
+ * cvt.c (convert_to_void): Don't warn about unused values when
+ processing a template declaration.
+
+2005-10-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21089
+ * call.c (convert_like_real): Use decl_constant_value, not
+ integral_constant_value.
+ * init.c (constant_value_1): New function.
+ (integral_constant_value): Use it.
+ (decl_constant_value): Likewise.
+ * typeck.c (decay_conversion): Use decl_constant_value, not
+ integral_constant_value.
+
+ PR c++/21369
+ * parser.c (cp_parser_elaborated_type_specifier): Don't treat
+ class types as templates if the type is not appearing as part of a
+ type definition or declaration.
+
+2005-10-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24277
+ * pt.c (instantiate_decl): Call finish_static_data_member_decl for
+ static data members.
+
+2005-10-10 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+ Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23437
+ * parser.c (cp_parser_template_argument_list): Do not treat
+ contents of argument list as part of a constant expression.
+
+2005-10-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24139
+ * decl.c (grokdeclarator): Do not require template parameter lists
+ for explicitly specialized class.
+ * error.c (dump_aggr_type): Do not dump template arguments for
+ non-primary specializations.
+ (dump_function_name): Likewise.
+
+ PR c++/24275
+ * pt.c (instantiate_decl): Instantiate the initializer of
+ a static data member in the namespace containing the class
+ containing the static data member.
+
+2005-10-08 James A. Morrison <phython@gcc.gnu.org>
+
+ PR c++/22172
+ * parser.c (cp_parser_postfix_expression) <RID_TYPENAME>: Treat nontype
+ scopes as nondependent.
+
+2005-10-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * call.c (resolve_args): Remove redundant test.
+
+2005-10-05 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/21419
+ PR tree-optimization/24146
+ PR tree-optimization/24151
+
+ * semantics.c (finish_asm_stmt): Call readonly_error if outputs are
+ read-only. Set ASM_VOLATILE_P for asms without outputs.
+
+2005-10-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/23513
+ * call.c (joust): Adjust length count to more_specialized_fn.
+ * pt.c (more_specialized_fn): Cope with non-static member vs
+ non-member.
+
+2005-10-04 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR middle-end/23125
+ * decl.c (make_rtl_for_nonlocal_decl): Use set_user_assembler_name
+ instead of change_decl_assembler_name.
+
+2005-10-03 Alexandre Oliva <aoliva@redhat.com>
+
+ * error.c (dump_type) <UNKNOWN_TYPE>: Print reworded message.
+
+2005-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/17775
+ * repo.c: Include flags.h.
+ (finish_repo): Add -frandom-seed to the arguments.
+
+2005-10-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22621
+ * parser.c (cp_parser_template_argument): Don't turn "T::f" into
+ "(*this).T::f".
+ * pt.c (convert_nontype_argument): Remove ??? comment.
+
+ PR c++/23840
+ * tree.c (lvalue_p_1): A VA_ARG_EXPR with class type is an lvalue,
+ when class rvalues are lvalues.
+
+2005-09-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/16782
+ * decl.c (grokdeclarator): Always pedwarn about overqualified
+ member names.
+
+2005-09-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22147
+ * name-lookup.c (maybe_process_template_type_declaration): Don't
+ treat forward declarations of classes as templates just because
+ we're processing_template_decl.
+ * pt.c (tsubst_decl): Clear DECL_TEMPLATE_INFO for friend
+ functions.
+
+2005-09-26 Jason Merrill <jason@redhat.com>
+
+ PR c++/13764
+ * cp-tree.h (FUNCTION_NEEDS_BODY_BLOCK): New macro.
+ * name-lookup.c (pushdecl_maybe_friend): Check it.
+ * decl.c (begin_function_body): Do nothing if it's false.
+ (finish_function_body): Ditto.
+ (outer_curly_brace_block): New fn.
+ (finish_function): Use it.
+
+2005-09-26 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/15855
+ * decl2.c (do_static_destruction): Remove.
+ (finish_static_initialization_or_destruction): Likewise.
+ (DECL_EFFECTIVE_INIT_PRIORITY): New macro.
+ (NEEDS_GUARD_P): Likewise.
+ (do_static_initialization): Rename to
+ do_static_initialization_or_destruction. Process all
+ initializers/destructors and handle common conditionalizing.
+ (start_static_initialization_or_destruction): Rename to
+ one_static_initialization_or_destruction. Handle only
+ decl-specific conditionalizing.
+ (cp_finish_file): Call do_static_initialization_or_destruction.
+
+2005-09-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/21983
+ * class.c (find_final_overrider): Move diagnostic about no unique final
+ overrider to...
+ (update_vtable_entry_for_fn): ... here.
+
+2005-09-21 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23993
+ * init.c (integral_constant_value): Use DECL_INTEGRAL_CONSTANT_VAR_P.
+
+2005-09-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23965
+ * call.c (resolve_args): Return error_mark_node on arguments
+ whose TREE_TYPE is error_mark_node.
+
+2005-09-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/23947
+ * rtti.c (get_pseudo_ti_init): Recompute ti pointer after
+ get_tinfo_ptr calls.
+
+2005-09-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23914
+ * parser.c (cp_parser_enclosed_template_argument_list): Make sure
+ skip_evaluation is false when processing template arguments.
+
+ PR c++/21514
+ * pt.c (check_instantiated_args): Treat uses of anonymous types as
+ causing type-deduction failure.
+
+2005-09-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/23357
+ * cp-tree.def (SIZEOF_EXPR, ALIGNOF_EXPR): Change code class to
+ tcc_expression.
+
+2005-09-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23896
+ * pt.c (tsubst_aggr_type): Make sure skip_evaluation is false when
+ processing template arguments.
+
+ * pt.c (check_explicit_instantiation_namespace): Fix typo.
+
+ PR c++/13140
+ * decl.c (check_class_member_definition_namespace): New function.
+ (grokfndecl): Use it.
+ (grokvardecl): Likewise.
+ (grokdecl): Improve documentation.
+ * pt.c (check_explicit_instantiation_namespace): New function.
+ (register_specialization): Call check_specialization_namespace
+ when replacing an implicitly instantiated function.
+ (check_explicit_specialization): Ensure that DECL_CONTEXT is set
+ correctly for namespace-scope specializations.
+ (do_decl_instantiation): Use
+ check_explicit_instantiation_namespace.
+ (do_type_instantiation): Likewise.
+
+2005-09-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/23725
+ * error.c (dump_decl): <USING_DECL case> Use USING_DECL_SCOPE.
+
+2005-09-13 Bastian Blank <waldi@debian.org>
+
+ PR c++/16171
+ * mangle.c (find_substitution): Do not use special substitutions
+ for identifiers not in std::.
+
+2005-09-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23839
+ * typeck.c (cxx_mark_addressable): Only check DECL_HARD_REGISTER
+ for VAR_DECLs.
+
+2005-09-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23842
+ * pt.c (tsubst_default_argument): Do treat default argument
+ expressions as occurring in the context of the function called.
+
+2005-09-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23841
+ * parser.c (cp_parser_primary_expression): Recognize the closing
+ ">" of a template-argument-list after a floating-point literal as
+ the end of a cast expression.
+
+2005-09-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23789
+ * cvt.c (perform_qualification_conversions): Don't create
+ unnecessary NOP_EXPRs.
+ * pt.c (tsubst_template_arg): Use fold_non_dependent_expr.
+
+2005-09-12 Ian Lance Taylor <ian@airs.com>
+
+ PR g++/7874
+ * cp-tree.h (struct lang_decl_flags): Add hidden_friend_p
+ bitfield. Make dummy bitfield one bit smaller.
+ (DECL_HIDDEN_FRIEND_P): Define.
+ (pushdecl_maybe_friend): Declare.
+ (pushdecl_top_level_maybe_friend): Declare.
+ * decl.c (duplicate_decls): Add newdecl_is_friend parameter.
+ Change prototype and all callers. Add assertion that a
+ DECL_ARTIFICIAL FUNCTION_DECL is not DECL_HIDDEN_FRIEND_P. Set
+ DECL_ANTICIPATED and DECL_HIDDEN_FRIEND_P in duplicated decl if
+ appropriate.
+ * name-lookup.c (supplement_binding): Don't ignore a
+ DECL_HIDDEN_FRIEND_P.
+ (pushdecl_maybe_friend): Break out contents of pushdecl. Add
+ is_friend parameter. Set DECL_ANTICIPATED and
+ DECL_HIDDEN_FRIEND_P for a friend function.
+ (pushdecl): Just call pushdecl_maybe_friend.
+ (pushdecl_with_scope): Add is_friend parameter. Change prototype
+ and all callers.
+ (pushdecl_namespace_level): Likewise.
+ (push_overloaded_decl): Likewise. Check DECL_HIDDEN_FRIEND_P as
+ well as DECL_ANTICIPATED when checking for a builtin.
+ (do_nonmember_using_decl): Check DECL_HIDDEN_FRIEND_P as well as
+ DECL_ANTICIPATED when checking for a builtin.
+ (do_nonmember_using_decl): Likewise.
+ (pushdecl_top_level_1): Add is_friend parameter. Change all
+ callers.
+ (pushdecl_top_level_maybe_friend): New function.
+ (remove_hidden_names): New function.
+ (struct arg_lookup): Add args field.
+ (friend_of_associated_class_p): New static function.
+ (arg_assoc_namespace): Ignore hidden functions which are not
+ friends of an associated class of some argument.
+ (lookup_arg_dependent): Remove hidden functions from list passed
+ in. Initialize k.args.
+ * name-lookup.h (remove_hidden_names): Declare.
+ * friend.c (do_friend): Call pushdecl_maybe_friend instead of
+ pushdecl.
+ * call.c (add_function_candidate): Change DECL_ANTICIPATED test to
+ an assertion, with a check for DECL_HIDDEN_FRIEND_P.
+ (build_new_function_call): Add koenig_p parameter. Change
+ prototype and callers.
+ * pt.c (register_specialization): Add is_friend parameter. Change
+ all callers.
+ (push_template_decl_real): Change is_friend parameter to bool.
+ Change prototype and all callers.
+ (tsubst_friend_class): Call pushdecl_top_level_maybe_friend
+ instead of pushdecl_top_level.
+
+2005-09-11 Richard Henderson <rth@redhat.com>
+
+ * decl2.c (build_anon_union_vars): Copy attributes from the base addr.
+ * pt.c (tsubst_decl): Substitute in DECL_VALUE_EXPR.
+
+2005-09-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * parser.c (cp_parser_translation_unit): Simplify. The while-block
+ was actually executed at most once.
+
+2005-09-09 Richard Henderson <rth@redhat.com>
+
+ PR debug/20998
+ * cp-tree.def (ALIAS_DECL): Remove.
+ * cp-lang.c (cp_init_ts): Remove support for it.
+ * error.c (dump_decl): Likewise.
+ * name-lookup.c (pushdecl): Likewise.
+ * semantics.c (finish_id_expression): Likewise.
+ * decl2.c (build_anon_union_vars): Use a VAR_DECL with
+ DECL_VALUE_EXPR instead.
+
+2005-09-09 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22252
+ * decl.c (start_preparsed_function): Do not pay attention to
+ #pragma interface for implicitly-defined methods.
+ * decl2.c (cp_finish_file): Do not complain about uses of inline
+ functions that have bodies, even if we decided not to emit the
+ body in this translation unit.
+ * semantics.c (note_decl_for_pch): Do not mess with linkage.
+ (expand_or_defer_fn): Make inline, non-template functions COMDAT
+ at this point.
+
+2005-09-08 Richard Henderson <rth@redhat.com>
+
+ PR debug/23190
+ * decl.c (wrapup_globals_for_namespace): Call
+ emit_debug_global_declarations.
+ * decl2.c (cp_finish_file): Likewise.
+
+2005-09-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23691
+ * decl2.c (mark_used): Instantiate static data members initialized
+ by constants, even in a template.
+
+2005-09-08 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR obj-c++/16816
+ * parser.c (cp_parser_objc_selector_expression): Treat CPP_SCOPE as
+ two CPP_COLON.
+
+2005-09-07 Richard Guenther <rguenther@suse.de>
+
+ * cp-gimplify.c (cp_gimplify_expr): Create empty CONSTRUCTOR
+ for EMPTY_CLASS_EXPR.
+
+2005-09-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/23075
+ * typeck.c (check_return_expr): Add no_warning argument. Set
+ *no_warning to true if "return-statement with no value, in function
+ returning" warning has been issued.
+ * cp-tree.h (check_return_expr): Adjust prototype.
+ * semantics.c (finish_return_stmt): Set TREE_NO_WARNING if
+ check_return_expr set *no_warning to true.
+
+2005-09-06 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (rvalue): New function.
+ * call.c (build_conditional_expr): Use it.
+ * init.c (build_new_1): Likewise.
+ * rtti.c (build_dynamic_cast_1): Likewise.
+ * tree.c (rvalue): New function.
+ * typeck.c (build_unary_op): Use it.
+ (build_static_cast_1): Likewise.
+
+ PR c++/9782
+ * init.c (build_new_1): Make sure the entire array type is
+ complete, not just its element types.
+
+2005-09-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * decl.c (check_elaborated_type_specifier): Remove redundant check.
+
+2005-09-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/23056
+ * typeck.c (ignore_overflows): New helper function.
+ (build_static_cast_1): Use it.
+
+2005-09-06 Kazu Hirata <kazu@codesourcery.com>
+
+ * cp-tree.h, decl.c, decl2.c, semantics.c: Fix comment typos.
+ Follow spelling conventions.
+
+2005-09-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23667
+ * pt.c (tsubst_decl): Clear DECL_TEMPLATE_INSTANTIATED when
+ copying a VAR_DECL.
+
+2005-09-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21440
+ * semantics.c (finish_stmt_expr_expr): Add an explicit
+ initialization to the last statement in the statement-expression.
+ * (finish_stmt_expr): Adjust accordingly.
+
+2005-09-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23699
+ * decl2.c (mark_used): Always instantiate static data members
+ initialized by constant expressions.
+ * pt.c (instantiate_decl): Instantiate the initializers for static
+ data members initialized by constant expressions.
+
+ PR c++/21687
+ * semantics.c (expand_or_defer_fn): Do not call ggc_collect when
+ finishing processing for a template function in a local class.
+ Revert:
+ 2005-09-02 Mark Mitchell <mark@codesourcery.com>
+ * parser.c (cp_parser_class_specifier): Push/pop GC contexts
+ around functions in local classes.
+
+2005-09-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21687
+ * parser.c (cp_parser_class_specifier): Push/pop GC contexts
+ around functions in local classes.
+
+2005-08-31 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR obj-c++/23640
+ * decl2.c (cp_finish_file): If this is obj-c++ and we need a static
+ init, call generate_ctor_or_dtor_function.
+
+2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/13377
+ * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to
+ lookup_name_real on final parse.
+
+2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23639
+ * semantics.c (qualified_name_lookup_error): Do not complain again
+ on invalid scope.
+
+2005-08-30 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23586
+ * parser.c (cp_parser_namespace_name): Move diagnostic for
+ invalid namespace-name to here from ...
+ * name-lookup.c (do_namespace_alias): ... here and ...
+ (do_using_directive): ... here. Remove dead code.
+
+2005-08-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/23099
+ * cp-tree.h (saved_scope): Add skip_evaluation.
+ * decl.c (start_decl): Use DECL_INITIALIZED_IN_CLASS_P, not
+ DECL_INITIAL, to determine whether or not a static data member was
+ initialized in the class-specifier.
+ (cp_finish_decl): Add comment.
+ * init.c (integral_constant_value): Subtitute into the
+ initializers for static data members in templates.
+ * name-lookup.c (push_to_top_level): Save skip_evaluation.
+ (pop_from_top_level): Restore it.
+ * pt.c (instantiate_class_template): Do not substitute into the
+ intializers of static data members when instantiating a class.
+ (regenerate_decl_from_template): Simplify.
+ (instantiate_decl): Tidy. Substitute into the initializer for a
+ static data member even when the definition of the data member is
+ not available.
+
+2005-08-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19004
+ * pt.c (uses_template_parms): Handle IDENTIFIER_NODE.
+ (type_dependent_expression_p): Allow BASELINKs whose associated
+ functions are simply a FUNCTION_DECL.
+
+ PR c++/23491
+ * cp-tree.h (build_vec_init): Adjust prototype.
+ * init.c (perform_member_init): Adjust call to build_vec_init.
+ (build_aggr_init): Likewise.
+ (build_new_1): Do not call build_default_init for array types.
+ (build_vec_init): Add explicit_default_init_p parameter. Perform
+ default initialization of vector elements when set.
+ * typeck.c (build_modify_expr): Adjust call to build_vec_init.
+
+2005-08-25 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20817
+ * typeck.c (build_x_unary_op): Make sure OFFSET_REF is not for a
+ ->*.
+
+2005-08-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/22454
+ * parser.c (cp_lexer_peek_nth_token): Relax assert.
+
+2005-08-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/23044
+ * pt.c (tsubst_qualified_id): A SCOPE_REF can still remain.
+
+2005-08-22 James E Wilson <wilson@specifix.com>
+
+ PR tree-optimization/23426
+ * decl.c (grokdeclarator): Use TYPE_SIZE_UNIT not TYPE_SIZE for
+ array size check.
+
+2005-08-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/22233
+ * pt.c (push_template_decl_real): Return error_mark_node if the
+ number of template parameters does not match previous definition.
+
+2005-08-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23089
+ * decl.c (require_complete_types_for_parms): Mark incomplete types
+ as invalid.
+
+2005-08-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * parser.c (cp_parser_nth_token_starts_template_argument_list_p):
+ Fix typo in leading comment.
+
+2005-08-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * name-lookup.c, ptree.c: Delete HOST_PTR_PRINTF.
+
+2005-08-15 Fariborz Jahanian <fjahanian@apple.com>
+
+ * cp-tree.h (can_convert_arg, fn_type_unification): New argument.
+ * call.c (add_template_candidate_real): Pass down 'flags' to
+ fn_type_unification.
+ (can_convert_arg): New 'flags' argument. Pass it to call to
+ implicit_conversion instead of LOOKUP_NORMAL.
+ (can_convert): Add LOOKUP_NORMAL to call to can_convert_arg.
+ * class.c (resolve_address_of_overloaded_function): Ditto.
+ (resolve_address_of_overloaded_function): Ditto.
+ * decl.c (reshape_init, check_default_argument): Ditto.
+ * typeck.c (build_ptrmemfunc): Ditto.
+ * pt.c (type_unification_real): Add 'flags' argument.
+ (fn_type_unification): Pass 'flags' to type_unification_real.
+ (type_unification_real): Pass new 'flags' argument to call to
+ can_convert_arg.
+
+2005-08-12 Giovanni Bajo <giovannibajo@libero.it>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21799
+ PR c++/8271
+ * pt.c (unify) <METHOD_TYPE>: Check this-pointer cv-qualifiers
+ explicitly.
+
+2005-08-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21799
+ Revert my 2005-07-08 patch
+ * pt.c (type_unification_real): Remove is_method_argument and
+ assoicated checks.
+ (fn_type_unification, unify): Adjust type_unification_real calls.
+
+2005-08-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23266
+ * decl2.c (grokfield): Check that method is not static before
+ marking it as pure.
+
+2005-08-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/23219
+ * name-lookup.c (pushtag): Process the template type before
+ altering the identifier lookup fields. Remove unreachable code
+ creating an empty stub decl.
+
+2005-08-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/20646
+ * decl.c (grokdeclarator): Reset storage_class after error.
+
+2005-08-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/22508
+ * init.c (build_new_1): Check for empty candidate list.
+
+2005-08-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/23191
+ * pt.c (tsubst) <case METHOD_TYPE>: Check for error_mark_node
+ before calling build_exception_variant.
+
+2005-08-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/19498
+ * pt.c (tsubst_decl) <case TEMPLATE_DECL>: Return ERROR_MARK_NODE
+ if substitution of template args did not succeed.
+
+2005-08-06 Michael Matz <matz@suse.de>
+
+ * method.c (use_thunk): Call init_insn_lengths.
+
+2005-08-05 James A. Morrison <phython@gcc.gnu.org>
+
+ PR c++/22514
+ * name-lookup.c (cp_emit_debug_info_for_using): Do nothing if
+ sorrycount or errorcount are nonzero.
+
+2005-08-05 Mark Mitchell <mark@codesourcery.com>
+
+ * name-lookup.c (pushtag): Remove accidental commit from:
+ 2004-12-21 Mark Mitchell <mark@codesourcery.com>
+ PR c++/19063
+ * decl.c (grokdeclarator): Return error_mark_node, not
+ void_type_node, to indicate errors.
+ * parser.c (cp_parser_template_parameter_list): Robustify.
+ (cp_parser_template_parameter): Likewise.
+
+2005-08-01 Kazu Hirata <kazu@codesourcery.com>
+
+ * class.c, decl.c, name-lookup.c, pt.c, typeck.c, typeck2.c:
+ Fix comment typos.
+
+2005-07-29 Kazu Hirata <kazu@codesourcery.com>
+
+ * method.c: Fix a comment typo.
+
+2005-07-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22545
+ * call.c (add_builtin_candidate): Adjust for changes in
+ representation of pointer-to-member types.
+
+2005-07-28 Mike Stump <mrs@apple.com>
+
+ * pt.c (check_explicit_specialization): Add visibility logic.
+ (lookup_template_class): Likewise.
+ (instantiate_class_template): Likewise.
+
+2005-07-27 Devang Patel <dpatel@apple.com>
+
+ * name-lookup.c (pushtag): Do no set DECL_IGNORED_P bit.
+
+2005-07-25 Ian Lance Taylor <ian@airs.com>
+
+ * ptree.c (cxx_print_identifier): Print a leading space if the
+ indent level is 0.
+
+2005-07-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * call.c (convert_for_arg_passing): Check function pointers when
+ -Wmissing-format-attribute is activated.
+ * typeck.c (convert_for_assignment): Likewise.
+
+2005-07-22 Manfred Hollstein <mh@suse.com>
+
+ * parser.c (cp_parser_declaration): Fix unitialised warnings.
+
+2005-07-21 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * class.c (build_base_path): Fix typo.
+
+2005-07-21 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/22358
+ * class.c (build_base_path): Convert BINFO_OFFSET to the correct type.
+
+2005-07-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * call.c: Fix comment typo(s).
+ * cxx-pretty-print.h: Likewise.
+ * name-lookup.c: Likewise.
+ * parser.c: Likewise.
+
+2005-07-20 Douglas Gregor <doug.gregor@gmail.com>
+
+ PR c++/2922
+ * semantics.c (perform_koenig_lookup): For dependent calls, just
+ return the set of functions we've found so far. Later, it will be
+ augmented by those found through argument-dependent lookup.
+ * name-lookup.c (lookup_arg_dependent): Implement DR 164 by removing
+ the optimization that skips namespaces where the functions were
+ originally found.
+
+2005-07-20 Giovanni Bajo <giovannibajo@libero.it>
+
+ Make CONSTRUCTOR use VEC to store initializers.
+ * call.c (convert_default_arg): Update call to digest_init.
+ * class.c (dump_class_hierarchy, dump_array): Update to cope with
+ VEC in CONSTRUCTOR_ELTS.
+ * cp-tree.h (EMPTY_CONSTRUCTOR_P): Likewise.
+ (finish_compound_literal, digest_init): Update declaration.
+ * decl.c (struct reshape_iter): New data type.
+ (reshape_init_array): Rename to...
+ (reshape_init_array_1): Update to cope with VEC in CONSTRUCTOR_ELTS.
+ (reshape_init): Rewrite from scratch. Split parts into...
+ (reshape_init_array, reshape_init_vector, reshape_init_class,
+ reshape_init_r): New functions.
+ (check_initializer): Update call to reshape_init. Remove obsolete
+ code.
+ (initialize_artificial_var, cp_complete_array_type): Update to cope
+ with VEC in CONSTRUCTOR_ELTS.
+ * decl2.c (grokfield): Update calls to digest_init.
+ (mark_vtable_entries): Update to cope with VEC in CONSTRUCTOR_ELTS.
+ * error.c (dump_expr_init_vec): New function.
+ (dump_expr): Use dump_expr_init_vec.
+ * init.c (build_zero_init, build_vec_init): Update to cope with VEC
+ in CONSTRUCTOR_ELTS.
+ (expand_default_init): Update call to digest_init.
+ * parser.c (cp_parser_postfix_expression): Use a VEC for the
+ initializers.
+ (cp_parser_initializer_list): Build a VEC of initializers.
+ * pt.c (tsubst_copy, tsubst_copy_and_build): Update to cope with VEC
+ in CONSTRUCTOR_ELTS.
+ * rtti.c (tinfo_base_init, generic_initializer, ptr_initializer,
+ ptm_initializer, class_initializer, get_pseudo_ti_init): Use
+ build_constructor_from_list instead of build_constructor.
+ * semantics.c (finish_compound_literal): Update call to digest_init.
+ * tree.c (stabilize_init): Update to cope with VEC in
+ CONSTRUCTOR_ELTS.
+ * typeck.c (build_ptrmemfunc1): Likewise.
+ * typeck2.c: (cxx_incomplete_type_error, split_nonconstant_init_1):
+ Likewise.
+ (store_init_value): Use build_constructor_from_list and update call
+ to digest_init.
+ (digest_init): Rewrite.
+ (process_init_constructor): Rewrite from scratch. Split into...
+ (process_init_constructor_array, picflag_from_initializer,
+ process_init_constructor_record, process_init_constructor_union):
+ New functions.
+ (PICFLAG_ERRONEOUS, PICFLAG_NOT_ALL_CONSTANT, PICFLAG_NOT_ALL_SIMPLE):
+ New macros.
+ (build_functional_cast): Use build_constructor_from_list instead of
+ build_constructor.
+
+2005-07-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22263
+ * cp-tree.h (instantiate_decl): Change prototype.
+ * decl2.c (mark_used): Adjust accordingly.
+ * pt.c (do_decl_instantiation): Likewise.
+ (instantiate_class_member): Likewise.
+ (instantiate_decl): Rename undefined_ok as expl_inst_class_mem_p.
+ Clear DECL_INTERFACE_KNOWN for an explicitly instantiated template
+ that has no definition available.
+ (instantiate_pending_templates): Adjust call to instantiate_decl.
+
+2005-07-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22139
+ * cp-tree.h (DECL_TEMPLATE_INFO): Improve documentation.
+ * decl.c (duplicate_decls): Re-register template specializations
+ for functions that have DECL_TEMLPLATE_INFO, even if they do not
+ have DECL_TEMPLATE_INSTANTIATION set.
+
+2005-07-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * call.c (diagnostic_fn_t): New.
+ (build_temp, convert_like_real): Use diagnostic_fn_t.
+
+2005-07-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22204
+ * repo.c (repo_emit_p): Robustify.
+
+2005-07-14 Daniel Berlin <dberlin@dberlin.org>
+
+ Fix PR c++/22452
+ * tree.c (decl_linkage): Don't check DECL_COMDAT on CONST_DECL.
+
+2005-07-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22132
+ * call.c (implicit_conversion): Add c_cast_p parameter.
+ (standard_conversion): Likewise. Allow conversions between
+ differently-qualified pointer types when performing a C-style
+ cast.
+ (add_function_candidate): Adjust callee.
+ (build_builtin_candidate): Likewise.
+ (build_user_type_conversion_1): Likewise.
+ (conditional_conversion): Likewise.
+ (can_convert_arg): Likewise.
+ (can_convert_arg_bad): Likewise.
+ (perform_implicit_conversion): Likewise.
+ * cp-tree.h (comp_ptr_ttypes_const): Declare.
+ * typeck.c (comp_ptr_ttypes_const): Give it external linkage.
+ Return bool.
+
+2005-07-12 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20172
+ * pt.c (tsubst_template_parms): Check for invalid non-type
+ parameters.
+
+2005-07-09 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * cp-lang.c (shadowed_var_for_decl, decl_shadowed_for_var_lookup,
+ decl_shadowed_for_var_insert): Move over to cp-objcp-common.c.
+ (cp_init_ts): Call init_shadowed_var_for_decl.
+ Remove include of gt-cp-cp-lang.h.
+ * cp-objcp-common.c (shadowed_var_for_decl,
+ decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert): Moved from
+ cp-lang.c.
+ (init_shadowed_var_for_decl): New function to initialize
+ shadowed_var_for_decl.
+ Include gt-cp-cp-objcp-common.h.
+ * Make-lang.in (gt-cp-lang.h): Remove.
+ (gt-cp-cp-objcp-common.h): Add.
+ (cp/cp-lang.o): Remove dependancy on gt-cp-lang.h.
+ (cp/cp-objcp-common.o): Add dependancy on gt-cp-cp-objcp-common.h.
+ * config-lang.in (gtfiles): Remove cp-lang.c and Add cp-objcp-common.c.
+ * cp-tree (init_shadowed_var_for_decl): Add prototype.
+
+2005-07-08 Daniel Berlin <dberlin@dberlin.org>
+
+ * Make-lang.in: Add gt-cp-lang.h.
+ (cp-lang.o): Ditto.
+ * class.c (create_vtable_ptr): Stop setting DECL_ASSEMBLER_NAME on
+ the field.
+ * config-lang.in: Add cp-lang.c to gtfiles.
+ * cp-lang.c: Include hashtab.h.
+ (cp_init_ts): New function.
+ (LANG_HOOK_INIT_TS): Use macro.
+ (decl_shadowed_for_var_lookup): New function.
+ (decl_shadowed_for_var_insert): Ditto.
+ * cp-tree.h (THUNK_FUNCTION_CHECK): Use decl_common.
+ (NON_THUNK_FUNCTION_CHECK): Ditto.
+ (DECL_NAMESPACE_ASSOCIATIONS): Use decl_non_common.
+ (DECL_INIT_PRIORITY): Ditto.
+ (DECL_HAS_SHADOWED_FOR_VAR_P): Ditto.
+ (DECL_SHADOWED_FOR_VAR): Use hashtable.
+ (SET_DECL_SHADOWED_FOR_VAR): Ditto.
+ * decl.c (duplicate_decls): Update for new/updated structures.
+ (poplevel): Use SET_DECL_SHADOWED_FOR_VAR.
+ * decl2.c (start_static_initialization_or_destruction): Deal with
+ priority.
+ * pt.c (tsubst_decl): Check TS_DECL_WRTL before doing
+ SET_DECL_RTL.
+ * tree.c (handle_init_priority_attribute): Handle priority.
+
+2005-07-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21799
+ * pt.c (type_unification_real): Add is_method argument. Use it
+ for this pointer unification.
+ (fn_type_unification): Adjust type_unification_real call.
+ (unify): Likewise.
+
+2005-07-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * pt.c (type_unification_real): Remove allow_incomplete argument.
+ Remove unreachable code.
+ (fn_type_unification): Adjust call to type_unification_real.
+ (unify): Likewise.
+
+2005-07-05 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.in (class.o, decl2.o): Adjust dependencies.
+ * class.c: Include tree-dump.h.
+ * decl2.c: Include tree-dump.h.
+
+2005-07-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * dump.c: Use dump_string_field.
+
+2005-07-03 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cp-tree.h (GCC_DIAG_STYLE): #undef before defining. Change
+ minimum GCC version for format checking to 4.1.
+
+2005-07-02 Kazu Hirata <kazu@codesourcery.com>
+
+ * Make-lang.in (cc1plus-checksum.c): Use
+ build/genchecksum$(build_exeext), not build/genchecksum$(exeext).
+
+2005-07-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * name-lookup.c, parser.c: Use %q, %< and %> to quote in
+ diagnostics.
+
+2005-07-02 Zack Weinberg <zack@codesourcery.com>
+ Joseph S. Myers <joseph@codesourcery.com>
+
+ * error.c (location_of): Add comment.
+ (locate_error, cp_error_at, cp_warning_at, cp_pedwarn_at): Remove.
+ * cp-tree.h (cp_error_at, cp_warning_at, cp_pedwarn_at): Remove.
+ * call.c, class.c, decl.c, decl2.c, friend.c, init.c,
+ name-lookup.c, parser.c, pt.c, search.c, semantics.c, typeck.c,
+ typeck2.c: Use '+' flag instead of %J, cp_error_at, cp_warning_at
+ or cp_pedwarn_at. Mark up some diagnostic strings with N_.
+
+2005-06-30 Daniel Berlin <dberlin@dberlin.org>
+
+ * decl.c (require_complete_types_for_parms): Call relayout_decl
+ instead of layout_decl.
+
+2005-06-30 Zack Weinberg <zack@codesourcery.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * cp-lang.c: No need to include cxx-pretty-print.h.
+ * error.c (cp_printer): Update signature. No need to process
+ flags.
+ (print_instantiation_partial_context): Output last newline
+ with pp_base_newline.
+ * Make-lang.in: Update dependencies.
+
+2005-06-30 Steven Bosscher <stevenb@suse.de>
+
+ * decl.c (start_decl): Replace DECL_THREAD_LOCAL with
+ DECL_THREAD_LOCAL_P.
+ (cp_finish_decl): Likewise.
+ (grokvardecl): Set the default DECL_TLS_MODEL here.
+
+2005-06-28 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cvt.c (ocp_convert): Use invalid_conversion hook.
+ * typeck.c (build_binary_op): Use invalid_binary_op hook.
+ (build_unary_op): Use invalid_unary_op hook.
+
+2005-06-28 Paul Brook <paul@codesourcery.com>
+
+ * Make-lang.in (cp/except.o): Depend on $(TARGET_H)
+ * except.c: Include target.h.
+ (init_exception_processing): Initialize unwind_resume_libfunc.
+ * doc/tm.texi: Document TARGET_ASM_TTYPE
+
+2005-06-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * call.c (build_over_call): Pass in named argument list to
+ `check_function_arguments'.
+ * typeck.c (build_function_call): Likewise.
+
+2005-06-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * cp-tree.h (lang_check_failed): Add noreturn attribute.
+
+2005-06-25 Kelley Cook <kcook@gcc.gnu.org>
+
+ * all files: Update FSF address in copyright headers.
+
+2005-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/19317
+ * semantics.c (simplify_aggr_init_expr): Use
+ CALL_EXPR_RETURN_SLOT_OPT, not CALL_EXPR_HAS_RETURN_SLOT_ADDR.
+
+2005-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * pt.c (register_specialization): Remove superfluous assertion.
+
+2005-06-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * call.c (convert_like_real): Add format attribute.
+ * typeck.c (check_for_casting_away_constness,
+ build_static_cast_1): Likewise.
+ * typeck2.c (readonly_error, cxx_incomplete_type_diagnostic):
+ Likewise.
+
+2005-06-17 Geoffrey Keating <geoffk@apple.com>
+
+ PR c++/17413
+ * pt.c (type_unification_real): Apply template type deduction even
+ to procedure parameters that are not dependent on a template
+ parameter.
+
+2005-06-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might
+ change.
+ (create_pseudo_type_info): First parameter is an int.
+
+2005-06-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20678
+ * error.c (dump_expr) <COMPONENT_REF case>: Check DECL_NAME is not
+ null.
+
+ * Make-lang.in: Reformat some long lines.
+ (gt-cp-rtti.h): New target.
+ (cp/rtti.o): Add dependency.
+ * config-lang.in (gtfiles): Add cp/rtti.c.
+ * cp-tree.h (CPTI_TI_DESC_TYPE, CPTI_BLTN_DESC_TYPE,
+ CPTI_PTR_DESC_TYPE, CPTI_ARY_DESC_TYPE, CPTI_FUNC_DESC_TYPE,
+ CPTI_ENUM_DESC_TYPE, CPTI_CLASS_DESC_TYPE,
+ CPTI_SI_CLASS_DESC_TYPE, CPTI_VMI_CLASS_DESC_TYPE,
+ CPTI_PTM_DESC_TYPE, CPTI_BASE_DESC_TYPE): Remove.
+ (ti_desc_type_node, bltn_desc_type_node, ptr_desc_type_node,
+ ary_desc_type_node, func_desc_type_node, enum_desc_type_node,
+ class_desc_type_node, si_class_desc_type_node,
+ vmi_class_desc_type_node, ptm_desc_type_node,
+ base_desc_type_node): Remove.
+ * decl.c: Adjust documentation of global trees.
+ * rtti.c (TINFO_PSEUDO_TYPE, TINFO_VTABLE_DECL,
+ TINFO_REAL_NAME): Remove.
+ (struct tinfo_s): New.
+ (enum tinfo_kind): New.
+ (tinfo_descs): New.
+ (get_tinfo_decl): Adjust use of tinfo descriptor.
+ (tinfo_base_init, generic_initializer, ptr_initializer,
+ ptm_initializer, class_initializer): Likewise.
+ (get_pseudo_ti_init): Take descriptor index. Adjust.
+ (create_pseudo_type_info): Likewise.
+ (get_pseudo_ti_desc): Return descriptor index. Adjust.
+ (create_tinfo_types): Adjust use of create_pseudo_type_info.
+ (emit_tinfo_decl): Adjust use of tinfo descriptor.
+
+2005-06-14 Roger Sayle <roger@eyesopen.com>
+
+ * decl.c (grokdeclarator): Only check TREE_OVERFLOW on INTEGER_CST.
+
+2005-06-13 Geoffrey Keating <geoffk@apple.com>
+
+ * Make-lang.in (c++.install-man): Doesn't really depend on installdirs.
+ (rule for installing g++.1 manpage): Does depend on installdirs.
+
+2005-06-13 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20789
+ * decl.c (cp_finish_decl): Clear runtime runtime initialization if
+ in-class decl's initializer is bad.
+
+ PR c++/21929
+ * parser.c (struct cp_parser): Document that scope could be
+ error_mark.
+ (cp_parser_diagnose_invalid_type_name): Cope with error_mark for
+ scope.
+ (cp_parser_nested_name_specifier): Return NULL_TREE on error.
+ (cp_parser_postfix_expression): Deal with null or error_mark
+ scope.
+ (cp_parser_elaborated_type_specifier): Adjust
+ cp_parser_nested_name_specifier call.
+
+ * parser (cp_parser_skip_to_end_of_block_or_statement): Cleanup.
+
+2005-06-12 Roger Sayle <roger@eyesopen.com>
+
+ PR c++/21930
+ * error.c (dump_expr): UNARY_PLUS_EXPR need not handle void types.
+ Treat CONVERT_EXPR identically to NOP_EXPR.
+
+2005-06-10 Aldy Hernandez <aldyh@redhat.com>
+
+ PR c++/10611
+ * cvt.c (build_expr_type_conversion): Same.
+ * typeck.c (build_binary_op): Handle vectors.
+ (common_type): Same.
+ (type_after_usual_arithmetic_conversions): Same.
+
+2005-06-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19497
+ * cp-tree.def (USING_DECL): Update documentation.
+ * cp-tree.h (DECL_DEPENDENT_P): New.
+ (USING_DECL_DECLS, USING_DECL_SCOPE): New.
+ * class.c (handle_using_decl): Move most of the processing to ...
+ * name-lookup.c (do_class_using_decl): ... here. Make stricter.
+ (push_using_decl): Use USING_DECL_SCOPE.
+ (cp_emit_debug_info_for_using): Make extern.
+ * cxx-pretty-print.c (pp_cxx_statement) <USING_DECL case>: Adjust.
+ * name-lookup.h (cp_emit_debug_info_for_using): Declare.
+ * pt.c (tsubst_decl) <USING_DECL case>: Use do_class_using_decl
+ when tsubsting.
+ (tsubst_expr): Use USING_DECL_SCOPE.
+ * search.c (lookup_field_1): Use DECL_DEPENDENT_P.
+ * semantics.c (finish_member_declaration): Likewise.
+
+2005-06-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/19894
+ * pt.c (tsubst): Reject pointer-to-member of type void.
+
+ PR c++/20563
+ * parser.c (cp_parser_label_declaration): Deal with invalid/missing
+ identifiers.
+
+2005-06-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * cp-tree.def (DEFAULT_ARG): Adjust documentation.
+ * cp-tree.h (DEFARG_INSTANTIATIONS): New.
+ (struct tree_default_arg): Add instantiations member.
+ * parser.c (cp_parser_late_parsing_default_args): Adjust to use a
+ VEC.
+ * pt.c (tsubst_arg_types): Likewise.
+
+ * parser.c (cp_parser_late_parsing_default_args): Fix overeager
+ assert in previous patch.
+
+2005-06-06 Jakub Jelinek <jakub@redhat.com>
+
+ * error.c (locate_error): Use gmsgid instead of msgid for argument
+ name.
+ (cp_error_at, cp_warning_at, cp_pedwarn_at): Likewise.
+
+2005-06-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR 21903
+ * cp-tree.def (DEFAULT_ARG): Document TREE_CHAIN use.
+ * parser.c (cp_parser_late_parsing_default_args): Propagate parsed
+ argument to any early instantiations.
+ * pt.c (tsubst_arg_types): Chain early instantiation of default arg.
+
+ PR c++/20637
+ * cp-tree.h (add_method): Add using_decl parameter.
+ * class.c (add_method): Add using_decl parameter. Adjust error
+ messages.
+ (handle_using_decl): Pass the using decl to add_method.
+ (clone_function_decl): Adjust add_member calls.
+ * decl2.c (check_classfn): Likewise.
+ * method.c (lazily_declare_fn): Likewise.
+ * semantics.c (finish_member_declaration): Likewise.
+
+ * method.c (synthesize_method): Use inform, not warning.
+
+2005-06-06 Hans-Peter Nilsson <hp@axis.se>
+
+ * config-lang.in (target_libs): Remove target-gperf.
+
+2005-06-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21619
+ * cp-tree.h (DECL_IS_BUILTIN_CONSTANT_P): New macro.
+ * parser.c (cp_parser_postfix_expression): Allow non-constant
+ expressions as arguments to __builtin_constant_p.
+ * tree.c (builtin_valid_in_constant_expr_p): Use
+ DECL_IS_BUILTIN_CONSTANT_P.
+
+2005-06-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21853
+ * typeck.c (casts_away_constness_r): Do not drop cv-qualifiers on
+ the pointed-to type for a pointer-to-member.
+
+ PR c++/21336
+ * cp-tree.h (grok_op_properties): Remove friendp parameter.
+ * decl.c (grokfndecl): Adjust call.
+ (grok_op_properties): Determine the class of which the function is
+ a member by looking at its DECL_CONTEXT, not current_class_type.
+ * pt.c (tsubst_decl): Adjust call to grok_op_properties.
+
+2005-06-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ * method.c (synthesize_method): Add addtional arg to warning call.
+
+ PR c++/21280
+ * Make-lang.in (method.o): Add diagnostic.h
+ * decl.c (start_preparsed_function): Use decl's location for file
+ info.
+ * decl2.c (cp_finish_file): Set input_location before synthesizing
+ a function.
+ (mark_used): When deferring a synthesized function, save current
+ location. Do not set function's location when actually
+ synthesizing it.
+ * method.c: #include diagnostic.h.
+ (synthesize_method): Set the functions source location. Show
+ needed location if errors are emitted.
+
+ * decl.c (start_decl): Simplify specialization handling. Remove
+ unneeded CLASSTYPE_TEMPLATE_INSTANTIATION check.
+ * mangle.c (discriminator_for_local_entity): Use VEC_index.
+
+ PR c++/20350
+ * decl.c (duplicate_decls): Copy all of DECL_USE_TEMPLATE.
+
+ PR c++/21151
+ * name-lookup.c (pushtag): Push local class even in a template.
+
+2005-05-31 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21165
+ * init.c (integral_constant_value): Check the type of the
+ initializer, not the decl.
+
+2005-05-30 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21784
+ * name-lookup.c (do_nonmember_using_decl): Ignore builtin
+ functions, even when the used name is not a function.
+
+2005-05-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * operators.def, optimize.c: Update copyright.
+
+2005-05-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21210
+ * call.c (standard_conversion): Permit conversions to complex
+ types if conversion to the corresponding scalar type would be
+ permitted.
+
+ PR c++/21340
+ * method.c (implicitly_declare_fn): Clear processing_template_decl
+ when generating implicit declaration.
+
+2005-05-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21614
+ * typeck.c (get_member_function_from_ptrfunc): Do not attempt
+ conversions to base classes of incomplete types.
+
+2005-05-27 Ian Lance Taylor <ian@airs.com>
+
+ * semantics.c (add_stmt): Add C++ frontend specific version.
+ * cp-tree.h (STMT_IS_FULL_EXPR_P): Define.
+ (stmts_are_full_exprs_p): Declare.
+
+2005-05-27 Roger Sayle <roger@eyesopen.com>
+ Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ * cp-tree.def (UNARY_PLUS_EXPR): New C++ unary tree code.
+ * parser.c (cp_parser_unary_expression): Use UNARY_PLUS_EXPR instead
+ of CONVERT_EXPR.
+ (cp_parser_unary_expression): Likewise.
+ * typeck.c (build_unary_op): Likewise.
+ * call.c (add_builtin_candidate, build_new_op): Likewise.
+ * error.c (dump_expr): Likewise.
+ * pt.c (tsubst_copy, tsubst_copy_and_build): Likewise.
+ * decl.c (ambi_op_p, grok_op_properties): Likewise.
+ * dump.c (dump_op): Likewise.
+ * lex.c (init_operators): Likewise.
+ * operators.def ("+"): Likewise.
+ * cp-gimplify.c (cp_gimplify_expr): Handle UNARY_PLUS_EXPR like a
+ conversion, if the result and argument types differ.
+ * tree.c (fold_if_not_in_template): Fold UNARY_PLUS_EXPR much
+ like a NOP_EXPR when !processing_template_decl.
+
+ * cxx-pretty-print.c (pp_cxx_cast_expression): Prototype.
+ (pp_cxx_unary_expression): Handle new UNARY_PLUS_EXPR tree code.
+
+2005-05-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/21455
+ * typeck.c (get_delta_difference): Cope with incomplete but equal
+ classes. Reorder if.
+
+ PR c++/21681
+ * parser.c (cp_parser_late_parsing_for_member): Disable access
+ checking for template functions.
+
+2005-05-26 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/21768
+ * pt.c (redeclare_class_template): Change error message according
+ to coding conventions.
+
+2005-05-26 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * call.c (build_op_delete_call): Fix quoting in error message.
+
+2005-05-25 Richard Henderson <rth@redhat.com>
+
+ PR libgcj/21692
+ * cp-tree.h (make_alias_for): Declare.
+ * decl2.c (build_java_method_aliases): New.
+ (cp_finish_file): Call it.
+ * method.c (make_alias_for): Split out from ...
+ (make_alias_for_thunk): ... here.
+
+2005-05-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/21686
+ * semantics.c (finish_id_expression): Fix quoting in error message.
+
+2005-05-25 DJ Delorie <dj@redhat.com>
+
+ * decl.c (duplicate_decls): Move warning control from if() to
+ warning(OPT_*).
+ * name-lookup.c (parse_using_directive): Likewise.
+ * parser.c (cp_parser_elaborated_type_specifier): Likewise.
+ (cp_parser_init_declarator): Likewise.
+ * tree.c (handle_com_interface_attribute): Likewise.
+
+2005-05-24 Ziemowit Laski <zlaski@apple.com>
+
+ * class.c (layout_class_type): Do not issue C++ ABI warnings
+ for ObjC structs.
+ * decl.c (objc_mark_locals_volatile): Streamline by calling
+ objc_volatilize_decl().
+ * parser.c (cp_parser_objc_message_expression): Allow simple
+ type specifiers (instead of merely type names) as message
+ receivers.
+ * pt.c (template_args_equal): Do not call objc_comptypes().
+ * typeck.c (composite_pointer_type): If both pointers are
+ ObjC-esque, arbitrarily choose the first; do not call
+ objc_comptypes().
+ (comptypes): Do not call objc_comptypes().
+ (convert_for_assignment): Call objc_compare_types().
+ (comp_ptr_ttypes_real): Call objc_type_quals_match() before
+ concluding that types do not match.
+
+2005-05-24 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/21645
+ * optimize.c (update_cloned_parm): Copy the TYPE also from the
+ original one.
+
+2005-05-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/21495
+ * decl.c (grokdeclarator): Fix "storage class specified for"
+ error reporting.
+
+2005-05-19 Kazu Hirata <kazu@cs.umass.edu>
+
+ * parser.c: Fix comment typos.
+
+2005-05-18 Geoffrey Keating <geoffk@apple.com>
+
+ * Make-lang.in (cc1plus-dummy): New.
+ (cc1plus-checksum.c): New.
+ (cc1plus-checksum.o): New.
+ (cc1plus): Add cc1plus-checksum.o.
+
+2005-05-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR C++/19664
+ * decl2.c (determine_visibility): Don't set visibility to
+ hidden if it has been set explicitly by user.
+
+2005-05-17 Ziemowit Laski <zlaski@apple.com>
+ Mike Stump <mrs@apple.com>
+
+ Yet more Objective-C++...
+
+ * cp-objcp-common.h (cxx_get_alias_set): Move from
+ here...
+ (cxx_warn_unused_global_decl): Likewise.
+ (cp_expr_size): Likewise.
+ (cp_tree_size): Likewise.
+ (cp_var_mod_type_p): Likewise.
+ (cxx_initialize_diagnostics): Likewise.
+ (cxx_types_compatible_p): Likewise.
+ * cp-tree.h: to here.
+ (do_poplevel): Add.
+ * lex.c (D_OBJC): Add.
+ (init_reswords): Add.
+ * Make-lang.in (cp/pt.o): Add cp/cp-objcp-common.h.
+ * parser.c: Add c-common.h include.
+ * pt.c: Add c-common.h and cp-objcp-common.h includes.
+ (template_args_equal): Use objc_comptypes as well.
+ (tsubst_copy_and_build): Use objcp_tsubst_copy_and_build as well.
+ * semantics.c (do_poplevel): Remove static.
+
+ * decl.c (objc_mark_locals_volatile): Don't change decls that are
+ already ok.
+ * decl2.c (generate_ctor_or_dtor_function): Add code to initialize
+ Objective C++ early enough.
+ * lex.c (struct resword reswords): Add Objective-C++ support.
+ * parser.c (cp_lexer_get_preprocessor_token): Add Objective-C++.
+ (cp_parser_objc_message_receiver): Add.
+ (cp_parser_objc_message_args): Likewise.
+ (cp_parser_objc_message_expression): Likewise.
+ (cp_parser_objc_encode_expression): Likewise.
+ (cp_parser_objc_defs_expression): Likewise.
+ (cp_parser_objc_protocol_expression): Likewise.
+ (cp_parser_objc_selector_expression): Likewise.
+ (cp_parser_objc_expression): Likewise.
+ (cp_parser_objc_visibility_spec): Likewise.
+ (cp_parser_objc_method_type): Likewise.
+ (cp_parser_objc_protocol_qualifiers): Likewise.
+ (cp_parser_objc_typename): Likewise.
+ (cp_parser_objc_selector_p): Likewise.
+ (cp_parser_objc_selector): Likewise.
+ (cp_parser_objc_method_keyword_params): Likewise.
+ (cp_parser_objc_method_tail_params_opt): Likewise.
+ (cp_parser_objc_interstitial_code): Likewise.
+ (cp_parser_objc_method_signature): Likewise.
+ (cp_parser_objc_method_prototype_list): Likewise.
+ (cp_parser_objc_method_definition_list): Likewise.
+ (cp_parser_objc_class_ivars): Likewise.
+ (cp_parser_objc_identifier_list): Likewise.
+ (cp_parser_objc_alias_declaration): Likewise.
+ (cp_parser_objc_class_declaration): Likewise.
+ (cp_parser_objc_protocol_declaration): Likewise.
+ (cp_parser_objc_protocol_refs_opt): Likewise.
+ (cp_parser_objc_superclass_or_category): Likewise.
+ (cp_parser_objc_class_interface): Likewise.
+ (cp_parser_objc_class_implementation): Likewise.
+ (cp_parser_objc_end_implementation): Likewise.
+ (cp_parser_objc_declaration): Likewise.
+ (cp_parser_objc_try_catch_finally_statement): Likewise.
+ (cp_parser_objc_synchronized_statement): Likewise.
+ (cp_parser_objc_throw_statement): Likewise.
+ (cp_parser_objc_statement): Likewise.
+ (cp_parser_primary_expression): Add Objective-C++.
+ (cp_parser_statement): Likewise.
+ (cp_parser_declaration): Likewise.
+ (cp_parser_simple_type_specifier): Likewise.
+ (cp_parser_type_name): Likewise.
+ (cp_parser_parameter_declaration_list): Likewise.
+ (cp_parser_member_declaration) Likewise.
+ * tree.c: Include debug.h.
+ * typeck.c (composite_pointer_type): Add Objective-C++ support.
+ (finish_class_member_access_expr): Likewise.
+ (build_function_call): Allow objc to rewrite FUNCTION_DECLs.
+ (build_modify_expr): Allow objc to generate write barriers.
+
+ * Make-lang.in (cp/tree.o): Add debug.h.
+ * tree.c (lvalue_p_1, case CONST_DECL): Add.
+
+2005-05-18 Jan Hubicka <jh@suse.cz>
+
+ * method.c: Include tree-pass.h
+ (use_thunk): Lower body before expanding.
+
+2005-05-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/21454
+ * decl.c (maybe_deduce_size_from_array_init): Call
+ cp_apply_type_quals_to_decl after completing array type.
+
+2005-05-16 Richard Henderson <rth@redhat.com>
+
+ * decl.c (build_library_fn_1): Move setting TREE_NOTHROW ...
+ (build_library_fn): ... here.
+
+2005-05-12 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.h (cp_stmt_codes): Don't define.
+ (statement_code_p): Declare.
+ (STATEMENT_CODE_P): Define.
+ * lex.c (statement_code_p): Define.
+ (cxx_init): Use actual codes in stmt_codes initializer, not
+ cp_stmt_codes macro. Initialize statement_code_p directly, rather
+ than using INIT_STATEMENT_CODES.
+
+2005-05-09 Mark Mitchell <mark@codesourcery.com>
+
+ * typeck.c (build_unary_op): Do not resort to address arithmetic
+ when taking the address of a COMPONENT_REF.
+
+2005-05-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * class.c (vtbl_init_data_s): Change the type of fns to
+ VEC(tree,gc)*.
+ (build_vtbl_initializer, add_vcall_offset, add_vcall_offset):
+ Use VEC instead of VARRAY.
+
+2005-05-07 Richard Sandiford <rsandifo@redhat.com>
+
+ * mangle.c: Remove a reference to the MIPS -mint64 option.
+
+2005-05-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * decl.c (wrapup_globals_for_namespace): Use VEC instead of
+ VARRAY.
+ * name-lookup.c (add_decl_to_level, begin_scope): Likewise.
+ * name-lookup.h (cp_binding_level): Change the type of
+ static_decls to VEC(tree,gc)*.
+
+ * mangle.c (globals): Change the type of substitutions to
+ VEC(tree,gc)*.
+ (dump_substitution_candidates, add_substitution,
+ find_substitution, finish_mangling, init_mangle): Use VEC
+ instead of VARRAY.
+
+2005-05-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * decl2.c (spew_debug): Remove.
+
+ * decl2.c (ssdf_decls, start_static_storage_duration_function,
+ generate_ctor_or_dtor_function): Use VEC instead of VARRAY.
+
+ * decl2.c (pending_statics, note_vague_linkage_var,
+ cp_finish_file): Use VEC instead of VARRAY.
+ (pending_statics_used): Remove.
+
+2005-05-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * decl2.c (deferred_fns, note_vague_linkage_fn,
+ cp_finish_file): Use VEC instead of VARRAY.
+
+2005-05-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21352
+ * pt.c (build_non_dependent_expr): Use is_overloaded_fn.
+
+2005-05-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * pt.c: Fix a comment typo.
+
+2005-05-04 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (language_function): Change the type of
+ x_local_names to VEC.
+ * decl.c (push_local_name): Adjust uses of local_names.
+
+2005-05-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * friend.c, lex.c, mangle.c, repo.c: Update copyright.
+
+2005-05-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * class.c (local_classes, init_class_processing): Use VEC
+ instead of VARRAY.
+ * cp-tree.h (local_classes): Likewise.
+ * mangle.c (discriminator_for_local_entity): Likewise.
+ * name-lookup.c (pushtag): Likewise.
+
+ * class.c (current_lang_depth, push_lang_context,
+ pop_lang_context): Use VEC instead of VARRAY.
+ * cp-tree.h (saved_scope): Use VEC for lang_base instead of
+ VARRAY.
+ * name-lookup.c (push_to_top_level): Use VEC instead of
+ VARRAY.
+
+2005-05-02 Paolo Bonzini <bonzini@gnu.org>
+
+ * semantics.c (finish_call_expr): Call resolve_overloaded_builtin
+ for BUILT_IN_MD built-ins.
+
+2005-05-02 Michael Matz <matz@suse.de>
+
+ PR c++/19542
+ * cp-tree.h (cp_tree_index): Remove CPTI_NULL, to be defined in C
+ common frontend.
+ (null_node): Remove.
+ * lex.c (cxx_init): Move null_node initialisation to C common frontend.
+
+2005-04-25 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.def: Add EXPR_STMT.
+ * cp-tree.h (cp_stmt_codes): Add EXPR_STMT.
+ (EXPR_STMT_EXPR): Define.
+ * cp-gimplify.c: Include "flags.h".
+ (gimplify_expr_stmt): New static function.
+ (cp_gimplify_expr): Handle EXPR_STMT.
+ * cxx-pretty-print.c (pp_cxx_statement): Use pp_cxx_expression
+ rather than pp_expression.
+ (pp_cxx_statement): Handle EXPR_STMT.
+ * dump.c (cp_dump_tree): Handle EXPR_STMT.
+ * lex.c (cxx_init): Don't use c_common_stmt_codes in stmt_codes
+ initializer.
+
+2005-04-25 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/21188
+ * rtti.c (ifnonnull): Cast the zero comparison operand
+ to the correct type.
+
+2005-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/20991
+ * class.c: Include cgraph.h.
+ (cp_fold_obj_type_ref): Set node->local.vtable_method.
+ * Make-lang.in (cgraph.o): Depend on $(CGRAPH_H).
+
+2005-04-12 Markus F.X.J. Oberhumer <markus@oberhumer.com>
+
+ * mangle.c (write_builtin_type): Handle integer types which are
+ not one of the shared integer type nodes and emit a "vendor
+ extended builtin type" with an encoding in the form of "u5int96".
+
+2005-04-24 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.def (USING_STMT): Change class to tcc_statement.
+ (TRY_BLOCK, EH_SPEC_BLOCK, HANDLER, CLEANUP_STMT): Likewise.
+ (IF_STMT, FOR_STMT, WHILE_STMT, DO_STMT): Likewise.
+ (BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
+
+2005-04-23 DJ Delorie <dj@redhat.com>
+
+ * call.c, class.c, cvt.c, decl.c, decl2.c, except.c, friend.c,
+ init.c, lex.c, mangle.c, method.c, name-lookup.c, parser.c,
+ repo.c, rtti.c, tree.c, typeck.c, typeck2.c: Adjust warning()
+ callers.
+
+2005-04-22 Per Bothner <per@bothner.com>
+
+ * decl.c (make_rtl_for_nonlocal_decl): Don't try get_fileinfo if
+ input_filename is NULL, as it is for (say) __PRETTY_FUNCTION__.
+
+2005-04-22 Alexandre Oliva <aoliva@redhat.com>
+
+ PR c++/21087
+ * name-lookup.c (push_overloaded_decl): Do not overload with
+ non-duplicate anticipated built-in.
+
+2005-04-21 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (THROW_NAME, AUTO_VTABLE_NAME, AUTO_TEMP_FORMAT,
+ VTABLE_BASE, VTABLE_NAME_PREFIX, STATIC_NAME_FORMAT): Remove.
+
+2005-04-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ * cp-tree.h: Adjust for new VEC API.
+ Define VEC(tree_pair_s,gc).
+ (struct save_scope): Adjust.
+ (struct lang_type_class): Adjust.
+ (unemitted_tinfo_decls): Adjust.
+ * class.c (add_method, resort_type_method_vec,
+ finish_struct_methods, struct find_final_overrider_data,
+ dfs_find_final_overrider_pre, find_final_overrider,
+ get_vcall_index, warn_hidden, walk_subobject_offsets,
+ check_methods, fixup_inline_methods, end_of_class,
+ warn_about_ambiguous_bases, finish_struct, build_vtbl_initializer,
+ add_vcall_offset): Adjust.
+ * decl.c (xref_basetypes, finish_method): Adjust.
+ * decl2.c (check_classfn): Adjust.
+ * init.c (sort_mem_initializers, push_base_cleanups): Adjust.
+ * method.c (do_build_copy_constructor): Adjust.
+ * name-lookup.c (new_class_binding, store_binding,
+ store_bindings, store_class_bindings): Adjust.
+ * name-lookup.h: Define VEC(cxx_saved_binding,gc),
+ VEC(cp_class_binding,gc).
+ (struct cp_binding_level): Adjust.
+ * parser.c: Define VEC(cp_token_position,heap).
+ (struct cp_lexer): Adjust.
+ (cp_lexer_new_main, cp_lexer_new_from_tokens, cp_lexer_destroy,
+ cp_lexer_save_tokens): Adjust.
+ * pt.c (retrieve_specialization,
+ check_explicit_specialization): Adjust.
+ * rtti.c (unemitted_tinfo_decls): Adjust.
+ (init_rtti_processing, get_tinfo_decl, get_pseudo_ti_init,
+ get_pseudo_ti_desc): Adjust.
+ * search.c (dfs_access_in_type, lookup_conversion_operator,
+ lookup_fnfields_1, dfs_walk_once, dfs_walk_once_accessible,
+ dfs_get_pure_virtuals, lookup_conversions_r, binfo_for_vbase): Adjust.
+ * semantics.c: Define VEC(deferred_access,gc).
+ (push_deferring_access_checks): Adjust.
+ * typeck2.c (abstract_virtuals_error): Adjust.
+
+2005-04-20 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.def: Add STMT_EXPR.
+ * cp-tree.h (STMT_EXPR_NO_SCOPE): Define.
+ (STMT_EXPR_STMT): Define.
+ * cxx-pretty-print.c (pp_cxx_primary_expression): Handle
+ STMT_EXPR.
+ (pp_cxx_expression): Likewise.
+ (pp_cxx_statement): Call pp_cxx_statement, not pp_statement.
+ * dump.c (cp_dump_tree): Handle STMT_EXPR.
+
+2005-04-18 Kazu Hirata <kazu@cs.umass.edu>
+
+ * decl.c (expand_static_init): Call build2 and build3 instead
+ of build.
+
+ * cp-tree.h (VPTR_NAME, VPTR_NAME_P): Remove.
+
+2005-04-17 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.def: Add SIZEOF_EXPR, ARROW_EXPR and ALIGNOF_EXPR.
+ * cxx-pretty-print.c (pp_cxx_postfix_expression): Handle
+ ARROW_EXPR.
+ (pp_cxx_unary_expression): Handle SIZEOF_EXPR and ALIGNOF_EXPR.
+ (pp_cxx_expression): Handle ARROW_EXPR, SIZEOF_EXPR, and
+ ALIGNOF_EXPR.
+ * typeck.c (cxx_sizeof_or_alignof_type): Update call to
+ c_sizeof_or_alignof_type for change in parameter type.
+
+2005-04-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21025
+ * typeck.c (cxx_sizeof_or_alignof_type): Check whether the type to
+ which sizeof/alignof is dependent, rather than just whether we are
+ processing_template_decl.
+
+2005-04-17 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (LOOKUP_GLOBAL): Remove.
+ (LOOKUP_ONLYCONVERTING, DIRECT_BIND, LOOKUP_NO_CONVERSION,
+ LOOKUP_DESTRUCTOR, LOOKUP_NO_TEMP_BIND, LOOKUP_PREFER_TYPES,
+ LOOKUP_PREFER_NAMESPACES, LOOKUP_CONSTRUCTOR_CALLABLE): Adjust
+ their values.
+
+2005-04-15 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/14311
+ * semantics.c (finish_call_expr): Call resolve_overloaded_builtin.
+
+2005-04-15 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (lang_type_class): Remove redefined. Move
+ java_interface into where redefined was. Increment the width
+ of dummy.
+ (TYPE_REDEFINED): Remove.
+
+2005-04-14 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (SET_TMPL_ARG, ENUM_TI_TEMPLATE, ENUM_TI_ARGS,
+ CLASSTYPE_TEMPLATE_LEVEL): Remove.
+
+2005-04-11 Mark Mitchell <mark@codesourcery.com>
+
+ * decl2.c (determine_visibility): Don't use export_class_data.
+ (import_export_decl): Honor TARGET_CXX_CLASS_DATA_ALWAYS_WEAK and
+ TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY.
+
+2005-04-09 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h (cxx_alignof): Remove.
+
+ * cp-tree.h (DECL_ARRAY_DELETE_OPERATOR_P): Remove.
+
+ * cp-tree.h (EXCEPTION_CLEANUP_NAME, B_SET, B_CLR, B_TST,
+ CONV_STATIC_CAST): Remove.
+
+ * pt.c (UNIFY_ALLOW_MAX_CORRECTION): Remove.
+
+ * cp-tree.h (VF_BINFO_VALUE, VF_BASETYPE_VALUE): Remove.
+
+ * cp-tree.h (cp_deprecated): Remove.
+
+2005-04-08 Ian Lance Taylor <ian@airs.com>
+
+ * cp-tree.def: Define FOR_STMT, WHILE_STMT, DO_STMT, BREAK_STMT,
+ CONTINUE_STMT, SWITCH_STMT.
+ * cp-tree.h (cp_stmt_codes): Add FOR_STMT, WHILE_STMT, DO_STMT,
+ BREAK_STMT, CONTINUE_STMT, SWITCH_STMT.
+ (WHILE_COND, WHILE_BODY): Define.
+ (DO_COND, DO_BODY): Define.
+ (FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY): Define.
+ (SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE): Define.
+ * cp-gimplify.c (enum bc_t): Define.
+ (struct cp_gimplify_ctx, ctxp): Define.
+ (push_context, pop_context): New static functions.
+ (begin_bc_block, finish_bc_block): New static functions.
+ (build_bc_goto): New static function.
+ (gimplify_cp_loop, gimplify_for_stmt): New static functions.
+ (gimplify_while_stmt, gimplify_do_stmt): Likewise.
+ (gimplify_switch_stmt): Likewise.
+ (cp_gimplify_expr): Handle FOR_STMT, WHILE_STMT, DO_STMT,
+ SWITCH_STMT, CONTINUE_STMT, BREAK_STMT.
+ (cp_genericize): Call push_context and pop_context.
+ * semantics.c (finish_break_stmt): Just call build_stmt
+ (BREAK_STMT) rather than build_break_stmt.
+ (finish_continue_stmt): Corresponding change.
+ * decl.c (pop_switch): Update call to c_do_switch_warnings for new
+ parameters.
+ * cxx-pretty-print.c (pp_cxx_statement): Handle SWITCH_STMT,
+ WHILE_STMT, DO_STMT, FOR_STMT, BREAK_STMT, CONTINUE_STMT.
+ * dump.c (cp_dump_tree): Likewise.
+
+2005-04-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20905
+ * parser.c (cp_parser_type_specifier_seq): Add is_condition
+ parameter.
+ (cp_parser_new_type_id): Pass it.
+ (cp_parser_condition): Likewise.
+ (cp_parser_conversion_type_id): Likewise.
+ (cp_parser_type_id): Likewise.
+ (cp_parser_type_specifier_seq): In a condition, do not allow
+ invalid type-specifier combinations.
+ (cp_parser_exception_declaration): Adjust call to
+ cp_parser_type_specifier_seq.
+
+ * cp-tree.def (TINST_LEVEL): Document TINST_IN_SYSTEM_HEADER_P.
+ * cp-tree.h (struct tinst_level): Add in_system_header_p.
+ (TINST_IN_SYSTEM_HEADER_P): New macro.
+ (make_tinst_level): Remove.
+ * pt.c (lookup_template_class): Preserve DECL_IN_SYSTEM_HEADER on
+ the instantiated class.
+ (push_tinst_level): Do not use make_tinst_level. Set
+ TINST_IN_SYSTEM_HEADER_P.
+ (pop_tinst_level): Likewise.
+ (instantiate_class_template): Set in_system_header.
+ (instantiate_pending_templates): Likewise.
+ * tree.c (make_tinst_level): Remove.
+
+2005-04-06 Joseph S. Myers <joseph@codesourcery.com>
+
+ * decl.c (start_decl): Apply pending #pragma weak regardless of
+ scope.
+
+2005-04-06 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20212
+ * pt.c (regenerate_decl_from_template): Copy attributes for
+ parameters from the pattern to the instantiation.
+
+2005-04-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20734
+ * cp-tree.def (OFFSET_REF): Correct comments.
+ * init.c (build_offset_ref): Remove misleading comment.
+ * typeck.c (build_unary_op): Handle pointer-to-member creation
+ here, rather than ...
+ (unary_complex_lvalue): ... here.
+
+2005-04-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/19312
+ * tree.c (stabilize_init): Don't bother trying to stabilize
+ something with no side-effects.
+
+2005-04-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20763
+ * decl.c (grokdeclarator): Correct attribute handling.
+
+2005-04-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19159
+ * decl2.c (import_export_decl): Use non-COMDAT external linkage
+ for virtual tables, typeinfo, etc. that will be emitted in only
+ one translation unit on systems without weak symbols.
+
+2005-04-04 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20679
+ * parser.c (cp_parser_template_name): Fix thinko.
+
+2005-04-04 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20746
+ * method.c (use_thunk): Protect covariant pointer return
+ adjustments from NULL pointers.
+
+2005-04-04 Jan Hubicka <jh@suse.cz>
+
+ * decl2.c (finish_objects): Revert my previous patch.
+ (cp_finish_file): Likewise.
+
+2005-04-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * pt.c: Fix comment typos.
+
+2005-04-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20723
+ * pt.c (more_specialized_fn): Member functions are unordered wrt
+ non-members. Conversion operators are unordered wrt other
+ functions.
+
+2005-04-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * call.c (add_template_candidates_real): Remove length parameter
+ from fn_type_unification call.
+ * class.c (resolve_address_of_overloaded_function): Likewise
+ * cp-tree.h (fn_type_unification): Remove length parameter.
+ * pt.c (get_bindings_overload): Remove.
+ (get_bindings_real): Rename to ...
+ (get_bindings): ... here. Remove length and strict
+ parameters. Change return type flag to boolean. Remove original
+ forwarding function.
+ (determine_specialization): Adjust get_bindings call.
+ (fn_type_unification): Remove length parameter. Adjust.
+ (type_unification_real): Remove length parameter. Adjust.
+ (resolve_overloaded_unification): Adjust get_bindings call.
+ (try_one_overload): Simplify confusing cascaded if control flow.
+ (unify): Remove length paramter from type_unification_real call.
+ (most_specialized_instantiation): Adjust get_bindings calls.
+ (most_specialized): Likewise.
+
+2005-03-31 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19203, implement DR 214
+ * call.c (joust): Use more_specialized_fn.
+ * cp-tree.h (DEDUCE_ORDER): Remove.
+ (more_specialized): Replace with ...
+ (more_specialized_fn): ... this.
+ * pt.c (maybe_adjust_types_for_deduction): Remove DEDUCE_ORDER
+ case.
+ (type_unification_real): Remove DEDUCE_ORDER case.
+ (more_specialized): Replace with ...
+ (more_specialized_fn): ... this. Implement DR 214.
+ (most_specialized_instantiation): Use get_bindings_real directly.
+
+2005-03-31 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR c++/18644
+ * call.c (build_new_op): Remove check for -Wsynth.
+
+2005-03-31 Jan Hubicka <jh@suse.cz>
+
+ * decl2.c (finish_objects): Mark ctor as needed.
+ (cp_finish_file): Output variables only in nonunit-at-a-time.
+
+2005-03-29 Richard Henderson <rth@redhat.com>
+
+ PR c/20519
+ * decl.c (cp_complete_array_type): Rename from complete_array_type.
+ Use the new complete_array_type in c-common.c. Update all callers.
+ * cp-tree.h (cp_complete_array_type): Update to match.
+
+2005-03-24 Geoffrey Keating <geoffk@apple.com>
+
+ * typeck.c (build_static_cast_1): Allow scalar_cast between
+ any integral, floating, or enumeration type.
+
+2005-03-24 Steven Bosscher <stevenb@suse.de>
+
+ * typeck.c (comptypes): First determine if the types are compatible
+ from a target-independent point of view. Check target attributes
+ last.
+
+ * class.c (build_base_path):
+ (build_vbase_offset_vtbl_entries):
+ (add_vcall_offset): Replace fold (buildN (...)) with fold_buildN.
+ * error.c (dump_expr): Likewise.
+ * init.c (build_zero_init, expand_cleanup_for_base,
+ build_vec_delete_1): Likewise.
+ * mangle.c (write_integer_cst): Likewise.
+ * method.c (thunk_adjust): Likewise.
+ * pt.c (convert_nontype_argument, tsubst, unify): Likewise.
+ * tree.c (cxx_print_statistics, array_type_nelts_total): Likewise.
+ * typeck.c (build_ptrmemfunc_access_expr,
+ (get_member_function_from_ptrfunc): Likewise.
+
+2005-03-23 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cp-objcp-common.h (LANG_HOOKS_TRUTHVALUE_CONVERSION): Remove.
+
+2005-03-23 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cp-tree.h (perform_integral_promotions): Remove.
+ (default_conversion): Add.
+
+2005-03-22 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (cp_parser_warn_min_max): New function.
+ (cp_parser_binary_expression): Use it.
+ (cp_parser_assignment_operator_opt): Likewise.
+ (cp_parser_operator): Likewise.
+
+2005-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/19980
+ * decl.c (start_preparsed_function): Robustify.
+
+2005-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/20499
+ * parser.c (cp_parser_class_head): Return NULL_TREE when
+ encountering a redefinition.
+
+2005-03-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20465
+ PR c++/20381
+ * typeck.c (build_ptrmemfunc): Allow OFFSET_REF when processing a
+ template.
+
+2005-03-21 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/20461
+ PR c++/20536
+ * init.c (emit_mem_initializers): Don't crash on undefined
+ types.
+
+2005-03-21 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/20147
+ * semantics.c (finish_stmt_expr_expr): Return immediately
+ if error_operand_p (expr).
+
+2005-03-21 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cp-tree.h (lvalue_or_else, lvalue_p): New.
+ * typeck.c (lvalue_or_else): New. Call lvalue_error.
+
+2005-03-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/20240
+ * decl.c (decls_match): Compare context of VAR_DECL.
+
+2005-03-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/20333
+ * parser.c (cp_parser_postfix_expression) <case RID_TYPENAME>:
+ Check the return value of cp_parser_nested_name_specifier.
+
+2005-03-18 Dale Johannesen <dalej@apple.com>
+
+ * cp/tree.c (cp_tree_equal): Handle SSA_NAME.
+
+2005-03-18 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/20463
+ * parser.c (cp_parser_diagnose_invalid_type_name):
+ Check TYPE_BINFO (current_class_type) before attempting
+ to emit inform messages.
+
+2005-03-17 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/19966
+ * cp-tree.h (grok_op_properties): Change return type to void.
+ * decl.c (grok_op_properties): Return early - don't check the
+ arity - in case of a static member or an operator that cannot
+ be non-member; tidy a bit.
+
+2005-03-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20186
+ * pt.c (contains_dependent_cast_p): Remove.
+ (fold_non_dependent_expr): Don't use it.
+ (value_dependent_expression_p): Use a switch statement.
+ reference_exprs can be dependent.
+
+2005-03-14 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/4403
+ PR c++/9783, DR433
+ * name-lookup.c (pushtag): Skip template parameter scope when
+ scope is ts_global. Don't push tag into template parameter
+ scope.
+ * pt.c (instantiate_class_template): Reorder friend class
+ template substitution to handle non-dependent friend class
+ that hasn't been previously declared.
+
+2005-03-14 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ Friend class name lookup 5/n
+ PR c++/1016
+ * cp-tree.h (pushtag): Adjust declaration.
+ * decl.c (lookup_and_check_tag): Call lookup_type_scope if
+ lookup_name fails.
+ (xref_tag): Adjust call to pushtag. Make hidden class visible.
+ (start_enum): Adjust call to pushtag.
+ * name-lookup.c (ambiguous_decl): Ignore hidden names.
+ (qualify_lookup): Change return type to bool.
+ (hidden_name_p): New function.
+ (lookup_namespace_name, unqualified_namespace_lookup,
+ lookup_name_real): Use it.
+ (lookup_type_scope): Update comments.
+ (maybe_process_template_type_declaration): Change parameter name
+ from globalize to is_friend.
+ (pushtag): Change globalize parameter of type int to tag_scope.
+ Hide name if introduced by friend declaration.
+ * name-lookup.h (hidden_name_p): Add declaration.
+ * parser.c (cp_parser_lookup_name): Don't deal with hidden name
+ here.
+ * pt.c (push_template_decl_real): Make hidden class template
+ visible.
+ (lookup_template_class, instantiate_class_template): Adjust call
+ to pushtag.
+ * semantics.c (begin_class_definition): Likewise.
+ * rtti.c (init_rtti_processing, build_dynamic_cast_1,
+ tinfo_base_init, emit_support_tinfos): Use ts_current instead of
+ ts_global.
+
+2005-03-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20157
+ * pt.c (determine_specialization): Reject non-specializations.
+
+2005-03-11 Per Bothner <per@bothner.com>
+
+ * cp-tree.h (struct cp_declarator): New id_loc field.
+ * cp/parser.c (cp_lexer_get_preprocessor_token): Set cp_token's
+ location using c_lex_with_flags, instead of input_location.
+ (cp_parser_direct_declarator): Set declarator's id_loc from
+ cp_token's id_loc.
+
+2005-03-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/18384, c++/18327
+ * decl.c (reshape_init_array): Use UHWI type for max_index_cst
+ and index. Convert max_index to size_type_node if it isn't
+ host_integerp (, 1).
+
+2005-03-09 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20208
+ * pt.c (tsubst_decl): Apply array-to-pointer and
+ function-to-pointer conversions to function arguments.
+ (regenerate_decl_from_template): Likewise.
+
+2005-03-09 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/16859
+ * decl.c (complete_array_type): In pedantic mode, return
+ 3 for an empty initializer list as the initializer for an
+ array of unknown bound (8.5.1/4).
+ (maybe_deduce_size_from_array_init): Fix final test to use
+ the above.
+
+2005-03-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20186
+ * pt.c (contains_dependent_cast_p): New.
+ (fold_non_dependent_expr): Call it.
+
+2005-03-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20142
+ * cp-tree.h (target_type): Remove.
+ * decl.c (layout_var_decl): Remove #if 0'd code.
+ (cp_finish_decl): Remove dead code.
+ * init.c (build_vec_init): When determining whether or not the
+ element type has an asignment operator, look through all array
+ dimensions.
+ * typeck.c (target_type): Remove.
+
+2005-03-07 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (finish_struct_1): Do not warn about non-virtual
+ destructors in Java classes.
+
+2005-03-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/19311
+ * init.c (build_offset_ref): Don't build non-dependent SCOPE_REF.
+ * pt.c (build_non_dependent_expr): Don't build NON_DEPENDENT_EXPR
+ for OFFSET_TYPE.
+ * typeck.c (build_x_unary_op): Don't build non-dependent SCOPE_REF.
+ Also set PTRMEM_OK_P for NON_DEPENDENT_EXPR.
+ (build_unary_op): Handle building ADDR_EXPR of OFFSET_REF inside
+ template.
+
+2005-03-02 Alexandre Oliva <aoliva@redhat.com>
+
+ * name-lookup.c (push_overloaded_decl): Don't error if the new
+ decl matches the old one.
+ * decl.c (redeclaration_error_message): Likewise.
+
+2005-03-01 Per Bothner <per@bothner.com>
+
+ * decl.c (finish_function): Use SET_EXPR_LOCATION instead of
+ unavailable annotate_with_file_line, if USE_MAPPED_LOCATION.
+
+2005-03-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20232
+ * class.c (update_vtable_entry_for_fn): Don't crash on invalid
+ covariancy.
+
+ * cp-tree.g (THUNK_TARGET): Expand comment.
+ * method.c (use_thunk): Make sure we also use the target, if that
+ is a thunk.
+
+2005-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/20206
+ * decl.c (cxx_comdat_group): Put thunks for
+ TARGET_USE_LOCAL_THUNK_ALIAS_P (function) functions into the same
+ comdat group as the thunk target.
+
+2005-02-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * call.c, class.c, cp-tree.h, decl2.c, error.c, init.c, mangle.c,
+ parser.c: Fix comment typo(s).
+
+2005-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/20175
+ * decl.c (reshape_init): Don't warn about missing braces if STRING_CST
+ initializes a char/wchar_t array.
+
+2005-02-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19878
+ * decl.c (grokvardecl): Set DECL_INTERFACE_KNOWN for declarations
+ with internal linkage.
+
+2005-02-23 Alexandre Oliva <aoliva@redhat.com>
+
+ * decl.c (grokvardecl): Don't exempt anonymous types from having
+ linkage for variables that have linkage other than "C".
+
+2005-02-23 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-objcp-common.h, error.c: Update copyright.
+
+2005-02-22 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20073
+ * decl.c (start_decl_1): Don't clear TREE_READONLY.
+ (cp_finish_decl): Likewise.
+ (complete_vars): Call cp_apply_type_quals_to_decl.
+ * typeck.c (cp_apply_type_quals): Avoid setting TREE_READONLY in
+ cases where that's not valid.
+
+ PR c++/19991
+ * init.c (integral_constant_value): Iterate if the value of a decl
+ is itself a constant.
+
+ PR c++/20152
+ * parser.c (cp_parser_class_head): Check for redefintions here.
+ * semantics.c (begin_class_definition): Not here.
+
+ PR c++/20153
+ * decl2.c (build_anon_union_vars): Add type parameter.
+ (finish_anon_union): Pass it.
+
+ PR c++/20148
+ * error.c (dump_expr): Do not print the body of a BIND_EXPR.
+ Handle STATEMENT_LIST.
+
+ PR c++/19883
+ * parser.c (cp_parser_direct_declarator): Always complain about
+ non-constant array bounds when in a function scope.
+ * semantics.c (finish_id_expression): Do not mark dependent names
+ as non-constant.
+
+2005-02-21 Douglas Gregor <dgregor@cs.indiana.edu>
+
+ PR c++/19076
+ PR c++/6628
+ * cp-tree.h (cp_apply_type_quals_to_decl): Declared.
+ * decl.c (grokdeclarator): Pedwarn about qualifying a function
+ type.
+ Add qualifiers when declaring a typedef of a function type.
+ Member function pointers pick up the qualifiers of the typedef
+ used to declare them.
+ Don't complain about creating cv-qualified function types.
+ Complain about qualified function typedefs that are used to
+ declare non-static member functions or free functions.
+ Use cp_apply_type_quals_to_decl.
+ (start_preparsed_function): Use cp_apply_type_quals_to_decl.
+ (grokclassfn): Use cp_apply_type_quals_to_decl.
+ * error.c (dump_type_suffix): Print qualifiers for function
+ types.
+ * pt.c (tsubst_decl): Use cp_apply_type_quals_to_decl.
+ (tsubst): When substituting a function type into a member
+ pointer type, pass along the qualifiers.
+ (unify): Unify member pointers to member function pointers.
+ * tree.c (cp_build_qualified_type_real): Function types may be
+ qualified. This includes restrict qualifiers.
+ * typeck.c (cp_apply_type_quals_to_decl): New function to replace
+ use of c_apply_type_quals_to_decl. Drops qualifiers that are being
+ added to function types.
+
+2005-02-20 Zack Weinberg <zack@codesourcery.com>
+
+ PR 18785
+ * cp-objcp-common.h (LANG_HOOKS_TO_TARGET_CHARSET): Set to
+ c_common_to_target_charset. Delete bogus comment.
+
+2005-02-18 Richard Henderson <rth@redhat.com>
+
+ PR libstdc++/10606
+ * except.c (do_get_exception_ptr): New.
+ (expand_start_catch_block): Use it.
+
+2005-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (start_decl_1): Only check TYPE_NEEDS_CONSTRUCTING
+ if type is not error_mark_node.
+
+2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/19508
+ * decl2.c (grokfield): Do not apply attributes to template parameters
+ as they are ignored by tsubst anyway.
+
+2005-02-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/19813
+ * decl.c (start_decl_1): Clear TREE_READONLY flag if
+ its type has TYPE_NEEDS_CONSTRUCTING.
+ (complete_vars): Likewise.
+
+2005-02-17 Alexandre Oliva <aoliva@redhat.com>
+
+ PR c++/20028
+ * class.c (finish_struct): Initialize TYPE_SIZE_UNIT of a
+ template along with TYPE_SIZE.
+
+ PR c++/20022
+ * semantics.c (perform_deferred_access_checks): Use
+ get_deferred_access_checks to get the top of the stack.
+
+2005-02-15 Alexandre Oliva <aoliva@redhat.com>
+
+ PR c++/17788
+ * class.c (add_implicitly_declared_members, check_field_decl)
+ (check_field_decls, check_bases): Remove arguments, tests and
+ assignments of cant_have_default_ctor-related variables.
+
+2005-02-15 Alexandre Oliva <aoliva@redhat.com>
+
+ * decl2.c (mark_used): Set the source location of the used decl to
+ the current input location here...
+ * method.c (synthesize_method): ... not here. Set input_location
+ from the decl instead.
+
+2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19608
+ * parser.c (cp_parser_late_parsing_for_member): Use
+ current_function_decl as scope to push to and from.
+
+ PR c++/19884
+ * pt.c (check_explicit_specialization): Make sure namespace
+ binding lookup found an overloaded function.
+ (lookup_template_function): Just assert FNS is an overloaded
+ function.
+
+ PR c++/19895
+ * decl.c (grokdeclarator): Check for error mark node in ptrmem
+ construction.
+
+2005-02-14 Alexandre Oliva <aoliva@redhat.com>
+
+ PR c++/17816
+ * decl.c (redeclaration_error_message): Report redefinition of
+ pure virtual function.
+
+2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19891
+ * class.c (build_simple_base_path): Build the component_ref
+ directly.
+ (update_vtable_entry_for_fn): Walk the covariant's binfo chain
+ rather than using lookup_base.
+ * search.c (dfs_walk_once): Add non-recursive assert check.
+ * typeck.c (build_class_member_access_expr): It is possible for
+ the member type to be both const and volatile.
+
+2005-02-12 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/14479
+ PR c++/19487
+ * pt.c (maybe_check_template_type): Remove.
+ * cp-tree.h (maybe_check_template_type): Remove prototype.
+ * name-lookup.c (maybe_process_template_type_declaration): Don't
+ use maybe_check_template_type.
+
+2005-02-11 Richard Henderson <rth@redhat.com>
+
+ PR c++/19632
+ * pt.c (get_mostly_instantiated_function_type): Save and restore
+ flag_access_control instead of push/pop_access_scope.
+
+2005-02-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19755
+ * decl.c (reshape_init): Issue warnings about missing braces.
+
+2005-02-11 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.def, except.c, ptree.c: Update copyright.
+
+2005-02-09 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19811
+ * call.c (build_op_delete_call): Check COMPLETE_TYPE_P before
+ attempting name lookup.
+
+ * parser.c (cp_parser_unqualified_id): Initialize type_decl.
+
+ PR c++/19787
+ * call.c (initialize_reference): Robustify.
+
+ PR ++/19732
+ * decl.c (grokdeclarator): Check for invalid use of destructor
+ names.
+
+ PR c++/19762
+ * parser.c (cp_parser_unqualified_id): Avoid creating destructor
+ names with invalid types.
+
+ PR c++/19826
+ * parser.c (cp_parser_direct_declarator): Allow type-dependent
+ expressions as array bounds.
+
+ PR c++/19739
+ * parser.c (cp_parser_attributes_list): Allow empty lists.
+
+2005-02-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19733
+ * class.c (add_method): Don't set TYPE_HAS_DESTRUCTOR.
+ (check_bases): Give warnings about a base class with a
+ non-virtual destructor, even if it is implicit.
+ (finish_struct_bits): Don't copy TYPE_HAS_DESTRUCTOR.
+ (maybe_warn_about_overly_private_class): Don't use
+ TYPE_HAS_DESTRUCTOR.
+ (finish_struct_methods): Don't set TYPE_HAS_DESTRUCTOR.
+ (check_for_override): Give it external linkage.
+ (add_implicitly_declared_members): Generate destructors lazily.
+ (check_field_decls): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR, not
+ TYPE_HAS_DESTRUCTOR.
+ (check_bases_and_members): Call check_methods before
+ check_field_decls.
+ (check_bases_and_members): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR, not
+ TYPE_HAS_DESTRUCTOR.
+ (finish_struct_1): Do not use TYPE_HAS_DESTRUCTOR.
+ * cp-tree.def (PSEUDO_DTOR_EXPR): Document.
+ * cp-tree.h (TYPE_HAS_DESTRUCTOR): Remove.
+ (lang_type_class): Add lazy_destructor.
+ (CLASSTYPE_LAZY_DESTRUCTOR): New macro.
+ (CLASSTYPE_DESTRUCTORS): Robustify.
+ (TYPE_HAS_DESTRUCTOR): Remove.
+ (check_for_override): Declare.
+ (build_vbase_delete): Remove.
+ * cvt.c (convert_to_void): Issue errors about pseudo-destructor
+ expressions.
+ * decl.c (cxx_maybe_build_cleanup): Remove dead code.
+ * except.c (dtor_nothrow): Lazily create destructors if necessary.
+ (build_throw): Use TYPE_HAS_NONTRIVIAL_DESTRUCTOR.
+ * init.c (build_delete): Lazily create destructors, if necessary.
+ (build_vbase_delete): Remove.
+ * method.c (locate_dtor): Simplify.
+ (implicitly_declare_fn): Add support for destructors.
+ * parser.c (cp_parser_lookup_name): Lazily create destructors, if
+ necessary.
+ * pt.c (check_explicit_specialization): Don't use
+ TYPE_HAS_DESTRUCTOR.
+ (instantiate_class_template): Likewise.
+ * ptree.c (cxx_print_type): Don't print TYPE_HAS_DESTRUCTOR.
+ * rtti.c (emit_support_tinfos): Robustify.
+ * search.c (lookup_fnfields_1): Lazily create destructors.
+ * typeck.c (build_class_member_access_expr): Remove
+ PSEUDO_DTOR_EXPR handling.
+ (lookup_destructor): Likewise.
+
+2005-02-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cxx-pretty-print.c, cxx-pretty-print.h, decl.h: Update
+ copyright.
+
+2005-02-07 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (cp_lexer_start_debugging): Avoid arithmetic operations
+ on boolean variables.
+ (cp_lexer_stop_debugging): Likewise.
+
+2005-02-03 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/17401
+ * parser.c (cp_parser_pure_specifier): Emit a specific error
+ message with an invalid pure specifier.
+ * decl2.c (grok_function_init): Remove.
+ (grokfield): An initializer for a method is a always a pure
+ specifier.
+
+2005-02-02 Matt Austern <austern@apple.com>
+
+ PR c++/19628
+ * cp-tree.h (builtin_valid_in_constant_expr_p): Declare.
+ * parser.c (cp_parser_postfix_expression): Accept function call in
+ constant expression if builtin_valid_in_constant_expr_p is true
+ for that function.
+ * pt.c (value_dependent_expression_p): Handle CALL_EXPRs properly.
+ * semantics.c (finish_id_expression): Accept function call in constant
+ expression if builtin_valid_in_constant_expr_p is true for that
+ function.
+ * tree.c (builtin_valid_in_constant_expr_p): New.
+
+2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/17413
+ * pt.c (check_instantiated_args): Improve error message.
+ Fix logic when to print its second part.
+
+2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-tree.h (complete_type_or_else): Remove macro.
+ (complete_type_or_diagnostic): Rename to complete_type_or_else
+ and remove last argument.
+ * typeck.c (complete_type_or_diagnostic): Rename to
+ complete_type_or_else and remove last argument.
+
+2005-02-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-tree.h (commonparms): Remove prototype.
+ (convert_arguments): Likewise.
+ (PFN_FROM_PTRMEMFUNC): Remove.
+ * typeck.c (commonparms): Make static.
+ (convert_arguments): Add prototype. Make static.
+ (PFN_FROM_PTRMEMFUNC): Replace by pfn_from_ptrmemfunc.
+
+2005-01-31 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (cp_parser_primary_expression): Don't complain about
+ floating-point literals in integral constant expressions when
+ !pedantic.
+
+2005-02-01 Alexandre Oliva <aoliva@redhat.com>
+
+ * parser.c (cp_parser_template_id): Revert comment patch too.
+
+ PR c++/18757
+ PR c++/19366
+ PR c++/19499
+ * parser.c (cp_parser_template_id): Revert 2004-12-09's patch.
+ Issue an error when creating the template id.
+ * pt.c (fn_type_unification): Return early if the explicit
+ template arg list is an error_mark_node.
+
+2005-01-31 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (build_enumerator): Do not issue duplicate error messages
+ about invalid enumeration constants.
+ * parser.c (cp_parser_non_integral_constant_expression): Always
+ set parser->non_integral_constant_expression_p.
+ (cp_parser_primary_expression): Add cast_p parameter. Issue
+ errors about invalid uses of floating-point literals in
+ cast-expressions.
+ (cp_parser_postfix_expression): Add cast_p parameter.
+ (cp_parser_open_square_expression): Pass it.
+ (cp_parser_parenthesized_expression_list): Add cast_p parameter.
+ (cp_parser_unary_expression): Likewise.
+ (cp_parser_new_placement): Pass it.
+ (cp_parser_direct_new_declarator): Likewise.
+ (cp_parser_new_initializer): Likewise.
+ (cp_parser_cast_expression): Add cast_p parameter.
+ (cp_parser_binary_expression): Likewise.
+ (cp_parser_question_colon_clause): Likewise.
+ (cp_parser_assignment_expression): Likewise.
+ (cp_parser_expression): Likewise.
+ (cp_parser_constant_expression): If an integral constant
+ expression is invalid, return error_mark_node.
+ (cp_parser_expression_statement): Pass cast_p.
+ (cp_parser_condition): Likewise.
+ (cp_parser_iteration_statement): Likewise.
+ (cp_parser_jump_statement): Likewise.
+ (cp_parser_mem_initializer): Likewise.
+ (cp_parser_template_argument): Likewise.
+ (cp_parser_parameter_declaration): Likewise.
+ (cp_parser_initializer): Likewise.
+ (cp_parser_throw_expression): Likewise.
+ (cp_parser_attribute_list): Likewise.
+ (cp_parser_simple_cast_expression): Likewise.
+ (cp_parser_functional_cast): Likewise.
+ (cp_parser_late_parsing_default_args): Likewise.
+ (cp_parser_sizeof_operand): Save/restore
+ non_integral_constant_expression_p.
+
+2005-01-31 Mike Stump <mrs@apple.com>
+
+ * parser.c (cp_lexer_new_main): Get the first token, first, before
+ doing anything.
+
+2005-01-31 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (start_decl): Add missing parentheses.
+
+2005-01-30 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19555
+ * cp-tree.h (DECL_USE_TEMPLATE): Expand documentation.
+ * decl.c (duplicate_decls): Do not discard
+ DECL_IMPLICIT_INSTANTIATION when merging declarations.
+ (start_decl): Do not SET_DECL_TEMPLATE_SPECIALIZATION for
+ variables that do not have DECL_USE_TEMPLATE.
+
+ PR c++/19395
+ * decl.c (grokdeclarator): Refactor code so that qualified names
+ are never allowed as the declarator in a typedef.
+
+ PR c++/19367
+ * name-lookup.c (do_nonmember_using_decl): Avoid overloading
+ builtin declarations.
+
+ PR c++/19457
+ * call.c (convert_like_real): Inline call to
+ dubious_conversion_warnings here.
+ * cp-tree.h (dubious_conversion_warnings): Remove.
+ * semantics.c (finish_unary_op_expr): Copy INTEGER_CSTs before
+ setting TREE_NEGATED_INT.
+ * typeck.c (dubious_conversion_warnings): Remove.
+
+ PR c++/19349
+ * name-lookup.c (pushdecl_namespace_level): Avoid accessing free'd
+ memory.
+
+2005-01-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19253
+ * parser.c (cp_parser_diagnose_invalid_type_name): Commit to
+ tentative parses.
+
+ PR c++/19667
+ * pt.c (redeclare_class_template): Robustify.
+
+2005-01-27 Steven Bosscher <stevenb@suse.de>
+
+ * decl.c (finish_case_label): Use SWITCH_STMT accessor macros
+ instead of SWITCH_EXPR ones.
+ * pt.c (tsubst_expr): Likewise.
+ * semantics.c (begin_switch_stmt, finish_switch_cond,
+ finish_switch_stmt): Likewise.
+
+2005-01-26 J"orn Rennecke <joern.rennecke@st.com>
+
+ PR c++/18370
+ * parser.c (cp_parser_initializer_clause): Initialize *non_constant_p.
+
+2005-01-25 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * class.c (abort_fndecl_addr): New variable.
+ (build_vtbl_initializer): If we have a pure virtual function
+ share the abort function's address.
+ Include gt-cp-class.h at the end.
+ * config-lang.in (gtfiles): Add cp/class.c.
+
+2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cxx-pretty-print.c (pp_cxx_statement): Add prototype. Make static.
+ (pp_cxx_function_definition): Make static.
+ * cxx-pretty-print.h (pp_cxx_statement): Remove prototype.
+ (pp_cxx_function_definition): Likewise.
+
+2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * name-lookup.c (print_binding_level): Make static.
+ (constructor_name_full): Make static inline.
+ (current_decl_namespace): Make static.
+ * name-lookup.h (constructor_name_full): Remove prototype.
+ (print_binding_level): Likewise.
+ (current_decl_namespace): Likewise.
+
+2005-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * decl.h (debug_bindings_indentation): Remove.
+
+2005-01-23 Kazu Hirata <kazu@cs.umass.edu>
+
+ * typeck.c: Fix a comment typo.
+
+2005-01-21 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/19208
+ * pt.c (fold_decl_constant_value): Always call fold_non_dependent_expr
+ at least once.
+ (tsubst): Use fold_decl_constant_value in place of a bare call to
+ integral_constant_value.
+
+2005-01-20 Kazu Hirata <kazu@cs.umass.edu>
+
+ * typeck.c (more_qualified_p): Remove.
+ * cp-tree.h: Remove the corresponding prototype.
+
+2005-01-19 Matt Austern <austern@apple.com>
+
+ * typeck.c (comptypes): Handle return code from objc_comptypes
+ correctly.
+
+2005-01-19 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h, name-lookup.h: Remove unused prototypes.
+
+2005-01-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/19375
+ * semantics.c (finish_id_expression): Disable access checking for
+ already lookuped FIELD_DECL.
+
+2005-01-18 Kazu Hirata <kazu@cs.umass.edu>
+
+ * decl.c (delete_block): Remove.
+ * cp-tree.h: Remove the corresponding prototype.
+
+ * decl.c (vtable_decl_p, vtype_decl_p, walk_globals_data,
+ walk_vtables_r, walk_vtables, walk_globals_r, walk_globals):
+ Remove.
+ * cp-tree.h: Remove the corresponding prototypes.
+
+ * tree.c (count_functions, bound_pmf_p, cp_is_overload_p,
+ cp_update_decl_after_saving, name_p): Remove.
+ * cp-tree.h: Remove the corresponding prototypes.
+
+2005-01-18 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c/19472
+ * semantics.c (finish_asm_stmt): Strip nops off
+ input memory operands.
+
+2005-01-18 Kazu Hirata <kazu@cs.umass.edu>
+
+ * Make-lang.in, call.c, cvt.c, init.c, rtti.c, tree.c,
+ typeck2.c: Update copyright.
+
+2005-01-16 Kazu Hirata <kazu@cs.umass.edu>
+
+ * class.c (get_enclosing_class): Remove.
+ * cp-tree.h: Remove the corresponding prototypes.
+
+ * cvt.c (convert_lvalue): Remove.
+ * cp-tree.h: Remove the corresponding prototype.
+
+ * pt.c (tinst_for_decl): Remove.
+ * cp-tree.h: Remove the corresponding prototypes.
+
+ * tree.c (hash_chainon): Remove.
+ * cp-tree.h: Remove the corresponding prototypes.
+
+2005-01-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/19263
+ * typeck2.c (split_nonconstant_init_1) <case VECTOR_TYPE>: Put a copy
+ of CONSTRUCTOR's node into MODIFY_EXPR, as the original is modified.
+
+2005-01-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (cp-warn): Don't append $(WERROR).
+
+2005-01-10 Kazu Hirata <kazu@cs.umass.edu>
+
+ * cp-tree.h: Fix a comment typo.
+
+2005-01-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19298
+ * pt.c (tsubst_qualified_id): Call convert_from_reference.
+
+2005-01-06 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/19244
+ * class.c (add_implicitly_declared_members): Remove dead code.
+ * decl.c (grokfndecl): Add sfk parameter. Use it do set
+ DECL_CONSTRUCTOR_P.
+ (grokdeclarator): Adjust calls to grokfndecl.
+ * method.c (implicitly_declare_fn): Improve documentation.
+ * parser.c (cp_parser_direct_declarator): Do not consider a
+ function to be a constructor if the containing class was
+ originally anonymous.
+
+2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/17154
+ * search.c (lookup_field_1): Handle using declaration in
+ class template partial specialization.
+
+2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/19258
+ * pt.c (push_access_scope): Handle friend defined in class.
+ (pop_access_scope): Likewise.
+
+2005-01-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19270
+ * pt.c (tsubst_copy) <ARRAY_REF case>: Handle separately.
+ (tsubst_copy_and_build) <ARRAY_REF case>: Remove obsolete
+ array-new handling code. Use build_x_binary_op.
+
+2005-01-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/19030
+ * cp-tree.h (start_decl): Take pointer to pushed scope, not bool.
+ * name-lookup.h (push_scope): Return pushed scope, not flag.
+ * name-lookup.c (push_scope): Return scope that should be popped,
+ not a flag.
+ * decl.c (start_decl): Adjust.
+ (grokfndecl): Adjust scope push and pop.
+ * decl2.c (check_classfn): Likewise.
+ * parser.c (cp_parser_condition, cp_parser_conversion_function_id,
+ cp_parser_init_declarator, cp_parser_direct_declarator,
+ cp_parser_class_specifier, cp_parser_class_head,
+ cp_parser_lookup_name,
+ cp_parser_constructor_declarator_p): Likewise.
+ * pt.c (instantiate_class_template,
+ resolve_typename_type): Likewise.
+
+2005-01-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/14136
+ * parser.c (cp_parser_unqualified_id): Do not issue error message
+ for typedef-name as destructor declarator when performing an
+ uncommitted tentative parse.
+
+2005-01-01 Steven Bosscher <stevenb@suse.de>
+
+ PR middle-end/17544
+ * decl.c (finish_function): Fix comment. Annotate the compiler
+ generated return with the current file name and line 0.
diff --git a/gcc/cp/ChangeLog-2006 b/gcc/cp/ChangeLog-2006
new file mode 100644
index 00000000000..bbdfbc2aaa2
--- /dev/null
+++ b/gcc/cp/ChangeLog-2006
@@ -0,0 +1,3495 @@
+2006-12-31 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/29731
+ * parser.c (cp_parser_primary_expression): Return error_mark_node when
+ a statement-expression is found outside of a function body.
+
+2006-12-28 Kazu Hirata <kazu@codesourcery.com>
+
+ * cp-tree.h (TYPE_NAMESPACE_SCOPE_P, TYPE_FUNCTION_SCOPE_P):
+ Remove.
+
+ * decl2.c: Fix a comment typo.
+
+2006-12-21 Andrew Pinski <pinskia@gmail.com>
+
+ PR C++/30225
+ * decl.c (cxx_builtin_function): Only copy the decl if adding
+ it to the std namespace.
+
+2006-12-21 Andrew Pinski <pinskia@gmail.com>
+
+ PR C++/30168
+ * optimize.c (update_cloned_parm): Copy DECL_GIMPLE_REG_P also.
+
+2006-12-22 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl.c: Fix a coment typo.
+
+2006-12-18 Ian Lance Taylor <iant@google.com>
+
+ * decl.c (start_preparsed_function): Add support for
+ -Wmissing-declarations.
+
+2006-12-16 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/29475
+ * cp-tree.h (struct deferred_access_check): New structure to represent a
+ deferred access check. It replaces the previous representation as a tree.
+ (get_deferred_access_checks): Return a vector of struct
+ deferred_access_check instead of a tree list.
+ (perform_access_checks): Take a vector of struct deferred_access_check
+ instead of a tree list.
+ * semantics.c (struct deferred_access): Store the deferred access checks
+ as a vector of struct deferred_access_check instead of a tree list.
+ (push_deferring_access_checks): Handle the change in struct
+ deferred_access.
+ (get_deferred_access_checks): Likewise.
+ (pop_to_parent_deferring_access_checks): Likewise.
+ (perform_or_defer_access_check): Likewise.
+ (perform_access_checks): Take a vector of struct deferred_access_check
+ instead of a tree list.
+ * parser.c (struct tree_check): New structure to store various data
+ associated with a CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID token.
+ (struct cp_token): Changed the value field to be a union with a pointer to
+ a struct tree_check for CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID
+ tokens and a tree field for all other tokens.
+ (eof_token): Adjusted due to the change in struct cp_token.
+ (cp_lexer_get_preprocessor_token): Likewise.
+ (cp_lexer_purge_token): Likewise.
+ (cp_lexer_purge_tokens_after): Likewise.
+ (cp_lexer_print_token): Likewise.
+ (cp_parser_error): Likewise.
+ (cp_parser_identifier): Likewise.
+ (cp_parser_string_literal): Likewise.
+ (cp_parser_primary_expression): Likewise.
+ (cp_parser_unqualified_id): Likewise.
+ (cp_parser_parenthesized_expression_list): Likewise.
+ (cp_parser_storage_class_specifier_opt): Likewise.
+ (cp_parser_function_specifier_opt): Likewise.
+ (cp_parser_type_specifier): Likewise.
+ (cp_parser_simple_type_specifier): Likewise.
+ (cp_parser_initializer_list): Likewise.
+ (cp_parser_member_specification_opt): Likewise.
+ (cp_parser_attribute_list): Likewise.
+ (cp_parser_objc_expression): Likewise.
+ (cp_parser_objc_protocol_qualifiers): Likewise.
+ (cp_parser_objc_selector): Likewise.
+ (cp_parser_objc_declaration): Likewise.
+ (cp_parser_objc_statement): Likewise.
+ (cp_parser_omp_clause_name): Likewise.
+ (cp_parser_omp_clause_default): Likewise.
+ (cp_parser_omp_clause_schedule): Likewise.
+ (cp_parser_omp_parallel): Likewise.
+ (cp_parser_initial_pragma): Likewise.
+ (pragma_lex): Likewise.
+ (cp_parser_pre_parsed_nested_name_specifier): Likewise.
+ (cp_parser_nested_name_specifier_opt): Likewise.
+ Use cp_token::u::tree_check_value to save the token's value, the
+ associated deferred checks and its qualifying scope.
+ (cp_parser_template_id): Likewise.
+ (cp_parser_template_declaration_after_export): Adjusted the call to
+ get_deferred_access_checks.
+ (cp_parser_init_declarator): Take the access checks as a vector of struct
+ deferred_access_check instead of a tree list.
+ (cp_parser_single_declaration): Likewise.
+ (cp_parser_perform_template_parameter_access_checks): Likewise.
+ (cp_parser_simple_declaration): Adjusted the call to
+ cp_parser_init_declarator.
+ (cp_parser_explicit_specialization): Adjusted the call to
+ cp_parser_single_declaration.
+
+2006-12-13 Ian Lance Taylor <iant@google.com>
+
+ PR c++/19564
+ PR c++/19756
+ * parser.c (cp_parser_expression_stack_entry): Add field
+ lhs_type.
+ (cp_parser_binary_expression): Track tree code of left hand side
+ of expression. Use it when calling build_x_binary_op.
+ (cp_parser_selection_statement): Add if_p parameter. Change all
+ callers. Warn about ambiguous else.
+ (cp_parser_statement): Add if_p parameter. Change all callers.
+ (cp_parser_implicitly_scoped_statement): Likewise.
+ * typeck.c (build_x_binary_op): Add parameters arg1_code and
+ arg2_code. Change all callers. Call warn_about_parentheses.
+ * cp-tree.h (build_x_binary_op): Update declaration.
+
+2006-12-12 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * decl.c (build_enumerator): Update error message to match C
+ front-end.
+
+2006-12-11 Jan Hubicka <jh@suse.cz>
+
+ * decl2.c (var_finalized_p): Update for renamed varpool functions.
+
+2006-12-09 Zack Weinberg <zackw@panix.com>
+
+ * parser.c (yydebug, enum pragma_omp_clause): Delete.
+
+2006-12-07 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29732
+ * cp-tree.h (DECL_USE_TEMPLATE): Mention partial specializations.
+ (explicit_class_specialization_p): Declare.
+ * pt.c (explicit_class_specialization_p): New function.
+ * parser.c (cp_parser_init_declarator): Check correct number of
+ template parameters for in-class function definitions.
+ (cp_parser_check_declrator_template_parameters): Stop looking for
+ template classes when we find an explicit specialization.
+
+2006-12-07 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/29980
+ * cp_parser_elaborated_type_specifier: Check
+ the return value of check_elaborated_type_specifier.
+
+2006-12-06 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29730
+ * parser.c (cp_parser_init_declarator): Reject initialization of
+ functions.
+
+2006-12-05 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29729
+ * decl2.c (check_member_template): Move check for member
+ templates in local classes to ...
+ * parser.c (cp_parser_template_declaration_after_export):
+ ... here.
+
+ PR c++/29728
+ * decl.c (check_array_designated_initializer): New function.
+ (maybe_deduce_size_from_array_init): Use it.
+ (reshape_init_array): Likewise.
+
+2006-12-05 Aldy Hernandez <aldyh@redhat.com>
+
+ Merge from gimple-tuples-branch.
+
+ 2006-10-05 Aldy Hernandez <aldyh@redhat.com>
+
+ * cp-gimplify.c (cp_gimplify_expr): Adjust for GIMPLE_MODIFY_STMT.
+ (cxx_omp_clause_apply_fn): Adjust for GIMPLE_MODIFY_STMT.
+ (cxx_omp_clause_copy_ctor): Same.
+ (cxx_omp_clause_assign_op): Same.
+
+ 2006-09-28 Aldy Hernandez <aldyh@redhat.com>
+
+ * cp-tree.h (union lang_tree_node): Gimple statements do not
+ have a TREE_CHAIN.
+ (TREE_INDIRECT_USING): Look in base.
+
+2006-12-04 Jan Hubicka <jh@suse.cz>
+
+ * cp-objcp-common.c (cp_expr_size): Return NULL in the case
+ size is undefined.
+
+2006-12-04 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29733
+ * pt.c (tsubst_decl): Disallow variables of function type.
+
+ PR c++/29632
+ * call.c (add_builtin_candidate): Do not permit NULL pointer
+ constants to be compared with template parameters.
+
+2006-12-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * pt.c (for_each_template_parm_r) <INTEGER_TYPE>: New case.
+ Call for_each_template_parm on TYPE_MIN_VALUE and TYPE_MAX_VALUE.
+
+2006-12-03 Richard Henderson <rth@redhat.com>
+ Andrew Pinski <pinskia@gmail.com>
+
+ PR C++/14329
+ * error.c (cp_printer) <'D'>: Handle DECL_DEBUG_EXPR.
+
+2006-12-02 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/30033
+ * decl.c (cp_tree_node_structure): Handle STATIC_ASSERT.
+
+2006-12-02 Kazu Hirata <kazu@codesourcery.com>
+
+ * name-lookup.c: Follow spelling conventions.
+
+2006-12-01 Geoffrey Keating <geoffk@apple.com>
+
+ * decl.c (poplevel): Check DECL_INITIAL invariant.
+ (duplicate_decls): Preserve DECL_INITIAL when eliminating
+ a new definition in favour of an old declaration.
+ (start_preparsed_function): Define and document value of
+ DECL_INITIAL before and after routine.
+ (finish_function): Check DECL_INITIAL invariant.
+ * parser.c
+ (cp_parser_function_definition_from_specifiers_and_declarator):
+ Skip duplicate function definitions.
+
+2006-12-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/30022
+ * typeck.c (type_after_usual_arithmetic_conversions):
+ Fix assertion for vector types.
+ (build_binary_op): Use temporary for inner type of vector types.
+
+2006-12-01 Ryan Mansfield <rmansfield@qnx.com>
+
+ PR c++/29066
+ * typeck.c (build_binary_op): Fix pointer to member function
+ comparison for ptrmemfunc_vbit_in_delta targets.
+
+2006-12-01 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/18313
+ * decl.c (grokdeclarator): Warn for type qualifiers on return
+ type for non-dependent types.
+ * pt.c (tsubst_function_type): Warn for type qualifiers on
+ return type for dependent types.
+
+2006-11-30 Geoffrey Keating <geoffk@apple.com>
+
+ * rtti.c (get_tinfo_decl): Handle return value from
+ pushdecl_top_level_and_finish.
+
+2006-11-29 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/29022
+ * parser.c (cp_parser_class_head): Move processing
+ of any base classes to...
+ (cp_parser_class_specifier) ...here. Take an extra
+ tree* parameter for any base classes. Only process
+ them if the opening brace was found.
+
+2006-11-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/29735
+ * decl.c (grokfndecl): Check main's type after applying
+ attributes, not before.
+
+2006-11-27 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (build_vcall_offset_vtbl_entries): Do not add vcall
+ entries for a primary construction virtual table.
+
+2006-11-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29886
+ * parser.c (cp_parser): Add in_function_body.
+ (cp_parser_new): Initialize it.
+ (cp_parser_primary_expression): Use parser->in_function_body
+ instead of at_function_scope_p.
+ (cp_parser_asm_definition): Likewise.
+ (cp_parser_direct_declarator): Likewise.
+ (cp_parser_class_specifier): Clear parser->in_function_body.
+ (cp_parser_constructor_declarator_p): Use parser->in_function_body
+ instead of at_function_scope_p.
+ (cp_parser_function_body_after_declarator): Set
+ parser->in_function_body.
+
+2006-11-21 Douglas Gregor <doug.gregor@gmail.com>
+
+ * cp-tree.def (STATIC_ASSERT): New.
+ * cp-objcp-common.c (cp_tree_size): Handle STATIC_ASSERT.
+ * error.c (dump_decl): Handle STATIC_ASSERT.
+ * cp-tree.h (STATIC_ASSERT_CONDITION): New.
+ (STATIC_ASSERT_MESSAGE): New.
+ (STATIC_ASSERT_SOURCE_LOCATION): New.
+ (struct tree_static_assert): New.
+ (enum cp_tree_node_structure_enum): Add TS_CP_STATIC_ASSERT.
+ (union lang_tree_node): Add static_assertion.
+ (finish_static_assert): Declare.
+ * cxx-pretty-print.c (pp_cxx_statement): Handle STATIC_ASSERT.
+ (pp_cxx_declaration): Handle STATIC_ASSERT.
+ * pt.c (instantiate_class_template): Handle
+ STATIC_ASSERT members.
+ (tsubst_expr): Handle STATIC_ASSERT statements.
+ * semantics.c (finish_static_assert): New.
+ * lex.c (D_CPP0X): New.
+ (reswords): Add static_assert keyword.
+ (init_reswords): If not flag_cpp0x, mask out C++0x keywords.
+ * parser.c (cp_parser_block_declaration): Parse static
+ assertions.
+ (cp_parser_static_assert): New.
+ (cp_parser_member_declaration): Parse static assertions.
+
+2006-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/29570
+ * decl.c (cp_finish_decl): Check for value dependent brace enclosed
+ scalar initializer.
+
+ PR c++/29734
+ * cp-tree.h (WANT_VECTOR): Define.
+ (WANT_ARITH): Add WANT_VECTOR.
+ * cvt.c (build_expr_type_conversion): Handle vector types.
+ * typeck.c (build_unary_op): Add WANT_VECTOR to
+ build_expr_type_conversion flags.
+
+2006-11-20 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/29475
+ * cp-tree.h (enforce_access, perform_or_defer_access_check): Added an
+ extra argument that represents the declaration to use to print
+ potential error messages.
+ * init.c (build_offset_ref): Adjusted the call to
+ perform_or_defer_access_check.
+ * class.c (alter_access, resolve_address_of_overloaded_function):
+ Likewise.
+ * decl.c (make_typename_type, make_unbound_class_template): Likewise.
+ * search.c (lookup_member): Likewise.
+ * friend.c (add_friend): Likewise.
+ * parser.c (cp_parser_template_id,
+ cp_parser_pre_parsed_nested_name_specifier): Likewise.
+ * semantics.c (finish_non_static_data_member,
+ check_accessibility_of_qualified_id, finish_id_expression): Likewise.
+ (pop_to_parent_deferring_access_checks, perform_access_checks,
+ perform_or_defer_access_check): Adjusted the call to enforce_access.
+ * call.c (enforce_access): Use the new extra argument to build the
+ error message.
+ (build_op_delete_call): Adjusted the call to
+ perform_or_defer_access_check.
+ (build_over_call): Likewise.
+
+2006-11-16 Dirk Mueller <dmueller@suse.de>
+
+ * name-lookup.c (begin_scope): Use GGC_CNEW instead of
+ GGC_NEW and memset.
+
+2006-11-13 Roger Sayle <roger@eyesopen.com>
+
+ * rtti.c (get_pseudo_ti_init): Ensure that the offset field of the
+ base type info initializer has the correct type.
+
+2006-11-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29518
+ * pt.c (coerce_template_parms): Do not skip_evaluation while
+ substituting template arguments.
+
+2006-11-11 Richard Guenther <rguenther@suse.de>
+
+ * typeck.c (build_unary_op): Remove handling of FIX_CEIL_EXPR,
+ FIX_FLOOR_EXPR and FIX_ROUND_EXPR.
+
+2006-11-03 Roger Sayle <roger@eyesopen.com>
+
+ * call.c (build_op_delete_call): Test user-visible type against
+ size_type_node, instead of against the internal type, sizetype.
+ * class.c (type_requires_array_cookie): Likewise.
+ * mangle.c (write_builtin_type) <INTEGER_TYPE>: Remove special
+ handling of TYPE_IS_SIZETYPE.
+ * typeck.c (type_after_usual_arithmetic_conversions): Remove
+ special case handling of TYPE_IS_SIZETYPE.
+ (comptypes): Likewise.
+
+2006-11-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * decl.c (get_atexit_node): Reference atexit, not __cxa_exit.
+ if targetm.cxx.use_atexit_for cxa_atexit.
+ (start_cleanup_fn): Likewise.
+ (register_dtor_fn): Likewise.
+
+2006-09-25 Geoffrey Keating <geoffk@apple.com>
+
+ * decl2.c (cp_write_global_declarations): Rename from
+ cp_finish_file.
+ * cp-lang.c (finish_file): Don't call cp_finish_file.
+ * cp-tree.h (cp_write_global_declarations): Rename from
+ cp_finish_file.
+ * cp-objcp-common.h (LANG_HOOKS_WRITE_GLOBALS): Define to
+ cp_write_global_declarations.
+
+2006-10-31 Geoffrey Keating <geoffk@apple.com>
+
+ * name-lookup.c (get_anonymous_namespace_name): New.
+ (push_namespace_with_attribs): Use get_anonymous_namespace_name.
+ * decl2.c (start_objects): Update for rename of
+ get_file_function_name_long.
+
+2006-10-30 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/28704
+ * decl.c (grokdeclarator): Duplicate diagnostic message
+ for easier translation.
+ * decl.c (grokdeclarator): Fix line-wrapping.
+
+2006-10-30 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/6321
+ * decl.c (grokfndecl): Use check_main_parameter_types.
+
+2006-10-30 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/28669
+ * decl.c (grokfndecl): Duplicate warning message for
+ easier translation.
+
+2006-10-30 Dirk Mueller <dmueller@suse.de>
+
+ * typeck.c (build_unary_op): Fix indenting. Use G_().
+
+2006-10-29 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/29089
+ * typeck.c (build_unary_op): Duplicate warning message
+ for easier translation.
+
+2006-10-29 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/16307
+ * typeck.c (build_array_ref): Warn for char subscriptions
+ on pointers.
+
+2006-10-29 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl.c: Fix a comment typo.
+
+2006-10-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/29295
+ * typeck.c (build_unary_op): Use same_type_p when comparing to
+ boolean type.
+
+2006-10-29 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/29033
+ * typeck.c (build_binary_op): Duplicate warning message
+ for better translation.
+
+2006-10-23 Rafael Avila de Espindola <rafael.espindola@gmail.com>
+
+ * decl.c (builtin_function_1): Move common code to
+ add_builtin_function.
+ (builtin_function): Rename to cxx_builtin_function.
+ Change the signature.
+ * call.c: Include langhooks.h.
+ (build_java_interface_fn_ref): Replace calls to
+ builtin_function with add_builtin_function.
+ * Make-lang.in (cp/call.o): Depend on langhooks.h.
+ * cp-objcp-common.h (LANG_HOOKS_BUILTIN_FUNCTION): Define as
+ cxx_builtin_function.
+ * cp-tree.h (builtin_function): Rename to cxx_builtin_function.
+ Change the signature.
+
+2006-10-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20647
+ * rtti.c (tinfo_base_init): The type info string is always global.
+
+2006-10-20 Lee Millward <lee.millward@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/28053
+ * decl2.c (grokbitfield): Detect invalid non-integral
+ types earlier when possible.
+
+2006-10-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ PR c++/26884
+ * typeck2.c (digest_init): Raise error upon attempts to
+ initialize arrays with variables.
+
+2006-10-17 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/27952
+ * cp-tree.h (xref_basetypes): Return bool instead of void.
+ * decl.c (xref_basetypes): Adjust definition. Return false
+ if the class bases are invalid.
+ * parser.c (cp_parser_class_head): Check the return value
+ from xref_basetypes.
+
+2006-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/28261
+ * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Add
+ comment.
+
+ PR c++/28261
+ * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): New
+ function.
+ (cp_parser_constructor_declarator_p): Use it.
+ (cp_parser_check_type_definition): Return a value indicating
+ whether or not the definition is valid.
+ (cp_parser_enum_specifier): Skip invalid enum definitions.
+
+2006-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29039
+ * typeck2.c (build_functional_cast): Don't zero-initialize
+ non-PODs; instead, call their constructors.
+ * method.c (synthesize_method): Always build mem-initializers, if
+ we're synthesizing the default constructor.
+
+2006-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27270
+ * decl.c (reshape_init_class): Move check for designated
+ to ...
+ * parser.c (cp_parser_initializer_list): ... here.
+ * pt.c (tsubst_copy_and_build): Use finish_compound_literal.
+
+2006-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27270
+ * typeck2.c (process_init_constructor_array): Reword comment.
+ * pt.c (tsubst_copy_and_built): Call reshape_init before calling
+ digest_init.
+
+ PR c++/29408
+ * parser.c (cp_parser_using_declaration): Stop parsing when
+ something goes wrong with an access declaration.
+
+ PR c++/29435
+ * typeck.c (cxx_sizeof_or_alignof_type): Complete non-dependent
+ types when their sizes are required. Refine test for VLAs.
+
+ PR c++/28211
+ * parser.c (cp_parser_template_argument): Don't consider "&var" a
+ possible constant-expression.
+ * pt.c (convert_nontype_argument): Refine handling of arguments of
+ pointer type.
+
+2006-10-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/28506
+ * parser.c (function_declarator_p): New function.
+ (cp_parser_init_declarator): Use it.
+ (cp_parser_member_declaration): Likewise.
+
+2006-10-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29318
+ * rtti.c (get_tinfo_decl): Refuse to create type info objects for
+ variably modified types.
+
+2006-10-12 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/27961
+ * decl.c (start_decl): Return error_mark_node if a
+ function is initialized like a variable.
+ (check_var_type): If a variable of field is declared void,
+ set the type to error_mark_node.
+ (grokdeclarator): Check the return type of check_var_type.
+ * class.c (finish_struct_1): Robustify.
+
+2006-10-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29175
+ * decl.c (check_initializer): Issue errors about trying to
+ initialize arrays whose elements have variable size.
+
+2006-10-11 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/29024
+ * cp-tree (struct cp_decl_specifier_seq): Rename to
+ conflicting_specifiers_p
+ * parser.c (cp_parser_set_storage_class): Set
+ conflicting_specifiers_p for the input decl specifier
+ if a typedef specifier is present. Rename uses of
+ multiple_specifiers_p to conflicting_specifiers_p.
+ (cp_parser_decl_specifier_seq) <RID_TYPEDEF>: If a storage
+ class specifier has already been set for this declaration,
+ set conflicting_specifiers_p to true on the decl_specs.
+ * decl.c (grokdeclarator): Rename uses of
+ multiple_specifiers_p to conflicting_specifiers_p.
+
+2006-10-10 Brooks Moses <bmoses@stanford.edu>
+
+ * Make-lang.in: Added "c++.pdf" target support.
+
+2006-10-10 Richard Guenther <rguenther@suse.de>
+
+ PR rtl-optimization/29323
+ * decl.c (finish_function): Set TREE_NOTHROW only for
+ functions that bind local.
+
+2006-10-09 Richard Henderson <rth@redhat.com>
+
+ Revert emutls patch.
+
+2006-10-04 Richard Henderson <rth@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (grokvardecl): Don't error if !have_tls.
+ (grokdeclarator): Likewise.
+ * parser.c (cp_parser_omp_threadprivate): Likewise.
+
+2006-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29020
+ * friend.c (do_friend): Improve comments; add assertion.
+ * parser.c (cp_parser_nested_name_specifier_opt): Resolve
+ typenames for qualified names used in declarations, even when
+ caching qualified name lookup.
+
+ PR c++/29138
+ * decl2.c (grokfield): Don't handle access declarations here.
+ * parser.c (cp_parser_using_declaration): Handle access
+ declarations too.
+ (cp_parser_block_declaration): Adjust calls to
+ cp_parser_using_declaration.
+ (cp_parser_member_declaration): Likewise. Use
+ cp_parser_using_declaration to look for access_declarations.
+
+2006-10-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/29291
+ * init.c (build_new): Check for invalid init.
+
+2006-10-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29226
+ * typeck.c (cxx_sizeof_or_alignof_type): Tidy. In templates, do
+ not try to actually evaluate sizeof for a VLA type.
+
+2006-10-01 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29105
+ * pt.c (tsubst_baselink): Substituteinto the qualifying scope.
+ * semantics.c (baselink_for_fns): Build a baselink, even when
+ processing a template.
+
+ PR c++/29080
+ * parser.c (cp_parser_postfix_dot_deref_expression): Use
+ BASELINK_ACCESS_BINFO as the qualifying scope when calling
+ adjust_result_of_qualified_name_lookup.
+
+2006-09-25 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/27329
+ PR c++/26938
+ * cp-tree.h (redeclare_class_template): Adjust declaration
+ to return bool instead of void.
+ * pt.c (redeclare_class_template): Update definition.
+ Return false on error.
+ * decl.c (xref_tag): Return error_mark_node if
+ redeclare_class_template returned false.
+
+ PR c++/27667
+ * cp-tree.h (begin_specialization): Return bool
+ instead of void.
+ * pt.c (check_specialization_scope): Likwise.
+ Adjust comment. Return false if a specialization
+ isn't permitted in the current scope.
+ (begin_specialization): Use the return value of
+ check_specialization_scope.
+ * parser.c (cp_parser_explicit_specialization): If
+ begin_specialization returned false, skip the rest
+ of the specialization.
+
+2006-09-21 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29016
+ * typeck.c (build_unary_op): Don't form an ADDR_EXPR around a
+ BASELINK.
+
+2006-09-21 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/28861
+ * decl.c (shadow_tag): Return error_mark_node
+ if maybe_process_partial_specialization failed.
+
+ PR c++/28303
+ * decl.c (grokdeclarator): Return error_mark_node on
+ declaration with two or more data types.
+
+2006-09-20 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR target/27650
+ * class.c (check_for_override): Remove dllimport from virtual
+ methods.
+
+2006-09-18 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR c++/29087
+ * parser.c (cp_parser_labeled_statement): Return nothing. Do
+ not take in_statement_expr and in_compound as arguments. Rename
+ to cp_parser_label_for_labeled_statement. Parse only the label,
+ not the statement.
+ (cp_parser_statement): Parse the statement of a labeled-statement
+ from here, using tail recursion.
+
+2006-09-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/29002
+ * init.c (build_zero_init): If we have an error mark node for
+ the array size, return.
+
+2006-09-10 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <jason@redhat.com>
+
+ PR c++/28996
+ * cvt.c (convert_to_void): Strip COMPONENT_REF to functions.
+
+2006-09-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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 <pinskia@physics.uc.edu>
+
+ 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 <jason@redhat.com>
+
+ 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 <simartin@users.sourceforge.net>
+
+ PR c++/28284
+ * pt.c (fold_non_dependent_expr): Make sure expr is not
+ dereferenced if it is NULL.
+
+2006-09-06 Zak Kipling <zak@transversal.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <jason@redhat.com>
+
+ 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 <jason@redhat.com>
+
+ 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 <nathan@codesourcery.com>
+
+ PR 23287 Revert my 2006-09-01 patch.
+ * parser.c: Reverted.
+ * pt.c: Reverted.
+
+2006-09-02 Lee Millward <lee.millward@codesourcery.com>
+
+ 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 <jakub@redhat.com>
+
+ 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 <nathan@codesourcery.com>
+
+ 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 <jason@redhat.com>
+
+ 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 <pinskia@physics.uc.edu>
+
+ 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 <joern.rennecke@st.com>
+
+ PR c++/28139
+ * except.c (expand_start_catch_block): Use correct types for bitwise
+ copy.
+
+2006-08-28 Jason Merrill <jason@redhat.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <lee.millward@codesourcery.com>
+
+ 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 <joseph@codesourcery.com>
+
+ 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 <lee.millward@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <mark@codesourcery.com>
+
+ PR c++/28056
+ * decl.c (grokdeclarator): Disallow declarations with qualified
+ names in local scopes.
+
+2006-08-25 Nathan Sidwell <nathan@codesourcery.com>
+
+ 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 <dannysmith@users.sourceforge.net>
+
+ 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 <jason@redhat.com>
+
+ PR c++/27714
+ * pt.c (push_template_decl_real): A friend template with class
+ scope isn't primary.
+
+2006-08-23 Benjamin Smedberg <benjamin@smedbergs.us>
+
+ 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 <jason@redhat.com>
+
+ 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 <pinskia@physics.uc.edu>
+
+ PR C++/28450
+ * cp/init.c (build_zero_init): Handle VECTOR_TYPE and
+ COMPLEX_TYPEs.
+
+2006-08-22 Simon Martin <simartin@users.sourceforge.net>
+
+ 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 <jason@redhat.com>
+
+ 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 <jason@redhat.com>
+
+ 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 <lee.millward@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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) <case CONSTRUCTOR>: Robustify.
+
+2006-08-17 Paolo Bonzini <bonzini@gnu.org>
+
+ PR c++/28573
+ * semantics.c (finish_offsetof): Add new argument to fold_offsetof.
+
+2006-08-16 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/28302
+ * typeck.c (build_unary_op <case BIT_NOT_EXPR:>): Don't call
+ perform_integral_promotions for non integral type.
+
+2006-08-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/28385
+ * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template
+ if arg is a function.
+
+2006-08-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/28593
+ * init.c (build_new): Return early on invalid placement.
+
+2006-08-15 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/28594
+ * pt.c (process_template_parm): Robustify.
+
+2006-08-14 Steve Ellcey <sje@cup.hp.com>
+
+ PR c++/28288
+ PR c++/14556
+ * operators.def: Remove <?, ?>, <?=, and >?= 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 <jason@redhat.com>
+
+ PR c++/28559
+ * parser.c (cp_parser_elaborated_type_specifier): Also ignore
+ attributes applied to a TYPENAME_TYPE.
+
+2006-08-09 Lee Millward <lee.millward@codesourcery.com>
+
+ 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 <lee.millward@codesourcery.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <rguenther@suse.de>
+
+ PR c++/28479
+ Revert
+ 2006-07-05 Richard Guenther <rguenther@suse.de>
+ Andrew Pinski <pinskia@gcc.gnu.org>
+
+ PR c++/27084
+ * cp-objcp-common.c (cxx_types_compatible_p): Ignore
+ top level qualifiers for pointer type comparisons.
+
+2006-08-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/28557
+ * pt.c (tsubst_baselink): Substitute into BASELINK_OPTYPE.
+
+2006-07-31 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <sje@cup.hp.com>
+
+ PR c++/28432
+ * decl2.c (check_classfn): Remove early return.
+ * search.c (lookup_member): Return NULL with bad type.
+
+2006-08-01 Steve Ellcey <sje@cup.hp.com>
+
+ PR c++/28256
+ * decl.c (check_initializer): Check for 1 initializer on scalar types.
+
+2006-08-01 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR debug/23336
+ * pt.c (tsubst_copy_and_build): Mark used enum types.
+ * semantics.c (finish_id_expression): Likewise.
+
+2006-07-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/6634
+ * decl.c (grokdeclarator): Check whether "long" or "short" was
+ specified for non-integral types.
+
+2006-07-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies.
+
+2006-07-28 Lee Millward <lee.millward@codesourcery.com>
+
+ 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 <kazu@codesourcery.com>
+
+ * cp-tree.h: Fix a comment typo.
+
+2006-07-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27572
+ * decl.c (grokdeclarator): Return error_mark_node after invalid
+ typedef.
+
+2006-07-23 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR c++/28460
+ * decl.c (grokvardecl): Use FROB_CONTEXT.
+ * pt.c (register_specialization): Likewise.
+
+2006-07-23 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <jason@redhat.com>
+
+ * 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 <mrs@apple.com>
+
+ * decl2.c (determine_visibility_from_class): Don't use hidden
+ visibility for explicit instantiations.
+
+2006-07-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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 <jason@redhat.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ PR c++/28337
+ * typeck.c (build_binary_op): Short-circuit pointer arithmetic in
+ templates.
+
+2006-07-18 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <lee.millward@gmail.com>
+
+ 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 <sje@cup.hp.com>
+
+ PR c++/27495
+ * search.c (adjust_result_of_qualified_name_lookup): Change
+ assert to part of if statement.
+
+2006-07-17 Steve Ellcey <sje@cup.hp.com>
+
+ PR c++/28291
+ * decl.c (reshape_init_class): Return error_mark_node on error.
+
+2006-07-17 Steve Ellcey <sje@cup.hp.com>
+
+ PR c++/28304
+ * decl2.c (check_classfn): Return NULL_TREE on error.
+
+2006-07-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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 <jakub@redhat.com>
+
+ 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 <lee.millward@gmail.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/28343
+ * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node.
+ * decl2.c (grokfield): Likewise.
+
+2006-07-12 Geoffrey Keating <geoffk@apple.com>
+
+ * decl2.c (determine_visibility): Don't change visibility of
+ function locals because of -fvisibility-inlines-hidden.
+
+2006-07-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/28217
+ * semantics.c (note_decl_for_pch): Don't premangle templates.
+
+2006-07-12 Martin Michlmayr <tbm@cyrius.com>
+
+ * typeck.c (string_conv_p): Remove spurious quotation mark in
+ warning.
+
+2006-07-07 Lee Millward <lee.millward@gmail.com>
+ Andrew Pinski <pinskia@gmail.com>
+
+ 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 <jason@redhat.com>
+
+ PR c++/28279
+ * decl2.c (finish_static_data_member_decl): Don't assert
+ TREE_PUBLIC.
+
+2006-07-05 Jason Merrill <jason@redhat.com>
+
+ 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 <rguenther@suse.de>
+ Andrew Pinski <pinskia@gcc.gnu.org>
+
+ PR c++/27084
+ * cp-objcp-common.c (cxx_types_compatible_p): Ignore
+ top level qualifiers for pointer type comparisons.
+
+2006-07-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/28215
+ * method.c (make_thunk): Unset DECL_USE_TEMPLATE and
+ DECL_TEMPLATE_INFO.
+
+2006-06-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/26577
+ * call.c (build_new_method_call): Force evaluation of the
+ instance pointer, not the object.
+
+2006-06-30 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl2.c: Fix a comment typo.
+
+2006-06-30 Jason Merrill <jason@redhat.com>
+
+ 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 <jason@redhat.com>
+
+ 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 <jason@redhat.com>
+
+ PR c++/27424
+ * pt.c (convert_template_argument): Pass all template arguments
+ on to coerce_template_template_parms.
+
+2006-06-25 Lee Millward <lee.millward@gmail.com>
+ Mark Mitchell <mark@codesuorcery.com>
+
+ 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 <lee.millward@gmail.com>
+
+ 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 <sje@cup.hp.com>
+
+ PR c++/28114
+ * name-lookup.c (pushtag): Return if we have error_mark_node.
+
+2006-06-23 Steve Ellcey <sje@cup.hp.com>
+
+ PR c++/27019
+ * typeck2.c (process_init_constructor_array): Set ce->value on errors.
+
+2006-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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 <dannysmith@users.sourceforge.net>
+
+ PR target/27789
+ * decl.c (start_decl): Check that dllimports are not initialized.
+
+2006-06-22 Lee Millward <lee.millward@gmail.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/28111
+ * pt.c (determine_specialization): Check for invalid decls.
+
+ PR c++/28110
+ * pt.c (unify) <case TEMPLATE_PARM_INDEX>: Check for invalid
+ parameters.
+
+ PR c++/28109
+ * rtti.c (get_tinfo_decl_dynamic): Robustify.
+
+2006-06-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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 <mark@codesourcery.com>
+
+ * pt.c (instantiate_template): Fix typo in comment.
+
+2006-06-19 Richard Guenther <rguenther@suse.de>
+
+ * parser.c (CP_LEXER_BUFFER_SIZE): Adjust to assure near
+ power-of-two token vector size.
+
+2006-06-16 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <gdr@integrable-solutions.net>
+
+ * typeck.c (build_modify_expr): Tidy diagnostic message.
+
+2006-06-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/28018
+ * typeck.c (build_modify_expr): Disallow array assignment.
+
+2006-06-14 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cp-tree.def: Fix typo.
+
+2006-06-13 Mark Mitchell <mark@codesourcery.com>
+
+ 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 <jakub@redhat.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <roger@eyesopen.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27804
+ * init.c (constant_value_1): Return decl instead of error_mark_node
+ for invalid initializers.
+
+2006-06-01 Andrew Pinski <pinskia@physics.uc.edu>
+
+ 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 <pinskia@physics.uc.edu>
+
+ PR c++/26740
+ * typeck.c (build_unary_op): Mark the function as being used.
+
+2006-06-01 Alexandre Oliva <aoliva@redhat.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
+
+ 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 <kazu@codesourcery.com>
+
+ * pt.c (convert_nontype_argument): Fix a typo in an error
+ message.
+
+2006-05-28 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl.c, decl2.c, parser.c: Fix comment typos. Follow
+ spelling conventions.
+
+2006-05-24 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20103
+ * decl.c (cp_make_fname_decl): Don't set DECL_INITIAL to
+ error_mark_node to indicate an initialization is OK.
+ (start_decl): Likewise. Adjust call to start_decl_1.
+ (start_decl_1): Add initialized parameter. Simplify.
+ * except.c (initialize_handler_parm): Adjust call to
+ setart_decl_1.
+ (expand_start_catch_block): Let cp_finish_decl initialize catch
+ parameters.
+ * cp-tree.h (start_decl_1): Adjust prototype.
+ * pt.c (tsubst_expr): Don't set DECL_INITIAL to error_mark_node.
+ (instantiate_decl): Let cp_finish_decl handle initialization.
+ * semantics.c (finish_compound_literal): Create a temporary
+ variable for the literal.
+ * typeck.c (build_unary_op): Remove COMPOUND_LITERAL_P special
+ cases.
+ * decl2.c (finish_static_data_member_decl): Don't set
+ DECL_INITIAL.
+ (grokfield): Do not try to initialize functions.
+
+2006-05-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20173
+ * pt.c (determine_specialization): Disallow partial
+ specializations of templates.
+
+2006-05-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27716
+ * typeck.c (build_modify_expr): Test arguments for error_operand_p.
+
+ * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE.
+
+2006-05-21 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27210
+ * cp-tree.h (cp_save_expr): New function.
+ * init.c (build_new): Correct logic for zero-element array
+ warning. Use cp_save_expr.
+ * tree.c (cp_save_expr): New function.
+
+2006-05-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27398
+ * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE
+ or void_type_node.
+
+2006-05-19 Mike Stump <mrs@apple.com>
+
+ * typeck.c (default_conversion): Remove static.
+
+2006-05-19 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/26433
+ * cp-tree.h (begin_function_try_block): Change prototype.
+ (finish_function_handler_sequence): Likewise.
+ * parser.c (cp_parser_function_try_block): Adjust calls.
+ * pt.c (tsubst_expr): Adjust calls.
+ * semantics.c (begin_function_try_block): Create an artificial
+ outer scope.
+ (finish_function_handler_sequence): Close it.
+
+2006-05-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27471
+ PR c++/27506
+ * typeck.c (decay_conversion): Convert bitfields to their declared
+ types here. Improve documentation. Avoid use of cp_convert.
+ (default_conversion): Make it static. Perform integral promotions
+ before lvalue-to-rvalue, function-to-pointer, and array-to-pointer
+ conversions.
+ * init.c (build_init): Remove.
+ (expand_default_init): Do not call rvalue.
+ * call.c (null_ptr_cst_p): Robustify.
+ (build_conditional_expr): Tidy.
+ * except.c (build_throw): Do not perform lvalue-to-rvalue
+ conversion on operand before initializing temporary.
+ * tree.c (convert.h): Include it.
+ (convert_bitfield_to_declared_type): Use convert_to_integer, not
+ cp_convert.
+ (rvalue): Don't convert bitfields to their declared type here.
+ * cp-tree.h (build_init): Remove.
+ (default_conversion): Likewise.
+ * typeck2.c (build_m_component_ref): Do not perform
+ lvalue-to-rvalue, function-to-pointer, or array-to-pointer
+ conversions here. Correct error message.
+
+2006-05-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/26122
+ * decl2.c (check_member_template): Remove checks for virtual
+ functions.
+ * parser.c (cp_parser_function_specifier_opt): Complain about
+ virtual templates.
+ (cp_parser_pure_specifier): Likewise.
+
+ PR c++/26068
+ * 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,
+ to cp_parser_set_storage_class.
+
+2006-05-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/27491
+ * semantics.c (finish_compound_literal): Only set TREE_HAS_CONSTRUCTOR
+ on CONSTRUCTORs.
+
+ PR middle-end/27415
+ * parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
+ on combined parallel workshare constructs.
+ * pt.c (tsubst_expr): Copy OMP_PARALLEL_COMBINED flag.
+
+2006-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR driver/26885
+ * Make-lang.in (GXX_OBJS): Replace gcc.o with $(GCC_OBJS).
+
+2006-05-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27339
+ * cp-tree.h (perform_access_checks): New function.
+ * semantics.c (perform_access_checks): New function.
+ (perform_deferred_access_checks): Use it.
+ * parser.c (cp_parser_simple_declaration): Adjust call to
+ cp_parser_init_declarator.
+ (cp_parser_type_parameter): Do not defer checks in default
+ arguments.
+ (cp_parser_explicit_specialization): Adjust call to
+ cp_parser_single_declaration.
+ (cp_parser_init_declarator): Perform template-parameter access
+ checks.
+ (cp_parser_parameter_declaration): Do not defer checks for
+ template parameter default arguments.
+ (cp_parser_template_declaration_after_export): Gather access
+ checks for template parameters, and pass them to
+ cp_parser_single_declaration.
+ (cp_parser_template_parameter_access_checks): New function.
+ (cp_parser_single_declaration): Add checks parameter.
+
+ PR c++/27505
+ * call.c (convert_like_real): Convert bitfields to their declared
+ types when forming an rvalue.
+ * tree.c (convert_bitfield_to_declared_type): New function.
+ (rvalue): Use it.
+ * cp-tree.h (convert_bitfield_to_declare_type): Declare it.
+
+2006-05-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27582
+ * pt.c (any_dependent_template_arguments_p): Return early on invalid
+ argument list.
+
+ PR c++/27581
+ * search.c (adjust_result_of_qualified_name_lookup): Skip on
+ invalid context_class.
+
+ PR c++/27315
+ * pt.c (do_decl_instantiation): Return early on invalid decl.
+
+ PR c++/27559
+ * pt.c (push_template_decl_real): Return error_mark_node instead
+ of broken decl.
+
+ PR c++/27496
+ * pt.c (tsubst_friend_class): Return early on invalid friend
+ declarations.
+
+2006-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Make-lang.in (cp/decl.o): Add dependency on $(TARGET_H).
+ (cp/decl2.o): Likewise.
+ (cp/typeck.o): Likewise.
+ (cp/cvt.o): Likewise.
+ (cp/parser.o): Likewise.
+ (cp/call.o): Replace target.h with $(TARGET_H).
+
+2006-05-14 Alexandre Oliva <aoliva@redhat.com>
+
+ * pt.c (build_non_dependent_expr): Leave ADDR_EXPR of
+ COMPONENT_REF alone.
+
+2006-05-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27547
+ * decl.c (copy_fn_p): Return early on non-member functions.
+
+2006-05-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27447
+ * decl2.c (build_memfn_type): Skip invalid functions and class types.
+
+2006-05-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27427
+ * pt.c (convert_nontype_argument): Return early on invalid arguments.
+
+ * pt.c (process_template_parm): Remove superfluous temporary.
+
+ PR c++/27430
+ * pt.c (process_template_parm): Handle erroneous non-type parameters.
+
+ PR c++/27423
+ * typeck.c (convert_for_initialization): Skip erroneous types.
+
+ PR c++/27422
+ * typeck.c (convert_arguments): Return early on args with
+ invalid types.
+
+2006-05-03 Aldy Hernandez <aldyh@redhat.com>
+
+ PR/21391
+ * typeck.c (build_static_cast_1): Save casted types in used types
+ hash table.
+ (build_reinterpret_cast_1): Same.
+ * rtti.c (build_dynamic_cast_1): Same.
+
+2006-05-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/27359
+ * parser.c (cp_parser_omp_for_loop): Only call
+ cp_parser_abort_tentative_parse if cp_parser_parse_definitely was not
+ called.
+
+2006-05-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27102
+ * decl.c (grokdeclarator): Robustify checks for defining members
+ of incomplete types.
+
+ PR c++/27309
+ * class.c (add_method): Call grok_special_member_properties.
+ * decl.c (grokdeclarator): Don't call it here.
+ (copy_fn_p): A TEMPLATE_DECL is never a copy constructor or
+ assignment operator. Set TYPE_HAS_CONSTURCTOR if DECL is a
+ constructor.
+ (start_method): Don't call grok_special_member_properties.
+ * method.c (implicitly_declare_fn): Likewise.
+ * pt.c (instantiate_class_template): Likewise.
+ * decl2.c (grokfield): Likewise.
+
+2006-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/27337
+ * cp-gimplify.c (cxx_omp_privatize_by_reference): New function.
+ * cp-tree.h (cxx_omp_privatize_by_reference): New prototype.
+ * cp-objcp-common.h (LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE): Define.
+
+2006-04-30 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27094
+ * pt.c (tsubst_default_argument): Increment function_depth around
+ call to tsubst_expr.
+ * parser.c (cp_parser_parameter_declaration): Likewise.
+ * decl2.c (mark_used): Tidy.
+
+2006-04-30 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27278
+ * decl.c (grok_op_properties): Skip operators with invalid args
+ when checking for class-type or enum-type args.
+
+2006-04-29 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/27279
+ * decl.c (copy_fn_p): Skip functions with invalid first arg.
+
+2006-04-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27292
+ * tree.c (rvalue): Convert bitfields to their declared types.
+
+ PR c++/27102
+ * typeck2.c (cxx_incomplete_type_diagnostic): Handle
+ TYPENAME_TYPE.
+
+2006-04-24 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27292
+ * typeck.c (decay_conversion): Don't adjust bitfield types.
+ (perform_integral_promotions): Treat bitfield enums as enums, not
+ as short integer types.
+ * tree.c (rvalue): Convert bitfields to their correct types.
+
+2006-04-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/19963
+ * class.c (layout_class_type): Skip fields with invalid types.
+
+2006-04-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/26912
+ * cp-tree.h (build_this_parm): Declare.
+ (grok_method_quals): Remove.
+ (build_memfn_type): Declare.
+ (build_artificial_parm): Declare.
+ (do_friend): Remove quals parameter.
+ * decl.c (build_this_parm): New function.
+ (grokfndecl): Use it. Do not pass quals to grokclassfn.
+ (grokdeclarator): Rename quals to memfn_quals. Avoid allocating
+ unnecessary TYPE_DECLs. Correct qualification of member function
+ types. Tidy.
+ * method.c (implicitly_declare_fn): Use build_this_parm.
+ * friend.c (do_friend): Remove quals parameter.
+ * decl2.c (grok_method_quals): Remove.
+ (build_memfn_type): New function.
+ (build_artificial_parm): Give it external linkage.
+ (grokclassfn): Remove quals parameter. Do not build "this"
+ PARM_DECL here.
+
+ PR c++/26534
+ * cp-tree.h (is_bitfield_expr_with_lowered_type): New function.
+ * typeck.c (is_bitfield_expr_with_lowered_type): New function.
+ (decay_conversion): Convert bitfield expressions to the correct
+ type.
+ (build_modify_expr): Remove spurious conversions.
+ * class.c (layout_class_type): Modify the type of bitfields to
+ 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 <kazu@codesourcery.com>
+
+ * decl.c: Fix comment typos.
+
+2006-04-21 Eric Christopher <echristo@apple.com>
+
+ * decl.c: Fix typo in function name.
+
+2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/26558
+ * parser.c (cp_parser_class_name): Check for invalid typenames.
+ Rearrange code.
+
+ PR c++/26739
+ * pt.c (tsubst_friend_function): Return early if
+ pushdecl_namespace_level fails.
+
+ PR c++/26036
+ * typeck.c (convert_arguments): Return error_mark_node instead of
+ error_mark_list.
+ * cp-tree.h (error_mark_list): Remove declaration.
+ * decl.c (error_mark_list): Remove definition.
+ (cxx_init_decl_processing): Do not initialize error_mark_list.
+
+ PR c++/10385
+ * rtti.c (build_dynamic_cast_1): Check for invalid conversions
+ before calling convert_to_reference.
+ * cvt.c (convert_to_reference): Assert that reftype is a
+ REFERENCE_TYPE.
+
+2006-04-19 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27102
+ * class.c (currently_open_class): Tidy.
+ * decl.c (grokdeclarator): If we encounter an erroneous
+ declarator, assume that we have already issued an error message
+ and return. Return error_mark_node instead of NULL_TREE in more
+ places. Issue errors about function definitions that do not have
+ a function declarator. Check for complete types for all function
+ definitions.
+ * cp-tree.h (cp_error_declarator): Remove.
+ (currently_open_class): Change return type.
+ * parser.c (cp_parser_id_expression): Add optional_p parameter.
+ (cp_parser_parse_diagnose_invalid_type_name): Adjust calls.
+ (cp_parser_id_expression): Likewise.
+ (cp_parser_unqualified_id): If the name is optional, return
+ NULL_TREE.
+ (cp_parser_postfix_dot_deref_expression): Adjust calls.
+ (cp_parser_type_parameter): Likewise.
+ (cp_parser_unqualified_id): Likewise.
+ (cp_parser_direct_declarator): Likewise.
+ (cp_parser_declarator_id): Add optional_p parameter.
+ (cp_parser_function_definition_from_specifiers_and_declarator):
+ Assume that start_function indicates failure only if it has issued
+ an error.
+ (cp_parser_omp_var_list_no_open): Adjust calls.
+
+2006-04-17 Janis Johnson <janis187@us.ibm.com>
+
+ PR c++/26114, c++/26115
+ * typeck.c (cxx_mark_addressable): Restore check for extra_warnings.
+ * class.c (check_field_decls): Ditto.
+
+2006-04-17 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * init.c (build_offset_ref): Remove superfluous temporary.
+
+2006-04-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/26365
+ * typeck.c (finish_class_member_access_expr): Robustify
+
+2006-04-15 Kazu Hirata <kazu@codesourcery.com>
+
+ * Make-lang.in (cp/pt.o): Depend on vecprim.h.
+ * pt.c: Include vecprim.h.
+ (inline_parm_levels): Change the type to VEC(int,heap) *.
+ (inline_parm_levels_used): Remove.
+ (maybe_begin_member_template_processing,
+ maybe_end_member_template_processing): Use VEC instead of
+ VARRAY.
+
+ * cp/call.c: Fix comment typos.
+
+2006-04-12 Mark Mitchell <mark@codesourcery.com>
+
+ * parser.c (cp_parser_init_declarator): Initialize local variables
+ aggressively.
+
+2006-04-12 Roger Sayle <roger@eyesopen.com>
+
+ * parser.c (cp_parser_init_declarator): Initialise
+ is_parenthesized_init to false to avoid compiler warning.
+
+2006-04-11 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (build_operator_new_call): Adjust prototype.
+ (build_new_method_call): Likewise.
+ (build_op_delete_call): Likewise.
+ * init.c (build_raw_new_expr): New function.
+ (build_new_1): Pass information as parameters, rather than
+ bundling it into a NEW_EXPR.
+ (build_new): Adjust accordingly.
+ (build_vec_delete_1): Adjust for changes to build_op_delete_call.
+ (build_delete): Likewise.
+ * decl.c (finish_destructor_body): Likewise.
+ * call.c (build_operator_new_call): Return the allocation function
+ used.
+ (build_op_delete_call): Take allocation function as parameter.
+ (build_special_member_call): Adjust call to build_new_method_call.
+ (build_new_method_call): Return function called.
+ * pt.c (tsubst_copy_and_build): Adjust call to
+ build_new_method_call.
+ * semantics.c (finish_call_expr): Likewise.
+ * parser.c (cp_parser_postfix_expression): Likewise.
+ * typeck2.c (cxx_incomplete_type_diagnostic): Refer to
+ "incomplete", not "undefined", types.
+
+ PR c++/26295
+ * decl.c (grokdeclarator): Remove namespace-handling code for
+ pointers-to-members.
+ * parser.c (cp_parser_ptr_operator): Check for qualified names
+ using namespaces.
+
+ PR c++/26122
+ * parser.c (cp_parser_init_declarator): Adjust logic for deciding
+ whether or not to look for a pure-specifier.
+ (cp_parser_member_declaration): Likewise.
+
+2006-04-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * decl2.c, pt.c, semantics.c: Fix comment typos.
+
+2006-04-06 Roger Sayle <roger@eyesopen.com>
+
+ * call.c (null_ptr_cst_p): Add explicit TREE_CONSTANT_OVERFLOW check.
+
+2006-04-05 Jason Merrill <jason@redhat.com>
+
+ * name-lookup.c (push_namespace_with_attribs): Temporarily disable
+ default hidden visibility for anonymous namespace.
+
+2006-03-29 Roger Sayle <roger@eyesopen.com>
+
+ PR c++/22494
+ * init.c (build_vec_delete_1): Convert BASE pointer's type to
+ the base pointer type to avoid a type mismatch in the EQ_EXPR.
+
+2006-03-24 Carlos O'Donell <carlos@codesourcery.com>
+
+ * search.c (maybe_suppress_debug_info): If
+ flag_emit_class_debug_always then don't suppress.
+
+2006-03-22 Jason Merrill <jason@redhat.com>
+
+ * name-lookup.c (push_namespace_with_attribs): Only apply hidden
+ visibility to anonymous namespaces if HAVE_GAS_HIDDEN.
+
+2006-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/26691
+ * cp-gimplify.c (cxx_omp_clause_apply_fn): Handle default arguments.
+
+2006-03-21 Jason Merrill <jason@redhat.com>
+
+ PR c++/21581
+ * parser.c (cp_parser_declaration): Support attributes on
+ anonymous namespaces.
+ * name-lookup.c (push_namespace_with_attribs): Anonymous
+ namespaces default to hidden visibility.
+
+2006-03-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/21764, c++/19238
+ * decl.c (cp_finish_decl): Call determine_visibility later.
+ (start_preparsed_function): Likewise.
+ * cp-tree.h (CP_TYPE_CONTEXT, TYPE_NAMESPACE_SCOPE_P): New macros.
+ (TYPE_CLASS_SCOPE_P, TYPE_FUNCTION_SCOPE_P): New macros.
+ * name-lookup.h (struct cp_binding_level): Add has_visibility
+ bitfield.
+ * name-lookup.c: Include c-pragma.h.
+ (push_namespace_with_attribs): Split out from push_namespace.
+ Push visibility if appropriate. Set TREE_PUBLIC on namespaces.
+ (leave_scope): Pop visibility if appropriate.
+ * decl2.c (determine_visibility_from_class): Split out from...
+ (determine_visibility): ...here. Handle function scope and
+ nested classes.
+ (import_export_decl): Move visibility handling to
+ determine_visibility_from_class.
+ * parser.c (cp_parser_declaration, cp_parser_namespace_name): Allow
+ attributes on namespace declarations.
+
+2006-03-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/6634
+ * decl.c (grokdeclarator): Do not accept long long double.
+ Reorganize checks for invalid (combinations of) type modifiers.
+ Quote modifiers in messages.
+
+2006-03-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/16387, c++/16389
+ * typeck.c (cxx_alignof_expr, cxx_sizeof_expr): New functions.
+ (cxx_sizeof_or_alignof_expr): Split out from here.
+
+2006-03-09 Diego Novillo <dnovillo@redhat.com>
+
+ Merge from gomp-20050608-branch
+
+ 2006-02-02 Diego Novillo <dnovillo@redhat.com>
+
+ * decl.c (pop_labels_1): Use appropriate pointer casting.
+ (poplevel_named_label_1): Likewise.
+ (named_label_entry_hash): Likewise.
+ (named_label_entry_eq): Likewise.
+ (check_goto): Likewise.
+ (define_label): Likewise.
+
+ 2006-01-26 Diego Novillo <dnovillo@redhat.com>
+
+ * cp-tree.h (CP_OMP_CLAUSE_INFO): Use TREE_TYPE instead
+ of TREE_BLOCK.
+ * pt.c: Use OMP_CLAUSE_CODE and OMP_CLAUSE_OPERAND
+ instead of TREE_CODE/TREE_OPERAND.
+ * semantics.c: Likewise.
+ * parser.c: Likewise.
+
+ 2005-11-10 Diego Novillo <dnovillo@redhat.com>
+
+ * parser.c (cp_parser_omp_threadprivate): Emit diagnostic if
+ target does not support TLS.
+
+ 2005-11-09 Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (redeclaration_error_message): Don't error about
+ DECL_THREAD_LOCAL_P mismatches if CP_DECL_THREADPRIVATE_P
+ (olddecl).
+
+ 2005-11-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/24735
+ * semantics.c (finish_omp_barrier, finish_omp_flush): New
+ functions.
+ * parser.c (cp_parser_omp_barrier): Call finish_omp_barrier.
+ (cp_parser_omp_flush): Call finish_omp_flush.
+ * cp-tree.h (finish_omp_barrier, finish_omp_flush): New
+ prototypes.
+
+ PR c++/24734
+ * pt.c (tsubst_expr): Handle OMP_MASTER and OMP_ORDERED.
+
+ 2005-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ * semantics.c (finish_omp_threadprivate): Error on class-scope
+ variables.
+
+ 2005-11-02 Jakub Jelinek <jakub@redhat.com>
+
+ * parser.c (cp_parser_omp_all_clauses): If some clause
+ type is not allowed, don't remove just one of the
+ clauses, but all clauses added in that loop round.
+
+ * semantics.c (finish_omp_clauses): Fix function
+ comment. Don't handle non-const or mutable specially,
+ as const and not mutable is predetermined shared and
+ that leads to double error. Don't ICE if copyin var is
+ PARM_DECL.
+
+ PR c++/24613
+ * parser.c (cp_parser_pragma): Diagnose
+ PRAGMA_OMP_SECTION outside of PRAGMA_OMP_SECTIONS
+ construct.
+
+ * semantics.c (finish_omp_threadprivate): Error if V
+ is automatic variable or has incomplete type.
+
+ 2005-11-01 Diego Novillo <dnovillo@redhat.com>
+
+ * parser.c (cp_parser_omp_all_clauses): Use
+ OMP_CLAUSE_CHAIN instead of TREE_CHAIN.
+
+ 2005-11-01 Diego Novillo <dnovillo@redhat.com>
+
+ * parser.c (cp_parser_omp_all_clauses): When emitting an
+ error message, remove the invalid clause from the list.
+
+ 2005-10-31 Diego Novillo <dnovillo@redhat.com>
+
+ * parser.c (cp_parser_omp_parallel): Do not allow 'nowait' in
+ combined parallel+workshare directives.
+
+ 2005-10-31 Richard Henderson <rth@redhat.com>
+
+ * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DTOR):
+ Use cxx_omp_clause_dtor.
+ * cp-tree.h (CP_OMP_CLAUSE_INFO): New.
+ (cxx_omp_clause_dtor): New.
+ * cp-gimplify.c (cxx_omp_clause_apply_fn): New.
+ (cxx_omp_clause_default_ctor): Use it.
+ (cxx_omp_clause_copy_ctor, cxx_omp_clause_assign_op):
+ Likewise.
+ (cxx_omp_clause_dtor): New.
+ * semantics.c (finish_omp_clauses): Rewrite cdtor
+ checking to fill in CP_OMP_CLAUSE_INFO. Don't
+ specialcase LASTPRIVATE for removal.
+ (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor,
+ cxx_omp_clause_assign_op): Move to cp-gimplify.c.
+
+ 2005-10-28 Jakub Jelinek <jakub@redhat.com>
+
+ * semantics.c (finish_omp_threadprivate): If
+ DECL_RTL_SET_P, call make_decl_rtl again so that
+ encode_section_info can update SYMBOL_REF's flags.
+
+ 2005-10-26 Jakub Jelinek <jakub@redhat.com>
+
+ * semantics.c (finish_omp_for): Don't segfault if COND
+ or INCR is NULL. If not calling c_finish_omp_for
+ right away and one of COND and INCR is NULL, issue
+ error and don't expand anything.
+
+ PR c++/24512
+ * cp-tree.h (finish_omp_for): Add PRE_BODY argument.
+ * semantics.c (finish_omp_for): Likewise. Set
+ OMP_FOR_PRE_BODY to PRE_BODY if deferring, add it
+ into the current statement list if not processing
+ template decl or pass it to c_finish_omp_for.
+
+ * parser.c (cp_parser_omp_for_loop): Expand optional DECL_EXPRs
+ into PRE_BODY statement list. Pass it to finish_omp_for.
+ * pt.c (tsubst_expr) <case OMP_FOR>: tsubst_expr also
+ OMP_FOR_PRE_BODY into PRE_BODY stmt list, pass it to
+ finish_omp_for. Put all the statements into sk_omp
+ scope.
+
+ 2005-10-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/24516
+ * parser.c (struct cp_parser): Rename in_iteration_statement
+ field to in_statement.
+ (IN_SWITCH_STMT, IN_ITERATION_STMT): Define.
+ (IN_OMP_BLOCK, IN_OMP_FOR): Change values.
+ (cp_parser_new, cp_parser_begin_omp_structured_block,
+ cp_parser_end_omp_structured_block,
+ cp_parser_omp_for_loop): Adjust for
+ in_iteration_statement renaming.
+ (cp_parser_selection_statement): Save
+ parser->in_iteration, or it temporarily with
+ IN_SWITCH_STMT for the
+ cp_parser_implicitly_scoped_statement call.
+ (cp_parser_iteration_statement): Adjust for
+ in_iteration_statement renaming. Use
+ IN_ITERATION_STMT rather than true.
+ (cp_parser_jump_statement): Adjust for
+ in_iteration_statement renaming and new values. Don't
+ error on break in a switch statement within OMP_FOR or
+ OpenMP structured block.
+
+ PR c++/24513
+ * parser.c (cp_parser_cache_group): Don't stop if next
+ token is CPP_PRAGMA_EOL and end is CPP_PRAGMA_EOL as
+ well. If current token is CPP_PRAGMA, consume
+ everything until CPP_PRAGMA_EOL inclusive.
+
+ 2005-10-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/24502
+ * semantics.c (finish_omp_for): Handle MODOP_EXPR in
+ addition to MODIFY_EXPR.
+
+ 2005-10-23 Richard Henderson <rth@redhat.com>
+
+ * cp-gimplify.c (struct cp_gimplify_ctx): Remove.
+ (bc_label): New.
+ (begin_bc_block, finish_bc_block): Use it.
+ (push_context, pop_context): Remove.
+ (cp_genericize): Don't use them. Assert bc_label is null.
+ * semantics.c (finish_omp_clauses): Create a fake data
+ element of TYPE for probing ctors.
+
+ 2005-10-23 Richard Henderson <rth@redhat.com>
+
+ * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): New.
+ (LANG_HOOKS_OMP_CLAUSE_COPY_CTOR): New.
+ (LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP): New.
+ (LANG_HOOKS_OMP_CLAUSE_DTOR): New.
+ * semantics.c (finish_omp_clauses): Look through
+ arrays when looking up special member calls. Also
+ remove FIRSTPRIVATE when LASTPRIVATE fails.
+ (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor): New.
+ (cxx_omp_clause_assign_op): New.
+ * cp-tree.h: Declare them.
+
+ 2005-10-21 Richard Henderson <rth@redhat.com>
+
+ * decl.c (check_previous_goto_1): Return false if error.
+ (check_switch_goto): Likewise.
+ (finish_case_label): Don't emit the case label on error.
+ * parser.c (struct cp_parser): Revert
+ in_switch_statement_p changes.
+ (cp_parser_labeled_statement,
+ cp_parser_selection_statement): Likewise.
+ (cp_parser_begin_omp_structured_block): Don't save...
+ (cp_parser_end_omp_structured_block): or restore
+ in_switch_statement_p.
+
+ 2005-10-21 Richard Henderson <rth@redhat.com>
+
+ * semantics.c (finish_omp_threadprivate): Set
+ decl_flags.u2sel when necessary.
+
+ 2005-10-21 Richard Henderson <rth@redhat.com>
+
+ * decl.c (poplevel_named_label_1): Restore creation of the
+ 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
+ converting to cdtor_label goto.
+
+ 2005-10-21 Richard Henderson <rth@redhat.com>
+
+ PR c++/24451
+ * decl.c (check_omp_return): Return false on error.
+ * cp-tree.h (check_omp_return): Update decl.
+ * semantics.c (finish_return_stmt): Avoid adding
+ return on error.
+
+ 2005-10-21 Richard Henderson <rth@redhat.com>
+
+ * cp-tree.h (struct language_function): Remove
+ x_named_label_uses.
+ Change x_named_labels to a hashtable.
+ (check_omp_return): Declare.
+ * decl.c (struct named_label_use_entry): Rename from
+ named_label_use_list. Remove label_decl.
+ (struct named_label_entry): Rename from
+ named_label_list. Remove old_value and next. Change
+ in_try_scope and in_catch_scope to bool. Add
+ in_omp_scope.
+ (pop_labels_1): New.
+ (pop_labels): Use it.
+ (pop_local_label, poplevel_named_label_1): New.
+ (poplevel): Use them.
+ (named_label_entry_hash, named_label_entry_eq): New.
+ (make_label_decl): Create named_labels. Move label
+ creation bits from lookup_label.
+ (declare_local_label): Tidy.
+ (identify_goto): Split out from ...
+ (check_previous_goto_1): Add exited_omp argument.
+ Handle omp scopes.
+
+ (use_label): Merge into...
+ (check_goto): ... here. Handle omp scopes.
+ (check_omp_return): New.
+ (check_previous_gotos): Merge into...
+ (define_label): ... here.
+ (save_function_data): Remove x_named_label_uses reference.
+ (finish_function): Likewise.
+ * name-lookup.h (sk_omp): New.
+ * name-lookup.c (begin_scope): Handle it.
+ * parser.c (cp_parser_omp_for): Don't create extra
+ compound stmt.
+
+ (cp_parser_omp_sections): Likewise.
+ * semantics.c (finish_return_stmt): Call check_omp_return.
+ (begin_omp_structured_block): Use sk_omp.
+ (finish_omp_structured_block): Use do_poplevel. Don't build a
+ MUST_NOT_THROW expression here.
+ (begin_omp_parallel, finish_omp_parallel): Don't create extra
+ compound statements.
+
+ 2005-10-21 Diego Novillo <dnovillo@redhat.com>
+
+ PR 24455
+ * cp/cp-tree.h (struct lang_decl_flags): Add field
+ threadprivate_p.
+ (CP_DECL_IS_THREADPRIVATE): Define.
+ * cp/semantics.c (finish_omp_threadprivate): Set. Do
+ not error out if CP_DECL_IS_THREADPRIVATE is set
+ already.
+ * cp/decl.c (duplicate_decls): Merge
+ CP_DECL_THREADPRIVATE_P.
+
+ 2005-10-20 Richard Henderson <rth@redhat.com>
+
+ * cp-gimplify.c (cp_gimplify_omp_for): New.
+ (cp_gimplify_expr): Call it.
+ * cp-tree.h (OMP_FOR_GIMPLIFYING_P): New.
+ * parser.c (struct cp_parser): Rename
+ in_iteration_statement_p to in_iteration_statement and
+ change to unsigned char. Similarly with
+ in_switch_statement. Update all users.
+ (IN_OMP_BLOCK, IN_OMP_FOR): New.
+ (cp_parser_labeled_statement): Diagnose case labels
+ binding closer to an openmp block nested than the
+ switch.
+ (cp_parser_jump_statement): Diagnose break and
+ continue labels binding closer to an openmp block than
+ an iteration or switch.
+ (cp_parser_omp_for_loop): Mark in_iteration_statement
+ for an omp for.
+ (cp_parser_begin_omp_structured_block): New.
+ (cp_parser_end_omp_structured_block): New.
+ (cp_parser_omp_structured_block): Use them.
+ (cp_parser_omp_for, cp_parser_omp_sections_scope): Likewise.
+ (cp_parser_omp_parallel): Likewise.
+
+ 2005-10-20 Richard Henderson <rth@redhat.com>
+
+ * semantics.c (begin_omp_structured_block): New.
+ (finish_omp_structured_block): New.
+ (begin_omp_parallel, finish_omp_parallel): Use them.
+ * parser.c (cp_parser_omp_structured_block): Likewise.
+ (cp_parser_omp_for): Likewise.
+ (cp_parser_omp_sections_scope): Likewise.
+ * cp-tree.h: Declare them.
+
+ 2005-10-20 Richard Henderson <rth@redhat.com>
+
+ * parser.c (cp_parser_omp_master): Return the statement.
+ (cp_parser_omp_ordered): Likewise.
+ (cp_parser_omp_construct): Set the locus for them.
+
+ 2005-10-19 Richard Henderson <rth@redhat.com>
+
+ * semantics.c (finish_omp_atomic): Revert to
+ uses_template_parms.
+
+ 2005-10-19 Richard Henderson <rth@redhat.com>
+
+ * semantics.c (finish_omp_clauses): Avoid
+ DECL_THREAD_LOCAL_P on a PARM_DECL. Remove some
+ stub asserts guaranteed to fail.
+
+ 2005-10-19 Richard Henderson <rth@redhat.com>
+
+ * 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_clause_if): Don't do error checking here.
+ (cp_parser_omp_clause_num_threads): Likewise.
+ (cp_parser_omp_clause_schedule): Likewise.
+ (cp_parser_omp_atomic): Use finish_omp_atomic.
+ (cp_parser_omp_for_loop): Don't discard DECL_EXPR.
+ Don't decompose assignment statment here. Use
+ finish_omp_for.
+
+ * pt.c (tsubst_omp_clauses): New.
+ (tsubst_expr): Handle OMP_PARALLEL, OMP_FOR, OMP_SECTIONS,
+ OMP_SINGLE, OMP_SECTION, OMP_CRITICAL, OMP_ATOMIC.
+ * semantics.c (finish_omp_clauses): New.
+ (begin_omp_parallel, finish_omp_parallel): Know Less about the
+ internals of the stmt_list stack.
+ (finish_omp_for, finish_omp_atomic): New.
+
+ 2005-10-18 Jakub Jelinek <jakub@redhat.com>
+
+ * semantics.c (cxx_omp_predetermined_sharing): New function.
+ * cp-tree.h (cxx_omp_predetermined_sharing): New prototype.
+ * cp-objcp-common.h
+ (LANG_HOOKS_OMP_PREDETERMINED_SHARING): Redefine.
+
+ 2005-10-18 Richard Henderson <rth@redhat.com>
+
+ * parser.c (cp_parser_omp_single): Use make_node and accessors
+ instead of build.
+
+ 2005-10-17 Richard Henderson <rth@redhat.com>
+
+ * parser.c (cp_parser_omp_for_loop): Handle declarations.
+
+ 2005-10-12 Richard Henderson <rth@redhat.com>
+
+ * Make-lang.in (CXX_C_OBJS): Add c-omp.o.
+ * cp-tree.h (begin_omp_parallel, finish_omp_parallel): Declare.
+ (finish_omp_threadprivate): Declare.
+ * parser.c (struct cp_lexer): Add in_pragma.
+ (cp_lexer_consume_token): Don't consume a PRAGMA_EOL
+ when in_pragma.
+ (cp_parser_skip_to_closing_parenthesis): Stop at PRAGMA_EOL.
+ (cp_parser_skip_to_end_of_statement): Likewise.
+ (cp_parser_skip_to_end_of_block_or_statement): Likewise.
+ (cp_parser_skip_to_closing_brace): Likewise.
+ (cp_parser_skip_to_pragma_eol): Reset in_pragma.
+ (cp_parser_require_pragma_eol): New.
+ (cp_parser_statement): Add in_compound argument;
+ update all callers.
+ Restart if a non-statement pragma seen outside a
+ compound.
+ (cp_parser_statement_seq_opt): Stop at PRAGMA_EOL.
+ (cp_parser_declaration_seq_opt): Likewise.
+ (cp_parser_member_specification_opt): Likewise.
+ (cp_parser_function_definition_after_decl): Likewise.
+ (cp_parser_skip_until_found): Likewise.
+ (cp_parser_cache_group): Likewise.
+ (enum pragma_omp_clause, cp_parser_omp_clause_name,
+ check_no_duplicate_clause,
+ cp_parser_omp_var_list_no_open,
+ cp_parser_omp_var_list, cp_parser_omp_clause_copyin,
+ cp_parser_omp_clause_default, cp_parser_omp_clause_if,
+ cp_parser_omp_clause_nowait,
+ cp_parser_omp_clause_num_threads,
+ cp_parser_omp_clause_ordered,
+ cp_parser_omp_clause_reduction,
+ cp_parser_omp_clause_schedule,
+ cp_parser_omp_all_clauses,
+ cp_parser_omp_structured_block, cp_parser_omp_atomic,
+ cp_parser_omp_barrier, cp_parser_omp_critical,
+ cp_parser_omp_flush, cp_parser_omp_for_loop,
+ cp_parser_omp_for, cp_parser_omp_master,
+ cp_parser_omp_ordered, cp_parser_omp_sections_scope,
+ cp_parser_omp_sections, cp_parser_omp_parallel,
+ cp_parser_omp_single, cp_parser_omp_threadprivate,
+ cp_parser_omp_construct): New.
+ (cp_parser_pragma): Handle OpenMP pragmas.
+ * semantics.c (finish_omp_threadprivate): New.
+ (begin_omp_parallel, finish_omp_parallel): New.
+
+ 2005-10-11 Richard Henderson <rth@redhat.com>
+
+ * parser.c (struct cp_token): Add pragma_kind.
+ (eof_token): Initialize it.
+ (cp_lexer_handle_pragma): Remove.
+ (cp_parser_initial_pragma): New.
+ (cp_lexer_new_main): Use it.
+ (cp_lexer_get_preprocessor_token): Initialize pragma_kind.
+ (cp_lexer_print_token): Don't handle CPP_PRAGMA.
+ (cp_parser_skip_to_pragma_eol): New.
+ (cp_parser_error): Use it.
+ (pragma_lex): New.
+
+ 2005-10-09 Richard Henderson <rth@redhat.com>
+
+ * lex.c (parse_strconst_pragma): Update for c_lex name change.
+ (handle_pragma_java_exceptions): Likewise.
+ * parser.c (cp_lexer_new_main): Likewise.
+
+ 2005-10-06 Richard Henderson <rth@redhat.com>
+
+ * parser.c (cp_lexer_new_main): Comment out defer_pragmas.
+ (cp_lexer_handle_pragma): Comment out
+ cpp_handle_deferred_pragma.
+
+ 2005-10-01 Richard Henderson <rth@redhat.com>
+
+ * name-lookup.c (lookup_name): Remove prefer_type argument.
+ (lookup_name_prefer_type): New function.
+ * name-lookup.h (lookup_name_prefer_type): Declare it.
+ * decl.c (lookup_and_check_tag): Use it.
+ * pt.c (tsubst_friend_class): Likewise. Update for
+ lookup_name change.
+ (lookup_template_class, tsubst_copy_and_build): Likewise.
+
+2006-03-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/15759
+ * tree.c (bot_manip): Don't call mark_used.
+
+2006-03-02 Mike Stump <mrs@apple.com>
+
+ * decl2.c (import_export_decl): Remove redundant call to
+ targetm.cxx.key_method_may_be_inline ().
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * decl.c (start_decl): Use have_global_bss_p when deciding
+ whether to make the decl common.
+
+2006-03-01 Mike Stump <mrs@apple.com>
+
+ PR darwin/25908
+ * decl2.c (import_export_decl): Fix ABI breakage on darwin.
+
+2006-02-24 Geoffrey Keating <geoffk@apple.com>
+
+ * except.c (expand_start_catch_block): Handle
+ flag_use_cxa_get_exception_ptr.
+
+2006-02-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/26291
+ * decl.c (grok_op_properties): Check for ellipsis in arguments of
+ operators.
+
+2006-02-20 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+ * Make-lang.in (C++): Remove.
+ (.PHONY): Remove C++.
+
+2006-02-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/26266
+ * cp-tree.h (cp_finish_decl): Adjust declaration.
+ (grokbitfield): Likewise.
+ (finish_static_data_member_decl): Likewise.
+ * init.c (constant_value_1): Ensure processing_template_decl when
+ folding non-dependent initializers for static data members of
+ dependent types. Return error_mark_node for erroneous
+ initailizers.
+ * class.c (get_vtable_decl): Use finish_decl, not cp_finish_decl.
+ * decl.c (cp_make_fname_decl): Adjust call to cp_finish_decl.
+ (cp_finish_decl): Add init_const_expr_p parameter. Set
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
+ (finish_decl): Adjust call to cp_finish_decl.
+ (compute_array_index_type): Robustify.
+ (start_method): Use finish_decl, not cp_finish_decl.
+ * rtti.c (emit_tinfo_decl): Likewise.
+ * except.c (initialize_handler_parm): Adjust call to
+ cp_finish_decl.
+ (expand_start_catch_block): Likewise.
+ * cvt.c (build_up_reference): Adjust call to cp_finish_decl.
+ * pt.c (instantiate_class_template): Adjust call to
+ finish_static_data_member_decl.
+ (tsubst_expr): Use finish_decl, not cp_finish_decl.
+ (instantiate_decl): Adjust call to cp_finish_decl.
+ * name-lookup.c (pushdecl_top_level_1): Use finish_decl, not
+ cp_finish_decl.
+ * decl2.c (finish_static_data_member_decl): Add init_const_expr_p
+ parameter.
+ (grokfield): Likewise.
+ * parser.c (cp_parser_condition): Check for constant initializers.
+ (cp_parser_init_declarator): Adjust calls to grokfield and
+ cp_finish_decl. Don't set
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
+ (cp_parser_member_declaration): Likewise.
+ (cp_parser_objc_class_ivars): Likewise.
+
+2006-02-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * call.c (standard_conversion): Return NULL instead of 0.
+ (build_user_type_conversion_1): Likewise.
+ (tourney): Likewise.
+ * decl.c (redeclaration_error_message): Likewise.
+ * error.c (language_to_string): Likewise.
+
+2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-tree.h (warn_hidden): Remove prototype.
+ * class.c (warn_hidden): Make static.
+
+ * cp-tree.h (build_type_conversion): Remove prototype.
+ * cvt.c (build_type_conversion): Add prototype, make static.
+
+ * cp-tree.h (push_tinst_level): Remove prototype.
+ (pop_tinst_level): Likewise.
+ * pt.c (push_tinst_level): Add prototype, make static.
+ (pop_tinst_level): Likewise.
+
+2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * decl.c (grokdeclarator): Return NULL_TREE instead of 0.
+ * typeck.c (unary_complex_lvalue): Likewise.
+
+2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * lex.c (parse_strconst_pragma): Return error_mark_node instead of
+ "(tree)-1" to indicate failure. Simplify.
+ (handle_pragma_interface): Test for error_mark_node instead of
+ "(tree)-1".
+ (handle_pragma_implementation): Likewise.
+
+2006-02-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/26151
+ * parser.c (cp_parser_decl_specifier_seq): Check for duplicate
+ decl-specifiers. Remove extra check for duplicate 'friend'.
+ * decl.c (grokdeclarator): Remove check for duplicate
+ decl-specifiers. Set longlong together with long_p.
+
+2006-02-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/24996
+ * except.c (build_throw): Add a CLEANUP_POINT_EXPR inside the
+ TRY_CATCH_EXPR or MUST_NOT_THROW_EXPR.
+
+2006-02-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * class.c (debug_class): Remove extern.
+ (debug_thunks): Likewise.
+
+2006-02-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * typeck.c (string_conv_p): Don't test for flag_const_strings.
+
+2006-02-08 Jason Merrill <jason@redhat.com>
+
+ PR c++/25979
+ * cp-gimplify.c (cp_gimplify_expr): Don't call
+ cp_gimplify_init_expr for MODIFY_EXPRs.
+ * typeck2.c (split_nonconstant_init_1): Use INIT_EXPR.
+
+2006-02-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/26071
+ * decl.c (grokdeclarator): Set dname also for destructor.
+
+ PR c++/26070
+ * decl.c (grokdeclarator): Clear storage_class together with staticp.
+
+2006-02-07 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cp-tree.h (tf_warning_or_error): Renamed from tf_warn_or_error.
+ (cp_build_qualified_type): Propogate renaming.
+ * call.c (convert_like_real): Likewise.
+ * cvt.c (cp_convert_to_pointer, convert_to_reference): Likewise.
+ * decl.c (make_typename_type, grokdeclarator): Likewise.
+ * pt.c (tsubst_friend_function, instantiate_class_template,
+ tsubst_default_argument, instantiate_decl,
+ tsubst_initializer_list, tsubst_enum): Likewise.
+ * semantics.c (finish_template_type): Likewise.
+ * typeck.c (build_ptrmemfunc, convert_for_assignment): Likewise.
+
+2006-02-07 Dirk Mueller <dmueller@suse.com>
+
+ * typeck.c (build_binary_op): Annotate div-by-zero
+ warnings to make -Wno-div-by-zero have an effect.
+
+2006-02-07 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9737
+ * pt.c (coerce_template_template_parms): Do not templates with
+ excess default arguments to match template template parameters
+ with fewer parameters.
+ (coerce_template_parms): Add use_default_args parameter; use
+ default arguments only when true.
+ (lookup_template_class): Adjust call to coerce_template_parms.
+ (fn_type_unification): Likewise.
+ (unify): Likewise.
+ (get_bindings): Likewise.
+ (dependent_type_p): Add assertions.
+
+2006-02-06 Roger Sayle <roger@eyesopen.com>
+
+ * decl.c (grokdeclarator): Don't bother checking for CHAR_TYPE.
+ * rtti.c (typeinfo_in_lib_p): Likewise.
+ * cp-tree.h (INTEGRAL_CODE_P, CP_INTEGRAL_TYPE_P): Likewise.
+ * name-lookup.c (arg_assoc_type): Likewise.
+
+2006-02-04 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cp-tree.h (tf_warn_or_error): New substituion flag.
+ (cp_build_qualified_type): Use it.
+ * call.c (convert_like_real): Likewise.
+ * cvt.c (cp_convert_to_pointer): Likewise.
+ (convert_to_reference): Likewise.
+ * decl.c (make_typename_type): Likewise.
+ (grokdeclarator): Likewise.
+ * pt.c (tsubst_friend_function): Likewise.
+ (tsubst_friend_class): Likewise.
+ (instantiate_class_template): Likewise.
+ (tsubst_default_argument): Likewise.
+ (instantiate_decl): Likewise.
+ (tsubst_initializer_list): Likewise.
+ (tsubst_enum): Likewise.
+ * semantics.c (finish_template_type): Likewise.
+ * typeck.c (build_ptrmemfunc): Likewise.
+ (convert_for_assignment): Likewise.
+
+2006-02-03 Lee Millward <lee.millward@gmail.com>
+
+ * 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.
+
+ * 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.
+
+ * name-lookup.c (pushdecl_maybe_friend): Likewise.
+ (pushdecl_maybe_friend): 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.
+
+2006-02-03 Mark Mitchell <mark@codesourcery.com>
+
+ * name-lookup.c (do_class_using_decl): Use IDENTIFIER_TYPENAME_P,
+ not IDENTIFIER_OPNAME_P.
+
+2006-01-31 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25342
+ * cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Revise
+ documentation.
+ * pt.c (determine_specialization): Use INNERMOST_TEMPLATE_PARMS,
+ not TREE_VALUE.
+ (instantiate_class_template): Simplify.
+ (verify_class_unification): Remove.
+ (unify): Document parameters. Use INNERMOST_TEMPLATE_ARGS to
+ permit multiple levels of template arguments.
+ (more_specialized_class): Simplify.
+ (get_class_bindings): Pass full arguments to unify. Fold
+ verify_class_unification into this function. Return full
+ arguments.
+ (most_specialized_class): Adjust for changes to
+ get_class_bindings. Issue errors here for ambiguity. Return the
+ fully deduced arguments for the most specialized class, in
+ addition to the partial specialization.
+
+2006-01-31 Ben Elliston <bje@au.ibm.com>
+
+ * mangle.c: Comment fix.
+
+2006-01-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * Make-lang.in (cp-warn): Include CXX_COMPAT_WARN.
+ * repo.c (extract_string, afgets): Use cast when converting from
+ void *.
+
+2006-01-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * call.c (alloc_conversion): Use cast when converting from void *.
+ (alloc_conversions): Likewise.
+ (add_candidate): Likewise.
+ (print_z_candidates): Likewise.
+ (add_warning): Likewise.
+ * pt.c (retrieve_local_specialization): Likewise.
+ (process_partial_specialization): Likewise.
+ (mangle_class_name_for_template): Likewise.
+ (tsubst_template_args): Likewise.
+ * typeck2.c (pat_calc_hash): Likewise.
+ (pat_compare): Likewise.
+ (abstract_virtuals_error): Likewise.
+ * class.c (method_name_cmp): Likewise.
+ (resort_method_name_cmp): Likewise.
+ (get_vfield_name): Likewise.
+ * decl2.c (generate_ctor_and_dtor_functions_for_priority): Likewise.
+ * lex.c (init_reswords): Likewise.
+ * rtti.c (create_pseudo_type_info): Likewise.
+ * search.c (dfs_lookup_base): Likewise.
+ (dfs_dcast_hint_pre): Likewise.
+ (dfs_dcast_hint_post): Likewise.
+ * tree.c (hash_tree_cons): Likewise.
+ * repo.c (extract_string): Likewise.
+ (afgets): Likewise.
+ * cp-objcp-common.c (decl_shadowed_for_var_lookup): Likewise.
+ * g++spec.c (lang_specific_driver): Likewise.
+
+2006-01-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * call.c (joust): Pass option code to warning. Use inform for
+ explanation.
+ * class.c (check_bases): Likewise.
+ (maybe_warn_about_overly_private_class): Likewise.
+ (check_field_decls): Likewise.
+ (layout_empty_base): Likewise.
+ (layout_virtual_bases): Likewise.
+ (layout_class_type): Likewise.
+
+2006-01-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25999
+ * decl.c (start_preparsed_function): Call maybe_apply_pragma_weak
+ here, not ...
+ (start_function): ... here.
+
+2006-01-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25855
+ * class.c (resolve_address_of_overloaded_function): Adjust use of
+ return value from most_specialized_instantiation.
+ * pt.c (determine_specialization): Avoid multiple calls to
+ get_bindings.
+ (most_specialized_instantiation): When a tie occurs, set the
+ current presumed champion to the next template. Return the
+ TREE_LIST node containing the template, rather than the template
+ itself.
+ (most_specialized): Remove.
+ * name-lookup.c (push_overloaded_decl): When duplicate_decls
+ indicates a failed redeclaration, report that to callers.
+
+2006-01-26 Jason Merrill <jason@redhat.com>
+
+ PR c++/16021
+ * name-lookup.c (parse_using_directive): Require strong using to
+ name a nested namespace.
+
+2006-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ Revert:
+ * cp-tree.h (do_poplevel): Remove prototype.
+ * semantics.c (do_poplevel): Add prototype. Make static.
+
+ Revert:
+ * cp-tree.h (default_conversion): Remove prototype.
+ * typeck.c (default_conversion): Make static.
+
+2006-01-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-tree.h (get_primary_binfo): Remove prototype.
+ (push_using_decl): Likewise.
+ (current_template_args): Likewise.
+ (more_specialized_class): Likewise.
+ (mark_class_instantiated): Likewise.
+ (default_conversion): Likewise.
+ (pfn_from_ptrmemfunc): Likewise.
+ * class.c (get_primary_binfo): Add prototype, make static, simplify.
+ * name-lookup.c (push_using_decl): Make static.
+ * pt.c (current_template_args): Likewise.
+ (more_specialized_class): Likewise.
+ (mark_class_instantiated): Likewise.
+ * typeck.c (default_conversion): Make static.
+ (pfn_from_ptrmemfunc): Add prototype, make static.
+
+2006-01-24 Dirk Mueller <dmueller@suse.de>
+
+ * typeck.c (build_binary_op): Use OPT_Wfloat_equal in warning().
+
+2006-01-24 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/25552
+ * parser.c (cp_parser_unqualified_id): Check that destructor name
+ and scope match.
+ * call.c (check_dtor_name): Do not expect a BIT_NOT_EXPR.
+ Adjust comment. Return early if possible.
+ Use same_type_p to compare types.
+ * typeck.c (lookup_destructor): Adjust call to check_dtor_name.
+
+2006-01-24 Mark Mitchell <mark@codesourcery.com>
+
+ * semantics.c: Remove outdated comment.
+
+2006-01-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * cp-tree.h (do_poplevel): Remove prototype.
+ * semantics.c (do_poplevel): Add prototype. Make static.
+
+ * cp-tree.h (original_type): Remove prototype.
+ * typeck.c (original_type): Make static.
+
+ * cp-tree.h (declare_global_var): Remove prototype.
+ * decl.c (declare_global_var): Make static.
+
+ * cp-tree.h (implicitly_declare_fn): Remove prototype.
+ * method.c (implicitly_declare_fn): Make static.
+
+ * cp-tree.h (fold_decl_constant_value): Remove prototype.
+ * pt.c (fold_decl_constant_value): Make static.
+
+ * cp-tree.h (build_x_delete): Remove prototype.
+ * init.c (build_vec_delete_1): Call build_op_delete_call directly
+ and not via build_x_delete.
+ (build_x_delete): Remove.
+
+ * cp-tree.h (get_vtt_name): Remove prototype.
+ * class.c (get_vtt_name): Remove.
+ (build_vtt): Call mangle_vtt_for_type instead of get_vtt_name.
+
+2006-01-22 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * rtti.c (build_dynamic_cast): Fix comment.
+
+2006-01-22 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR c++/10891
+ * rtti.c (build_dynamic_cast): Reject dynamic_cast use if
+ -fno-rtti.
+
+2006-01-21 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25895
+ * class.c (build_base_path): Generate a NOP_EXPR instead of a
+ COMPONENT_REF if the base and derived classes are at the same
+ address.
+
+ PR c++/25856
+ * decl.c (begin_destructor_body): Robustify.
+
+ PR c++/25858
+ * parser.c (cp_parser_direct_declarator): Robustify.
+
+2006-01-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * parser.c (cp_lexer_next_token_is_keyword): Simplify.
+
+ * parser.c (clear_decl_specs): Remove prototype.
+
+ * parser.c (cp_parser_expression_fn): Remove.
+
+ * call.c (add_builtin_candidates): Remove superfluous return.
+ * name-lookup.c (do_toplevel_using_decl): Likewise.
+ * parser.c (cp_parser_type_specifier_seq): Likewise.
+ (cp_parser_save_default_args): Likewise.
+
+2006-01-20 Dirk Mueller <dmueller@suse.com>
+
+ PR c++/5520
+ * semantics.c (finish_if_stmt): Call empty_body_warning.
+ * parser.c (cp_parser_implicitly_scoped_statement):
+ Mark empty statement with an empty stmt.
+
+2006-01-19 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22136
+ * name-lookup.c (do_class_using_decl): Don't try to look up base
+ classes in templates with dependent base types.
+
+2006-01-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/25854
+ * pt.c (maybe_process_partial_specialization): Return early on
+ error_mark_node.
+
+2006-01-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/16829
+ * decl.c (start_preparsed_function): Check default arguments
+ unconditionally.
+ * name-lookup.c (pushdecl_maybe_friend): Check default arguments
+ of all functions and function templates.
+ * parser.c (cp_parser_late_parsing_default_args): Check default
+ arguments.
+ * decl2.c (check_default_args): Set missing default arguments to
+ error_mark_node.
+
+2006-01-18 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25836
+ * cp-tree.h (push_class_stack): New function.
+ (pop_class_stack): Likewise.
+ * class.c (class_stack_node): Add hidden field.
+ (pushclass): Clear it.
+ (push_class_stack): New function.
+ (pop_class_stack): Likewise.
+ (currently_open_class): Ignore hidden classes.
+ (currently_open_derived_class): Likewise.
+ * name-lookup.c (push_to_top_level): Call push_class_stack.
+ (pop_from_top_level): Call pop_class_stack.
+
+2006-01-18 Kazu Hirata <kazu@codesourcery.com>
+
+ * tree.c (find_tree_t, find_tree): Remove.
+ * cp-tree.h: Remove the prototype for find_tree.
+
+2006-01-18 Jakub Jelinek <jakub@redhat.com>
+
+ * search.c (lookup_conversions_r): Fix a pasto.
+
+2006-01-17 Eric Christopher <echristo@apple.com>
+
+ * call.c (convert_like_real): When issuing conversion
+ warnings, depend on OPT_Wconversion.
+ * cvt.c (build_expr_type_conversion): Ditto.
+
+2006-01-17 Kazu Hirata <kazu@codesourcery.com>
+
+ * name-lookup.c (lookup_namespace_name): Remove.
+ * name-lookup.h: Remove the prototype for
+ lookup_namespace_name.
+
+2006-01-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/25682
+ * decl.c (compute_array_index_type): After issuing not an integral
+ constant-expression error, set size to 1 to avoid ICEs later on.
+
+2006-01-16 Ian Lance Taylor <ian@airs.com>
+
+ * parser.c: Include "cgraph.h".
+ (cp_parser_asm_definition): Call cgraph_add_asm_node rather than
+ assemble_asm.
+
+2006-01-16 Rafael �ila de Esp�dola <rafael.espindola@gmail.com>
+
+ * g++spec.c (lang_specific_spec_functions): Remove.
+
+2006-01-15 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * decl.c (check_initializer): Fix thinko.
+
+2006-01-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25663
+ * parser.c (cp_parser_direct_declarator): Use cp_parser_error
+ instead of error.
+
+2006-01-13 Jason Merrill <jason@redhat.com>
+
+ * pt.c (check_explicit_specialization): Use CP_DECL_CONTEXT even more.
+
+ * name-lookup.c (set_decl_namespace): Use CP_DECL_CONTEXT.
+ * pt.c (check_explicit_specialization): Likewise.
+
+2006-01-12 Jason Merrill <jason@redhat.com>
+
+ PR libstdc++/24660
+ * pt.c (check_explicit_specialization): Handle namespace
+ association.
+ * name-lookup.c (set_decl_namespace): Likewise.
+
+2006-01-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/24824
+ * class.c (handle_using_decl): Pass correct scope to
+ cp_emit_debug_info_for_using.
+
+2006-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/25386
+ * tree.c (lvalue_p_1): Any part of a COMPONENT_REF affects
+ packedness.
+
+2006-01-06 Gabriel Dos Reis <gdr@integrablesolutions.net>
+
+ * parser.c (cp_parser_primary_expression): Document the grammar
+ for the built-in offsetof, a GNU extension.
+
+2006-01-04 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR c++/25632
+ * init.c (constant_value_1): Unshare use of DECL_INITIAL. Fix a typo
+ in condition.
+
+2006-01-04 Chris Lattner <sabre@gnu.org>
+
+ * typeck2.c: update copyright to 2006
+ (split_nonconstant_init_1): Set TREE_CONSTANT to true.
+
+2006-01-04 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/24782
+ * parser.c (cp_parser_nested_name_specifier_opt): Preserve access
+ checks, even when parsing tentatively.
+
+2006-01-04 Richard Henderson <rth@redhat.com>
+
+ Merge from gomp branch.
+ * lex.c (handle_pragma_java_exceptions): Fix whitespace.
+ * parser.c (struct cp_token): Add pragma_kind.
+ (eof_token): Update to match.
+ (struct cp_lexer): Add in_pragma; rearrange next for better packing.
+ (cp_parser_initial_pragma): New.
+ (cp_lexer_new_main): Use it. Don't bother clearing
+ c_lex_return_raw_strings.
+ (cp_lexer_get_preprocessor_token): Always initialize keyword
+ and pragma_kind fields. Handle CPP_PRAGMA.
+ (cp_lexer_consume_token): Don't allow CPP_PRAGMA_EOL when
+ in_pragma is set.
+ (cp_lexer_handle_pragma): Remove. Update callers to cp_parser_pragma.
+ (cp_lexer_print_token) <CPP_PRAGMA>: Don't print as a string.
+ (cp_parser_skip_to_pragma_eol): New.
+ (cp_parser_error): Use it.
+ (cp_parser_skip_to_closing_parenthesis): Stop at CPP_PRAGMA_EOL;
+ rearrange with switch statement.
+ (cp_parser_skip_to_end_of_statement): Likewise.
+ (cp_parser_skip_to_end_of_block_or_statement): Likewise.
+ (cp_parser_skip_to_closing_brace): Likewise.
+ (cp_parser_skip_until_found): Likewise.
+ (cp_parser_statement): Add in_compound argument; update callers.
+ Use it to decide how to handle pragma parsing.
+ (cp_parser_labeled_statement): Add in_compound argument; pass
+ it on to cp_parser_statement.
+ (cp_parser_statement_seq_opt): Stop at CPP_PRAGMA_EOL.
+ (cp_parser_declaration_seq_opt): Likewise.
+ (cp_parser_parameter_declaration): Likewise.
+ (cp_parser_member_specification_opt): Likewise.
+ (cp_parser_function_definition_after_decl): Likewise.
+ (cp_parser_cache_group): Handle CPP_PRAGMA/CPP_PRAGMA_EOL pairs.
+ (cp_parser_pragma): New.
+ (pragma_lex): New.
+
+2006-01-04 Dirk Mueller <dmueller@suse.com>
+
+ * decl.c (finish_constructor_body): create simple
+ compound stmt instead of a if(1) { } construct.
+
+2006-01-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25492
+ * name-lookup.c (push_class_level_binding): When a derived class
+ provides a type binding, eliminate any type binding from a base
+ class.
+
+ PR c++/25625
+ * repo.c (repo_emit_p): Always instantiate static data members
+ initialized by constant expressions, so that there values are
+ available.
+
+2006-01-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/25635
+ * class.c (add_method): Set TYPE_HAS_CONVERSION for classes with a
+ conversion operator.
+ * decl.c (grokdeclarator): Do not set TYPE_HAS_CONVERSION here.
+
+ PR c++/25638
+ * class.c (add_method): Never associate more than one destructor
+ with a single class.
+
+ PR c++/25637
+ * cp-tree.h (do_friend): Adjust prototype.
+ * decl.c (grokfndecl): Make funcdef_flag a bool, not an int.
+ (grokdeclarator): Likewise. Refine check for invalid
+ declarations/definitions of member functions outside of their own
+ class.
+ * friend.c (do_friend): Make funcdef_flag a bool, not an int.
+
+ PR c++/25633
+ * parser.c (cp_parser_mem_initializer_list): Check result of
+ cp_parser_mem_initializer against error_mark_node, not NULL_TREE.
+ (cp_parser_mem_initializer): Return error_mark_node for failure.
+
+ PR c++/25634
+ * parser.c (cp_parser_template_parameter_list): Call
+ begin_template_parm_list and end_template_parm_list here.
+ (cp_parser_type_parameter): Not here.
+ (cp_parser_template_declaration_after_export): Or here.
+ (cp_parser_elaborated_type_specifier): Call
+ cp_parser_check_template_parameters.
+
+ * tree.c (build_target_expr_with_type): Use force_target_expr.
+
+ * decl2.c (mark_used): Fix typo in comment.
+
+2006-01-02 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ * parser.c (cp_parser_using_declaration): Skip name-lookup on
+ invalid scope.
+
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index e75f4fc9da0..31bc8d2649e 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -4638,19 +4638,24 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
{
if (TREE_CODE (init) == CONSTRUCTOR)
{
+ if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
+ /* There is no need to reshape pointer-to-member function
+ initializers, as they are always constructed correctly
+ by the front end. */
+ ;
+ else if (COMPOUND_LITERAL_P (init))
/* For a nested compound literal, there is no need to reshape since
brace elision is not allowed. Even if we decided to allow it,
we should add a call to reshape_init in finish_compound_literal,
before calling digest_init, so changing this code would still
not be necessary. */
- if (!COMPOUND_LITERAL_P (init))
+ gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
+ else
{
++d->cur;
gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
return reshape_init (type, init);
}
- else
- gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
}
warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 41778283236..5788f94ca13 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1856,7 +1856,7 @@ constrain_class_visibility (tree type)
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));
+ tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
int subvis = type_visibility (ftype);
if (subvis == VISIBILITY_ANON)
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 41beb4f3fd7..8b8840632c5 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -1766,6 +1766,32 @@ df_bb_refs_record (struct dataflow *dflow, basic_block bb)
}
}
+/* Records the implicit definitions at targets of nonlocal gotos in BLOCKS. */
+
+static void
+record_nonlocal_goto_receiver_defs (struct dataflow *dflow, bitmap blocks)
+{
+ rtx x;
+ basic_block bb;
+
+ /* See expand_builtin_setjmp_receiver; hard_frame_pointer_rtx is used in
+ the nonlocal goto receiver, and needs to be considered defined
+ implicitly. */
+ if (!(dflow->flags & DF_HARD_REGS))
+ return;
+
+ for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
+ {
+ bb = BLOCK_FOR_INSN (XEXP (x, 0));
+ if (!bitmap_bit_p (blocks, bb->index))
+ continue;
+
+ df_ref_record (dflow, hard_frame_pointer_rtx, &hard_frame_pointer_rtx,
+ bb, NULL,
+ DF_REF_REG_DEF, DF_REF_ARTIFICIAL | DF_REF_AT_TOP,
+ false);
+ }
+}
/* Record all the refs in the basic blocks specified by BLOCKS. */
@@ -1786,6 +1812,9 @@ df_refs_record (struct dataflow *dflow, bitmap blocks)
if (bitmap_bit_p (blocks, ENTRY_BLOCK))
df_record_entry_block_defs (dflow);
+
+ if (current_function_has_nonlocal_label)
+ record_nonlocal_goto_receiver_defs (dflow, blocks);
}
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index cc5feb9c8fb..1a89c904f71 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -9891,8 +9891,10 @@ instruction set support.
@item k8, opteron, athlon64, athlon-fx
AMD K8 core based CPUs with x86-64 instruction set support. (This supersets
MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
+@item k8-sse3, opteron-sse3, athlon64-sse3
+Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
@item amdfam10, barcelona
-AMD Family 10 core based CPUs with x86-64 instruction set support. (This
+AMD Family 10h core based CPUs with x86-64 instruction set support. (This
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!, enhanced 3dNOW!, ABM and 64-bit
instruction set extensions.)
@item winchip-c6
@@ -9926,18 +9928,6 @@ specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}
@opindex mcpu
A deprecated synonym for @option{-mtune}.
-@item -m386
-@itemx -m486
-@itemx -mpentium
-@itemx -mpentiumpro
-@opindex m386
-@opindex m486
-@opindex mpentium
-@opindex mpentiumpro
-These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
-@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
-These synonyms are deprecated.
-
@item -mfpmath=@var{unit}
@opindex march
Generate floating point arithmetics for selected unit @var{unit}. The choices
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index d7063313df3..682ef94ee3f 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1026,7 +1026,8 @@ targets.
@item @{ dg-excess-errors @var{comment} [@{ target/xfail @var{selector} @}] @}
This DejaGnu directive indicates that the test is expected to fail due
to compiler messages that are not handled by @samp{dg-error},
-@samp{dg-warning} or @samp{dg-bogus}.
+@samp{dg-warning} or @samp{dg-bogus}. For this directive @samp{xfail}
+has the same effect as @samp{target}.
@item @{ dg-output @var{regexp} [@{ target/xfail @var{selector} @}] @}
This DejaGnu directive compares @var{regexp} to the combined output
diff --git a/gcc/doc/trouble.texi b/gcc/doc/trouble.texi
index 505f821d39b..059d5cf64ae 100644
--- a/gcc/doc/trouble.texi
+++ b/gcc/doc/trouble.texi
@@ -234,20 +234,6 @@ you cannot successfully use @samp{$} in identifiers on the RS/6000 due
to a restriction in the IBM assembler. GAS supports these
identifiers.
-@cindex VAX calling convention
-@cindex Ultrix calling convention
-@item
-@opindex fcall-saved
-On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
-by function calls. However, the C compiler uses conventions compatible
-with BSD Unix: registers 2 through 5 may be clobbered by function calls.
-
-GCC uses the same convention as the Ultrix C compiler. You can use
-these options to produce code compatible with the Fortran compiler:
-
-@smallexample
--fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
-@end smallexample
@end itemize
@node Incompatibilities
diff --git a/gcc/double-int.c b/gcc/double-int.c
index cc29b0d2f64..cc5c568b124 100644
--- a/gcc/double-int.c
+++ b/gcc/double-int.c
@@ -413,3 +413,81 @@ dump_double_int (FILE *file, double_int cst, bool uns)
for (i = n - 1; i >= 0; i--)
fprintf (file, "%u", digits[i]);
}
+
+
+/* Sets RESULT to VAL, taken unsigned if UNS is true and as signed
+ otherwise. */
+
+void
+mpz_set_double_int (mpz_t result, double_int val, bool uns)
+{
+ bool negate = false;
+ unsigned HOST_WIDE_INT vp[2];
+
+ if (!uns && double_int_negative_p (val))
+ {
+ negate = true;
+ val = double_int_neg (val);
+ }
+
+ vp[0] = val.low;
+ vp[1] = (unsigned HOST_WIDE_INT) val.high;
+ mpz_import (result, 2, -1, sizeof (HOST_WIDE_INT), 0, 0, vp);
+
+ if (negate)
+ mpz_neg (result, result);
+}
+
+/* Returns VAL converted to TYPE. If WRAP is true, then out-of-range
+ values of VAL will be wrapped; otherwise, they will be set to the
+ appropriate minimum or maximum TYPE bound. */
+
+double_int
+mpz_get_double_int (tree type, mpz_t val, bool wrap)
+{
+ unsigned HOST_WIDE_INT *vp;
+ size_t count, numb;
+ double_int res;
+
+ if (!wrap)
+ {
+ mpz_t min, max;
+
+ mpz_init (min);
+ mpz_init (max);
+ get_type_static_bounds (type, min, max);
+
+ if (mpz_cmp (val, min) < 0)
+ mpz_set (val, min);
+ else if (mpz_cmp (val, max) > 0)
+ mpz_set (val, max);
+
+ mpz_clear (min);
+ mpz_clear (max);
+ }
+
+ /* Determine the number of unsigned HOST_WIDE_INT that are required
+ for representing the value. The code to calculate count is
+ extracted from the GMP manual, section "Integer Import and Export":
+ http://gmplib.org/manual/Integer-Import-and-Export.html */
+ numb = 8*sizeof(HOST_WIDE_INT);
+ count = (mpz_sizeinbase (val, 2) + numb-1) / numb;
+ if (count < 2)
+ count = 2;
+ vp = (unsigned HOST_WIDE_INT *) alloca (count * sizeof(HOST_WIDE_INT));
+
+ vp[0] = 0;
+ vp[1] = 0;
+ mpz_export (vp, &count, -1, sizeof (HOST_WIDE_INT), 0, 0, val);
+
+ gcc_assert (wrap || count <= 2);
+
+ res.low = vp[0];
+ res.high = (HOST_WIDE_INT) vp[1];
+
+ res = double_int_ext (res, TYPE_PRECISION (type), TYPE_UNSIGNED (type));
+ if (mpz_sgn (val) < 0)
+ res = double_int_neg (res);
+
+ return res;
+}
diff --git a/gcc/double-int.h b/gcc/double-int.h
index 807166b8957..33641bd06dc 100644
--- a/gcc/double-int.h
+++ b/gcc/double-int.h
@@ -21,6 +21,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#ifndef DOUBLE_INT_H
#define DOUBLE_INT_H
+#include <gmp.h>
+#include "coretypes.h"
+
/* A large integer is currently represented as a pair of HOST_WIDE_INTs.
It therefore represents a number with precision of
2 * HOST_BITS_PER_WIDE_INT bits (it is however possible that the
@@ -174,4 +177,10 @@ double_int_equal_p (double_int cst1, double_int cst2)
return cst1.low == cst2.low && cst1.high == cst2.high;
}
+/* Conversion to and from GMP integer representations. */
+
+void mpz_set_double_int (mpz_t, double_int, bool);
+double_int mpz_get_double_int (tree, mpz_t, bool);
+
+
#endif /* DOUBLE_INT_H */
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 58afab10d06..ed4238cc6f1 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -3405,7 +3405,7 @@ make_insn_raw (rtx pattern)
INSN_CODE (insn) = -1;
LOG_LINKS (insn) = NULL;
REG_NOTES (insn) = NULL;
- INSN_LOCATOR (insn) = 0;
+ INSN_LOCATOR (insn) = curr_insn_locator ();
BLOCK_FOR_INSN (insn) = NULL;
#ifdef ENABLE_RTL_CHECKING
@@ -3438,7 +3438,7 @@ make_jump_insn_raw (rtx pattern)
LOG_LINKS (insn) = NULL;
REG_NOTES (insn) = NULL;
JUMP_LABEL (insn) = NULL;
- INSN_LOCATOR (insn) = 0;
+ INSN_LOCATOR (insn) = curr_insn_locator ();
BLOCK_FOR_INSN (insn) = NULL;
return insn;
@@ -3459,7 +3459,7 @@ make_call_insn_raw (rtx pattern)
LOG_LINKS (insn) = NULL;
REG_NOTES (insn) = NULL;
CALL_INSN_FUNCTION_USAGE (insn) = NULL;
- INSN_LOCATOR (insn) = 0;
+ INSN_LOCATOR (insn) = curr_insn_locator ();
BLOCK_FOR_INSN (insn) = NULL;
return insn;
@@ -4529,42 +4529,6 @@ emit_barrier (void)
return barrier;
}
-/* Make line numbering NOTE insn for LOCATION add it to the end
- of the doubly-linked list, but only if line-numbers are desired for
- debugging info and it doesn't match the previous one. */
-
-rtx
-emit_line_note (location_t location)
-{
- rtx note;
-
-#ifdef USE_MAPPED_LOCATION
- if (location == last_location)
- return NULL_RTX;
-#else
- if (location.file && last_location.file
- && !strcmp (location.file, last_location.file)
- && location.line == last_location.line)
- return NULL_RTX;
-#endif
- last_location = location;
-
- if (no_line_numbers)
- {
- cur_insn_uid++;
- return NULL_RTX;
- }
-
-#ifdef USE_MAPPED_LOCATION
- note = emit_note ((int) location);
-#else
- note = emit_note (location.line);
- NOTE_SOURCE_FILE (note) = location.file;
-#endif
-
- return note;
-}
-
/* Emit a copy of note ORIG. */
rtx
diff --git a/gcc/expr.c b/gcc/expr.c
index 02a14da96cb..ad721b26301 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6797,14 +6797,14 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
information. It would be better of the diagnostic routines
used the file/line information embedded in the tree nodes rather
than globals. */
- if (cfun && cfun->ib_boundaries_block && EXPR_HAS_LOCATION (exp))
+ if (cfun && EXPR_HAS_LOCATION (exp))
{
location_t saved_location = input_location;
input_location = EXPR_LOCATION (exp);
- emit_line_note (input_location);
+ set_curr_insn_source_location (input_location);
/* Record where the insns produced belong. */
- record_block_change (TREE_BLOCK (exp));
+ set_curr_insn_block (TREE_BLOCK (exp));
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
@@ -6988,6 +6988,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
case RESULT_DECL:
decl_rtl = DECL_RTL (exp);
gcc_assert (decl_rtl);
+ decl_rtl = copy_rtx (decl_rtl);
/* Ensure variable marked as used even if it doesn't go through
a parser. If it hasn't be used yet, write out an external
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index fa62c393fa8..5b052f6f802 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -8025,13 +8025,6 @@ fold_unary (enum tree_code code, tree type, tree op0)
return fold_convert (type, build_fold_addr_expr (base));
}
- /* Convert (type *)&A into &A->field_of_type_and_offset_0. */
- if (TREE_CODE (op0) == ADDR_EXPR && POINTER_TYPE_P (type)
- && (tem = maybe_fold_offset_to_component_ref
- (TREE_TYPE (TREE_OPERAND (op0, 0)), TREE_OPERAND (op0, 0),
- integer_zero_node, TREE_TYPE (type), false)))
- return build_fold_addr_expr_with_type (tem, type);
-
if ((TREE_CODE (op0) == MODIFY_EXPR
|| TREE_CODE (op0) == GIMPLE_MODIFY_STMT)
&& TREE_CONSTANT (GENERIC_TREE_OPERAND (op0, 1))
@@ -8937,69 +8930,6 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
}
}
- /* Convert foo++ == CONST into ++foo == CONST + INCR. */
- if (TREE_CONSTANT (arg1)
- && (TREE_CODE (arg0) == POSTINCREMENT_EXPR
- || TREE_CODE (arg0) == POSTDECREMENT_EXPR)
- /* This optimization is invalid for ordered comparisons
- if CONST+INCR overflows or if foo+incr might overflow.
- This optimization is invalid for floating point due to rounding.
- For pointer types we assume overflow doesn't happen. */
- && (POINTER_TYPE_P (TREE_TYPE (arg0))
- || (INTEGRAL_TYPE_P (TREE_TYPE (arg0))
- && (code == EQ_EXPR || code == NE_EXPR))))
- {
- tree varop, newconst;
-
- if (TREE_CODE (arg0) == POSTINCREMENT_EXPR)
- {
- newconst = fold_build2 (PLUS_EXPR, TREE_TYPE (arg0),
- arg1, TREE_OPERAND (arg0, 1));
- varop = build2 (PREINCREMENT_EXPR, TREE_TYPE (arg0),
- TREE_OPERAND (arg0, 0),
- TREE_OPERAND (arg0, 1));
- }
- else
- {
- newconst = fold_build2 (MINUS_EXPR, TREE_TYPE (arg0),
- arg1, TREE_OPERAND (arg0, 1));
- varop = build2 (PREDECREMENT_EXPR, TREE_TYPE (arg0),
- TREE_OPERAND (arg0, 0),
- TREE_OPERAND (arg0, 1));
- }
-
-
- /* If VAROP is a reference to a bitfield, we must mask
- the constant by the width of the field. */
- if (TREE_CODE (TREE_OPERAND (varop, 0)) == COMPONENT_REF
- && DECL_BIT_FIELD (TREE_OPERAND (TREE_OPERAND (varop, 0), 1))
- && host_integerp (DECL_SIZE (TREE_OPERAND
- (TREE_OPERAND (varop, 0), 1)), 1))
- {
- tree fielddecl = TREE_OPERAND (TREE_OPERAND (varop, 0), 1);
- HOST_WIDE_INT size = tree_low_cst (DECL_SIZE (fielddecl), 1);
- tree folded_compare, shift;
-
- /* First check whether the comparison would come out
- always the same. If we don't do that we would
- change the meaning with the masking. */
- folded_compare = fold_build2 (code, type,
- TREE_OPERAND (varop, 0), arg1);
- if (TREE_CODE (folded_compare) == INTEGER_CST)
- return omit_one_operand (type, folded_compare, varop);
-
- shift = build_int_cst (NULL_TREE,
- TYPE_PRECISION (TREE_TYPE (varop)) - size);
- shift = fold_convert (TREE_TYPE (varop), shift);
- newconst = fold_build2 (LSHIFT_EXPR, TREE_TYPE (varop),
- newconst, shift);
- newconst = fold_build2 (RSHIFT_EXPR, TREE_TYPE (varop),
- newconst, shift);
- }
-
- return fold_build2 (code, type, varop, newconst);
- }
-
if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE
&& (TREE_CODE (arg0) == NOP_EXPR
|| TREE_CODE (arg0) == CONVERT_EXPR))
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0266e54da4f..66e61587fc0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,66 @@
+2007-05-01 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/31732
+ * dependency.c (gfc_full_array_ref_p): If the reference is
+ to a single element, check that the array has a single
+ element and that the correct element is referenced.
+
+2007-05-01 Daniel Franke <franke.daniel@gmail.com>
+
+ * intrinsic.c (add_functions): Fixed ELEMENTAL specifications.
+ (add_subroutines): Replaced magic numbers in function calls by
+ ELEMENTAL and NOT_ELEMENTAL respectively.
+ * intrinsic.texi (MVBITS): Changed class to elemental subroutine.
+ (RANDOM_NUMBER): Changed class to subroutine.
+ (HUGE, TINY): Changed class to inquiry function.
+
+2007-04-30 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * trans-const.c (gfc_conv_mpz_to_tree): Use mpz_get_double_int.
+ (gfc_conv_tree_to_mpz): New function.
+ (gfc_conv_mpfr_to_tree): Use real_from_mpfr.
+ (gfc_conv_tree_to_mpfr): New function.
+ * trans-const.h: (gfc_conv_tree_to_mpz): New prototype.
+ (gfc_conv_tree_to_mpfr): New prototype.
+
+2007-04-30 Daniel Franke <franke.daniel@gmail.com>
+
+ * intrinsic.texi (IERRNO): Changed class to non-elemental function.
+ (LOG10): Removed COMPLEX as accepted argument type.
+ (NEW_LINE): Changed class from elemental to inquiry function.
+ (SIGN): Removed requirement of scalar arguments.
+ (SNGL): Changed class to elemental function.
+
+2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/31591
+ * simplify.c (simplify_bound_dim): New function.
+ (simplify_bound): Use the above. Perform simplification of LBOUND
+ and UBOUND when DIM argument is not present.
+
+2007-04-29 Daniel Franke <franke.daniel@gmail.com>
+
+ * gfortran.texi: Cleaned up keyword index.
+ * invoke.texi: Likewise.
+ * intrinsic.texi: Likewise.
+
+2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/31645
+ * scanner.c (load_file): Discard the byte order mark if one is
+ found on the first non-preprocessor line of a file.
+
+2007-04-29 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31711
+ * trans-array.c (gfc_conv_resolve_dependencies): Create a temp
+ whenever a dependency is found.
+
+2007-04-28 Tobias Schlüter <tobi@gcc.gnu.org>
+
+ * options.c (gfc_handle_option): Ensure requested free form line
+ length is not too small.
+
2007-04-27 Brooks Moses <brooks.moses@codesourcery.com>
* intrinsic.texi (Transfer): Improve documentation.
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index b79f2229835..bdda6d871d3 100644
--- a/gcc/fortran/dependency.c
+++ b/gcc/fortran/dependency.c
@@ -1126,6 +1126,24 @@ gfc_full_array_ref_p (gfc_ref *ref)
for (i = 0; i < ref->u.ar.dimen; i++)
{
+ /* If we have a single element in the reference, we need to check
+ that the array has a single element and that we actually reference
+ the correct element. */
+ if (ref->u.ar.dimen_type[i] == DIMEN_ELEMENT)
+ {
+ if (!ref->u.ar.as
+ || !ref->u.ar.as->lower[i]
+ || !ref->u.ar.as->upper[i]
+ || gfc_dep_compare_expr (ref->u.ar.as->lower[i],
+ ref->u.ar.as->upper[i])
+ || !ref->u.ar.start[i]
+ || gfc_dep_compare_expr (ref->u.ar.start[i],
+ ref->u.ar.as->lower[i]))
+ return false;
+ else
+ continue;
+ }
+
/* Check the lower bound. */
if (ref->u.ar.start[i]
&& (!ref->u.ar.as
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index d57d63e2100..819651b1f05 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -388,14 +388,14 @@ Fortran compiler.
@node GNU Fortran and G77
@section GNU Fortran and G77
@cindex Fortran 77
-@cindex G77
+@cindex @command{g77}
-The GNU Fortran compiler is the successor to G77, the Fortran 77 front
-end included in GCC prior to version 4. It is an entirely new program
-that has been designed to provide Fortran 95 support and extensibility
-for future Fortran language standards, as well as providing backwards
-compatibility for Fortran 77 and nearly all of the GNU language
-extensions supported by G77.
+The GNU Fortran compiler is the successor to @command{g77}, the Fortran
+77 front end included in GCC prior to version 4. It is an entirely new
+program that has been designed to provide Fortran 95 support and
+extensibility for future Fortran language standards, as well as providing
+backwards compatibility for Fortran 77 and nearly all of the GNU language
+extensions supported by @command{g77}.
@c ---------------------------------------------------------------------
@@ -499,7 +499,7 @@ ISO/IEC 1539-1:2004 (Fortran 2003).
@node Runtime
@chapter Runtime: Influencing runtime behavior with environment variables
-@cindex Runtime
+@cindex environment variable
The behavior of the @command{gfortran} can be influenced by
environment variables.
@@ -695,13 +695,14 @@ Intrinsics @code{command_argument_count}, @code{get_command},
@code{move_alloc}.
@item
-@cindex Array constructors
+@cindex array, constructors
@cindex @code{[...]}
Array constructors using square brackets. That is, @code{[...]} rather
than @code{(/.../)}.
@item
@cindex @code{FLUSH} statement
+@cindex statement, @code{FLUSH}
@code{FLUSH} statement.
@item
@@ -711,6 +712,8 @@ than @code{(/.../)}.
@item
@cindex @code{ENUM} statement
@cindex @code{ENUMERATOR} statement
+@cindex statement, @code{ENUM}
+@cindex statement, @code{ENUMERATOR}
@opindex @code{fshort-enums}
Support for the declaration of enumeration constants via the
@code{ENUM} and @code{ENUMERATOR} statements. Interoperability with
@@ -742,25 +745,31 @@ allowing I/O without any record structure.
Namelist input/output for internal files.
@item
-@cindex @code{PROTECTED}
+@cindex @code{PROTECTED} statement
+@cindex statement, @code{PROTECTED}
The @code{PROTECTED} statement and attribute.
@item
-@cindex @code{VALUE}
+@cindex @code{VALUE} statement
+@cindex statement, @code{VALUE}
The @code{VALUE} statement and attribute.
@item
-@cindex @code{VOLATILE}
+@cindex @code{VOLATILE} statement
+@cindex statement, @code{VOLATILE}
The @code{VOLATILE} statement and attribute.
@item
-@cindex @code{IMPORT}
+@cindex @code{IMPORT} statement
+@cindex statement, @code{IMPORT}
The @code{IMPORT} statement, allowing to import
host-associated derived types.
@item
-@cindex @code{USE, INTRINSIC}
-@cindex @code{ISO_FORTRAN_ENV}
+@cindex @code{USE, INTRINSIC} statement
+@cindex statement, @code{USE, INTRINSIC}
+@cindex @code{ISO_FORTRAN_ENV} statement
+@cindex statement, @code{ISO_FORTRAN_ENV}
@code{USE} statement with @code{INTRINSIC} and @code{NON_INTRINSIC}
attribute; supported intrinsic modules: @code{ISO_FORTRAN_ENV},
@code{OMP_LIB} and @code{OMP_LIB_KINDS}.
@@ -814,7 +823,7 @@ of extensions, and @option{-std=legacy} allows both without warning.
@node Old-style kind specifications
@section Old-style kind specifications
-@cindex Kind specifications
+@cindex kind, old-style
GNU Fortran allows old-style kind specifications in declarations. These
look like:
@@ -838,7 +847,6 @@ where @code{k} is equal to @code{size} for most types, but is equal to
@node Old-style variable initialization
@section Old-style variable initialization
-@cindex Initialization
GNU Fortran allows old-style initialization of variables of the
form:
@@ -942,7 +950,6 @@ elements will be given the values 1.00 and 2.00.
@node X format descriptor without count field
@section @code{X} format descriptor without count field
-@cindex @code{X} format descriptor without count field
To support legacy codes, GNU Fortran permits the count field of the
@code{X} edit descriptor in @code{FORMAT} statements to be omitted.
@@ -955,7 +962,6 @@ When omitted, the count is implicitly assumed to be one.
@node Commas in FORMAT specifications
@section Commas in @code{FORMAT} specifications
-@cindex Commas in @code{FORMAT} specifications
To support legacy codes, GNU Fortran allows the comma separator
to be omitted immediately before and after character string edit
@@ -969,7 +975,6 @@ descriptors in @code{FORMAT} statements.
@node Missing period in FORMAT specifications
@section Missing period in @code{FORMAT} specifications
-@cindex Missing period in @code{FORMAT} specifications
To support legacy codes, GNU Fortran allows missing periods in format
specifications if and only if @option{-std=legacy} is given on the
@@ -1021,14 +1026,14 @@ integers in this manner.
@node Real array indices
@section Real array indices
-@cindex Real array indices
+@cindex array, indices of type real
As an extension, GNU Fortran allows the use of @code{REAL} expressions
or variables as array indices.
@node Unary operators
@section Unary operators
-@cindex Unary operators
+@cindex operators, unary
As an extension, GNU Fortran allows unary plus and unary minus operators
to appear as the second operand of binary arithmetic operators without
@@ -1040,7 +1045,8 @@ the need for parenthesis.
@node Implicitly convert LOGICAL and INTEGER values
@section Implicitly convert @code{LOGICAL} and @code{INTEGER} values
-@cindex Implicitly convert @code{LOGICAL} and @code{INTEGER} values
+@cindex conversion, to integer
+@cindex conversion, to logical
As an extension for backwards compatibility with other compilers, GNU
Fortran allows the implicit conversion of @code{LOGICAL} values to
@@ -1099,7 +1105,7 @@ obtained by using the @code{TRANSFER} statement, as in this example.
@node Cray pointers
@section Cray pointers
-@cindex Cray pointers
+@cindex pointer, cray
Cray pointers are part of a non-standard extension that provides a
C-like pointer in Fortran. This is accomplished through a pair of
@@ -1292,7 +1298,10 @@ OpenMP Application Program Interface v2.5} specification.
@node Argument list functions
@section Argument list functions %VAL, %REF and %LOC
-@cindex Argument list functions %VAL, %REF and %LOC
+@cindex argument list functions
+@cindex %VAL
+@cindex %REF
+@cindex %LOC
GNU Fortran supports argument list functions @code{%VAL}, @code{%REF}
and @code{%LOC} statements, for backward compatibility with g77.
@@ -1582,7 +1591,7 @@ Environment variable forcing standard output to be line buffered (unix).
@c ---------------------------------------------------------------------
@node Option Index
-@unnumbered Index of command line options
+@unnumbered Option Index
@command{gfortran}'s command line options are indexed here without any
initial @samp{-} or @samp{--}. Where an option has both positive and
negative forms (such as -foption and -fno-option), relevant entries in
@@ -1591,7 +1600,7 @@ be useful to look up both forms.
@printindex op
@node Keyword Index
-@unnumbered Index of concepts
+@unnumbered Keyword Index
@printindex cp
@bye
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index d77cf5502f9..de74678d268 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -1199,7 +1199,7 @@ add_functions (void)
make_generic ("cmplx", GFC_ISYM_CMPLX, GFC_STD_F77);
- add_sym_0 ("command_argument_count", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di,
+ add_sym_0 ("command_argument_count", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di,
GFC_STD_F2003, NULL, NULL, NULL);
make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT,
@@ -1394,7 +1394,7 @@ add_functions (void)
make_generic ("exponent", GFC_ISYM_EXPONENT, GFC_STD_F95);
- add_sym_0 ("fdate", ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_GNU,
+ add_sym_0 ("fdate", NOT_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_GNU,
NULL, NULL, gfc_resolve_fdate);
make_generic ("fdate", GFC_ISYM_FDATE, GFC_STD_GNU);
@@ -1461,17 +1461,17 @@ add_functions (void)
make_generic ("getcwd", GFC_ISYM_GETCWD, GFC_STD_GNU);
- add_sym_0 ("getgid", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("getgid", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_getgid);
make_generic ("getgid", GFC_ISYM_GETGID, GFC_STD_GNU);
- add_sym_0 ("getpid", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("getpid", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_getpid);
make_generic ("getpid", GFC_ISYM_GETPID, GFC_STD_GNU);
- add_sym_0 ("getuid", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("getuid", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_getuid);
make_generic ("getuid", GFC_ISYM_GETUID, GFC_STD_GNU);
@@ -1500,13 +1500,13 @@ add_functions (void)
make_generic ("iand", GFC_ISYM_IAND, GFC_STD_F95);
- add_sym_2 ("and", ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2 ("and", NOT_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_and, gfc_simplify_and, gfc_resolve_and,
i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
make_generic ("and", GFC_ISYM_AND, GFC_STD_GNU);
- add_sym_0 ("iargc", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("iargc", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, NULL);
make_generic ("iargc", GFC_ISYM_IARGC, GFC_STD_GNU);
@@ -1542,13 +1542,13 @@ add_functions (void)
make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95);
- add_sym_2 ("xor", ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2 ("xor", NOT_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_and, gfc_simplify_xor, gfc_resolve_xor,
i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
make_generic ("xor", GFC_ISYM_XOR, GFC_STD_GNU);
- add_sym_0 ("ierrno", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("ierrno", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_ierrno);
make_generic ("ierrno", GFC_ISYM_IERRNO, GFC_STD_GNU);
@@ -1602,7 +1602,7 @@ add_functions (void)
make_generic ("ior", GFC_ISYM_IOR, GFC_STD_F95);
- add_sym_2 ("or", ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2 ("or", NOT_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_and, gfc_simplify_or, gfc_resolve_or,
i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
@@ -1646,7 +1646,7 @@ add_functions (void)
make_generic ("ishftc", GFC_ISYM_ISHFTC, GFC_STD_F95);
- add_sym_2 ("kill", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_2 ("kill", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
gfc_check_kill, NULL, gfc_resolve_kill,
a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED);
@@ -2096,7 +2096,7 @@ add_functions (void)
make_generic ("sign", GFC_ISYM_SIGN, GFC_STD_F77);
- add_sym_2 ("signal", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_2 ("signal", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
gfc_check_signal, NULL, gfc_resolve_signal,
num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED);
@@ -2190,7 +2190,7 @@ add_functions (void)
make_generic ("symlnk", GFC_ISYM_SYMLNK, GFC_STD_GNU);
- add_sym_1 ("system", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_1 ("system", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, NULL,
c, BT_CHARACTER, dc, REQUIRED);
@@ -2216,12 +2216,12 @@ add_functions (void)
make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77);
- add_sym_0 ("time", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("time", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_time);
make_generic ("time", GFC_ISYM_TIME, GFC_STD_GNU);
- add_sym_0 ("time8", ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
+ add_sym_0 ("time8", NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
NULL, NULL, gfc_resolve_time8);
make_generic ("time8", GFC_ISYM_TIME8, GFC_STD_GNU);
@@ -2328,240 +2328,240 @@ add_subroutines (void)
if ((gfc_option.allow_std & GFC_STD_GNU) || gfc_option.flag_all_intrinsics)
make_noreturn();
- add_sym_1s ("cpu_time", 0, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_1s ("cpu_time", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_cpu_time, NULL, gfc_resolve_cpu_time,
tm, BT_REAL, dr, REQUIRED);
/* More G77 compatibility garbage. */
- add_sym_2s ("ctime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("ctime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ctime_sub, NULL, gfc_resolve_ctime_sub,
tm, BT_INTEGER, di, REQUIRED, res, BT_CHARACTER, dc, REQUIRED);
- add_sym_1s ("idate", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("idate", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_itime_idate, NULL, gfc_resolve_idate,
vl, BT_INTEGER, 4, REQUIRED);
- add_sym_1s ("itime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("itime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_itime_idate, NULL, gfc_resolve_itime,
vl, BT_INTEGER, 4, REQUIRED);
- add_sym_2s ("ltime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("ltime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ltime_gmtime, NULL, gfc_resolve_ltime,
tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED);
- add_sym_2s ("gmtime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("gmtime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ltime_gmtime, NULL, gfc_resolve_gmtime,
tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED);
- add_sym_1s ("second", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("second", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_second_sub, NULL, gfc_resolve_second_sub,
tm, BT_REAL, dr, REQUIRED);
- add_sym_2s ("chdir", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("chdir", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_chdir_sub, NULL, gfc_resolve_chdir_sub,
name, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("chmod", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("chmod", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_chmod_sub, NULL, gfc_resolve_chmod_sub,
name, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_4s ("date_and_time", 0, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_4s ("date_and_time", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_date_and_time, NULL, NULL,
dt, BT_CHARACTER, dc, OPTIONAL, tm, BT_CHARACTER, dc, OPTIONAL,
zn, BT_CHARACTER, dc, OPTIONAL, vl, BT_INTEGER, di, OPTIONAL);
/* More G77 compatibility garbage. */
- add_sym_2s ("etime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("etime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_etime_sub, NULL, gfc_resolve_etime_sub,
vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED);
- add_sym_2s ("dtime", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("dtime", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_etime_sub, NULL, gfc_resolve_etime_sub,
vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED);
- add_sym_1s ("fdate", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("fdate", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fdate_sub, NULL, gfc_resolve_fdate_sub,
dt, BT_CHARACTER, dc, REQUIRED);
- add_sym_1s ("gerror", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("gerror", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_gerror, NULL, gfc_resolve_gerror, res, BT_CHARACTER,
dc, REQUIRED);
- add_sym_2s ("getcwd", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("getcwd", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_getcwd_sub, NULL, gfc_resolve_getcwd_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("getenv", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("getenv", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
NULL, NULL, NULL,
name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, dc,
REQUIRED);
- add_sym_2s ("getarg", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("getarg", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
NULL, NULL, gfc_resolve_getarg,
c, BT_INTEGER, di, REQUIRED, vl, BT_CHARACTER, dc, REQUIRED);
- add_sym_1s ("getlog", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("getlog", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_getlog, NULL, gfc_resolve_getlog, c, BT_CHARACTER,
dc, REQUIRED);
/* F2003 commandline routines. */
- add_sym_3s ("get_command", 0, BT_UNKNOWN, 0, GFC_STD_F2003,
+ add_sym_3s ("get_command", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F2003,
NULL, NULL, gfc_resolve_get_command,
com, BT_CHARACTER, dc, OPTIONAL,
length, BT_INTEGER, di, OPTIONAL,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_4s ("get_command_argument", 0, BT_UNKNOWN, 0, GFC_STD_F2003,
+ add_sym_4s ("get_command_argument", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F2003,
NULL, NULL, gfc_resolve_get_command_argument,
num, BT_INTEGER, di, REQUIRED, val, BT_CHARACTER, dc, OPTIONAL,
length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL);
/* F2003 subroutine to get environment variables. */
- add_sym_5s ("get_environment_variable", 0, BT_UNKNOWN, 0, GFC_STD_F2003,
+ add_sym_5s ("get_environment_variable", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F2003,
NULL, NULL, gfc_resolve_get_environment_variable,
name, BT_CHARACTER, dc, REQUIRED,
val, BT_CHARACTER, dc, OPTIONAL,
length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL,
trim_name, BT_LOGICAL, dl, OPTIONAL);
- add_sym_2s ("move_alloc", 0, BT_UNKNOWN, 0, GFC_STD_F2003,
+ add_sym_2s ("move_alloc", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F2003,
gfc_check_move_alloc, NULL, NULL,
f, BT_UNKNOWN, 0, REQUIRED,
t, BT_UNKNOWN, 0, REQUIRED);
- add_sym_5s ("mvbits", 1, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_5s ("mvbits", ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_mvbits, gfc_simplify_mvbits, gfc_resolve_mvbits,
f, BT_INTEGER, di, REQUIRED, fp, BT_INTEGER, di, REQUIRED,
ln, BT_INTEGER, di, REQUIRED, t, BT_INTEGER, di, REQUIRED,
tp, BT_INTEGER, di, REQUIRED);
- add_sym_1s ("random_number", 0, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_1s ("random_number", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_random_number, NULL, gfc_resolve_random_number,
h, BT_REAL, dr, REQUIRED);
- add_sym_3s ("random_seed", 0, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_3s ("random_seed", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_random_seed, NULL, NULL,
sz, BT_INTEGER, di, OPTIONAL, pt, BT_INTEGER, di, OPTIONAL,
gt, BT_INTEGER, di, OPTIONAL);
/* More G77 compatibility garbage. */
- add_sym_3s ("alarm", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("alarm", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_alarm_sub, NULL, gfc_resolve_alarm_sub,
sec, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_1s ("srand", 0, BT_UNKNOWN, di, GFC_STD_GNU,
+ add_sym_1s ("srand", NOT_ELEMENTAL, BT_UNKNOWN, di, GFC_STD_GNU,
gfc_check_srand, NULL, gfc_resolve_srand,
c, BT_INTEGER, 4, REQUIRED);
- add_sym_1s ("exit", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("exit", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_exit, NULL, gfc_resolve_exit,
st, BT_INTEGER, di, OPTIONAL);
if ((gfc_option.allow_std & GFC_STD_GNU) || gfc_option.flag_all_intrinsics)
make_noreturn();
- add_sym_3s ("fgetc", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("fgetc", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fgetputc_sub, NULL, gfc_resolve_fgetc_sub,
ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("fget", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("fget", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fgetput_sub, NULL, gfc_resolve_fget_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_1s ("flush", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("flush", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_flush, NULL, gfc_resolve_flush,
c, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("fputc", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("fputc", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fgetputc_sub, NULL, gfc_resolve_fputc_sub,
ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("fput", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("fput", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fgetput_sub, NULL, gfc_resolve_fput_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_1s ("free", 0, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_free,
+ add_sym_1s ("free", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_free,
NULL, gfc_resolve_free, c, BT_INTEGER, ii, REQUIRED);
- add_sym_2s ("ftell", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("ftell", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ftell_sub, NULL, gfc_resolve_ftell_sub,
ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, ii, REQUIRED);
- add_sym_2s ("hostnm", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("hostnm", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_hostnm_sub, NULL, gfc_resolve_hostnm_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("kill", 0, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_kill_sub,
+ add_sym_3s ("kill", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_kill_sub,
NULL, gfc_resolve_kill_sub, c, BT_INTEGER, di, REQUIRED,
val, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("link", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("link", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_link_sub, NULL, gfc_resolve_link_sub,
name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_1s ("perror", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("perror", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_perror, NULL, gfc_resolve_perror,
c, BT_CHARACTER, dc, REQUIRED);
- add_sym_3s ("rename", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("rename", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_rename_sub, NULL, gfc_resolve_rename_sub,
name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_1s ("sleep", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_1s ("sleep", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_sleep_sub, NULL, gfc_resolve_sleep_sub,
val, BT_CHARACTER, dc, REQUIRED);
- add_sym_3s ("fstat", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("fstat", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fstat_sub, NULL, gfc_resolve_fstat_sub,
ut, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("lstat", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("lstat", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_stat_sub, NULL, gfc_resolve_lstat_sub,
name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("stat", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("stat", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_stat_sub, NULL, gfc_resolve_stat_sub,
name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("signal", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("signal", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_signal_sub, NULL, gfc_resolve_signal_sub,
num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED,
st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("symlnk", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_3s ("symlnk", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_symlnk_sub, NULL, gfc_resolve_symlnk_sub,
name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("system", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("system", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
NULL, NULL, gfc_resolve_system_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
- add_sym_3s ("system_clock", 0, BT_UNKNOWN, 0, GFC_STD_F95,
+ add_sym_3s ("system_clock", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_system_clock, NULL, gfc_resolve_system_clock,
c, BT_INTEGER, di, OPTIONAL, cr, BT_INTEGER, di, OPTIONAL,
cm, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("ttynam", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("ttynam", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ttynam_sub, NULL, gfc_resolve_ttynam_sub,
ut, BT_INTEGER, di, REQUIRED, name, BT_CHARACTER, dc, REQUIRED);
- add_sym_2s ("umask", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("umask", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_umask_sub, NULL, gfc_resolve_umask_sub,
val, BT_INTEGER, di, REQUIRED, num, BT_INTEGER, di, OPTIONAL);
- add_sym_2s ("unlink", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
+ add_sym_2s ("unlink", NOT_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_unlink_sub, NULL, gfc_resolve_unlink_sub,
c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
}
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 011d2b844de..b71609b4dd4 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -81,19 +81,19 @@ Some basic guidelines for editing this document:
* @code{COSH}: COSH, Hyperbolic cosine function
* @code{COUNT}: COUNT, Count occurrences of TRUE in an array
* @code{CPU_TIME}: CPU_TIME, CPU time subroutine
-* @code{CSHIFT}: CSHIFT, Circular array shift function
+* @code{CSHIFT}: CSHIFT, Circular shift elements of an array
* @code{CTIME}: CTIME, Subroutine (or function) to convert a time into a string
* @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
* @code{DBLE}: DBLE, Double precision conversion function
* @code{DCMPLX}: DCMPLX, Double complex conversion function
* @code{DFLOAT}: DFLOAT, Double precision conversion function
* @code{DIGITS}: DIGITS, Significant digits function
-* @code{DIM}: DIM, Dim function
+* @code{DIM}: DIM, Positive difference
* @code{DOT_PRODUCT}: DOT_PRODUCT, Dot product function
* @code{DPROD}: DPROD, Double product function
* @code{DREAL}: DREAL, Double real part function
* @code{DTIME}: DTIME, Execution time subroutine (or function)
-* @code{EOSHIFT}: EOSHIFT, End-off shift function
+* @code{EOSHIFT}: EOSHIFT, End-off shift elements of an array
* @code{EPSILON}: EPSILON, Epsilon function
* @code{ERF}: ERF, Error function
* @code{ERFC}: ERFC, Complementary error function
@@ -291,9 +291,11 @@ the applicable standard for each intrinsic procedure is noted.
@node ABORT
-@section @code{ABORT} --- Abort the program
-@cindex @code{ABORT} intrinsic
-@cindex abort
+@section @code{ABORT} --- Abort the program
+@fnindex ABORT
+@cindex program termination, with core dump
+@cindex terminate program, with core dump
+@cindex core, dump
@table @asis
@item @emph{Description}:
@@ -329,13 +331,13 @@ end program test_abort
@node ABS
-@section @code{ABS} --- Absolute value
-@cindex @code{ABS} intrinsic
-@cindex @code{CABS} intrinsic
-@cindex @code{DABS} intrinsic
-@cindex @code{IABS} intrinsic
-@cindex @code{ZABS} intrinsic
-@cindex @code{CDABS} intrinsic
+@section @code{ABS} --- Absolute value
+@fnindex ABS
+@fnindex CABS
+@fnindex DABS
+@fnindex IABS
+@fnindex ZABS
+@fnindex CDABS
@cindex absolute value
@table @asis
@@ -389,8 +391,8 @@ end program test_abs
@node ACCESS
@section @code{ACCESS} --- Checks file access modes
-@cindex @code{ACCESS}
-@cindex file system operations
+@fnindex ACCESS
+@cindex file system, access mode
@table @asis
@item @emph{Description}:
@@ -447,8 +449,9 @@ end program access_test
@node ACHAR
@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
-@cindex @code{ACHAR} intrinsic
+@fnindex ACHAR
@cindex @acronym{ASCII} collating sequence
+@cindex collating sequence, @acronym{ASCII}
@table @asis
@item @emph{Description}:
@@ -494,9 +497,10 @@ and formatted string representations.
@node ACOS
@section @code{ACOS} --- Arccosine function
-@cindex @code{ACOS} intrinsic
-@cindex @code{DACOS} intrinsic
-@cindex trigonometric functions (inverse)
+@fnindex ACOS
+@fnindex DACOS
+@cindex trigonometric function, cosine, inverse
+@cindex cosine, inverse
@table @asis
@item @emph{Description}:
@@ -545,10 +549,12 @@ Inverse function: @ref{COS}
@node ACOSH
@section @code{ACOSH} --- Hyperbolic arccosine function
-@cindex @code{ACOSH} intrinsic
-@cindex @code{DACOSH} intrinsic
+@fnindex ACOSH
+@fnindex DACOSH
+@cindex area hyperbolic cosine
@cindex hyperbolic arccosine
-@cindex hyperbolic cosine (inverse)
+@cindex hyperbolic function, cosine, inverse
+@cindex cosine, hyperbolic, inverse
@table @asis
@item @emph{Description}:
@@ -596,8 +602,9 @@ Inverse function: @ref{COSH}
@node ADJUSTL
@section @code{ADJUSTL} --- Left adjust a string
-@cindex @code{ADJUSTL} intrinsic
-@cindex string manipulation
+@fnindex ADJUSTL
+@cindex string, adjust left
+@cindex adjust string
@table @asis
@item @emph{Description}:
@@ -640,8 +647,9 @@ end program test_adjustl
@node ADJUSTR
@section @code{ADJUSTR} --- Right adjust a string
-@cindex @code{ADJUSTR} intrinsic
-@cindex string manipulation
+@fnindex ADJUSTR
+@cindex string, adjust right
+@cindex adjust string
@table @asis
@item @emph{Description}:
@@ -684,11 +692,11 @@ end program test_adjustr
@node AIMAG
@section @code{AIMAG} --- Imaginary part of complex number
-@cindex @code{AIMAG} intrinsic
-@cindex @code{DIMAG} intrinsic
-@cindex @code{IMAG} intrinsic
-@cindex @code{IMAGPART} intrinsic
-@cindex imaginary part of a complex number
+@fnindex AIMAG
+@fnindex DIMAG
+@fnindex IMAG
+@fnindex IMAGPART
+@cindex complex numbers, imaginary part
@table @asis
@item @emph{Description}:
@@ -739,9 +747,10 @@ end program test_aimag
@node AINT
@section @code{AINT} --- Truncate to a whole number
-@cindex @code{AINT} intrinsic
-@cindex @code{DINT} intrinsic
-@cindex whole number
+@fnindex AINT
+@fnindex DINT
+@cindex floor
+@cindex rounding, floor
@table @asis
@item @emph{Description}:
@@ -796,7 +805,8 @@ end program test_aint
@node ALARM
@section @code{ALARM} --- Execute a routine after a given delay
-@cindex @code{ALARM} intrinsic
+@fnindex ALARM
+@cindex delayed execution
@table @asis
@item @emph{Description}:
@@ -846,8 +856,9 @@ after 3 seconds.
@node ALL
@section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true
-@cindex @code{ALL} intrinsic
-@cindex true values
+@fnindex ALL
+@cindex array, apply condition
+@cindex array, condition testing
@table @asis
@item @emph{Description}:
@@ -912,8 +923,8 @@ end program test_all
@node ALLOCATED
@section @code{ALLOCATED} --- Status of an allocatable entity
-@cindex @code{ALLOCATED} intrinsic
-@cindex allocation status
+@fnindex ALLOCATED
+@cindex allocation, status
@table @asis
@item @emph{Description}:
@@ -952,8 +963,9 @@ end program test_allocated
@node AND
@section @code{AND} --- Bitwise logical AND
-@cindex @code{AND} intrinsic
-@cindex bit operations
+@fnindex AND
+@cindex bitwise logical and
+@cindex logical and, bitwise
@table @asis
@item @emph{Description}:
@@ -1002,9 +1014,10 @@ F95 elemental function: @ref{IAND}
@node ANINT
@section @code{ANINT} --- Nearest whole number
-@cindex @code{ANINT} intrinsic
-@cindex @code{DNINT} intrinsic
-@cindex whole number
+@fnindex ANINT
+@fnindex DNINT
+@cindex ceiling
+@cindex rounding, ceiling
@table @asis
@item @emph{Description}:
@@ -1057,8 +1070,9 @@ end program test_anint
@node ANY
@section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true
-@cindex @code{ANY} intrinsic
-@cindex true values
+@fnindex ANY
+@cindex array, apply condition
+@cindex array, condition testing
@table @asis
@item @emph{Description}:
@@ -1123,9 +1137,10 @@ end program test_any
@node ASIN
@section @code{ASIN} --- Arcsine function
-@cindex @code{ASIN} intrinsic
-@cindex @code{DASIN} intrinsic
-@cindex trigonometric functions (inverse)
+@fnindex ASIN
+@fnindex DASIN
+@cindex trigonometric function, sine, inverse
+@cindex sine, inverse
@table @asis
@item @emph{Description}:
@@ -1174,10 +1189,12 @@ Inverse function: @ref{SIN}
@node ASINH
@section @code{ASINH} --- Hyperbolic arcsine function
-@cindex @code{ASINH} intrinsic
-@cindex @code{DASINH} intrinsic
+@fnindex ASINH
+@fnindex DASINH
+@cindex area hyperbolic sine
@cindex hyperbolic arcsine
-@cindex hyperbolic sine (inverse)
+@cindex hyperbolic function, sine, inverse
+@cindex sine, hyperbolic, inverse
@table @asis
@item @emph{Description}:
@@ -1223,8 +1240,9 @@ Inverse function: @ref{SINH}
@node ASSOCIATED
@section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair
-@cindex @code{ASSOCIATED} intrinsic
-@cindex pointer status
+@fnindex ASSOCIATED
+@cindex pointer, status
+@cindex association status
@table @asis
@item @emph{Description}:
@@ -1298,9 +1316,10 @@ end program test_associated
@node ATAN
@section @code{ATAN} --- Arctangent function
-@cindex @code{ATAN} intrinsic
-@cindex @code{DATAN} intrinsic
-@cindex trigonometric functions (inverse)
+@fnindex ATAN
+@fnindex DATAN
+@cindex trigonometric function, tangent, inverse
+@cindex tangent, inverse
@table @asis
@item @emph{Description}:
@@ -1347,9 +1366,10 @@ Inverse function: @ref{TAN}
@node ATAN2
@section @code{ATAN2} --- Arctangent function
-@cindex @code{ATAN2} intrinsic
-@cindex @code{DATAN2} intrinsic
-@cindex trigonometric functions (inverse)
+@fnindex ATAN2
+@fnindex DATAN2
+@cindex trigonometric function, tangent, inverse
+@cindex tangent, inverse
@table @asis
@item @emph{Description}:
@@ -1400,10 +1420,12 @@ end program test_atan2
@node ATANH
@section @code{ATANH} --- Hyperbolic arctangent function
-@cindex @code{ASINH} intrinsic
-@cindex @code{DASINH} intrinsic
+@fnindex ASINH
+@fnindex DASINH
+@cindex area hyperbolic tangent
@cindex hyperbolic arctangent
-@cindex hyperbolic tangent (inverse)
+@cindex hyperbolic function, tangent, inverse
+@cindex tangent, hyperbolic, inverse
@table @asis
@item @emph{Description}:
@@ -1451,9 +1473,9 @@ Inverse function: @ref{TANH}
@node BESJ0
@section @code{BESJ0} --- Bessel function of the first kind of order 0
-@cindex @code{BESJ0} intrinsic
-@cindex @code{DBESJ0} intrinsic
-@cindex Bessel
+@fnindex BESJ0
+@fnindex DBESJ0
+@cindex Bessel function, first kind
@table @asis
@item @emph{Description}:
@@ -1497,9 +1519,9 @@ end program test_besj0
@node BESJ1
@section @code{BESJ1} --- Bessel function of the first kind of order 1
-@cindex @code{BESJ1} intrinsic
-@cindex @code{DBESJ1} intrinsic
-@cindex Bessel
+@fnindex BESJ1
+@fnindex DBESJ1
+@cindex Bessel function, first kind
@table @asis
@item @emph{Description}:
@@ -1543,9 +1565,9 @@ end program test_besj1
@node BESJN
@section @code{BESJN} --- Bessel function of the first kind
-@cindex @code{BESJN} intrinsic
-@cindex @code{DBESJN} intrinsic
-@cindex Bessel
+@fnindex BESJN
+@fnindex DBESJN
+@cindex Bessel function, first kind
@table @asis
@item @emph{Description}:
@@ -1590,9 +1612,9 @@ end program test_besjn
@node BESY0
@section @code{BESY0} --- Bessel function of the second kind of order 0
-@cindex @code{BESY0} intrinsic
-@cindex @code{DBESY0} intrinsic
-@cindex Bessel
+@fnindex BESY0
+@fnindex DBESY0
+@cindex Bessel function, second kind
@table @asis
@item @emph{Description}:
@@ -1635,9 +1657,9 @@ end program test_besy0
@node BESY1
@section @code{BESY1} --- Bessel function of the second kind of order 1
-@cindex @code{BESY1} intrinsic
-@cindex @code{DBESY1} intrinsic
-@cindex Bessel
+@fnindex BESY1
+@fnindex DBESY1
+@cindex Bessel function, second kind
@table @asis
@item @emph{Description}:
@@ -1680,9 +1702,9 @@ end program test_besy1
@node BESYN
@section @code{BESYN} --- Bessel function of the second kind
-@cindex @code{BESYN} intrinsic
-@cindex @code{DBESYN} intrinsic
-@cindex Bessel
+@fnindex BESYN
+@fnindex DBESYN
+@cindex Bessel function, second kind
@table @asis
@item @emph{Description}:
@@ -1727,8 +1749,8 @@ end program test_besyn
@node BIT_SIZE
@section @code{BIT_SIZE} --- Bit size inquiry function
-@cindex @code{BIT_SIZE} intrinsic
-@cindex bit size of a variable
+@fnindex BIT_SIZE
+@cindex bits, number of
@cindex size of a variable, in bits
@table @asis
@@ -1768,8 +1790,8 @@ end program test_bit_size
@node BTEST
@section @code{BTEST} --- Bit test function
-@cindex @code{BTEST} intrinsic
-@cindex bit operations
+@fnindex BTEST
+@cindex bits, testing
@table @asis
@item @emph{Description}:
@@ -1812,8 +1834,9 @@ end program test_btest
@node CEILING
@section @code{CEILING} --- Integer ceiling function
-@cindex @code{CEILING} intrinsic
+@fnindex CEILING
@cindex ceiling
+@cindex rounding, ceiling
@table @asis
@item @emph{Description}:
@@ -1858,8 +1881,8 @@ end program test_ceiling
@node CHAR
@section @code{CHAR} --- Character conversion function
-@cindex @code{CHAR} intrinsic
-@cindex conversion function (character)
+@fnindex CHAR
+@cindex conversion, to character
@table @asis
@item @emph{Description}:
@@ -1908,8 +1931,8 @@ and formatted string representations.
@node CHDIR
@section @code{CHDIR} --- Change working directory
-@cindex @code{CHDIR} intrinsic
-@cindex file system operations
+@fnindex CHDIR
+@cindex system, working directory
@table @asis
@item @emph{Description}:
@@ -1959,8 +1982,8 @@ END PROGRAM
@node CHMOD
@section @code{CHMOD} --- Change access permissions of files
-@cindex @code{CHMOD} intrinsic
-@cindex file system operations
+@fnindex CHMOD
+@cindex file system, change access mode
@table @asis
@item @emph{Description}:
@@ -2027,8 +2050,9 @@ end program chmod_test
@node CMPLX
@section @code{CMPLX} --- Complex conversion function
-@cindex @code{CMPLX} intrinsic
+@fnindex CMPLX
@cindex complex numbers, conversion to
+@cindex conversion, to complex
@table @asis
@item @emph{Description}:
@@ -2077,8 +2101,10 @@ end program test_cmplx
@node COMMAND_ARGUMENT_COUNT
@section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
-@cindex @code{COMMAND_ARGUMENT_COUNT} intrinsic
-@cindex command-line arguments, to program
+@fnindex COMMAND_ARGUMENT_COUNT
+@cindex command-line arguments
+@cindex command-line arguments, number of
+@cindex arguments, to program
@table @asis
@item @emph{Description}:
@@ -2119,9 +2145,10 @@ end program test_command_argument_count
@node CONJG
@section @code{CONJG} --- Complex conjugate function
-@cindex @code{CONJG} intrinsic
-@cindex @code{DCONJG} intrinsic
+@fnindex CONJG
+@fnindex DCONJG
@cindex complex conjugate
+
@table @asis
@item @emph{Description}:
@code{CONJG(Z)} returns the conjugate of @var{Z}. If @var{Z} is @code{(x, y)}
@@ -2167,12 +2194,13 @@ end program test_conjg
@node COS
@section @code{COS} --- Cosine function
-@cindex @code{COS} intrinsic
-@cindex @code{DCOS} intrinsic
-@cindex @code{CCOS} intrinsic
-@cindex @code{ZCOS} intrinsic
-@cindex @code{CDCOS} intrinsic
-@cindex trigonometric functions
+@fnindex COS
+@fnindex DCOS
+@fnindex CCOS
+@fnindex ZCOS
+@fnindex CDCOS
+@cindex trigonometric function, cosine
+@cindex cosine
@table @asis
@item @emph{Description}:
@@ -2224,9 +2252,11 @@ Inverse function: @ref{ACOS}
@node COSH
@section @code{COSH} --- Hyperbolic cosine function
-@cindex @code{COSH} intrinsic
-@cindex @code{DCOSH} intrinsic
+@fnindex COSH
+@fnindex DCOSH
@cindex hyperbolic cosine
+@cindex hyperbolic function, cosine
+@cindex cosine, hyperbolic
@table @asis
@item @emph{Description}:
@@ -2273,8 +2303,10 @@ Inverse function: @ref{ACOSH}
@node COUNT
@section @code{COUNT} --- Count function
-@cindex @code{COUNT} intrinsic
-@cindex count
+@fnindex COUNT
+@cindex array, conditionally count elements
+@cindex array, element counting
+@cindex array, number of elements
@table @asis
@item @emph{Description}:
@@ -2332,9 +2364,8 @@ end program test_count
@node CPU_TIME
@section @code{CPU_TIME} --- CPU elapsed time in seconds
-@cindex @code{CPU_TIME} intrinsic
+@fnindex CPU_TIME
@cindex time, elapsed
-@cindex elapsed time
@table @asis
@item @emph{Description}:
@@ -2377,9 +2408,11 @@ end program test_cpu_time
@node CSHIFT
-@section @code{CSHIFT} --- Circular shift function
-@cindex @code{CSHIFT} intrinsic
-@cindex bit operations
+@section @code{CSHIFT} --- Circular shift elements of an array
+@fnindex CSHIFT
+@cindex array, shift circularly
+@cindex array, permutation
+@cindex array, rotate
@table @asis
@item @emph{Description}:
@@ -2432,8 +2465,9 @@ end program test_cshift
@node CTIME
@section @code{CTIME} --- Convert a time into a string
-@cindex @code{CTIME} intrinsic
-@cindex time, conversion function
+@fnindex CTIME
+@cindex time, conversion to string
+@cindex conversion, to string
@table @asis
@item @emph{Description}:
@@ -2480,14 +2514,13 @@ end program test_ctime
@item @emph{See Also}:
@ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
-
@end table
@node DATE_AND_TIME
@section @code{DATE_AND_TIME} --- Date and time subroutine
-@cindex @code{DATE_AND_TIME} intrinsic
+@fnindex DATE_AND_TIME
@cindex date, current
@cindex current date
@cindex time, current
@@ -2560,8 +2593,8 @@ end program test_time_and_date
@node DBLE
@section @code{DBLE} --- Double conversion function
-@cindex @code{DBLE} intrinsic
-@cindex double conversion
+@fnindex DBLE
+@cindex conversion, to real
@table @asis
@item @emph{Description}:
@@ -2603,8 +2636,9 @@ end program test_dble
@node DCMPLX
@section @code{DCMPLX} --- Double complex conversion function
-@cindex @code{DCMPLX} intrinsic
+@fnindex DCMPLX
@cindex complex numbers, conversion to
+@cindex conversion, to complex
@table @asis
@item @emph{Description}:
@@ -2652,8 +2686,8 @@ end program test_dcmplx
@node DFLOAT
@section @code{DFLOAT} --- Double conversion function
-@cindex @code{DFLOAT} intrinsic
-@cindex double float conversion
+@fnindex DFLOAT
+@cindex conversion, to real
@table @asis
@item @emph{Description}:
@@ -2692,8 +2726,8 @@ end program test_dfloat
@node DIGITS
@section @code{DIGITS} --- Significant digits function
-@cindex @code{DIGITS} intrinsic
-@cindex digits, significant
+@fnindex DIGITS
+@cindex model representation, significant digits
@table @asis
@item @emph{Description}:
@@ -2734,11 +2768,11 @@ end program test_digits
@node DIM
-@section @code{DIM} --- Dim function
-@cindex @code{DIM} intrinsic
-@cindex @code{IDIM} intrinsic
-@cindex @code{DDIM} intrinsic
-@cindex dim
+@section @code{DIM} --- Positive difference
+@fnindex DIM
+@fnindex IDIM
+@fnindex DDIM
+@cindex positive difference
@table @asis
@item @emph{Description}:
@@ -2787,8 +2821,10 @@ end program test_dim
@node DOT_PRODUCT
@section @code{DOT_PRODUCT} --- Dot product function
-@cindex @code{DOT_PRODUCT} intrinsic
+@fnindex DOT_PRODUCT
@cindex dot product
+@cindex vector product
+@cindex product, vector
@table @asis
@item @emph{Description}:
@@ -2838,8 +2874,8 @@ end program test_dot_prod
@node DPROD
@section @code{DPROD} --- Double product function
-@cindex @code{DPROD} intrinsic
-@cindex double-precision product
+@fnindex DPROD
+@cindex product, double-precision
@table @asis
@item @emph{Description}:
@@ -2866,7 +2902,6 @@ The return value is of type @code{REAL(8)}.
@item @emph{Example}:
@smallexample
program test_dprod
- integer :: i
real :: x = 5.2
real :: y = 2.3
real(8) :: d
@@ -2880,8 +2915,8 @@ end program test_dprod
@node DREAL
@section @code{DREAL} --- Double real part function
-@cindex @code{DREAL} intrinsic
-@cindex double-precision real part
+@fnindex DREAL
+@cindex complex numbers, real part
@table @asis
@item @emph{Description}:
@@ -2921,7 +2956,7 @@ end program test_dreal
@node DTIME
@section @code{DTIME} --- Execution time subroutine (or function)
-@cindex @code{DTIME} intrinsic
+@fnindex DTIME
@cindex time, elapsed
@cindex elapsed time
@@ -2998,9 +3033,9 @@ end program test_dtime
@node EOSHIFT
-@section @code{EOSHIFT} --- End-off shift function
-@cindex @code{EOSHIFT} intrinsic
-@cindex bit operations
+@section @code{EOSHIFT} --- End-off shift elements of an array
+@fnindex EOSHIFT
+@cindex array, shift
@table @asis
@item @emph{Description}:
@@ -3064,8 +3099,8 @@ end program test_eoshift
@node EPSILON
@section @code{EPSILON} --- Epsilon function
-@cindex @code{EPSILON} intrinsic
-@cindex epsilon, significant
+@fnindex EPSILON
+@cindex model representation, epsilon
@table @asis
@item @emph{Description}:
@@ -3103,7 +3138,7 @@ end program test_epsilon
@node ERF
@section @code{ERF} --- Error function
-@cindex @code{ERF} intrinsic
+@fnindex ERF
@cindex error function
@table @asis
@@ -3147,8 +3182,8 @@ end program test_erf
@node ERFC
@section @code{ERFC} --- Error function
-@cindex @code{ERFC} intrinsic
-@cindex error function
+@fnindex ERFC
+@cindex error function, complementary
@table @asis
@item @emph{Description}:
@@ -3191,7 +3226,7 @@ end program test_erfc
@node ETIME
@section @code{ETIME} --- Execution time subroutine (or function)
-@cindex @code{ETIME} intrinsic
+@fnindex ETIME
@cindex time, elapsed
@table @asis
@@ -3268,8 +3303,9 @@ end program test_etime
@node EXIT
@section @code{EXIT} --- Exit the program with status.
-@cindex @code{EXIT} intrinsic
-@cindex exit program
+@fnindex EXIT
+@cindex program termination
+@cindex terminate program
@table @asis
@item @emph{Description}:
@@ -3311,12 +3347,13 @@ end program test_exit
@node EXP
@section @code{EXP} --- Exponential function
-@cindex @code{EXP} intrinsic
-@cindex @code{DEXP} intrinsic
-@cindex @code{CEXP} intrinsic
-@cindex @code{ZEXP} intrinsic
-@cindex @code{CDEXP} intrinsic
-@cindex exponential
+@fnindex EXP
+@fnindex DEXP
+@fnindex CEXP
+@fnindex ZEXP
+@fnindex CDEXP
+@cindex exponential function
+@cindex logarithmic function, inverse
@table @asis
@item @emph{Description}:
@@ -3362,8 +3399,9 @@ end program test_exp
@node EXPONENT
@section @code{EXPONENT} --- Exponent function
-@cindex @code{EXPONENT} intrinsic
-@cindex exponent part of a real number
+@fnindex EXPONENT
+@cindex real number, exponent
+@cindex floating point, exponent
@table @asis
@item @emph{Description}:
@@ -3403,7 +3441,7 @@ end program test_exponent
@node FDATE
@section @code{FDATE} --- Get the current time as a string
-@cindex @code{FDATE} intrinsic
+@fnindex FDATE
@cindex time, current
@cindex current time
@cindex date, current
@@ -3459,10 +3497,9 @@ end program test_fdate
@node FLOAT
-
@section @code{FLOAT} --- Convert integer to default real
-@cindex @code{FLOAT} intrinsic
-@cindex conversion function (float)
+@fnindex FLOAT
+@cindex conversion, to real
@table @asis
@item @emph{Description}:
@@ -3501,9 +3538,10 @@ end program test_float
@node FGET
@section @code{FGET} --- Read a single character in stream mode from stdin
-@cindex @code{FGET} intrinsic
-@cindex file operations
-@cindex stream operations
+@fnindex FGET
+@cindex read character, stream mode
+@cindex stream mode, read character
+@cindex file operation, read character
@table @asis
@item @emph{Description}:
@@ -3558,9 +3596,10 @@ END PROGRAM
@node FGETC
@section @code{FGETC} --- Read a single character in stream mode
-@cindex @code{FGETC} intrinsic
-@cindex file operations
-@cindex stream operations
+@fnindex FGETC
+@cindex read character, stream mode
+@cindex stream mode, read character
+@cindex file operation, read character
@table @asis
@item @emph{Description}:
@@ -3614,8 +3653,9 @@ END PROGRAM
@node FLOOR
@section @code{FLOOR} --- Integer floor function
-@cindex @code{FLOOR} intrinsic
+@fnindex FLOOR
@cindex floor
+@cindex rounding, floor
@table @asis
@item @emph{Description}:
@@ -3660,8 +3700,8 @@ end program test_floor
@node FLUSH
@section @code{FLUSH} --- Flush I/O unit(s)
-@cindex @code{FLUSH} intrinsic
-@cindex flush output files
+@fnindex FLUSH
+@cindex file operation, flush
@table @asis
@item @emph{Description}:
@@ -3692,8 +3732,8 @@ statement that should be preferred over the @code{FLUSH} intrinsic.
@node FNUM
@section @code{FNUM} --- File number function
-@cindex @code{FNUM} intrinsic
-@cindex fnum
+@fnindex FNUM
+@cindex file operation, file number
@table @asis
@item @emph{Description}:
@@ -3733,9 +3773,10 @@ end program test_fnum
@node FPUT
@section @code{FPUT} --- Write a single character in stream mode to stdout
-@cindex @code{FPUT} intrinsic
-@cindex file operations
-@cindex stream operations
+@fnindex FPUT
+@cindex write character, stream mode
+@cindex stream mode, write character
+@cindex file operation, write character
@table @asis
@item @emph{Description}:
@@ -3783,9 +3824,10 @@ END PROGRAM
@node FPUTC
@section @code{FPUTC} --- Write a single character in stream mode
-@cindex @code{FPUTC} intrinsic
-@cindex file operations
-@cindex stream operations
+@fnindex FPUTC
+@cindex write character, stream mode
+@cindex stream mode, write character
+@cindex file operation, write character
@table @asis
@item @emph{Description}:
@@ -3837,8 +3879,9 @@ END PROGRAM
@node FRACTION
@section @code{FRACTION} --- Fractional part of the model representation
-@cindex @code{FRACTION} intrinsic
-@cindex fractional part
+@fnindex FRACTION
+@cindex real number, fraction
+@cindex floating point, fraction
@table @asis
@item @emph{Description}:
@@ -3879,8 +3922,8 @@ end program test_fraction
@node FREE
@section @code{FREE} --- Frees memory
-@cindex @code{FREE} intrinsic
-@cindex Cray pointers
+@fnindex FREE
+@cindex pointer, cray
@table @asis
@item @emph{Description}:
@@ -3919,8 +3962,9 @@ See @code{MALLOC} for an example.
@node FSEEK
@section @code{FSEEK} --- Low level file positioning subroutine
-@cindex @code{FSEEK} intrinsic
-@cindex file system operations
+@fnindex FSEEK
+@cindex file operation, seek
+@cindex file operation, position
Not yet implemented in GNU Fortran.
@@ -3947,8 +3991,8 @@ Subroutine
@node FSTAT
@section @code{FSTAT} --- Get file status
-@cindex @code{FSTAT} intrinsic
-@cindex file system operations
+@fnindex FSTAT
+@cindex file system, file status
@table @asis
@item @emph{Description}:
@@ -3985,7 +4029,8 @@ To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
@node FTELL
@section @code{FTELL} --- Current stream position
-@cindex @code{FTELL} intrinsic
+@fnindex FTELL
+@cindex file operation, position
@table @asis
@item @emph{Description}:
@@ -4034,7 +4079,8 @@ END PROGRAM
@node GERROR
@section @code{GERROR} --- Get last system error message
-@cindex @code{GERROR} intrinsic
+@fnindex GERROR
+@cindex system, error handling
@table @asis
@item @emph{Description}:
@@ -4072,8 +4118,9 @@ END PROGRAM
@node GETARG
@section @code{GETARG} --- Get command line arguments
-@cindex @code{GETARG} intrinsic
-@cindex command-line arguments, to program
+@fnindex GETARG
+@cindex command-line arguments
+@cindex arguments, to program
@table @asis
@item @emph{Description}:
@@ -4132,8 +4179,9 @@ F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT},
@node GET_COMMAND
@section @code{GET_COMMAND} --- Get the entire command line
-@cindex @code{GET_COMMAND} intrinsic
-@cindex command-line arguments, to program
+@fnindex GET_COMMAND
+@cindex command-line arguments
+@cindex arguments, to program
@table @asis
@item @emph{Description}:
@@ -4174,8 +4222,9 @@ END PROGRAM
@node GET_COMMAND_ARGUMENT
@section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
-@cindex @code{GET_COMMAND_ARGUMENT} intrinsic
-@cindex command-line arguments, to program
+@fnindex GET_COMMAND_ARGUMENT
+@cindex command-line arguments
+@cindex arguments, to program
@table @asis
@item @emph{Description}:
@@ -4230,8 +4279,8 @@ END PROGRAM
@node GETCWD
@section @code{GETCWD} --- Get current working directory
-@cindex @code{GETCWD} intrinsic
-@cindex file system operations
+@fnindex GETCWD
+@cindex system, working directory
@table @asis
@item @emph{Description}:
@@ -4270,7 +4319,7 @@ END PROGRAM
@node GETENV
@section @code{GETENV} --- Get an environmental variable
-@cindex @code{GETENV} intrinsic
+@fnindex GETENV
@cindex environment variable
@table @asis
@@ -4319,7 +4368,7 @@ END PROGRAM
@node GET_ENVIRONMENT_VARIABLE
@section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
-@cindex @code{GET_ENVIRONMENT_VARIABLE} intrinsic
+@fnindex GET_ENVIRONMENT_VARIABLE
@cindex environment variable
@table @asis
@@ -4360,8 +4409,8 @@ END PROGRAM
@node GETGID
@section @code{GETGID} --- Group ID function
-@cindex @code{GETGID} intrinsic
-@cindex file system operations
+@fnindex GETGID
+@cindex system, group id
@table @asis
@item @emph{Description}:
@@ -4392,7 +4441,9 @@ See @code{GETPID} for an example.
@node GETLOG
@section @code{GETLOG} --- Get login name
-@cindex @code{GETLOG} intrinsic
+@fnindex GETLOG
+@cindex system, login name
+@cindex login name
@table @asis
@item @emph{Description}:
@@ -4435,8 +4486,9 @@ END PROGRAM
@node GETPID
@section @code{GETPID} --- Process ID function
-@cindex @code{GETPID} intrinsic
-@cindex process ID, current
+@fnindex GETPID
+@cindex system, process id
+@cindex process id
@table @asis
@item @emph{Description}:
@@ -4473,8 +4525,9 @@ end program info
@node GETUID
@section @code{GETUID} --- User ID function
-@cindex @code{GETUID} intrinsic
-@cindex user ID, current
+@fnindex GETUID
+@cindex system, user id
+@cindex user id
@table @asis
@item @emph{Description}:
@@ -4505,8 +4558,8 @@ See @code{GETPID} for an example.
@node GMTIME
@section @code{GMTIME} --- Convert time to GMT info
-@cindex @code{GMTIME} intrinsic
-@cindex time, conversion function
+@fnindex GMTIME
+@cindex time, conversion to GMT info
@table @asis
@item @emph{Description}:
@@ -4559,7 +4612,8 @@ The elements of @var{TARRAY} are assigned as follows:
@node HOSTNM
@section @code{HOSTNM} --- Get system host name
-@cindex @code{HOSTNM} intrinsic
+@fnindex HOSTNM
+@cindex system, host name
@table @asis
@item @emph{Description}:
@@ -4598,8 +4652,9 @@ be obtained, or to a blank string otherwise.
@node HUGE
@section @code{HUGE} --- Largest number of a kind
-@cindex @code{HUGE} intrinsic
-@cindex huge
+@fnindex HUGE
+@cindex limits, largest number
+@cindex model representation, largest number
@table @asis
@item @emph{Description}:
@@ -4610,7 +4665,7 @@ the model of the type of @code{X}.
F95 and later
@item @emph{Class}:
-Elemental function
+Inquiry function
@item @emph{Syntax}:
@code{RESULT = HUGE(X)}
@@ -4636,9 +4691,10 @@ end program test_huge_tiny
@node IACHAR
@section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence
-@cindex @code{IACHAR} intrinsic
+@fnindex IACHAR
@cindex @acronym{ASCII} collating sequence
-@cindex conversion function (character)
+@cindex collating sequence, @acronym{ASCII}
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -4684,8 +4740,9 @@ and formatted string representations.
@node IAND
@section @code{IAND} --- Bitwise logical and
-@cindex @code{IAND} intrinsic
-@cindex bit operations
+@fnindex IAND
+@cindex bitwise logical and
+@cindex logical and, bitwise
@table @asis
@item @emph{Description}:
@@ -4731,8 +4788,10 @@ END PROGRAM
@node IARGC
@section @code{IARGC} --- Get the number of command line arguments
-@cindex @code{IARGC} intrinsic
-@cindex command-line arguments, to program
+@fnindex IARGC
+@cindex command-line arguments
+@cindex command-line arguments, number of
+@cindex arguments, to program
@table @asis
@item @emph{Description}:
@@ -4773,8 +4832,9 @@ F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT},
@node IBCLR
@section @code{IBCLR} --- Clear bit
-@cindex @code{IBCLR} intrinsic
-@cindex bit operations
+@fnindex IBCLR
+@cindex bits, unset
+@cindex bits, clear
@table @asis
@item @emph{Description}:
@@ -4809,8 +4869,9 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node IBITS
@section @code{IBITS} --- Bit extraction
-@cindex @code{IBITS} intrinsic
-@cindex bit operations
+@fnindex IBITS
+@cindex bits, get
+@cindex bits, extract
@table @asis
@item @emph{Description}:
@@ -4848,8 +4909,8 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node IBSET
@section @code{IBSET} --- Set bit
-@cindex @code{IBSET} intrinsic
-@cindex bit operations
+@fnindex IBSET
+@cindex bits, set
@table @asis
@item @emph{Description}:
@@ -4884,8 +4945,8 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node ICHAR
@section @code{ICHAR} --- Character-to-integer conversion function
-@cindex @code{ICHAR} intrinsic
-@cindex conversion function (character)
+@fnindex ICHAR
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -4952,7 +5013,9 @@ end program read_val
@node IDATE
@section @code{IDATE} --- Get current local time subroutine (day/month/year)
-@cindex @code{IDATE} intrinsic
+@fnindex IDATE
+@cindex date, current
+@cindex current date
@table @asis
@item @emph{Description}:
@@ -4995,8 +5058,9 @@ end program test_idate
@node IEOR
@section @code{IEOR} --- Bitwise logical exclusive or
-@cindex @code{IEOR} intrinsic
-@cindex bit operations
+@fnindex IEOR
+@cindex bitwise logical exclusive or
+@cindex logical exclusive or, bitwise
@table @asis
@item @emph{Description}:
@@ -5033,7 +5097,8 @@ the larger argument.)
@node IERRNO
@section @code{IERRNO} --- Get the last system error number
-@cindex @code{IERRNO} intrinsic
+@fnindex IERRNO
+@cindex system, error handling
@table @asis
@item @emph{Description}:
@@ -5044,7 +5109,7 @@ function.
GNU extension
@item @emph{Class}:
-Elemental function
+Non-elemental function
@item @emph{Syntax}:
@code{RESULT = IERRNO()}
@@ -5064,8 +5129,9 @@ kind.
@node INDEX
@section @code{INDEX} --- Position of a substring within a string
-@cindex @code{INDEX} intrinsic
-@cindex string manipulation
+@fnindex INDEX
+@cindex substring position
+@cindex string, find substring
@table @asis
@item @emph{Description}:
@@ -5106,10 +5172,10 @@ kind.
@node INT
@section @code{INT} --- Convert to integer type
-@cindex @code{INT} intrinsic
-@cindex @code{IFIX} intrinsic
-@cindex @code{IDINT} intrinsic
-@cindex conversion function (integer)
+@fnindex INT
+@fnindex IFIX
+@fnindex IDINT
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -5171,9 +5237,9 @@ end program
@node INT2
@section @code{INT2} --- Convert to 16-bit integer type
-@cindex @code{INT2} intrinsic
-@cindex @code{SHORT} intrinsic
-@cindex conversion function (integer)
+@fnindex INT2
+@fnindex SHORT
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -5209,8 +5275,8 @@ The return value is a @code{INTEGER(2)} variable.
@node INT8
@section @code{INT8} --- Convert to 64-bit integer type
-@cindex @code{INT8} intrinsic
-@cindex conversion function (integer)
+@fnindex INT8
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -5244,8 +5310,9 @@ The return value is a @code{INTEGER(8)} variable.
@node IOR
@section @code{IOR} --- Bitwise logical or
-@cindex @code{IOR} intrinsic
-@cindex bit operations
+@fnindex IOR
+@cindex bitwise logical or
+@cindex logical or, bitwise
@table @asis
@item @emph{Description}:
@@ -5282,8 +5349,8 @@ the larger argument.)
@node IRAND
@section @code{IRAND} --- Integer pseudo-random number
-@cindex @code{IRAND} intrinsic
-@cindex random numbers
+@fnindex IRAND
+@cindex random number generation
@table @asis
@item @emph{Description}:
@@ -5328,7 +5395,8 @@ end program test_irand
@node ISATTY
@section @code{ISATTY} --- Whether a unit is a terminal device.
-@cindex @code{ISATTY} intrinsic
+@fnindex ISATTY
+@cindex system, terminal
@table @asis
@item @emph{Description}:
@@ -5369,8 +5437,8 @@ END PROGRAM
@node ISHFT
@section @code{ISHFT} --- Shift bits
-@cindex @code{ISHFT} intrinsic
-@cindex bit operations
+@fnindex ISHFT
+@cindex bits, shift
@table @asis
@item @emph{Description}:
@@ -5409,8 +5477,8 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node ISHFTC
@section @code{ISHFTC} --- Shift bits circularly
-@cindex @code{ISHFTC} intrinsic
-@cindex bit operations
+@fnindex ISHFTC
+@cindex bits, shift circular
@table @asis
@item @emph{Description}:
@@ -5453,7 +5521,9 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node ITIME
@section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds)
-@cindex @code{ITIME} intrinsic
+@fnindex ITIME
+@cindex time, current
+@cindex current time
@table @asis
@item @emph{Description}:
@@ -5497,7 +5567,7 @@ end program test_itime
@node KILL
@section @code{KILL} --- Send a signal to a process
-@cindex @code{KILL} intrinsic
+@fnindex KILL
@table @asis
@item @emph{Description}:
@@ -5530,7 +5600,8 @@ Subroutine
@node KIND
@section @code{KIND} --- Kind of an entity
-@cindex @code{KIND} intrinsic
+@fnindex KIND
+@cindex kind
@table @asis
@item @emph{Description}:
@@ -5572,7 +5643,8 @@ end program test_kind
@node LBOUND
@section @code{LBOUND} --- Lower dimension bounds of an array
-@cindex @code{LBOUND} intrinsic
+@fnindex LBOUND
+@cindex array, lower bound
@table @asis
@item @emph{Description}:
@@ -5609,7 +5681,8 @@ dimension, the lower bound is taken to be 1.
@node LEN
@section @code{LEN} --- Length of a character entity
-@cindex @code{LEN} intrinsic
+@fnindex LEN
+@cindex string, length
@table @asis
@item @emph{Description}:
@@ -5644,7 +5717,8 @@ The return value is an @code{INTEGER} of the default kind.
@node LEN_TRIM
@section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
-@cindex @code{LEN_TRIM} intrinsic
+@fnindex LEN_TRIM
+@cindex string, length, without trailing whitespace
@table @asis
@item @emph{Description}:
@@ -5676,9 +5750,9 @@ The return value is an @code{INTEGER} of the default kind.
@node LGE
@section @code{LGE} --- Lexical greater than or equal
-@cindex @code{LGE} intrinsic
-@cindex comparison (lexical)
-@cindex lexical comparison
+@fnindex LGE
+@cindex lexical comparison of strings
+@cindex string, comparison
@table @asis
@item @emph{Description}:
@@ -5722,9 +5796,9 @@ otherwise, based on the ASCII ordering.
@node LGT
@section @code{LGT} --- Lexical greater than
-@cindex @code{LGT} intrinsic
-@cindex comparison (lexical)
-@cindex lexical comparison
+@fnindex LGT
+@cindex lexical comparison of strings
+@cindex string, comparison
@table @asis
@item @emph{Description}:
@@ -5768,8 +5842,9 @@ otherwise, based on the ASCII ordering.
@node LINK
@section @code{LINK} --- Create a hard link
-@cindex @code{LINK} intrinsic
-@cindex file system operations
+@fnindex LINK
+@cindex file system, create link
+@cindex file system, hard link
@table @asis
@item @emph{Description}:
@@ -5810,9 +5885,9 @@ Subroutine, non-elemental function
@node LLE
@section @code{LLE} --- Lexical less than or equal
-@cindex @code{LLE} intrinsic
-@cindex comparison (lexical)
-@cindex lexical comparison
+@fnindex LLE
+@cindex lexical comparison of strings
+@cindex string, comparison
@table @asis
@item @emph{Description}:
@@ -5856,9 +5931,9 @@ otherwise, based on the ASCII ordering.
@node LLT
@section @code{LLT} --- Lexical less than
-@cindex @code{LLT} intrinsic
-@cindex comparison (lexical)
-@cindex lexical comparison
+@fnindex LLT
+@cindex lexical comparison of strings
+@cindex string, comparison
@table @asis
@item @emph{Description}:
@@ -5902,7 +5977,8 @@ otherwise, based on the ASCII ordering.
@node LNBLNK
@section @code{LNBLNK} --- Index of the last non-blank character in a string
-@cindex @code{LNBLNK} intrinsic
+@fnindex LNBLNK
+@cindex string, find non-blank character
@table @asis
@item @emph{Description}:
@@ -5936,7 +6012,7 @@ The return value is of @code{INTEGER(kind=4)} type.
@node LOC
@section @code{LOC} --- Returns the address of a variable
-@cindex @code{LOC} intrinsic
+@fnindex LOC
@cindex location of a variable in memory
@table @asis
@@ -5977,13 +6053,14 @@ end program test_loc
@node LOG
@section @code{LOG} --- Logarithm function
-@cindex @code{LOG} intrinsic
-@cindex @code{ALOG} intrinsic
-@cindex @code{DLOG} intrinsic
-@cindex @code{CLOG} intrinsic
-@cindex @code{ZLOG} intrinsic
-@cindex @code{CDLOG} intrinsic
-@cindex logarithm
+@fnindex LOG
+@fnindex ALOG
+@fnindex DLOG
+@fnindex CLOG
+@fnindex ZLOG
+@fnindex CDLOG
+@cindex exponential function, inverse
+@cindex logarithmic function
@table @asis
@item @emph{Description}:
@@ -6033,10 +6110,11 @@ end program test_log
@node LOG10
@section @code{LOG10} --- Base 10 logarithm function
-@cindex @code{LOG10} intrinsic
-@cindex @code{ALOG10} intrinsic
-@cindex @code{DLOG10} intrinsic
-@cindex logarithm
+@fnindex LOG10
+@fnindex ALOG10
+@fnindex DLOG10
+@cindex exponential function, inverse
+@cindex logarithmic function
@table @asis
@item @emph{Description}:
@@ -6053,8 +6131,7 @@ Elemental function
@item @emph{Arguments}:
@multitable @columnfractions .15 .70
-@item @var{X} @tab The type shall be @code{REAL(*)} or
-@code{COMPLEX(*)}.
+@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@item @emph{Return value}:
@@ -6081,8 +6158,8 @@ end program test_log10
@node LOGICAL
@section @code{LOGICAL} --- Convert to logical type
-@cindex @code{LOGICAL} intrinsic
-@cindex conversion function (logical)
+@fnindex LOGICAL
+@cindex conversion, to logical
@table @asis
@item @emph{Description}:
@@ -6118,8 +6195,8 @@ kind corresponding to @var{KIND}, or of the default logical kind if
@node LONG
@section @code{LONG} --- Convert to integer type
-@cindex @code{LONG} intrinsic
-@cindex conversion function (integer)
+@fnindex LONG
+@cindex conversion, to integer
@table @asis
@item @emph{Description}:
@@ -6154,8 +6231,8 @@ The return value is a @code{INTEGER(4)} variable.
@node LSHIFT
@section @code{LSHIFT} --- Left shift bits
-@cindex @code{LSHIFT} intrinsic
-@cindex bit operations
+@fnindex LSHIFT
+@cindex bits, shift left
@table @asis
@item @emph{Description}:
@@ -6196,8 +6273,8 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node LSTAT
@section @code{LSTAT} --- Get file status
-@cindex @code{LSTAT} intrinsic
-@cindex file system operations
+@fnindex LSTAT
+@cindex file system, file status
@table @asis
@item @emph{Description}:
@@ -6234,8 +6311,8 @@ To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT}
@node LTIME
@section @code{LTIME} --- Convert time to local time info
-@cindex @code{LTIME} intrinsic
-@cindex time, conversion function
+@fnindex LTIME
+@cindex time, converstion to local time info
@table @asis
@item @emph{Description}:
@@ -6287,8 +6364,8 @@ The elements of @var{TARRAY} are assigned as follows:
@node MALLOC
@section @code{MALLOC} --- Allocate dynamic memory
-@cindex @code{MALLOC} intrinsic
-@cindex Cray pointers
+@fnindex MALLOC
+@cindex pointer, cray
@table @asis
@item @emph{Description}:
@@ -6353,8 +6430,9 @@ end program test_malloc
@node MATMUL
@section @code{MATMUL} --- matrix multiplication
-@cindex @code{MATMUL} intrinsic
-@cindex matrix operations
+@fnindex MATMUL
+@cindex matrix multiplication
+@cindex product, matrix
@table @asis
@item @emph{Description}:
@@ -6397,12 +6475,13 @@ for the @code{*} or @code{.AND.} operators.
@node MAX
@section @code{MAX} --- Maximum value of an argument list
-@cindex @code{MAX} intrinsic
-@cindex @code{MAX0} intrinsic
-@cindex @code{AMAX0} intrinsic
-@cindex @code{MAX1} intrinsic
-@cindex @code{AMAX1} intrinsic
-@cindex @code{DMAX1} intrinsic
+@fnindex MAX
+@fnindex MAX0
+@fnindex AMAX0
+@fnindex MAX1
+@fnindex AMAX1
+@fnindex DMAX1
+@cindex maximum value
@table @asis
@item @emph{Description}:
@@ -6450,9 +6529,8 @@ and has the same type and kind as the first argument.
@node MAXEXPONENT
@section @code{MAXEXPONENT} --- Maximum exponent of a real kind
-@cindex @code{MAXEXPONENT} intrinsic
-@cindex maximum exponent
-@cindex exponent, maximum
+@fnindex MAXEXPONENT
+@cindex model representation, maximum exponent
@table @asis
@item @emph{Description}:
@@ -6493,7 +6571,8 @@ end program exponents
@node MAXLOC
@section @code{MAXLOC} --- Location of the maximum value within an array
-@cindex @code{MAXLOC} intrinsic
+@fnindex MAXLOC
+@cindex array, location of maximum element
@table @asis
@item @emph{Description}:
@@ -6551,7 +6630,9 @@ of one, the result is a scalar. In all cases, the result is of default
@node MAXVAL
@section @code{MAXVAL} --- Maximum value of an array
-@cindex @code{MAXVAL} intrinsic
+@fnindex MAXVAL
+@cindex array, maximum value
+@cindex maximum value
@table @asis
@item @emph{Description}:
@@ -6603,7 +6684,7 @@ cases, the result is of the same type and kind as @var{ARRAY}.
@node MCLOCK
@section @code{MCLOCK} --- Time function
-@cindex @code{MCLOCK} intrinsic
+@fnindex MCLOCK
@cindex time, clock ticks
@cindex clock ticks
@@ -6641,9 +6722,9 @@ the system does not support @code{clock(3)}.
@node MCLOCK8
@section @code{MCLOCK8} --- Time function (64-bit)
-@cindex @code{MCLOCK8} intrinsic
-@cindex time, current
-@cindex current time
+@fnindex MCLOCK8
+@cindex time, clock ticks
+@cindex clock ticks
@table @asis
@item @emph{Description}:
@@ -6681,7 +6762,9 @@ the system does not support @code{clock(3)}.
@node MERGE
@section @code{MERGE} --- Merge variables
-@cindex @code{MERGE} intrinsic
+@fnindex MERGE
+@cindex array, merge arrays
+@cindex array, combine arrays
@table @asis
@item @emph{Description}:
@@ -6715,12 +6798,13 @@ The result is of the same type and type parameters as @var{TSOURCE}.
@node MIN
@section @code{MIN} --- Minimum value of an argument list
-@cindex @code{MIN} intrinsic
-@cindex @code{MIN0} intrinsic
-@cindex @code{AMIN0} intrinsic
-@cindex @code{MIN1} intrinsic
-@cindex @code{AMIN1} intrinsic
-@cindex @code{DMIN1} intrinsic
+@fnindex MIN
+@fnindex MIN0
+@fnindex AMIN0
+@fnindex MIN1
+@fnindex AMIN1
+@fnindex DMIN1
+@cindex minimum value
@table @asis
@item @emph{Description}:
@@ -6767,9 +6851,8 @@ and has the same type and kind as the first argument.
@node MINEXPONENT
@section @code{MINEXPONENT} --- Minimum exponent of a real kind
-@cindex @code{MINEXPONENT} intrinsic
-@cindex minimum exponent
-@cindex exponent, minimum
+@fnindex MINEXPONENT
+@cindex model representation, minimum exponent
@table @asis
@item @emph{Description}:
@@ -6802,7 +6885,8 @@ See @code{MAXEXPONENT} for an example.
@node MINLOC
@section @code{MINLOC} --- Location of the minimum value within an array
-@cindex @code{MINLOC} intrinsic
+@fnindex MINLOC
+@cindex array, location of minimum element
@table @asis
@item @emph{Description}:
@@ -6860,7 +6944,9 @@ of one, the result is a scalar. In all cases, the result is of default
@node MINVAL
@section @code{MINVAL} --- Minimum value of an array
-@cindex @code{MINVAL} intrinsic
+@fnindex MINVAL
+@cindex array, minmum value
+@cindex minimum value
@table @asis
@item @emph{Description}:
@@ -6913,10 +6999,11 @@ cases, the result is of the same type and kind as @var{ARRAY}.
@node MOD
@section @code{MOD} --- Remainder function
-@cindex @code{MOD} intrinsic
-@cindex @code{AMOD} intrinsic
-@cindex @code{DMOD} intrinsic
+@fnindex MOD
+@fnindex AMOD
+@fnindex DMOD
@cindex remainder
+@cindex division, remainder
@table @asis
@item @emph{Description}:
@@ -6975,8 +7062,9 @@ end program test_mod
@node MODULO
@section @code{MODULO} --- Modulo function
-@cindex @code{MODULO} intrinsic
+@fnindex MODULO
@cindex modulo
+@cindex division, modulo
@table @asis
@item @emph{Description}:
@@ -7029,7 +7117,7 @@ end program
@node MOVE_ALLOC
@section @code{MOVE_ALLOC} --- Move allocation from one object to another
-@cindex @code{MOVE_ALLOC} intrinsic
+@fnindex MOVE_ALLOC
@cindex moving allocation
@cindex allocation, moving
@@ -7076,8 +7164,8 @@ end program test_move_alloc
@node MVBITS
@section @code{MVBITS} --- Move bits from one integer to another
-@cindex @code{MVBITS} intrinsic
-@cindex bit operations
+@fnindex MVBITS
+@cindex bits, move
@table @asis
@item @emph{Description}:
@@ -7092,10 +7180,10 @@ affected by the movement of bits is unchanged. The values of
F95 and later
@item @emph{Class}:
-Elemental function
+Elemental subroutine
@item @emph{Syntax}:
-@code{RESULT = MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
+@code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .70
@@ -7107,21 +7195,17 @@ Elemental function
@item @var{TOPOS} @tab The type shall be @code{INTEGER(*)}.
@end multitable
-@item @emph{Return value}:
-The return value is of type @code{INTEGER(*)} and of the same kind as
-@var{FROM}.
-
@item @emph{See also}:
@ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
-
@end table
@node NEAREST
@section @code{NEAREST} --- Nearest representable number
-@cindex @code{NEAREST} intrinsic
-@cindex processor-representable number
+@fnindex NEAREST
+@cindex real number, nearest different
+@cindex floating point, nearest different
@table @asis
@item @emph{Description}:
@@ -7166,8 +7250,9 @@ end program test_nearest
@node NEW_LINE
@section @code{NEW_LINE} --- New line character
-@cindex @code{NEW_LINE} intrinsic
-@cindex @code{NEW_LINE} intrinsic
+@fnindex NEW_LINE
+@cindex newline
+@cindex output, newline
@table @asis
@item @emph{Description}:
@@ -7177,7 +7262,7 @@ end program test_nearest
F2003 and later
@item @emph{Class}:
-Elemental function
+Inquiry function
@item @emph{Syntax}:
@code{RESULT = NEW_LINE(C)}
@@ -7205,9 +7290,9 @@ end program newline
@node NINT
@section @code{NINT} --- Nearest whole number
-@cindex @code{NINT} intrinsic
-@cindex @code{IDNINT} intrinsic
-@cindex whole number
+@fnindex NINT
+@fnindex IDNINT
+@cindex rounding, nearest whole number
@table @asis
@item @emph{Description}:
@@ -7258,8 +7343,10 @@ end program test_nint
@node NOT
@section @code{NOT} --- Logical negation
-@cindex @code{NOT} intrinsic
-@cindex bit operations
+@fnindex NOT
+@cindex bits, negate
+@cindex bitwise logical not
+@cindex logical not, bitwise
@table @asis
@item @emph{Description}:
@@ -7292,8 +7379,9 @@ argument.
@node NULL
@section @code{NULL} --- Function that returns an disassociated pointer
-@cindex @code{NULL} intrinsic
-@cindex pointer status
+@fnindex NULL
+@cindex pointer, status
+@cindex pointer, disassociated
@table @asis
@item @emph{Description}:
@@ -7336,8 +7424,9 @@ REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
@node OR
@section @code{OR} --- Bitwise logical OR
-@cindex @code{OR} intrinsic
-@cindex bit operations
+@fnindex OR
+@cindex bitwise logical or
+@cindex logical or, bitwise
@table @asis
@item @emph{Description}:
@@ -7386,8 +7475,10 @@ F95 elemental function: @ref{IOR}
@node PACK
@section @code{PACK} --- Pack an array into an array of rank one
-@cindex @code{PACK} intrinsic
-@cindex array manipulation
+@fnindex PACK
+@cindex array, packing
+@cindex array, reduce dimension
+@cindex array, gather elements
@table @asis
@item @emph{Description}:
@@ -7452,7 +7543,8 @@ END PROGRAM
@node PERROR
@section @code{PERROR} --- Print system error message
-@cindex @code{PERROR} intrinsic
+@fnindex PERROR
+@cindex system, error handling
@table @asis
@item @emph{Description}:
@@ -7482,8 +7574,8 @@ Subroutine
@node PRECISION
@section @code{PRECISION} --- Decimal precision of a real kind
-@cindex @code{PRECISION} intrinsic
-@cindex precision of a real variable
+@fnindex PRECISION
+@cindex model representation, precision
@table @asis
@item @emph{Description}:
@@ -7524,7 +7616,7 @@ end program prec_and_range
@node PRESENT
@section @code{PRESENT} --- Determine whether an optional dummy argument is specified
-@cindex @code{PRESENT} intrinsic
+@fnindex PRESENT
@table @asis
@item @emph{Description}:
@@ -7567,8 +7659,11 @@ END PROGRAM
@node PRODUCT
@section @code{PRODUCT} --- Product of array elements
-@cindex @code{PRODUCT} intrinsic
-@cindex array operation
+@fnindex PRODUCT
+@cindex array, product
+@cindex array, multiply elements
+@cindex array, conditionally multiply elements
+@cindex multiply array elements
@table @asis
@item @emph{Description}:
@@ -7622,8 +7717,9 @@ END PROGRAM
@node RADIX
@section @code{RADIX} --- Base of a model number
-@cindex @code{RADIX} intrinsic
-@cindex base
+@fnindex RADIX
+@cindex model representation, base
+@cindex model representation, radix
@table @asis
@item @emph{Description}:
@@ -7661,8 +7757,8 @@ end program test_radix
@node RAN
@section @code{RAN} --- Real pseudo-random number
-@cindex @code{RAN} intrinsic
-@cindex random numbers
+@fnindex RAN
+@cindex random number generation
@table @asis
@item @emph{Description}:
@@ -7684,8 +7780,8 @@ Non-elemental function
@node RAND
@section @code{RAND} --- Real pseudo-random number
-@cindex @code{RAND} intrinsic
-@cindex random numbers
+@fnindex RAND
+@cindex random number generation
@table @asis
@item @emph{Description}:
@@ -7732,8 +7828,8 @@ end program test_rand
@node RANDOM_NUMBER
@section @code{RANDOM_NUMBER} --- Pseudo-random number
-@cindex @code{RANDOM_NUMBER} intrinsic
-@cindex random numbers
+@fnindex RANDOM_NUMBER
+@cindex random number generation
@table @asis
@item @emph{Description}:
@@ -7744,7 +7840,7 @@ from the uniform distribution over the range @math{ 0 \leq x < 1}.
F95 and later
@item @emph{Class}:
-Elemental subroutine
+Subroutine
@item @emph{Syntax}:
@code{RANDOM_NUMBER(HARVEST)}
@@ -7780,8 +7876,9 @@ random number generator instead.
@node RANDOM_SEED
@section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
-@cindex @code{RANDOM_SEED} intrinsic
-@cindex random numbers
+@fnindex RANDOM_SEED
+@cindex random number generation, seeding
+@cindex seeding a random number generator
@table @asis
@item @emph{Description}:
@@ -7842,8 +7939,8 @@ END SUBROUTINE
@node RANGE
@section @code{RANGE} --- Decimal exponent range of a real kind
-@cindex @code{RANGE} intrinsic
-@cindex range of a real variable
+@fnindex RANGE
+@cindex model representation, range
@table @asis
@item @emph{Description}:
@@ -7876,9 +7973,10 @@ See @code{PRECISION} for an example.
@node REAL
@section @code{REAL} --- Convert to real type
-@cindex @code{REAL} intrinsic
-@cindex @code{REALPART} intrinsic
-@cindex true values
+@fnindex REAL
+@fnindex REALPART
+@cindex conversion, to real
+@cindex complex numbers, real part
@table @asis
@item @emph{Description}:
@@ -7941,8 +8039,8 @@ end program test_real
@node RENAME
@section @code{RENAME} --- Rename a file
-@cindex @code{RENAME} intrinsic
-@cindex file system operations
+@fnindex RENAME
+@cindex file system, rename file
@table @asis
@item @emph{Description}:
@@ -7984,8 +8082,9 @@ Subroutine, non-elemental function
@node REPEAT
@section @code{REPEAT} --- Repeated string concatenation
-@cindex @code{REPEAT} intrinsic
-@cindex string manipulation
+@fnindex REPEAT
+@cindex string, repeat
+@cindex string, concatenate
@table @asis
@item @emph{Description}:
@@ -8022,8 +8121,9 @@ end program
@node RESHAPE
@section @code{RESHAPE} --- Function to reshape an array
-@cindex @code{RESHAPE} intrinsic
-@cindex array manipulation
+@fnindex RESHAPE
+@cindex array, change dimensions
+@cindex array, transmogrify
@table @asis
@item @emph{Description}:
@@ -8075,7 +8175,10 @@ END PROGRAM
@node RRSPACING
@section @code{RRSPACING} --- Reciprocal of the relative spacing
-@cindex @code{RRSPACING} intrinsic
+@fnindex RRSPACING
+@cindex real number, relative spacing
+@cindex floating point, relative spacing
+
@table @asis
@item @emph{Description}:
@@ -8109,8 +8212,8 @@ The value returned is equal to
@node RSHIFT
@section @code{RSHIFT} --- Right shift bits
-@cindex @code{RSHIFT} intrinsic
-@cindex bit operations
+@fnindex RSHIFT
+@cindex bits, shift right
@table @asis
@item @emph{Description}:
@@ -8151,7 +8254,9 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@node SCALE
@section @code{SCALE} --- Scale a real value
-@cindex @code{SCALE} intrinsic
+@fnindex SCALE
+@cindex real number, scale
+@cindex floating point, scale
@table @asis
@item @emph{Description}:
@@ -8191,8 +8296,8 @@ end program test_scale
@node SCAN
@section @code{SCAN} --- Scan a string for the presence of a set of characters
-@cindex @code{SCAN} intrinsic
-@cindex string manipulation
+@fnindex SCAN
+@cindex string, find subset
@table @asis
@item @emph{Description}:
@@ -8242,9 +8347,9 @@ END PROGRAM
@node SECNDS
@section @code{SECNDS} --- Time function
-@cindex @code{SECNDS} intrinsic
-@cindex time, current
-@cindex current time
+@fnindex SECNDS
+@cindex time, elapsed
+@cindex elapsed time
@table @asis
@item @emph{Description}:
@@ -8274,6 +8379,7 @@ None
@item @emph{Example}:
@smallexample
program test_secnds
+ integer :: i
real(4) :: t1, t2
print *, secnds (0.0) ! seconds since midnight
t1 = secnds (0.0) ! reference time
@@ -8289,7 +8395,7 @@ end program test_secnds
@node SECOND
@section @code{SECOND} --- CPU time function
-@cindex @code{SECOND} intrinsic
+@fnindex SECOND
@cindex time, elapsed
@cindex elapsed time
@@ -8333,8 +8439,9 @@ seconds.
@node SELECTED_INT_KIND
@section @code{SELECTED_INT_KIND} --- Choose integer kind
-@cindex @code{SELECTED_INT_KIND} intrinsic
+@fnindex SELECTED_INT_KIND
@cindex integer kind
+@cindex kind, integer
@table @asis
@item @emph{Description}:
@@ -8378,8 +8485,9 @@ end program large_integers
@node SELECTED_REAL_KIND
@section @code{SELECTED_REAL_KIND} --- Choose real kind
-@cindex @code{SELECTED_REAL_KIND} intrinsic
+@fnindex SELECTED_REAL_KIND
@cindex real kind
+@cindex kind, real
@table @asis
@item @emph{Description}:
@@ -8440,8 +8548,9 @@ end program real_kinds
@node SET_EXPONENT
@section @code{SET_EXPONENT} --- Set the exponent of the model
-@cindex @code{SET_EXPONENT} intrinsic
-@cindex exponent part of a real number
+@fnindex SET_EXPONENT
+@cindex real number, set exponent
+@cindex floating point, set exponent
@table @asis
@item @emph{Description}:
@@ -8484,8 +8593,8 @@ END PROGRAM
@node SHAPE
@section @code{SHAPE} --- Determine the shape of an array
-@cindex @code{SHAPE} intrinsic
-@cindex array manipulation
+@fnindex SHAPE
+@cindex array, shape
@table @asis
@item @emph{Description}:
@@ -8530,9 +8639,9 @@ END PROGRAM
@node SIGN
@section @code{SIGN} --- Sign copying function
-@cindex @code{SIGN} intrinsic
-@cindex @code{ISIGN} intrinsic
-@cindex @code{DSIGN} intrinsic
+@fnindex SIGN
+@fnindex ISIGN
+@fnindex DSIGN
@cindex sign copying
@table @asis
@@ -8550,8 +8659,8 @@ Elemental function
@item @emph{Arguments}:
@multitable @columnfractions .15 .70
-@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
-@item @var{B} @tab Shall be a scalar of the same type and kind as @var{A}
+@item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
+@item @var{B} @tab Shall be of the same type and kind as @var{A}
@end multitable
@item @emph{Return value}:
@@ -8584,8 +8693,8 @@ end program test_sign
@node SIGNAL
@section @code{SIGNAL} --- Signal handling subroutine (or function)
-@cindex @code{SIGNAL} intrinsic
-@cindex signal handling
+@fnindex SIGNAL
+@cindex system, signal handling
@table @asis
@item @emph{Description}:
@@ -8641,12 +8750,13 @@ end program test_signal
@node SIN
@section @code{SIN} --- Sine function
-@cindex @code{SIN} intrinsic
-@cindex @code{DSIN} intrinsic
-@cindex @code{CSIN} intrinsic
-@cindex @code{ZSIN} intrinsic
-@cindex @code{CDSIN} intrinsic
-@cindex trigonometric functions
+@fnindex SIN
+@fnindex DSIN
+@fnindex CSIN
+@fnindex ZSIN
+@fnindex CDSIN
+@cindex trigonometric function, sine
+@cindex sine
@table @asis
@item @emph{Description}:
@@ -8695,9 +8805,11 @@ end program test_sin
@node SINH
@section @code{SINH} --- Hyperbolic sine function
-@cindex @code{SINH} intrinsic
-@cindex @code{DSINH} intrinsic
+@fnindex SINH
+@fnindex DSINH
@cindex hyperbolic sine
+@cindex hyperbolic function, sine
+@cindex sine, hyperbolic
@table @asis
@item @emph{Description}:
@@ -8742,8 +8854,10 @@ end program test_sinh
@node SIZE
@section @code{SIZE} --- Determine the size of an array
-@cindex @code{SIZE} intrinsic
-@cindex array manipulation
+@fnindex SIZE
+@cindex array, size
+@cindex array, number of elements
+@cindex array, count elements
@table @asis
@item @emph{Description}:
@@ -8787,7 +8901,8 @@ END PROGRAM
@node SLEEP
@section @code{SLEEP} --- Sleep for the specified number of seconds
-@cindex @code{SLEEP} intrinsic
+@fnindex SLEEP
+@cindex delayed execution
@table @asis
@item @emph{Description}:
@@ -8819,8 +8934,8 @@ end
@node SNGL
@section @code{SNGL} --- Convert double precision real to default real
-@cindex @code{SNGL} intrinsic
-@cindex conversion function (real)
+@fnindex SNGL
+@cindex conversion, to real
@table @asis
@item @emph{Description}:
@@ -8832,7 +8947,7 @@ that is specific to one type for @var{A}.
GNU extension
@item @emph{Class}:
-function
+Elemental function
@item @emph{Syntax}:
@code{RESULT = SNGL(A)}
@@ -8853,7 +8968,9 @@ The return value is of type default @code{REAL}.
@node SPACING
@section @code{SPACING} --- Smallest distance between two numbers of a given type
-@cindex @code{SPACING} intrinsic
+@fnindex SPACING
+@cindex real number, relative spacing
+@cindex floating point, relative spacing
@table @asis
@item @emph{Description}:
@@ -8896,8 +9013,10 @@ END PROGRAM
@node SPREAD
@section @code{SPREAD} --- Add a dimension to an array
-@cindex @code{SPREAD} intrinsic
-@cindex array manipulation
+@fnindex SPREAD
+@cindex array, increase dimension
+@cindex array, duplicate elementes
+@cindex array, duplicate dimensions
@table @asis
@item @emph{Description}:
@@ -8943,11 +9062,12 @@ END PROGRAM
@node SQRT
@section @code{SQRT} --- Square-root function
-@cindex @code{SQRT} intrinsic
-@cindex @code{DSQRT} intrinsic
-@cindex @code{CSQRT} intrinsic
-@cindex @code{ZSQRT} intrinsic
-@cindex @code{CDSQRT} intrinsic
+@fnindex SQRT
+@fnindex DSQRT
+@fnindex CSQRT
+@fnindex ZSQRT
+@fnindex CDSQRT
+@cindex root
@cindex square-root
@table @asis
@@ -8997,8 +9117,9 @@ end program test_sqrt
@node SRAND
@section @code{SRAND} --- Reinitialize the random number generator
-@cindex @code{SRAND} intrinsic
-@cindex random numbers
+@fnindex SRAND
+@cindex random number generation, seeding
+@cindex seeding a random number generator
@table @asis
@item @emph{Description}:
@@ -9044,8 +9165,8 @@ pseudo-random number generators.
@node STAT
@section @code{STAT} --- Get file status
-@cindex @code{STAT} intrinsic
-@cindex file system operations
+@fnindex STAT
+@cindex file system, file status
@table @asis
@item @emph{Description}:
@@ -9125,8 +9246,11 @@ To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT}
@node SUM
@section @code{SUM} --- Sum of array elements
-@cindex @code{SUM} intrinsic
-@cindex array operation
+@fnindex SUM
+@cindex array, sum
+@cindex array, add elements
+@cindex array, conditionally add elements
+@cindex sum array elements
@table @asis
@item @emph{Description}:
@@ -9179,8 +9303,9 @@ END PROGRAM
@node SYMLNK
@section @code{SYMLNK} --- Create a symbolic link
-@cindex @code{SYMLNK} intrinsic
-@cindex file system operations
+@fnindex SYMLNK
+@cindex file system, create link
+@cindex file system, soft link
@table @asis
@item @emph{Description}:
@@ -9223,7 +9348,8 @@ Subroutine, non-elemental function
@node SYSTEM
@section @code{SYSTEM} --- Execute a shell command
-@cindex @code{SYSTEM} intrinsic
+@fnindex SYSTEM
+@cindex system, system call
@table @asis
@item @emph{Description}:
@@ -9261,9 +9387,9 @@ Subroutine, non-elemental function
@node SYSTEM_CLOCK
@section @code{SYSTEM_CLOCK} --- Time function
-@cindex @code{SYSTEM_CLOCK} intrinsic
-@cindex time, current
-@cindex current time
+@fnindex SYSTEM_CLOCK
+@cindex time, clock ticks
+@cindex clock ticks
@table @asis
@item @emph{Description}:
@@ -9313,9 +9439,10 @@ END PROGRAM
@node TAN
@section @code{TAN} --- Tangent function
-@cindex @code{TAN} intrinsic
-@cindex @code{DTAN} intrinsic
-@cindex trigonometric functions
+@fnindex TAN
+@fnindex DTAN
+@cindex trigonometric function, tangent
+@cindex tangent
@table @asis
@item @emph{Description}:
@@ -9361,9 +9488,11 @@ end program test_tan
@node TANH
@section @code{TANH} --- Hyperbolic tangent function
-@cindex @code{TANH} intrinsic
-@cindex @code{DTANH} intrinsic
+@fnindex TANH
+@fnindex DTANH
@cindex hyperbolic tangent
+@cindex hyperbolic function, tangent
+@cindex tangent, hyperbolic
@table @asis
@item @emph{Description}:
@@ -9409,7 +9538,7 @@ end program test_tanh
@node TIME
@section @code{TIME} --- Time function
-@cindex @code{TIME} intrinsic
+@fnindex TIME
@cindex time, current
@cindex current time
@@ -9450,7 +9579,7 @@ The return value is a scalar of type @code{INTEGER(4)}.
@node TIME8
@section @code{TIME8} --- Time function (64-bit)
-@cindex @code{TIME8} intrinsic
+@fnindex TIME8
@cindex time, current
@cindex current time
@@ -9489,8 +9618,9 @@ The return value is a scalar of type @code{INTEGER(8)}.
@node TINY
@section @code{TINY} --- Smallest positive number of a real kind
-@cindex @code{TINY} intrinsic
-@cindex tiny
+@fnindex TINY
+@cindex limits, smallest number
+@cindex model representation, smallest number
@table @asis
@item @emph{Description}:
@@ -9501,7 +9631,7 @@ in the model of the type of @code{X}.
F95 and later
@item @emph{Class}:
-Elemental function
+Inquiry function
@item @emph{Syntax}:
@code{RESULT = TINY(X)}
@@ -9522,7 +9652,8 @@ See @code{HUGE} for an example.
@node TRANSFER
@section @code{TRANSFER} --- Transfer bit patterns
-@cindex @code{TRANSFER} intrinsic
+@fnindex TRANSFER
+@cindex bits, move
@cindex type cast
@table @asis
@@ -9584,8 +9715,10 @@ END PROGRAM
@node TRANSPOSE
@section @code{TRANSPOSE} --- Transpose an array of rank two
-@cindex @code{TRANSPOSE} intrinsic
-@cindex matrix manipulation
+@fnindex TRANSPOSE
+@cindex array, transpose
+@cindex matrix, transpose
+@cindex transpose
@table @asis
@item @emph{Description}:
@@ -9615,8 +9748,8 @@ The result has the the same type as @var{MATRIX}, and has shape
@node TRIM
@section @code{TRIM} --- Remove trailing blank characters of a string
-@cindex @code{TRIM} intrinsic
-@cindex string manipulation
+@fnindex TRIM
+@cindex string, remove trailing whitespace
@table @asis
@item @emph{Description}:
@@ -9656,7 +9789,8 @@ END PROGRAM
@node TTYNAM
@section @code{TTYNAM} --- Get the name of a terminal device.
-@cindex @code{TTYNAM} intrinsic
+@fnindex TTYNAM
+@cindex system, terminal
@table @asis
@item @emph{Description}:
@@ -9702,7 +9836,8 @@ END PROGRAM
@node UBOUND
@section @code{UBOUND} --- Upper dimension bounds of an array
-@cindex @code{UBOUND} intrinsic
+@fnindex UBOUND
+@cindex array, upper bound
@table @asis
@item @emph{Description}:
@@ -9740,8 +9875,8 @@ the relevant dimension.
@node UMASK
@section @code{UMASK} --- Set the file creation mask
-@cindex @code{UMASK} intrinsic
-@cindex file system operations
+@fnindex UMASK
+@cindex file system, file creation mask
@table @asis
@item @emph{Description}:
@@ -9770,8 +9905,8 @@ Subroutine
@node UNLINK
@section @code{UNLINK} --- Remove a file from the file system
-@cindex @code{UNLINK} intrinsic
-@cindex file system operations
+@fnindex UNLINK
+@cindex file system, remove file
@table @asis
@item @emph{Description}:
@@ -9810,8 +9945,10 @@ Subroutine, non-elemental function
@node UNPACK
@section @code{UNPACK} --- Unpack an array of rank one into an array
-@cindex @code{UNPACK} intrinsic
-@cindex array manipulation
+@fnindex UNPACK
+@cindex array, unpacking
+@cindex array, increase dimension
+@cindex array, scatter elements
@table @asis
@item @emph{Description}:
@@ -9843,11 +9980,11 @@ of @var{MASK} replaced by values from @var{VECTOR} in array element order.
@smallexample
PROGRAM test_unpack
integer :: vector(2) = (/1,1/)
- logical :: mask(2,2) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
+ logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
integer :: field(2,2) = 0, unity(2,2)
! result: unity matrix
- unity = unpack(vector, reshape(mask, (/2,2/), field)
+ unity = unpack(vector, reshape(mask, (/2,2/)), field)
END PROGRAM
@end smallexample
@@ -9859,8 +9996,8 @@ END PROGRAM
@node VERIFY
@section @code{VERIFY} --- Scan a string for the absence of a set of characters
-@cindex @code{VERIFY} intrinsic
-@cindex string manipulation
+@fnindex VERIFY
+@cindex string, find missing set
@table @asis
@item @emph{Description}:
@@ -9911,8 +10048,9 @@ END PROGRAM
@node XOR
@section @code{XOR} --- Bitwise logical exclusive OR
-@cindex @code{XOR} intrinsic
-@cindex bit operations
+@fnindex XOR
+@cindex bitwise logical exclusive or
+@cindex logical exclusive or, bitwise
@table @asis
@item @emph{Description}:
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 5a125604a6b..0cb701e790b 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -75,7 +75,6 @@ on the non-Fortran-specific aspects of the @command{gcc} command (and,
therefore, the @command{gfortran} command).
@cindex options, negative forms
-@cindex negative forms of options
All GCC and GNU Fortran options
are accepted both by @command{gfortran} and by @command{gcc}
(as well as any other drivers built at the same time,
@@ -181,11 +180,8 @@ accepted by the compiler:
@opindex @code{ffree-form}
@opindex @code{fno-fixed-form}
@cindex options, fortran dialect
-@cindex source file format
-@cindex free form
-@cindex fixed form
-@cindex Source Form
-@cindex Fortran 90, features
+@cindex file format, free
+@cindex file format, fixed
Specify the layout used by the source file. The free form layout
was introduced in Fortran 90. Fixed form was traditionally used in
older Fortran programs. When neither option is specified, the source
@@ -224,7 +220,7 @@ Do nothing if this is already the default.
@item -fdollar-ok
@opindex @code{fdollar-ok}
-@cindex dollar sign
+@cindex $
@cindex symbol names
@cindex character set
Allow @samp{$} as a valid character in a symbol name.
@@ -238,12 +234,7 @@ Change the interpretation of backslashes in string literals from
@item -ffixed-line-length-@var{n}
@opindex @code{ffixed-line-length-}@var{n}
-@cindex source file format
-@cindex lines, length
-@cindex length of source lines
-@cindex limits, lengths of source lines
-@cindex card image
-@cindex extended-source option
+@cindex file format, fixed
Set column after which characters are ignored in typical fixed-form
lines in the source file, and through which spaces are assumed (as
if padded to that length) after the ends of short fixed-form lines.
@@ -259,10 +250,7 @@ to them to fill out the line.
@item -ffree-line-length-@var{n}
@opindex @code{ffree-line-length-}@var{n}
-@cindex source file format
-@cindex lines, length
-@cindex length of source lines
-@cindex limits, lengths of source lines
+@cindex file format, free
Set column after which characters are ignored in typical free-form
lines in the source file. The default value is 132.
@var{n} may be @samp{none}, meaning that the entire line is meaningful.
@@ -434,7 +422,7 @@ The following example will trigger the warning.
@item -Wampersand
@opindex @code{Wampersand}
@cindex warnings, ampersand
-@cindex ampersand
+@cindex &
Warn about missing ampersand in continued character constants. The warning is
given with @option{-Wampersand}, @option{-pedantic}, @option{-std=f95}, and
@option{-std=f2003}. Note: With no ampersand given in a continued character
@@ -485,7 +473,7 @@ A LOGICAL SELECT construct has three CASE statements.
@item -Wtabs
@opindex @code{Wtabs}
@cindex warnings, tabs
-@cindex tabs
+@cindex tabulators
By default, tabs are accepted as whitespace, but tabs are not members
of the Fortran Character Set. @option{-Wno-tabs} will cause a warning
to be issued if a tab is encountered. Note, @option{-Wno-tabs} is active
@@ -556,8 +544,8 @@ library should output a backtrace of the error. This option
only has influence for compilation of the Fortran main program.
@item -fdump-core
-@cindex core
-@cindex @code{fdump-core}
+@cindex core, dump
+@opindex @code{fdump-core}
Request that a core-dump file is written to disk when a runtime error
is encountered on systems that support core dumps. This option is
only effective for the compilation of the Fortran main program.
@@ -630,7 +618,7 @@ they are not in the default location expected by the compiler.
@node Runtime Options
@section Influencing runtime behavior
-@cindex runtime, options
+@cindex options, runtime
These options affect the runtime behavior of programs compiled with GNU Fortran.
@table @gcctabopt
@@ -666,7 +654,7 @@ really useful for use by the gfortran testsuite.
@section Options for Code Generation Conventions
@cindex code generation, conventions
@cindex options, code generation
-@cindex run-time, options
+@cindex options, run-time
These machine-independent options control the interface conventions
used in code generation.
@@ -680,15 +668,15 @@ it.
@table @gcctabopt
@item -fno-automatic
@opindex @code{fno-automatic}
-@cindex SAVE statement
-@cindex statements, SAVE
+@cindex @code{SAVE} statement
+@cindex statement, @code{SAVE}
Treat each program unit as if the @code{SAVE} statement was specified for
every local variable and array referenced in it. Does not affect common
blocks. (Some Fortran compilers provide this option under the name
@option{-static}.)
@item -ff2c
-@opindex @code{ff2c}
+@opindex ff2c
@cindex calling convention
@cindex @command{f2c} calling convention
@cindex @command{g77} calling convention
@@ -818,9 +806,9 @@ by use of the @option{-ff2c} option.
@item -fbounds-check
@opindex @code{fbounds-check}
+@cindex array, bounds checking
@cindex bounds checking
@cindex range checking
-@cindex array bounds checking
@cindex subscript checking
@cindex checking subscripts
Enable generation of run-time checks for array subscripts
@@ -900,7 +888,7 @@ shared by @command{gfortran}, @command{gcc}, and other GNU compilers.
@node Environment Variables
@section Environment Variables Affecting @command{gfortran}
-@cindex environment variables
+@cindex environment variable
@c man begin ENVIRONMENT
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 31c40768624..fbcb94e0886 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -538,6 +538,8 @@ gfc_handle_option (size_t scode, const char *arg, int value)
break;
case OPT_ffree_line_length_:
+ if (value != 0 && value < 4)
+ gfc_fatal_error ("Free line length must be at least three.");
gfc_option.free_line_length = value;
break;
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index c3d3e6216f6..5eaa34fd294 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -1404,6 +1404,7 @@ load_file (const char *filename, bool initial)
gfc_file *f;
FILE *input;
int len, line_len;
+ bool first_line;
for (f = current_file; f; f = f->up)
if (strcmp (filename, f->filename) == 0)
@@ -1445,6 +1446,7 @@ load_file (const char *filename, bool initial)
current_file->line = 1;
line = NULL;
line_len = 0;
+ first_line = true;
if (initial && gfc_src_preprocessor_lines[0])
{
@@ -1467,6 +1469,26 @@ load_file (const char *filename, bool initial)
if (feof (input) && len == 0)
break;
+ /* If this is the first line of the file, it can contain a byte
+ order mark (BOM), which we will ignore:
+ FF FE is UTF-16 little endian,
+ FE FF is UTF-16 big endian,
+ EF BB BF is UTF-8. */
+ if (first_line
+ && ((line_len >= 2 && line[0] == '\xFF' && line[1] == '\xFE')
+ || (line_len >= 2 && line[0] == '\xFE' && line[1] == '\xFF')
+ || (line_len >= 3 && line[0] == '\xEF' && line[1] == '\xBB'
+ && line[2] == '\xBF')))
+ {
+ int n = line[1] == '\xBB' ? 3 : 2;
+ char * new = gfc_getmem (line_len);
+
+ strcpy (new, line + n);
+ gfc_free (line);
+ line = new;
+ len -= n;
+ }
+
/* There are three things this line can be: a line of Fortran
source, an include line or a C preprocessor directive. */
@@ -1476,6 +1498,11 @@ load_file (const char *filename, bool initial)
continue;
}
+ /* Preprocessed files have preprocessor lines added before the byte
+ order mark, so first_line is not about the first line of the file
+ but the first line that's not a preprocessor line. */
+ first_line = false;
+
if (include_line (line))
{
current_file->line++;
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index ab3d3d2fe75..b31597d170b 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -1938,20 +1938,57 @@ gfc_simplify_kind (gfc_expr *e)
static gfc_expr *
-simplify_bound (gfc_expr *array, gfc_expr *dim, int upper)
+simplify_bound_dim (gfc_expr *array, int d, int upper, gfc_array_spec *as)
{
- gfc_ref *ref;
- gfc_array_spec *as;
gfc_expr *l, *u, *result;
- int d;
- if (dim == NULL)
- /* TODO: Simplify constant multi-dimensional bounds. */
- return NULL;
+ /* The last dimension of an assumed-size array is special. */
+ if (d == as->rank && as->type == AS_ASSUMED_SIZE && !upper)
+ {
+ if (as->lower[d-1]->expr_type == EXPR_CONSTANT)
+ return gfc_copy_expr (as->lower[d-1]);
+ else
+ return NULL;
+ }
- if (dim->expr_type != EXPR_CONSTANT)
+ /* Then, we need to know the extent of the given dimension. */
+ l = as->lower[d-1];
+ u = as->upper[d-1];
+
+ if (l->expr_type != EXPR_CONSTANT || u->expr_type != EXPR_CONSTANT)
return NULL;
+ result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind,
+ &array->where);
+
+ if (mpz_cmp (l->value.integer, u->value.integer) > 0)
+ {
+ /* Zero extent. */
+ if (upper)
+ mpz_set_si (result->value.integer, 0);
+ else
+ mpz_set_si (result->value.integer, 1);
+ }
+ else
+ {
+ /* Nonzero extent. */
+ if (upper)
+ mpz_set (result->value.integer, u->value.integer);
+ else
+ mpz_set (result->value.integer, l->value.integer);
+ }
+
+ return range_check (result, upper ? "UBOUND" : "LBOUND");
+}
+
+
+static gfc_expr *
+simplify_bound (gfc_expr *array, gfc_expr *dim, int upper)
+{
+ gfc_ref *ref;
+ gfc_array_spec *as;
+ int d;
+
if (array->expr_type != EXPR_VARIABLE)
return NULL;
@@ -1992,55 +2029,89 @@ simplify_bound (gfc_expr *array, gfc_expr *dim, int upper)
gcc_unreachable ();
done:
+
if (as->type == AS_DEFERRED || as->type == AS_ASSUMED_SHAPE)
return NULL;
- d = mpz_get_si (dim->value.integer);
-
- if (d < 1 || d > as->rank
- || (d == as->rank && as->type == AS_ASSUMED_SIZE && upper))
+ if (dim == NULL)
{
- gfc_error ("DIM argument at %L is out of bounds", &dim->where);
- return &gfc_bad_expr;
- }
+ /* Multi-dimensional bounds. */
+ gfc_expr *bounds[GFC_MAX_DIMENSIONS];
+ gfc_expr *e;
+ gfc_constructor *head, *tail;
- /* The last dimension of an assumed-size array is special. */
- if (d == as->rank && as->type == AS_ASSUMED_SIZE && !upper)
- {
- if (as->lower[d-1]->expr_type == EXPR_CONSTANT)
- return gfc_copy_expr (as->lower[d-1]);
- else
- return NULL;
- }
+ /* UBOUND(ARRAY) is not valid for an assumed-size array. */
+ if (upper && as->type == AS_ASSUMED_SIZE)
+ {
+ /* An error message will be emitted in
+ check_assumed_size_reference (resolve.c). */
+ return &gfc_bad_expr;
+ }
- /* Then, we need to know the extent of the given dimension. */
- l = as->lower[d-1];
- u = as->upper[d-1];
+ /* Simplify the bounds for each dimension. */
+ for (d = 0; d < array->rank; d++)
+ {
+ bounds[d] = simplify_bound_dim (array, d + 1, upper, as);
+ if (bounds[d] == NULL || bounds[d] == &gfc_bad_expr)
+ {
+ int j;
- if (l->expr_type != EXPR_CONSTANT || u->expr_type != EXPR_CONSTANT)
- return NULL;
+ for (j = 0; j < d; j++)
+ gfc_free_expr (bounds[j]);
+ return bounds[d];
+ }
+ }
- result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind,
- &array->where);
+ /* Allocate the result expression. */
+ e = gfc_get_expr ();
+ e->where = array->where;
+ e->expr_type = EXPR_ARRAY;
+ e->ts.type = BT_INTEGER;
+ e->ts.kind = gfc_default_integer_kind;
+
+ /* The result is a rank 1 array; its size is the rank of the first
+ argument to {L,U}BOUND. */
+ e->rank = 1;
+ e->shape = gfc_get_shape (1);
+ mpz_init_set_ui (e->shape[0], array->rank);
+
+ /* Create the constructor for this array. */
+ head = tail = NULL;
+ for (d = 0; d < array->rank; d++)
+ {
+ /* Get a new constructor element. */
+ if (head == NULL)
+ head = tail = gfc_get_constructor ();
+ else
+ {
+ tail->next = gfc_get_constructor ();
+ tail = tail->next;
+ }
- if (mpz_cmp (l->value.integer, u->value.integer) > 0)
- {
- /* Zero extent. */
- if (upper)
- mpz_set_si (result->value.integer, 0);
- else
- mpz_set_si (result->value.integer, 1);
+ tail->where = e->where;
+ tail->expr = bounds[d];
+ }
+ e->value.constructor = head;
+
+ return e;
}
else
{
- /* Nonzero extent. */
- if (upper)
- mpz_set (result->value.integer, u->value.integer);
- else
- mpz_set (result->value.integer, l->value.integer);
- }
+ /* A DIM argument is specified. */
+ if (dim->expr_type != EXPR_CONSTANT)
+ return NULL;
- return range_check (result, upper ? "UBOUND" : "LBOUND");
+ d = mpz_get_si (dim->value.integer);
+
+ if (d < 1 || d > as->rank
+ || (d == as->rank && as->type == AS_ASSUMED_SIZE && upper))
+ {
+ gfc_error ("DIM argument at %L is out of bounds", &dim->where);
+ return &gfc_bad_expr;
+ }
+
+ return simplify_bound_dim (array, d, upper, as);
+ }
}
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index b6a2ac02963..92fd67cccf5 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3001,6 +3001,8 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
rref = ss->expr->ref;
nDepend = gfc_dep_resolver (lref, rref);
+ if (nDepend == 1)
+ break;
#if 0
/* TODO : loop shifting. */
if (nDepend == 1)
diff --git a/gcc/fortran/trans-const.c b/gcc/fortran/trans-const.c
index dbd351d5fd5..435d5ec9092 100644
--- a/gcc/fortran/trans-const.c
+++ b/gcc/fortran/trans-const.c
@@ -29,6 +29,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "ggc.h"
#include "toplev.h"
#include "real.h"
+#include "double-int.h"
#include "gfortran.h"
#include "trans.h"
#include "trans-const.h"
@@ -152,128 +153,48 @@ gfc_init_constants (void)
}
/* Converts a GMP integer into a backend tree node. */
+
tree
gfc_conv_mpz_to_tree (mpz_t i, int kind)
{
- HOST_WIDE_INT high;
- unsigned HOST_WIDE_INT low;
+ double_int val = mpz_get_double_int (gfc_get_int_type (kind), i, true);
+ return double_int_to_tree (gfc_get_int_type (kind), val);
+}
- if (mpz_fits_slong_p (i))
- {
- /* Note that HOST_WIDE_INT is never smaller than long. */
- low = mpz_get_si (i);
- high = mpz_sgn (i) < 0 ? -1 : 0;
- }
- else
- {
- unsigned HOST_WIDE_INT *words;
- size_t count, numb;
-
- /* Determine the number of unsigned HOST_WIDE_INT that are required
- for represent the value. The code to calculate count is
- extracted from the GMP manual, section "Integer Import and Export":
- http://gmplib.org/manual/Integer-Import-and-Export.html */
- numb = 8*sizeof(HOST_WIDE_INT);
- count = (mpz_sizeinbase (i, 2) + numb-1) / numb;
- if (count < 2)
- count = 2;
- words = (unsigned HOST_WIDE_INT *) alloca (count * sizeof(HOST_WIDE_INT));
-
- /* Since we know that the value is not zero (mpz_fits_slong_p),
- we know that at least one word will be written, but we don't know
- about the second. It's quicker to zero the second word before
- than conditionally clear it later. */
- words[1] = 0;
-
- /* Extract the absolute value into words. */
- mpz_export (words, &count, -1, sizeof(HOST_WIDE_INT), 0, 0, i);
-
- /* We don't assume that all numbers are in range for its type.
- However, we never create a type larger than 2*HWI, which is the
- largest that the middle-end can handle. So, we only take the
- first two elements of words, which is equivalent to wrapping the
- value if it's larger than the type range. */
- low = words[0];
- high = words[1];
-
- /* Negate if necessary. */
- if (mpz_sgn (i) < 0)
- {
- if (low == 0)
- high = -high;
- else
- low = -low, high = ~high;
- }
- }
+/* Converts a backend tree into a GMP integer. */
- return build_int_cst_wide (gfc_get_int_type (kind), low, high);
+void
+gfc_conv_tree_to_mpz (mpz_t i, tree source)
+{
+ double_int val = tree_to_double_int (source);
+ mpz_set_double_int (i, val, TYPE_UNSIGNED (TREE_TYPE (source)));
}
-/* Converts a real constant into backend form. Uses an intermediate string
- representation. */
+/* Converts a real constant into backend form. */
tree
gfc_conv_mpfr_to_tree (mpfr_t f, int kind)
{
- tree res;
tree type;
- mp_exp_t exp;
- char *p, *q;
int n;
REAL_VALUE_TYPE real;
n = gfc_validate_kind (BT_REAL, kind, false);
-
gcc_assert (gfc_real_kinds[n].radix == 2);
type = gfc_get_real_type (kind);
+ real_from_mpfr (&real, f, type, GFC_RND_MODE);
+ return build_real (type, real);
+}
- /* Take care of Infinity and NaN. */
- if (mpfr_inf_p (f))
- {
- real_inf (&real);
- if (mpfr_sgn (f) < 0)
- real = REAL_VALUE_NEGATE(real);
- res = build_real (type , real);
- return res;
- }
-
- if (mpfr_nan_p (f))
- {
- real_nan (&real, "", 0, TYPE_MODE (type));
- res = build_real (type , real);
- return res;
- }
-
- /* mpfr chooses too small a number of hexadecimal digits if the
- number of binary digits is not divisible by four, therefore we
- have to explicitly request a sufficient number of digits here. */
- p = mpfr_get_str (NULL, &exp, 16, gfc_real_kinds[n].digits / 4 + 1,
- f, GFC_RND_MODE);
-
- /* REAL_VALUE_ATOF expects the exponent for mantissa * 2**exp,
- mpfr_get_str returns the exponent for mantissa * 16**exp, adjust
- for that. */
- exp *= 4;
-
- /* The additional 12 characters add space for the sprintf below.
- This leaves 6 digits for the exponent which is certainly enough. */
- q = (char *) gfc_getmem (strlen (p) + 12);
-
- if (p[0] == '-')
- sprintf (q, "-0x.%sp%d", &p[1], (int) exp);
- else
- sprintf (q, "0x.%sp%d", p, (int) exp);
-
- res = build_real (type, REAL_VALUE_ATOF (q, TYPE_MODE (type)));
-
- gfc_free (q);
- gfc_free (p);
+/* Converts a backend tree into a real constant. */
- return res;
+void
+gfc_conv_tree_to_mpfr (mpfr_ptr f, tree source)
+{
+ mpfr_from_real (f, TREE_REAL_CST_PTR (source), GFC_RND_MODE);
}
-
/* Translate any literal constant to a tree. Constants never have
pre or post chains. Character literal constants are special
special because they have a value and a length, so they cannot be
diff --git a/gcc/fortran/trans-const.h b/gcc/fortran/trans-const.h
index 2b071168c24..1f4157ee46e 100644
--- a/gcc/fortran/trans-const.h
+++ b/gcc/fortran/trans-const.h
@@ -20,11 +20,13 @@ 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. */
-/* Returns an INT_CST. */
+/* Converts between INT_CST and GMP integer representations. */
tree gfc_conv_mpz_to_tree (mpz_t, int);
+void gfc_conv_tree_to_mpz (mpz_t, tree);
-/* Returns a REAL_CST. */
+/* Converts between REAL_CST and MPFR floating-point representations. */
tree gfc_conv_mpfr_to_tree (mpfr_t, int);
+void gfc_conv_tree_to_mpfr (mpfr_ptr, tree);
/* Build a tree for a constant. Must be an EXPR_CONSTANT gfc_expr.
For CHARACTER literal constants, the caller still has to set the
diff --git a/gcc/function.c b/gcc/function.c
index f0a2dd61392..70047939501 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3843,18 +3843,6 @@ init_function_start (tree subr)
{
prepare_function_start (subr);
- /* Prevent ever trying to delete the first instruction of a
- function. Also tell final how to output a linenum before the
- function prologue. Note linenums could be missing, e.g. when
- compiling a Java .class file. */
- if (! DECL_IS_BUILTIN (subr))
- emit_line_note (DECL_SOURCE_LOCATION (subr));
-
- /* Make sure first insn is a note even if we don't want linenums.
- This makes sure the first insn will never be deleted.
- Also, final expects a note to appear there. */
- emit_note (NOTE_INSN_DELETED);
-
/* Warn if this value is an aggregate type,
regardless of which calling convention we are using for it. */
if (AGGREGATE_TYPE_P (TREE_TYPE (DECL_RESULT (subr))))
@@ -4305,7 +4293,7 @@ expand_function_end (void)
/* Output a linenumber for the end of the function.
SDB depends on this. */
force_next_line_note ();
- emit_line_note (input_location);
+ set_curr_insn_source_location (input_location);
/* Before the return label (if any), clobber the return
registers so that they are not propagated live to the rest of
@@ -5348,62 +5336,6 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
#endif /* HAVE_prologue or HAVE_epilogue */
}
-/* Resets insn_block_boundaries array. */
-
-void
-reset_block_changes (void)
-{
- cfun->ib_boundaries_block = VEC_alloc (tree, gc, 100);
- VEC_quick_push (tree, cfun->ib_boundaries_block, NULL_TREE);
-}
-
-/* Record the boundary for BLOCK. */
-void
-record_block_change (tree block)
-{
- int i, n;
- tree last_block;
-
- if (!block)
- return;
-
- if(!cfun->ib_boundaries_block)
- return;
-
- last_block = VEC_pop (tree, cfun->ib_boundaries_block);
- n = get_max_uid ();
- for (i = VEC_length (tree, cfun->ib_boundaries_block); i < n; i++)
- VEC_safe_push (tree, gc, cfun->ib_boundaries_block, last_block);
-
- VEC_safe_push (tree, gc, cfun->ib_boundaries_block, block);
-}
-
-/* Finishes record of boundaries. */
-void
-finalize_block_changes (void)
-{
- record_block_change (DECL_INITIAL (current_function_decl));
-}
-
-/* For INSN return the BLOCK it belongs to. */
-void
-check_block_change (rtx insn, tree *block)
-{
- unsigned uid = INSN_UID (insn);
-
- if (uid >= VEC_length (tree, cfun->ib_boundaries_block))
- return;
-
- *block = VEC_index (tree, cfun->ib_boundaries_block, uid);
-}
-
-/* Releases the ib_boundaries_block records. */
-void
-free_block_changes (void)
-{
- VEC_free (tree, gc, cfun->ib_boundaries_block);
-}
-
/* Returns the name of the current function. */
const char *
current_function_name (void)
diff --git a/gcc/function.h b/gcc/function.h
index f176d85398f..a5afd1b8ddd 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -347,9 +347,6 @@ struct function GTY(())
/* Line number of the end of the function. */
location_t function_end_locus;
- /* Array mapping insn uids to blocks. */
- VEC(tree,gc) *ib_boundaries_block;
-
/* The variables unexpanded so far. */
tree unexpanded_var_list;
@@ -552,11 +549,6 @@ extern void number_blocks (tree);
extern void clear_block_marks (tree);
extern tree blocks_nreverse (tree);
-extern void reset_block_changes (void);
-extern void record_block_change (tree);
-extern void finalize_block_changes (void);
-extern void check_block_change (rtx, tree *);
-extern void free_block_changes (void);
/* Return size needed for stack frame based on slots so far allocated.
This size counts from zero. It is not rounded to STACK_BOUNDARY;
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index aa4094a8054..312ecac0ce1 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -23,6 +23,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "system.h"
#include "gengtype.h"
#include "errors.h" /* for fatal */
+#include "double-int.h"
/* Data types, macros, etc. used only in this file. */
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 698aefcfc45..c1d05b52756 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1617,6 +1617,7 @@ canonicalize_addr_expr (tree *expr_p)
static enum gimplify_status
gimplify_conversion (tree *expr_p)
{
+ tree tem;
gcc_assert (TREE_CODE (*expr_p) == NOP_EXPR
|| TREE_CODE (*expr_p) == CONVERT_EXPR);
@@ -1627,6 +1628,17 @@ gimplify_conversion (tree *expr_p)
if (tree_ssa_useless_type_conversion (*expr_p))
*expr_p = TREE_OPERAND (*expr_p, 0);
+ /* Attempt to avoid NOP_EXPR by producing reference to a subtype.
+ For example this fold (subclass *)&A into &A->subclass avoiding
+ a need for statement. */
+ if (TREE_CODE (*expr_p) == NOP_EXPR
+ && POINTER_TYPE_P (TREE_TYPE (*expr_p))
+ && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (*expr_p, 0)))
+ && (tem = maybe_fold_offset_to_reference
+ (TREE_OPERAND (*expr_p, 0),
+ integer_zero_node, TREE_TYPE (TREE_TYPE (*expr_p)))))
+ *expr_p = build_fold_addr_expr_with_type (tem, TREE_TYPE (*expr_p));
+
/* If we still have a conversion at the toplevel,
then canonicalize some constructs. */
if (TREE_CODE (*expr_p) == NOP_EXPR || TREE_CODE (*expr_p) == CONVERT_EXPR)
@@ -5859,6 +5871,21 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p,
ret = GS_ALL_DONE;
break;
+ case PLUS_EXPR:
+ /* Convert ((type *)A)+offset into &A->field_of_type_and_offset.
+ The second is gimple immediate saving a need for extra statement.
+ */
+ if (POINTER_TYPE_P (TREE_TYPE (*expr_p))
+ && TREE_CODE (TREE_OPERAND (*expr_p, 1)) == INTEGER_CST
+ && (tmp = maybe_fold_offset_to_reference
+ (TREE_OPERAND (*expr_p, 0), TREE_OPERAND (*expr_p, 1),
+ TREE_TYPE (TREE_TYPE (*expr_p)))))
+ {
+ *expr_p = build_fold_addr_expr_with_type (tmp,
+ TREE_TYPE (*expr_p));
+ break;
+ }
+ /* FALLTHRU */
default:
switch (TREE_CODE_CLASS (TREE_CODE (*expr_p)))
{
diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c
index ca07bdc2f04..655c0258230 100644
--- a/gcc/lambda-code.c
+++ b/gcc/lambda-code.c
@@ -2521,7 +2521,8 @@ perfect_nestify (struct loop *loop,
set_immediate_dominator (CDI_DOMINATORS, preheaderbb,
single_exit (loop)->src);
set_immediate_dominator (CDI_DOMINATORS, latchbb, bodybb);
- set_immediate_dominator (CDI_DOMINATORS, olddest, bodybb);
+ set_immediate_dominator (CDI_DOMINATORS, olddest,
+ recount_dominator (CDI_DOMINATORS, olddest));
/* Create the new iv. */
oldivvar = VEC_index (tree, loopivs, 0);
ivvar = create_tmp_var (TREE_TYPE (oldivvar), "perfectiv");
diff --git a/gcc/passes.c b/gcc/passes.c
index 11b11981fdd..9650e894cd6 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -654,7 +654,6 @@ init_optimization_passes (void)
struct tree_opt_pass **p = &pass_rest_of_compilation.sub;
NEXT_PASS (pass_init_function);
NEXT_PASS (pass_jump);
- NEXT_PASS (pass_insn_locators_initialize);
NEXT_PASS (pass_rtl_eh);
NEXT_PASS (pass_initial_value_sets);
NEXT_PASS (pass_unshare_all_rtl);
diff --git a/gcc/predict.c b/gcc/predict.c
index c51c80809c8..f4ecb6fd415 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -1240,7 +1240,8 @@ apply_return_prediction (int *heads)
FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
{
return_stmt = last_stmt (e->src);
- if (TREE_CODE (return_stmt) == RETURN_EXPR)
+ if (return_stmt
+ && TREE_CODE (return_stmt) == RETURN_EXPR)
break;
}
if (!e)
diff --git a/gcc/regclass.c b/gcc/regclass.c
index fa5727d1b31..3338628ca16 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -1029,7 +1029,7 @@ record_operand_costs (rtx insn, struct costs *op_costs,
there. */
static rtx
-scan_one_insn (rtx insn, int pass)
+scan_one_insn (rtx insn, int pass ATTRIBUTE_UNUSED)
{
enum rtx_code pat_code;
rtx set, note;
@@ -1069,68 +1069,6 @@ scan_one_insn (rtx insn, int pass)
return insn;
}
- /* Improve handling of two-address insns such as
- (set X (ashift CONST Y)) where CONST must be made to
- match X. Change it into two insns: (set X CONST)
- (set X (ashift X Y)). If we left this for reloading, it
- would probably get three insns because X and Y might go
- in the same place. This prevents X and Y from receiving
- the same hard reg.
-
- We can only do this if the modes of operands 0 and 1
- (which might not be the same) are tieable and we only need
- do this during our first pass. */
-
- if (pass == 0 && optimize
- && recog_data.n_operands >= 3
- && recog_data.constraints[1][0] == '0'
- && recog_data.constraints[1][1] == 0
- && CONSTANT_P (recog_data.operand[1])
- && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[1])
- && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[2])
- && REG_P (recog_data.operand[0])
- && MODES_TIEABLE_P (GET_MODE (recog_data.operand[0]),
- recog_data.operand_mode[1]))
- {
- rtx previnsn = prev_real_insn (insn);
- rtx dest
- = gen_lowpart (recog_data.operand_mode[1],
- recog_data.operand[0]);
- rtx newinsn
- = emit_insn_before (gen_move_insn (dest, recog_data.operand[1]), insn);
-
- /* If this insn was the start of a basic block,
- include the new insn in that block.
- We need not check for code_label here;
- while a basic block can start with a code_label,
- INSN could not be at the beginning of that block. */
- if (previnsn == 0 || JUMP_P (previnsn))
- {
- basic_block b;
- FOR_EACH_BB (b)
- if (insn == BB_HEAD (b))
- BB_HEAD (b) = newinsn;
- }
-
- /* This makes one more setting of new insns's dest. */
- REG_N_SETS (REGNO (recog_data.operand[0]))++;
- REG_N_REFS (REGNO (recog_data.operand[0]))++;
- REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
-
- *recog_data.operand_loc[1] = recog_data.operand[0];
- REG_N_REFS (REGNO (recog_data.operand[0]))++;
- REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
- for (i = recog_data.n_dups - 1; i >= 0; i--)
- if (recog_data.dup_num[i] == 1)
- {
- *recog_data.dup_loc[i] = recog_data.operand[0];
- REG_N_REFS (REGNO (recog_data.operand[0]))++;
- REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
- }
-
- return PREV_INSN (newinsn);
- }
-
record_operand_costs (insn, op_costs, reg_pref);
/* Now add the cost for each operand to the total costs for
diff --git a/gcc/rtl.def b/gcc/rtl.def
index 05238e4c491..abfd8942ad3 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -696,6 +696,9 @@ DEF_RTL_EXPR(SS_NEG, "ss_neg", "e", RTX_UNARY)
/* Negation with unsigned saturation. */
DEF_RTL_EXPR(US_NEG, "us_neg", "e", RTX_UNARY)
+/* Absolute value with signed saturation. */
+DEF_RTL_EXPR(SS_ABS, "ss_abs", "e", RTX_UNARY)
+
/* Shift left with signed saturation. */
DEF_RTL_EXPR(SS_ASHIFT, "ss_ashift", "ee", RTX_BIN_ARITH)
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 9e81bb8cb34..b3f0522e03c 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1579,7 +1579,6 @@ extern rtx emit_label (rtx);
extern rtx emit_barrier (void);
extern rtx emit_note (int);
extern rtx emit_note_copy (rtx);
-extern rtx emit_line_note (location_t);
extern rtx make_insn_raw (rtx);
extern rtx make_jump_insn_raw (rtx);
extern void add_function_usage_to (rtx, rtx);
@@ -2315,4 +2314,10 @@ extern const struct rtl_hooks general_rtl_hooks;
/* Keep this for the nonce. */
#define gen_lowpart rtl_hooks.gen_lowpart
+extern void insn_locators_alloc (void);
+extern void insn_locators_finalize (void);
+extern void set_curr_insn_source_location (location_t);
+extern void set_curr_insn_block (tree);
+extern int curr_insn_locator (void);
+
#endif /* ! GCC_RTL_H */
diff --git a/gcc/system.h b/gcc/system.h
index 7a3c489e1d4..12f4b66fa69 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -611,9 +611,6 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
# define FALSE false
#endif /* !__cplusplus */
-/* Get definition of double_int. */
-#include "double-int.h"
-
/* Some compilers do not allow the use of unsigned char in bitfields. */
#define BOOL_BITFIELD unsigned int
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 18037894e23..c0d97b4dc5b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,161 @@
+2007-05-03 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/30565
+ * gcc.dg/tree-ssa/loop-27.c: New test.
+
+2007-05-03 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * gcc.target/bfin/frmul.c (__v2hi): Use short as base type, not itn.
+ * gcc.target/bfin/arith.c (__v2hi): Likewise.
+ * gcc.target/bfin/mul-combine.c (__v2hi): Likewise.
+ * gcc.target/bfin/shift.c (__v2hi): Likewise.
+
+2007-05-03 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/31699
+ * lib/target-supports.exp (check_effective_target_vect_intfloat_cvt):
+ New.
+ (check_effective_target_vect_floatint_cvt): New.
+ * gcc.dg/vect/vect-floatint-conversion-1.c: Use new keyword instead
+ of specific targets.
+ * gcc.dg/vect/vect-intfloat-conversion-1.c: Likewise.
+ * gcc.dg/vect/vect-multitypes-1.c: One less loop gets vectorized.
+ * gcc.dg/vect/vect-multitypes-4.c: Likewise.
+ * gcc.dg/vect/vect-iv-4.c: Likewise.
+ * gcc.dg/vect/vect-multitypes-11.c: New.
+ * gcc.dg/vect/pr31699.c: New.
+
+2007-05-02 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.c-torture/compile-limits-stringlit.c: Reduce size of string.
+
+2007-05-02 Seongbae Park <seongbae.park@gmail.com>
+
+ PR C++/31663
+ * g++.dg/warn/anonymous-namespace-2.C: New.
+ * g++.dg/warn/anonymous-namespace-2.h: New.
+
+2007-05-02 Paul Brook <paul@codesourcery.com>
+
+ * gcc.dg/arm-eabi1.c: Move debug output. Augment lcmp/ulcmp tests.
+
+2007-05-02 Eric Christopher <echristo@apple.com>
+
+ * gcc.dg/cpp/if-div.c: New file.
+
+2007-05-02 Tom Tromey <tromey@redhat.com>
+
+ PR preprocessor/28709:
+ * gcc.dg/cpp/pr28709.c: New file.
+
+2007-05-02 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/31146
+ * g++.dg/tree-ssa/pr31146-2.C: New testcase.
+
+2007-05-01 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.c-torture/compile/limits-blockid.c: New.
+ * gcc.c-torture/compile/limits-caselabels.c: New.
+ * gcc.c-torture/compile/limits-declparen.c: New.
+ * gcc.c-torture/compile/limits-enumconst.c: New.
+ * gcc.c-torture/compile/limits-exprparen.c: New.
+ * gcc.c-torture/compile/limits-externalid.c: New.
+ * gcc.c-torture/compile/limits-fnargs.c: New.
+ * gcc.c-torture/compile/limits-fndefn.c: New.
+ * gcc.c-torture/compile/limits-idexternal.c: New.
+ * gcc.c-torture/compile/limits-idinternal.c: New.
+ * gcc.c-torture/compile/limits-pointer.c: New.
+ * gcc.c-torture/compile/limits-stringlit.c: New.
+ * gcc.c-torture/compile/limits-structmem.c: New.
+ * gcc.c-torture/compile/limits-structnest.c: New.
+
+2007-04-29 Geoffrey Keating <geoffk@apple.com>
+
+ * gfortran.dg/bom_UTF-8_F.F90: Rename from bom_UTF-8.F90.
+
+2007-05-01 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR middle-end/31740
+ * gcc.c-torture/compile/20070501-1.c: New testcase.
+
+2007-05-01 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/31732
+ * gfortran.dg/array_memset_2: New test case.
+
+2007-05-01 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR testsuite/31615
+ * gfortran.dg/vect/vect-5.f90: Fix dg-final test.
+
+2007-05-01 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR testsuite/31589
+ * gcc.dg/vect/vect-iv-9.c: Added vect_int_mult target keyword to
+ dg-final test.
+ * gcc.dg/vect/vect-reduc-dot-u16b.c: Added vect_pack_trunc target
+ keyword to dg-final test.
+ * gcc.dg/vect/vect-iv-4.c: Likewise.
+ * gcc.dg/vect/vect-widen-mult-u16.c: Likewise.
+ * gcc.dg/vect/pr30771.c: Added vect_unapck target keyword to dg-final
+ test.
+ * gcc.dg/vect/vect-reduc-dot-u16a.c: Change variable type to avoid a
+ cast.
+ * gcc.dg/vect/no-section-anchors-vect-69.c: xfail on is64.
+ * lib/target-supports.exp
+ (check_effective_target_vect_widen_sum_hi_to_si): Added ia64.
+ (check_effective_target_vect_widen_sum_qi_to_hi): Added ia64.
+
+2007-04-30 Kazu Hirata <kazu@codesourcery.com>
+
+ * gcc.c-torture/execute/ieee/20000320-1.c: Use
+ __LONG_LONG_MAX__ and its friends instead of those supplied by
+ limits.h.
+
+2007-04-30 Andrew pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/31721
+ * g++.dg/ext/vector7.C: New testcase.
+
+2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/31591
+ * gfortran.dg/bound_simplification_1.f90: New test.
+
+2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/31645
+ * testsuite/gfortran.dg/bom_error.f90: New test.
+ * testsuite/gfortran.dg/bom_include.f90: New test.
+ * testsuite/gfortran.dg/bom_UTF16-LE.f90: New test.
+ * testsuite/gfortran.dg/bom_UTF16-BE.f90: New test.
+ * testsuite/gfortran.dg/bom_UTF-8.f90: New test.
+ * testsuite/gfortran.dg/bom_UTF-32.f90: New test.
+ * testsuite/gfortran.dg/bom_UTF-8.F90: New test.
+ * testsuite/gfortran.dg/bom_include.inc: New file.
+
+2007-04-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/30221
+ * g++.dg/init/ptrfn2.C: New test.
+ * g++.dg/init/ptrfn3.C: New test.
+
+2007-04-29 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31711
+ * gfortran.dg/dependency_21.f90: New test.
+
+2007-04-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * gfortran.dg/secnds.f: Use real*8.
+ * gfortran.dg/secnds-1.f: Use real*8.
+
+2007-04-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/31532
+ * gfortran.dg/inquire_5.f90: Update test.
+
2007-05-03 Chao-ying Fu <fu@mips.com>
* gcc.target/mips/dpaq_sa_l_w.c: New test.
@@ -154,7 +312,7 @@
Olga Golovanevsky <olga@il.ibm.com>
* g++.dg/other/str_empty.C: New test.
-
+
2007-04-24 Richard Henderson <rth@redhat.com>
* gcc.dg/vect/vect.exp: Don't run tests on Alpha.
@@ -2304,7 +2462,7 @@
Dorit Nuzman <dorit@il.ibm.com>
* gcc.dg/vect/vect-intfloat-conversion-1.c: New test.
- * gcc.dg/vect/vect-intfloat-conversion-1.c: New test.
+ * gcc.dg/vect/vect-floatint-conversion-1.c: New test.
* gcc.dg/vect/vect-93.c: Another loop gets vectorized on powerpc.
* gcc.dg/vect/vect-113.c: Likewise.
diff --git a/gcc/testsuite/g++.dg/ext/vector7.C b/gcc/testsuite/g++.dg/ext/vector7.C
new file mode 100644
index 00000000000..cd259b1a258
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vector7.C
@@ -0,0 +1,8 @@
+// { dg-options "" }
+// { dg-do compile }
+// PR C++/31721 and PR 14217
+// the attribute vector_size would change a reference type into a pointer type which was wrong.
+
+#define vector __attribute__((__vector_size__(16) ))
+vector int b;
+vector int &a = b;
diff --git a/gcc/testsuite/g++.dg/init/ptrfn2.C b/gcc/testsuite/g++.dg/init/ptrfn2.C
new file mode 100644
index 00000000000..0ca922b9c38
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ptrfn2.C
@@ -0,0 +1,14 @@
+// { dg-options "" }
+// { dg-do compile }
+// C++/30221
+// We would ICE while trying to reshape the pointer to
+// member function element which is not needed.
+
+
+class abstract {};
+typedef void (abstract::*fptr1) (short & s ) const;
+struct s {};
+s array[] =
+{
+ (fptr1)0
+};// { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/init/ptrfn3.C b/gcc/testsuite/g++.dg/init/ptrfn3.C
new file mode 100644
index 00000000000..960085063cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ptrfn3.C
@@ -0,0 +1,14 @@
+// { dg-options "" }
+// { dg-do compile }
+// C++/30221
+// We would ICE while trying to reshape the pointer to
+// member function element which is not needed.
+
+
+class abstract {};
+typedef void (abstract::*fptr1) (short & s ) const;
+struct s {fptr1 f;};
+s array[] =
+{
+ (fptr1)0
+};
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C b/gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C
new file mode 100644
index 00000000000..0fd60275b53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-forwprop1" } */
+
+#include <new>
+
+template <class T>
+struct Vec
+{
+ Vec()
+ {
+ for (int i=0; i<3; ++i)
+ new (&a[i]) T(0);
+ }
+ T a[3];
+};
+
+double foo (void)
+{
+ Vec<double> v;
+ return v.a[2];
+}
+
+/* { dg-final { scan-tree-dump "Replaced .*iftmp.* != 0B. with .1" "forwprop1" } } */
+/* { dg-final { cleanup-tree-dump "forwprop1" } } */
diff --git a/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C b/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C
new file mode 100644
index 00000000000..4d87b69d396
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C
@@ -0,0 +1,29 @@
+// Test for the warning of exposing types from an anonymous namespace
+// { dg-do compile }
+//
+#include "anonymous-namespace-2.h"
+
+namespace {
+ struct good { };
+}
+
+struct g1 {
+ good * A;
+};
+struct b1 { // { dg-warning "uses the anonymous namespace" }
+ bad * B;
+};
+
+struct g2 {
+ good * A[1];
+};
+struct b2 { // { dg-warning "uses the anonymous namespace" }
+ bad * B[1];
+};
+
+struct g3 {
+ good (*A)[1];
+};
+struct b3 { // { dg-warning "uses the anonymous namespace" }
+ bad (*B)[1];
+};
diff --git a/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h b/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h
new file mode 100644
index 00000000000..ce5d05c2aec
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h
@@ -0,0 +1,3 @@
+namespace {
+ struct bad { };
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20070501-1.c b/gcc/testsuite/gcc.c-torture/compile/20070501-1.c
new file mode 100644
index 00000000000..39acd49dee4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20070501-1.c
@@ -0,0 +1,16 @@
+ typedef signed int signed16 __attribute__ ((__mode__ (__HI__)));
+ typedef unsigned int unsigned16 __attribute__ ((__mode__ (__HI__)));
+ typedef signed16 HI;
+ typedef unsigned16 UHI;
+unsigned short f(int y)
+{
+ HI tmp_b4;
+ tmp_b4 = y;
+ UHI opval;
+ if (tmp_b4 == -32768)
+ opval = 32767;
+ else
+ opval = -tmp_b4;
+ return opval;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-blockid.c b/gcc/testsuite/gcc.c-torture/compile/limits-blockid.c
new file mode 100644
index 00000000000..718c8673c2e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-blockid.c
@@ -0,0 +1,18 @@
+#define LIM1(x) x##0; x##1; x##2; x##3; x##4; x##5; x##6; x##7; x##8; x##9;
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+void q9_func(void)
+{
+ LIM5(char t)
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-caselabels.c b/gcc/testsuite/gcc.c-torture/compile/limits-caselabels.c
new file mode 100644
index 00000000000..09b7b2eb0fe
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-caselabels.c
@@ -0,0 +1,21 @@
+#define LIM1(x) x##0: x##1: x##2: x##3: x##4: x##5: x##6: x##7: x##8: x##9:
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+void q19_func (int i)
+{
+ switch (i) {
+ LIM5 (case 1)
+ break;
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-declparen.c b/gcc/testsuite/gcc.c-torture/compile/limits-declparen.c
new file mode 100644
index 00000000000..41bf9c5cdc1
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-declparen.c
@@ -0,0 +1,15 @@
+#define PTR1 (* (* (* (* (* (* (* (* (* (*
+#define PTR2 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1
+#define PTR3 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2
+#define PTR4 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3
+#define PTR5 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4
+#define PTR6 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5
+
+#define RBR1 ) ) ) ) ) ) ) ) ) )
+#define RBR2 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1
+#define RBR3 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2
+#define RBR4 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3
+#define RBR5 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4
+#define RBR6 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5
+
+int PTR4 q4_var RBR4 = 0;
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-enumconst.c b/gcc/testsuite/gcc.c-torture/compile/limits-enumconst.c
new file mode 100644
index 00000000000..80ac342cd2f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-enumconst.c
@@ -0,0 +1,18 @@
+#define LIM1(x) x##0, x##1, x##2, x##3, x##4, x##5, x##6, x##7, x##8, x##9,
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+enum q21_enum
+{
+ LIM5 (e)
+};
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-exprparen.c b/gcc/testsuite/gcc.c-torture/compile/limits-exprparen.c
new file mode 100644
index 00000000000..2c6dce04a8e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-exprparen.c
@@ -0,0 +1,15 @@
+#define LBR1 ( ( ( ( ( ( ( ( ( (
+#define LBR2 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1
+#define LBR3 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2
+#define LBR4 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3
+#define LBR5 LBR4 LBR4 LBR4 LBR4 LBR4 LBR4 LBR4 LBR4 LBR4 LBR4
+#define LBR6 LBR5 LBR5 LBR5 LBR5 LBR5 LBR5 LBR5 LBR5 LBR5 LBR5
+
+#define RBR1 ) ) ) ) ) ) ) ) ) )
+#define RBR2 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1
+#define RBR3 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2
+#define RBR4 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3
+#define RBR5 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4
+#define RBR6 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5 RBR5
+
+int q5_var = LBR4 0 RBR4;
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-externalid.c b/gcc/testsuite/gcc.c-torture/compile/limits-externalid.c
new file mode 100644
index 00000000000..1b316c791cd
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-externalid.c
@@ -0,0 +1,15 @@
+#define LIM1(x) x##0; x##1; x##2; x##3; x##4; x##5; x##6; x##7; x##8; x##9;
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+LIM5(char t)
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-fnargs.c b/gcc/testsuite/gcc.c-torture/compile/limits-fnargs.c
new file mode 100644
index 00000000000..b94fa43db12
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-fnargs.c
@@ -0,0 +1,20 @@
+#define PAR1 int, int, int, int, int, int, int, int, int, int
+#define PAR2 PAR1, PAR1, PAR1, PAR1, PAR1, PAR1, PAR1, PAR1, PAR1, PAR1
+#define PAR3 PAR2, PAR2, PAR2, PAR2, PAR2, PAR2, PAR2, PAR2, PAR2, PAR2
+#define PAR4 PAR3, PAR3, PAR3, PAR3, PAR3, PAR3, PAR3, PAR3, PAR3, PAR3
+#define PAR5 PAR4, PAR4, PAR4, PAR4, PAR4, PAR4, PAR4, PAR4, PAR4, PAR4
+#define PAR6 PAR5, PAR5, PAR5, PAR5, PAR5, PAR5, PAR5, PAR5, PAR5, PAR5
+
+extern void func (PAR4);
+
+#define ARG1 0,1,2,3,4,5,6,7,8,9
+#define ARG2 ARG1, ARG1, ARG1, ARG1, ARG1, ARG1, ARG1, ARG1, ARG1, ARG1
+#define ARG3 ARG2, ARG2, ARG2, ARG2, ARG2, ARG2, ARG2, ARG2, ARG2, ARG2
+#define ARG4 ARG3, ARG3, ARG3, ARG3, ARG3, ARG3, ARG3, ARG3, ARG3, ARG3
+#define ARG5 ARG4, ARG4, ARG4, ARG4, ARG4, ARG4, ARG4, ARG4, ARG4, ARG4
+#define ARG5HALF ARG5, ARG5, ARG5, ARG5, ARG5
+
+void caller(void)
+{
+ func (ARG4);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c
new file mode 100644
index 00000000000..4d2aef08933
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c
@@ -0,0 +1,17 @@
+#define LIM1(x) x##0, x##1, x##2, x##3, x##4, x##5, x##6, x##7, x##8, x##9,
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+void func1 (LIM5(int p) int t)
+{
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-idexternal.c b/gcc/testsuite/gcc.c-torture/compile/limits-idexternal.c
new file mode 100644
index 00000000000..1f346aadffe
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-idexternal.c
@@ -0,0 +1,11 @@
+#define LIM1 0123456789
+#define LIM2 LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1
+#define LIM3 LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2
+#define LIM4 LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3
+#define LIM5 LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4
+#define LIM6 LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5
+
+#define V(x) v##LIM5##x
+
+int V(a);
+int V(b);
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-idinternal.c b/gcc/testsuite/gcc.c-torture/compile/limits-idinternal.c
new file mode 100644
index 00000000000..cbd095ee007
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-idinternal.c
@@ -0,0 +1,11 @@
+#define LIM1 0123456789
+#define LIM2 LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1##LIM1
+#define LIM3 LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2##LIM2
+#define LIM4 LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3##LIM3
+#define LIM5 LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4##LIM4
+#define LIM6 LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5##LIM5
+
+#define V(x) v##LIM6##x
+
+static int V(a);
+static int V(b);
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-pointer.c b/gcc/testsuite/gcc.c-torture/compile/limits-pointer.c
new file mode 100644
index 00000000000..1e50ea7cf34
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-pointer.c
@@ -0,0 +1,8 @@
+#define PTR1 * * * * * * * * * *
+#define PTR2 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1 PTR1
+#define PTR3 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2 PTR2
+#define PTR4 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3 PTR3
+#define PTR5 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4 PTR4
+#define PTR6 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5 PTR5
+
+int PTR4 q3_var = 0;
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-stringlit.c b/gcc/testsuite/gcc.c-torture/compile/limits-stringlit.c
new file mode 100644
index 00000000000..22dc19b3c6e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-stringlit.c
@@ -0,0 +1,10 @@
+#define STR2 "012345678901234567890123456789012345678901234567890123456789\
+0123456789012345678901234567890123456789"
+#define STR3 STR2 STR2 STR2 STR2 STR2 STR2 STR2 STR2 STR2 STR2
+#define STR4 STR3 STR3 STR3 STR3 STR3 STR3 STR3 STR3 STR3 STR3
+#define STR5 STR4 STR4 STR4 STR4 STR4 STR4 STR4 STR4 STR4 STR4
+#define STR6 STR5 STR5 STR5 STR5 STR5 STR5 STR5 STR5 STR5 STR5
+#define STR7 STR6 STR6 STR6 STR6 STR6 STR6 STR6 STR6 STR6 STR6
+#define STR8 STR7 STR7 STR7 STR7 STR7 STR7 STR7 STR7 STR7 STR7
+
+char vlv[] = STR6;
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-structmem.c b/gcc/testsuite/gcc.c-torture/compile/limits-structmem.c
new file mode 100644
index 00000000000..2f2265a5e1a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-structmem.c
@@ -0,0 +1,18 @@
+#define LIM1(x) x##0; x##1; x##2; x##3; x##4; x##5; x##6; x##7; x##8; x##9;
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+struct q20_struct
+{
+ LIM4 (char m)
+};
diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-structnest.c b/gcc/testsuite/gcc.c-torture/compile/limits-structnest.c
new file mode 100644
index 00000000000..62448fb51ce
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/limits-structnest.c
@@ -0,0 +1,23 @@
+#define LIM1(x) x##0 {x##1 {x##2 {x##3 {x##4 {x##5 {x##6 {x##7 {x##8 {x##9 {
+#define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \
+ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9)
+#define LIM3(x) LIM2(x##0) LIM2(x##1) LIM2(x##2) LIM2(x##3) LIM2(x##4) \
+ LIM2(x##5) LIM2(x##6) LIM2(x##7) LIM2(x##8) LIM2(x##9)
+#define LIM4(x) LIM3(x##0) LIM3(x##1) LIM3(x##2) LIM3(x##3) LIM3(x##4) \
+ LIM3(x##5) LIM3(x##6) LIM3(x##7) LIM3(x##8) LIM3(x##9)
+#define LIM5(x) LIM4(x##0) LIM4(x##1) LIM4(x##2) LIM4(x##3) LIM4(x##4) \
+ LIM4(x##5) LIM4(x##6) LIM4(x##7) LIM4(x##8) LIM4(x##9)
+#define LIM6(x) LIM5(x##0) LIM5(x##1) LIM5(x##2) LIM5(x##3) LIM5(x##4) \
+ LIM5(x##5) LIM5(x##6) LIM5(x##7) LIM5(x##8) LIM5(x##9)
+#define LIM7(x) LIM6(x##0) LIM6(x##1) LIM6(x##2) LIM6(x##3) LIM6(x##4) \
+ LIM6(x##5) LIM6(x##6) LIM6(x##7) LIM6(x##8) LIM6(x##9)
+
+#define RBR1 } x; } x; } x; } x; } x; } x; } x; } x; } x; } x;
+#define RBR2 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1 RBR1
+#define RBR3 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2 RBR2
+#define RBR4 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3 RBR3
+#define RBR5 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4 RBR4
+
+LIM4(struct s)
+ int x;
+RBR4
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
index 5f1768c1abc..873a17df4d3 100644
--- a/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
@@ -1,11 +1,10 @@
#if defined(__mips__) && defined(__sgi__)
#include <sys/fpu.h>
#endif /* defined(__mips__) && defined(__sgi__) */
-#include <limits.h>
-#if UINT_MAX != 4294967295u || (ULONG_LONG_MAX != 18446744073709551615ull && ULONG_MAX != 18446744073709551615ull)
+#if __INT_MAX__ != 2147483647 || (__LONG_LONG_MAX__ != 9223372036854775807ll && __LONG_MAX__ != 9223372036854775807ll)
int main(void) { exit (0); }
#else
-#if ULONG_MAX != 18446744073709551615ull
+#if __LONG_MAX__ != 9223372036854775807ll
typedef unsigned long long ull;
#else
typedef unsigned long ull;
diff --git a/gcc/testsuite/gcc.dg/arm-eabi1.c b/gcc/testsuite/gcc.dg/arm-eabi1.c
index 6a8d0e044b1..06af6710299 100644
--- a/gcc/testsuite/gcc.dg/arm-eabi1.c
+++ b/gcc/testsuite/gcc.dg/arm-eabi1.c
@@ -85,11 +85,11 @@ extern long long __eabi_uwrite8 (long long, void *);
type a1; \
type b1; \
\
- fprintf (stderr, "%d: Test %s == %s\n", __LINE__, #a, #b); \
a1 = a; \
b1 = b; \
if (abs (a1 - b1) > epsilon) \
{ \
+ fprintf (stderr, "%d: Test %s == %s\n", __LINE__, #a, #b); \
fprintf (stderr, "%d: " format " != " format "\n", \
__LINE__, a1, b1); \
abort (); \
@@ -103,9 +103,56 @@ extern long long __eabi_uwrite8 (long long, void *);
#define feq(a, b) eq (a, b, float, fabs, fepsilon, "%f")
#define deq(a, b) eq (a, b, double, fabs, depsilon, "%g")
+#define NUM_CMP_VALUES 6
+
+/* Values picked to cover a range of small, large, positive and negative. */
+static unsigned int cmp_val[NUM_CMP_VALUES] =
+{
+ 0,
+ 1,
+ 0x40000000,
+ 0x80000000,
+ 0xc0000000,
+ 0xffffffff
+};
+
+/* All combinations for each of the above values. */
+#define ulcmp(l, s, m) \
+ s, l, l, l, l, l, m, s, l, l, l, l, \
+ m, m, s, l, l, l, m, m, m, s, l, l, \
+ m, m, m, m, s, l, m, m, m, m, m, s
+
+#define lcmp(l, s, m) \
+ s, l, l, m, m, m, m, s, l, m, m, m, \
+ m, m, s, m, m, m, l, l, l, s, l, l, \
+ l, l, l, m, s, l, l, l, l, m, m, s
+
+/* All combinations of the above for high/low words. */
+static int lcmp_results[] =
+{
+ lcmp(ulcmp(-1, -1, -1), ulcmp(-1, 0, 1), ulcmp(1, 1, 1))
+};
+
+static int ulcmp_results[] =
+{
+ ulcmp(ulcmp(-1, -1, -1), ulcmp(-1, 0, 1), ulcmp(1, 1, 1))
+};
+
+static int signof(int i)
+{
+ if (i < 0)
+ return -1;
+
+ if (i == 0)
+ return 0;
+
+ return 1;
+}
+
int main () {
unsigned char bytes[256];
- int i;
+ int i, j, k, n;
+ int *result;
/* Table 2. Double-precision floating-point arithmetic. */
deq (__aeabi_dadd (dzero, done), done);
@@ -234,12 +281,31 @@ int main () {
leq (__aeabi_llsl (2LL, 1), 4LL);
leq (__aeabi_llsr (-1LL, 63), 1);
leq (__aeabi_lasr (-1LL, 63), -1);
- ieq (__aeabi_lcmp (0LL, 1LL), -1);
- ieq (__aeabi_lcmp (0LL, 0LL), 0);
- ieq (__aeabi_lcmp (1LL, 0LL), 1);
- ieq (__aeabi_ulcmp (0LL, 1LL), -1);
- ieq (__aeabi_ulcmp (0LL, 0LL), 0);
- ieq (__aeabi_ulcmp (1LL, 0LL), 1);
+
+ result = lcmp_results;
+ for (i = 0; i < NUM_CMP_VALUES; i++)
+ for (j = 0; j < NUM_CMP_VALUES; j++)
+ for (k = 0; k < NUM_CMP_VALUES; k++)
+ for (n = 0; n < NUM_CMP_VALUES; n++)
+ {
+ ieq (signof (__aeabi_lcmp
+ (((long long)cmp_val[i] << 32) | cmp_val[k],
+ ((long long)cmp_val[j] << 32) | cmp_val[n])),
+ *result);
+ result++;
+ }
+ result = ulcmp_results;
+ for (i = 0; i < NUM_CMP_VALUES; i++)
+ for (j = 0; j < NUM_CMP_VALUES; j++)
+ for (k = 0; k < NUM_CMP_VALUES; k++)
+ for (n = 0; n < NUM_CMP_VALUES; n++)
+ {
+ ieq (signof (__aeabi_ulcmp
+ (((long long)cmp_val[i] << 32) | cmp_val[k],
+ ((long long)cmp_val[j] << 32) | cmp_val[n])),
+ *result);
+ result++;
+ }
ieq (__aeabi_idiv (-550, 11), -50);
ueq (__aeabi_uidiv (4000000000U, 1000000U), 4000U);
diff --git a/gcc/testsuite/gcc.dg/cpp/if-div.c b/gcc/testsuite/gcc.dg/cpp/if-div.c
new file mode 100644
index 00000000000..4e42168124f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/if-div.c
@@ -0,0 +1,6 @@
+/* { dg-do preprocess } */
+
+/* Test that this preprocesses without error. */
+
+#if (-1)/2
+#endif
diff --git a/gcc/testsuite/gcc.dg/cpp/pr28709.c b/gcc/testsuite/gcc.dg/cpp/pr28709.c
new file mode 100644
index 00000000000..11cccbe8b5d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr28709.c
@@ -0,0 +1,8 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc. */
+/* PR preprocessor/28709 */
+
+/* { dg-do compile } */
+#define foo - ## >>
+foo;
+/* { dg-error "expected identifier.*'-'" "" { target *-*-* } 6 } */
+/* { dg-error pasting "" { target *-*-* } 6 } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-27.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-27.c
new file mode 100644
index 00000000000..802b7c2aa2b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-27.c
@@ -0,0 +1,14 @@
+/* PR tree-optimization/30565 */
+
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-pre -ftree-loop-linear" } */
+
+static double snrdef[32];
+void psycho_n1(double ltmin[2][32], int stereo)
+{
+ int i, k;
+
+ for (k = 0; k < stereo; k++)
+ for (i = 0; i < 32; i++)
+ ltmin[k][i] = snrdef[i];
+}
diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
index 7ed505b6f78..a590458da6e 100644
--- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
+++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
@@ -50,7 +50,7 @@ int main1 ()
abort ();
}
- /* 2. aligned */
+ /* 2. aligned on 8-bytes */
for (i = 3; i < N-1; i++)
{
tmp1[2].a.n[1][2][i] = 6;
@@ -63,7 +63,7 @@ int main1 ()
abort ();
}
- /* 3. aligned */
+ /* 3. aligned on 16-bytes */
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
@@ -113,5 +113,8 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" } } */
+/* Loops 1,2,4 are unaligned on targets that require 16-byte alignment.
+ Loops 1,4 are unaligned on targets that require 8-byte alignment (ia64). */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail ia64-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target ia64-*-* } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr30771.c b/gcc/testsuite/gcc.dg/vect/pr30771.c
index 9371f96d918..e9f4bd2abc7 100644
--- a/gcc/testsuite/gcc.dg/vect/pr30771.c
+++ b/gcc/testsuite/gcc.dg/vect/pr30771.c
@@ -14,5 +14,5 @@ main()
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr31699.c b/gcc/testsuite/gcc.dg/vect/pr31699.c
new file mode 100644
index 00000000000..86099924387
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr31699.c
@@ -0,0 +1,35 @@
+/* { dg-require-effective-target vect_double } */
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include "tree-vect.h"
+
+float x[256];
+
+void foo(void)
+{
+ double *z = malloc (sizeof(double) * 256);
+
+ int i;
+ for (i=0; i<256; ++i)
+ z[i] = x[i] + 1.0f;
+}
+
+
+int main()
+{
+ int i;
+
+ check_vect ();
+
+ for (i = 0; i < 256; i++)
+ x[i] = (float) i;
+
+ foo();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_intfloat_cvt } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c b/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c
index 95ffc684ec4..dd845bf057d 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c
@@ -36,5 +36,5 @@ main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_floatint_cvt } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c b/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c
index 1369f2b8608..85a993a34c8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c
@@ -34,5 +34,5 @@ int main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_intfloat_cvt } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-iv-4.c b/gcc/testsuite/gcc.dg/vect/vect-iv-4.c
index c860f686058..0a3c44579ed 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-iv-4.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-iv-4.c
@@ -40,5 +40,5 @@ int main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-iv-9.c b/gcc/testsuite/gcc.dg/vect/vect-iv-9.c
index 12d4d35b753..5926bbdd31e 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-iv-9.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-iv-9.c
@@ -33,5 +33,6 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_int_mult } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target {! vect_int_mult } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
index 2b884011952..e1cbafa56a1 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
@@ -14,10 +14,9 @@ int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,
/* Current peeling-for-alignment scheme will consider the 'sa[i+7]'
access for peeling, and therefore will examine the option of
- using a peeling factor = VF-7%VF. This will result in a peeling factor 1,
+ using a peeling factor = V-7%V = 1,3 for V=8,4 respectively,
which will also align the access to 'ia[i+3]', and the loop could be
- vectorized on all targets that support unaligned loads.
- */
+ vectorized on all targets that support unaligned loads. */
int main1 (int n)
{
@@ -43,17 +42,16 @@ int main1 (int n)
/* Current peeling-for-alignment scheme will consider the 'ia[i+3]'
access for peeling, and therefore will examine the option of
- using a peeling factor = VF-3%VF. This will result in a peeling factor
- 5 if VF=8, or 1 if VF=4,2. In either case, this will also align the access
- to 'sa[i+3]', and the loop could be vectorized on targets that support
- unaligned loads. */
+ using a peeling factor = (V-3)%V = 1 for V=2,4.
+ This will not align the access 'sa[i+3]' (for which we need to
+ peel 5 iterations), so the loop can not be vectorized. */
int main2 (int n)
{
int i;
/* Multiple types with different sizes, used in independent
- copmutations. Vectorizable. */
+ copmutations. */
for (i = 0; i < n; i++)
{
ia[i+3] = ib[i];
@@ -80,8 +78,11 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-11.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-11.c
new file mode 100644
index 00000000000..26bba0b1f24
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-11.c
@@ -0,0 +1,45 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 64
+
+short x[N] __attribute__ ((__aligned__(16)));
+
+int
+foo (int len, int *z) {
+ int i;
+
+ for (i=0; i<len; i++) {
+ z[i] = x[i];
+ }
+}
+
+
+int main (void)
+{
+ short i;
+ int z[N+4];
+
+ check_vect ();
+
+ for (i=0; i<N; i++) {
+ x[i] = i;
+ }
+
+ foo (N,z+2);
+
+ for (i=0; i<N; i++) {
+ if (z[i+2] != x[i])
+ abort ();
+ }
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_unpack } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! vect_unpack } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_no_align && vect_unpack } } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
index 63f244d06b7..b5a55cba762 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
@@ -20,8 +20,7 @@ unsigned int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,
access for peeling, and therefore will examine the option of
using a peeling factor = VF-7%VF. This will result in a peeling factor 1,
which will also align the access to 'ia[i+3]', and the loop could be
- vectorized on all targets that support unaligned loads.
- */
+ vectorized on all targets that support unaligned loads. */
int main1 (int n)
{
@@ -48,9 +47,9 @@ int main1 (int n)
/* Current peeling-for-alignment scheme will consider the 'ia[i+3]'
access for peeling, and therefore will examine the option of
using a peeling factor = VF-3%VF. This will result in a peeling factor
- 5 if VF=8, or 1 if VF=4,2. In either case, this will also align the access
- to 'sa[i+3]', and the loop could be vectorized on targets that support
- unaligned loads. */
+ 1 if VF=4,2. This will not align the access to 'sa[i+3]', for which we
+ need to peel 5,1 iterations for VF=4,2 respectively, so the loop can not
+ be vectorized. */
int main2 (int n)
{
@@ -84,8 +83,11 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail vect_no_align } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16a.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16a.c
index 334cc239d8b..2947db26e6c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16a.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16a.c
@@ -30,7 +30,7 @@ foo1(int len) {
int main (void)
{
unsigned int dot1;
- int i;
+ unsigned short i;
check_vect ();
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16b.c
index 9bb5cdf0fb6..bf499eb9f05 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16b.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-u16b.c
@@ -53,6 +53,6 @@ int main (void)
dot-product of unsigned shorts) and targets that support widening multiplication. */
/* The induction loop in main is vectorized. */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_pack_trunc } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c b/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c
index c2cd0801a3a..e8579e47eed 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c
@@ -44,6 +44,6 @@ int main (void)
/*The induction loop is vectorized */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_pack_trunc } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/bfin/arith.c b/gcc/testsuite/gcc.target/bfin/arith.c
index 211506cfeca..35029ed32d2 100644
--- a/gcc/testsuite/gcc.target/bfin/arith.c
+++ b/gcc/testsuite/gcc.target/bfin/arith.c
@@ -1,7 +1,7 @@
extern void abort (void);
extern void exit (int);
-typedef int __v2hi __attribute ((vector_size(4)));
+typedef short __v2hi __attribute ((vector_size(4)));
typedef __v2hi fract2x16;
typedef short fract16;
diff --git a/gcc/testsuite/gcc.target/bfin/frmul.c b/gcc/testsuite/gcc.target/bfin/frmul.c
index 390d02f6ad7..61930bae552 100644
--- a/gcc/testsuite/gcc.target/bfin/frmul.c
+++ b/gcc/testsuite/gcc.target/bfin/frmul.c
@@ -1,7 +1,7 @@
extern void abort (void);
extern void exit (int);
-typedef int __v2hi __attribute ((vector_size(4)));
+typedef short __v2hi __attribute ((vector_size(4)));
typedef __v2hi fract2x16;
typedef short fract16;
diff --git a/gcc/testsuite/gcc.target/bfin/mul-combine.c b/gcc/testsuite/gcc.target/bfin/mul-combine.c
index 59129b57a65..2a811b332a8 100644
--- a/gcc/testsuite/gcc.target/bfin/mul-combine.c
+++ b/gcc/testsuite/gcc.target/bfin/mul-combine.c
@@ -10,7 +10,7 @@
extern void abort (void);
extern void exit (int);
-typedef int __v2hi __attribute ((vector_size(4)));
+typedef short __v2hi __attribute ((vector_size(4)));
typedef __v2hi fract2x16;
typedef short fract16;
diff --git a/gcc/testsuite/gcc.target/bfin/shift.c b/gcc/testsuite/gcc.target/bfin/shift.c
index 1f17883a37f..4a0e9175cc0 100644
--- a/gcc/testsuite/gcc.target/bfin/shift.c
+++ b/gcc/testsuite/gcc.target/bfin/shift.c
@@ -1,7 +1,7 @@
extern void abort (void);
extern void exit (int);
-typedef int __v2hi __attribute ((vector_size(4)));
+typedef short __v2hi __attribute ((vector_size(4)));
typedef __v2hi fract2x16;
typedef short fract16;
diff --git a/gcc/testsuite/gfortran.dg/array_memset_2.f90 b/gcc/testsuite/gfortran.dg/array_memset_2.f90
new file mode 100644
index 00000000000..58ce8fe6442
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_memset_2.f90
@@ -0,0 +1,38 @@
+! { dg-do run }
+! { dg-options "-O2 -fdump-tree-original" }
+
+module foo
+contains
+ subroutine bar(a)
+ real, dimension(:,:) :: a
+ a(1,:) = 0.
+ end subroutine bar
+end module foo
+
+program test
+ use foo
+ implicit none
+ real, dimension (2,2) :: a, d, e
+ real, dimension (1,2) :: b
+ real, dimension (2) :: c
+ data a, d, e /12*1.0/
+ data b /2*1.0/
+ data c /2*1.0/
+
+ a(1,:) = 0. ! This can't be optimized to a memset.
+ b(1,:) = 0. ! This is optimized to memset.
+ c = 0. ! This is optimized to memset.
+ d(:,1) = 0. ! This can't be otimized to a memset.
+ call bar(e)
+
+ if (any(a /= reshape((/ 0.0, 1.0, 0.0, 1.0/), shape(a)))) call abort
+ if (any(b /= 0.)) call abort
+ if (any(c /= 0.)) call abort
+ if (any(d /= reshape((/ 0.0, 0.0, 1.0, 1.0/), shape(d)))) call abort
+ if (any(e /= reshape((/ 0.0, 1.0, 0.0, 1.0/), shape(e)))) call abort
+
+end program
+
+! { dg-final { scan-tree-dump-times "memset" 2 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
+! { dg-final { cleanup-modules "foo" } }
diff --git a/gcc/testsuite/gfortran.dg/bom_UTF-32.f90 b/gcc/testsuite/gfortran.dg/bom_UTF-32.f90
new file mode 100644
index 00000000000..d4243031366
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_UTF-32.f90
Binary files differ
diff --git a/gcc/testsuite/gfortran.dg/bom_UTF-8.f90 b/gcc/testsuite/gfortran.dg/bom_UTF-8.f90
new file mode 100644
index 00000000000..f9d9e88d478
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_UTF-8.f90
@@ -0,0 +1,3 @@
+print *, "Hello world"
+end
+! { dg-do compile }
diff --git a/gcc/testsuite/gfortran.dg/bom_UTF-8_F.F90 b/gcc/testsuite/gfortran.dg/bom_UTF-8_F.F90
new file mode 100644
index 00000000000..f9d9e88d478
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_UTF-8_F.F90
@@ -0,0 +1,3 @@
+print *, "Hello world"
+end
+! { dg-do compile }
diff --git a/gcc/testsuite/gfortran.dg/bom_UTF16-BE.f90 b/gcc/testsuite/gfortran.dg/bom_UTF16-BE.f90
new file mode 100644
index 00000000000..f590e71f0d8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_UTF16-BE.f90
Binary files differ
diff --git a/gcc/testsuite/gfortran.dg/bom_UTF16-LE.f90 b/gcc/testsuite/gfortran.dg/bom_UTF16-LE.f90
new file mode 100644
index 00000000000..29e7ca68271
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_UTF16-LE.f90
Binary files differ
diff --git a/gcc/testsuite/gfortran.dg/bom_error.f90 b/gcc/testsuite/gfortran.dg/bom_error.f90
new file mode 100644
index 00000000000..7c2c86d1811
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_error.f90
@@ -0,0 +1,4 @@
+ÿþprint *, "Hello world!"
+ÿþend ! { dg-error "Invalid character" }
+! { dg-do compile }
+! { dg-excess-errors "Unexpected end of file" }
diff --git a/gcc/testsuite/gfortran.dg/bom_include.f90 b/gcc/testsuite/gfortran.dg/bom_include.f90
new file mode 100644
index 00000000000..65a2898036e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_include.f90
@@ -0,0 +1,2 @@
+! { dg-do compile }
+include "bom_include.inc"
diff --git a/gcc/testsuite/gfortran.dg/bom_include.inc b/gcc/testsuite/gfortran.dg/bom_include.inc
new file mode 100644
index 00000000000..b30290103da
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bom_include.inc
@@ -0,0 +1,2 @@
+print *, "Hello world!"
+end
diff --git a/gcc/testsuite/gfortran.dg/bound_simplification_1.f90 b/gcc/testsuite/gfortran.dg/bound_simplification_1.f90
new file mode 100644
index 00000000000..def5b7005ef
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bound_simplification_1.f90
@@ -0,0 +1,27 @@
+! { dg-do run }
+! { dg-options "" }
+ implicit none
+ real :: f(10,10,10,3,4)
+ integer, parameter :: upper(5) = ubound(f), lower(5) = lbound (f)
+ integer :: varu(5), varl(5)
+
+ varu(:) = ubound(f)
+ varl(:) = lbound(f)
+ if (any (varu /= upper)) call abort
+ if (any (varl /= lower)) call abort
+
+ call check (f, upper, lower)
+ call check (f, ubound(f), lbound(f))
+
+contains
+
+ subroutine check (f, upper, lower)
+ implicit none
+ integer :: upper(5), lower(5)
+ real :: f(:,:,:,:,:)
+
+ if (any (ubound(f) /= upper)) call abort
+ if (any (lbound(f) /= lower)) call abort
+ end subroutine check
+
+end
diff --git a/gcc/testsuite/gfortran.dg/dependency_21.f90 b/gcc/testsuite/gfortran.dg/dependency_21.f90
new file mode 100644
index 00000000000..ca25458f7f2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_21.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! Test the fix for PR31711 in which the dependency in the assignment
+! at line 18 was detected and then ignored.
+!
+! Contributed by Tobias Ivarsson <thobes@gmail.com>
+!
+program laplsolv
+ IMPLICIT NONE
+ integer, parameter :: n = 2
+ double precision,dimension(0:n+1, 0:n+1) :: T
+ integer :: i
+
+ T=0.0
+ T(0:n+1 , 0) = 1.0
+ T(0:n+1 , n+1) = 1.0
+ T(n+1 , 0:n+1) = 2.0
+
+ T(1:n,1)=(T(0:n-1,1)+T(1:n,1+1)+1d0)
+
+ if (any (T(1:n,1) .ne. 1d0 )) call abort ()
+end program laplsolv
diff --git a/gcc/testsuite/gfortran.dg/inquire_5.f90 b/gcc/testsuite/gfortran.dg/inquire_5.f90
index 0daa579d1b6..2a5678ba2fc 100644
--- a/gcc/testsuite/gfortran.dg/inquire_5.f90
+++ b/gcc/testsuite/gfortran.dg/inquire_5.f90
@@ -26,6 +26,8 @@
close(7)
open(7,STATUS='SCRATCH',POSITION='REWIND')
write(7,*)'this is a record written to the file'
+ write(7,*)'this is another record'
+ backspace(7)
inquire(7,position=chr)
if (chr.NE.'ASIS') CALL ABORT
rewind(7)
diff --git a/gcc/testsuite/gfortran.dg/secnds-1.f b/gcc/testsuite/gfortran.dg/secnds-1.f
index fafe645d794..5ac2bce154f 100644
--- a/gcc/testsuite/gfortran.dg/secnds-1.f
+++ b/gcc/testsuite/gfortran.dg/secnds-1.f
@@ -6,7 +6,7 @@ C Contributed by Paul Thomas <pault@gcc.gnu.org>
C
character*20 dum1, dum2, dum3
real t1, t1a, t2, t2a
- real dat1, dat2
+ real*8 dat1, dat2
integer i, j, values(8)
t1 = secnds (0.0)
call date_and_time (dum1, dum2, dum3, values)
diff --git a/gcc/testsuite/gfortran.dg/secnds.f b/gcc/testsuite/gfortran.dg/secnds.f
index a67acbb05f6..7541a05239c 100644
--- a/gcc/testsuite/gfortran.dg/secnds.f
+++ b/gcc/testsuite/gfortran.dg/secnds.f
@@ -6,7 +6,7 @@ C Contributed by Paul Thomas <pault@gcc.gnu.org>
C
character*20 dum1, dum2, dum3
real t1, t1a, t2, t2a
- real dat1, dat2
+ real*8 dat1, dat2
integer i, j, values(8)
t1 = secnds (0.0)
call date_and_time (dum1, dum2, dum3, values)
diff --git a/gcc/testsuite/gfortran.dg/vect/vect-5.f90 b/gcc/testsuite/gfortran.dg/vect/vect-5.f90
index d657656ea1c..551172af8a7 100644
--- a/gcc/testsuite/gfortran.dg/vect/vect-5.f90
+++ b/gcc/testsuite/gfortran.dg/vect/vect-5.f90
@@ -38,7 +38,7 @@
! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { ilp32 && vect_no_align } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { ilp32 && vect_no_align } } } }
! We also expect to vectorize one loop for lp64 targets that support
! misaligned access:
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 9bdb8695d63..77696eca857 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1397,6 +1397,49 @@ proc check_effective_target_vect_int { } {
return $et_vect_int_saved
}
+# Return 1 if the target supports int->float conversion
+#
+
+proc check_effective_target_vect_intfloat_cvt { } {
+ global et_vect_intfloat_cvt_saved
+
+ if [info exists et_vect_intfloat_cvt_saved] {
+ verbose "check_effective_target_vect_intfloat_cvt: using cached result" 2
+ } else {
+ set et_vect_intfloat_cvt_saved 0
+ if { [istarget i?86-*-*]
+ || [istarget powerpc*-*-*]
+ || [istarget x86_64-*-*] } {
+ set et_vect_intfloat_cvt_saved 1
+ }
+ }
+
+ verbose "check_effective_target_vect_intfloat_cvt: returning $et_vect_intfloat_cvt_saved" 2
+ return $et_vect_intfloat_cvt_saved
+}
+
+
+# Return 1 if the target supports float->int conversion
+#
+
+proc check_effective_target_vect_floatint_cvt { } {
+ global et_vect_floatint_cvt_saved
+
+ if [info exists et_vect_floatint_cvt_saved] {
+ verbose "check_effective_target_vect_floatint_cvt: using cached result" 2
+ } else {
+ set et_vect_floatint_cvt_saved 0
+ if { [istarget i?86-*-*]
+ || [istarget x86_64-*-*] } {
+ set et_vect_floatint_cvt_saved 1
+ }
+ }
+
+ verbose "check_effective_target_vect_floatint_cvt: returning $et_vect_floatint_cvt_saved" 2
+ return $et_vect_floatint_cvt_saved
+}
+
+
# Return 1 is this is an arm target using 32-bit instructions
proc check_effective_target_arm32 { } {
global et_arm32_saved
@@ -1694,7 +1737,8 @@ proc check_effective_target_vect_widen_sum_hi_to_si { } {
verbose "check_effective_target_vect_widen_sum_hi_to_si: using cached result" 2
} else {
set et_vect_widen_sum_hi_to_si_saved [check_effective_target_vect_unpack]
- if { [istarget powerpc*-*-*] } {
+ if { [istarget powerpc*-*-*]
+ || [istarget ia64-*-*] } {
set et_vect_widen_sum_hi_to_si_saved 1
}
}
@@ -1716,7 +1760,8 @@ proc check_effective_target_vect_widen_sum_qi_to_hi { } {
verbose "check_effective_target_vect_widen_sum_qi_to_hi: using cached result" 2
} else {
set et_vect_widen_sum_qi_to_hi_saved 0
- if { [check_effective_target_vect_unpack] } {
+ if { [check_effective_target_vect_unpack]
+ || [istarget ia64-*-*] } {
set et_vect_widen_sum_qi_to_hi_saved 1
}
}
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 59e1cc3b7ab..efe0a1cb0a1 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -181,6 +181,7 @@ build_tree_cfg (tree *tp)
/* Create the edges of the flowgraph. */
make_edges ();
+ cleanup_dead_labels ();
/* Debugging dumps. */
@@ -830,11 +831,19 @@ make_goto_expr_edges (basic_block bb)
to do early because it allows us to group case labels before creating
the edges for the CFG, and it speeds up block statement iterators in
all passes later on.
- We only run this pass once, running it more than once is probably not
- profitable. */
+ We rerun this pass after CFG is created, to get rid of the labels that
+ are no longer referenced. After then we do not run it any more, since
+ (almost) no new labels should be created. */
/* A map from basic block index to the leading label of that block. */
-static tree *label_for_bb;
+static struct label_record
+{
+ /* The label. */
+ tree label;
+
+ /* True if the label is referenced from somewhere. */
+ bool used;
+} *label_for_bb;
/* Callback for for_each_eh_region. Helper for cleanup_dead_labels. */
static void
@@ -852,7 +861,8 @@ update_eh_label (struct eh_region *region)
if (! bb)
return;
- new_label = label_for_bb[bb->index];
+ new_label = label_for_bb[bb->index].label;
+ label_for_bb[bb->index].used = true;
set_eh_region_tree_label (region, new_label);
}
}
@@ -862,11 +872,17 @@ static tree
main_block_label (tree label)
{
basic_block bb = label_to_block (label);
+ tree main_label = label_for_bb[bb->index].label;
/* label_to_block possibly inserted undefined label into the chain. */
- if (!label_for_bb[bb->index])
- label_for_bb[bb->index] = label;
- return label_for_bb[bb->index];
+ if (!main_label)
+ {
+ label_for_bb[bb->index].label = label;
+ main_label = label;
+ }
+
+ label_for_bb[bb->index].used = true;
+ return main_label;
}
/* Cleanup redundant labels. This is a three-step process:
@@ -878,7 +894,7 @@ void
cleanup_dead_labels (void)
{
basic_block bb;
- label_for_bb = XCNEWVEC (tree, last_basic_block);
+ label_for_bb = XCNEWVEC (struct label_record, last_basic_block);
/* Find a suitable label for each block. We use the first user-defined
label if there is one, or otherwise just the first label we see. */
@@ -897,19 +913,19 @@ cleanup_dead_labels (void)
/* If we have not yet seen a label for the current block,
remember this one and see if there are more labels. */
- if (! label_for_bb[bb->index])
+ if (!label_for_bb[bb->index].label)
{
- label_for_bb[bb->index] = label;
+ label_for_bb[bb->index].label = label;
continue;
}
/* If we did see a label for the current block already, but it
is an artificially created label, replace it if the current
label is a user defined label. */
- if (! DECL_ARTIFICIAL (label)
- && DECL_ARTIFICIAL (label_for_bb[bb->index]))
+ if (!DECL_ARTIFICIAL (label)
+ && DECL_ARTIFICIAL (label_for_bb[bb->index].label))
{
- label_for_bb[bb->index] = label;
+ label_for_bb[bb->index].label = label;
break;
}
}
@@ -981,11 +997,15 @@ cleanup_dead_labels (void)
FOR_EACH_BB (bb)
{
block_stmt_iterator i;
- tree label_for_this_bb = label_for_bb[bb->index];
+ tree label_for_this_bb = label_for_bb[bb->index].label;
- if (! label_for_this_bb)
+ if (!label_for_this_bb)
continue;
+ /* If the main label of the block is unused, we may still remove it. */
+ if (!label_for_bb[bb->index].used)
+ label_for_this_bb = NULL;
+
for (i = bsi_start (bb); !bsi_end_p (i); )
{
tree label, stmt = bsi_stmt (i);
@@ -4571,6 +4591,9 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
struct move_stmt_d d;
unsigned old_len, new_len;
+ /* Remove BB from dominance structures. */
+ delete_from_dominance_info (CDI_DOMINATORS, bb);
+
/* Link BB to the new linked list. */
move_block_after (bb, after);
@@ -4589,8 +4612,8 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
/* Grow DEST_CFUN's basic block array if needed. */
cfg = dest_cfun->cfg;
cfg->x_n_basic_blocks++;
- if (bb->index > cfg->x_last_basic_block)
- cfg->x_last_basic_block = bb->index;
+ if (bb->index >= cfg->x_last_basic_block)
+ cfg->x_last_basic_block = bb->index + 1;
old_len = VEC_length (basic_block, cfg->x_basic_block_info);
if ((unsigned) cfg->x_last_basic_block >= old_len)
@@ -4601,7 +4624,7 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
}
VEC_replace (basic_block, cfg->x_basic_block_info,
- cfg->x_last_basic_block, bb);
+ bb->index, bb);
/* The statements in BB need to be associated with a new TREE_BLOCK.
Labels need to be associated with a new label-to-block map. */
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index be6fae47274..2ebefe83274 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1118,7 +1118,6 @@ initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count,
new_cfun->unexpanded_var_list = NULL;
new_cfun->cfg = NULL;
new_cfun->decl = new_fndecl /*= copy_node (callee_fndecl)*/;
- new_cfun->ib_boundaries_block = NULL;
DECL_STRUCT_FUNCTION (new_fndecl) = new_cfun;
push_cfun (new_cfun);
init_empty_tree_cfg ();
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index c22e15e8a9d..b77243582b6 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -332,7 +332,6 @@ extern struct tree_opt_pass pass_fixup_cfg;
extern struct tree_opt_pass pass_init_function;
extern struct tree_opt_pass pass_jump;
-extern struct tree_opt_pass pass_insn_locators_initialize;
extern struct tree_opt_pass pass_rtl_eh;
extern struct tree_opt_pass pass_initial_value_sets;
extern struct tree_opt_pass pass_unshare_all_rtl;
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 828f5d4614c..f49d42d1092 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -147,10 +147,6 @@ struct sra_elt
/* True if there is BIT_FIELD_REF on the lhs with a vector. */
bool is_vector_lhs;
-
- /* 1 if the element is a field that is part of a block, 2 if the field
- is the block itself, 0 if it's neither. */
- char in_bitfld_block;
};
#define IS_ELEMENT_FOR_GROUP(ELEMENT) (TREE_CODE (ELEMENT) == RANGE_EXPR)
@@ -466,12 +462,6 @@ sra_hash_tree (tree t)
h = iterative_hash_expr (DECL_FIELD_BIT_OFFSET (t), h);
break;
- case BIT_FIELD_REF:
- /* Don't take operand 0 into account, that's our parent. */
- h = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
- h = iterative_hash_expr (TREE_OPERAND (t, 2), h);
- break;
-
default:
gcc_unreachable ();
}
@@ -490,14 +480,12 @@ sra_elt_hash (const void *x)
h = sra_hash_tree (e->element);
- /* Take into account everything except bitfield blocks back up the
- chain. Given that chain lengths are rarely very long, this
- should be acceptable. If we truly identify this as a performance
- problem, it should work to hash the pointer value
- "e->parent". */
+ /* Take into account everything back up the chain. Given that chain
+ lengths are rarely very long, this should be acceptable. If we
+ truly identify this as a performance problem, it should work to
+ hash the pointer value "e->parent". */
for (p = e->parent; p ; p = p->parent)
- if (!p->in_bitfld_block)
- h = (h * 65521) ^ sra_hash_tree (p->element);
+ h = (h * 65521) ^ sra_hash_tree (p->element);
return h;
}
@@ -510,17 +498,8 @@ sra_elt_eq (const void *x, const void *y)
const struct sra_elt *a = x;
const struct sra_elt *b = y;
tree ae, be;
- const struct sra_elt *ap = a->parent;
- const struct sra_elt *bp = b->parent;
- if (ap)
- while (ap->in_bitfld_block)
- ap = ap->parent;
- if (bp)
- while (bp->in_bitfld_block)
- bp = bp->parent;
-
- if (ap != bp)
+ if (a->parent != b->parent)
return false;
ae = a->element;
@@ -555,11 +534,6 @@ sra_elt_eq (const void *x, const void *y)
return false;
return fields_compatible_p (ae, be);
- case BIT_FIELD_REF:
- return
- tree_int_cst_equal (TREE_OPERAND (ae, 1), TREE_OPERAND (be, 1))
- && tree_int_cst_equal (TREE_OPERAND (ae, 2), TREE_OPERAND (be, 2));
-
default:
gcc_unreachable ();
}
@@ -698,9 +672,10 @@ struct sra_walk_fns
/* Invoked when ELT is required as a unit. Note that ELT might refer to
a leaf node, in which case this is a simple scalar reference. *EXPR_P
points to the location of the expression. IS_OUTPUT is true if this
- is a left-hand-side reference. */
+ is a left-hand-side reference. USE_ALL is true if we saw something we
+ couldn't quite identify and had to force the use of the entire object. */
void (*use) (struct sra_elt *elt, tree *expr_p,
- block_stmt_iterator *bsi, bool is_output);
+ block_stmt_iterator *bsi, bool is_output, bool use_all);
/* Invoked when we have a copy between two scalarizable references. */
void (*copy) (struct sra_elt *lhs_elt, struct sra_elt *rhs_elt,
@@ -754,6 +729,7 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output,
tree expr = *expr_p;
tree inner = expr;
bool disable_scalarization = false;
+ bool use_all_p = false;
/* We're looking to collect a reference expression between EXPR and INNER,
such that INNER is a scalarizable decl and all other nodes through EXPR
@@ -774,7 +750,7 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output,
if (disable_scalarization)
elt->cannot_scalarize = true;
else
- fns->use (elt, expr_p, bsi, is_output);
+ fns->use (elt, expr_p, bsi, is_output, use_all_p);
}
return;
@@ -861,6 +837,7 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output,
use_all:
expr_p = &TREE_OPERAND (inner, 0);
inner = expr = *expr_p;
+ use_all_p = true;
break;
default:
@@ -908,14 +885,11 @@ sra_walk_asm_expr (tree expr, block_stmt_iterator *bsi,
sra_walk_tree_list (ASM_OUTPUTS (expr), bsi, true, fns);
}
-static void sra_replace (block_stmt_iterator *bsi, tree list);
-static tree sra_build_elt_assignment (struct sra_elt *elt, tree src);
-
/* Walk a GIMPLE_MODIFY_STMT and categorize the assignment appropriately. */
static void
sra_walk_gimple_modify_stmt (tree expr, block_stmt_iterator *bsi,
- const struct sra_walk_fns *fns)
+ const struct sra_walk_fns *fns)
{
struct sra_elt *lhs_elt, *rhs_elt;
tree lhs, rhs;
@@ -938,7 +912,7 @@ sra_walk_gimple_modify_stmt (tree expr, block_stmt_iterator *bsi,
if (!rhs_elt->is_scalar && !TREE_SIDE_EFFECTS (lhs))
fns->ldst (rhs_elt, lhs, bsi, false);
else
- fns->use (rhs_elt, &GIMPLE_STMT_OPERAND (expr, 1), bsi, false);
+ fns->use (rhs_elt, &GIMPLE_STMT_OPERAND (expr, 1), bsi, false, false);
}
/* If it isn't scalarizable, there may be scalarizable variables within, so
@@ -985,9 +959,7 @@ sra_walk_gimple_modify_stmt (tree expr, block_stmt_iterator *bsi,
/* Otherwise we're being used in some context that requires the
aggregate to be seen as a whole. Invoke USE. */
else
- {
- fns->use (lhs_elt, &GIMPLE_STMT_OPERAND (expr, 0), bsi, true);
- }
+ fns->use (lhs_elt, &GIMPLE_STMT_OPERAND (expr, 0), bsi, true, false);
}
/* Similarly to above, LHS_ELT being null only means that the LHS as a
@@ -1098,7 +1070,7 @@ find_candidates_for_sra (void)
static void
scan_use (struct sra_elt *elt, tree *expr_p ATTRIBUTE_UNUSED,
block_stmt_iterator *bsi ATTRIBUTE_UNUSED,
- bool is_output ATTRIBUTE_UNUSED)
+ bool is_output ATTRIBUTE_UNUSED, bool use_all ATTRIBUTE_UNUSED)
{
elt->n_uses += 1;
}
@@ -1206,15 +1178,6 @@ build_element_name_1 (struct sra_elt *elt)
sprintf (buffer, HOST_WIDE_INT_PRINT_DEC, TREE_INT_CST_LOW (t));
obstack_grow (&sra_obstack, buffer, strlen (buffer));
}
- else if (TREE_CODE (t) == BIT_FIELD_REF)
- {
- sprintf (buffer, "B" HOST_WIDE_INT_PRINT_DEC,
- tree_low_cst (TREE_OPERAND (t, 2), 1));
- obstack_grow (&sra_obstack, buffer, strlen (buffer));
- sprintf (buffer, "F" HOST_WIDE_INT_PRINT_DEC,
- tree_low_cst (TREE_OPERAND (t, 1), 1));
- obstack_grow (&sra_obstack, buffer, strlen (buffer));
- }
else
{
tree name = DECL_NAME (t);
@@ -1247,12 +1210,9 @@ instantiate_element (struct sra_elt *elt)
{
struct sra_elt *base_elt;
tree var, base;
- bool nowarn = TREE_NO_WARNING (elt->element);
for (base_elt = elt; base_elt->parent; base_elt = base_elt->parent)
- if (!nowarn)
- nowarn = base_elt->parent->n_uses
- || TREE_NO_WARNING (base_elt->parent->element);
+ continue;
base = base_elt->element;
elt->replacement = var = make_rename_temp (elt->type, "SR");
@@ -1281,7 +1241,9 @@ instantiate_element (struct sra_elt *elt)
DECL_DEBUG_EXPR_IS_FROM (var) = 1;
DECL_IGNORED_P (var) = 0;
- TREE_NO_WARNING (var) = nowarn;
+ TREE_NO_WARNING (var) = TREE_NO_WARNING (base);
+ if (elt->element && TREE_NO_WARNING (elt->element))
+ TREE_NO_WARNING (var) = 1;
}
else
{
@@ -1376,7 +1338,7 @@ sum_instantiated_sizes (struct sra_elt *elt, unsigned HOST_WIDE_INT *sizep)
static void instantiate_missing_elements (struct sra_elt *elt);
-static struct sra_elt *
+static void
instantiate_missing_elements_1 (struct sra_elt *elt, tree child, tree type)
{
struct sra_elt *sub = lookup_element (elt, child, type, INSERT);
@@ -1387,266 +1349,6 @@ instantiate_missing_elements_1 (struct sra_elt *elt, tree child, tree type)
}
else
instantiate_missing_elements (sub);
- return sub;
-}
-
-/* Obtain the canonical type for field F of ELEMENT. */
-
-static tree
-canon_type_for_field (tree f, tree element)
-{
- tree field_type = TREE_TYPE (f);
-
- /* canonicalize_component_ref() unwidens some bit-field types (not
- marked as DECL_BIT_FIELD in C++), so we must do the same, lest we
- may introduce type mismatches. */
- if (INTEGRAL_TYPE_P (field_type)
- && DECL_MODE (f) != TYPE_MODE (field_type))
- field_type = TREE_TYPE (get_unwidened (build3 (COMPONENT_REF,
- field_type,
- element,
- f, NULL_TREE),
- NULL_TREE));
-
- return field_type;
-}
-
-/* Look for adjacent fields of ELT starting at F that we'd like to
- scalarize as a single variable. Return the last field of the
- group. */
-
-static tree
-try_instantiate_multiple_fields (struct sra_elt *elt, tree f)
-{
- unsigned HOST_WIDE_INT align, oalign, word, bit, size, alchk;
- enum machine_mode mode;
- tree first = f, prev;
- tree type, var;
- struct sra_elt *block;
-
- if (!is_sra_scalar_type (TREE_TYPE (f))
- || !host_integerp (DECL_FIELD_OFFSET (f), 1)
- || !host_integerp (DECL_FIELD_BIT_OFFSET (f), 1)
- || !host_integerp (DECL_SIZE (f), 1)
- || lookup_element (elt, f, NULL, NO_INSERT))
- return f;
-
- /* Taking the alignment of elt->element is not enough, since it
- might be just an array index or some such. We shouldn't need to
- initialize align here, but our optimizers don't always realize
- that, if we leave the loop without initializing align, we'll fail
- the assertion right after the loop. */
- align = (unsigned HOST_WIDE_INT)-1;
- for (block = elt; block; block = block->parent)
- if (DECL_P (block->element))
- {
- align = DECL_ALIGN (block->element);
- break;
- }
- gcc_assert (block);
-
- oalign = DECL_OFFSET_ALIGN (f);
- word = tree_low_cst (DECL_FIELD_OFFSET (f), 1);
- bit = tree_low_cst (DECL_FIELD_BIT_OFFSET (f), 1);
- size = tree_low_cst (DECL_SIZE (f), 1);
-
- if (align > oalign)
- align = oalign;
-
- alchk = align - 1;
- alchk = ~alchk;
-
- if ((bit & alchk) != ((bit + size - 1) & alchk))
- return f;
-
- /* Find adjacent fields in the same alignment word. */
-
- for (prev = f, f = TREE_CHAIN (f);
- f && TREE_CODE (f) == FIELD_DECL
- && is_sra_scalar_type (TREE_TYPE (f))
- && host_integerp (DECL_FIELD_OFFSET (f), 1)
- && host_integerp (DECL_FIELD_BIT_OFFSET (f), 1)
- && host_integerp (DECL_SIZE (f), 1)
- && (HOST_WIDE_INT)word == tree_low_cst (DECL_FIELD_OFFSET (f), 1)
- && !lookup_element (elt, f, NULL, NO_INSERT);
- prev = f, f = TREE_CHAIN (f))
- {
- unsigned HOST_WIDE_INT nbit, nsize;
-
- nbit = tree_low_cst (DECL_FIELD_BIT_OFFSET (f), 1);
- nsize = tree_low_cst (DECL_SIZE (f), 1);
-
- if (bit + size == nbit)
- {
- if ((bit & alchk) != ((nbit + nsize - 1) & alchk))
- break;
- size += nsize;
- }
- else if (nbit + nsize == bit)
- {
- if ((nbit & alchk) != ((bit + size - 1) & alchk))
- break;
- bit = nbit;
- size += nsize;
- }
- else
- break;
- }
-
- f = prev;
-
- if (f == first)
- return f;
-
- gcc_assert ((bit & alchk) == ((bit + size - 1) & alchk));
-
- /* Try to widen the bit range so as to cover padding bits as well. */
-
- if ((bit & ~alchk) || size != align)
- {
- unsigned HOST_WIDE_INT mbit = bit & alchk;
- unsigned HOST_WIDE_INT msize = align;
-
- for (f = TYPE_FIELDS (elt->type);
- f; f = TREE_CHAIN (f))
- {
- unsigned HOST_WIDE_INT fword, fbit, fsize;
-
- /* Skip the fields from first to prev. */
- if (f == first)
- {
- f = prev;
- continue;
- }
-
- if (!(TREE_CODE (f) == FIELD_DECL
- && host_integerp (DECL_FIELD_OFFSET (f), 1)
- && host_integerp (DECL_FIELD_BIT_OFFSET (f), 1)))
- continue;
-
- fword = tree_low_cst (DECL_FIELD_OFFSET (f), 1);
- /* If we're past the selected word, we're fine. */
- if (word < fword)
- continue;
-
- fbit = tree_low_cst (DECL_FIELD_BIT_OFFSET (f), 1);
-
- if (host_integerp (DECL_SIZE (f), 1))
- fsize = tree_low_cst (DECL_SIZE (f), 1);
- else
- /* Assume a variable-sized field takes up all space till
- the end of the word. ??? Endianness issues? */
- fsize = align - fbit;
-
- if (fword < word)
- {
- /* A large field might start at a previous word and
- extend into the selected word. Exclude those
- bits. ??? Endianness issues? */
- HOST_WIDE_INT diff = fbit + fsize
- - (HOST_WIDE_INT)((word - fword) * BITS_PER_UNIT + mbit);
-
- if (diff <= 0)
- continue;
-
- mbit += diff;
- msize -= diff;
- }
- else
- {
- gcc_assert (fword == word);
-
- /* Non-overlapping, great. */
- if (fbit + fsize <= mbit
- || mbit + msize <= fbit)
- continue;
-
- if (fbit <= mbit)
- {
- unsigned HOST_WIDE_INT diff = fbit + fsize - mbit;
- mbit += diff;
- msize -= diff;
- }
- else if (fbit > mbit)
- msize -= (mbit + msize - fbit);
- else
- gcc_unreachable ();
- }
- }
-
- bit = mbit;
- size = msize;
- }
-
- /* Now we know the bit range we're interested in. Find the smallest
- machine mode we can use to access it. */
-
- for (mode = smallest_mode_for_size (size, MODE_INT);
- ;
- mode = GET_MODE_WIDER_MODE (mode))
- {
- gcc_assert (mode != VOIDmode);
-
- alchk = GET_MODE_PRECISION (mode) - 1;
- alchk = ~alchk;
-
- if ((bit & alchk) == ((bit + size - 1) & alchk))
- break;
- }
-
- gcc_assert (~alchk < align);
-
- /* Create the field group as a single variable. */
-
- type = lang_hooks.types.type_for_mode (mode, 1);
- gcc_assert (type);
- var = build3 (BIT_FIELD_REF, type, NULL_TREE,
- bitsize_int (size),
- bitsize_int (word * BITS_PER_UNIT + bit));
- BIT_FIELD_REF_UNSIGNED (var) = 1;
-
- block = instantiate_missing_elements_1 (elt, var, type);
- gcc_assert (block && block->is_scalar);
-
- var = block->replacement;
-
- if (((word * BITS_PER_UNIT + bit) & ~alchk)
- || (HOST_WIDE_INT)size != tree_low_cst (DECL_SIZE (var), 1))
- {
- block->replacement = build3 (BIT_FIELD_REF,
- TREE_TYPE (block->element), var,
- bitsize_int (size),
- bitsize_int ((word * BITS_PER_UNIT
- + bit) & ~alchk));
- BIT_FIELD_REF_UNSIGNED (block->replacement) = 1;
- TREE_NO_WARNING (block->replacement) = 1;
- }
-
- block->in_bitfld_block = 2;
-
- /* Add the member fields to the group, such that they access
- portions of the group variable. */
-
- for (f = first; f != TREE_CHAIN (prev); f = TREE_CHAIN (f))
- {
- tree field_type = canon_type_for_field (f, elt->element);
- struct sra_elt *fld = lookup_element (block, f, field_type, INSERT);
-
- gcc_assert (fld && fld->is_scalar && !fld->replacement);
-
- fld->replacement = build3 (BIT_FIELD_REF, field_type, var,
- DECL_SIZE (f),
- bitsize_int
- ((word * BITS_PER_UNIT
- + (TREE_INT_CST_LOW
- (DECL_FIELD_BIT_OFFSET (f))))
- & ~alchk));
- BIT_FIELD_REF_UNSIGNED (fld->replacement) = TYPE_UNSIGNED (field_type);
- TREE_NO_WARNING (block->replacement) = 1;
- fld->in_bitfld_block = 1;
- }
-
- return prev;
}
static void
@@ -1662,17 +1364,21 @@ instantiate_missing_elements (struct sra_elt *elt)
for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f))
if (TREE_CODE (f) == FIELD_DECL)
{
- tree last = try_instantiate_multiple_fields (elt, f);
-
- if (last != f)
- {
- f = last;
- continue;
- }
-
- instantiate_missing_elements_1 (elt, f,
- canon_type_for_field
- (f, elt->element));
+ tree field_type = TREE_TYPE (f);
+
+ /* canonicalize_component_ref() unwidens some bit-field
+ types (not marked as DECL_BIT_FIELD in C++), so we
+ must do the same, lest we may introduce type
+ mismatches. */
+ if (INTEGRAL_TYPE_P (field_type)
+ && DECL_MODE (f) != TYPE_MODE (field_type))
+ field_type = TREE_TYPE (get_unwidened (build3 (COMPONENT_REF,
+ field_type,
+ elt->element,
+ f, NULL_TREE),
+ NULL_TREE));
+
+ instantiate_missing_elements_1 (elt, f, field_type);
}
break;
}
@@ -1984,16 +1690,6 @@ generate_one_element_ref (struct sra_elt *elt, tree base)
{
tree field = elt->element;
- /* We can't test elt->in_bitfld_blk here because, when this is
- called from instantiate_element, we haven't set this field
- yet. */
- if (TREE_CODE (field) == BIT_FIELD_REF)
- {
- tree ret = copy_node (field);
- TREE_OPERAND (ret, 0) = base;
- return ret;
- }
-
/* Watch out for compatible records with differing field lists. */
if (DECL_FIELD_CONTEXT (field) != TYPE_MAIN_VARIANT (TREE_TYPE (base)))
field = find_compatible_field (TREE_TYPE (base), field);
@@ -2046,126 +1742,6 @@ sra_build_assignment (tree dst, tree src)
return build_gimple_modify_stmt (dst, src);
}
-/* BIT_FIELD_REFs must not be shared. sra_build_elt_assignment()
- takes care of assignments, but we must create copies for uses. */
-#define REPLDUP(t) (TREE_CODE (t) != BIT_FIELD_REF ? (t) : copy_node (t))
-
-static tree
-sra_build_elt_assignment (struct sra_elt *elt, tree src)
-{
- tree dst = elt->replacement;
- tree var, type, tmp, tmp2, tmp3;
- tree list, stmt;
- tree cst, cst2, mask;
- tree minshift = NULL, maxshift = NULL;
-
- if (TREE_CODE (dst) != BIT_FIELD_REF
- || !elt->in_bitfld_block)
- return sra_build_assignment (REPLDUP (dst), src);
-
- var = TREE_OPERAND (dst, 0);
-
- /* Try to widen the assignment to the entire variable.
- We need the source to be a BIT_FIELD_REF as well, such that, for
- BIT_FIELD_REF<d,sz,dp> = BIT_FIELD_REF<s,sz,sp>,
- if sp >= dp, we can turn it into
- d = BIT_FIELD_REF<s,sp+sz,sp-dp>. */
- if (elt->in_bitfld_block == 2
- && TREE_CODE (src) == BIT_FIELD_REF
- && !tree_int_cst_lt (TREE_OPERAND (src, 2), TREE_OPERAND (dst, 2)))
- {
- src = fold_build3 (BIT_FIELD_REF, TREE_TYPE (var),
- TREE_OPERAND (src, 0),
- size_binop (PLUS_EXPR, TREE_OPERAND (src, 1),
- TREE_OPERAND (dst, 2)),
- size_binop (MINUS_EXPR, TREE_OPERAND (src, 2),
- TREE_OPERAND (dst, 2)));
- BIT_FIELD_REF_UNSIGNED (src) = 1;
-
- return sra_build_assignment (var, src);
- }
-
- if (!is_gimple_reg (var))
- return sra_build_assignment (REPLDUP (dst), src);
-
- list = alloc_stmt_list ();
-
- cst = TREE_OPERAND (dst, 2);
- if (WORDS_BIG_ENDIAN)
- {
- cst = size_binop (MINUS_EXPR, DECL_SIZE (var), cst);
- maxshift = cst;
- }
- else
- minshift = cst;
-
- cst2 = size_binop (PLUS_EXPR, TREE_OPERAND (dst, 1),
- TREE_OPERAND (dst, 2));
- if (WORDS_BIG_ENDIAN)
- {
- cst2 = size_binop (MINUS_EXPR, DECL_SIZE (var), cst2);
- minshift = cst2;
- }
- else
- maxshift = cst2;
-
- type = TREE_TYPE (var);
-
- mask = build_int_cst_wide (type, 1, 0);
- cst = int_const_binop (LSHIFT_EXPR, mask, maxshift, 1);
- cst2 = int_const_binop (LSHIFT_EXPR, mask, minshift, 1);
- mask = int_const_binop (MINUS_EXPR, cst, cst2, 1);
- mask = fold_build1 (BIT_NOT_EXPR, type, mask);
-
- if (!WORDS_BIG_ENDIAN)
- cst2 = TREE_OPERAND (dst, 2);
-
- tmp = make_rename_temp (type, "SR");
- stmt = build_gimple_modify_stmt (tmp,
- fold_build2 (BIT_AND_EXPR, type,
- var, mask));
- append_to_statement_list (stmt, &list);
-
- if (is_gimple_reg (src))
- tmp2 = src;
- else
- {
- tmp2 = make_rename_temp (TREE_TYPE (src), "SR");
- stmt = sra_build_assignment (tmp2, src);
- append_to_statement_list (stmt, &list);
- }
-
- if (!TYPE_UNSIGNED (TREE_TYPE (tmp2))
- || TYPE_MAIN_VARIANT (TREE_TYPE (tmp2)) != TYPE_MAIN_VARIANT (type))
- {
- tmp3 = make_rename_temp (type, "SR");
- tmp2 = fold_build3 (BIT_FIELD_REF, type, tmp2, TREE_OPERAND (dst, 1),
- bitsize_int (0));
- if (TREE_CODE (tmp2) == BIT_FIELD_REF)
- BIT_FIELD_REF_UNSIGNED (tmp2) = 1;
- stmt = sra_build_assignment (tmp3, tmp2);
- append_to_statement_list (stmt, &list);
- tmp2 = tmp3;
- }
-
- if (!integer_zerop (minshift))
- {
- tmp3 = make_rename_temp (type, "SR");
- stmt = build_gimple_modify_stmt (tmp3,
- fold_build2 (LSHIFT_EXPR, type,
- tmp2, minshift));
- append_to_statement_list (stmt, &list);
- tmp2 = tmp3;
- }
-
- stmt = build_gimple_modify_stmt (var,
- fold_build2 (BIT_IOR_EXPR, type,
- tmp, tmp2));
- append_to_statement_list (stmt, &list);
-
- return list;
-}
-
/* Generate a set of assignment statements in *LIST_P to copy all
instantiated elements under ELT to or from the equivalent structure
rooted at EXPR. COPY_OUT controls the direction of the copy, with
@@ -2196,9 +1772,9 @@ generate_copy_inout (struct sra_elt *elt, bool copy_out, tree expr,
else if (elt->replacement)
{
if (copy_out)
- t = sra_build_elt_assignment (elt, expr);
+ t = sra_build_assignment (elt->replacement, expr);
else
- t = sra_build_assignment (expr, REPLDUP (elt->replacement));
+ t = sra_build_assignment (expr, elt->replacement);
append_to_statement_list (t, list_p);
}
else
@@ -2223,19 +1799,6 @@ generate_element_copy (struct sra_elt *dst, struct sra_elt *src, tree *list_p)
FOR_EACH_ACTUAL_CHILD (dc, dst)
{
sc = lookup_element (src, dc->element, NULL, NO_INSERT);
- if (!sc && dc->in_bitfld_block == 2)
- {
- struct sra_elt *dcs;
-
- FOR_EACH_ACTUAL_CHILD (dcs, dc)
- {
- sc = lookup_element (src, dcs->element, NULL, NO_INSERT);
- gcc_assert (sc);
- generate_element_copy (dcs, sc, list_p);
- }
-
- continue;
- }
gcc_assert (sc);
generate_element_copy (dc, sc, list_p);
}
@@ -2246,7 +1809,7 @@ generate_element_copy (struct sra_elt *dst, struct sra_elt *src, tree *list_p)
gcc_assert (src->replacement);
- t = sra_build_elt_assignment (dst, REPLDUP (src->replacement));
+ t = sra_build_assignment (dst->replacement, src->replacement);
append_to_statement_list (t, list_p);
}
}
@@ -2267,9 +1830,8 @@ generate_element_zero (struct sra_elt *elt, tree *list_p)
return;
}
- if (!elt->in_bitfld_block)
- FOR_EACH_ACTUAL_CHILD (c, elt)
- generate_element_zero (c, list_p);
+ FOR_EACH_ACTUAL_CHILD (c, elt)
+ generate_element_zero (c, list_p);
if (elt->replacement)
{
@@ -2278,7 +1840,7 @@ generate_element_zero (struct sra_elt *elt, tree *list_p)
gcc_assert (elt->is_scalar);
t = fold_convert (elt->type, integer_zero_node);
- t = sra_build_elt_assignment (elt, t);
+ t = sra_build_assignment (elt->replacement, t);
append_to_statement_list (t, list_p);
}
}
@@ -2287,10 +1849,10 @@ generate_element_zero (struct sra_elt *elt, tree *list_p)
Add the result to *LIST_P. */
static void
-generate_one_element_init (struct sra_elt *elt, tree init, tree *list_p)
+generate_one_element_init (tree var, tree init, tree *list_p)
{
/* The replacement can be almost arbitrarily complex. Gimplify. */
- tree stmt = sra_build_elt_assignment (elt, init);
+ tree stmt = sra_build_assignment (var, init);
gimplify_and_add (stmt, list_p);
}
@@ -2319,7 +1881,7 @@ generate_element_init_1 (struct sra_elt *elt, tree init, tree *list_p)
{
if (elt->replacement)
{
- generate_one_element_init (elt, init, list_p);
+ generate_one_element_init (elt->replacement, init, list_p);
elt->visited = true;
}
return result;
@@ -2478,7 +2040,7 @@ sra_replace (block_stmt_iterator *bsi, tree list)
static void
scalarize_use (struct sra_elt *elt, tree *expr_p, block_stmt_iterator *bsi,
- bool is_output)
+ bool is_output, bool use_all)
{
tree list = NULL, stmt = bsi_stmt (*bsi);
@@ -2487,27 +2049,8 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, block_stmt_iterator *bsi,
/* If we have a replacement, then updating the reference is as
simple as modifying the existing statement in place. */
if (is_output)
- {
- if (TREE_CODE (elt->replacement) == BIT_FIELD_REF
- && is_gimple_reg (TREE_OPERAND (elt->replacement, 0))
- && TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
- && &GIMPLE_STMT_OPERAND (stmt, 0) == expr_p)
- {
- tree newstmt = sra_build_elt_assignment
- (elt, GIMPLE_STMT_OPERAND (stmt, 1));
- if (TREE_CODE (newstmt) != STATEMENT_LIST)
- {
- tree list = alloc_stmt_list ();
- append_to_statement_list (newstmt, &list);
- newstmt = list;
- }
- sra_replace (bsi, newstmt);
- return;
- }
-
- mark_all_v_defs (stmt);
- }
- *expr_p = REPLDUP (elt->replacement);
+ mark_all_v_defs (stmt);
+ *expr_p = elt->replacement;
update_stmt (stmt);
}
else
@@ -2525,23 +2068,17 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, block_stmt_iterator *bsi,
This optimization would be most effective if sra_walk_function
processed the blocks in dominator order. */
- generate_copy_inout (elt, false, generate_element_ref (elt), &list);
- if (list)
- {
- mark_all_v_defs (list);
- sra_insert_before (bsi, list);
- mark_no_warning (elt);
- }
-
+ generate_copy_inout (elt, is_output, generate_element_ref (elt), &list);
+ if (list == NULL)
+ return;
+ mark_all_v_defs (list);
if (is_output)
+ sra_insert_after (bsi, list);
+ else
{
- list = NULL;
- generate_copy_inout (elt, true, generate_element_ref (elt), &list);
- if (list)
- {
- mark_all_v_defs (list);
- sra_insert_after (bsi, list);
- }
+ sra_insert_before (bsi, list);
+ if (use_all)
+ mark_no_warning (elt);
}
}
}
@@ -2565,7 +2102,7 @@ scalarize_copy (struct sra_elt *lhs_elt, struct sra_elt *rhs_elt,
gcc_assert (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT);
GIMPLE_STMT_OPERAND (stmt, 0) = lhs_elt->replacement;
- GIMPLE_STMT_OPERAND (stmt, 1) = REPLDUP (rhs_elt->replacement);
+ GIMPLE_STMT_OPERAND (stmt, 1) = rhs_elt->replacement;
update_stmt (stmt);
}
else if (lhs_elt->use_block_copy || rhs_elt->use_block_copy)
@@ -2707,7 +2244,7 @@ scalarize_ldst (struct sra_elt *elt, tree other,
{
/* Since ELT is not fully instantiated, we have to leave the
block copy in place. Treat this as a USE. */
- scalarize_use (elt, NULL, bsi, is_output);
+ scalarize_use (elt, NULL, bsi, is_output, false);
}
else
{
@@ -2719,8 +2256,8 @@ scalarize_ldst (struct sra_elt *elt, tree other,
mark_all_v_defs (stmt);
generate_copy_inout (elt, is_output, other, &list);
- gcc_assert (list);
mark_all_v_defs (list);
+ gcc_assert (list);
/* Preserve EH semantics. */
if (stmt_ends_bb_p (stmt))
@@ -2816,10 +2353,6 @@ dump_sra_elt_name (FILE *f, struct sra_elt *elt)
fputc ('.', f);
print_generic_expr (f, elt->element, dump_flags);
}
- else if (TREE_CODE (elt->element) == BIT_FIELD_REF)
- fprintf (f, "$B" HOST_WIDE_INT_PRINT_DEC "F" HOST_WIDE_INT_PRINT_DEC,
- tree_low_cst (TREE_OPERAND (elt->element, 2), 1),
- tree_low_cst (TREE_OPERAND (elt->element, 1), 1));
else if (TREE_CODE (elt->element) == RANGE_EXPR)
fprintf (f, "["HOST_WIDE_INT_PRINT_DEC".."HOST_WIDE_INT_PRINT_DEC"]",
TREE_INT_CST_LOW (TREE_OPERAND (elt->element, 0)),
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 9c9d847eed6..6c9475540fe 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1587,6 +1587,8 @@ maybe_fold_offset_to_array_ref (tree base, tree offset, tree orig_type)
Otherwise, compute the offset as an index by using a division. If the
division isn't exact, then don't do anything. */
elt_size = TYPE_SIZE_UNIT (elt_type);
+ if (!elt_size)
+ return NULL;
if (integer_zerop (offset))
{
if (TREE_CODE (elt_size) != INTEGER_CST)
@@ -1647,12 +1649,11 @@ maybe_fold_offset_to_array_ref (tree base, tree offset, tree orig_type)
}
-/* A subroutine of fold_stmt_r. Attempts to fold *(S+O) to S.X.
+/* Attempt to fold *(S+O) to S.X.
BASE is a record type. OFFSET is a byte displacement. ORIG_TYPE
is the desired result type. */
-/* ??? This doesn't handle class inheritance. */
-tree
+static tree
maybe_fold_offset_to_component_ref (tree record_type, tree base, tree offset,
tree orig_type, bool base_is_ptr)
{
@@ -1679,6 +1680,8 @@ maybe_fold_offset_to_component_ref (tree record_type, tree base, tree offset,
if (DECL_BIT_FIELD (f))
continue;
+ if (!DECL_FIELD_OFFSET (f))
+ continue;
field_offset = byte_position (f);
if (TREE_CODE (field_offset) != INTEGER_CST)
continue;
@@ -1766,6 +1769,69 @@ maybe_fold_offset_to_component_ref (tree record_type, tree base, tree offset,
orig_type, false);
}
+/* Attempt to express (ORIG_TYPE)BASE+OFFSET as BASE->field_of_orig_type
+ or BASE[index] or by combination of those.
+
+ Before attempting the conversion strip off existing ADDR_EXPRs and
+ handled component refs. */
+
+tree
+maybe_fold_offset_to_reference (tree base, tree offset, tree orig_type)
+{
+ tree ret;
+ tree type;
+ bool base_is_ptr = true;
+
+ STRIP_NOPS (base);
+ if (TREE_CODE (base) == ADDR_EXPR)
+ {
+ base_is_ptr = false;
+
+ base = TREE_OPERAND (base, 0);
+
+ /* Handle case where existing COMPONENT_REF pick e.g. wrong field of union,
+ so it needs to be removed and new COMPONENT_REF constructed.
+ The wrong COMPONENT_REF are often constructed by folding the
+ (type *)&object within the expression (type *)&object+offset */
+ if (handled_component_p (base) && 0)
+ {
+ HOST_WIDE_INT sub_offset, size, maxsize;
+ tree newbase;
+ newbase = get_ref_base_and_extent (base, &sub_offset,
+ &size, &maxsize);
+ gcc_assert (newbase);
+ gcc_assert (!(sub_offset & (BITS_PER_UNIT - 1)));
+ if (size == maxsize)
+ {
+ base = newbase;
+ if (sub_offset)
+ offset = int_const_binop (PLUS_EXPR, offset,
+ build_int_cst (TREE_TYPE (offset),
+ sub_offset / BITS_PER_UNIT), 1);
+ }
+ }
+ if (lang_hooks.types_compatible_p (orig_type, TREE_TYPE (base))
+ && integer_zerop (offset))
+ return base;
+ type = TREE_TYPE (base);
+ }
+ else
+ {
+ base_is_ptr = true;
+ if (!POINTER_TYPE_P (TREE_TYPE (base)))
+ return NULL_TREE;
+ type = TREE_TYPE (TREE_TYPE (base));
+ }
+ ret = maybe_fold_offset_to_component_ref (type, base, offset,
+ orig_type, base_is_ptr);
+ if (!ret)
+ {
+ if (base_is_ptr)
+ base = build1 (INDIRECT_REF, type, base);
+ ret = maybe_fold_offset_to_array_ref (base, offset, orig_type);
+ }
+ return ret;
+}
/* A subroutine of fold_stmt_r. Attempt to simplify *(BASE+OFFSET).
Return the simplified expression, or NULL if nothing could be done. */
@@ -1802,6 +1868,8 @@ maybe_fold_stmt_indirect (tree expr, tree base, tree offset)
if (TREE_CODE (base) == ADDR_EXPR)
{
+ tree base_addr = base;
+
/* Strip the ADDR_EXPR. */
base = TREE_OPERAND (base, 0);
@@ -1810,24 +1878,11 @@ maybe_fold_stmt_indirect (tree expr, tree base, tree offset)
&& ccp_decl_initial_min_invariant (DECL_INITIAL (base)))
return DECL_INITIAL (base);
- /* Try folding *(&B+O) to B[X]. */
- t = maybe_fold_offset_to_array_ref (base, offset, TREE_TYPE (expr));
- if (t)
- return t;
-
/* Try folding *(&B+O) to B.X. */
- t = maybe_fold_offset_to_component_ref (TREE_TYPE (base), base, offset,
- TREE_TYPE (expr), false);
+ t = maybe_fold_offset_to_reference (base_addr, offset,
+ TREE_TYPE (expr));
if (t)
return t;
-
- /* Fold *&B to B. We can only do this if EXPR is the same type
- as BASE. We can't do this if EXPR is the element type of an array
- and BASE is the array. */
- if (integer_zerop (offset)
- && lang_hooks.types_compatible_p (TREE_TYPE (base),
- TREE_TYPE (expr)))
- return base;
}
else
{
@@ -1856,9 +1911,8 @@ maybe_fold_stmt_indirect (tree expr, tree base, tree offset)
/* Try folding *(B+O) to B->X. Still an improvement. */
if (POINTER_TYPE_P (TREE_TYPE (base)))
{
- t = maybe_fold_offset_to_component_ref (TREE_TYPE (TREE_TYPE (base)),
- base, offset,
- TREE_TYPE (expr), true);
+ t = maybe_fold_offset_to_reference (base, offset,
+ TREE_TYPE (expr));
if (t)
return t;
}
@@ -2020,6 +2074,21 @@ fold_stmt_r (tree *expr_p, int *walk_subtrees, void *data)
integer_zero_node);
break;
+ case NOP_EXPR:
+ t = walk_tree (&TREE_OPERAND (expr, 0), fold_stmt_r, data, NULL);
+ if (t)
+ return t;
+ *walk_subtrees = 0;
+
+ if (POINTER_TYPE_P (TREE_TYPE (expr))
+ && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (expr, 0)))
+ && (t = maybe_fold_offset_to_reference
+ (TREE_OPERAND (expr, 0),
+ integer_zero_node,
+ TREE_TYPE (TREE_TYPE (expr)))))
+ t = build_fold_addr_expr_with_type (t, TREE_TYPE (expr));
+ break;
+
/* ??? Could handle more ARRAY_REFs here, as a variant of INDIRECT_REF.
We'd only want to bother decomposing an existing ARRAY_REF if
the base array is found to have another offset contained within.
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 860a4c4da68..d91aa89325d 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -559,7 +559,8 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs,
be not totally successful, yet things may have been changed). */
static bool
-forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt)
+forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt,
+ bool single_use_p)
{
tree lhs, rhs, array_ref;
@@ -584,10 +585,20 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt)
/* Continue propagating into the RHS. */
}
- /* Trivial case. The use statement could be a trivial copy or a
+ /* Trivial cases. The use statement could be a trivial copy or a
useless conversion. Recurse to the uses of the lhs as copyprop does
not copy through differen variant pointers and FRE does not catch
- all useless conversions. */
+ all useless conversions. Treat the case of a single-use name and
+ a conversion to def_rhs type separate, though. */
+ else if (TREE_CODE (lhs) == SSA_NAME
+ && (TREE_CODE (rhs) == NOP_EXPR
+ || TREE_CODE (rhs) == CONVERT_EXPR)
+ && TREE_TYPE (rhs) == TREE_TYPE (def_rhs)
+ && single_use_p)
+ {
+ GIMPLE_STMT_OPERAND (use_stmt, 1) = unshare_expr (def_rhs);
+ return true;
+ }
else if ((TREE_CODE (lhs) == SSA_NAME
&& rhs == name)
|| ((TREE_CODE (rhs) == NOP_EXPR
@@ -702,6 +713,7 @@ forward_propagate_addr_expr (tree name, tree rhs)
imm_use_iterator iter;
tree use_stmt;
bool all = true;
+ bool single_use_p = has_single_use (name);
FOR_EACH_IMM_USE_STMT (use_stmt, iter, name)
{
@@ -726,7 +738,8 @@ forward_propagate_addr_expr (tree name, tree rhs)
push_stmt_changes (&use_stmt);
- result = forward_propagate_addr_expr_1 (name, rhs, use_stmt);
+ result = forward_propagate_addr_expr_1 (name, rhs, use_stmt,
+ single_use_p);
all &= result;
pop_stmt_changes (&use_stmt);
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index d26608b4cd1..1e5c5039ac0 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -4866,7 +4866,7 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data,
{
tree comp;
tree op, stmts, tgt, ass;
- block_stmt_iterator bsi, pbsi;
+ block_stmt_iterator bsi;
/* An important special case -- if we are asked to express value of
the original iv by itself, just exit; there is no need to
@@ -4937,13 +4937,7 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data,
if (name_info (data, tgt)->preserve_biv)
return;
- pbsi = bsi = bsi_start (bb_for_stmt (use->stmt));
- while (!bsi_end_p (pbsi)
- && TREE_CODE (bsi_stmt (pbsi)) == LABEL_EXPR)
- {
- bsi = pbsi;
- bsi_next (&pbsi);
- }
+ bsi = bsi_after_labels (bb_for_stmt (use->stmt));
break;
case GIMPLE_MODIFY_STMT:
@@ -4956,22 +4950,18 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data,
}
op = force_gimple_operand (comp, &stmts, false, SSA_NAME_VAR (tgt));
+ if (stmts)
+ bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
if (TREE_CODE (use->stmt) == PHI_NODE)
{
- if (stmts)
- bsi_insert_after (&bsi, stmts, BSI_CONTINUE_LINKING);
ass = build_gimple_modify_stmt (tgt, op);
- bsi_insert_after (&bsi, ass, BSI_NEW_STMT);
+ bsi_insert_before (&bsi, ass, BSI_SAME_STMT);
remove_statement (use->stmt, false);
SSA_NAME_DEF_STMT (tgt) = ass;
}
else
- {
- if (stmts)
- bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
- GIMPLE_STMT_OPERAND (use->stmt, 1) = op;
- }
+ GIMPLE_STMT_OPERAND (use->stmt, 1) = op;
}
/* Replaces ssa name in index IDX by its basic variable. Callback for
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 7611a6f2a5d..3416df32d3c 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -505,7 +505,8 @@ ip_normal_pos (struct loop *loop)
bb = single_pred (loop->latch);
last = last_stmt (bb);
- if (TREE_CODE (last) != COND_EXPR)
+ if (!last
+ || TREE_CODE (last) != COND_EXPR)
return NULL;
exit = EDGE_SUCC (bb, 0);
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 2e733f93168..814b23a7843 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -64,92 +64,6 @@ typedef struct
mpz_t below, up;
} bounds;
-/* Sets RESULT to VAL, taken unsigned if UNS is true and as signed
- otherwise. */
-
-static void
-mpz_set_double_int (mpz_t result, double_int val, bool uns)
-{
- bool negate = false;
- unsigned HOST_WIDE_INT vp[2];
-
- if (!uns && double_int_negative_p (val))
- {
- negate = true;
- val = double_int_neg (val);
- }
-
- vp[0] = val.low;
- vp[1] = (unsigned HOST_WIDE_INT) val.high;
- mpz_import (result, 2, -1, sizeof (HOST_WIDE_INT), 0, 0, vp);
-
- if (negate)
- mpz_neg (result, result);
-}
-
-/* Stores bounds of TYPE to MIN and MAX. */
-
-static void
-get_type_bounds (tree type, mpz_t min, mpz_t max)
-{
- if (TYPE_UNSIGNED (type))
- {
- mpz_set_ui (min, 0);
- mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)), true);
- }
- else
- {
- double_int mx, mn;
-
- mx = double_int_mask (TYPE_PRECISION (type) - 1);
- mn = double_int_sext (double_int_add (mx, double_int_one),
- TYPE_PRECISION (type));
- mpz_set_double_int (max, mx, true);
- mpz_set_double_int (min, mn, false);
- }
-}
-
-/* Returns VAL converted to TYPE. If VAL does not fit in TYPE,
- the minimum or maximum value of the type is returned instead. */
-
-static double_int
-mpz_to_double_int (tree type, mpz_t val)
-{
- mpz_t min, max;
- unsigned HOST_WIDE_INT vp[2];
- bool negate = false;
- size_t count;
- double_int res;
-
- mpz_init (min);
- mpz_init (max);
- get_type_bounds (type, min, max);
-
- if (mpz_cmp (val, min) < 0)
- mpz_set (val, min);
- else if (mpz_cmp (val, max) > 0)
- mpz_set (val, max);
-
- if (mpz_sgn (val) < 0)
- negate = true;
-
- vp[0] = 0;
- vp[1] = 0;
- mpz_export (vp, &count, -1, sizeof (HOST_WIDE_INT), 0, 0, val);
- gcc_assert (count <= 2);
-
- mpz_clear (min);
- mpz_clear (max);
-
- res.low = vp[0];
- res.high = (HOST_WIDE_INT) vp[1];
-
- res = double_int_ext (res, TYPE_PRECISION (type), TYPE_UNSIGNED (type));
- if (negate)
- res = double_int_neg (res);
-
- return res;
-}
/* Splits expression EXPR to a variable part VAR and constant OFFSET. */
@@ -212,7 +126,7 @@ determine_value_range (tree type, tree var, mpz_t off,
/* If the computation may wrap, we know nothing about the value, except for
the range of the type. */
- get_type_bounds (type, min, max);
+ get_type_static_bounds (type, min, max);
if (!nowrap_type_p (type))
return;
@@ -703,7 +617,7 @@ number_of_iterations_ne (tree type, affine_iv *iv, tree final,
mpz_init (max);
number_of_iterations_ne_max (max, iv->no_overflow, c, s, bnds);
- niter->max = mpz_to_double_int (niter_type, max);
+ niter->max = mpz_get_double_int (niter_type, max, false);
mpz_clear (max);
/* First the trivial cases -- when the step is 1. */
@@ -1081,7 +995,7 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
iv1->base, iv0->base);
niter->niter = delta;
- niter->max = mpz_to_double_int (niter_type, bnds->up);
+ niter->max = mpz_get_double_int (niter_type, bnds->up, false);
return true;
}
@@ -1128,7 +1042,7 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
mpz_add (tmp, bnds->up, mstep);
mpz_sub_ui (tmp, tmp, 1);
mpz_fdiv_q (tmp, tmp, mstep);
- niter->max = mpz_to_double_int (niter_type, tmp);
+ niter->max = mpz_get_double_int (niter_type, tmp, false);
mpz_clear (mstep);
mpz_clear (tmp);
diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c
index c195c7ab323..3a4841d2c05 100644
--- a/gcc/tree-vect-analyze.c
+++ b/gcc/tree-vect-analyze.c
@@ -1258,15 +1258,6 @@ vect_update_misalignment_for_peel (struct data_reference *dr,
if (DR_GROUP_FIRST_DR (peel_stmt_info))
dr_peel_size *= DR_GROUP_SIZE (peel_stmt_info);
- if (known_alignment_for_access_p (dr)
- && known_alignment_for_access_p (dr_peel)
- && (DR_MISALIGNMENT (dr) / dr_size ==
- DR_MISALIGNMENT (dr_peel) / dr_peel_size))
- {
- DR_MISALIGNMENT (dr) = 0;
- return;
- }
-
/* It can be assumed that the data refs with the same alignment as dr_peel
are aligned in the vector loop. */
same_align_drs
@@ -1507,7 +1498,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
the prolog loop ({VF - misalignment}), is a multiple of the
number of the interleaved accesses. */
int elem_size, mis_in_elements;
- int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
+ tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+ int nelements = TYPE_VECTOR_SUBPARTS (vectype);
/* FORNOW: handle only known alignment. */
if (!known_alignment_for_access_p (dr))
@@ -1516,10 +1508,10 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
break;
}
- elem_size = UNITS_PER_SIMD_WORD / vf;
+ elem_size = UNITS_PER_SIMD_WORD / nelements;
mis_in_elements = DR_MISALIGNMENT (dr) / elem_size;
- if ((vf - mis_in_elements) % DR_GROUP_SIZE (stmt_info))
+ if ((nelements - mis_in_elements) % DR_GROUP_SIZE (stmt_info))
{
do_peeling = false;
break;
@@ -1541,6 +1533,10 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
{
int mis;
int npeel = 0;
+ tree stmt = DR_STMT (dr0);
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+ int nelements = TYPE_VECTOR_SUBPARTS (vectype);
if (known_alignment_for_access_p (dr0))
{
@@ -1550,7 +1546,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
factor minus the misalignment as an element count. */
mis = DR_MISALIGNMENT (dr0);
mis /= GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr0))));
- npeel = LOOP_VINFO_VECT_FACTOR (loop_vinfo) - mis;
+ npeel = nelements - mis;
/* For interleaved data access every iteration accesses all the
members of the group, therefore we divide the number of iterations
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 0babc7be453..71155ac420b 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -1174,7 +1174,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
exit_bb = single_exit (loop)->dest;
new_phi = create_phi_node (SSA_NAME_VAR (vect_def), exit_bb);
SET_PHI_ARG_DEF (new_phi, single_exit (loop)->dest_idx, vect_def);
- exit_bsi = bsi_start (exit_bb);
+ exit_bsi = bsi_after_labels (exit_bb);
/* 2.2 Get the relevant tree-code to use in the epilog for schemes 2,3
(i.e. when reduc_code is not available) and in the final adjustment
@@ -1223,7 +1223,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_temp = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
extract_scalar_result = true;
}
@@ -1280,13 +1280,13 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_name = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_name;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
tmp = build2 (code, vectype, new_name, new_temp);
epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_temp = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
}
extract_scalar_result = true;
@@ -1316,7 +1316,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
for (bit_offset = element_bitsize;
bit_offset < vec_size_in_bits;
@@ -1331,13 +1331,13 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_name = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_name;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
tmp = build2 (code, scalar_type, new_name, new_temp);
epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, tmp);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
}
extract_scalar_result = false;
@@ -1366,7 +1366,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
}
/* 2.4 Adjust the final result by the initial value of the reduction
@@ -1382,7 +1382,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, tmp);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
- bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
+ bsi_insert_before (&exit_bsi, epilog_stmt, BSI_SAME_STMT);
}
/* 2.6 Replace uses of s_out0 with uses of s_out3 */
@@ -4790,13 +4790,17 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio)
prolog_niters = min ( LOOP_NITERS ,
(VF/group_size - addr_mis/elem_size)&(VF/group_size-1) )
where group_size is the size of the interleaved group.
-*/
+
+ The above formulas assume that VF == number of elements in the vector. This
+ may not hold when there are multiple-types in the loop.
+ In this case, for some data-references in the loop the VF does not represent
+ the number of elements that fit in the vector. Therefore, instead of VF we
+ use TYPE_VECTOR_SUBPARTS. */
static tree
vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
{
struct data_reference *dr = LOOP_VINFO_UNALIGNED_DR (loop_vinfo);
- int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
tree var, stmt;
tree iters, iters_name;
@@ -4809,6 +4813,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
tree niters_type = TREE_TYPE (loop_niters);
int group_size = 1;
int element_size = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr))));
+ int nelements = TYPE_VECTOR_SUBPARTS (vectype);
if (DR_GROUP_FIRST_DR (stmt_info))
{
@@ -4829,7 +4834,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "known alignment = %d.", byte_misalign);
iters = build_int_cst (niters_type,
- (vf - elem_misalign)&(vf/group_size-1));
+ (nelements - elem_misalign)&(nelements/group_size-1));
}
else
{
@@ -4841,9 +4846,9 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
tree type = lang_hooks.types.type_for_size (tree_low_cst (size, 1), 1);
tree vectype_size_minus_1 = build_int_cst (type, vectype_align - 1);
tree elem_size_log =
- build_int_cst (type, exact_log2 (vectype_align/vf));
- tree vf_minus_1 = build_int_cst (type, vf - 1);
- tree vf_tree = build_int_cst (type, vf);
+ build_int_cst (type, exact_log2 (vectype_align/nelements));
+ tree nelements_minus_1 = build_int_cst (type, nelements - 1);
+ tree nelements_tree = build_int_cst (type, nelements);
tree byte_misalign;
tree elem_misalign;
@@ -4858,9 +4863,9 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
elem_misalign =
fold_build2 (RSHIFT_EXPR, type, byte_misalign, elem_size_log);
- /* Create: (niters_type) (VF - elem_misalign)&(VF - 1) */
- iters = fold_build2 (MINUS_EXPR, type, vf_tree, elem_misalign);
- iters = fold_build2 (BIT_AND_EXPR, type, iters, vf_minus_1);
+ /* Create: (niters_type) (nelements - elem_misalign)&(nelements - 1) */
+ iters = fold_build2 (MINUS_EXPR, type, nelements_tree, elem_misalign);
+ iters = fold_build2 (BIT_AND_EXPR, type, iters, nelements_minus_1);
iters = fold_convert (niters_type, iters);
}
@@ -4915,8 +4920,8 @@ vect_update_init_of_dr (struct data_reference *dr, tree niters)
NITERS iterations were peeled from the loop represented by LOOP_VINFO.
This function updates the information recorded for the data references in
the loop to account for the fact that the first NITERS iterations had
- already been executed. Specifically, it updates the initial_condition of the
- access_function of all the data_references in the loop. */
+ already been executed. Specifically, it updates the initial_condition of
+ the access_function of all the data_references in the loop. */
static void
vect_update_inits_of_drs (loop_vec_info loop_vinfo, tree niters)
@@ -4925,7 +4930,7 @@ vect_update_inits_of_drs (loop_vec_info loop_vinfo, tree niters)
VEC (data_reference_p, heap) *datarefs = LOOP_VINFO_DATAREFS (loop_vinfo);
struct data_reference *dr;
- if (vect_dump && (dump_flags & TDF_DETAILS))
+ if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "=== vect_update_inits_of_dr ===");
for (i = 0; VEC_iterate (data_reference_p, datarefs, i, dr); i++)
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index d235a4917ba..f635334f19d 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -1644,6 +1644,12 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def_stmt,
*dt = vect_constant_def;
return true;
}
+ if (is_gimple_min_invariant (operand))
+ {
+ *def = operand;
+ *dt = vect_invariant_def;
+ return true;
+ }
if (TREE_CODE (operand) != SSA_NAME)
{
@@ -1671,7 +1677,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def_stmt,
if (IS_EMPTY_STMT (*def_stmt))
{
tree arg = TREE_OPERAND (*def_stmt, 0);
- if (TREE_CODE (arg) == INTEGER_CST || TREE_CODE (arg) == REAL_CST)
+ if (is_gimple_min_invariant (arg))
{
*def = operand;
*dt = vect_invariant_def;
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 78675e72324..a9141d76ed2 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -202,6 +202,36 @@ is_overflow_infinity (tree val)
}
+/* Return whether VAL is equal to the maximum value of its type. This
+ will be true for a positive overflow infinity. We can't do a
+ simple equality comparison with TYPE_MAX_VALUE because C typedefs
+ and Ada subtypes can produce types whose TYPE_MAX_VALUE is not ==
+ to the integer constant with the same value in the type. */
+
+static inline bool
+vrp_val_is_max (tree val)
+{
+ tree type_max = TYPE_MAX_VALUE (TREE_TYPE (val));
+
+ return (val == type_max
+ || (type_max != NULL_TREE
+ && operand_equal_p (val, type_max, 0)));
+}
+
+/* Return whether VAL is equal to the minimum value of its type. This
+ will be true for a negative overflow infinity. */
+
+static inline bool
+vrp_val_is_min (tree val)
+{
+ tree type_min = TYPE_MIN_VALUE (TREE_TYPE (val));
+
+ return (val == type_min
+ || (type_min != NULL_TREE
+ && operand_equal_p (val, type_min, 0)));
+}
+
+
/* Return true if ARG is marked with the nonnull attribute in the
current function signature. */
@@ -265,10 +295,7 @@ set_value_range (value_range_t *vr, enum value_range_type t, tree min,
gcc_assert (min && max);
if (INTEGRAL_TYPE_P (TREE_TYPE (min)) && t == VR_ANTI_RANGE)
- gcc_assert ((min != TYPE_MIN_VALUE (TREE_TYPE (min))
- && !is_negative_overflow_infinity (min))
- || (max != TYPE_MAX_VALUE (TREE_TYPE (max))
- && !is_positive_overflow_infinity (max)));
+ gcc_assert (!vrp_val_is_min (min) || !vrp_val_is_max (max));
cmp = compare_values (min, max);
gcc_assert (cmp == 0 || cmp == -1 || cmp == -2);
@@ -291,7 +318,8 @@ set_value_range (value_range_t *vr, enum value_range_type t, tree min,
/* Since updating the equivalence set involves deep copying the
bitmaps, only do it if absolutely necessary. */
- if (vr->equiv == NULL)
+ if (vr->equiv == NULL
+ && equiv != NULL)
vr->equiv = BITMAP_ALLOC (NULL);
if (equiv != vr->equiv)
@@ -335,8 +363,16 @@ set_value_range_to_value (value_range_t *vr, tree val)
gcc_assert (is_gimple_min_invariant (val));
if (is_overflow_infinity (val))
{
- val = copy_node (val);
- TREE_OVERFLOW (val) = 0;
+ if (operand_equal_p (val, TYPE_MAX_VALUE (TREE_TYPE (val)), 0))
+ val = TYPE_MAX_VALUE (TREE_TYPE (val));
+ else
+ {
+#ifdef ENABLE_CHECKING
+ gcc_assert (operand_equal_p (val,
+ TYPE_MIN_VALUE (TREE_TYPE (val)), 0));
+#endif
+ val = TYPE_MIN_VALUE (TREE_TYPE (val));
+ }
}
set_value_range (vr, VR_RANGE, val, val, NULL);
}
@@ -436,8 +472,8 @@ get_value_range (tree var)
/* Create a default value range. */
vr_value[ver] = vr = XCNEW (value_range_t);
- /* Allocate an equivalence set. */
- vr->equiv = BITMAP_ALLOC (NULL);
+ /* Defer allocating the equivalence set. */
+ vr->equiv = NULL;
/* If VAR is a default definition, the variable can take any value
in VAR's type. */
@@ -510,23 +546,25 @@ update_value_range (tree var, value_range_t *new_vr)
new_vr->equiv);
BITMAP_FREE (new_vr->equiv);
- new_vr->equiv = NULL;
return is_new;
}
-/* Add VAR and VAR's equivalence set to EQUIV. */
+/* Add VAR and VAR's equivalence set to EQUIV. This is the central
+ point where equivalence processing can be turned on/off. */
static void
-add_equivalence (bitmap equiv, tree var)
+add_equivalence (bitmap *equiv, tree var)
{
unsigned ver = SSA_NAME_VERSION (var);
value_range_t *vr = vr_value[ver];
- bitmap_set_bit (equiv, ver);
+ if (*equiv == NULL)
+ *equiv = BITMAP_ALLOC (NULL);
+ bitmap_set_bit (*equiv, ver);
if (vr && vr->equiv)
- bitmap_ior_into (equiv, vr->equiv);
+ bitmap_ior_into (*equiv, vr->equiv);
}
@@ -1095,8 +1133,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
predicates, we will need to trim the set of equivalences before
we are done. */
gcc_assert (vr_p->equiv == NULL);
- vr_p->equiv = BITMAP_ALLOC (NULL);
- add_equivalence (vr_p->equiv, var);
+ add_equivalence (&vr_p->equiv, var);
/* Extract a new range based on the asserted comparison for VAR and
LIMIT's value range. Notice that if LIMIT has an anti-range, we
@@ -1130,7 +1167,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
SSA name, the new range will also inherit the equivalence set
from LIMIT. */
if (TREE_CODE (limit) == SSA_NAME)
- add_equivalence (vr_p->equiv, limit);
+ add_equivalence (&vr_p->equiv, limit);
}
else if (cond_code == NE_EXPR)
{
@@ -1171,10 +1208,8 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
/* If MIN and MAX cover the whole range for their type, then
just use the original LIMIT. */
if (INTEGRAL_TYPE_P (type)
- && (min == TYPE_MIN_VALUE (type)
- || is_negative_overflow_infinity (min))
- && (max == TYPE_MAX_VALUE (type)
- || is_positive_overflow_infinity (max)))
+ && vrp_val_is_min (min)
+ && vrp_val_is_max (max))
min = max = limit;
set_value_range (vr_p, VR_ANTI_RANGE, min, max, vr_p->equiv);
@@ -1409,7 +1444,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
{
gcc_assert (!is_positive_overflow_infinity (anti_max));
if (needs_overflow_infinity (TREE_TYPE (anti_max))
- && anti_max == TYPE_MAX_VALUE (TREE_TYPE (anti_max)))
+ && vrp_val_is_max (anti_max))
{
if (!supports_overflow_infinity (TREE_TYPE (var_vr->min)))
{
@@ -1434,7 +1469,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
{
gcc_assert (!is_negative_overflow_infinity (anti_min));
if (needs_overflow_infinity (TREE_TYPE (anti_min))
- && anti_min == TYPE_MIN_VALUE (TREE_TYPE (anti_min)))
+ && vrp_val_is_min (anti_min))
{
if (!supports_overflow_infinity (TREE_TYPE (var_vr->min)))
{
@@ -1478,7 +1513,7 @@ extract_range_from_ssa_name (value_range_t *vr, tree var)
else
set_value_range (vr, VR_RANGE, var, var, NULL);
- add_equivalence (vr->equiv, var);
+ add_equivalence (&vr->equiv, var);
}
@@ -2023,10 +2058,8 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
We learn nothing when we have INF and INF(OVF) on both sides.
Note that we do accept [-INF, -INF] and [+INF, +INF] without
overflow. */
- if ((min == TYPE_MIN_VALUE (TREE_TYPE (min))
- || is_overflow_infinity (min))
- && (max == TYPE_MAX_VALUE (TREE_TYPE (max))
- || is_overflow_infinity (max)))
+ if ((vrp_val_is_min (min) || is_overflow_infinity (min))
+ && (vrp_val_is_max (max) || is_overflow_infinity (max)))
{
set_value_range_to_varying (vr);
return;
@@ -2202,13 +2235,13 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
min = negative_overflow_infinity (TREE_TYPE (expr));
else if (is_negative_overflow_infinity (vr0.max))
min = positive_overflow_infinity (TREE_TYPE (expr));
- else if (vr0.max != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ else if (!vrp_val_is_min (vr0.max))
min = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
else if (needs_overflow_infinity (TREE_TYPE (expr)))
{
if (supports_overflow_infinity (TREE_TYPE (expr))
&& !is_overflow_infinity (vr0.min)
- && vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ && !vrp_val_is_min (vr0.min))
min = positive_overflow_infinity (TREE_TYPE (expr));
else
{
@@ -2223,7 +2256,7 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
max = negative_overflow_infinity (TREE_TYPE (expr));
else if (is_negative_overflow_infinity (vr0.min))
max = positive_overflow_infinity (TREE_TYPE (expr));
- else if (vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ else if (!vrp_val_is_min (vr0.min))
max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
else if (needs_overflow_infinity (TREE_TYPE (expr)))
{
@@ -2262,9 +2295,9 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
useful range. */
if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (expr))
&& ((vr0.type == VR_RANGE
- && vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ && vrp_val_is_min (vr0.min))
|| (vr0.type == VR_ANTI_RANGE
- && vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr))
+ && !vrp_val_is_min (vr0.min)
&& !range_includes_zero_p (&vr0))))
{
set_value_range_to_varying (vr);
@@ -2275,7 +2308,7 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
included negative values. */
if (is_overflow_infinity (vr0.min))
min = positive_overflow_infinity (TREE_TYPE (expr));
- else if (vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ else if (!vrp_val_is_min (vr0.min))
min = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
else if (!needs_overflow_infinity (TREE_TYPE (expr)))
min = TYPE_MAX_VALUE (TREE_TYPE (expr));
@@ -2289,7 +2322,7 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
if (is_overflow_infinity (vr0.max))
max = positive_overflow_infinity (TREE_TYPE (expr));
- else if (vr0.max != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ else if (!vrp_val_is_min (vr0.max))
max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
else if (!needs_overflow_infinity (TREE_TYPE (expr)))
max = TYPE_MAX_VALUE (TREE_TYPE (expr));
@@ -2985,24 +3018,22 @@ dump_value_range (FILE *file, value_range_t *vr)
fprintf (file, "%s[", (vr->type == VR_ANTI_RANGE) ? "~" : "");
- if (INTEGRAL_TYPE_P (type)
- && !TYPE_UNSIGNED (type)
- && vr->min == TYPE_MIN_VALUE (type))
- fprintf (file, "-INF");
- else if (needs_overflow_infinity (type)
- && is_negative_overflow_infinity (vr->min))
+ if (is_negative_overflow_infinity (vr->min))
fprintf (file, "-INF(OVF)");
+ else if (INTEGRAL_TYPE_P (type)
+ && !TYPE_UNSIGNED (type)
+ && vrp_val_is_min (vr->min))
+ fprintf (file, "-INF");
else
print_generic_expr (file, vr->min, 0);
fprintf (file, ", ");
- if (INTEGRAL_TYPE_P (type)
- && vr->max == TYPE_MAX_VALUE (type))
- fprintf (file, "+INF");
- else if (needs_overflow_infinity (type)
- && is_positive_overflow_infinity (vr->max))
+ if (is_positive_overflow_infinity (vr->max))
fprintf (file, "+INF(OVF)");
+ else if (INTEGRAL_TYPE_P (type)
+ && vrp_val_is_max (vr->max))
+ fprintf (file, "+INF");
else
print_generic_expr (file, vr->max, 0);
@@ -4582,6 +4613,27 @@ vrp_visit_assignment (tree stmt, tree *output_p)
return SSA_PROP_VARYING;
}
+/* Helper that gets the value range of the SSA_NAME with version I
+ or a symbolic range contaning the SSA_NAME only if the value range
+ is varying or undefined. */
+
+static inline value_range_t
+get_vr_for_comparison (int i)
+{
+ value_range_t vr = *(vr_value[i]);
+
+ /* If name N_i does not have a valid range, use N_i as its own
+ range. This allows us to compare against names that may
+ have N_i in their ranges. */
+ if (vr.type == VR_VARYING || vr.type == VR_UNDEFINED)
+ {
+ vr.type = VR_RANGE;
+ vr.min = ssa_name (i);
+ vr.max = ssa_name (i);
+ }
+
+ return vr;
+}
/* Compare all the value ranges for names equivalent to VAR with VAL
using comparison code COMP. Return the same value returned by
@@ -4597,37 +4649,35 @@ compare_name_with_value (enum tree_code comp, tree var, tree val,
bitmap e;
tree retval, t;
int used_strict_overflow;
-
- t = retval = NULL_TREE;
+ bool sop;
+ value_range_t equiv_vr;
/* Get the set of equivalences for VAR. */
e = get_value_range (var)->equiv;
- /* Add VAR to its own set of equivalences so that VAR's value range
- is processed by this loop (otherwise, we would have to replicate
- the body of the loop just to check VAR's value range). */
- bitmap_set_bit (e, SSA_NAME_VERSION (var));
-
/* Start at -1. Set it to 0 if we do a comparison without relying
on overflow, or 1 if all comparisons rely on overflow. */
used_strict_overflow = -1;
- EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
- {
- bool sop;
-
- value_range_t equiv_vr = *(vr_value[i]);
+ /* Compare vars' value range with val. */
+ equiv_vr = get_vr_for_comparison (SSA_NAME_VERSION (var));
+ sop = false;
+ retval = compare_range_with_value (comp, &equiv_vr, val, &sop);
+ if (sop)
+ used_strict_overflow = 1;
- /* If name N_i does not have a valid range, use N_i as its own
- range. This allows us to compare against names that may
- have N_i in their ranges. */
- if (equiv_vr.type == VR_VARYING || equiv_vr.type == VR_UNDEFINED)
- {
- equiv_vr.type = VR_RANGE;
- equiv_vr.min = ssa_name (i);
- equiv_vr.max = ssa_name (i);
- }
+ /* If the equiv set is empty we have done all work we need to do. */
+ if (e == NULL)
+ {
+ if (retval
+ && used_strict_overflow > 0)
+ *strict_overflow_p = true;
+ return retval;
+ }
+ EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
+ {
+ equiv_vr = get_vr_for_comparison (i);
sop = false;
t = compare_range_with_value (comp, &equiv_vr, val, &sop);
if (t)
@@ -4651,18 +4701,11 @@ compare_name_with_value (enum tree_code comp, tree var, tree val,
}
}
- /* Remove VAR from its own equivalence set. */
- bitmap_clear_bit (e, SSA_NAME_VERSION (var));
+ if (retval
+ && used_strict_overflow > 0)
+ *strict_overflow_p = true;
- if (retval)
- {
- if (used_strict_overflow > 0)
- *strict_overflow_p = true;
- return retval;
- }
-
- /* We couldn't find a non-NULL value for the predicate. */
- return NULL_TREE;
+ return retval;
}
@@ -4682,12 +4725,27 @@ compare_names (enum tree_code comp, tree n1, tree n2,
bitmap_iterator bi1, bi2;
unsigned i1, i2;
int used_strict_overflow;
+ static bitmap_obstack *s_obstack = NULL;
+ static bitmap s_e1 = NULL, s_e2 = NULL;
/* Compare the ranges of every name equivalent to N1 against the
ranges of every name equivalent to N2. */
e1 = get_value_range (n1)->equiv;
e2 = get_value_range (n2)->equiv;
+ /* Use the fake bitmaps if e1 or e2 are not available. */
+ if (s_obstack == NULL)
+ {
+ s_obstack = XNEW (bitmap_obstack);
+ bitmap_obstack_initialize (s_obstack);
+ s_e1 = BITMAP_ALLOC (s_obstack);
+ s_e2 = BITMAP_ALLOC (s_obstack);
+ }
+ if (e1 == NULL)
+ e1 = s_e1;
+ if (e2 == NULL)
+ e2 = s_e2;
+
/* Add N1 and N2 to their own set of equivalences to avoid
duplicating the body of the loop just to check N1 and N2
ranges. */
@@ -4715,29 +4773,14 @@ compare_names (enum tree_code comp, tree n1, tree n2,
of the loop just to check N1 and N2 ranges. */
EXECUTE_IF_SET_IN_BITMAP (e1, 0, i1, bi1)
{
- value_range_t vr1 = *(vr_value[i1]);
-
- /* If the range is VARYING or UNDEFINED, use the name itself. */
- if (vr1.type == VR_VARYING || vr1.type == VR_UNDEFINED)
- {
- vr1.type = VR_RANGE;
- vr1.min = ssa_name (i1);
- vr1.max = ssa_name (i1);
- }
+ value_range_t vr1 = get_vr_for_comparison (i1);
t = retval = NULL_TREE;
EXECUTE_IF_SET_IN_BITMAP (e2, 0, i2, bi2)
{
bool sop;
- value_range_t vr2 = *(vr_value[i2]);
-
- if (vr2.type == VR_VARYING || vr2.type == VR_UNDEFINED)
- {
- vr2.type = VR_RANGE;
- vr2.min = ssa_name (i2);
- vr2.max = ssa_name (i2);
- }
+ value_range_t vr2 = get_vr_for_comparison (i2);
t = compare_ranges (comp, &vr1, &vr2, &sop);
if (t)
@@ -5143,10 +5186,8 @@ vrp_meet (value_range_t *vr0, value_range_t *vr1)
/* Check for useless ranges. */
if (INTEGRAL_TYPE_P (TREE_TYPE (min))
- && ((min == TYPE_MIN_VALUE (TREE_TYPE (min))
- || is_overflow_infinity (min))
- && (max == TYPE_MAX_VALUE (TREE_TYPE (max))
- || is_overflow_infinity (max))))
+ && ((vrp_val_is_min (min) || is_overflow_infinity (min))
+ && (vrp_val_is_max (max) || is_overflow_infinity (max))))
goto give_up;
/* The resulting set of equivalences is the intersection of
@@ -5334,9 +5375,7 @@ vrp_visit_phi_node (tree phi)
{
/* If we will end up with a (-INF, +INF) range, set it
to VARYING. */
- if (is_positive_overflow_infinity (vr_result.max)
- || (vr_result.max
- == TYPE_MAX_VALUE (TREE_TYPE (vr_result.max))))
+ if (vrp_val_is_max (vr_result.max))
goto varying;
if (!needs_overflow_infinity (TREE_TYPE (vr_result.min)))
@@ -5354,9 +5393,7 @@ vrp_visit_phi_node (tree phi)
{
/* If we will end up with a (-INF, +INF) range, set it
to VARYING. */
- if (is_negative_overflow_infinity (vr_result.min)
- || (vr_result.min
- == TYPE_MIN_VALUE (TREE_TYPE (vr_result.min))))
+ if (vrp_val_is_min (vr_result.min))
goto varying;
if (!needs_overflow_infinity (TREE_TYPE (vr_result.max)))
diff --git a/gcc/tree.c b/gcc/tree.c
index 15cf305eeca..aefdec474b6 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4207,15 +4207,10 @@ build_distinct_type_copy (tree type)
/* Make it its own variant. */
TYPE_MAIN_VARIANT (t) = t;
TYPE_NEXT_VARIANT (t) = 0;
-
- /* VRP assumes that TREE_TYPE (TYPE_MIN_VALUE (type)) == type. */
- if (INTEGRAL_TYPE_P (t) || SCALAR_FLOAT_TYPE_P (t))
- {
- if (TYPE_MIN_VALUE (t) != NULL_TREE)
- TYPE_MIN_VALUE (t) = fold_convert (t, TYPE_MIN_VALUE (t));
- if (TYPE_MAX_VALUE (t) != NULL_TREE)
- TYPE_MAX_VALUE (t) = fold_convert (t, TYPE_MAX_VALUE (t));
- }
+
+ /* Note that it is now possible for TYPE_MIN_VALUE to be a value
+ whose TREE_TYPE is not t. This can also happen in the Ada
+ frontend when using subtypes. */
return t;
}
@@ -6182,6 +6177,47 @@ int_fits_type_p (tree c, tree type)
return !fit_double_type (low, high, &low, &high, type);
}
+/* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
+ bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
+ represented (assuming two's-complement arithmetic) within the bit
+ precision of the type are returned instead. */
+
+void
+get_type_static_bounds (tree type, mpz_t min, mpz_t max)
+{
+ if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
+ && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
+ mpz_set_double_int (min, tree_to_double_int (TYPE_MIN_VALUE (type)),
+ TYPE_UNSIGNED (type));
+ else
+ {
+ if (TYPE_UNSIGNED (type))
+ mpz_set_ui (min, 0);
+ else
+ {
+ double_int mn;
+ mn = double_int_mask (TYPE_PRECISION (type) - 1);
+ mn = double_int_sext (double_int_add (mn, double_int_one),
+ TYPE_PRECISION (type));
+ mpz_set_double_int (min, mn, false);
+ }
+ }
+
+ if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
+ && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
+ mpz_set_double_int (max, tree_to_double_int (TYPE_MAX_VALUE (type)),
+ TYPE_UNSIGNED (type));
+ else
+ {
+ if (TYPE_UNSIGNED (type))
+ mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)),
+ true);
+ else
+ mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type) - 1),
+ true);
+ }
+}
+
/* Subprogram of following function. Called by walk_tree.
Return *TP if it is an automatic variable or parameter of the
@@ -7435,11 +7471,18 @@ tree
reconstruct_complex_type (tree type, tree bottom)
{
tree inner, outer;
-
- if (POINTER_TYPE_P (type))
+
+ if (TREE_CODE (type) == POINTER_TYPE)
+ {
+ inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
+ outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
+ TYPE_REF_CAN_ALIAS_ALL (type));
+ }
+ else if (TREE_CODE (type) == REFERENCE_TYPE)
{
inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
- outer = build_pointer_type (inner);
+ outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
+ TYPE_REF_CAN_ALIAS_ALL (type));
}
else if (TREE_CODE (type) == ARRAY_TYPE)
{
diff --git a/gcc/tree.h b/gcc/tree.h
index 39f7a2ac68a..a8e2da5f32a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -27,6 +27,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "input.h"
#include "statistics.h"
#include "vec.h"
+#include "double-int.h"
/* Codes of tree nodes */
@@ -4644,8 +4645,7 @@ extern void fold_defer_overflow_warnings (void);
extern void fold_undefer_overflow_warnings (bool, tree, int);
extern void fold_undefer_and_ignore_overflow_warnings (void);
extern bool fold_deferring_overflow_warnings_p (void);
-extern tree maybe_fold_offset_to_component_ref (tree, tree, tree,
- tree, bool);
+extern tree maybe_fold_offset_to_reference (tree, tree, tree);
extern tree force_fit_type_double (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT,
int, bool);
@@ -4761,6 +4761,7 @@ extern int objects_must_conflict_p (tree, tree);
/* In tree.c */
extern int really_constant_p (tree);
extern int int_fits_type_p (tree, tree);
+extern void get_type_static_bounds (tree, mpz_t, mpz_t);
extern bool variably_modified_type_p (tree, tree);
extern int tree_log2 (tree);
extern int tree_floor_log2 (tree);
diff --git a/gnattools/ChangeLog b/gnattools/ChangeLog
index 948b733cf11..d3f4e0608a2 100644
--- a/gnattools/ChangeLog
+++ b/gnattools/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-30 Arnaud Charlet <charlet@adacore.com>
+
+ PR ada/28953
+ * Makefile.in: No longer build gprmake
+
2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
* Makefile.in: Add dummy install-pdf target.
diff --git a/gnattools/Makefile.in b/gnattools/Makefile.in
index 830fffb93b3..64830a0fd60 100644
--- a/gnattools/Makefile.in
+++ b/gnattools/Makefile.in
@@ -156,8 +156,7 @@ GNATTOOLS2_FILES = \
../../gnatxref$(exeext) \
../../gnatfind$(exeext) \
../../gnatname$(exeext) \
- ../../gnatclean$(exeext) \
- ../../gprmake$(exeext)
+ ../../gnatclean$(exeext)
# Makefile targets
# ----------------
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 50543c937af..152a758d6d5 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,13 @@
+2007-05-02 Eric Christopher <echristo@apple.com>
+
+ * expr.c (num_div_op): Don't overflow if the result is
+ zero.
+
+2007-05-02 Tom Tromey <tromey@redhat.com>
+
+ PR preprocessor/28709:
+ * macro.c (paste_tokens): Remove PASTE_LEFT from the old lhs.
+
2007-03-30 Michael Meissner <michael.meissner@amd.com>
* directives.c (lex_macro_node_from_str): Fix alloca call to be
diff --git a/libcpp/expr.c b/libcpp/expr.c
index e60f46380eb..b96af9f7eed 100644
--- a/libcpp/expr.c
+++ b/libcpp/expr.c
@@ -100,7 +100,7 @@ interpret_float_suffix (const uchar *s, size_t len)
break;
case 'i': case 'I':
case 'j': case 'J': i++; break;
- case 'd': case 'D':
+ case 'd': case 'D':
/* Disallow fd, ld suffixes. */
if (d && (f || l))
return 0;
@@ -495,7 +495,7 @@ append_digit (cpp_num num, int digit, int base, size_t precision)
if (add_low + digit < add_low)
add_high++;
add_low += digit;
-
+
if (result.low + add_low < result.low)
add_high++;
if (result.high + add_high < result.high)
@@ -1581,7 +1581,8 @@ num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
{
if (negate)
result = num_negate (result, precision);
- result.overflow = num_positive (result, precision) ^ !negate;
+ result.overflow = (num_positive (result, precision) ^ !negate
+ && !num_zerop (result));
}
return result;
diff --git a/libcpp/macro.c b/libcpp/macro.c
index ede29ff62bc..748635f408e 100644
--- a/libcpp/macro.c
+++ b/libcpp/macro.c
@@ -432,19 +432,18 @@ static bool
paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
{
unsigned char *buf, *end, *lhsend;
- const cpp_token *lhs;
+ cpp_token *lhs;
unsigned int len;
- lhs = *plhs;
- len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
+ len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
buf = (unsigned char *) alloca (len);
- end = lhsend = cpp_spell_token (pfile, lhs, buf, false);
+ end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
/* Avoid comment headers, since they are still processed in stage 3.
It is simpler to insert a space here, rather than modifying the
lexer to ignore comments in some circumstances. Simply returning
false doesn't work, since we want to clear the PASTE_LEFT flag. */
- if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
+ if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
*end++ = ' ';
end = cpp_spell_token (pfile, rhs, end, false);
*end = '\n';
@@ -454,13 +453,22 @@ paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
/* Set pfile->cur_token as required by _cpp_lex_direct. */
pfile->cur_token = _cpp_temp_token (pfile);
- *plhs = _cpp_lex_direct (pfile);
+ lhs = _cpp_lex_direct (pfile);
if (pfile->buffer->cur != pfile->buffer->rlimit)
{
+ source_location saved_loc = lhs->src_loc;
+
_cpp_pop_buffer (pfile);
_cpp_backup_tokens (pfile, 1);
*lhsend = '\0';
+ /* We have to remove the PASTE_LEFT flag from the old lhs, but
+ we want to keep the new location. */
+ *lhs = **plhs;
+ *plhs = lhs;
+ lhs->src_loc = saved_loc;
+ lhs->flags &= ~PASTE_LEFT;
+
/* Mandatory error for all apart from assembler. */
if (CPP_OPTION (pfile, lang) != CLK_ASM)
cpp_error (pfile, CPP_DL_ERROR,
@@ -469,6 +477,7 @@ paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
return false;
}
+ *plhs = lhs;
_cpp_pop_buffer (pfile);
return true;
}
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 983c64ff86b..409c20d64a0 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,14 @@
+2007-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/31501
+ * io/list_read.c (next_char): Fix whitespace.
+ * io/io.h: Remove prototypes and define macros for is_array_io,
+ is_stream_io, and is_internal_unit.
+ * io/unit.c (is_array_io), (is_internal_unit), (is_stream_io): Delete
+ these functions.
+ * io/transfer.c (read_sf): Change handling of internal_unit to make a
+ single call to salloc_r and use memcpy to transfer the data.
+
2007-04-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/31532
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 1e5a6c9fdbf..181c1816b61 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -80,6 +80,14 @@ stream;
#define sset(s, c, n) ((s)->set)(s, c, n)
+/* Macros for testing what kinds of I/O we are doing. */
+
+#define is_array_io(dtp) ((dtp)->internal_unit_desc)
+
+#define is_internal_unit(dtp) ((dtp)->u.p.unit_is_internal)
+
+#define is_stream_io(dtp) ((dtp)->u.p.current_unit->flags.access == ACCESS_STREAM)
+
/* The array_loop_spec contains the variables for the loops over index ranges
that are encountered. Since the variables can be negative, ssize_t
is used. */
@@ -672,15 +680,6 @@ internal_proto(get_internal_unit);
extern void free_internal_unit (st_parameter_dt *);
internal_proto(free_internal_unit);
-extern int is_internal_unit (st_parameter_dt *);
-internal_proto(is_internal_unit);
-
-extern int is_array_io (st_parameter_dt *);
-internal_proto(is_array_io);
-
-extern int is_stream_io (st_parameter_dt *);
-internal_proto(is_stream_io);
-
extern gfc_unit *find_unit (int);
internal_proto(find_unit);
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 3203f3116f7..9e2e0f91484 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -165,7 +165,7 @@ next_char (st_parameter_dt *dtp)
/* Handle the end-of-record and end-of-file conditions for
internal array unit. */
- if (is_array_io(dtp))
+ if (is_array_io (dtp))
{
if (dtp->u.p.at_eof)
longjmp (*dtp->u.p.eof_jump, 1);
@@ -201,9 +201,9 @@ next_char (st_parameter_dt *dtp)
if (is_stream_io (dtp))
dtp->u.p.current_unit->strm_pos++;
- if (is_internal_unit(dtp))
+ if (is_internal_unit (dtp))
{
- if (is_array_io(dtp))
+ if (is_array_io (dtp))
{
/* End of record is handled in the next pass through, above. The
check for NULL here is cautionary. */
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index ac5f11b40ff..13bb27206fd 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -164,18 +164,19 @@ read_sf (st_parameter_dt *dtp, int *length, int no_error)
return base;
}
+ if (is_internal_unit (dtp))
+ {
+ readlen = *length;
+ q = salloc_r (dtp->u.p.current_unit->s, &readlen);
+ memcpy (p, q, readlen);
+ goto done;
+ }
+
readlen = 1;
n = 0;
do
{
- if (is_internal_unit (dtp))
- {
- /* readlen may be modified inside salloc_r if
- is_internal_unit (dtp) is true. */
- readlen = 1;
- }
-
q = salloc_r (dtp->u.p.current_unit->s, &readlen);
if (q == NULL)
break;
@@ -244,6 +245,8 @@ read_sf (st_parameter_dt *dtp, int *length, int no_error)
dtp->u.p.sf_seen_eor = 0;
}
while (n < *length);
+
+ done:
dtp->u.p.current_unit->bytes_left -= *length;
if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c
index 7a4000d9fb5..c468510b875 100644
--- a/libgfortran/io/unit.c
+++ b/libgfortran/io/unit.c
@@ -476,33 +476,6 @@ get_unit (st_parameter_dt *dtp, int do_create)
}
-/* is_internal_unit()-- Determine if the current unit is internal or not */
-
-int
-is_internal_unit (st_parameter_dt *dtp)
-{
- return dtp->u.p.unit_is_internal;
-}
-
-
-/* is_array_io ()-- Determine if the I/O is to/from an array */
-
-int
-is_array_io (st_parameter_dt *dtp)
-{
- return dtp->internal_unit_desc != NULL;
-}
-
-
-/* is_stream_io () -- Determine if I/O is access="stream" mode */
-
-int
-is_stream_io (st_parameter_dt *dtp)
-{
- return dtp->u.p.current_unit->flags.access == ACCESS_STREAM;
-}
-
-
/*************************/
/* Initialize everything */
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 9e218b59fb4..431ef1db2ff 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,11 @@
+2007-05-03 Joel Brobecker <brobecker@adacore.com>
+
+ * filename_cmp.c: Replace include of ctype.h by include of
+ safe-ctype.h.
+ (filename_cmp): Use TOLOWER instead of tolower for conversions
+ that are locale-independent.
+ * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h.
+
2007-04-11 Thomas Neumann tneumann@users.sourceforge.net
* argv.c: Use ANSI C declarations.
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 4f5e2152783..735f1e632d9 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -651,7 +651,8 @@ $(CONFIGURED_OFILES): stamp-picdir
else true; fi
$(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
-./filename_cmp.o: $(srcdir)/filename_cmp.c $(INCDIR)/filenames.h
+./filename_cmp.o: $(srcdir)/filename_cmp.c $(INCDIR)/filenames.h \
+ $(INCDIR)/safe-ctype.h
if [ x"$(PICFLAG)" != x ]; then \
$(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
else true; fi
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
index 59bb726b90e..0a4d0d85091 100644
--- a/libiberty/filename_cmp.c
+++ b/libiberty/filename_cmp.c
@@ -24,8 +24,8 @@
#include <string.h>
#endif
-#include <ctype.h>
#include "filenames.h"
+#include "safe-ctype.h"
/*
@@ -55,8 +55,8 @@ filename_cmp (const char *s1, const char *s2)
#else
for (;;)
{
- int c1 = tolower (*s1);
- int c2 = tolower (*s2);
+ int c1 = TOLOWER (*s1);
+ int c2 = TOLOWER (*s2);
/* On DOS-based file systems, the '/' and the '\' are equivalent. */
if (c1 == '/')
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index a66338cd4a4..9607a3dcd89 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,36 @@
+2007-05-03 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=237304
+ * Makefile.in: Regenerate.
+ * scripts/makemake.tcl (scan_directory): Treat default.css as a
+ property file.
+ * classpath/javax/swing/text/html/default.css: Move to...
+ * classpath/resource/javax/swing/text/html/default.css: New file.
+ * classpath/javax/swing/text/html/HTMLEditorKit.java
+ (getStyleSheet): Throw RuntimeException when style loading fails.
+ * sources.am (property_files): Add
+ classpath/resource/javax/swing/text/html/default.css.
+
+2007-05-02 Tom Tromey <tromey@redhat.com>
+
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=238755
+ * java/lang/natCharacter.cc (Character::getType): Handle negative
+ code points.
+ (Character::toLowerCase): Likewise.
+ (Character::toUpperCase): Likewise.
+ (Character::digit): Likewise.
+ (Character::getNumericValue): Likewise.
+ (Character::getDirectionality): Likewise.
+ (Character::toTitleCase): Likewise.
+
+2007-04-30 Keith Seitz <keiths@redhat.com>
+
+ * interpret-run.cc (NEXT_INSN)[DEBUG]: Advance PC before
+ executing the instruction.
+ * include/java-interp.h (_Jv_InterpFrame::get_pc): Subtract
+ one insn from the frame's PC. _Jv_InterpMethod::run et al
+ will advance the PC before executing the instruction.
+
2007-04-27 Keith Seitz <keiths@redhat.com>
* classpath/lib/gnu/classpath/jdwp/Jdwp.class: Regenerated.
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index b454a4ae7bc..369c1913222 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -7786,6 +7786,7 @@ property_files = \
classpath/resource/gnu/javax/security/auth/callback/MessagesBundle.properties \
classpath/resource/java/util/iso4217.properties \
classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties \
+ classpath/resource/javax/swing/text/html/default.css \
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
classpath/resource/sun/rmi/rmic/messages.properties \
classpath/resource/com/sun/tools/javac/messages.properties \
diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog
index ad9f9082912..158e90f634b 100644
--- a/libjava/classpath/ChangeLog
+++ b/libjava/classpath/ChangeLog
@@ -1,3 +1,10 @@
+2007-05-03 Andrew Haley <aph@redhat.com>
+
+ * gnu/javax/management/Server.java (Server): Record the delegate.
+ (registerMBean): Notify the delegate.
+ (unregisterMBean): Likewise.
+ (notify): New method.
+
2007-04-04 Francis Kung <fkung@redhat.com>
* gnu/java/awt/peer/gtk/ComponentGraphics.java
diff --git a/libjava/classpath/gnu/javax/management/Server.java b/libjava/classpath/gnu/javax/management/Server.java
index aa39c75ad46..616854e95bd 100644
--- a/libjava/classpath/gnu/javax/management/Server.java
+++ b/libjava/classpath/gnu/javax/management/Server.java
@@ -53,6 +53,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
import javax.management.Attribute;
import javax.management.AttributeList;
@@ -75,6 +76,7 @@ import javax.management.MBeanRegistration;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerDelegate;
+import javax.management.MBeanServerNotification;
import javax.management.MBeanTrustPermission;
import javax.management.NotCompliantMBeanException;
import javax.management.Notification;
@@ -137,6 +139,15 @@ public class Server
private Map listeners;
/**
+ * An MBean that emits notifications when an MBean is registered and
+ * unregistered with this server.
+ *
+ */
+ private final MBeanServerDelegate delegate;
+
+ static private final AtomicLong sequenceNumber = new AtomicLong(1);
+
+ /**
* Initialise the delegate name.
*/
static
@@ -171,6 +182,7 @@ public class Server
{
this.defaultDomain = defaultDomain;
this.outer = outer;
+ this.delegate = delegate;
try
{
registerMBean(delegate, DELEGATE_NAME);
@@ -1703,6 +1715,7 @@ public class Server
beans.put(name, new ServerInfo(obji, obj));
if (register != null)
register.postRegister(Boolean.TRUE);
+ notify(name, MBeanServerNotification.REGISTRATION_NOTIFICATION);
return obji;
}
@@ -2088,10 +2101,18 @@ public class Server
}
}
beans.remove(name);
+ notify(name, MBeanServerNotification.UNREGISTRATION_NOTIFICATION);
if (register != null)
register.postDeregister();
}
+ private void notify(ObjectName name, String type)
+ {
+ delegate.sendNotification
+ (new MBeanServerNotification
+ (type, DELEGATE_NAME, sequenceNumber.getAndIncrement(), name));
+ }
+
/**
* Input stream which deserializes using the given classloader.
*/
diff --git a/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java b/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
index 0ede1c74ed9..cc61889d76f 100644
--- a/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
+++ b/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
@@ -1462,7 +1462,7 @@ public class HTMLEditorKit
}
catch (IOException ex)
{
- // No style available.
+ throw new RuntimeException("No style available.", ex);
}
}
return styleSheet;
diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$IdFactory.class b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$IdFactory.class
index dc1218a654b..836eecd1980 100644
--- a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$IdFactory.class
+++ b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$IdFactory.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$ReferenceKey.class b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$ReferenceKey.class
index b82b77095c6..d23f881a2f3 100644
--- a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$ReferenceKey.class
+++ b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager$ReferenceKey.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager.class b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager.class
index 04f8258fec3..08c2f419b6b 100644
--- a/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager.class
+++ b/libjava/classpath/lib/gnu/classpath/jdwp/VMIdManager.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/javax/management/Server$ServerInfo.class b/libjava/classpath/lib/gnu/javax/management/Server$ServerInfo.class
index 08402446059..66a0933e81e 100644
--- a/libjava/classpath/lib/gnu/javax/management/Server$ServerInfo.class
+++ b/libjava/classpath/lib/gnu/javax/management/Server$ServerInfo.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/javax/management/Server$ServerInputStream.class b/libjava/classpath/lib/gnu/javax/management/Server$ServerInputStream.class
index 134351e7b96..13e6231a5ae 100644
--- a/libjava/classpath/lib/gnu/javax/management/Server$ServerInputStream.class
+++ b/libjava/classpath/lib/gnu/javax/management/Server$ServerInputStream.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/javax/management/Server$ServerNotificationListener.class b/libjava/classpath/lib/gnu/javax/management/Server$ServerNotificationListener.class
index dd98c5beb34..99d0cdcee3d 100644
--- a/libjava/classpath/lib/gnu/javax/management/Server$ServerNotificationListener.class
+++ b/libjava/classpath/lib/gnu/javax/management/Server$ServerNotificationListener.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/javax/management/Server.class b/libjava/classpath/lib/gnu/javax/management/Server.class
index 41154ad8bf3..386f48e4c68 100644
--- a/libjava/classpath/lib/gnu/javax/management/Server.class
+++ b/libjava/classpath/lib/gnu/javax/management/Server.class
Binary files differ
diff --git a/libjava/classpath/javax/swing/text/html/default.css b/libjava/classpath/resource/javax/swing/text/html/default.css
index f2a44f8c8bf..f2a44f8c8bf 100644
--- a/libjava/classpath/javax/swing/text/html/default.css
+++ b/libjava/classpath/resource/javax/swing/text/html/default.css
diff --git a/libjava/gnu/javax/management/Server.h b/libjava/gnu/javax/management/Server.h
index eb396d72ad5..2d9495630a5 100644
--- a/libjava/gnu/javax/management/Server.h
+++ b/libjava/gnu/javax/management/Server.h
@@ -89,12 +89,15 @@ public:
virtual ::javax::management::AttributeList * setAttributes(::javax::management::ObjectName *, ::javax::management::AttributeList *);
virtual void unregisterMBean(::javax::management::ObjectName *);
private:
+ void notify(::javax::management::ObjectName *, ::java::lang::String *);
static ::javax::management::ObjectName * DELEGATE_NAME;
::java::util::Map * __attribute__((aligned(__alignof__( ::java::lang::Object)))) beans;
::java::lang::String * defaultDomain;
::javax::management::MBeanServer * outer;
::javax::management::loading::ClassLoaderRepository * repository;
::java::util::Map * listeners;
+ ::javax::management::MBeanServerDelegate * delegate;
+ static ::java::util::concurrent::atomic::AtomicLong * sequenceNumber;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h
index 8da0584af8e..4bded047bb3 100644
--- a/libjava/include/java-interp.h
+++ b/libjava/include/java-interp.h
@@ -465,7 +465,7 @@ public:
else
pc = *pc_ptr;
- return pc;
+ return pc - 1;
}
};
diff --git a/libjava/interpret-run.cc b/libjava/interpret-run.cc
index f99ff5c706f..f95198186e7 100644
--- a/libjava/interpret-run.cc
+++ b/libjava/interpret-run.cc
@@ -348,15 +348,16 @@ details. */
#define NEXT_INSN \
do \
{ \
+ pc_t insn = pc++; \
if (JVMTI_REQUESTED_EVENT (SingleStep)) \
{ \
JNIEnv *env = _Jv_GetCurrentJNIEnv (); \
jmethodID method = meth->self; \
- jlocation loc = meth->insn_index (pc); \
+ jlocation loc = meth->insn_index (insn); \
_Jv_JVMTI_PostEvent (JVMTI_EVENT_SINGLE_STEP, thread, \
env, method, loc); \
} \
- goto *((pc++)->insn); \
+ goto *(insn->insn); \
} \
while (0)
diff --git a/libjava/java/lang/natCharacter.cc b/libjava/java/lang/natCharacter.cc
index 8d246dd566e..dea2086eb52 100644
--- a/libjava/java/lang/natCharacter.cc
+++ b/libjava/java/lang/natCharacter.cc
@@ -1,5 +1,5 @@
/* java.lang.Character -- Wrapper class for char, and Unicode subsets
- Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -90,7 +90,7 @@ jint
java::lang::Character::getType(jint codePoint)
{
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
{
if (plane > 14 && ((codePoint & 0xffff) < 0xfffe))
return (jint) PRIVATE_TYPE;
@@ -112,7 +112,7 @@ jint
java::lang::Character::toLowerCase(jint codePoint)
{
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
return codePoint;
return (lower[plane][readCodePoint(codePoint) >> 7]) + codePoint;
}
@@ -127,7 +127,7 @@ jint
java::lang::Character::toUpperCase(jint codePoint)
{
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
return codePoint;
return (upper[plane][readCodePoint(codePoint) >> 7]) + codePoint;
}
@@ -147,7 +147,7 @@ java::lang::Character::toTitleCase(jint codePoint)
{
// As of Unicode 4.0.0 no characters outside of plane 0 have titlecase
// mappings that are different from their uppercase mapping.
- if (codePoint < 0x10000)
+ if (codePoint >= 0 && codePoint < 0x10000)
return toTitleCase((jchar)codePoint);
return toUpperCase(codePoint);
}
@@ -177,7 +177,7 @@ java::lang::Character::digit(jint codePoint, jint radix)
return (jint) -1;
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
return UNASSIGNED_DIGIT;
jchar attr = readCodePoint(codePoint);
@@ -207,7 +207,7 @@ jint
java::lang::Character::getNumericValue(jint codePoint)
{
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
return UNASSIGNED_NUMERIC_VALUE;
jshort num = numValue[plane][readCodePoint(codePoint) >> 7];
if (num <= -3)
@@ -225,7 +225,7 @@ jbyte
java::lang::Character::getDirectionality(jint codePoint)
{
jint plane = codePoint >> 16;
- if (plane > 2 && plane != 14)
+ if (plane < 0 || (plane > 2 && plane != 14))
{
if (plane > 14 && ((codePoint & 0xffff) < 0xfffe))
return (jint) PRIVATE_DIRECTION;
@@ -233,5 +233,3 @@ java::lang::Character::getDirectionality(jint codePoint)
}
return direction[plane][readCodePoint(codePoint) >> 7];
}
-
-
diff --git a/libjava/scripts/makemake.tcl b/libjava/scripts/makemake.tcl
index 0fc06fce15d..ab8a85d2c29 100755
--- a/libjava/scripts/makemake.tcl
+++ b/libjava/scripts/makemake.tcl
@@ -228,6 +228,9 @@ proc scan_directory {basedir subdir} {
# We assume there aren't any overrides.
lappend properties_files $basedir/$subdir/$file
}
+ } elseif {[string match *.css $file]} {
+ # Special case for default.css needed by javax.swing.text.html.
+ lappend properties_files $basedir/$subdir/$file
} elseif {[file isdirectory $file]} {
lappend subdirs $subdir/$file
} elseif {$subdir == "META-INF/services"} {
diff --git a/libjava/sources.am b/libjava/sources.am
index de98ee6ce10..b02dfb709dc 100644
--- a/libjava/sources.am
+++ b/libjava/sources.am
@@ -9005,6 +9005,7 @@ property_files = \
classpath/resource/gnu/javax/security/auth/callback/MessagesBundle.properties \
classpath/resource/java/util/iso4217.properties \
classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties \
+ classpath/resource/javax/swing/text/html/default.css \
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
classpath/resource/sun/rmi/rmic/messages.properties \
classpath/resource/com/sun/tools/javac/messages.properties \
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 8084c5c4c98..48a0494cb5b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,753 @@
+2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/type_traits (enable_if): New.
+ (conditional): New.
+ (__decay_selector, decay): New.
+ (__cv_selector, __match_cv_qualifiers): New.
+ (__make_unsigned, __make_unsigned_selector, make_unsigned): New.
+ (__make_signed, __make_signed_selector, make_signed): New.
+ (has_trivial_constructor): ... to has_trivial_default_constructor.
+ (has_nothrow_constructor): ... to has_nothrow_default_constructor.
+ (has_trivial_copy): ... to has_trivial_copy_constructor.
+ (has_nothrow_copy): ... to has_nothrow_copy_constructor.
+
+ * include/tr1/type_traits_fwd: Move to...
+ * include/tr1/type_traitsfwd: ... this, consistency with
+ ios/string/locale forward headers.
+ * include/tr1/type_traits: Adjust include.
+ * include/Makefile.am (tr1_headers): Change type_traits_fwd.h to
+ type_traitsfwd.h.
+ * include/Makefile.in: Regenerate.
+
+ * testsuite/23_containers/tuple: Move...
+ * testsuite/20_util/tuple:... here.
+
+ * testsuite/20_util/conditional: New.
+ * testsuite/20_util/conditional/requirements: Same.
+ * testsuite/20_util/conditional/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/conditional/requirements/typedefs.cc: Same.
+ * testsuite/20_util/decay: Same.
+ * testsuite/20_util/decay/requirements: Same.
+ * testsuite/20_util/decay/requirements/explicit_instantiation.cc: Same.
+ * testsuite/20_util/decay/requirements/typedefs.cc: Same.
+ * testsuite/20_util/enable_if: Same.
+ * testsuite/20_util/enable_if/requirements: Same.
+ * testsuite/20_util/enable_if/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/enable_if/requirements/typedefs.cc: Same.
+ * testsuite/20_util/enable_if/requirements/typedefs_neg.cc: Same.
+ * testsuite/20_util/has_nothrow_copy_constructor: Same.
+ * testsuite/20_util/has_nothrow_copy_constructor/requirements: Same.
+ * testsuite/20_util/has_nothrow_copy_constructor/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/has_nothrow_copy_constructor/requirements/
+ typedefs.cc: Same.
+ * testsuite/20_util/has_nothrow_copy_constructor/value.cc: Same.
+ * testsuite/20_util/has_nothrow_default_constructor: Same.
+ * testsuite/20_util/has_nothrow_default_constructor/requirements: Same.
+ * testsuite/20_util/has_nothrow_default_constructor/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/has_nothrow_default_constructor/requirements/
+ typedefs.cc: Same.
+ * testsuite/20_util/has_nothrow_default_constructor/value.cc: Same.
+ * testsuite/20_util/has_trivial_copy_constructor: Same.
+ * testsuite/20_util/has_trivial_copy_constructor/requirements: Same.
+ * testsuite/20_util/has_trivial_copy_constructor/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/has_trivial_copy_constructor/requirements/
+ typedefs.cc: Same.
+ * testsuite/20_util/has_trivial_copy_constructor/value.cc: Same.
+ * testsuite/20_util/has_trivial_default_constructor: Same.
+ * testsuite/20_util/has_trivial_default_constructor/requirements: Same.
+ * testsuite/20_util/has_trivial_default_constructor/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/has_trivial_default_constructor/requirements/
+ typedefs.cc: Same.
+ * testsuite/20_util/has_trivial_default_constructor/value.cc: Same.
+ * testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc: Same.
+ * testsuite/20_util/make_signed: Same.
+ * testsuite/20_util/make_signed/requirements: Same.
+ * testsuite/20_util/make_signed/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/make_signed/requirements/typedefs.cc: Same.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same.
+ * testsuite/20_util/make_unsigned: Same.
+ * testsuite/20_util/make_unsigned/requirements: Same.
+ * testsuite/20_util/make_unsigned/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/make_unsigned/requirements/typedefs.cc: Same.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same.
+
+2007-05-02 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/31777
+ * include/ext/pool_allocator.h (__pool_alloc<>::allocate,
+ __pool_alloc<>::deallocate): Fix _S_force_new check.
+
+2007-05-01 Benjamin Kosnik <bkoz@redhat.com>
+
+ * 23_containers/requirements/sequences/dr438/deque/*: Move to...
+ * 23_containers/deque/requirements/dr438: ...here.
+
+ * 23_containers/requirements/sequences/dr438/list/*: Move to...
+ * 23_containers/list/requirements/dr438: ...here.
+
+ * 23_containers/requirements/sequences/dr438/vector/*: Move to...
+ * 23_containers/vector/requirements/dr438: ...here.
+
+2007-05-01 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/*/explicit_instantiations.cc: Change to...
+ * testsuite/*/explicit_instantiation.cc: ... this.
+
+2007-05-01 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/tr1/4_metaprogramming/*/explicit_instantiations.cc: Change
+ "basic_ofstream" in comment to type_traits.
+
+2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+ Directory layout flattening.
+
+ Added in testsuite:
+ * tr1/4_metaprogramming/add_const
+ * tr1/4_metaprogramming/add_const/requirements
+ * tr1/4_metaprogramming/add_const/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/add_const/requirements/typedefs.cc
+ * tr1/4_metaprogramming/add_cv
+ * tr1/4_metaprogramming/add_cv/requirements
+ * tr1/4_metaprogramming/add_cv/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/add_cv/requirements/typedefs.cc
+ * tr1/4_metaprogramming/add_pointer
+ * tr1/4_metaprogramming/add_pointer/requirements
+ * tr1/4_metaprogramming/add_pointer/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/add_pointer/requirements/typedefs.cc
+ * tr1/4_metaprogramming/add_reference
+ * tr1/4_metaprogramming/add_reference/requirements
+ * tr1/4_metaprogramming/add_reference/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/add_reference/requirements/typedefs.cc
+ * tr1/4_metaprogramming/add_volatile
+ * tr1/4_metaprogramming/add_volatile/requirements
+ * tr1/4_metaprogramming/add_volatile/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/add_volatile/requirements/typedefs.cc
+ * tr1/4_metaprogramming/aligned_storage
+ * tr1/4_metaprogramming/aligned_storage/requirements
+ * tr1/4_metaprogramming/aligned_storage/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/aligned_storage/requirements/typedefs.cc
+ * tr1/4_metaprogramming/alignment_of
+ * tr1/4_metaprogramming/alignment_of/requirements
+ * tr1/4_metaprogramming/alignment_of/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc
+ * tr1/4_metaprogramming/alignment_of/value.cc
+ * tr1/4_metaprogramming/extent
+ * tr1/4_metaprogramming/extent/requirements
+ * tr1/4_metaprogramming/extent/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/extent/requirements/typedefs.cc
+ * tr1/4_metaprogramming/extent/value.cc
+ * tr1/4_metaprogramming/has_nothrow_assign
+ * tr1/4_metaprogramming/has_nothrow_assign/requirements
+ * tr1/4_metaprogramming/has_nothrow_assign/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_assign/value.cc
+ * tr1/4_metaprogramming/has_nothrow_constructor
+ * tr1/4_metaprogramming/has_nothrow_constructor/requirements
+ * tr1/4_metaprogramming/has_nothrow_constructor/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_nothrow_constructor/
+ requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_constructor/value.cc
+ * tr1/4_metaprogramming/has_nothrow_copy
+ * tr1/4_metaprogramming/has_nothrow_copy/requirements
+ * tr1/4_metaprogramming/has_nothrow_copy/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_copy/value.cc
+ * tr1/4_metaprogramming/has_trivial_assign
+ * tr1/4_metaprogramming/has_trivial_assign/requirements
+ * tr1/4_metaprogramming/has_trivial_assign/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_assign/value.cc
+ * tr1/4_metaprogramming/has_trivial_constructor
+ * tr1/4_metaprogramming/has_trivial_constructor/requirements
+ * tr1/4_metaprogramming/has_trivial_constructor/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_trivial_constructor/
+ requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_constructor/value.cc
+ * tr1/4_metaprogramming/has_trivial_copy
+ * tr1/4_metaprogramming/has_trivial_copy/requirements
+ * tr1/4_metaprogramming/has_trivial_copy/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_copy/value.cc
+ * tr1/4_metaprogramming/has_trivial_destructor
+ * tr1/4_metaprogramming/has_trivial_destructor/requirements
+ * tr1/4_metaprogramming/has_trivial_destructor/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_destructor/value.cc
+ * tr1/4_metaprogramming/has_virtual_destructor
+ * tr1/4_metaprogramming/has_virtual_destructor/requirements
+ * tr1/4_metaprogramming/has_virtual_destructor/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc
+ * tr1/4_metaprogramming/has_virtual_destructor/value.cc
+ * tr1/4_metaprogramming/integral_constant
+ * tr1/4_metaprogramming/integral_constant/requirements
+ * tr1/4_metaprogramming/integral_constant/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc
+ * tr1/4_metaprogramming/integral_constant/true_false_value.cc
+ * tr1/4_metaprogramming/is_abstract
+ * tr1/4_metaprogramming/is_abstract/requirements
+ * tr1/4_metaprogramming/is_abstract/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_abstract/value.cc
+ * tr1/4_metaprogramming/is_arithmetic
+ * tr1/4_metaprogramming/is_arithmetic/requirements
+ * tr1/4_metaprogramming/is_arithmetic/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_arithmetic/value.cc
+ * tr1/4_metaprogramming/is_array
+ * tr1/4_metaprogramming/is_array/requirements
+ * tr1/4_metaprogramming/is_array/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_array/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_array/value.cc
+ * tr1/4_metaprogramming/is_base_of
+ * tr1/4_metaprogramming/is_base_of/requirements
+ * tr1/4_metaprogramming/is_base_of/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_base_of/value.cc
+ * tr1/4_metaprogramming/is_class
+ * tr1/4_metaprogramming/is_class/requirements
+ * tr1/4_metaprogramming/is_class/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_class/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_class/value.cc
+ * tr1/4_metaprogramming/is_compound
+ * tr1/4_metaprogramming/is_compound/requirements
+ * tr1/4_metaprogramming/is_compound/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_compound/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_compound/value.cc
+ * tr1/4_metaprogramming/is_const
+ * tr1/4_metaprogramming/is_const/requirements
+ * tr1/4_metaprogramming/is_const/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_const/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_const/value.cc
+ * tr1/4_metaprogramming/is_convertible
+ * tr1/4_metaprogramming/is_convertible/requirements
+ * tr1/4_metaprogramming/is_convertible/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_convertible/value.cc
+ * tr1/4_metaprogramming/is_empty
+ * tr1/4_metaprogramming/is_empty/requirements
+ * tr1/4_metaprogramming/is_empty/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_empty/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_empty/value.cc
+ * tr1/4_metaprogramming/is_enum
+ * tr1/4_metaprogramming/is_enum/requirements
+ * tr1/4_metaprogramming/is_enum/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_enum/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_enum/value.cc
+ * tr1/4_metaprogramming/is_floating_point
+ * tr1/4_metaprogramming/is_floating_point/requirements
+ * tr1/4_metaprogramming/is_floating_point/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_floating_point/value.cc
+ * tr1/4_metaprogramming/is_function
+ * tr1/4_metaprogramming/is_function/requirements
+ * tr1/4_metaprogramming/is_function/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_function/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_function/value.cc
+ * tr1/4_metaprogramming/is_fundamental
+ * tr1/4_metaprogramming/is_fundamental/requirements
+ * tr1/4_metaprogramming/is_fundamental/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_fundamental/value.cc
+ * tr1/4_metaprogramming/is_integral
+ * tr1/4_metaprogramming/is_integral/requirements
+ * tr1/4_metaprogramming/is_integral/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_integral/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_integral/value.cc
+ * tr1/4_metaprogramming/is_member_function_pointer
+ * tr1/4_metaprogramming/is_member_function_pointer/requirements
+ * tr1/4_metaprogramming/is_member_function_pointer/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_member_function_pointer/
+ requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_member_function_pointer/value.cc
+ * tr1/4_metaprogramming/is_member_object_pointer
+ * tr1/4_metaprogramming/is_member_object_pointer/requirements
+ * tr1/4_metaprogramming/is_member_object_pointer/
+ requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_member_object_pointer/
+ requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_member_object_pointer/value.cc
+ * tr1/4_metaprogramming/is_member_pointer
+ * tr1/4_metaprogramming/is_member_pointer/requirements
+ * tr1/4_metaprogramming/is_member_pointer/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_member_pointer/value.cc
+ * tr1/4_metaprogramming/is_object
+ * tr1/4_metaprogramming/is_object/requirements
+ * tr1/4_metaprogramming/is_object/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_object/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_object/value.cc
+ * tr1/4_metaprogramming/is_pod
+ * tr1/4_metaprogramming/is_pod/requirements
+ * tr1/4_metaprogramming/is_pod/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_pod/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_pod/value.cc
+ * tr1/4_metaprogramming/is_pointer
+ * tr1/4_metaprogramming/is_pointer/requirements
+ * tr1/4_metaprogramming/is_pointer/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_pointer/value.cc
+ * tr1/4_metaprogramming/is_polymorphic
+ * tr1/4_metaprogramming/is_polymorphic/requirements
+ * tr1/4_metaprogramming/is_polymorphic/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_polymorphic/value.cc
+ * tr1/4_metaprogramming/is_reference
+ * tr1/4_metaprogramming/is_reference/requirements
+ * tr1/4_metaprogramming/is_reference/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_reference/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_reference/value.cc
+ * tr1/4_metaprogramming/is_same
+ * tr1/4_metaprogramming/is_same/requirements
+ * tr1/4_metaprogramming/is_same/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_same/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_same/value.cc
+ * tr1/4_metaprogramming/is_scalar
+ * tr1/4_metaprogramming/is_scalar/requirements
+ * tr1/4_metaprogramming/is_scalar/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_scalar/value.cc
+ * tr1/4_metaprogramming/is_signed
+ * tr1/4_metaprogramming/is_signed/requirements
+ * tr1/4_metaprogramming/is_signed/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_signed/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_signed/value.cc
+ * tr1/4_metaprogramming/is_union
+ * tr1/4_metaprogramming/is_union/requirements
+ * tr1/4_metaprogramming/is_union/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_union/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_union/value.cc
+ * tr1/4_metaprogramming/is_unsigned
+ * tr1/4_metaprogramming/is_unsigned/requirements
+ * tr1/4_metaprogramming/is_unsigned/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_unsigned/value.cc
+ * tr1/4_metaprogramming/is_void
+ * tr1/4_metaprogramming/is_void/requirements
+ * tr1/4_metaprogramming/is_void/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_void/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_void/value.cc
+ * tr1/4_metaprogramming/is_volatile
+ * tr1/4_metaprogramming/is_volatile/requirements
+ * tr1/4_metaprogramming/is_volatile/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc
+ * tr1/4_metaprogramming/is_volatile/value.cc
+ * tr1/4_metaprogramming/rank
+ * tr1/4_metaprogramming/rank/requirements
+ * tr1/4_metaprogramming/rank/requirements/explicit_instantiations.cc
+ * tr1/4_metaprogramming/rank/requirements/typedefs.cc
+ * tr1/4_metaprogramming/rank/value.cc
+ * tr1/4_metaprogramming/remove_all_extents
+ * tr1/4_metaprogramming/remove_all_extents/requirements
+ * tr1/4_metaprogramming/remove_all_extents/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_all_extents/value.cc
+ * tr1/4_metaprogramming/remove_const
+ * tr1/4_metaprogramming/remove_const/requirements
+ * tr1/4_metaprogramming/remove_const/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_const/value.cc
+ * tr1/4_metaprogramming/remove_cv
+ * tr1/4_metaprogramming/remove_cv/requirements
+ * tr1/4_metaprogramming/remove_cv/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_cv/value.cc
+ * tr1/4_metaprogramming/remove_extent
+ * tr1/4_metaprogramming/remove_extent/requirements
+ * tr1/4_metaprogramming/remove_extent/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_extent/value.cc
+ * tr1/4_metaprogramming/remove_pointer
+ * tr1/4_metaprogramming/remove_pointer/requirements
+ * tr1/4_metaprogramming/remove_pointer/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_pointer/value.cc
+ * tr1/4_metaprogramming/remove_reference
+ * tr1/4_metaprogramming/remove_reference/requirements
+ * tr1/4_metaprogramming/remove_reference/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_reference/value.cc
+ * tr1/4_metaprogramming/remove_volatile
+ * tr1/4_metaprogramming/remove_volatile/requirements
+ * tr1/4_metaprogramming/remove_volatile/requirements/
+ explicit_instantiations.cc
+ * tr1/4_metaprogramming/remove_volatile/value.cc
+
+ Deleted in testsuite:
+ * tr1/4_metaprogramming/alignment_of/alignment_of.cc
+ * tr1/4_metaprogramming/alignment_of/typedefs.cc
+ * tr1/4_metaprogramming/array_modifications
+ * tr1/4_metaprogramming/array_modifications/remove_all_extents.cc
+ * tr1/4_metaprogramming/array_modifications/remove_extent.cc
+ * tr1/4_metaprogramming/composite_type_traits
+ * tr1/4_metaprogramming/composite_type_traits/is_arithmetic
+ * tr1/4_metaprogramming/composite_type_traits/is_arithmetic/
+ is_arithmetic.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_arithmetic/typedefs.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_compound
+ * tr1/4_metaprogramming/composite_type_traits/is_compound/
+ is_compound.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_compound/typedefs.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_fundamental
+ * tr1/4_metaprogramming/composite_type_traits/is_fundamental/
+ is_fundamental.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_fundamental/
+ typedefs.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_member_pointer
+ * tr1/4_metaprogramming/composite_type_traits/is_member_pointer/
+ is_member_pointer.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_member_pointer/
+ typedefs.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_object
+ * tr1/4_metaprogramming/composite_type_traits/is_object/24808.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_object/is_object.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_object/typedefs.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_scalar
+ * tr1/4_metaprogramming/composite_type_traits/is_scalar/is_scalar.cc
+ * tr1/4_metaprogramming/composite_type_traits/is_scalar/typedefs.cc
+ * tr1/4_metaprogramming/const_volatile_modifications
+ * tr1/4_metaprogramming/const_volatile_modifications/add_const.cc
+ * tr1/4_metaprogramming/const_volatile_modifications/add_cv.cc
+ * tr1/4_metaprogramming/const_volatile_modifications/add_volatile.cc
+ * tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc
+ * tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc
+ * tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc
+ * tr1/4_metaprogramming/extent/extent.cc
+ * tr1/4_metaprogramming/extent/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_assign/has_nothrow_assign.cc
+ * tr1/4_metaprogramming/has_nothrow_assign/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_constructor/
+ has_nothrow_constructor.cc
+ * tr1/4_metaprogramming/has_nothrow_constructor/typedefs.cc
+ * tr1/4_metaprogramming/has_nothrow_copy/has_nothrow_copy.cc
+ * tr1/4_metaprogramming/has_nothrow_copy/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_assign/has_trivial_assign.cc
+ * tr1/4_metaprogramming/has_trivial_assign/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_constructor/
+ has_trivial_constructor.cc
+ * tr1/4_metaprogramming/has_trivial_constructor/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_copy/has_trivial_copy.cc
+ * tr1/4_metaprogramming/has_trivial_copy/typedefs.cc
+ * tr1/4_metaprogramming/has_trivial_destructor/
+ has_trivial_destructor.cc
+ * tr1/4_metaprogramming/has_trivial_destructor/typedefs.cc
+ * tr1/4_metaprogramming/has_virtual_destructor/
+ has_virtual_destructor.cc
+ * tr1/4_metaprogramming/has_virtual_destructor/typedefs.cc
+ * tr1/4_metaprogramming/helper_classes
+ * tr1/4_metaprogramming/helper_classes/static_definition.cc
+ * tr1/4_metaprogramming/helper_classes/true_false_type.cc
+ * tr1/4_metaprogramming/helper_classes/true_false_type_typedefs.cc
+ * tr1/4_metaprogramming/helper_classes/typedefs.cc
+ * tr1/4_metaprogramming/integral_constant/true_false_type.cc
+ * tr1/4_metaprogramming/integral_constant/typedefs.cc
+ * tr1/4_metaprogramming/is_abstract/is_abstract.cc
+ * tr1/4_metaprogramming/is_abstract/typedefs.cc
+ * tr1/4_metaprogramming/is_arithmetic/is_arithmetic.cc
+ * tr1/4_metaprogramming/is_arithmetic/typedefs.cc
+ * tr1/4_metaprogramming/is_array/is_array.cc
+ * tr1/4_metaprogramming/is_array/typedefs.cc
+ * tr1/4_metaprogramming/is_base_of/is_base_of.cc
+ * tr1/4_metaprogramming/is_base_of/typedefs.cc
+ * tr1/4_metaprogramming/is_class/is_class.cc
+ * tr1/4_metaprogramming/is_class/typedefs.cc
+ * tr1/4_metaprogramming/is_compound/is_compound.cc
+ * tr1/4_metaprogramming/is_compound/typedefs.cc
+ * tr1/4_metaprogramming/is_const/is_const.cc
+ * tr1/4_metaprogramming/is_const/typedefs.cc
+ * tr1/4_metaprogramming/is_convertible/is_convertible.cc
+ * tr1/4_metaprogramming/is_convertible/typedefs.cc
+ * tr1/4_metaprogramming/is_empty/is_empty.cc
+ * tr1/4_metaprogramming/is_empty/typedefs.cc
+ * tr1/4_metaprogramming/is_enum/is_enum.cc
+ * tr1/4_metaprogramming/is_enum/typedefs.cc
+ * tr1/4_metaprogramming/is_floating_point/is_floating_point.cc
+ * tr1/4_metaprogramming/is_floating_point/typedefs.cc
+ * tr1/4_metaprogramming/is_function/is_function.cc
+ * tr1/4_metaprogramming/is_function/typedefs.cc
+ * tr1/4_metaprogramming/is_fundamental/is_fundamental.cc
+ * tr1/4_metaprogramming/is_fundamental/typedefs.cc
+ * tr1/4_metaprogramming/is_integral/is_integral.cc
+ * tr1/4_metaprogramming/is_integral/typedefs.cc
+ * tr1/4_metaprogramming/is_member_function_pointer/
+ is_member_function_pointer.cc
+ * tr1/4_metaprogramming/is_member_function_pointer/typedefs.cc
+ * tr1/4_metaprogramming/is_member_object_pointer/
+ is_member_object_pointer.cc
+ * tr1/4_metaprogramming/is_member_object_pointer/typedefs.cc
+ * tr1/4_metaprogramming/is_member_pointer/is_member_pointer.cc
+ * tr1/4_metaprogramming/is_member_pointer/typedefs.cc
+ * tr1/4_metaprogramming/is_object/is_object.cc
+ * tr1/4_metaprogramming/is_object/typedefs.cc
+ * tr1/4_metaprogramming/is_pod/is_pod.cc
+ * tr1/4_metaprogramming/is_pod/typedefs.cc
+ * tr1/4_metaprogramming/is_pointer/is_pointer.cc
+ * tr1/4_metaprogramming/is_pointer/typedefs.cc
+ * tr1/4_metaprogramming/is_polymorphic/is_polymorphic.cc
+ * tr1/4_metaprogramming/is_polymorphic/typedefs.cc
+ * tr1/4_metaprogramming/is_reference/is_reference.cc
+ * tr1/4_metaprogramming/is_reference/typedefs.cc
+ * tr1/4_metaprogramming/is_same/is_same.cc
+ * tr1/4_metaprogramming/is_same/typedefs.cc
+ * tr1/4_metaprogramming/is_scalar/is_scalar.cc
+ * tr1/4_metaprogramming/is_scalar/typedefs.cc
+ * tr1/4_metaprogramming/is_signed/is_signed.cc
+ * tr1/4_metaprogramming/is_signed/typedefs.cc
+ * tr1/4_metaprogramming/is_union/is_union.cc
+ * tr1/4_metaprogramming/is_union/typedefs.cc
+ * tr1/4_metaprogramming/is_unsigned/is_unsigned.cc
+ * tr1/4_metaprogramming/is_unsigned/typedefs.cc
+ * tr1/4_metaprogramming/is_void/is_void.cc
+ * tr1/4_metaprogramming/is_void/typedefs.cc
+ * tr1/4_metaprogramming/is_volatile/is_volatile.cc
+ * tr1/4_metaprogramming/is_volatile/typedefs.cc
+ * tr1/4_metaprogramming/other_transformations
+ * tr1/4_metaprogramming/other_transformations/aligned_storage
+ * tr1/4_metaprogramming/other_transformations/aligned_storage/
+ aligned_storage.cc
+ * tr1/4_metaprogramming/other_transformations/aligned_storage/
+ typedefs.cc
+ * tr1/4_metaprogramming/pointer_modifications
+ * tr1/4_metaprogramming/pointer_modifications/add_pointer.cc
+ * tr1/4_metaprogramming/pointer_modifications/remove_pointer.cc
+ * tr1/4_metaprogramming/primary_type_categories
+ * tr1/4_metaprogramming/primary_type_categories/is_array
+ * tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_array/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_class
+ * tr1/4_metaprogramming/primary_type_categories/is_class/is_class.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_class/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_enum
+ * tr1/4_metaprogramming/primary_type_categories/is_enum/24808.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_enum/is_enum.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_enum/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_floating_point
+ * tr1/4_metaprogramming/primary_type_categories/is_floating_point/
+ is_floating_point.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_floating_point/
+ typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_function
+ * tr1/4_metaprogramming/primary_type_categories/is_function/24808.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_function/
+ is_function.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_function/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_integral
+ * tr1/4_metaprogramming/primary_type_categories/is_integral/
+ is_integral.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_integral/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_function_pointer
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_function_pointer/is_member_function_pointer.cc
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_function_pointer/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_object_pointer
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_object_pointer/is_member_object_pointer.cc
+ * tr1/4_metaprogramming/primary_type_categories/
+ is_member_object_pointer/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_pointer
+ * tr1/4_metaprogramming/primary_type_categories/is_pointer/
+ is_pointer.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_pointer/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_reference
+ * tr1/4_metaprogramming/primary_type_categories/is_reference/
+ is_reference.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_reference/
+ typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_union
+ * tr1/4_metaprogramming/primary_type_categories/is_union/is_union.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_union/typedefs.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_void
+ * tr1/4_metaprogramming/primary_type_categories/is_void/is_void.cc
+ * tr1/4_metaprogramming/primary_type_categories/is_void/typedefs.cc
+ * tr1/4_metaprogramming/rank/rank.cc
+ * tr1/4_metaprogramming/rank/typedefs.cc
+ * tr1/4_metaprogramming/reference_modifications/add_reference.cc
+ * tr1/4_metaprogramming/reference_modifications/remove_reference.cc
+ * tr1/4_metaprogramming/relationships_between_types
+ * tr1/4_metaprogramming/relationships_between_types/is_base_of
+ * tr1/4_metaprogramming/relationships_between_types/is_base_of/
+ is_base_of.cc
+ * tr1/4_metaprogramming/relationships_between_types/is_base_of/
+ typedefs.cc
+ * tr1/4_metaprogramming/relationships_between_types/is_convertible
+ * tr1/4_metaprogramming/relationships_between_types/is_convertible/
+ is_convertible.cc
+ * tr1/4_metaprogramming/relationships_between_types/is_convertible/
+ typedefs.cc
+ * tr1/4_metaprogramming/relationships_between_types/is_same
+ * tr1/4_metaprogramming/relationships_between_types/is_same/is_same.cc
+ * tr1/4_metaprogramming/relationships_between_types/is_same/typedefs.cc
+ * tr1/4_metaprogramming/type_properties
+ * tr1/4_metaprogramming/type_properties/alignment_of
+ * tr1/4_metaprogramming/type_properties/alignment_of/alignment_of.cc
+ * tr1/4_metaprogramming/type_properties/alignment_of/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/extent
+ * tr1/4_metaprogramming/type_properties/extent/extent.cc
+ * tr1/4_metaprogramming/type_properties/extent/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_assign
+ * tr1/4_metaprogramming/type_properties/has_nothrow_assign/
+ has_nothrow_assign.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_assign/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_constructor
+ * tr1/4_metaprogramming/type_properties/has_nothrow_constructor/
+ has_nothrow_constructor.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_constructor/
+ typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_copy
+ * tr1/4_metaprogramming/type_properties/has_nothrow_copy/
+ has_nothrow_copy.cc
+ * tr1/4_metaprogramming/type_properties/has_nothrow_copy/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_assign
+ * tr1/4_metaprogramming/type_properties/has_trivial_assign/
+ has_trivial_assign.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_assign/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_constructor
+ * tr1/4_metaprogramming/type_properties/has_trivial_constructor/
+ has_trivial_constructor.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_constructor/
+ typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_copy
+ * tr1/4_metaprogramming/type_properties/has_trivial_copy/
+ has_trivial_copy.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_copy/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_destructor
+ * tr1/4_metaprogramming/type_properties/has_trivial_destructor/
+ has_trivial_destructor.cc
+ * tr1/4_metaprogramming/type_properties/has_trivial_destructor/
+ typedefs.cc
+ * tr1/4_metaprogramming/type_properties/has_virtual_destructor
+ * tr1/4_metaprogramming/type_properties/has_virtual_destructor/
+ has_virtual_destructor.cc
+ * tr1/4_metaprogramming/type_properties/has_virtual_destructor/
+ typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_abstract
+ * tr1/4_metaprogramming/type_properties/is_abstract/is_abstract.cc
+ * tr1/4_metaprogramming/type_properties/is_abstract/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_const
+ * tr1/4_metaprogramming/type_properties/is_const/is_const.cc
+ * tr1/4_metaprogramming/type_properties/is_const/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_empty
+ * tr1/4_metaprogramming/type_properties/is_empty/is_empty.cc
+ * tr1/4_metaprogramming/type_properties/is_empty/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_pod
+ * tr1/4_metaprogramming/type_properties/is_pod/is_pod.cc
+ * tr1/4_metaprogramming/type_properties/is_pod/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_polymorphic
+ * tr1/4_metaprogramming/type_properties/is_polymorphic/24809.cc
+ * tr1/4_metaprogramming/type_properties/is_polymorphic/
+ is_polymorphic.cc
+ * tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_signed
+ * tr1/4_metaprogramming/type_properties/is_signed/is_signed.cc
+ * tr1/4_metaprogramming/type_properties/is_signed/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_unsigned
+ * tr1/4_metaprogramming/type_properties/is_unsigned/is_unsigned.cc
+ * tr1/4_metaprogramming/type_properties/is_unsigned/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/is_volatile
+ * tr1/4_metaprogramming/type_properties/is_volatile/is_volatile.cc
+ * tr1/4_metaprogramming/type_properties/is_volatile/typedefs.cc
+ * tr1/4_metaprogramming/type_properties/rank
+ * tr1/4_metaprogramming/type_properties/rank/rank.cc
+ * tr1/4_metaprogramming/type_properties/rank/typedefs.cc
+
+2007-04-30 Hans-Peter Nilsson <hp@axis.com>
+
+ * testsuite/lib/libstdc++.exp (v3_target_compile_as_c): Correct
+ regexp to filter out -nostdinc++.
+
+2007-04-30 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/30449 (equal)
+ * include/bits/stl_algobase.h (struct __niter_base): Add.
+ (copy(_II, _II, _OI), copy_backward(_BI1, _BI1, _BI2),
+ fill(_ForwardIterator, _ForwardIterator, const _Tp&),
+ fill_n(_OI, _Size, const _Tp&), equal(_II1, _II1, _II2)):
+ Use it.
+ (struct __copy_normal, __copy_backward_normal,
+ struct __fill_normal, struct __fill_n_normal): Remove.
+ (struct __equal, struct __equal_aux): Add.
+ * include/bits/stl_iterator.h: Add _Iterator_type typedef.
+
+ * include/bits/stl_algobase.h (__fill_aux(wchar_t*,
+ wchar_t*, wchar_t), __fill_n_aux(wchar_t*, _Size, wchar_t)):
+ Remove.
+
+ * testsuite/23_containers/requirements/sequences/dr438/vector/
+ constructor_1_neg.cc: Adjust dg-error line number.
+ * testsuite/23_containers/requirements/sequences/dr438/vector/
+ constructor_2_neg.cc: Likewise.
+
+2007-04-30 Paolo Carlini <pcarlini@suse.de>
+
+ * include/tr1/type_traits (is_pod): Use __is_pod.
+ * testsuite/tr1/4_metaprogramming/type_properties/
+ has_trivial_destructor/has_trivial_destructor.cc: Adjust.
+ * testsuite/tr1/4_metaprogramming/type_properties/
+ has_nothrow_constructor/has_nothrow_constructor.cc: Likewise.
+ * testsuite/tr1/4_metaprogramming/type_properties/
+ has_trivial_constructor/has_trivial_constructor.cc: Likewise.
+ * testsuite/tr1/4_metaprogramming/type_properties/
+ is_pod/is_pod.cc: Likewise.
+
+2007-04-29 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/localefwd.h: Remove redundant inline qualifiers.
+ (__check_facet): Move...
+ * include/bits/basic_ios.h: ... here.
+ (widen(char), narrow(char_type, char)): Define inline.
+ * include/bits/basic_ios.tcc (widen(char), narrow(char_type, char)):
+ Remove.
+
2007-04-27 Paolo Carlini <pcarlini@suse.de>
DR 438, [DR].
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 75be19a5f78..ea27464432e 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -592,7 +592,7 @@ tr1_headers = \
${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \
${tr1_srcdir}/type_traits \
- ${tr1_srcdir}/type_traits_fwd.h \
+ ${tr1_srcdir}/type_traitsfwd.h \
${tr1_srcdir}/unordered_set \
${tr1_srcdir}/unordered_map \
${tr1_srcdir}/utility \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 5b4ad599218..4402d84c67f 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -822,7 +822,7 @@ tr1_headers = \
${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \
${tr1_srcdir}/type_traits \
- ${tr1_srcdir}/type_traits_fwd.h \
+ ${tr1_srcdir}/type_traitsfwd.h \
${tr1_srcdir}/unordered_set \
${tr1_srcdir}/unordered_map \
${tr1_srcdir}/utility \
diff --git a/libstdc++-v3/include/bits/basic_ios.h b/libstdc++-v3/include/bits/basic_ios.h
index d078431b9fd..ea9c0dc6565 100644
--- a/libstdc++-v3/include/bits/basic_ios.h
+++ b/libstdc++-v3/include/bits/basic_ios.h
@@ -1,6 +1,7 @@
// Iostreams base classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -38,13 +39,22 @@
#pragma GCC system_header
-#include <bits/streambuf_iterator.h>
#include <bits/localefwd.h>
#include <bits/locale_classes.h>
#include <bits/locale_facets.h>
+#include <bits/streambuf_iterator.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
+ template<typename _Facet>
+ inline const _Facet&
+ __check_facet(const _Facet* __f)
+ {
+ if (!__f)
+ __throw_bad_cast();
+ return *__f;
+ }
+
// 27.4.5 Template class basic_ios
/**
* @brief Virtual base class for all stream classes.
@@ -255,7 +265,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
explicit
basic_ios(basic_streambuf<_CharT, _Traits>* __sb)
: ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0),
- _M_ctype(0), _M_num_put(0), _M_num_get(0)
+ _M_ctype(0), _M_num_put(0), _M_num_get(0)
{ this->init(__sb); }
/**
@@ -413,7 +423,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* http://gcc.gnu.org/onlinedocs/libstdc++/22_locale/howto.html
*/
char
- narrow(char_type __c, char __dfault) const;
+ narrow(char_type __c, char __dfault) const
+ { return __check_facet(_M_ctype).narrow(__c, __dfault); }
/**
* @brief Widens characters.
@@ -431,7 +442,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* http://gcc.gnu.org/onlinedocs/libstdc++/22_locale/howto.html
*/
char_type
- widen(char __c) const;
+ widen(char __c) const
+ { return __check_facet(_M_ctype).widen(__c); }
protected:
// 27.4.5.1 basic_ios constructors
@@ -443,7 +455,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/
basic_ios()
: ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false),
- _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
+ _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
{ }
/**
diff --git a/libstdc++-v3/include/bits/basic_ios.tcc b/libstdc++-v3/include/bits/basic_ios.tcc
index e8434a5bdf0..399e93ae737 100644
--- a/libstdc++-v3/include/bits/basic_ios.tcc
+++ b/libstdc++-v3/include/bits/basic_ios.tcc
@@ -1,6 +1,6 @@
// basic_ios member functions -*- C++ -*-
-// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -112,16 +112,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return *this;
}
- template<typename _CharT, typename _Traits>
- char
- basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
- { return __check_facet(_M_ctype).narrow(__c, __dfault); }
-
- template<typename _CharT, typename _Traits>
- _CharT
- basic_ios<_CharT, _Traits>::widen(char __c) const
- { return __check_facet(_M_ctype).widen(__c); }
-
// Locales:
template<typename _CharT, typename _Traits>
locale
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index aff3e23e16d..94a73639cbb 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -1,6 +1,7 @@
// Locale support -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,67 +44,74 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <bits/c++locale.h> // Defines __c_locale, config-specific includes
-#include <iosfwd> // For ostreambuf_iterator, istreambuf_iterator
+#include <bits/c++locale.h> // Defines __c_locale, config-specific include
+#include <iosfwd> // For ostreambuf_iterator, istreambuf_iterator
#include <cctype>
-#include <bits/functexcept.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
// 22.1.1 Locale
class locale;
+ template<typename _Facet>
+ bool
+ has_facet(const locale&) throw();
+
+ template<typename _Facet>
+ const _Facet&
+ use_facet(const locale&);
+
// 22.1.3 Convenience interfaces
template<typename _CharT>
- inline bool
+ bool
isspace(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isprint(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
iscntrl(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isupper(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
islower(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isalpha(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isdigit(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
ispunct(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isxdigit(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isalnum(_CharT, const locale&);
template<typename _CharT>
- inline bool
+ bool
isgraph(_CharT, const locale&);
template<typename _CharT>
- inline _CharT
+ _CharT
toupper(_CharT, const locale&);
template<typename _CharT>
- inline _CharT
+ _CharT
tolower(_CharT, const locale&);
// 22.2.1 and 22.2.1.3 ctype
@@ -175,23 +183,6 @@ _GLIBCXX_END_LDBL_NAMESPACE
template<typename _CharT>
class messages_byname;
- template<typename _Facet>
- bool
- has_facet(const locale& __loc) throw();
-
- template<typename _Facet>
- const _Facet&
- use_facet(const locale& __loc);
-
- template<typename _Facet>
- inline const _Facet&
- __check_facet(const _Facet* __f)
- {
- if (!__f)
- __throw_bad_cast();
- return *__f;
- }
-
_GLIBCXX_END_NAMESPACE
#endif
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index 52d09883699..6be1eb123e1 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -64,7 +64,6 @@
#include <bits/c++config.h>
#include <cstring>
-#include <cwchar>
#include <cstddef>
#include <bits/functexcept.h>
#include <bits/stl_pair.h>
@@ -161,9 +160,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_ReferenceType1;
typedef typename iterator_traits<_ForwardIterator2>::reference
_ReferenceType2;
- std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value &&
- __are_same<_ValueType1 &, _ReferenceType1>::__value &&
- __are_same<_ValueType2 &, _ReferenceType2>::__value>::
+ std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value
+ && __are_same<_ValueType1&, _ReferenceType1>::__value
+ && __are_same<_ValueType2&, _ReferenceType2>::__value>::
iter_swap(__a, __b);
}
@@ -285,6 +284,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __a;
}
+
+ // If _Iterator is a __normal_iterator return its base (a plain pointer,
+ // normally) otherwise return it untouched. See copy, fill, ...
+ template<typename _Iterator,
+ bool _BoolType = __is_normal_iterator<_Iterator>::__value>
+ struct __niter_base
+ {
+ static const _Iterator&
+ __b(const _Iterator& __it)
+ { return __it; }
+ };
+
+ template<typename _Iterator>
+ struct __niter_base<_Iterator, true>
+ {
+ static const typename _Iterator::_Iterator_type&
+ __b(const _Iterator& __it)
+ { return __it.base(); }
+ };
+
// All of these auxiliary structs serve two purposes. (1) Replace
// calls to copy with memmove whenever possible. (Memmove, not memcpy,
// because the input and output ranges are permitted to overlap.)
@@ -378,43 +397,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__copy_aux(istreambuf_iterator<_CharT, char_traits<_CharT> >,
istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
- template<bool, bool>
- struct __copy_normal
- {
- template<typename _II, typename _OI>
- static _OI
- __copy_n(_II __first, _II __last, _OI __result)
- { return std::__copy_aux(__first, __last, __result); }
- };
-
- template<>
- struct __copy_normal<true, false>
- {
- template<typename _II, typename _OI>
- static _OI
- __copy_n(_II __first, _II __last, _OI __result)
- { return std::__copy_aux(__first.base(), __last.base(), __result); }
- };
-
- template<>
- struct __copy_normal<false, true>
- {
- template<typename _II, typename _OI>
- static _OI
- __copy_n(_II __first, _II __last, _OI __result)
- { return _OI(std::__copy_aux(__first, __last, __result.base())); }
- };
-
- template<>
- struct __copy_normal<true, true>
- {
- template<typename _II, typename _OI>
- static _OI
- __copy_n(_II __first, _II __last, _OI __result)
- { return _OI(std::__copy_aux(__first.base(), __last.base(),
- __result.base())); }
- };
-
/**
* @brief Copies the range [first,last) into result.
* @param first An input iterator.
@@ -431,23 +413,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* Note that the end of the output range is permitted to be contained
* within [first,last).
*/
- template<typename _InputIterator, typename _OutputIterator>
- inline _OutputIterator
- copy(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result)
+ template<typename _II, typename _OI>
+ inline _OI
+ copy(_II __first, _II __last, _OI __result)
{
// concept requirements
- __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
- __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
- typename iterator_traits<_InputIterator>::value_type>)
+ __glibcxx_function_requires(_InputIteratorConcept<_II>)
+ __glibcxx_function_requires(_OutputIteratorConcept<_OI,
+ typename iterator_traits<_II>::value_type>)
__glibcxx_requires_valid_range(__first, __last);
- const bool __in = __is_normal_iterator<_InputIterator>::__value;
- const bool __out = __is_normal_iterator<_OutputIterator>::__value;
- return std::__copy_normal<__in, __out>::__copy_n(__first, __last,
- __result);
+ return _OI(std::__copy_aux(__niter_base<_II>::__b(__first),
+ __niter_base<_II>::__b(__last),
+ __niter_base<_OI>::__b(__result)));
}
+
template<bool, typename>
struct __copy_backward
{
@@ -505,45 +486,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__result);
}
- template<bool, bool>
- struct __copy_backward_normal
- {
- template<typename _BI1, typename _BI2>
- static _BI2
- __copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
- { return std::__copy_backward_aux(__first, __last, __result); }
- };
-
- template<>
- struct __copy_backward_normal<true, false>
- {
- template<typename _BI1, typename _BI2>
- static _BI2
- __copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
- { return std::__copy_backward_aux(__first.base(), __last.base(),
- __result); }
- };
-
- template<>
- struct __copy_backward_normal<false, true>
- {
- template<typename _BI1, typename _BI2>
- static _BI2
- __copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
- { return _BI2(std::__copy_backward_aux(__first, __last,
- __result.base())); }
- };
-
- template<>
- struct __copy_backward_normal<true, true>
- {
- template<typename _BI1, typename _BI2>
- static _BI2
- __copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
- { return _BI2(std::__copy_backward_aux(__first.base(), __last.base(),
- __result.base())); }
- };
-
/**
* @brief Copies the range [first,last) into result.
* @param first A bidirectional iterator.
@@ -573,11 +515,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typename iterator_traits<_BI2>::value_type>)
__glibcxx_requires_valid_range(__first, __last);
- const bool __bi1 = __is_normal_iterator<_BI1>::__value;
- const bool __bi2 = __is_normal_iterator<_BI2>::__value;
- return std::__copy_backward_normal<__bi1, __bi2>::__copy_b_n(__first,
- __last,
- __result);
+ return _BI2(std::__copy_backward_aux(__niter_base<_BI1>::__b(__first),
+ __niter_base<_BI1>::__b(__last),
+ __niter_base<_BI2>::__b(__result)));
}
@@ -617,7 +557,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
std::__fill<__scalar>::fill(__first, __last, __value);
}
- // Specialization: for char types we can use memset (wmemset).
+ // Specialization: for char types we can use memset.
inline void
__fill_aux(unsigned char* __first, unsigned char* __last, unsigned char __c)
{ std::memset(__first, __c, __last - __first); }
@@ -630,32 +570,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__fill_aux(char* __first, char* __last, char __c)
{ std::memset(__first, static_cast<unsigned char>(__c), __last - __first); }
-#ifdef _GLIBCXX_USE_WCHAR_T
- inline void
- __fill_aux(wchar_t* __first, wchar_t* __last, wchar_t __c)
- { std::wmemset(__first, __c, __last - __first); }
-#endif
-
- template<bool>
- struct __fill_normal
- {
- template<typename _ForwardIterator, typename _Tp>
- static void
- __fill_n(_ForwardIterator __first, _ForwardIterator __last,
- const _Tp& __value)
- { std::__fill_aux(__first, __last, __value); }
- };
-
- template<>
- struct __fill_normal<true>
- {
- template<typename _ForwardIterator, typename _Tp>
- static void
- __fill_n(_ForwardIterator __first, _ForwardIterator __last,
- const _Tp& __value)
- { std::__fill_aux(__first.base(), __last.base(), __value); }
- };
-
/**
* @brief Fills the range [first,last) with copies of value.
* @param first A forward iterator.
@@ -676,8 +590,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_ForwardIterator>)
__glibcxx_requires_valid_range(__first, __last);
- const bool __fi = __is_normal_iterator<_ForwardIterator>::__value;
- std::__fill_normal<__fi>::__fill_n(__first, __last, __value);
+ std::__fill_aux(__niter_base<_ForwardIterator>::__b(__first),
+ __niter_base<_ForwardIterator>::__b(__last), __value);
}
@@ -740,34 +654,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __first + __n;
}
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<typename _Size>
- inline wchar_t*
- __fill_n_aux(wchar_t* __first, _Size __n, wchar_t __c)
- {
- std::__fill_aux(__first, __first + __n, __c);
- return __first + __n;
- }
-#endif
-
- template<bool>
- struct __fill_n_normal
- {
- template<typename _OI, typename _Size, typename _Tp>
- static _OI
- __fill_n_n(_OI __first, _Size __n, const _Tp& __value)
- { return std::__fill_n_aux(__first, __n, __value); }
- };
-
- template<>
- struct __fill_n_normal<true>
- {
- template<typename _OI, typename _Size, typename _Tp>
- static _OI
- __fill_n_n(_OI __first, _Size __n, const _Tp& __value)
- { return _OI(std::__fill_n_aux(__first.base(), __n, __value)); }
- };
-
/**
* @brief Fills the range [first,first+n) with copies of value.
* @param first An output iterator.
@@ -779,15 +665,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* types filling contiguous areas of memory, this becomes an inline call
* to @c memset or @ wmemset.
*/
- template<typename _OutputIterator, typename _Size, typename _Tp>
- inline _OutputIterator
- fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)
+ template<typename _OI, typename _Size, typename _Tp>
+ inline _OI
+ fill_n(_OI __first, _Size __n, const _Tp& __value)
{
// concept requirements
- __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, _Tp>)
+ __glibcxx_function_requires(_OutputIteratorConcept<_OI, _Tp>)
- const bool __oi = __is_normal_iterator<_OutputIterator>::__value;
- return std::__fill_n_normal<__oi>::__fill_n_n(__first, __n, __value);
+ return _OI(std::__fill_n_aux(__niter_base<_OI>::__b(__first), __n,
+ __value));
}
/**
@@ -856,6 +742,47 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
}
+
+ template<bool _BoolType>
+ struct __equal
+ {
+ template<typename _II1, typename _II2>
+ static bool
+ equal(_II1 __first1, _II1 __last1, _II2 __first2)
+ {
+ for (; __first1 != __last1; ++__first1, ++__first2)
+ if (!(*__first1 == *__first2))
+ return false;
+ return true;
+ }
+ };
+
+ template<>
+ struct __equal<true>
+ {
+ template<typename _Tp>
+ static bool
+ equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
+ {
+ return !std::memcmp(__first1, __first2, sizeof(_Tp)
+ * (__last1 - __first1));
+ }
+ };
+
+ template<typename _II1, typename _II2>
+ inline bool
+ __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
+ {
+ typedef typename iterator_traits<_II1>::value_type _ValueType1;
+ typedef typename iterator_traits<_II2>::value_type _ValueType2;
+ const bool __simple = (__is_integer<_ValueType1>::__value
+ && __is_pointer<_II1>::__value
+ && __is_pointer<_II2>::__value
+ && __are_same<_ValueType1, _ValueType2>::__value);
+
+ return std::__equal<__simple>::equal(__first1, __last1, __first2);
+ }
+
/**
* @brief Tests a range for element-wise equality.
* @param first1 An input iterator.
@@ -867,23 +794,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* false depending on whether all of the corresponding elements of the
* ranges are equal.
*/
- template<typename _InputIterator1, typename _InputIterator2>
+ template<typename _II1, typename _II2>
inline bool
- equal(_InputIterator1 __first1, _InputIterator1 __last1,
- _InputIterator2 __first2)
+ equal(_II1 __first1, _II1 __last1, _II2 __first2)
{
// concept requirements
- __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
- __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+ __glibcxx_function_requires(_InputIteratorConcept<_II1>)
+ __glibcxx_function_requires(_InputIteratorConcept<_II2>)
__glibcxx_function_requires(_EqualOpConcept<
- typename iterator_traits<_InputIterator1>::value_type,
- typename iterator_traits<_InputIterator2>::value_type>)
+ typename iterator_traits<_II1>::value_type,
+ typename iterator_traits<_II2>::value_type>)
__glibcxx_requires_valid_range(__first1, __last1);
-
- for (; __first1 != __last1; ++__first1, ++__first2)
- if (!(*__first1 == *__first2))
- return false;
- return true;
+
+ return std::__equal_aux(__niter_base<_II1>::__b(__first1),
+ __niter_base<_II1>::__b(__last1),
+ __niter_base<_II2>::__b(__first2));
}
/**
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index f9425aa14bc..06aa105ece4 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -1,6 +1,6 @@
// Iterators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -647,6 +647,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
typedef typename iterator_traits<_Iterator>::reference reference;
typedef typename iterator_traits<_Iterator>::pointer pointer;
+ typedef _Iterator _Iterator_type;
+
__normal_iterator() : _M_current(_Iterator()) { }
explicit
diff --git a/libstdc++-v3/include/ext/pool_allocator.h b/libstdc++-v3/include/ext/pool_allocator.h
index e78bf21778c..f9dcc7fc88d 100644
--- a/libstdc++-v3/include/ext/pool_allocator.h
+++ b/libstdc++-v3/include/ext/pool_allocator.h
@@ -1,6 +1,6 @@
// Allocators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -212,7 +212,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
}
const size_t __bytes = __n * sizeof(_Tp);
- if (__bytes > size_t(_S_max_bytes) || _S_force_new == 1)
+ if (__bytes > size_t(_S_max_bytes) || _S_force_new > 0)
__ret = static_cast<_Tp*>(::operator new(__bytes));
else
{
@@ -241,7 +241,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
if (__builtin_expect(__n != 0 && __p != 0, true))
{
const size_t __bytes = __n * sizeof(_Tp);
- if (__bytes > static_cast<size_t>(_S_max_bytes) || _S_force_new == 1)
+ if (__bytes > static_cast<size_t>(_S_max_bytes) || _S_force_new > 0)
::operator delete(__p);
else
{
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 1d83dabd861..0d7e85e5300 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -42,5 +42,305 @@
# include <c++0x_warning.h>
#endif
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ // Define a nested type if some predicate holds.
+ template<bool, typename _Tp = void>
+ struct enable_if
+ { };
+
+ template<typename _Tp>
+ struct enable_if<true, _Tp>
+ { typedef _Tp type; };
+
+
+ // Like a conditional expression, but for types. If true, first, if
+ // false, second.
+ template<bool _Cond, typename _Iftrue, typename _Iffalse>
+ struct conditional
+ { typedef _Iftrue type; };
+
+ template<typename _Iftrue, typename _Iffalse>
+ struct conditional<false, _Iftrue, _Iffalse>
+ { typedef _Iffalse type; };
+
+
+ // Decay trait for arrays and functions, used for perfect forwarding
+ // in make_pair, make_tuple, etc.
+ template<typename _Up,
+ bool _IsArray = is_array<_Up>::value,
+ bool _IsFunction = is_function<_Up>::value>
+ struct __decay_selector;
+
+ template<typename _Up>
+ struct __decay_selector<_Up, false, false>
+ { typedef _Up __type; };
+
+ template<typename _Up>
+ struct __decay_selector<_Up, true, false>
+ { typedef typename remove_extent<_Up>::type* __type; };
+
+
+ template<typename _Up>
+ struct __decay_selector<_Up, false, true>
+ { typedef typename add_pointer<_Up>::type __type; };
+
+ template<typename _Tp>
+ struct decay
+ {
+ private:
+ typedef typename remove_reference<_Tp>::type __remove_type;
+
+ public:
+ typedef typename __decay_selector<__remove_type>::__type type;
+ };
+
+
+ // Utility for constructing identically cv-qualified types.
+ template<typename _Unqualified, bool _IsConst, bool _IsVol>
+ struct __cv_selector;
+
+ template<typename _Unqualified>
+ struct __cv_selector<_Unqualified, false, false>
+ { typedef _Unqualified __type; };
+
+ template<typename _Unqualified>
+ struct __cv_selector<_Unqualified, false, true>
+ { typedef volatile _Unqualified __type; };
+
+ template<typename _Unqualified>
+ struct __cv_selector<_Unqualified, true, false>
+ { typedef const _Unqualified __type; };
+
+ template<typename _Unqualified>
+ struct __cv_selector<_Unqualified, true, true>
+ { typedef const volatile _Unqualified __type; };
+
+ template<typename _Qualified, typename _Unqualified,
+ bool _IsConst = is_const<_Qualified>::value,
+ bool _IsVol = is_volatile<_Qualified>::value>
+ struct __match_cv_qualifiers
+ {
+ private:
+ typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
+
+ public:
+ typedef typename __match::__type __type;
+ };
+
+
+ // Utility for finding the unsigned versions of signed integral types.
+ template<typename _Tp>
+ struct __make_unsigned;
+
+ template<>
+ struct __make_unsigned<char>
+ { typedef unsigned char __type; };
+
+ template<>
+ struct __make_unsigned<signed char>
+ { typedef unsigned char __type; };
+
+ template<>
+ struct __make_unsigned<wchar_t>
+ { typedef unsigned wchar_t __type; };
+
+ template<>
+ struct __make_unsigned<short>
+ { typedef unsigned short __type; };
+
+ template<>
+ struct __make_unsigned<int>
+ { typedef unsigned int __type; };
+
+ template<>
+ struct __make_unsigned<long>
+ { typedef unsigned long __type; };
+
+ template<>
+ struct __make_unsigned<long long>
+ { typedef unsigned long long __type; };
+
+
+ // Select between integral and enum: not possible to be both.
+ template<typename _Tp,
+ bool _IsInt = is_integral<_Tp>::value,
+ bool _IsUnsigned = is_unsigned<_Tp>::value,
+ bool _IsEnum = is_enum<_Tp>::value>
+ struct __make_unsigned_selector;
+
+ template<typename _Tp>
+ struct __make_unsigned_selector<_Tp, true, true, false>
+ { typedef _Tp __type; };
+
+ template<typename _Tp>
+ struct __make_unsigned_selector<_Tp, true, false, false>
+ {
+ private:
+ typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
+ typedef typename __unsignedt::__type __unsigned_type;
+ typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
+
+ public:
+ typedef typename __cv_unsigned::__type __type;
+ };
+
+ template<typename _Tp>
+ struct __make_unsigned_selector<_Tp, false, true, false>
+ {
+ private:
+ // GNU floating point types start with sizeof int.
+ static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned int);
+ static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned long);
+ typedef conditional<__b2, unsigned long, unsigned long long> __cond;
+ typedef typename __cond::type __cond_type;
+ typedef unsigned int __ui_type;
+
+ public:
+ typedef typename conditional<__b1, __ui_type, __cond_type>::type __type;
+ };
+
+ template<typename _Tp>
+ struct __make_unsigned_selector<_Tp, false, false, true>
+ {
+ private:
+ // GNU enums start with sizeof int.
+ static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned int);
+ static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned long);
+ typedef conditional<__b2, unsigned long, unsigned long long> __cond;
+ typedef typename __cond::type __cond_type;
+ typedef unsigned int __ui_type;
+
+ public:
+ typedef typename conditional<__b1, __ui_type, __cond_type>::type __type;
+ };
+
+ // Primary class template.
+ // Given an integral/enum type, return the corresponding unsigned
+ // integer type.
+ template<typename _Tp>
+ struct make_unsigned
+ { typedef typename __make_unsigned_selector<_Tp>::__type type; };
+
+ // Integral, but don't define.
+ template<>
+ struct make_unsigned<bool>;
+
+
+ // Utility for finding the signed versions of unsigned integral types.
+ template<typename _Tp>
+ struct __make_signed;
+
+ template<>
+ struct __make_signed<char>
+ { typedef signed char __type; };
+
+ template<>
+ struct __make_signed<unsigned char>
+ { typedef signed char __type; };
+
+ template<>
+ struct __make_signed<wchar_t>
+ { typedef signed wchar_t __type; };
+
+ template<>
+ struct __make_signed<unsigned short>
+ { typedef signed short __type; };
+
+ template<>
+ struct __make_signed<unsigned int>
+ { typedef signed int __type; };
+
+ template<>
+ struct __make_signed<unsigned long>
+ { typedef signed long __type; };
+
+ template<>
+ struct __make_signed<unsigned long long>
+ { typedef signed long long __type; };
+
+
+ // Select between arithmetic and enum: not possible to be both.
+ template<typename _Tp,
+ bool _IsInt = is_integral<_Tp>::value,
+ bool _IsSigned = is_signed<_Tp>::value,
+ bool _IsEnum = is_enum<_Tp>::value>
+ struct __make_signed_selector;
+
+ template<typename _Tp>
+ struct __make_signed_selector<_Tp, true, true, false>
+ { typedef _Tp __type; };
+
+ template<typename _Tp>
+ struct __make_signed_selector<_Tp, true, false, false>
+ {
+ private:
+ typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
+ typedef typename __signedt::__type __signed_type;
+ typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
+
+ public:
+ typedef typename __cv_signed::__type __type;
+ };
+
+ template<typename _Tp>
+ struct __make_signed_selector<_Tp, false, true, false>
+ {
+ // GNU floating point types start with sizeof int.
+ static const bool __b1 = sizeof(_Tp) <= sizeof(signed int);
+ static const bool __b2 = sizeof(_Tp) <= sizeof(signed long);
+ typedef conditional<__b2, signed long, signed long long> __cond;
+ typedef typename __cond::type __cond_type;
+ typedef unsigned int __i_type;
+
+ public:
+ typedef typename conditional<__b1, __i_type, __cond_type>::type __type;
+ };
+
+ template<typename _Tp>
+ struct __make_signed_selector<_Tp, false, false, true>
+ {
+ private:
+ // GNU enums start with sizeof int.
+ static const bool __b1 = sizeof(_Tp) <= sizeof(signed int);
+ static const bool __b2 = sizeof(_Tp) <= sizeof(signed long);
+ typedef conditional<__b2, signed long, signed long long> __cond;
+ typedef typename __cond::type __cond_type;
+ typedef int __i_type;
+
+ public:
+ typedef typename conditional<__b1, __i_type, __cond_type>::type __type;
+ };
+
+ // Primary class template.
+ // Given an integral/enum type, return the corresponding signed
+ // integer type.
+ template<typename _Tp>
+ struct make_signed
+ { typedef typename __make_signed_selector<_Tp>::__type type; };
+
+ // Integral, but don't define.
+ template<>
+ struct make_signed<bool>;
+
+
+ template<typename _Tp>
+ struct has_nothrow_default_constructor
+ : public integral_constant<bool, is_pod<_Tp>::value> { };
+
+ template<typename _Tp>
+ struct has_nothrow_copy_constructor
+ : public integral_constant<bool, is_pod<_Tp>::value> { };
+
+ template<typename _Tp>
+ struct has_trivial_default_constructor
+ : public integral_constant<bool, is_pod<_Tp>::value> { };
+
+ template<typename _Tp>
+ struct has_trivial_copy_constructor
+ : public integral_constant<bool, is_pod<_Tp>::value> { };
+
+_GLIBCXX_END_NAMESPACE
+
#endif
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index 8645427c63a..41edc3adbc0 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -37,7 +37,7 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <tr1/type_traits_fwd.h>
+#include <tr1/type_traitsfwd.h>
// namespace std::tr1
namespace std
@@ -249,9 +249,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
template<typename _Tp>
struct is_pod
- : public integral_constant<bool, (is_void<_Tp>::value
- || is_scalar<typename
- remove_all_extents<_Tp>::type>::value)>
+ : public integral_constant<bool, __is_pod(_Tp) || is_void<_Tp>::value>
{ };
template<typename _Tp>
diff --git a/libstdc++-v3/include/tr1/type_traits_fwd.h b/libstdc++-v3/include/tr1/type_traitsfwd.h
index c6e80a3a4b9..497801447b1 100644
--- a/libstdc++-v3/include/tr1/type_traits_fwd.h
+++ b/libstdc++-v3/include/tr1/type_traitsfwd.h
@@ -27,13 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-/** @file tr1/type_traits_fwd.h
+/** @file tr1/type_traitsfwd.h
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
-#ifndef _TYPE_TRAITS_FWD_H
-#define _TYPE_TRAITS_FWD_H 1
+#ifndef _TYPE_TRAITSFWD_H
+#define _TYPE_TRAIT_FWD_H 1
#include <cstddef>
diff --git a/libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..079d366590e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct conditional<true, test_type, test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc
new file mode 100644
index 00000000000..980cd6dd986
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::conditional;
+
+ typedef conditional<true, char, int>::type test1_type;
+ VERIFY( (std::is_same<test1_type, char>::value) );
+
+ typedef conditional<false, char, int>::type test2_type;
+ VERIFY( (std::is_same<test2_type, int>::value) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d804d11ffb8
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct decay<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc
new file mode 100644
index 00000000000..162ddd2ff42
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cstdlib>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::decay;
+ using std::is_same;
+
+ // Positive tests.
+ typedef decay<bool>::type test1_type;
+ VERIFY( (is_same<test1_type, bool>::value) );
+
+ typedef decay<const int>::type test2_type;
+ VERIFY( (is_same<test2_type, const int>::value) );
+
+ typedef decay<int[4]>::type test3_type;
+ VERIFY( (is_same<test3_type, std::remove_extent<int[4]>::type*>::value) );
+
+ typedef void (fn_type) ();
+ typedef decay<fn_type>::type test4_type;
+ VERIFY( (is_same<test4_type, std::add_pointer<fn_type>::type>::value) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..f236eabadfc
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct enable_if<true>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc
new file mode 100644
index 00000000000..34deb210354
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::enable_if;
+
+ // Positive tests.
+ typedef enable_if<true, int>::type test1_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc
new file mode 100644
index 00000000000..daff6ad3fb4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-02 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::enable_if;
+
+ // Negative tests.
+ typedef enable_if<false, int>::type test2_type;
+}
+
+// { dg-error "does not name a type" "" { target *-*-* } 33 }
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..dff484e9d6e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_nothrow_copy_constructor<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc
new file mode 100644
index 00000000000..02c30d9f3aa
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/requirements/typedefs.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_nothrow_copy_constructor<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc
new file mode 100644
index 00000000000..ac793178ac5
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_constructor/value.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_nothrow_copy_constructor;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<has_nothrow_copy_constructor, void>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, float>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, EnumType>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int*>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int(*)(int)>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*)>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int[2]>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, float[][3]>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int*[3]>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int(*[][2])(int)>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor, int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_category<has_nothrow_copy_constructor,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..e56d7090bf8
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_nothrow_default_constructor<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc
new file mode 100644
index 00000000000..6eeb6f06501
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/requirements/typedefs.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_nothrow_default_constructor<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc
new file mode 100644
index 00000000000..fccbcf74d28
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_default_constructor/value.cc
@@ -0,0 +1,59 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 4.5.3 Type properties
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_nothrow_default_constructor;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<has_nothrow_default_constructor, void>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, float>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, EnumType>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int*>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int(*)(int)>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int (ClassType::*)>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int[2]>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, float[][3]>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int*[3]>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, int(*[][2])(int)>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor,
+ int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+ VERIFY( (test_category<has_nothrow_default_constructor, ClassType>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..a6bb87dc7c3
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_trivial_copy_constructor<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/typedefs.cc
new file mode 100644
index 00000000000..7b49ff3ed2e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/requirements/typedefs.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_trivial_copy_constructor<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/value.cc
new file mode 100644
index 00000000000..2ea418a2e9c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_constructor/value.cc
@@ -0,0 +1,56 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-30 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 4.5.3 Type properties
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_trivial_copy_constructor;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<has_trivial_copy_constructor, void>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, float>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, EnumType>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int*>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int(*)(int)>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int (ClassType::*)>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int[2]>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, float[][3]>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int*[3]>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int(*[][2])(int)>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor, int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_category<has_trivial_copy_constructor,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..03b3050495e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_trivial_default_constructor<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/typedefs.cc
new file mode 100644
index 00000000000..af8e7265532
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/requirements/typedefs.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-26 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_trivial_default_constructor<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/value.cc b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/value.cc
new file mode 100644
index 00000000000..fae5ace9f76
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_default_constructor/value.cc
@@ -0,0 +1,59 @@
+// { dg-options "-std=gnu++0x" }
+// 2004-12-26 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 4.5.3 Type properties
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_trivial_default_constructor;
+ using namespace __gnu_test;
+
+ VERIFY( (test_category<has_trivial_default_constructor, void>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, float>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, EnumType>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int*>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int(*)(int)>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int (ClassType::*)>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int[2]>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, float[][3]>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int*[3]>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, int(*[][2])(int)>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor,
+ int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+ VERIFY( (test_category<has_trivial_default_constructor, ClassType>(true)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc b/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
new file mode 100644
index 00000000000..37c5a0346d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+
+namespace gnu
+{
+ // C++0x changes from TR1.
+ using std::has_trivial_constructor;
+ using std::has_nothrow_constructor;
+ using std::has_trivial_copy;
+ using std::has_nothrow_copy;
+}
+
+// { dg-error "has not been declared" "" { target *-*-* } 27 }
+// { dg-error "has not been declared" "" { target *-*-* } 28 }
+// { dg-error "has not been declared" "" { target *-*-* } 29 }
+// { dg-error "has not been declared" "" { target *-*-* } 30 }
+
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..ca0ed884051
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct make_signed<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs.cc
new file mode 100644
index 00000000000..826e47ed3e8
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs.cc
@@ -0,0 +1,68 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+enum test_enum { first_selection };
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::make_signed;
+ using std::is_same;
+
+ // Positive tests.
+ typedef make_signed<const int>::type test2_type;
+ VERIFY( (is_same<test2_type, const int>::value) );
+
+ typedef make_signed<const unsigned int>::type test21c_type;
+ VERIFY( (is_same<test21c_type, const signed int>::value) );
+
+ typedef make_signed<volatile unsigned int>::type test21v_type;
+ VERIFY( (is_same<test21v_type, volatile signed int>::value) );
+
+ typedef make_signed<const volatile unsigned int>::type test21cv_type;
+ VERIFY( (is_same<test21cv_type, const volatile signed int>::value) );
+
+ typedef make_signed<const char>::type test22_type;
+ VERIFY( (is_same<test22_type, const signed char>::value) );
+
+ typedef make_signed<volatile wchar_t>::type test23_type;
+ VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) );
+
+#if 0
+ // XXX
+ // When is_signed works for floating points types this should pass
+ typedef make_signed<volatile float>::type test24_type;
+ VERIFY( (is_same<test24_type, volatile int>::value) );
+#endif
+
+ typedef make_signed<test_enum>::type test25_type;
+ VERIFY( (is_same<test25_type, int>::value) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
new file mode 100644
index 00000000000..aa94f2a4708
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
@@ -0,0 +1,53 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_character.h>
+
+enum test_enum { first_selection };
+
+void test01()
+{
+ using std::make_signed;
+
+ // Negative tests.
+ typedef make_signed<bool>::type test1_type;
+
+ typedef make_signed<__gnu_test::pod_uint>::type test2_type;
+
+ typedef make_signed<int[4]>::type test3_type;
+
+ typedef void (fn_type) ();
+ typedef make_signed<fn_type>::type test4_type;
+}
+
+// { dg-error "does not name a type" "" { target *-*-* } 34 }
+// { dg-error "instantiated from here" "" { target *-*-* } 36 }
+// { dg-error "instantiated from here" "" { target *-*-* } 38 }
+// { dg-error "instantiated from here" "" { target *-*-* } 41 }
+
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 320 }
+// { dg-error "declaration of" "" { target *-*-* } 268 }
+
+// { dg-excess-errors "At global scope" }
+// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..bc836a7d64a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct make_unsigned<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs.cc
new file mode 100644
index 00000000000..b09d3e93aa4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs.cc
@@ -0,0 +1,68 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+enum test_enum { first_selection };
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::make_unsigned;
+ using std::is_same;
+
+ // Positive tests.
+ typedef make_unsigned<const unsigned int>::type test2_type;
+ VERIFY( (is_same<test2_type, const unsigned int>::value) );
+
+ typedef make_unsigned<const signed int>::type test21c_type;
+ VERIFY( (is_same<test21c_type, const unsigned int>::value) );
+
+ typedef make_unsigned<volatile signed int>::type test21v_type;
+ VERIFY( (is_same<test21v_type, volatile unsigned int>::value) );
+
+ typedef make_unsigned<const volatile signed int>::type test21cv_type;
+ VERIFY( (is_same<test21cv_type, const volatile unsigned int>::value) );
+
+ typedef make_unsigned<const char>::type test22_type;
+ VERIFY( (is_same<test22_type, const unsigned char>::value) );
+
+ typedef make_unsigned<volatile wchar_t>::type test23_type;
+ VERIFY( (is_same<test23_type, volatile unsigned wchar_t>::value) );
+
+#if 0
+ // XXX
+ // When is_unsigned works for floating points types this should pass
+ typedef make_unsigned<volatile float>::type test24_type;
+ VERIFY( (is_same<test24_type, volatile unsigned int>::value) );
+#endif
+
+ typedef make_unsigned<test_enum>::type test25_type;
+ VERIFY( (is_same<test25_type, unsigned int>::value) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
new file mode 100644
index 00000000000..cc07d616954
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
@@ -0,0 +1,53 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+//
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+#include <testsuite_character.h>
+
+enum test_enum { first_selection };
+
+void test01()
+{
+ using std::make_unsigned;
+
+ // Negative tests.
+ typedef make_unsigned<bool>::type test1_type;
+
+ typedef make_unsigned<__gnu_test::pod_uint>::type test2_type;
+
+ typedef make_unsigned<int[4]>::type test3_type;
+
+ typedef void (fn_type) ();
+ typedef make_unsigned<fn_type>::type test4_type;
+}
+
+// { dg-error "does not name a type" "" { target *-*-* } 34 }
+// { dg-error "instantiated from here" "" { target *-*-* } 36 }
+// { dg-error "instantiated from here" "" { target *-*-* } 38 }
+// { dg-error "instantiated from here" "" { target *-*-* } 41 }
+
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 223 }
+// { dg-error "declaration of" "" { target *-*-* } 170 }
+
+// { dg-excess-errors "At global scope" }
+// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc
index cdead8f1ead..cdead8f1ead 100644
--- a/libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiation.cc
index dc7f85968c8..dc7f85968c8 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiation.cc
index 08008ee8c89..08008ee8c89 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiation.cc
index 279633a3ea0..279633a3ea0 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiation.cc
index 799541de6cb..799541de6cb 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiation.cc
index 170e9e75472..170e9e75472 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiation.cc
index a1b365c597b..a1b365c597b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
index 0c47da04033..0c47da04033 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor.cc
index f378b0b1178..f378b0b1178 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
index fc0beffae3e..fc0beffae3e 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
index 403f6473f6b..403f6473f6b 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
index 2e2abc56c4b..2e2abc56c4b 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/deque/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
index 4ad1127b9e5..4ad1127b9e5 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor.cc
index c20ac14e202..c20ac14e202 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
index 5df6fc8532c..5df6fc8532c 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
index 6783727be7a..6783727be7a 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
index c8f2026052e..c8f2026052e 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/list/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
index 873c27f86ed..873c27f86ed 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/bool/constructor.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/bool/constructor.cc
index 15b4a77a10b..15b4a77a10b 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/bool/constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/bool/constructor.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc
index 74968bd4b64..74968bd4b64 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
index c66faaec941..b850c71cf84 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
@@ -19,7 +19,7 @@
// USA.
// { dg-do compile }
-// { dg-error "no match" "" { target *-*-* } 706 }
+// { dg-error "no match" "" { target *-*-* } 620 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
index 8e0130bc9cf..194da7342a4 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
@@ -19,7 +19,7 @@
// USA.
// { dg-do compile }
-// { dg-error "no match" "" { target *-*-* } 706 }
+// { dg-error "no match" "" { target *-*-* } 620 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
index c82a5c4602d..c82a5c4602d 100644
--- a/libstdc++-v3/testsuite/23_containers/requirements/sequences/dr438/vector/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiations.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiation.cc
index f1395e9a80b..f1395e9a80b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiations.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiation.cc
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 85f256672be..70f2cb6f3d2 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -391,7 +391,7 @@ proc v3_target_compile_as_c { source dest type options } {
set cxxlibglossflags [libgloss_link_flags]
set cc_final [concat $cc_final $cxxlibglossflags]
set cc_final [concat $cc_final $includes]
- regsub -all ".nostdinc.." $cc_final "" cc_final
+ regsub -all {\s[-]nostdinc[+][+]} $cc_final "" cc_final
# This is needed for "C" tests, as this type of test may need the
# C++ includes. And if we're not testing in the build directory,
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..bf3481ab2e7
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct add_const<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_const.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/typedefs.cc
index 8669098bc3d..8669098bc3d 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_const.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..fdcd16545d3
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct add_cv<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_cv.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/typedefs.cc
index c197501b08e..c197501b08e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_cv.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..65f695b174c
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct add_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/add_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/typedefs.cc
index d87cd2e4271..d87cd2e4271 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/add_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..1cc7149fd07
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct add_reference<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/add_reference.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/typedefs.cc
index 29ad8c3d994..29ad8c3d994 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/add_reference.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..0aefd05dcb3
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct add_volatile<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_volatile.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/typedefs.cc
index 489b05950b9..489b05950b9 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_volatile.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..1469e1eb32a
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct aligned_storage<1, alignment_of<test_type>::value>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/aligned_storage.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/typedefs.cc
index bbc336c24c8..bbc336c24c8 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/aligned_storage.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..8a040e1f536
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct alignment_of<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc
index 8df7bba0a1d..8df7bba0a1d 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/alignment_of.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/value.cc
index 6da2822c6ee..6da2822c6ee 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/alignment_of.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..972a2b4b231
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct extent<test_type, 2>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/typedefs.cc
index c7d4b958c57..c7d4b958c57 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/extent.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/value.cc
index 6ccecacc06b..6ccecacc06b 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/extent.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..4537d495d4f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_nothrow_assign<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc
index 7251a3aaa63..7251a3aaa63 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/has_nothrow_assign.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/value.cc
index b74d932c148..b74d932c148 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/has_nothrow_assign.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..9e2e076b01c
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_nothrow_constructor<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/typedefs.cc
index 9e119845981..9e119845981 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/has_nothrow_constructor.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/value.cc
index 8296867fad9..02743a14e95 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/has_nothrow_constructor.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/value.cc
@@ -1,6 +1,6 @@
// 2004-12-29 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,9 +48,7 @@ void test01()
int (ClassType::*[2][3])>(true)) );
VERIFY( (test_category<has_nothrow_constructor,
int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Sanity check.
- VERIFY( (test_category<has_nothrow_constructor, ClassType>(false)) );
+ VERIFY( (test_category<has_nothrow_constructor, ClassType>(true)) );
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..a5d16f3cfa6
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_nothrow_copy<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc
index 4ec8cb0ab2f..4ec8cb0ab2f 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/has_nothrow_copy.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/value.cc
index 2ba1d9e073c..2ba1d9e073c 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/has_nothrow_copy.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..22312840fc2
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_trivial_assign<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc
index 124131d95bc..124131d95bc 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/has_trivial_assign.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/value.cc
index ac3553562c8..ac3553562c8 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/has_trivial_assign.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..061647be2b5
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_trivial_constructor<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/typedefs.cc
index f6a57fcb63d..f6a57fcb63d 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/has_trivial_constructor.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/value.cc
index 77dcf1fb8e8..f6b1a1aa526 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/has_trivial_constructor.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/value.cc
@@ -1,6 +1,6 @@
// 2004-12-26 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,9 +48,7 @@ void test01()
int (ClassType::*[2][3])>(true)) );
VERIFY( (test_category<has_trivial_constructor,
int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Sanity check.
- VERIFY( (test_category<has_trivial_constructor, ClassType>(false)) );
+ VERIFY( (test_category<has_trivial_constructor, ClassType>(true)) );
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..5adf42a0442
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_trivial_copy<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc
index 0996f4648d0..0996f4648d0 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/has_trivial_copy.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/value.cc
index 8158c183200..8158c183200 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/has_trivial_copy.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..41f594d7384
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_trivial_destructor<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc
index 948658943e7..948658943e7 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/has_trivial_destructor.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/value.cc
index 3af9c2673dd..197de982b2b 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/has_trivial_destructor.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/value.cc
@@ -1,6 +1,6 @@
// 2004-12-26 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,9 +48,7 @@ void test01()
int (ClassType::*[2][3])>(true)) );
VERIFY( (test_category<has_trivial_destructor,
int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Sanity check.
- VERIFY( (test_category<has_trivial_destructor, ClassType>(false)) );
+ VERIFY( (test_category<has_trivial_destructor, ClassType>(true)) );
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..458ed7ed6eb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct has_virtual_destructor<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc
index 94d81eafb21..94d81eafb21 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/has_virtual_destructor.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/value.cc
index 910aeded2d5..910aeded2d5 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_virtual_destructor/has_virtual_destructor.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..701b320432e
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct integral_constant<test_type, -3>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc
index e96c322ead0..e96c322ead0 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/static_definition.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/static_definition.cc
index bb2b3cd87cb..bb2b3cd87cb 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/static_definition.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/static_definition.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type_typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_type_typedefs.cc
index 853ea723c7a..853ea723c7a 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type_typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_type_typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_value.cc
index f3a65d62070..f3a65d62070 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..04707156c95
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_abstract<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc
index 49bb463de2e..49bb463de2e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/is_abstract.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/value.cc
index 89a10b3d3d3..89a10b3d3d3 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/is_abstract.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..e18948c37b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_arithmetic<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc
index 17cd0a06866..17cd0a06866 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/is_arithmetic.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/value.cc
index ddf0854ba77..ddf0854ba77 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/is_arithmetic.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..c70df4629c8
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_array<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/typedefs.cc
index 660403d4958..660403d4958 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/value.cc
index c38d1598100..c38d1598100 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..29853f2a051
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_base_of<test_type, test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc
index 37ad6c68ef5..37ad6c68ef5 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/is_base_of.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/value.cc
index 07c17948df0..07c17948df0 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/is_base_of.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..448ec8611a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_class<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/typedefs.cc
index 8ad546ac3b6..8ad546ac3b6 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/is_class.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/value.cc
index 5e88fb5b6d5..5e88fb5b6d5 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_class/is_class.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..f15cd270981
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_compound<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/typedefs.cc
index 906076e3ca4..906076e3ca4 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/is_compound.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/value.cc
index 1708f580eb9..1708f580eb9 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/is_compound.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..78174906f40
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_const<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/typedefs.cc
index 3a5dd667c2e..3a5dd667c2e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/is_const.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/value.cc
index 55f36566887..55f36566887 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/is_const.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..b2ada0391f9
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_convertible<test_type, test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc
index 6ee1de162b9..6ee1de162b9 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/value.cc
index 7d98b016773..7d98b016773 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..cfe503a3e09
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_empty<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/typedefs.cc
index 346581d1628..346581d1628 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/is_empty.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/value.cc
index 62b83a473d8..62b83a473d8 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/is_empty.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/24808.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/24808.cc
index 88a3cdceda6..88a3cdceda6 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/24808.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/24808.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..1df9091bab9
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_enum<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/typedefs.cc
index fc4e11bd4ab..fc4e11bd4ab 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/is_enum.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/value.cc
index 97a77db1146..97a77db1146 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/is_enum.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..e43a8e17619
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_floating_point<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc
index b19cf1f09f1..b19cf1f09f1 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/is_floating_point.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/value.cc
index 9b8e8463e5a..9b8e8463e5a 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/is_floating_point.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/24808.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/24808.cc
index 6ba9969a2ee..6ba9969a2ee 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/24808.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/24808.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..fcc695745e1
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_function<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/typedefs.cc
index db70185bf6f..db70185bf6f 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/is_function.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/value.cc
index 1ada9120b22..1ada9120b22 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/is_function.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..26c5b1da3b0
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_fundamental<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc
index a4744eda21a..a4744eda21a 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/is_fundamental.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/value.cc
index 8a756c5ee86..8a756c5ee86 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/is_fundamental.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d7396637295
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_integral<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/typedefs.cc
index 19d6a67422e..19d6a67422e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/is_integral.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/value.cc
index 2876c6d11a2..2876c6d11a2 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/is_integral.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..c9f35284e47
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_member_function_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/typedefs.cc
index 48f1f22cb30..48f1f22cb30 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/is_member_function_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/value.cc
index b0b3f802046..b0b3f802046 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/is_member_function_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..a57fe7de22c
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_member_object_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/typedefs.cc
index 0add4a0ad53..0add4a0ad53 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/is_member_object_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/value.cc
index e873edfa9a5..e873edfa9a5 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/is_member_object_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..4d13bd7542e
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_member_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc
index 65a882ca996..65a882ca996 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/is_member_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/value.cc
index 0b194bbcb66..0b194bbcb66 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/is_member_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/24808.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/24808.cc
index 70ba0167388..70ba0167388 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/24808.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/24808.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..c0e4ed7049b
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_object<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/typedefs.cc
index 61cf43f534c..61cf43f534c 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/is_object.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/value.cc
index 6283ece6876..6283ece6876 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/is_object.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..05fe8a1a3d6
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_pod<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/typedefs.cc
index 8dbfd3c38d4..8dbfd3c38d4 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/is_pod.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/value.cc
index 116af85d2d8..12a4a4533e7 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/is_pod.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/value.cc
@@ -1,6 +1,6 @@
// 2004-12-26 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -45,9 +45,7 @@ void test01()
VERIFY( (test_category<is_pod, int(*[][2])(int)>(true)) );
VERIFY( (test_category<is_pod, int (ClassType::*[2][3])>(true)) );
VERIFY( (test_category<is_pod, int (ClassType::*[][2][3]) (int)>(true)) );
-
- // Sanity check.
- VERIFY( (test_category<is_pod, ClassType>(false)) );
+ VERIFY( (test_category<is_pod, ClassType>(true)) );
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..9f90dd27709
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc
index 6ba35d16024..6ba35d16024 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/is_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/value.cc
index 7435647d54d..7435647d54d 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/is_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/24809.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/24809.cc
index 0b8ab0f7167..0b8ab0f7167 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/24809.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/24809.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..57235b16f65
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_polymorphic<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc
index 14ba6903180..14ba6903180 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/is_polymorphic.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/value.cc
index 6dc5c1c2c6d..6dc5c1c2c6d 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/is_polymorphic.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..e8c31fd4548
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_reference<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/typedefs.cc
index 30c9e275a33..30c9e275a33 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/is_reference.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/value.cc
index 8a799b7c424..8a799b7c424 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/is_reference.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..17e63d6a181
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_same<test_type, test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/typedefs.cc
index 460ebbbd5c7..460ebbbd5c7 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/is_same.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/value.cc
index 0fbae2eb357..0fbae2eb357 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/is_same.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d88abf37f61
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_scalar<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc
index b684c7cb185..b684c7cb185 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/is_scalar.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/value.cc
index e0cb20c2c4f..e0cb20c2c4f 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/is_scalar.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..1132721ee5d
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_signed<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/typedefs.cc
index 86730aeea7e..86730aeea7e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/is_signed.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/value.cc
index 351dde8d1a1..351dde8d1a1 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/is_signed.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..19fb2eb6467
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_union<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/typedefs.cc
index 9f24c5e9786..9f24c5e9786 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/is_union.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/value.cc
index e381f888b27..e381f888b27 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_union/is_union.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..5e245024873
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_unsigned<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc
index 4c90eced4bb..4c90eced4bb 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/is_unsigned.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/value.cc
index 19bb97526ef..19bb97526ef 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/is_unsigned.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..bfd42f3ed73
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_void<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/typedefs.cc
index 24d19130887..24d19130887 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/is_void.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/value.cc
index 6f0450869e0..6f0450869e0 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/is_void.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..98b62365546
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct is_volatile<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc
index 28794427b8c..28794427b8c 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/is_volatile.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/value.cc
index 6336ab7bf1e..6336ab7bf1e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/is_volatile.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/typedefs.cc
deleted file mode 100644
index 4e51378e4d4..00000000000
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/typedefs.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// 2005-01-11 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2005 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library 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.
-//
-// This library 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 this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-//
-// NB: This file is for testing tr1/type_traits with NO OTHER INCLUDES.
-
-#include <tr1/type_traits>
-
-// { dg-do compile }
-
-void test01()
-{
- // Check for required typedefs
- typedef std::tr1::aligned_storage<1, 1> test_type;
- typedef test_type::type type;
-}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d147481469a
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct rank<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/typedefs.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/typedefs.cc
index 800c316979f..800c316979f 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/typedefs.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/typedefs.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/rank.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/value.cc
index 334de47f8ef..334de47f8ef 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/rank.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..bb1717830e0
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_all_extents<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_all_extents.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/value.cc
index 8d0504e0485..8d0504e0485 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_all_extents.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..46af25ecd98
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_const<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/value.cc
index 792596ef290..792596ef290 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..be648a835a7
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_cv<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/value.cc
index 1afcc788eae..1afcc788eae 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..3446aea3f87
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_extent<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_extent.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/value.cc
index 886f844405b..886f844405b 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_extent.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d8c9deebafb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_pointer<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/remove_pointer.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/value.cc
index 6c17d024f5f..6c17d024f5f 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/remove_pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..40bc4fb9a1a
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_reference<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/remove_reference.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/value.cc
index e32312f812e..e32312f812e 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/remove_reference.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/value.cc
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..db3d3ec06cb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// 2007-04-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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 this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <tr1/type_traits>
+
+namespace std
+{
+ namespace tr1
+ {
+ typedef short test_type;
+ template struct remove_volatile<test_type>;
+ }
+}
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/value.cc
index 35c3d8e0994..35c3d8e0994 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/value.cc