~ubuntu-branches/debian/sid/gcc-4.8/sid

« back to all changes in this revision

Viewing changes to .svn/pristine/28/281146a2a6050e24b9b9c22147258d8ae2e328c8.svn-base

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-12-19 19:48:34 UTC
  • Revision ID: package-import@ubuntu.com-20141219194834-4dz1q7rrn5pad823
Tags: 4.8.4-1
* GCC 4.8.4 release.
  - Fix PR target/61407 (darwin), PR middle-end/58624 (ice),
    PR sanitizer/64265 (wrong code).
* Require recent binutils to pass go test failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# DP: updates from the 4.8 branch upto 20120603 (r199596).
 
2
 
 
3
last_updated()
 
4
{
 
5
        cat > ${dir}LAST_UPDATED <<EOF
 
6
Mon Jun  3 09:20:58 CEST 2013
 
7
Mon Jun  3 07:20:58 UTC 2013 (revision 199596)
 
8
EOF
 
9
}
 
10
 
 
11
LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_1_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch \
 
12
        | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
 
13
        | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
 
14
 
 
15
Index: libgcc/ChangeLog
 
16
===================================================================
 
17
--- a/src/libgcc/ChangeLog      (.../tags/gcc_4_8_1_release)
 
18
+++ b/src/libgcc/ChangeLog      (.../branches/gcc-4_8-branch)
 
19
@@ -1,3 +1,9 @@
 
20
+2013-05-31  Richard Henderson  <rth@redhat.com>
 
21
+
 
22
+       PR target/49146
 
23
+       * unwind-dw2.c (UNWIND_COLUMN_IN_RANGE): New macro.
 
24
+       (execute_cfa_program): Use it when storing to fs->regs.
 
25
+
 
26
 2013-05-31  Release Manager
 
27
 
 
28
        * GCC 4.8.1 released.
 
29
Index: libgcc/unwind-dw2.c
 
30
===================================================================
 
31
--- a/src/libgcc/unwind-dw2.c   (.../tags/gcc_4_8_1_release)
 
32
+++ b/src/libgcc/unwind-dw2.c   (.../branches/gcc-4_8-branch)
 
33
@@ -59,6 +59,35 @@
 
34
 #define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
 
35
 #endif
 
36
 
 
37
+/* ??? For the public function interfaces, we tend to gcc_assert that the
 
38
+   column numbers are in range.  For the dwarf2 unwind info this does happen,
 
39
+   although so far in a case that doesn't actually matter.
 
40
+
 
41
+   See PR49146, in which a call from x86_64 ms abi to x86_64 unix abi stores
 
42
+   the call-saved xmm registers and annotates them.  We havn't bothered
 
43
+   providing support for the xmm registers for the x86_64 port primarily
 
44
+   because the 64-bit windows targets don't use dwarf2 unwind, using sjlj or
 
45
+   SEH instead.  Adding the support for unix targets would generally be a
 
46
+   waste.  However, some runtime libraries supplied with ICC do contain such
 
47
+   an unorthodox transition, as well as the unwind info to match.  This loss
 
48
+   of register restoration doesn't matter in practice, because the exception
 
49
+   is caught in the native unix abi, where all of the xmm registers are 
 
50
+   call clobbered.
 
51
+
 
52
+   Ideally, we'd record some bit to notice when we're failing to restore some
 
53
+   register recorded in the unwind info, but to do that we need annotation on
 
54
+   the unix->ms abi edge, so that we know when the register data may be
 
55
+   discarded.  And since this edge is also within the ICC library, we're
 
56
+   unlikely to be able to get the new annotation.
 
57
+
 
58
+   Barring a magic solution to restore the ms abi defined 128-bit xmm registers
 
59
+   (as distictly opposed to the full runtime width) without causing extra
 
60
+   overhead for normal unix abis, the best solution seems to be to simply
 
61
+   ignore unwind data for unknown columns.  */
 
