semantics.c (begin_inline_definitions, [...]): Rename from finish_default_args and...
authorJason Merrill <jason@yorick.cygnus.com>
Wed, 31 Mar 1999 18:59:19 +0000 (18:59 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 31 Mar 1999 18:59:19 +0000 (13:59 -0500)
* semantics.c (begin_inline_definitions,
finish_inline_definitions): Rename from finish_default_args and
begin_inline_definitions, respectively, to something that isn't a
total lie.  :)
* parse.y (structsp): Adjust.
* tree.c (hash_tree_cons): Remove obsolete via_* parms.
(list_hash_lookup): Likewise.
(hash_tree_chain): Adjust.
* pt.c (tsubst): Adjust.
(tsubst_arg_types): Use plain hash_tree_cons.
* cp-tree.h (hash_tree_cons_simple): Lose.
* parse.y (declmods, nonempty_cv_qualifiers): Use hash_tree_cons.

From-SVN: r26092

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/parse.c
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c

index 06bb240f29cf51ee63b7184ab5ca2e4b6e66ed01..e96a2746561efa421ccc325acdca821d82602a78 100644 (file)
@@ -1,3 +1,19 @@
+1999-03-31  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * semantics.c (begin_inline_definitions,
+       finish_inline_definitions): Rename from finish_default_args and
+       begin_inline_definitions, respectively, to something that isn't a
+       total lie.  :)
+       * parse.y (structsp): Adjust.
+
+       * tree.c (hash_tree_cons): Remove obsolete via_* parms.
+       (list_hash_lookup): Likewise.
+       (hash_tree_chain): Adjust.
+       * pt.c (tsubst): Adjust.
+       (tsubst_arg_types): Use plain hash_tree_cons.
+       * cp-tree.h (hash_tree_cons_simple): Lose.
+       * parse.y (declmods, nonempty_cv_qualifiers): Use hash_tree_cons.
+
 Wed Mar 31 10:48:29 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
         * Makefile.in (hash.h): Generate using gperf language 'C', not
index 6c25aed646d1186405439b1ab92566c9ee145357..9babb014af5715b87a850256a775f83d6633e7f9 100644 (file)
@@ -3252,6 +3252,7 @@ extern tree begin_class_definition              PROTO((tree));
 extern tree finish_class_definition             PROTO((tree, tree, int));
 extern void finish_default_args                 PROTO((void));
 extern void begin_inline_definitions            PROTO((void));
+extern void finish_inline_definitions           PROTO((void));
 extern tree finish_member_class_template        PROTO((tree));
 extern void finish_template_decl                PROTO((tree));
 extern tree finish_template_type                PROTO((tree, tree, int));
@@ -3295,7 +3296,7 @@ extern tree build_cplus_array_type                PROTO((tree, tree));
 extern int layout_basetypes                    PROTO((tree, int));
 extern tree build_vbase_pointer_fields         PROTO((tree));
 extern tree build_base_fields                  PROTO((tree));
-extern tree hash_tree_cons                     PROTO((int, int, int, tree, tree, tree));
+extern tree hash_tree_cons                     PROTO((tree, tree, tree));
 extern tree hash_tree_chain                    PROTO((tree, tree));
 extern tree hash_chainon                       PROTO((tree, tree));
 extern tree make_binfo                         PROTO((tree, tree, tree, tree));
@@ -3347,13 +3348,12 @@ extern tree build_dummy_object                  PROTO((tree));
 extern tree maybe_dummy_object                 PROTO((tree, tree *));
 extern int is_dummy_object                     PROTO((tree));
 extern tree search_tree                         PROTO((tree, tree (*)(tree)));
+
 #define scratchalloc expralloc
 #define scratch_tree_cons expr_tree_cons
 #define build_scratch_list build_expr_list
 #define make_scratch_vec make_temp_vec
 #define push_scratch_obstack push_expression_obstack
-#define hash_tree_cons_simple(PURPOSE, VALUE, CHAIN) \
-  hash_tree_cons (0, 0, 0, (PURPOSE), (VALUE), (CHAIN))
 
 /* in typeck.c */
 extern int string_conv_p                       PROTO((tree, tree, int));