62
+
 
63
+#define UNWIND_COLUMN_IN_RANGE(x) \
 
64
+    __builtin_expect((x) <= DWARF_FRAME_REGISTERS, 1)
 
65
+
 
66
 #ifdef REG_VALUE_IN_UNWIND_CONTEXT
 
67
 typedef _Unwind_Word _Unwind_Context_Reg_Val;
 
68
 
 
69
@@ -939,14 +968,19 @@
 
70
          reg = insn & 0x3f;
 
71
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
72
          offset = (_Unwind_Sword) utmp * fs->data_align;
 
73
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
74
-           = REG_SAVED_OFFSET;
 
75
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
 
76
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
77
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
78
+           {
 
79
+             fs->regs.reg[reg].how = REG_SAVED_OFFSET;
 
80
+             fs->regs.reg[reg].loc.offset = offset;
 
81
+           }
 
82
        }
 
83
       else if ((insn & 0xc0) == DW_CFA_restore)
 
84
        {
 
85
          reg = insn & 0x3f;
 
86
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_UNSAVED;
 
87
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
88
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
89
+           fs->regs.reg[reg].how = REG_UNSAVED;
 
90
        }
 
91
       else switch (insn)
 
92
        {
 
93
@@ -977,26 +1011,35 @@
 
94
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
95
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
96
          offset = (_Unwind_Sword) utmp * fs->data_align;
 
97
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
98
-           = REG_SAVED_OFFSET;
 
99
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
 
100
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
101
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
102
+           {
 
103
+             fs->regs.reg[reg].how = REG_SAVED_OFFSET;
 
104
+             fs->regs.reg[reg].loc.offset = offset;
 
105
+           }
 
106
          break;
 
107
 
 
108
        case DW_CFA_restore_extended:
 
109
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
110
          /* FIXME, this is wrong; the CIE might have said that the
 
111
             register was saved somewhere.  */
 
112
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
 
113
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
114
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
115
+           fs->regs.reg[reg].how = REG_UNSAVED;
 
116
          break;
 
117
 
 
118
        case DW_CFA_same_value:
 
119
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
120
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
 
121
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
122
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
123
+           fs->regs.reg[reg].how = REG_UNSAVED;
 
124
          break;
 
125
 
 
126
        case DW_CFA_undefined:
 
127
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
128
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNDEFINED;
 
129
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
130
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
131
+           fs->regs.reg[reg].how = REG_UNDEFINED;
 
132
          break;
 
133
 
 
134
        case DW_CFA_nop:
 
135
@@ -1007,9 +1050,12 @@
 
136
            _uleb128_t reg2;
 
137
            insn_ptr = read_uleb128 (insn_ptr, &reg);
 
138
            insn_ptr = read_uleb128 (insn_ptr, &reg2);
 
139
-           fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
 
140
-           fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg =
 
141
-             (_Unwind_Word)reg2;
 
142
+           reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
143
+           if (UNWIND_COLUMN_IN_RANGE (reg))
 
144
+             {
 
145
+               fs->regs.reg[reg].how = REG_SAVED_REG;
 
146
+               fs->regs.reg[reg].loc.reg = (_Unwind_Word)reg2;
 
147
+             }
 
148
          }
 
149
          break;
 
150
 
 
151
@@ -1067,8 +1113,12 @@
 
152
 
 
153
        case DW_CFA_expression:
 
154
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
155
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_EXP;
 
156
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
 
157
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
158
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
159
+           {
 
160
+             fs->regs.reg[reg].how = REG_SAVED_EXP;
 
161
+             fs->regs.reg[reg].loc.exp = insn_ptr;
 
162
+           }
 
163
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
164
          insn_ptr += utmp;
 
165
          break;
 
166
@@ -1078,9 +1128,12 @@
 
167
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
168
          insn_ptr = read_sleb128 (insn_ptr, &stmp);
 
169
          offset = stmp * fs->data_align;
 
170
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
171
-           = REG_SAVED_OFFSET;
 
172
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
 
173
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
174
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
175
+           {
 
176
+             fs->regs.reg[reg].how = REG_SAVED_OFFSET;
 
177
+             fs->regs.reg[reg].loc.offset = offset;
 
178
+           }
 
179
          break;
 
180
 
 
181
        case DW_CFA_def_cfa_sf:
 
182
@@ -1103,25 +1156,34 @@
 
183
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
184
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
185
          offset = (_Unwind_Sword) utmp * fs->data_align;
 
186
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
187
-           = REG_SAVED_VAL_OFFSET;
 
188
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
 
189
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
190
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
191
+           {
 
192
+             fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
 
193
+             fs->regs.reg[reg].loc.offset = offset;
 
194
+           }
 
195
          break;
 
196
 
 
197
        case DW_CFA_val_offset_sf:
 
198
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
199
          insn_ptr = read_sleb128 (insn_ptr, &stmp);
 
200
          offset = stmp * fs->data_align;
 
201
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
202
-           = REG_SAVED_VAL_OFFSET;
 
203
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
 
204
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
205
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
206
+           {
 
207
+             fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
 
208
+             fs->regs.reg[reg].loc.offset = offset;
 
209
+           }
 
210
          break;
 
211
 
 
212
        case DW_CFA_val_expression:
 
213
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
214
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
215
-           = REG_SAVED_VAL_EXP;
 
216
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
 
217
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
218
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
219
+           {
 
220
+             fs->regs.reg[reg].how = REG_SAVED_VAL_EXP;
 
221
+             fs->regs.reg[reg].loc.exp = insn_ptr;
 
222
+           }
 
223
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
224
          insn_ptr += utmp;
 
225
          break;
 
226
@@ -1147,9 +1209,12 @@
 
227
          insn_ptr = read_uleb128 (insn_ptr, &reg);
 
228
          insn_ptr = read_uleb128 (insn_ptr, &utmp);
 
229
          offset = (_Unwind_Word) utmp * fs->data_align;
 
230
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
 
231
-           = REG_SAVED_OFFSET;
 
232
-         fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = -offset;
 
233
+         reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
 
234
+         if (UNWIND_COLUMN_IN_RANGE (reg))
 
235
+           {
 
236
+             fs->regs.reg[reg].how = REG_SAVED_OFFSET;
 
237
+             fs->regs.reg[reg].loc.offset = -offset;
 
238
+           }
 
239
          break;
 
240
 
 
241
        default:
 
242
Index: gcc/DATESTAMP
 
243
===================================================================
 
244
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_1_release)
 
245
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
 
246
@@ -1 +1 @@
 
247
-20130531
 
248
+20130603
 
249
Index: gcc/ChangeLog
 
250
===================================================================
 
251
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_1_release)
 
252
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
 
253
@@ -1,3 +1,9 @@
 
254
+2013-05-31  Richard Henderson  <rth@redhat.com>
 
255
+
 
256
+       PR target/56742
 
257
+       * config/i386/i386.c (ix86_seh_fixup_eh_fallthru): New.
 
258
+       (ix86_reorg): Call it.
 
259
+
 
260
 2013-05-31  Release Manager
 
261
 
 
262
        * GCC 4.8.1 released.
 
263
Index: gcc/testsuite/gfortran.dg/typebound_override_4.f90
 
264
===================================================================
 
265
--- a/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90    (.../tags/gcc_4_8_1_release)
 
266
+++ b/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90    (.../branches/gcc-4_8-branch)
 
267
@@ -0,0 +1,34 @@
 
268
+! { dg-do compile }
 
269
+!
 
270
+! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
 
271
+!
 
272
+! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
 
273
+
 
274
+module base_mod
 
275
+  implicit none
 
276
+  type base_type
 