index e346e47b6919744d6f1fbce8bdbc9a4440aadca8..6e3b2111f26f356d475b76d035e4b8dedd12e69d 100644 (file)
@@ -682,56 +682,56 @@ static const short yyrline[] = { 0,
   1596,  1600,  1603,  1608,  1610,  1614,  1627,  1630,  1637,  1644,
   1649,  1651,  1656,  1658,  1665,  1667,  1671,  1675,  1681,  1685,
   1688,  1692,  1695,  1705,  1707,  1710,  1714,  1717,  1720,  1723,
-  1726,  1732,  1738,  1740,  1745,  1747,  1756,  1759,  1761,  1764,
-  1770,  1772,  1782,  1786,  1789,  1792,  1797,  1800,  1808,  1810,
-  1812,  1814,  1817,  1820,  1835,  1854,  1857,  1859,  1862,  1864,
-  1868,  1870,  1874,  1876,  1880,  1883,  1887,  1893,  1894,  1906,
-  1913,  1916,  1922,  1926,  1931,  1937,  1938,  1946,  1949,  1953,
-  1956,  1960,  1965,  1968,  1972,  1975,  1977,  1979,  1981,  1988,
-  1990,  1991,  1992,  1996,  1999,  2003,  2006,  2012,  2014,  2017,
-  2020,  2023,  2029,  2032,  2035,  2037,  2039,  2043,  2049,  2057,
-  2064,  2068,  2070,  2075,  2078,  2081,  2083,  2085,  2089,  2094,
-  2101,  2105,  2109,  2116,  2120,  2123,  2126,  2132,  2144,  2146,
-  2149,  2169,  2171,  2174,  2176,  2181,  2183,  2185,  2187,  2189,
-  2191,  2195,  2203,  2206,  2208,  2212,  2218,  2223,  2228,  2230,
-  2234,  2237,  2241,  2247,  2253,  2278,  2284,  2286,  2289,  2292,
-  2294,  2298,  2300,  2304,  2309,  2315,  2318,  2319,  2340,  2363,
-  2365,  2369,  2380,  2394,  2399,  2400,  2401,  2402,  2405,  2420,
-  2425,  2431,  2433,  2438,  2440,  2442,  2444,  2446,  2448,  2451,
-  2461,  2468,  2493,  2499,  2502,  2505,  2507,  2518,  2523,  2526,
-  2531,  2534,  2541,  2551,  2554,  2561,  2571,  2573,  2576,  2578,
-  2581,  2588,  2596,  2603,  2609,  2615,  2623,  2627,  2632,  2636,
-  2639,  2648,  2650,  2654,  2657,  2662,  2666,  2672,  2683,  2686,
-  2690,  2694,  2702,  2707,  2713,  2716,  2718,  2720,  2726,  2729,
-  2731,  2733,  2735,  2739,  2742,  2760,  2770,  2772,  2773,  2777,
-  2782,  2785,  2787,  2789,  2791,  2795,  2801,  2803,  2811,  2814,
-  2816,  2818,  2820,  2824,  2827,  2830,  2832,  2834,  2836,  2840,
-  2843,  2846,  2848,  2850,  2852,  2854,  2861,  2865,  2870,  2874,
-  2879,  2881,  2885,  2888,  2890,  2893,  2895,  2896,  2899,  2901,
-  2903,  2909,  2924,  2930,  2936,  2950,  2952,  2956,  2970,  2972,
-  2974,  2978,  2984,  2997,  2999,  3003,  3016,  3022,  3024,  3025,
-  3026,  3034,  3039,  3048,  3049,  3053,  3056,  3062,  3068,  3071,
-  3073,  3075,  3077,  3081,  3085,  3089,  3092,  3097,  3100,  3102,
-  3104,  3106,  3108,  3110,  3112,  3114,  3118,  3122,  3126,  3130,
-  3131,  3133,  3135,  3137,  3139,  3141,  3143,  3145,  3147,  3155,
-  3157,  3158,  3159,  3162,  3168,  3170,  3175,  3177,  3180,  3194,
-  3197,  3200,  3204,  3207,  3214,  3216,  3219,  3221,  3223,  3226,
-  3229,  3232,  3235,  3237,  3240,  3244,  3246,  3252,  3254,  3255,
-  3257,  3262,  3264,  3266,  3268,  3270,  3273,  3274,  3276,  3279,
-  3280,  3283,  3283,  3286,  3286,  3289,  3289,  3291,  3293,  3295,
-  3297,  3303,  3309,  3312,  3315,  3321,  3323,  3325,  3329,  3331,
-  3332,  3333,  3335,  3338,  3345,  3350,  3356,  3360,  3362,  3365,
-  3367,  3370,  3374,  3376,  3379,  3381,  3384,  3401,  3407,  3415,
-  3417,  3419,  3423,  3426,  3427,  3435,  3439,  3443,  3446,  3447,
-  3453,  3456,  3459,  3461,  3465,  3470,  3473,  3483,  3488,  3489,
-  3496,  3499,  3502,  3504,  3507,  3509,  3519,  3533,  3537,  3540,
-  3542,  3546,  3550,  3553,  3556,  3558,  3562,  3564,  3571,  3578,
-  3581,  3585,  3589,  3593,  3599,  3603,  3608,  3610,  3613,  3618,
-  3624,  3635,  3638,  3640,  3644,  3649,  3651,  3658,  3661,  3663,
-  3665,  3671,  3676,  3679,  3681,  3683,  3685,  3687,  3689,  3691,
-  3693,  3695,  3697,  3699,  3701,  3703,  3705,  3707,  3709,  3711,
-  3713,  3715,  3717,  3719,  3721,  3723,  3725,  3727,  3729,  3731,
-  3733,  3735,  3737,  3739,  3741,  3744,  3746
+  1726,  1732,  1738,  1740,  1745,  1747,  1765,  1768,  1770,  1773,
+  1779,  1781,  1791,  1795,  1798,  1801,  1806,  1809,  1817,  1819,
+  1821,  1823,  1826,  1829,  1844,  1863,  1866,  1868,  1871,  1873,
+  1877,  1879,  1883,  1885,  1889,  1892,  1896,  1902,  1903,  1915,
+  1922,  1925,  1931,  1935,  1940,  1946,  1947,  1955,  1958,  1962,
+  1965,  1969,  1974,  1977,  1981,  1984,  1986,  1988,  1990,  1997,
+  1999,  2000,  2001,  2005,  2008,  2012,  2015,  2021,  2023,  2026,
+  2029,  2032,  2038,  2041,  2044,  2046,  2048,  2052,  2058,  2066,
+  2073,  2077,  2079,  2084,  2087,  2090,  2092,  2094,  2098,  2103,
+  2110,  2114,  2118,  2125,  2129,  2132,  2135,  2141,  2153,  2157,
+  2162,  2182,  2184,  2187,  2189,  2194,  2196,  2198,  2200,  2202,
+  2204,  2208,  2216,  2219,  2221,  2225,  2231,  2236,  2241,  2243,
+  2247,  2250,  2254,  2260,  2266,  2291,  2297,  2299,  2302,  2305,
+  2307,  2311,  2313,  2317,  2322,  2328,  2331,  2332,  2353,  2376,
+  2378,  2382,  2393,  2407,  2412,  2413,  2414,  2415,  2418,  2433,
+  2438,  2444,  2446,  2451,  2453,  2455,  2457,  2459,  2461,  2464,
+  2474,  2481,  2506,  2512,  2515,  2518,  2520,  2531,  2536,  2539,
+  2544,  2547,  2554,  2564,  2567,  2574,  2584,  2586,  2589,  2591,
+  2594,  2601,  2609,  2616,  2622,  2628,  2636,  2640,  2645,  2649,
+  2652,  2661,  2663,  2667,  2670,  2675,  2679,  2685,  2696,  2699,
+  2703,  2707,  2715,  2720,  2726,  2729,  2731,  2733,  2739,  2742,
+  2744,  2746,  2748,  2752,  2755,  2773,  2783,  2785,  2786,  2790,
+  2795,  2798,  2800,  2802,  2804,  2808,  2814,  2816,  2824,  2827,
+  2829,  2831,  2833,  2837,  2840,  2843,  2845,  2847,  2849,  2853,
+  2856,  2859,  2861,  2863,  2865,  2867,  2874,  2878,  2883,  2887,
+  2892,  2894,  2898,  2901,  2903,  2906,  2908,  2909,  2912,  2914,
+  2916,  2922,  2937,  2943,  2949,  2963,  2965,  2969,  2983,  2985,
+  2987,  2991,  2997,  3010,  3012,  3016,  3029,  3035,  3037,  3038,
+  3039,  3047,  3052,  3061,  3062,  3066,  3069,  3075,  3081,  3084,
+  3086,  3088,  3090,  3094,  3098,  3102,  3105,  3110,  3113,  3115,
+  3117,  3119,  3121,  3123,  3125,  3127,  3131,  3135,  3139,  3143,
+  3144,  3146,  3148,  3150,  3152,  3154,  3156,  3158,  3160,  3168,
+  3170,  3171,  3172,  3175,  3181,  3183,  3188,  3190,  3193,  3207,
+  3210,  3213,  3217,  3220,  3227,  3229,  3232,  3234,  3236,  3239,
+  3242,  3245,  3248,  3250,  3253,  3257,  3259,  3265,  3267,  3268,
+  3270,  3275,  3277,  3279,  3281,  3283,  3286,  3287,  3289,  3292,
+  3293,  3296,  3296,  3299,  3299,  3302,  3302,  3304,  3306,  3308,
+  3310,  3316,  3322,  3325,  3328,  3334,  3336,  3338,  3342,  3344,
+  3345,  3346,  3348,  3351,  3358,  3363,  3369,  3373,  3375,  3378,
+  3380,  3383,  3387,  3389,  3392,  3394,  3397,  3414,  3420,  3428,
+  3430,  3432,  3436,  3439,  3440,  3448,  3452,  3456,  3459,  3460,
+  3466,  3469,  3472,  3474,  3478,  3483,  3486,  3496,  3501,  3502,
+  3509,  3512,  3515,  3517,  3520,  3522,  3532,  3546,  3550,  3553,
+  3555,  3559,  3563,  3566,  3569,  3571,  3575,  3577,  3584,  3591,
+  3594,  3598,  3602,  3606,  3612,  3616,  3621,  3623,  3626,  3631,
+  3637,  3648,  3651,  3653,  3657,  3662,  3664,  3671,  3674,  3676,
+  3678,  3684,  3689,  3692,  3694,  3696,  3698,  3700,  3702,  3704,
+  3706,  3708,  3710,  3712,  3714,  3716,  3718,  3720,  3722,  3724,
+  3726,  3728,  3730,  3732,  3734,  3736,  3738,  3740,  3742,  3744,
+  3746,  3748,  3750,  3752,  3754,  3757,  3759
 };
 #endif
 