277
+  contains
 
278
+    procedure, pass(map)  :: clone    => base_clone
 
279
+  end type
 
280
+contains
 
281
+  subroutine  base_clone(map,mapout)
 
282
+    class(base_type) :: map
 
283
+    class(base_type) :: mapout
 
284
+  end subroutine
 
285
+end module
 
286
+
 
287
+module r_mod
 
288
+  use base_mod
 
289
+  implicit none
 
290
+  type, extends(base_type) :: r_type
 
291
+  contains
 
292
+    procedure, pass(map)  :: clone    => r_clone   ! { dg-error "Type/rank mismatch in argument" }
 
293
+  end type
 
294
+contains
 
295
+  subroutine  r_clone(map,mapout)
 
296
+    class(r_type) :: map
 
297
+    class(r_type) :: mapout
 
298
+  end subroutine
 
299
+end module
 
300
+
 
301
+! { dg-final { cleanup-modules "base_mod r_mod" } }
 
302
Index: gcc/testsuite/ChangeLog
 
303
===================================================================
 
304
--- a/src/gcc/testsuite/ChangeLog       (.../tags/gcc_4_8_1_release)
 
305
+++ b/src/gcc/testsuite/ChangeLog       (.../branches/gcc-4_8-branch)
 
306
@@ -1,3 +1,9 @@
 
307
+2013-05-31  Janus Weil  <janus@gcc.gnu.org>
 
308
+           Tobias Burnus  <burnus@net-b.de>
 
309
+
 
310
+       PR fortran/57217
 
311
+       * gfortran.dg/typebound_override_4.f90: New.
 
312
+
 
313
 2013-05-31  Release Manager
 
314
 
 
315
        * GCC 4.8.1 released.
 
316
Index: gcc/testsuite/g++.dg/cpp0x/initlist71.C
 
317
===================================================================
 
318
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist71.C       (.../tags/gcc_4_8_1_release)
 
319
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist71.C       (.../branches/gcc-4_8-branch)
 
320
@@ -0,0 +1,9 @@
 
321
+// PR c++/56930
 
322
+// { dg-require-effective-target c++11 }
 
323
+// { dg-options -Wconversion }
 
324
+
 
325
+int main()
 
326
+{
 
327
+  int x = sizeof(int);
 
328
+  int y { sizeof(int) };
 
329
+}
 
330
Index: gcc/testsuite/g++.dg/cpp0x/defaulted44.C
 
331
===================================================================
 
332
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted44.C      (.../tags/gcc_4_8_1_release)
 
333
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted44.C      (.../branches/gcc-4_8-branch)
 
334
@@ -0,0 +1,24 @@
 
335
+// PR c++/57319
 
336
+// { dg-require-effective-target c++11 }
 
337
+
 
338
+namespace N1 {
 
339
+  struct A { };
 
340
+  struct B: virtual A { };
 
341
+  struct C: virtual B { };
 
342
+
 
343
+  struct D: C
 
344
+  {
 
345
+    void operator= (D &);
 
346
+  };
 
347
+}
 
348
+
 
349
+namespace N2 {
 
350
+  struct A { A& operator=(A&&); };
 
351
+  struct B: virtual A { };     // { dg-warning "move assignment" }
 
352
+  struct C: virtual B { };     // { dg-warning "move assignment" }
 
353
+
 
354
+  struct D: C
 
355
+  {
 
356
+    void operator= (D &);
 
357
+  };
 
358
+}
 
359
Index: gcc/cp/class.c
 
360
===================================================================
 
361
--- a/src/gcc/cp/class.c        (.../tags/gcc_4_8_1_release)
 
362
+++ b/src/gcc/cp/class.c        (.../branches/gcc-4_8-branch)
 
363
@@ -4833,6 +4833,44 @@
 
364
   return false;
 
365
 }
 
366
 
 
367
+/* TYPE is being used as a virtual base, and has a non-trivial move
 
368
+   assignment.  Return true if this is due to there being a user-provided
 
369
+   move assignment in TYPE or one of its subobjects; if there isn't, then
 
370
+   multiple move assignment can't cause any harm.  */
 
371
+
 
372
+bool
 
373
+vbase_has_user_provided_move_assign (tree type)
 
374
+{
 
375
+  /* Does the type itself have a user-provided move assignment operator?  */
 
376
+  for (tree fns
 
377
+        = lookup_fnfields_slot_nolazy (type, ansi_assopname (NOP_EXPR));
 
378
+       fns; fns = OVL_NEXT (fns))
 
379
+    {
 
380
+      tree fn = OVL_CURRENT (fns);
 
381
+      if (move_fn_p (fn) && user_provided_p (fn))
 
382
+       return true;
 
383
+    }
 
384
+
 
385
+  /* Do any of its bases?  */
 
386
+  tree binfo = TYPE_BINFO (type);
 
387
+  tree base_binfo;
 
388
+  for (int i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
 
389
+    if (vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
 
390
+      return true;
 
391
+
 
392
+  /* Or non-static data members?  */
 
393
+  for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
 
394
+    {
 
395
+      if (TREE_CODE (field) == FIELD_DECL
 
396
+         && CLASS_TYPE_P (TREE_TYPE (field))
 
397
+         && vbase_has_user_provided_move_assign (TREE_TYPE (field)))
 
398
+       return true;
 
399
+    }
 
400
+
 
401
+  /* Seems not.  */
 
402
+  return false;
 
403
+}
 
404
+
 
405
 /* If default-initialization leaves part of TYPE uninitialized, returns
 
406
    a DECL for the field or TYPE itself (DR 253).  */
 
407
 
 
408
Index: gcc/cp/method.c
 
409
===================================================================
 
410
--- a/src/gcc/cp/method.c       (.../tags/gcc_4_8_1_release)
 
411
+++ b/src/gcc/cp/method.c       (.../branches/gcc-4_8-branch)
 
412
@@ -1340,7 +1340,8 @@
 
413
       if (diag && assign_p && move_p
 
414
          && BINFO_VIRTUAL_P (base_binfo)
 
415
          && rval && TREE_CODE (rval) == FUNCTION_DECL
 
416
-         && move_fn_p (rval) && !trivial_fn_p (rval))
 
417
+         && move_fn_p (rval) && !trivial_fn_p (rval)
 
418
+         && vbase_has_user_provided_move_assign (basetype))
 
419
        warning (OPT_Wvirtual_move_assign,
 
420
                 "defaulted move assignment for %qT calls a non-trivial "
 
421
                 "move assignment operator for virtual base %qT",
 
422
Index: gcc/cp/ChangeLog
 
423
===================================================================
 
424
--- a/src/gcc/cp/ChangeLog      (.../tags/gcc_4_8_1_release)
 
425
+++ b/src/gcc/cp/ChangeLog      (.../branches/gcc-4_8-branch)
 
426
@@ -1,3 +1,16 @@
 
427
+2013-05-31  Jason Merrill  <jason@redhat.com>
 
428
+
 
429
+       PR c++/57319
 
430
+       * class.c (vbase_has_user_provided_move_assign): New.
 
431
+       * method.c (synthesized_method_walk): Check it.
 
432
+       * cp-tree.h: Declare it.
 
433
+
 
434
+       PR c++/56930
 
435
+       * call.c (convert_like_real): Use cp_convert_and_check.
 
436
+       * cvt.c (cp_convert_and_check): Use maybe_constant_value.
 
437
+       * semantics.c (cxx_eval_constant_expression): Handle LTGT_EXPR.
 
438
+       (potential_constant_expression_1): Handle OMP_ATOMIC*.
 
439
+
 
440
 2013-05-31  Release Manager
 
441
 
 
442
        * GCC 4.8.1 released.
 
443
Index: gcc/cp/semantics.c
 
444
===================================================================
 
445
--- a/src/gcc/cp/semantics.c    (.../tags/gcc_4_8_1_release)
 
446
+++ b/src/gcc/cp/semantics.c    (.../branches/gcc-4_8-branch)
 
447
@@ -7990,6 +7990,7 @@
 
448
     case UNGT_EXPR:
 
449
     case UNGE_EXPR:
 
450
     case UNEQ_EXPR:
 
451
+    case LTGT_EXPR:
 
452
     case RANGE_EXPR:
 
453
     case COMPLEX_EXPR:
 
454
       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
 
455
@@ -8846,6 +8847,12 @@
 
456
        }
 
457
       return false;
 
458
 
 
459
+    case OMP_ATOMIC:
 
460
+    case OMP_ATOMIC_READ:
 
461
+    case OMP_ATOMIC_CAPTURE_OLD:
 
462
+    case OMP_ATOMIC_CAPTURE_NEW:
 
463
+      return false;
 
464
+
 
465
     default:
 
466
       if (objc_is_property_ref (t))
 
467
        return false;
 
468
Index: gcc/cp/call.c
 
469
===================================================================
 
470
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_1_release)
 