@@ -5701,82 +5701,82 @@ case 386:
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 387:
-#line 1758 "parse.y"
+#line 1767 "parse.y"
 { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 388:
-#line 1760 "parse.y"
-{ yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ;
+#line 1769 "parse.y"
+{ yyval.ttype = hash_tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
 case 389:
-#line 1762 "parse.y"
-{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
+#line 1771 "parse.y"
+{ yyval.ttype = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 390:
-#line 1765 "parse.y"
+#line 1774 "parse.y"
 { if (extra_warnings && TREE_STATIC (yyval.ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
+                 yyval.ttype = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
 case 391:
-#line 1771 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
+#line 1780 "parse.y"
+{ yyval.ttype = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 392:
-#line 1773 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
+#line 1782 "parse.y"
+{ yyval.ttype = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 393:
-#line 1784 "parse.y"
+#line 1793 "parse.y"
 { yyval.ftype.t = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 394:
-#line 1787 "parse.y"
+#line 1796 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 395:
-#line 1790 "parse.y"
+#line 1799 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 396:
-#line 1793 "parse.y"
+#line 1802 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 397:
-#line 1799 "parse.y"
+#line 1808 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 398:
-#line 1801 "parse.y"
+#line 1810 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 400:
-#line 1811 "parse.y"
+#line 1820 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 401:
-#line 1813 "parse.y"
+#line 1822 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 402:
-#line 1815 "parse.y"
+#line 1824 "parse.y"
 { yyval.ftype.t = finish_typeof (yyvsp[-1].ttype);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 403:
-#line 1818 "parse.y"
+#line 1827 "parse.y"
 { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 404:
-#line 1821 "parse.y"
+#line 1830 "parse.y"
 { tree type = TREE_TYPE (yyvsp[-1].ttype);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5793,7 +5793,7 @@ case 404:
                ;
     break;}
 case 405:
-#line 1836 "parse.y"
+#line 1845 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5810,200 +5810,200 @@ case 405:
                ;
     break;}
 case 406:
-#line 1856 "parse.y"
+#line 1865 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 407:
-#line 1858 "parse.y"
+#line 1867 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 410:
-#line 1865 "parse.y"
+#line 1874 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 412:
-#line 1871 "parse.y"
+#line 1880 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 414:
-#line 1877 "parse.y"
+#line 1886 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 415:
-#line 1882 "parse.y"
+#line 1891 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 416:
-#line 1884 "parse.y"
+#line 1893 "parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 417:
-#line 1889 "parse.y"
+#line 1898 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes); ;
     break;}
 case 418:
-#line 1893 "parse.y"
+#line 1902 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
     break;}
 case 419:
-#line 1895 "parse.y"
+#line 1904 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                          yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 420:
-#line 1908 "parse.y"
+#line 1917 "parse.y"
 { yyvsp[0].itype = parse_decl (yyvsp[-3].ttype, yyvsp[-4].ttype, 
                                           yyvsp[-1].ttype, 1, &yyval.ttype); ;
     break;}
 case 421:
-#line 1913 "parse.y"
+#line 1922 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1,
                                  LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
 case 422:
-#line 1917 "parse.y"
+#line 1926 "parse.y"
 { tree d;
                  yyval.itype = parse_decl (yyvsp[-2].ttype, yyvsp[-3].ttype, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 423:
-#line 1924 "parse.y"
+#line 1933 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 424:
-#line 1928 "parse.y"
+#line 1937 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 425:
-#line 1933 "parse.y"
+#line 1942 "parse.y"
 { /* Set things up as initdcl0_innards expects.  */
              yyvsp[0].ttype = yyvsp[-1].ttype; 
               yyvsp[-1].ttype = NULL_TREE; ;
     break;}
 case 426:
-#line 1937 "parse.y"
+#line 1946 "parse.y"
 {;
     break;}
 case 427:
-#line 1939 "parse.y"
+#line 1948 "parse.y"
 { tree d;
                  parse_decl(yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 428:
-#line 1948 "parse.y"
+#line 1957 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 429:
-#line 1950 "parse.y"
+#line 1959 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 430:
-#line 1955 "parse.y"
+#line 1964 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 431:
-#line 1957 "parse.y"
+#line 1966 "parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 432:
-#line 1962 "parse.y"
+#line 1971 "parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
 case 433:
-#line 1967 "parse.y"
+#line 1976 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 434:
-#line 1969 "parse.y"
+#line 1978 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 435:
-#line 1974 "parse.y"
+#line 1983 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 436:
-#line 1976 "parse.y"
+#line 1985 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 437:
-#line 1978 "parse.y"
+#line 1987 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
 case 438:
-#line 1980 "parse.y"
+#line 1989 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
 case 439:
-#line 1982 "parse.y"
+#line 1991 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 444:
-#line 1998 "parse.y"
+#line 2007 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 445:
-#line 2000 "parse.y"
+#line 2009 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 446:
-#line 2005 "parse.y"
+#line 2014 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 447:
-#line 2007 "parse.y"
+#line 2016 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 449:
-#line 2015 "parse.y"
+#line 2024 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 450:
-#line 2018 "parse.y"
+#line 2027 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 451:
-#line 2021 "parse.y"
+#line 2030 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 452:
-#line 2024 "parse.y"
+#line 2033 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 453:
-#line 2031 "parse.y"
+#line 2040 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 454:
-#line 2033 "parse.y"
+#line 2042 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 455:
-#line 2036 "parse.y"
+#line 2045 "parse.y"
 { yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 456:
-#line 2038 "parse.y"
+#line 2047 "parse.y"
 { yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 457:
-#line 2040 "parse.y"
+#line 2049 "parse.y"
 { yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 458:
-#line 2045 "parse.y"
+#line 2054 "parse.y"
 { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
                                  NULL_TREE, 2);
                  reinit_parse_for_function (); ;
     break;}
 case 459:
-#line 2051 "parse.y"
+#line 2060 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -6012,7 +6012,7 @@ case 459:
                ;
     break;}
 case 460:
-#line 2058 "parse.y"
+#line 2067 "parse.y"
 { 
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -6021,33 +6021,33 @@ case 460:
                ;
     break;}
 case 461:
-#line 2065 "parse.y"
+#line 2074 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
 case 464:
-#line 2077 "parse.y"
+#line 2086 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 465:
-#line 2079 "parse.y"
+#line 2088 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
     break;}
 case 467:
-#line 2084 "parse.y"
+#line 2093 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 468:
-#line 2086 "parse.y"
+#line 2095 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 469:
-#line 2091 "parse.y"
+#line 2100 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (yyvsp[-1].ttype); ;
     break;}
 case 470:
-#line 2095 "parse.y"
+#line 2104 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -6056,19 +6056,19 @@ case 470:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 471:
-#line 2102 "parse.y"
+#line 2111 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 472:
-#line 2106 "parse.y"
+#line 2115 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (make_anon_name ()); ;
     break;}
 case 473:
-#line 2110 "parse.y"
+#line 2119 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -6077,30 +6077,30 @@ case 473:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 474:
-#line 2117 "parse.y"
+#line 2126 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (make_anon_name()));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 475:
-#line 2121 "parse.y"
+#line 2130 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 476:
-#line 2124 "parse.y"
+#line 2133 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 477:
-#line 2127 "parse.y"
+#line 2136 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0; 
                  if (!processing_template_decl)
                    cp_pedwarn ("using `typename' outside of template"); ;
     break;}
 case 478:
-#line 2134 "parse.y"
+#line 2143 "parse.y"
 { 
                  int semi;
 
@@ -6112,17 +6112,21 @@ case 478:
                ;
     break;}
 case 479:
-#line 2144 "parse.y"
-{ finish_default_args (); ;
+#line 2153 "parse.y"
+{
+                 begin_inline_definitions ();
+               ;
     break;}
 case 480:
-#line 2146 "parse.y"
-{ yyval.ftype.t = yyvsp[-3].ttype;
+#line 2157 "parse.y"
+{
+                 finish_inline_definitions ();
+                 yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
-                 begin_inline_definitions (); ;
+               ;
     break;}
 case 481:
-#line 2150 "parse.y"
+#line 2163 "parse.y"
 {
                  yyval.ftype.new_type_flag = 0;
                  if (TYPE_BINFO (yyvsp[0].ttype) == NULL_TREE)
@@ -6142,88 +6146,88 @@ case 481:
                ;
     break;}
 case 485:
-#line 2177 "parse.y"
+#line 2190 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
 case 487:
-#line 2184 "parse.y"
+#line 2197 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 488:
-#line 2186 "parse.y"
+#line 2199 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 489:
-#line 2188 "parse.y"
+#line 2201 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 490:
-#line 2190 "parse.y"
+#line 2203 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
 case 491:
-#line 2192 "parse.y"
+#line 2205 "parse.y"
 { yyval.ttype = build_decl_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 492:
-#line 2197 "parse.y"
+#line 2210 "parse.y"
 { 
                  current_aggr = yyvsp[-1].ttype; 
                  yyval.ttype = yyvsp[0].ttype; 
                ;
     break;}
 case 493:
-#line 2205 "parse.y"
+#line 2218 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 494:
-#line 2207 "parse.y"
+#line 2220 "parse.y"
 { yyungetc ('{', 1); ;
     break;}
 case 495:
-#line 2209 "parse.y"
+#line 2222 "parse.y"
 { yyungetc (':', 1); ;
     break;}
 case 496:
-#line 2214 "parse.y"
+#line 2227 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 497:
-#line 2219 "parse.y"
+#line 2232 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 498:
-#line 2224 "parse.y"
+#line 2237 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 499:
-#line 2229 "parse.y"
+#line 2242 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 500:
-#line 2231 "parse.y"
+#line 2244 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 501:
-#line 2236 "parse.y"
+#line 2249 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 1); ;
     break;}
 case 502:
-#line 2238 "parse.y"
+#line 2251 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
     break;}
 case 503:
-#line 2242 "parse.y"
+#line 2255 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
@@ -6231,14 +6235,14 @@ case 503:
                ;
     break;}
 case 504:
-#line 2248 "parse.y"
+#line 2261 "parse.y"
 { 
                  if (yyvsp[0].ttype != error_mark_node)
                    push_scope (CP_DECL_CONTEXT (yyvsp[0].ttype)); 
                ;
     break;}
 case 505:
-#line 2253 "parse.y"
+#line 2266 "parse.y"
 { 
                  if (yyvsp[-2].ttype != error_mark_node)
                    {
@@ -6264,44 +6268,44 @@ case 505:
                ;
     break;}
 case 506:
-#line 2280 "parse.y"
+#line 2293 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), 0);
                  yyungetc ('{', 1); ;
     break;}
 case 509:
-#line 2291 "parse.y"
+#line 2304 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 510:
-#line 2293 "parse.y"
+#line 2306 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
 case 511:
-#line 2295 "parse.y"
+#line 2308 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 513:
-#line 2301 "parse.y"
+#line 2314 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 514:
-#line 2306 "parse.y"
+#line 2319 "parse.y"
 { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype,
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
 case 515:
-#line 2310 "parse.y"
+#line 2323 "parse.y"
 { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
 case 516:
-#line 2317 "parse.y"
+#line 2330 "parse.y"
 { if (yyval.ttype != error_mark_node) yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
 case 518:
-#line 2320 "parse.y"
+#line 2333 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6324,7 +6328,7 @@ case 518:
                ;
     break;}
 case 519:
-#line 2341 "parse.y"
+#line 2354 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6347,13 +6351,13 @@ case 519:
                ;
     break;}
 case 521:
-#line 2366 "parse.y"
+#line 2379 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  yyval.ttype = access_default_virtual_node; ;
     break;}
 case 522:
-#line 2370 "parse.y"
+#line 2383 "parse.y"
 {
                  if (yyvsp[-2].ttype != access_default_virtual_node)
                    error ("multiple access specifiers");
@@ -6366,7 +6370,7 @@ case 522:
                ;
     break;}
 case 523:
-#line 2381 "parse.y"
+#line 2394 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  else if (yyval.ttype == access_public_node)
@@ -6380,11 +6384,11 @@ case 523:
                ;
     break;}
 case 524:
-#line 2396 "parse.y"
+#line 2409 "parse.y"
 { yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
     break;}
 case 529:
-#line 2407 "parse.y"
+#line 2420 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6396,49 +6400,49 @@ case 529:
                 ;
     break;}
 case 530:
-#line 2422 "parse.y"
+#line 2435 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
 case 531:
-#line 2426 "parse.y"
+#line 2439 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
 case 533:
-#line 2434 "parse.y"
+#line 2447 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
 case 534:
-#line 2439 "parse.y"
+#line 2452 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 535:
-#line 2441 "parse.y"
+#line 2454 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 536:
-#line 2443 "parse.y"
+#line 2456 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 537:
-#line 2445 "parse.y"
+#line 2458 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 538:
-#line 2447 "parse.y"
+#line 2460 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 539:
-#line 2449 "parse.y"
+#line 2462 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 540:
-#line 2452 "parse.y"
+#line 2465 "parse.y"
 {  
                  if (yyvsp[0].ttype)
                    yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6450,14 +6454,14 @@ case 540:
                ;
     break;}
 case 541:
-#line 2462 "parse.y"
+#line 2475 "parse.y"
 { 
                  yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); 
                  finish_template_decl (yyvsp[-2].ttype);
                ;
     break;}
 case 542:
-#line 2473 "parse.y"
+#line 2486 "parse.y"
 {
                  /* Most of the productions for component_decl only
                     allow the creation of one new member, so we call
@@ -6480,7 +6484,7 @@ case 542:
                ;
     break;}
 case 543:
-#line 2494 "parse.y"
+#line 2507 "parse.y"
 { 
                  if (!yyvsp[0].itype)
                    grok_x_components (yyvsp[-1].ttype);
@@ -6488,45 +6492,45 @@ case 543:
                ;
     break;}
 case 544:
-#line 2500 "parse.y"
+#line 2513 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
 case 545:
-#line 2503 "parse.y"
+#line 2516 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
 case 546:
-#line 2506 "parse.y"
+#line 2519 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 547:
-#line 2508 "parse.y"
+#line 2521 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 548:
-#line 2519 "parse.y"
+#line 2532 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
                  yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, attrs)); ;
     break;}
 case 549:
-#line 2524 "parse.y"
+#line 2537 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
 case 550:
-#line 2527 "parse.y"
+#line 2540 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
 case 551:
-#line 2533 "parse.y"
+#line 2546 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 552:
-#line 2535 "parse.y"
+#line 2548 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6535,7 +6539,7 @@ case 552:
                ;
     break;}
 case 553:
-#line 2542 "parse.y"
+#line 2555 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6545,11 +6549,11 @@ case 553:
                ;
     break;}
 case 554:
-#line 2553 "parse.y"
+#line 2566 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 555:
-#line 2555 "parse.y"
+#line 2568 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6558,7 +6562,7 @@ case 555:
                ;
     break;}
 case 556:
-#line 2562 "parse.y"
+#line 2575 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6568,7 +6572,7 @@ case 556:
                ;
     break;}
 case 561:
-#line 2583 "parse.y"
+#line 2596 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6576,7 +6580,7 @@ case 561:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 562:
-#line 2589 "parse.y"
+#line 2602 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6584,7 +6588,7 @@ case 562:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 563:
-#line 2598 "parse.y"
+#line 2611 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6592,7 +6596,7 @@ case 563:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 564:
-#line 2604 "parse.y"
+#line 2617 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6600,7 +6604,7 @@ case 564:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 565:
-#line 2610 "parse.y"
+#line 2623 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6608,7 +6612,7 @@ case 565:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 566:
-#line 2616 "parse.y"
+#line 2629 "parse.y"
 { split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-3].ttype = current_declspecs;
@@ -6616,54 +6620,54 @@ case 566:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 567:
-#line 2625 "parse.y"
+#line 2638 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 568:
-#line 2628 "parse.y"
+#line 2641 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 569:
-#line 2634 "parse.y"
+#line 2647 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 570:
-#line 2637 "parse.y"
+#line 2650 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 571:
-#line 2640 "parse.y"
+#line 2653 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 573:
-#line 2651 "parse.y"
+#line 2664 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 574:
-#line 2656 "parse.y"
+#line 2669 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
     break;}
 case 575:
-#line 2658 "parse.y"
+#line 2671 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
     break;}
 case 576:
-#line 2664 "parse.y"
+#line 2677 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 577:
-#line 2667 "parse.y"
+#line 2680 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 578:
-#line 2674 "parse.y"
+#line 2687 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6673,71 +6677,71 @@ case 578:
                ;
     break;}
 case 579:
-#line 2685 "parse.y"
+#line 2698 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 580:
-#line 2687 "parse.y"
+#line 2700 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 581:
-#line 2692 "parse.y"
-{ yyval.ftype.t = build_decl_list (NULL_TREE, yyvsp[0].ttype); 
+#line 2705 "parse.y"
+{ yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 582:
-#line 2695 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
+#line 2708 "parse.y"
+{ yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 583:
-#line 2704 "parse.y"
+#line 2717 "parse.y"
 { yyval.itype = suspend_momentary (); ;
     break;}
 case 584:
-#line 2709 "parse.y"
+#line 2722 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 585:
-#line 2715 "parse.y"
+#line 2728 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 586:
-#line 2717 "parse.y"
+#line 2730 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 587:
-#line 2719 "parse.y"
+#line 2732 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
 case 588:
-#line 2721 "parse.y"
+#line 2734 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
 case 589:
-#line 2728 "parse.y"
+#line 2741 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 590:
-#line 2730 "parse.y"
+#line 2743 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 591:
-#line 2732 "parse.y"
+#line 2745 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 592:
-#line 2734 "parse.y"
+#line 2747 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 593:
-#line 2736 "parse.y"
+#line 2749 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 595:
-#line 2744 "parse.y"
+#line 2757 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
@@ -6756,7 +6760,7 @@ case 595:
                ;
     break;}
 case 596:
-#line 2761 "parse.y"
+#line 2774 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6766,37 +6770,37 @@ case 596:
                ;
     break;}
 case 599:
-#line 2774 "parse.y"
+#line 2787 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 600:
-#line 2779 "parse.y"
+#line 2792 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
 case 601:
-#line 2784 "parse.y"
+#line 2797 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 602:
-#line 2786 "parse.y"
+#line 2799 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 603:
-#line 2788 "parse.y"
+#line 2801 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 604:
-#line 2790 "parse.y"
+#line 2803 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 605:
-#line 2792 "parse.y"
+#line 2805 "parse.y"
 { push_nested_class (yyvsp[-1].ttype, 3);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
                  TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
     break;}
 case 608:
-#line 2804 "parse.y"
+#line 2817 "parse.y"
 {
                  /* Provide support for '(' attributes '*' declarator ')'
                     etc */
@@ -6804,122 +6808,122 @@ case 608:
                ;
     break;}
 case 609:
-#line 2813 "parse.y"
+#line 2826 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 610:
-#line 2815 "parse.y"
+#line 2828 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 611:
-#line 2817 "parse.y"
+#line 2830 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 612:
-#line 2819 "parse.y"
+#line 2832 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 613:
-#line 2821 "parse.y"
+#line 2834 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 615:
-#line 2829 "parse.y"
+#line 2842 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 616:
-#line 2831 "parse.y"
+#line 2844 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 617:
-#line 2833 "parse.y"
+#line 2846 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 618:
-#line 2835 "parse.y"
+#line 2848 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 619:
-#line 2837 "parse.y"
+#line 2850 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 621:
-#line 2845 "parse.y"
+#line 2858 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 622:
-#line 2847 "parse.y"
+#line 2860 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 623:
-#line 2849 "parse.y"
+#line 2862 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 624:
-#line 2851 "parse.y"
+#line 2864 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 625:
-#line 2853 "parse.y"
+#line 2866 "parse.y"
 { enter_scope_of (yyvsp[0].ttype); ;
     break;}
 case 626:
-#line 2855 "parse.y"
+#line 2868 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
                  enter_scope_of (yyval.ttype);
                ;
     break;}
 case 627:
-#line 2863 "parse.y"
+#line 2876 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 628:
-#line 2866 "parse.y"
+#line 2879 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 629:
-#line 2872 "parse.y"
+#line 2885 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 630:
-#line 2875 "parse.y"
+#line 2888 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 632:
-#line 2882 "parse.y"
+#line 2895 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 633:
-#line 2887 "parse.y"
+#line 2900 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 634:
-#line 2889 "parse.y"
+#line 2902 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 635:
-#line 2891 "parse.y"
+#line 2904 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 640:
-#line 2902 "parse.y"
+#line 2915 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 641:
-#line 2904 "parse.y"
+#line 2917 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 642:
-#line 2911 "parse.y"
+#line 2924 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -6935,7 +6939,7 @@ case 642:
                ;
     break;}
 case 643:
-#line 2925 "parse.y"
+#line 2938 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -6943,7 +6947,7 @@ case 643:
                ;
     break;}
 case 644:
-#line 2931 "parse.y"
+#line 2944 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -6951,15 +6955,15 @@ case 644:
                ;
     break;}
 case 645:
-#line 2937 "parse.y"
+#line 2950 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
 case 647:
-#line 2953 "parse.y"
+#line 2966 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 648:
-#line 2958 "parse.y"
+#line 2971 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6974,26 +6978,26 @@ case 648:
                ;
     break;}
 case 649:
-#line 2971 "parse.y"
+#line 2984 "parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
     break;}
 case 650:
-#line 2973 "parse.y"
+#line 2986 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 651:
-#line 2975 "parse.y"
+#line 2988 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 652:
-#line 2980 "parse.y"
+#line 2993 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
 case 653:
-#line 2985 "parse.y"
+#line 2998 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7008,15 +7012,15 @@ case 653:
                ;
     break;}
 case 654:
-#line 2998 "parse.y"
+#line 3011 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 655:
-#line 3000 "parse.y"
+#line 3013 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 656:
-#line 3005 "parse.y"
+#line 3018 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -7030,7 +7034,7 @@ case 656:
                ;
     break;}
 case 657:
-#line 3017 "parse.y"
+#line 3030 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -7038,11 +7042,11 @@ case 657:
                ;
     break;}
 case 658:
-#line 3023 "parse.y"
+#line 3036 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
 case 661:
-#line 3027 "parse.y"
+#line 3040 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -7050,11 +7054,11 @@ case 661:
                ;
     break;}
 case 662:
-#line 3036 "parse.y"
+#line 3049 "parse.y"
 { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 663:
-#line 3041 "parse.y"
+#line 3054 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -7064,148 +7068,148 @@ case 663:
                ;
     break;}
 case 665:
-#line 3050 "parse.y"
+#line 3063 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 666:
-#line 3055 "parse.y"
+#line 3068 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
 case 667:
-#line 3057 "parse.y"
+#line 3070 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
 case 668:
-#line 3064 "parse.y"
+#line 3077 "parse.y"
 { got_scope = void_type_node; ;
     break;}
 case 669:
-#line 3070 "parse.y"
+#line 3083 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 670:
-#line 3072 "parse.y"
+#line 3085 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 671:
-#line 3074 "parse.y"
+#line 3087 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 672:
-#line 3076 "parse.y"
+#line 3089 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 673:
-#line 3078 "parse.y"
+#line 3091 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
 case 674:
-#line 3082 "parse.y"
+#line 3095 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 676:
-#line 3091 "parse.y"
+#line 3104 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 677:
-#line 3093 "parse.y"
+#line 3106 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 678:
-#line 3099 "parse.y"
+#line 3112 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 679:
-#line 3101 "parse.y"
+#line 3114 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 680:
-#line 3103 "parse.y"
+#line 3116 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
 case 681:
-#line 3105 "parse.y"
+#line 3118 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
 case 682:
-#line 3107 "parse.y"
+#line 3120 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 683:
-#line 3109 "parse.y"
+#line 3122 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 684:
-#line 3111 "parse.y"
+#line 3124 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
 case 685:
-#line 3113 "parse.y"
+#line 3126 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
 case 686:
-#line 3115 "parse.y"
+#line 3128 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
 case 687:
-#line 3119 "parse.y"
+#line 3132 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 689:
-#line 3128 "parse.y"
+#line 3141 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 691:
-#line 3132 "parse.y"
+#line 3145 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 692:
-#line 3134 "parse.y"
+#line 3147 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 693:
-#line 3136 "parse.y"
+#line 3149 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 694:
-#line 3138 "parse.y"
+#line 3151 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 695:
-#line 3140 "parse.y"
+#line 3153 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 696:
-#line 3142 "parse.y"
+#line 3155 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 697:
-#line 3144 "parse.y"
+#line 3157 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 698:
-#line 3146 "parse.y"
+#line 3159 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 699:
-#line 3148 "parse.y"
+#line 3161 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
 case 706:
-#line 3171 "parse.y"
+#line 3184 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
 case 709:
-#line 3182 "parse.y"
+#line 3195 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7216,181 +7220,181 @@ case 709:
                ;
     break;}
 case 710:
-#line 3196 "parse.y"
+#line 3209 "parse.y"
 {;
     break;}
 case 712:
-#line 3202 "parse.y"
+#line 3215 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
 case 713:
-#line 3204 "parse.y"
+#line 3217 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
 case 714:
-#line 3209 "parse.y"
+#line 3222 "parse.y"
 {
                  yyval.ttype = begin_if_stmt ();
                  cond_stmt_keyword = "if";
                ;
     break;}
 case 715:
-#line 3214 "parse.y"
+#line 3227 "parse.y"
 { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 716:
-#line 3216 "parse.y"
+#line 3229 "parse.y"
 { yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
     break;}
 case 718:
-#line 3221 "parse.y"
+#line 3234 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
 case 719:
-#line 3223 "parse.y"
+#line 3236 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
 case 720:
-#line 3228 "parse.y"
+#line 3241 "parse.y"
 {;
     break;}
 case 722:
-#line 3234 "parse.y"
+#line 3247 "parse.y"
 { finish_stmt (); ;
     break;}
 case 723:
-#line 3236 "parse.y"
+#line 3249 "parse.y"
 { finish_expr_stmt (yyvsp[-1].ttype); ;
     break;}
 case 724:
-#line 3238 "parse.y"
+#line 3251 "parse.y"
 { begin_else_clause (); ;
     break;}
 case 725:
-#line 3240 "parse.y"
+#line 3253 "parse.y"
 { 
                  finish_else_clause (yyvsp[-3].ttype); 
                  finish_if_stmt ();
                ;
     break;}
 case 726:
-#line 3245 "parse.y"
+#line 3258 "parse.y"
 { finish_if_stmt (); ;
     break;}
 case 727:
-#line 3247 "parse.y"
+#line 3260 "parse.y"
 {
                  yyval.ttype = begin_while_stmt ();
                  cond_stmt_keyword = "while";
                ;
     break;}
 case 728:
-#line 3252 "parse.y"
+#line 3265 "parse.y"
 { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 729:
-#line 3254 "parse.y"
+#line 3267 "parse.y"
 { finish_while_stmt (yyvsp[-3].ttype); ;
     break;}
 case 730:
-#line 3256 "parse.y"
+#line 3269 "parse.y"
 { yyval.ttype = begin_do_stmt (); ;
     break;}
 case 731:
-#line 3258 "parse.y"
+#line 3271 "parse.y"
 {
                  finish_do_body (yyvsp[-2].ttype);
                  cond_stmt_keyword = "do";
                ;
     break;}
 case 732:
-#line 3263 "parse.y"
+#line 3276 "parse.y"
 { finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
 case 733:
-#line 3265 "parse.y"
+#line 3278 "parse.y"
 { yyval.ttype = begin_for_stmt (); ;
     break;}
 case 734:
-#line 3267 "parse.y"
+#line 3280 "parse.y"
 { finish_for_init_stmt (yyvsp[-2].ttype); ;
     break;}
 case 735:
-#line 3269 "parse.y"
+#line 3282 "parse.y"
 { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
 case 736:
-#line 3271 "parse.y"
+#line 3284 "parse.y"
 { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
     break;}
 case 737:
-#line 3273 "parse.y"
+#line 3286 "parse.y"
 { finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
     break;}
 case 738:
-#line 3275 "parse.y"
+#line 3288 "parse.y"
 { begin_switch_stmt (); ;
     break;}
 case 739:
-#line 3277 "parse.y"
+#line 3290 "parse.y"
 { yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
     break;}
 case 740:
-#line 3279 "parse.y"
+#line 3292 "parse.y"
 { finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 741:
-#line 3281 "parse.y"
+#line 3294 "parse.y"
 { finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 743:
-#line 3284 "parse.y"
+#line 3297 "parse.y"
 { finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 745:
-#line 3287 "parse.y"
+#line 3300 "parse.y"
 { finish_case_label (NULL_TREE, NULL_TREE); ;
     break;}
 case 747:
-#line 3290 "parse.y"
+#line 3303 "parse.y"
 { finish_break_stmt (); ;
     break;}
 case 748:
-#line 3292 "parse.y"
+#line 3305 "parse.y"
 { finish_continue_stmt (); ;
     break;}
 case 749:
-#line 3294 "parse.y"
+#line 3307 "parse.y"
 { finish_return_stmt (NULL_TREE); ;
     break;}
 case 750:
-#line 3296 "parse.y"
+#line 3309 "parse.y"
 { finish_return_stmt (yyvsp[-1].ttype); ;
     break;}
 case 751:
-#line 3298 "parse.y"
+#line 3311 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
 case 752:
-#line 3304 "parse.y"
+#line 3317 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
 case 753:
-#line 3310 "parse.y"
+#line 3323 "parse.y"
 { finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 754:
-#line 3314 "parse.y"
+#line 3327 "parse.y"
 { finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
 case 755:
-#line 3316 "parse.y"
+#line 3329 "parse.y"
 { 
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids computed gotos");
@@ -7398,29 +7402,29 @@ case 755:
                ;
     break;}
 case 756:
-#line 3322 "parse.y"
+#line 3335 "parse.y"
 { finish_goto_stmt (yyvsp[-1].ttype); ;
     break;}
 case 757:
-#line 3324 "parse.y"
+#line 3337 "parse.y"
 { finish_stmt (); ;
     break;}
 case 758:
-#line 3326 "parse.y"
+#line 3339 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
 case 759:
-#line 3330 "parse.y"
+#line 3343 "parse.y"
 { finish_stmt (); ;
     break;}
 case 762:
-#line 3334 "parse.y"
+#line 3347 "parse.y"
 { do_local_using_decl (yyvsp[0].ttype); ;
     break;}
 case 764:
-#line 3340 "parse.y"
+#line 3353 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -7428,54 +7432,54 @@ case 764:
                ;
     break;}
 case 765:
-#line 3346 "parse.y"
+#line 3359 "parse.y"
 { 
                   expand_start_all_catch (); 
                 ;
     break;}
 case 766:
-#line 3350 "parse.y"
+#line 3363 "parse.y"
 {
                  expand_end_all_catch ();
                  yyval.itype = yyvsp[-3].itype;
                ;
     break;}
 case 767:
-#line 3358 "parse.y"
+#line 3371 "parse.y"
 { yyval.ttype = begin_try_block (); ;
     break;}
 case 768:
-#line 3360 "parse.y"
+#line 3373 "parse.y"
 { finish_try_block (yyvsp[-1].ttype); ;
     break;}
 case 769:
-#line 3362 "parse.y"
+#line 3375 "parse.y"
 { finish_handler_sequence (yyvsp[-3].ttype); ;
     break;}
 case 772:
-#line 3372 "parse.y"
+#line 3385 "parse.y"
 { yyval.ttype = begin_handler(); ;
     break;}
 case 773:
-#line 3374 "parse.y"
+#line 3387 "parse.y"
 { finish_handler_parms (yyvsp[-1].ttype); ;
     break;}
 case 774:
-#line 3376 "parse.y"
+#line 3389 "parse.y"
 { finish_handler (yyvsp[-3].ttype); ;
     break;}
 case 777:
-#line 3386 "parse.y"
+#line 3399 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
 case 778:
-#line 3402 "parse.y"
+#line 3415 "parse.y"
 { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
                  expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
                                            TREE_VALUE (yyvsp[-1].ftype.t)); ;
     break;}
 case 779:
-#line 3409 "parse.y"
+#line 3422 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7484,98 +7488,98 @@ case 779:
                ;
     break;}
 case 780:
-#line 3416 "parse.y"
+#line 3429 "parse.y"
 { goto do_label; ;
     break;}
 case 781:
-#line 3418 "parse.y"
+#line 3431 "parse.y"
 { goto do_label; ;
     break;}
 case 782:
-#line 3420 "parse.y"
+#line 3433 "parse.y"
 { goto do_label; ;
     break;}
 case 783:
-#line 3425 "parse.y"
+#line 3438 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
 case 785:
-#line 3428 "parse.y"
+#line 3441 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
 case 786:
-#line 3437 "parse.y"
+#line 3450 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 787:
-#line 3440 "parse.y"
+#line 3453 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
 case 788:
-#line 3445 "parse.y"
+#line 3458 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 790:
-#line 3448 "parse.y"
+#line 3461 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 791:
-#line 3455 "parse.y"
+#line 3468 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 794:
-#line 3462 "parse.y"
+#line 3475 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 795:
-#line 3467 "parse.y"
+#line 3480 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 796:
-#line 3472 "parse.y"
+#line 3485 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
 case 797:
-#line 3474 "parse.y"
+#line 3487 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 798:
-#line 3485 "parse.y"
+#line 3498 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
 case 800:
-#line 3490 "parse.y"
+#line 3503 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0);
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
 case 801:
-#line 3498 "parse.y"
+#line 3511 "parse.y"
 { yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
     break;}
 case 802:
-#line 3500 "parse.y"
+#line 3513 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 803:
-#line 3503 "parse.y"
+#line 3516 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 804:
-#line 3505 "parse.y"
+#line 3518 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
                                                         yyvsp[-1].ftype.t), 1); ;
     break;}
 case 805:
-#line 3508 "parse.y"
+#line 3521 "parse.y"
 { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
     break;}
 case 806:
-#line 3510 "parse.y"
+#line 3523 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7587,7 +7591,7 @@ case 806:
                ;
     break;}
 case 807:
-#line 3520 "parse.y"
+#line 3533 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7600,99 +7604,99 @@ case 807:
                ;
     break;}
 case 808:
-#line 3535 "parse.y"
+#line 3548 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
 case 809:
-#line 3537 "parse.y"
+#line 3550 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 812:
-#line 3548 "parse.y"
+#line 3561 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 813:
-#line 3551 "parse.y"
+#line 3564 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
     break;}
 case 814:
-#line 3554 "parse.y"
+#line 3567 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
 case 815:
-#line 3557 "parse.y"
+#line 3570 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 816:
-#line 3559 "parse.y"
+#line 3572 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 818:
-#line 3565 "parse.y"
+#line 3578 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
     break;}
 case 819:
-#line 3575 "parse.y"
+#line 3588 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
     break;}
 case 820:
-#line 3579 "parse.y"
+#line 3592 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 821:
-#line 3582 "parse.y"
+#line 3595 "parse.y"
 { yyval.ftype.t = build_tree_list (build_decl_list (NULL_TREE, yyvsp[-1].ftype.t),
                                          yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 822:
-#line 3586 "parse.y"
+#line 3599 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 823:
-#line 3590 "parse.y"
+#line 3603 "parse.y"
 { tree specs = strip_attrs (yyvsp[0].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 824:
-#line 3594 "parse.y"
+#line 3607 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 825:
-#line 3601 "parse.y"
+#line 3614 "parse.y"
 { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
 case 826:
-#line 3604 "parse.y"
+#line 3617 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;  ;
     break;}
 case 829:
-#line 3615 "parse.y"
+#line 3628 "parse.y"
 { see_typename (); ;
     break;}
 case 830:
-#line 3620 "parse.y"
+#line 3633 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
 case 831:
-#line 3625 "parse.y"
+#line 3638 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -7703,188 +7707,188 @@ case 831:
                ;
     break;}
 case 832:
-#line 3637 "parse.y"
+#line 3650 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 833:
-#line 3639 "parse.y"
+#line 3652 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 834:
-#line 3641 "parse.y"
+#line 3654 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
 case 835:
-#line 3646 "parse.y"
+#line 3659 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
 case 837:
-#line 3652 "parse.y"
+#line 3665 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
 case 838:
-#line 3660 "parse.y"
+#line 3673 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 839:
-#line 3662 "parse.y"
+#line 3675 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 840:
-#line 3664 "parse.y"
+#line 3677 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 841:
-#line 3666 "parse.y"
+#line 3679 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
 case 842:
-#line 3673 "parse.y"
+#line 3686 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
 case 843:
-#line 3678 "parse.y"
+#line 3691 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
 case 844:
-#line 3680 "parse.y"
+#line 3693 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
 case 845:
-#line 3682 "parse.y"
+#line 3695 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
 case 846:
-#line 3684 "parse.y"
+#line 3697 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
 case 847:
-#line 3686 "parse.y"
+#line 3699 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
 case 848:
-#line 3688 "parse.y"
+#line 3701 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
 case 849:
-#line 3690 "parse.y"
+#line 3703 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
 case 850:
-#line 3692 "parse.y"
+#line 3705 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
 case 851:
-#line 3694 "parse.y"
+#line 3707 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
 case 852:
-#line 3696 "parse.y"
+#line 3709 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
 case 853:
-#line 3698 "parse.y"
+#line 3711 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 854:
-#line 3700 "parse.y"
+#line 3713 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
 case 855:
-#line 3702 "parse.y"
+#line 3715 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
 case 856:
-#line 3704 "parse.y"
+#line 3717 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 857:
-#line 3706 "parse.y"
+#line 3719 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
 case 858:
-#line 3708 "parse.y"
+#line 3721 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
 case 859:
-#line 3710 "parse.y"
+#line 3723 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 860:
-#line 3712 "parse.y"
+#line 3725 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 861:
-#line 3714 "parse.y"
+#line 3727 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
 case 862:
-#line 3716 "parse.y"
+#line 3729 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
 case 863:
-#line 3718 "parse.y"
+#line 3731 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
 case 864:
-#line 3720 "parse.y"
+#line 3733 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
 case 865:
-#line 3722 "parse.y"
+#line 3735 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
 case 866:
-#line 3724 "parse.y"
+#line 3737 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
 case 867:
-#line 3726 "parse.y"
+#line 3739 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 868:
-#line 3728 "parse.y"
+#line 3741 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
 case 869:
-#line 3730 "parse.y"
+#line 3743 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
 case 870:
-#line 3732 "parse.y"
+#line 3745 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
 case 871:
-#line 3734 "parse.y"
+#line 3747 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
 case 872:
-#line 3736 "parse.y"
+#line 3749 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
 case 873:
-#line 3738 "parse.y"
+#line 3751 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
 case 874:
-#line 3740 "parse.y"
+#line 3753 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
 case 875:
-#line 3742 "parse.y"
+#line 3755 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
 case 876:
-#line 3745 "parse.y"
+#line 3758 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 877:
-#line 3747 "parse.y"
+#line 3760 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
@@ -8085,7 +8089,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 3750 "parse.y"
+#line 3763 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 4b263aa19ef6f6fa6efd14364c3d03f052709a39..d5dee42efda5b47478106e6657370535aaf03c90 100644 (file)
@@ -1753,24 +1753,33 @@ reserved_declspecs:
    to redeclare a typedef-name.
    In the result, declspecs have a non-NULL TREE_VALUE, attributes do not.  */
 
+/* We use hash_tree_cons for lists of typeless declspecs so that they end
+   up on a persistent obstack.  Otherwise, they could appear at the
+   beginning of something like
+
+      static const struct { int foo () { } } b;
+
+   and would be discarded after we finish compiling foo.  We don't need to
+   worry once we see a type.  */
+
 declmods:
          nonempty_cv_qualifiers  %prec EMPTY
                { $$ = $1.t; TREE_STATIC ($$) = 1; }
        | SCSPEC
-               { $$ = build_decl_list (NULL_TREE, $$); }
+               { $$ = hash_tree_cons (NULL_TREE, $$, NULL_TREE); }
        | declmods CV_QUALIFIER
-               { $$ = decl_tree_cons (NULL_TREE, $2, $$);
+               { $$ = hash_tree_cons (NULL_TREE, $2, $$);
                  TREE_STATIC ($$) = 1; }
        | declmods SCSPEC
                { if (extra_warnings && TREE_STATIC ($$))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER ($2));
-                 $$ = decl_tree_cons (NULL_TREE, $2, $$);
+                 $$ = hash_tree_cons (NULL_TREE, $2, $$);
                  TREE_STATIC ($$) = TREE_STATIC ($1); }
        | declmods attributes
-               { $$ = decl_tree_cons ($2, NULL_TREE, $1); }
+               { $$ = hash_tree_cons ($2, NULL_TREE, $1); }
        | attributes
-               { $$ = decl_tree_cons ($1, NULL_TREE, NULL_TREE); }
+               { $$ = hash_tree_cons ($1, NULL_TREE, NULL_TREE); }
        ;
 
 /* Used instead of declspecs where storage classes are not allowed
@@ -2141,11 +2150,15 @@ structsp:
                  $<ttype>$ = finish_class_definition ($1, $5, semi); 
                }
          pending_defargs
-                { finish_default_args (); }
+                {
+                 begin_inline_definitions ();
+               }
          pending_inlines
-                { $$.t = $<ttype>6;
+                {
+                 finish_inline_definitions ();
+                 $$.t = $<ttype>6;
                  $$.new_type_flag = 1; 
-                 begin_inline_definitions (); }
+               }
        | class_head  %prec EMPTY
                {
                  $$.new_type_flag = 0;
@@ -2689,10 +2702,10 @@ cv_qualifiers:
 
 nonempty_cv_qualifiers:
          CV_QUALIFIER
-               { $$.t = build_decl_list (NULL_TREE, $1); 
+               { $$.t = hash_tree_cons (NULL_TREE, $1, NULL_TREE);
                  $$.new_type_flag = 0; }
        | nonempty_cv_qualifiers CV_QUALIFIER
-               { $$.t = decl_tree_cons (NULL_TREE, $2, $1.t); 
+               { $$.t = hash_tree_cons (NULL_TREE, $2, $1.t); 
                  $$.new_type_flag = $1.new_type_flag; }
        ;
 
index 04ca1b3fc353ea729bbf4e64fed0e4011d83843e..a3c3a32836c59eaeb58198bda65bfb218c79ba89 100644 (file)
@@ -5834,8 +5834,8 @@ tsubst_arg_types (arg_types, args, complain, in_decl)
   /* Note that we do not substitute into default arguments here.  The
      standard mandates that they be instantiated only when needed,
      which is done in build_over_call.  */
-  return hash_tree_cons_simple (TREE_PURPOSE (arg_types), type,
-                               remaining_arg_types);
+  return hash_tree_cons (TREE_PURPOSE (arg_types), type,
+                        remaining_arg_types);
                         
 }
 
@@ -6195,15 +6195,10 @@ tsubst (t, args, complain, in_decl)
     case TREE_LIST:
       {
        tree purpose, value, chain, result;
-       int via_public, via_virtual, via_protected;
 
        if (t == void_list_node)
          return t;
 
-       via_public = TREE_VIA_PUBLIC (t);
-       via_protected = TREE_VIA_PROTECTED (t);
-       via_virtual = TREE_VIA_VIRTUAL (t);
-
        purpose = TREE_PURPOSE (t);
        if (purpose)
          {
@@ -6229,8 +6224,7 @@ tsubst (t, args, complain, in_decl)
            && value == TREE_VALUE (t)
            && chain == TREE_CHAIN (t))
          return t;
-       result = hash_tree_cons (via_public, via_virtual, via_protected,
-                                purpose, value, chain);
+       result = hash_tree_cons (purpose, value, chain);
        TREE_PARMLIST (result) = TREE_PARMLIST (t);
        return result;
       }
index af66e4ed0c82de8f405c2dcee17e0e5c4e0cb8c0..0bbb1195da616576832e6b1597de41caa8748fcb 100644 (file)
@@ -1465,7 +1465,7 @@ finish_class_definition (t, attributes, semi)
    the processing of a class definition.  */
 
 void
-finish_default_args ()
+begin_inline_definitions ()
 {
   if (pending_inlines 
       && current_scope () == current_function_decl)
@@ -1476,7 +1476,7 @@ finish_default_args ()
    processing of a class definition.  */
 
 void
-begin_inline_definitions ()
+finish_inline_definitions ()
 {
   if (current_class_type == NULL_TREE)
     clear_inline_text_obstack (); 
index 1f8f72c1b431f3a0e62d579c5ec0172194a53527..96d9cbd72bd2d4cc84c4c34587250a3c857c2a4f 100644 (file)
@@ -33,8 +33,7 @@ static tree perm_manip PROTO((tree));
 static tree build_cplus_array_type_1 PROTO((tree, tree));
 static void list_hash_add PROTO((int, tree));
 static int list_hash PROTO((tree, tree, tree));
-static tree list_hash_lookup PROTO((int, int, int, int, tree, tree,
-                                   tree));
+static tree list_hash_lookup PROTO((int, tree, tree, tree));
 static void propagate_binfo_offsets PROTO((tree, tree));
 static int avoid_overlap PROTO((tree, tree));
 static int lvalue_p_1 PROTO((tree, int));
@@ -978,18 +977,14 @@ list_hash (purpose, value, chain)
    If one is found, return it.  Otherwise return 0.  */
 
 static tree
-list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
-                 purpose, value, chain)
-     int hashcode, via_public, via_virtual, via_protected;
+list_hash_lookup (hashcode, purpose, value, chain)
+     int hashcode;
      tree purpose, value, chain;
 {
   register struct list_hash *h;
 
   for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
     if (h->hashcode == hashcode
-       && TREE_VIA_VIRTUAL (h->list) == via_virtual
-       && TREE_VIA_PUBLIC (h->list) == via_public
-       && TREE_VIA_PROTECTED (h->list) == via_protected
        && TREE_PURPOSE (h->list) == purpose
        && TREE_VALUE (h->list) == value
        && TREE_CHAIN (h->list) == chain)
@@ -1014,24 +1009,16 @@ list_hash_add (hashcode, list)
   list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
 }
 
-/* Given TYPE, and HASHCODE its hash code, return the canonical
-   object for an identical list if one already exists.
-   Otherwise, return TYPE, and record it as the canonical object
-   if it is a permanent object.
-
-   To use this function, first create a list of the sort you want.
-   Then compute its hash code from the fields of the list that
-   make it different from other similar lists.
-   Then call this function and use the value.
-   This function frees the list you pass in if it is a duplicate.  */
+/* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
+   object for an identical list if one already exists.  Otherwise, build a
+   new one, and record it as the canonical object.  */
 
 /* Set to 1 to debug without canonicalization.  Never set by program.  */
 
 static int debug_no_list_hash = 0;
 
 tree
-hash_tree_cons (via_public, via_virtual, via_protected, purpose, value, chain)
-     int via_public, via_virtual, via_protected;
+hash_tree_cons (purpose, value, chain)
      tree purpose, value, chain;
 {
   struct obstack *ambient_obstack = current_obstack;
@@ -1041,8 +1028,7 @@ hash_tree_cons (via_public, via_virtual, via_protected, purpose, value, chain)
   if (! debug_no_list_hash)
     {
       hashcode = list_hash (purpose, value, chain);
-      t = list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
-                           purpose, value, chain);
+      t = list_hash_lookup (hashcode, purpose, value, chain);
       if (t)
        return t;
     }
@@ -1050,9 +1036,6 @@ hash_tree_cons (via_public, via_virtual, via_protected, purpose, value, chain)
   current_obstack = &class_obstack;
 
   t = tree_cons (purpose, value, chain);
-  TREE_VIA_PUBLIC (t) = via_public;
-  TREE_VIA_PROTECTED (t) = via_protected;
-  TREE_VIA_VIRTUAL (t) = via_virtual;
 
   /* If this is a new list, record it for later reuse.  */
   if (! debug_no_list_hash)
@@ -1068,7 +1051,7 @@ tree
 hash_tree_chain (value, chain)
      tree value, chain;
 {
-  return hash_tree_cons (0, 0, 0, NULL_TREE, value, chain);
+  return hash_tree_cons (NULL_TREE, value, chain);
 }
 
 /* Similar, but used for concatenating two lists.  */