471
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
 
472
@@ -6195,8 +6195,8 @@
 
473
   if (convs->check_narrowing)
 
474
     check_narrowing (totype, expr);
 
475
 
 
476
-  if (issue_conversion_warnings && (complain & tf_warning))
 
477
-    expr = convert_and_check (totype, expr);
 
478
+  if (issue_conversion_warnings)
 
479
+    expr = cp_convert_and_check (totype, expr, complain);
 
480
   else
 
481
     expr = convert (totype, expr);
 
482
 
 
483
Index: gcc/cp/cvt.c
 
484
===================================================================
 
485
--- a/src/gcc/cp/cvt.c  (.../tags/gcc_4_8_1_release)
 
486
+++ b/src/gcc/cp/cvt.c  (.../branches/gcc-4_8-branch)
 
487
@@ -620,6 +620,9 @@
 
488
 
 
489
   if (TREE_TYPE (expr) == type)
 
490
     return expr;
 
491
+
 
492
+  if (TREE_CODE (expr) == SIZEOF_EXPR)
 
493
+    expr = maybe_constant_value (expr);
 
494
   
 
495
   result = cp_convert (type, expr, complain);
 
496
 
 
497
Index: gcc/cp/cp-tree.h
 
498
===================================================================
 
499
--- a/src/gcc/cp/cp-tree.h      (.../tags/gcc_4_8_1_release)
 
500
+++ b/src/gcc/cp/cp-tree.h      (.../branches/gcc-4_8-branch)
 
501
@@ -5057,6 +5057,7 @@
 
502
 extern bool user_provided_p                    (tree);
 
503
 extern bool type_has_user_provided_constructor  (tree);
 
504
 extern bool type_has_user_provided_default_constructor (tree);
 
505
+extern bool vbase_has_user_provided_move_assign (tree);
 
506
 extern tree default_init_uninitialized_part (tree);
 
507
 extern bool trivial_default_constructor_is_constexpr (tree);
 
508
 extern bool type_has_constexpr_default_constructor (tree);
 
509
Index: gcc/fortran/interface.c
 
510
===================================================================
 
511
--- a/src/gcc/fortran/interface.c       (.../tags/gcc_4_8_1_release)
 
512
+++ b/src/gcc/fortran/interface.c       (.../branches/gcc-4_8-branch)
 
513
@@ -1024,7 +1024,8 @@
 
514
                             bool type_must_agree, char *errmsg, int err_len)
 
515
 {
 
516
   /* Check type and rank.  */
 
517
-  if (type_must_agree && !compare_type_rank (s2, s1))
 
518
+  if (type_must_agree &&
 
519
+      (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
 
520
     {
 
521
       snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
 
522
                s1->name);
 
523
Index: gcc/fortran/ChangeLog
 
524
===================================================================
 
525
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_1_release)
 
526
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
 
527
@@ -1,3 +1,9 @@
 
528
+2013-05-31  Janus Weil  <janus@gcc.gnu.org>
 
529
+           Tobias Burnus  <burnus@net-b.de>
 
530
+
 
531
+       PR fortran/57217
 
532
+       * interface.c (check_dummy_characteristics): Symmetrize type check.
 
533
+
 
534
 2013-05-31  Release Manager
 
535
 
 
536
        * GCC 4.8.1 released.
 
537
Index: gcc/config/i386/i386.c
 
538
===================================================================
 
539
--- a/src/gcc/config/i386/i386.c        (.../tags/gcc_4_8_1_release)
 
540
+++ b/src/gcc/config/i386/i386.c        (.../branches/gcc-4_8-branch)
 
541
@@ -35444,6 +35444,46 @@
 
542
     }
 
543
 }
 
544
 
 
545
+/* Fix up a Windows system unwinder issue.  If an EH region falls thru into
 
546
+   the epilogue, the Windows system unwinder will apply epilogue logic and
 
547
+   produce incorrect offsets.  This can be avoided by adding a nop between
 
548
+   the last insn that can throw and the first insn of the epilogue.  */
 
549
+
 
550
+static void
 
551
+ix86_seh_fixup_eh_fallthru (void)
 
552
+{
 
553
+  edge e;
 
554
+  edge_iterator ei;
 
555
+
 
556
+  FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
 
557
+    {
 
558
+      rtx insn, next;
 
559
+
 
560
+      /* Find the beginning of the epilogue.  */
 
561
+      for (insn = BB_END (e->src); insn != NULL; insn = PREV_INSN (insn))
 
562
+       if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
 
563
+         break;
 
564
+      if (insn == NULL)
 
565
+       continue;
 
566
+
 
567
+      /* We only care about preceeding insns that can throw.  */
 
568
+      insn = prev_active_insn (insn);
 
569
+      if (insn == NULL || !can_throw_internal (insn))
 
570
+       continue;
 
571
+
 
572
+      /* Do not separate calls from their debug information.  */
 
573
+      for (next = NEXT_INSN (insn); next != NULL; next = NEXT_INSN (next))
 
574
+       if (NOTE_P (next)
 
575
+            && (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION
 
576
+                || NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION))
 
577
+         insn = next;
 
578
+       else
 
579
+         break;
 
580
+
 
581
+      emit_insn_after (gen_nops (const1_rtx), insn);
 
582
+    }
 
583
+}
 
584
+
 
585
 /* Implement machine specific optimizations.  We implement padding of returns
 
586
    for K8 CPUs and pass to avoid 4 jumps in the single 16 byte window.  */
 
587
 static void
 
588
@@ -35453,6 +35493,9 @@
 
589
      with old MDEP_REORGS that are not CFG based.  Recompute it now.  */
 
590
   compute_bb_for_insn ();
 
591
 
 
592
+  if (TARGET_SEH && current_function_has_exception_handlers ())
 
593
+    ix86_seh_fixup_eh_fallthru ();
 
594
+
 
595
   if (optimize && optimize_function_for_speed_p (cfun))
 
596
     {
 
597
       if (TARGET_PAD_SHORT_FUNCTION)
 
598
Index: fixincludes/ChangeLog
 
599
===================================================================
 
600
--- a/src/fixincludes/ChangeLog (.../tags/gcc_4_8_1_release)
 
601
+++ b/src/fixincludes/ChangeLog (.../branches/gcc-4_8-branch)
 
602
@@ -1,3 +1,14 @@
 
603
+2013-05-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
604
+
 
605
+       Backport from mainline:
 
606
+       2013-05-17  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
607
+
 
608
+       * inclhack.def (solaris_pow_int_overload): Update comment.
 
609
+       Change guard to match <cmath>.
 
610
+       * fixincl.x: Regenerate.
 
611
+       * tests/base/iso/math_iso.h [SOLARIS_POW_INT_OVERLOAD_CHECK]:
 
612
+       Matching change.
 
613
+
 
614
 2013-05-31  Release Manager
 
615
 
 
616
        * GCC 4.8.1 released.
 
617
Index: fixincludes/tests/base/iso/math_iso.h
 
618
===================================================================
 
619
--- a/src/fixincludes/tests/base/iso/math_iso.h (.../tags/gcc_4_8_1_release)
 
620
+++ b/src/fixincludes/tests/base/iso/math_iso.h (.../branches/gcc-4_8-branch)
 
621
@@ -10,7 +10,7 @@
 
622
 
 
623
 
 
624
 #if defined( SOLARIS_POW_INT_OVERLOAD_CHECK )
 
625
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
 
626
+#if __cplusplus < 201103L
 
627
        inline long double pow(long double __X, int __Y) { return
 
628
                __powl(__X, (long double) (__Y)); }
 
629
 #endif
 
630
Index: fixincludes/fixincl.x
 
631
===================================================================
 
632
--- a/src/fixincludes/fixincl.x (.../tags/gcc_4_8_1_release)
 
633
+++ b/src/fixincludes/fixincl.x (.../branches/gcc-4_8-branch)
 
634
@@ -2,11 +2,11 @@
 
635
  * 
 
636
  * DO NOT EDIT THIS FILE   (fixincl.x)
 
637
  * 
 
638
- * It has been AutoGen-ed  Saturday December 29, 2012 at 09:17:09 AM BRST
 
639
+ * It has been AutoGen-ed  Thursday May 16, 2013 at 03:34:25 PM MEST
 
640
  * From the definitions    inclhack.def
 
641
  * and the template file   fixincl
 
642
  */
 
643
-/* DO NOT SVN-MERGE THIS FILE, EITHER Sat Dec 29 09:17:10 BRST 2012
 
644
+/* DO NOT SVN-MERGE THIS FILE, EITHER Thu May 16 15:34:25 MEST 2013
 
645
  *
 
646
  * You must regenerate it.  Use the ./genfixes script.
 
647
  *
 
648
@@ -6663,7 +6663,7 @@
 
649
  */
 
650
 static const char* apzSolaris_Pow_Int_OverloadPatch[] = {
 
651
     "format",
 
652
-    "#ifndef __GXX_EXPERIMENTAL_CXX0X__\n\
 
653
+    "#if __cplusplus < 201103L\n\
 
654
 %0\n\
 
655
 #endif",
 
656
     (char*)NULL };
 
657
Index: fixincludes/inclhack.def
 
658
===================================================================
 
659
--- a/src/fixincludes/inclhack.def      (.../tags/gcc_4_8_1_release)
 
660
+++ b/src/fixincludes/inclhack.def      (.../branches/gcc-4_8-branch)
 
661
@@ -3447,7 +3447,7 @@
 
662
 
 
663
 
 
664
 /*
 
665
- *  The pow overloads with int were removed in C++ 2011.
 
666
+ *  The pow overloads with int were removed in C++ 2011 DR 550.
 
667
  */
 
668
 fix = {
 
669
     hackname  = solaris_pow_int_overload;
 
670
@@ -3456,7 +3456,7 @@
 
671
     select    = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)"
 
672
                " *\\{[^{}]*\n[^{}]*\\}";
 
673
     c_fix     = format;
 
674
-    c_fix_arg = "#ifndef __GXX_EXPERIMENTAL_CXX0X__\n%0\n#endif";
 
675
+    c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif";
 
676
 
 
677
     test_text =
 
678
     "  inline long double pow(long double __X, int __Y) { return\n"