1
# DP: updates from the 4.8 branch upto 20120611 (r199948).
5
cat > ${dir}LAST_UPDATED <<EOF
6
Tue Jun 11 13:05:18 CEST 2013
7
Tue Jun 11 11:05:18 UTC 2013 (revision 199948)
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'
15
Index: libstdc++-v3/ChangeLog
16
===================================================================
17
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_1_release)
18
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch)
20
+2013-06-07 Uros Bizjak <ubizjak@gmail.com>
22
+ * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update.
24
2013-05-31 Release Manager
27
Index: libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
28
===================================================================
29
--- a/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../tags/gcc_4_8_1_release)
30
+++ b/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../branches/gcc-4_8-branch)
32
FUNC:_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@@GLIBCXX_LDBL_3.4
33
FUNC:_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@@GLIBCXX_LDBL_3.4
34
FUNC:_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@@GLIBCXX_LDBL_3.4
35
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
36
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
37
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
38
FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
40
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
41
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
42
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
43
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm@@GLIBCXX_3.4.18
44
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm@@GLIBCXX_3.4.18
45
FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
46
FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
47
FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
49
FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
50
FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
51
FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
52
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIlSt5ratioILl1ELl1EEEENS1_IlS2_ILl1ELl1000000000EEEE@@GLIBCXX_3.4.18
53
FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
54
FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
55
FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
56
@@ -1635,6 +1639,11 @@
57
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
58
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
59
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
60
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
61
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
62
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
63
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
64
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
65
FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
66
FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
67
FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
69
FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
70
FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
71
FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
72
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
73
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
74
FUNC:_ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@@GLIBCXX_3.4
75
FUNC:_ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@@GLIBCXX_3.4
76
FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
78
FUNC:__cxa_guard_release@@CXXABI_1.3
79
FUNC:__cxa_pure_virtual@@CXXABI_1.3
80
FUNC:__cxa_rethrow@@CXXABI_1.3
81
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
82
FUNC:__cxa_throw@@CXXABI_1.3
83
FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
84
FUNC:__cxa_vec_cctor@@CXXABI_1.3
89
+OBJECT:0:CXXABI_1.3.7
90
OBJECT:0:CXXABI_LDBL_1.3
94
OBJECT:0:GLIBCXX_3.4.15
95
OBJECT:0:GLIBCXX_3.4.16
96
OBJECT:0:GLIBCXX_3.4.17
97
+OBJECT:0:GLIBCXX_3.4.18
98
+OBJECT:0:GLIBCXX_3.4.19
99
OBJECT:0:GLIBCXX_3.4.2
100
OBJECT:0:GLIBCXX_3.4.3
101
OBJECT:0:GLIBCXX_3.4.4
102
@@ -3193,6 +3208,8 @@
103
OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
104
OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
105
OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
106
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
107
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
108
OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
109
OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
110
OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
111
Index: libgcc/config.host
112
===================================================================
113
--- a/src/libgcc/config.host (.../tags/gcc_4_8_1_release)
114
+++ b/src/libgcc/config.host (.../branches/gcc-4_8-branch)
116
md_unwind_header=alpha/vms-unwind.h
119
- tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-fdpbit"
120
+ tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
121
extra_parts="$extra_parts crti.o crtn.o"
124
Index: libgcc/ChangeLog
125
===================================================================
126
--- a/src/libgcc/ChangeLog (.../tags/gcc_4_8_1_release)
127
+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_8-branch)
129
+2013-06-08 Walter Lee <walt@tilera.com>
131
+ Backport from mainline:
132
+ 2013-06-08 Walter Lee <walt@tilera.com>
134
+ * config/tilepro/atomic.h: Don't include stdint.h or features.h.
135
+ Replace int64_t with long long. Add __extension__ where
138
+2013-06-06 Douglas B Rupp <rupp@adacore.com>
140
+ * config.host (arm-wrs-vxworks): Configure with other soft float.
142
+2013-05-31 Richard Henderson <rth@redhat.com>
145
+ * unwind-dw2.c (UNWIND_COLUMN_IN_RANGE): New macro.
146
+ (execute_cfa_program): Use it when storing to fs->regs.
148
2013-05-31 Release Manager
150
* GCC 4.8.1 released.
151
Index: libgcc/config/tilepro/atomic.h
152
===================================================================
153
--- a/src/libgcc/config/tilepro/atomic.h (.../tags/gcc_4_8_1_release)
154
+++ b/src/libgcc/config/tilepro/atomic.h (.../branches/gcc-4_8-branch)
156
compare-and-exchange routine, so may be potentially less efficient. */
160
-#include <features.h>
162
#include <arch/spr_def.h>
166
/* 64-bit integer compare-and-exchange. */
167
static __inline __attribute__ ((always_inline))
168
- int64_t arch_atomic_val_compare_and_exchange_8 (volatile int64_t * mem,
171
+ long long arch_atomic_val_compare_and_exchange_8 (volatile long long
172
+ *mem, long long oldval,
176
__insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
178
"R04" (newval_lo), "R05" (newval_hi),
179
"m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
180
"r26", "r27", "r28", "r29", "memory");
181
- return ((uint64_t) result_hi) << 32 | result_lo;
182
+ return ((long long) result_hi) << 32 | result_lo;
186
@@ -150,11 +148,11 @@
189
#define arch_atomic_val_compare_and_exchange(mem, o, n) \
192
(__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
193
((sizeof(*(mem)) == 8) ? \
194
arch_atomic_val_compare_and_exchange_8( \
195
- (volatile int64_t*)(mem), (__typeof((o)-(o)))(o), \
196
+ (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
197
(__typeof((n)-(n)))(n)) : \
198
(sizeof(*(mem)) == 4) ? \
199
arch_atomic_val_compare_and_exchange_4( \
203
#define arch_atomic_bool_compare_and_exchange(mem, o, n) \
206
__typeof(o) __o = (o); \
208
__o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
210
/* Loop with compare_and_exchange until we guess the correct value.
211
Normally "expr" will be an expression using __old and __value. */
212
#define __arch_atomic_update_cmpxchg(mem, value, expr) \
215
__typeof(value) __value = (value); \
216
__typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
218
@@ -189,12 +187,14 @@
219
/* Generic atomic op with 8- or 4-byte variant.
220
The _mask, _addend, and _expr arguments are ignored on tilegx. */
221
#define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
224
((__typeof(*(mem))) \
225
((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
226
- (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) : \
227
+ (volatile void *)(mem), \
228
+ (long long)(__typeof((value)-(value)))(value)) : \
229
(sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
230
- (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) : \
231
+ (volatile void *)(mem), \
232
+ (int)(__typeof((value)-(value)))(value)) : \
233
__arch_atomic_error_bad_argument_size())); \
237
/* Generic atomic op with 8- or 4-byte variant.
238
The _op argument is ignored on tilepro. */
239
#define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
242
(__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
243
((sizeof(*(mem)) == 8) ? \
244
__arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
245
@@ -263,13 +263,13 @@
246
__arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
248
#define arch_atomic_bit_set(mem, bit) \
251
__typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
252
__mask & arch_atomic_or((mem), __mask); \
255
#define arch_atomic_bit_clear(mem, bit) \
258
__typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
259
__mask & arch_atomic_and((mem), ~__mask); \
261
Index: libgcc/unwind-dw2.c
262
===================================================================
263
--- a/src/libgcc/unwind-dw2.c (.../tags/gcc_4_8_1_release)
264
+++ b/src/libgcc/unwind-dw2.c (.../branches/gcc-4_8-branch)
266
#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
269
+/* ??? For the public function interfaces, we tend to gcc_assert that the
270
+ column numbers are in range. For the dwarf2 unwind info this does happen,
271
+ although so far in a case that doesn't actually matter.
273
+ See PR49146, in which a call from x86_64 ms abi to x86_64 unix abi stores
274
+ the call-saved xmm registers and annotates them. We havn't bothered
275
+ providing support for the xmm registers for the x86_64 port primarily
276
+ because the 64-bit windows targets don't use dwarf2 unwind, using sjlj or
277
+ SEH instead. Adding the support for unix targets would generally be a
278
+ waste. However, some runtime libraries supplied with ICC do contain such
279
+ an unorthodox transition, as well as the unwind info to match. This loss
280
+ of register restoration doesn't matter in practice, because the exception
281
+ is caught in the native unix abi, where all of the xmm registers are
284
+ Ideally, we'd record some bit to notice when we're failing to restore some
285
+ register recorded in the unwind info, but to do that we need annotation on
286
+ the unix->ms abi edge, so that we know when the register data may be
287
+ discarded. And since this edge is also within the ICC library, we're
288
+ unlikely to be able to get the new annotation.
290
+ Barring a magic solution to restore the ms abi defined 128-bit xmm registers
291
+ (as distictly opposed to the full runtime width) without causing extra
292
+ overhead for normal unix abis, the best solution seems to be to simply
293
+ ignore unwind data for unknown columns. */
295
+#define UNWIND_COLUMN_IN_RANGE(x) \
296
+ __builtin_expect((x) <= DWARF_FRAME_REGISTERS, 1)
298
#ifdef REG_VALUE_IN_UNWIND_CONTEXT
299
typedef _Unwind_Word _Unwind_Context_Reg_Val;
301
@@ -939,14 +968,19 @@
303
insn_ptr = read_uleb128 (insn_ptr, &utmp);
304
offset = (_Unwind_Sword) utmp * fs->data_align;
305
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
306
- = REG_SAVED_OFFSET;
307
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
308
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
309
+ if (UNWIND_COLUMN_IN_RANGE (reg))
311
+ fs->regs.reg[reg].how = REG_SAVED_OFFSET;
312
+ fs->regs.reg[reg].loc.offset = offset;
315
else if ((insn & 0xc0) == DW_CFA_restore)
318
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_UNSAVED;
319
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
320
+ if (UNWIND_COLUMN_IN_RANGE (reg))
321
+ fs->regs.reg[reg].how = REG_UNSAVED;
325
@@ -977,26 +1011,35 @@
326
insn_ptr = read_uleb128 (insn_ptr, ®);
327
insn_ptr = read_uleb128 (insn_ptr, &utmp);
328
offset = (_Unwind_Sword) utmp * fs->data_align;
329
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
330
- = REG_SAVED_OFFSET;
331
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
332
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
333
+ if (UNWIND_COLUMN_IN_RANGE (reg))
335
+ fs->regs.reg[reg].how = REG_SAVED_OFFSET;
336
+ fs->regs.reg[reg].loc.offset = offset;
340
case DW_CFA_restore_extended:
341
insn_ptr = read_uleb128 (insn_ptr, ®);
342
/* FIXME, this is wrong; the CIE might have said that the
343
register was saved somewhere. */
344
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
345
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
346
+ if (UNWIND_COLUMN_IN_RANGE (reg))
347
+ fs->regs.reg[reg].how = REG_UNSAVED;
350
case DW_CFA_same_value:
351
insn_ptr = read_uleb128 (insn_ptr, ®);
352
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
353
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
354
+ if (UNWIND_COLUMN_IN_RANGE (reg))
355
+ fs->regs.reg[reg].how = REG_UNSAVED;
358
case DW_CFA_undefined:
359
insn_ptr = read_uleb128 (insn_ptr, ®);
360
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNDEFINED;
361
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
362
+ if (UNWIND_COLUMN_IN_RANGE (reg))
363
+ fs->regs.reg[reg].how = REG_UNDEFINED;
367
@@ -1007,9 +1050,12 @@
369
insn_ptr = read_uleb128 (insn_ptr, ®);
370
insn_ptr = read_uleb128 (insn_ptr, ®2);
371
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
372
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg =
373
- (_Unwind_Word)reg2;
374
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
375
+ if (UNWIND_COLUMN_IN_RANGE (reg))
377
+ fs->regs.reg[reg].how = REG_SAVED_REG;
378
+ fs->regs.reg[reg].loc.reg = (_Unwind_Word)reg2;
383
@@ -1067,8 +1113,12 @@
385
case DW_CFA_expression:
386
insn_ptr = read_uleb128 (insn_ptr, ®);
387
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_EXP;
388
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
389
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
390
+ if (UNWIND_COLUMN_IN_RANGE (reg))
392
+ fs->regs.reg[reg].how = REG_SAVED_EXP;
393
+ fs->regs.reg[reg].loc.exp = insn_ptr;
395
insn_ptr = read_uleb128 (insn_ptr, &utmp);
398
@@ -1078,9 +1128,12 @@
399
insn_ptr = read_uleb128 (insn_ptr, ®);
400
insn_ptr = read_sleb128 (insn_ptr, &stmp);
401
offset = stmp * fs->data_align;
402
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
403
- = REG_SAVED_OFFSET;
404
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
405
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
406
+ if (UNWIND_COLUMN_IN_RANGE (reg))
408
+ fs->regs.reg[reg].how = REG_SAVED_OFFSET;
409
+ fs->regs.reg[reg].loc.offset = offset;
413
case DW_CFA_def_cfa_sf:
414
@@ -1103,25 +1156,34 @@
415
insn_ptr = read_uleb128 (insn_ptr, ®);
416
insn_ptr = read_uleb128 (insn_ptr, &utmp);
417
offset = (_Unwind_Sword) utmp * fs->data_align;
418
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
419
- = REG_SAVED_VAL_OFFSET;
420
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
421
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
422
+ if (UNWIND_COLUMN_IN_RANGE (reg))
424
+ fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
425
+ fs->regs.reg[reg].loc.offset = offset;
429
case DW_CFA_val_offset_sf:
430
insn_ptr = read_uleb128 (insn_ptr, ®);
431
insn_ptr = read_sleb128 (insn_ptr, &stmp);
432
offset = stmp * fs->data_align;
433
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
434
- = REG_SAVED_VAL_OFFSET;
435
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
436
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
437
+ if (UNWIND_COLUMN_IN_RANGE (reg))
439
+ fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
440
+ fs->regs.reg[reg].loc.offset = offset;
444
case DW_CFA_val_expression:
445
insn_ptr = read_uleb128 (insn_ptr, ®);
446
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
447
- = REG_SAVED_VAL_EXP;
448
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
449
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
450
+ if (UNWIND_COLUMN_IN_RANGE (reg))
452
+ fs->regs.reg[reg].how = REG_SAVED_VAL_EXP;
453
+ fs->regs.reg[reg].loc.exp = insn_ptr;
455
insn_ptr = read_uleb128 (insn_ptr, &utmp);
458
@@ -1147,9 +1209,12 @@
459
insn_ptr = read_uleb128 (insn_ptr, ®);
460
insn_ptr = read_uleb128 (insn_ptr, &utmp);
461
offset = (_Unwind_Word) utmp * fs->data_align;
462
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
463
- = REG_SAVED_OFFSET;
464
- fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = -offset;
465
+ reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
466
+ if (UNWIND_COLUMN_IN_RANGE (reg))
468
+ fs->regs.reg[reg].how = REG_SAVED_OFFSET;
469
+ fs->regs.reg[reg].loc.offset = -offset;
475
===================================================================
476
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_1_release)
477
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
482
===================================================================
483
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_1_release)
484
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
486
+2013-06-10 Uros Bizjak <ubizjak@gmail.com>
488
+ Backport from mainline
489
+ 2013-06-10 Uros Bizjak <ubizjak@gmail.com>
491
+ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Also use
492
+ cmp_code to construct REG_EQUAL note.
494
+2013-06-10 Oleg Endo <olegendo@gcc.gnu.org>
496
+ Backport from mainline
497
+ 2013-05-20 Oleg Endo <olegendo@gcc.gnu.org>
500
+ * config/sh/sh.md (fmasf4): Remove empty constraints strings.
501
+ (*fmasf4, *fmasf4_media): New insns.
503
+2013-06-09 Jakub Jelinek <jakub@redhat.com>
506
+ * config/i386/i386.md (TARGET_READ_MODIFY_WRITE peepholes): Ensure
507
+ that operands[2] doesn't overlap with operands[0].
509
+2013-06-07 Richard Sandiford <rsandifo@linux.vnet.ibm.com>
511
+ * recog.c (offsettable_address_addr_space_p): Fix calculation of
512
+ address mode. Move pointer mode initialization to the same place.
514
+2013-06-07 Uros Bizjak <ubizjak@gmail.com>
516
+ Backport from mainline
517
+ 2013-06-05 Uros Bizjak <ubizjak@gmail.com>
519
+ * config/alpha/alpha.c (alpha_emit_conditional_move): Swap all
520
+ GE, GT, GEU and GTU compares, modulo DImode compares with zero.
522
+ Backport from mainline
523
+ 2013-05-23 Uros Bizjak <ubizjak@gmail.com>
526
+ * config/alpha/alpha.md (unspec): Add UNSPEC_XFLT_COMPARE.
527
+ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Construct
528
+ REG_EQUAL note as UNSPEC_XFLT_COMPARE unspec.
530
+2013-06-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
532
+ Backport from mainline.
533
+ 2013-05-22 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
535
+ * config/rs6000/rs6000.h (MALLOC_ABI_ALIGNMENT): New #define.
537
+2013-06-03 James Greenhalgh <james.greenhalgh@arm.com>
539
+ Backport from mainline.
540
+ 2013-04-25 James Greenhalgh <james.greenhalgh@arm.com>
542
+ * config/aarch64/aarch64.c (aarch64_print_operand): Fix asm_fprintf
543
+ format specifier in 'X' case.
545
+2013-05-31 Richard Henderson <rth@redhat.com>
548
+ * config/i386/i386.c (ix86_seh_fixup_eh_fallthru): New.
549
+ (ix86_reorg): Call it.
551
2013-05-31 Release Manager
553
* GCC 4.8.1 released.
555
Backport from mainline
556
2013-05-02 Greta Yorsh <Greta.Yorsh@arm.com>
560
* config/arm/arm.c (arm_expand_epilogue): Check really_return before
561
generating simple_return for naked functions.
563
@@ -203,14 +278,14 @@
565
2013-05-09 Martin Jambor <mjambor@suse.cz>
567
- PR middle-end/56988
568
- * ipa-prop.h (ipa_agg_replacement_value): New flag by_ref.
569
- * ipa-cp.c (find_aggregate_values_for_callers_subset): Fill in the
570
+ PR middle-end/56988
571
+ * ipa-prop.h (ipa_agg_replacement_value): New flag by_ref.
572
+ * ipa-cp.c (find_aggregate_values_for_callers_subset): Fill in the
573
by_ref flag of ipa_agg_replacement_value structures.
574
- (known_aggs_to_agg_replacement_list): Likewise.
575
- * ipa-prop.c (write_agg_replacement_chain): Stream by_ref flag.
576
- (read_agg_replacement_chain): Likewise.
577
- (ipcp_transform_function): Also check that by_ref flags match.
578
+ (known_aggs_to_agg_replacement_list): Likewise.
579
+ * ipa-prop.c (write_agg_replacement_chain): Stream by_ref flag.
580
+ (read_agg_replacement_chain): Likewise.
581
+ (ipcp_transform_function): Also check that by_ref flags match.
583
2013-05-08 Diego Novillo <dnovillo@google.com>
586
2013-04-25 Marek Polacek <polacek@redhat.com>
588
PR tree-optimization/57066
589
- * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
590
+ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
592
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
594
@@ -351,40 +426,40 @@
595
Backport from mainline
596
2013-04-24 Vladimir Makarov <vmakarov@redhat.com>
598
- PR rtl-optimizations/57046
599
- * lra-constraints (split_reg): Set up lra_risky_transformations_p
600
- for multi-reg splits.
601
+ PR rtl-optimizations/57046
602
+ * lra-constraints (split_reg): Set up lra_risky_transformations_p
603
+ for multi-reg splits.
605
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
607
Backport from mainline
608
2013-04-22 Vladimir Makarov <vmakarov@redhat.com>
611
- * lra-eliminations.c (mark_not_eliminable): Prevent elimination of
612
- a set sp if no stack realignment.
614
+ * lra-eliminations.c (mark_not_eliminable): Prevent elimination of
615
+ a set sp if no stack realignment.
617
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
619
Backport from mainline
620
2013-04-18 Vladimir Makarov <vmakarov@redhat.com>
622
- PR rtl-optimization/56999
623
- * lra-coalesce.c (coalescable_pseudo_p): Remove 2nd parameter and
625
- (lra_coalesce): Remove split_origin_bitmap and related code.
626
- * lra.c (lra): Coalesce after undoing inheritance. Recreate live
627
- ranges if necessary.
628
+ PR rtl-optimization/56999
629
+ * lra-coalesce.c (coalescable_pseudo_p): Remove 2nd parameter and
631
+ (lra_coalesce): Remove split_origin_bitmap and related code.
632
+ * lra.c (lra): Coalesce after undoing inheritance. Recreate live
633
+ ranges if necessary.
635
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
637
Backport from mainline
638
2013-04-19 Vladimir Makarov <vmakarov@redhat.com>
640
- PR rtl-optimization/56847
641
- * lra-constraints.c (process_alt_operands): Discourage alternative
642
- with non-matche doffsettable memory constraint fro memory with
644
+ PR rtl-optimization/56847
645
+ * lra-constraints.c (process_alt_operands): Discourage alternative
646
+ with non-matche doffsettable memory constraint fro memory with
649
2013-05-02 Ian Bolton <ian.bolton@arm.com>
651
Index: gcc/testsuite/gcc.target/sh/pr56547-2.c
652
===================================================================
653
--- a/src/gcc/testsuite/gcc.target/sh/pr56547-2.c (.../tags/gcc_4_8_1_release)
654
+++ b/src/gcc/testsuite/gcc.target/sh/pr56547-2.c (.../branches/gcc-4_8-branch)
656
+/* Verify that the fmac insn is used for the expression 'a * b + a' and
657
+ 'a * a + a' when -ffast-math is specified. */
658
+/* { dg-do compile { target "sh*-*-*" } } */
659
+/* { dg-options "-O1 -ffast-math" } */
660
+/* { dg-skip-if "" { "sh*-*-*" } { "-m1" "-m2" "-m3" "-m4al" "*nofpu" "-m4-340*" "-m4-400*" "-m4-500*" "-m5*" } { "" } } */
661
+/* { dg-final { scan-assembler-times "fmac" 2 } } */
664
+test_00 (float a, float b)
674
Index: gcc/testsuite/gcc.target/sh/pr56547-1.c
675
===================================================================
676
--- a/src/gcc/testsuite/gcc.target/sh/pr56547-1.c (.../tags/gcc_4_8_1_release)
677
+++ b/src/gcc/testsuite/gcc.target/sh/pr56547-1.c (.../branches/gcc-4_8-branch)
679
+/* Verify that the fmac insn is used for the expression 'a * b + a' and
681
+ This assumes that the default compiler setting is -ffp-contract=fast. */
682
+/* { dg-do compile { target "sh*-*-*" } } */
683
+/* { dg-options "-O1" } */
684
+/* { dg-skip-if "" { "sh*-*-*" } { "-m1" "-m2" "-m3" "-m4al" "*nofpu" "-m4-340*" "-m4-400*" "-m4-500*" "-m5*" } { "" } } */
685
+/* { dg-final { scan-assembler-times "fmac" 2 } } */
688
+test_00 (float a, float b)
698
Index: gcc/testsuite/gfortran.dg/defined_assignment_6.f90
699
===================================================================
700
--- a/src/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 (.../tags/gcc_4_8_1_release)
701
+++ b/src/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 (.../branches/gcc-4_8-branch)
707
+! Contributed by Damian Rouson
709
+module ref_counter_implementation
712
+ procedure :: assign
713
+ generic :: assignment(=) => assign
716
+ subroutine assign (lhs, rhs)
717
+ class (ref_counter), intent(inout) :: lhs
718
+ class (ref_counter), intent(in) :: rhs
721
+module foo_parent_implementation
722
+ use ref_counter_implementation ,only: ref_counter
724
+ type(ref_counter) :: counter
727
+ type(foo_parent) function new_foo_parent()
730
+module foo_implementation
731
+ use foo_parent_implementation ,only: foo_parent,new_foo_parent
732
+ type, extends(foo_parent) :: foo
735
+ type(foo) function new_foo()
736
+ new_foo%foo_parent = new_foo_parent()
739
Index: gcc/testsuite/gfortran.dg/typebound_override_4.f90
740
===================================================================
741
--- a/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../tags/gcc_4_8_1_release)
742
+++ b/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../branches/gcc-4_8-branch)
746
+! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
748
+! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
754
+ procedure, pass(map) :: clone => base_clone
757
+ subroutine base_clone(map,mapout)
758
+ class(base_type) :: map
759
+ class(base_type) :: mapout
766
+ type, extends(base_type) :: r_type
768
+ procedure, pass(map) :: clone => r_clone ! { dg-error "Type/rank mismatch in argument" }
771
+ subroutine r_clone(map,mapout)
772
+ class(r_type) :: map
773
+ class(r_type) :: mapout
777
+! { dg-final { cleanup-modules "base_mod r_mod" } }
778
Index: gcc/testsuite/gcc.c-torture/execute/pr57568.c
779
===================================================================
780
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../tags/gcc_4_8_1_release)
781
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../branches/gcc-4_8-branch)
783
+/* PR target/57568 */
785
+extern void abort (void);
786
+int a[6][9] = { }, b = 1, *c = &a[3][5];
791
+ if (b && (*c = *c + *c))
795
Index: gcc/testsuite/ChangeLog
796
===================================================================
797
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_1_release)
798
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
800
+2013-06-10 Oleg Endo <olegendo@gcc.gnu.org>
802
+ Backport from mainline
803
+ 2013-05-20 Oleg Endo <olegendo@gcc.gnu.org>
806
+ * gcc.target/sh/pr56547-1.c: New.
807
+ * gcc.target/sh/pr56547-2.c: New.
809
+2013-06-09 Jakub Jelinek <jakub@redhat.com>
812
+ * gcc.c-torture/execute/pr57568.c: New test.
814
+2013-06-04 Tobias Burnus <burnus@net-b.de>
816
+ Backport from mainline
817
+ 2013-05-22 Tobias Burnus <burnus@net-b.de>
820
+ * gfortran.dg/defined_assignment_6.f90: New.
822
+2013-05-31 Janus Weil <janus@gcc.gnu.org>
823
+ Tobias Burnus <burnus@net-b.de>
826
+ * gfortran.dg/typebound_override_4.f90: New.
828
2013-05-31 Release Manager
830
* GCC 4.8.1 released.
831
Index: gcc/testsuite/g++.dg/cpp0x/initlist71.C
832
===================================================================
833
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist71.C (.../tags/gcc_4_8_1_release)
834
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist71.C (.../branches/gcc-4_8-branch)
837
+// { dg-require-effective-target c++11 }
838
+// { dg-options -Wconversion }
842
+ int x = sizeof(int);
843
+ int y { sizeof(int) };
845
Index: gcc/testsuite/g++.dg/cpp0x/defaulted44.C
846
===================================================================
847
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted44.C (.../tags/gcc_4_8_1_release)
848
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted44.C (.../branches/gcc-4_8-branch)
851
+// { dg-require-effective-target c++11 }
855
+ struct B: virtual A { };
856
+ struct C: virtual B { };
860
+ void operator= (D &);
865
+ struct A { A& operator=(A&&); };
866
+ struct B: virtual A { }; // { dg-warning "move assignment" }
867
+ struct C: virtual B { }; // { dg-warning "move assignment" }
871
+ void operator= (D &);
874
Index: gcc/cp/class.c
875
===================================================================
876
--- a/src/gcc/cp/class.c (.../tags/gcc_4_8_1_release)
877
+++ b/src/gcc/cp/class.c (.../branches/gcc-4_8-branch)
878
@@ -4833,6 +4833,44 @@
882
+/* TYPE is being used as a virtual base, and has a non-trivial move
883
+ assignment. Return true if this is due to there being a user-provided
884
+ move assignment in TYPE or one of its subobjects; if there isn't, then
885
+ multiple move assignment can't cause any harm. */
888
+vbase_has_user_provided_move_assign (tree type)
890
+ /* Does the type itself have a user-provided move assignment operator? */
892
+ = lookup_fnfields_slot_nolazy (type, ansi_assopname (NOP_EXPR));
893
+ fns; fns = OVL_NEXT (fns))
895
+ tree fn = OVL_CURRENT (fns);
896
+ if (move_fn_p (fn) && user_provided_p (fn))
900
+ /* Do any of its bases? */
901
+ tree binfo = TYPE_BINFO (type);
903
+ for (int i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
904
+ if (vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
907
+ /* Or non-static data members? */
908
+ for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
910
+ if (TREE_CODE (field) == FIELD_DECL
911
+ && CLASS_TYPE_P (TREE_TYPE (field))
912
+ && vbase_has_user_provided_move_assign (TREE_TYPE (field)))
920
/* If default-initialization leaves part of TYPE uninitialized, returns
921
a DECL for the field or TYPE itself (DR 253). */
923
Index: gcc/cp/method.c
924
===================================================================
925
--- a/src/gcc/cp/method.c (.../tags/gcc_4_8_1_release)
926
+++ b/src/gcc/cp/method.c (.../branches/gcc-4_8-branch)
927
@@ -1340,7 +1340,8 @@
928
if (diag && assign_p && move_p
929
&& BINFO_VIRTUAL_P (base_binfo)
930
&& rval && TREE_CODE (rval) == FUNCTION_DECL
931
- && move_fn_p (rval) && !trivial_fn_p (rval))
932
+ && move_fn_p (rval) && !trivial_fn_p (rval)
933
+ && vbase_has_user_provided_move_assign (basetype))
934
warning (OPT_Wvirtual_move_assign,
935
"defaulted move assignment for %qT calls a non-trivial "
936
"move assignment operator for virtual base %qT",
937
Index: gcc/cp/ChangeLog
938
===================================================================
939
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_1_release)
940
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
942
+2013-05-31 Jason Merrill <jason@redhat.com>
945
+ * class.c (vbase_has_user_provided_move_assign): New.
946
+ * method.c (synthesized_method_walk): Check it.
947
+ * cp-tree.h: Declare it.
950
+ * call.c (convert_like_real): Use cp_convert_and_check.
951
+ * cvt.c (cp_convert_and_check): Use maybe_constant_value.
952
+ * semantics.c (cxx_eval_constant_expression): Handle LTGT_EXPR.
953
+ (potential_constant_expression_1): Handle OMP_ATOMIC*.
955
2013-05-31 Release Manager
957
* GCC 4.8.1 released.
958
Index: gcc/cp/semantics.c
959
===================================================================
960
--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_8_1_release)
961
+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_8-branch)
962
@@ -7990,6 +7990,7 @@
969
r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
970
@@ -8846,6 +8847,12 @@
975
+ case OMP_ATOMIC_READ:
976
+ case OMP_ATOMIC_CAPTURE_OLD:
977
+ case OMP_ATOMIC_CAPTURE_NEW:
981
if (objc_is_property_ref (t))
984
===================================================================
985
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_1_release)
986
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
987
@@ -6195,8 +6195,8 @@
988
if (convs->check_narrowing)
989
check_narrowing (totype, expr);
991
- if (issue_conversion_warnings && (complain & tf_warning))
992
- expr = convert_and_check (totype, expr);
993
+ if (issue_conversion_warnings)
994
+ expr = cp_convert_and_check (totype, expr, complain);
996
expr = convert (totype, expr);
999
===================================================================
1000
--- a/src/gcc/cp/cvt.c (.../tags/gcc_4_8_1_release)
1001
+++ b/src/gcc/cp/cvt.c (.../branches/gcc-4_8-branch)
1004
if (TREE_TYPE (expr) == type)
1007
+ if (TREE_CODE (expr) == SIZEOF_EXPR)
1008
+ expr = maybe_constant_value (expr);
1010
result = cp_convert (type, expr, complain);
1012
Index: gcc/cp/cp-tree.h
1013
===================================================================
1014
--- a/src/gcc/cp/cp-tree.h (.../tags/gcc_4_8_1_release)
1015
+++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-4_8-branch)
1016
@@ -5057,6 +5057,7 @@
1017
extern bool user_provided_p (tree);
1018
extern bool type_has_user_provided_constructor (tree);
1019
extern bool type_has_user_provided_default_constructor (tree);
1020
+extern bool vbase_has_user_provided_move_assign (tree);
1021
extern tree default_init_uninitialized_part (tree);
1022
extern bool trivial_default_constructor_is_constexpr (tree);
1023
extern bool type_has_constexpr_default_constructor (tree);
1025
===================================================================
1026
--- a/src/gcc/recog.c (.../tags/gcc_4_8_1_release)
1027
+++ b/src/gcc/recog.c (.../branches/gcc-4_8-branch)
1028
@@ -1949,9 +1949,6 @@
1029
(strictp ? strict_memory_address_addr_space_p
1030
: memory_address_addr_space_p);
1031
unsigned int mode_sz = GET_MODE_SIZE (mode);
1032
-#ifdef POINTERS_EXTEND_UNSIGNED
1033
- enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
1036
if (CONSTANT_ADDRESS_P (y))
1038
@@ -1962,6 +1959,13 @@
1039
if (mode_dependent_address_p (y, as))
1042
+ enum machine_mode address_mode = GET_MODE (y);
1043
+ if (address_mode == VOIDmode)
1044
+ address_mode = targetm.addr_space.address_mode (as);
1045
+#ifdef POINTERS_EXTEND_UNSIGNED
1046
+ enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
1049
/* ??? How much offset does an offsettable BLKmode reference need?
1050
Clearly that depends on the situation in which it's being used.
1051
However, the current situation in which we test 0xffffffff is
1052
@@ -1977,7 +1981,7 @@
1056
- *y2 = plus_constant (GET_MODE (y), *y2, mode_sz - 1);
1057
+ *y2 = plus_constant (address_mode, *y2, mode_sz - 1);
1058
/* Use QImode because an odd displacement may be automatically invalid
1059
for any wider mode. But it should be valid for a single byte. */
1060
good = (*addressp) (QImode, y, as);
1061
@@ -1998,20 +2002,20 @@
1062
if (GET_CODE (y) == LO_SUM
1064
&& mode_sz <= GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT)
1065
- z = gen_rtx_LO_SUM (GET_MODE (y), XEXP (y, 0),
1066
- plus_constant (GET_MODE (y), XEXP (y, 1),
1067
+ z = gen_rtx_LO_SUM (address_mode, XEXP (y, 0),
1068
+ plus_constant (address_mode, XEXP (y, 1),
1070
#ifdef POINTERS_EXTEND_UNSIGNED
1071
/* Likewise for a ZERO_EXTEND from pointer_mode. */
1072
else if (POINTERS_EXTEND_UNSIGNED > 0
1073
&& GET_CODE (y) == ZERO_EXTEND
1074
&& GET_MODE (XEXP (y, 0)) == pointer_mode)
1075
- z = gen_rtx_ZERO_EXTEND (GET_MODE (y),
1076
+ z = gen_rtx_ZERO_EXTEND (address_mode,
1077
plus_constant (pointer_mode, XEXP (y, 0),
1081
- z = plus_constant (GET_MODE (y), y, mode_sz - 1);
1082
+ z = plus_constant (address_mode, y, mode_sz - 1);
1084
/* Use QImode because an odd displacement may be automatically invalid
1085
for any wider mode. But it should be valid for a single byte. */
1086
Index: gcc/fortran/interface.c
1087
===================================================================
1088
--- a/src/gcc/fortran/interface.c (.../tags/gcc_4_8_1_release)
1089
+++ b/src/gcc/fortran/interface.c (.../branches/gcc-4_8-branch)
1090
@@ -1024,7 +1024,8 @@
1091
bool type_must_agree, char *errmsg, int err_len)
1093
/* Check type and rank. */
1094
- if (type_must_agree && !compare_type_rank (s2, s1))
1095
+ if (type_must_agree &&
1096
+ (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
1098
snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1100
Index: gcc/fortran/ChangeLog
1101
===================================================================
1102
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_1_release)
1103
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
1105
+2013-06-04 Tobias Burnus <burnus@net-b.de>
1107
+ Backport from mainline
1108
+ 2013-05-22 Tobias Burnus <burnus@net-b.de>
1111
+ * resolve.c (get_temp_from_expr): Commit created sym.
1113
+2013-05-31 Janus Weil <janus@gcc.gnu.org>
1114
+ Tobias Burnus <burnus@net-b.de>
1117
+ * interface.c (check_dummy_characteristics): Symmetrize type check.
1119
2013-05-31 Release Manager
1121
* GCC 4.8.1 released.
1122
Index: gcc/fortran/resolve.c
1123
===================================================================
1124
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_8_1_release)
1125
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_8-branch)
1126
@@ -9759,6 +9759,7 @@
1128
gfc_set_sym_referenced (tmp->n.sym);
1129
gfc_add_flavor (&tmp->n.sym->attr, FL_VARIABLE, name, NULL);
1130
+ gfc_commit_symbol (tmp->n.sym);
1131
e = gfc_lval_expr_from_sym (tmp->n.sym);
1133
/* Should the lhs be a section, use its array ref for the
1134
Index: gcc/config/alpha/alpha.md
1135
===================================================================
1136
--- a/src/gcc/config/alpha/alpha.md (.../tags/gcc_4_8_1_release)
1137
+++ b/src/gcc/config/alpha/alpha.md (.../branches/gcc-4_8-branch)
1139
;; Uses of UNSPEC in this file:
1141
(define_c_enum "unspec" [
1142
+ UNSPEC_XFLT_COMPARE
1146
Index: gcc/config/alpha/alpha.c
1147
===================================================================
1148
--- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_8_1_release)
1149
+++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_8-branch)
1150
@@ -2700,12 +2700,12 @@
1153
case GE: case GT: case GEU: case GTU:
1154
- /* These must be swapped. */
1155
- if (op1 != CONST0_RTX (cmp_mode))
1157
- code = swap_condition (code);
1158
- tem = op0, op0 = op1, op1 = tem;
1160
+ /* These normally need swapping, but for integer zero we have
1161
+ special patterns that recognize swapped operands. */
1162
+ if (cmp_mode == DImode && op1 == const0_rtx)
1164
+ code = swap_condition (code);
1165
+ tem = op0, op0 = op1, op1 = tem;
1169
@@ -3067,12 +3067,9 @@
1171
out = gen_reg_rtx (DImode);
1173
- /* What's actually returned is -1,0,1, not a proper boolean value,
1174
- so use an EXPR_LIST as with a generic libcall instead of a
1175
- comparison type expression. */
1176
- note = gen_rtx_EXPR_LIST (VOIDmode, op1, NULL_RTX);
1177
- note = gen_rtx_EXPR_LIST (VOIDmode, op0, note);
1178
- note = gen_rtx_EXPR_LIST (VOIDmode, func, note);
1179
+ /* What's actually returned is -1,0,1, not a proper boolean value. */
1180
+ note = gen_rtx_fmt_ee (cmp_code, VOIDmode, op0, op1);
1181
+ note = gen_rtx_UNSPEC (DImode, gen_rtvec (1, note), UNSPEC_XFLT_COMPARE);
1182
alpha_emit_xfloating_libcall (func, out, operands, 2, note);
1185
Index: gcc/config/i386/i386.md
1186
===================================================================
1187
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_8_1_release)
1188
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_8-branch)
1189
@@ -17043,6 +17043,7 @@
1190
"(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
1191
&& peep2_reg_dead_p (4, operands[0])
1192
&& !reg_overlap_mentioned_p (operands[0], operands[1])
1193
+ && !reg_overlap_mentioned_p (operands[0], operands[2])
1194
&& (<MODE>mode != QImode
1195
|| immediate_operand (operands[2], QImode)
1196
|| q_regs_operand (operands[2], QImode))
1197
@@ -17107,6 +17108,7 @@
1198
|| immediate_operand (operands[2], SImode)
1199
|| q_regs_operand (operands[2], SImode))
1200
&& !reg_overlap_mentioned_p (operands[0], operands[1])
1201
+ && !reg_overlap_mentioned_p (operands[0], operands[2])
1202
&& ix86_match_ccmode (peep2_next_insn (3),
1203
(GET_CODE (operands[3]) == PLUS
1204
|| GET_CODE (operands[3]) == MINUS)
1205
Index: gcc/config/i386/i386.c
1206
===================================================================
1207
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_8_1_release)
1208
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_8-branch)
1209
@@ -35444,6 +35444,46 @@
1213
+/* Fix up a Windows system unwinder issue. If an EH region falls thru into
1214
+ the epilogue, the Windows system unwinder will apply epilogue logic and
1215
+ produce incorrect offsets. This can be avoided by adding a nop between
1216
+ the last insn that can throw and the first insn of the epilogue. */
1219
+ix86_seh_fixup_eh_fallthru (void)
1224
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
1228
+ /* Find the beginning of the epilogue. */
1229
+ for (insn = BB_END (e->src); insn != NULL; insn = PREV_INSN (insn))
1230
+ if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
1235
+ /* We only care about preceeding insns that can throw. */
1236
+ insn = prev_active_insn (insn);
1237
+ if (insn == NULL || !can_throw_internal (insn))
1240
+ /* Do not separate calls from their debug information. */
1241
+ for (next = NEXT_INSN (insn); next != NULL; next = NEXT_INSN (next))
1243
+ && (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION
1244
+ || NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION))
1249
+ emit_insn_after (gen_nops (const1_rtx), insn);
1253
/* Implement machine specific optimizations. We implement padding of returns
1254
for K8 CPUs and pass to avoid 4 jumps in the single 16 byte window. */
1256
@@ -35453,6 +35493,9 @@
1257
with old MDEP_REORGS that are not CFG based. Recompute it now. */
1258
compute_bb_for_insn ();
1260
+ if (TARGET_SEH && current_function_has_exception_handlers ())
1261
+ ix86_seh_fixup_eh_fallthru ();
1263
if (optimize && optimize_function_for_speed_p (cfun))
1265
if (TARGET_PAD_SHORT_FUNCTION)
1266
Index: gcc/config/sh/sh.md
1267
===================================================================
1268
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_8_1_release)
1269
+++ b/src/gcc/config/sh/sh.md (.../branches/gcc-4_8-branch)
1270
@@ -12073,10 +12073,10 @@
1272
;; FMA (fused multiply-add) patterns
1273
(define_expand "fmasf4"
1274
- [(set (match_operand:SF 0 "fp_arith_reg_operand" "")
1275
- (fma:SF (match_operand:SF 1 "fp_arith_reg_operand" "")
1276
- (match_operand:SF 2 "fp_arith_reg_operand" "")
1277
- (match_operand:SF 3 "fp_arith_reg_operand" "")))]
1278
+ [(set (match_operand:SF 0 "fp_arith_reg_operand")
1279
+ (fma:SF (match_operand:SF 1 "fp_arith_reg_operand")
1280
+ (match_operand:SF 2 "fp_arith_reg_operand")
1281
+ (match_operand:SF 3 "fp_arith_reg_operand")))]
1282
"TARGET_SH2E || TARGET_SHMEDIA_FPU"
1285
@@ -12107,6 +12107,43 @@
1287
[(set_attr "type" "fparith_media")])
1289
+;; For some cases such as 'a * b + a' the FMA pattern is not generated by
1290
+;; previous transformations. If FMA is generally allowed, let the combine
1291
+;; pass utilize it.
1292
+(define_insn_and_split "*fmasf4"
1293
+ [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
1294
+ (plus:SF (mult:SF (match_operand:SF 1 "fp_arith_reg_operand" "%w")
1295
+ (match_operand:SF 2 "fp_arith_reg_operand" "f"))
1296
+ (match_operand:SF 3 "arith_reg_operand" "0")))
1297
+ (use (match_operand:PSI 4 "fpscr_operand"))]
1298
+ "TARGET_SH2E && flag_fp_contract_mode != FP_CONTRACT_OFF"
1300
+ "&& can_create_pseudo_p ()"
1301
+ [(parallel [(set (match_dup 0)
1302
+ (fma:SF (match_dup 1) (match_dup 2) (match_dup 3)))
1303
+ (use (match_dup 4))])]
1305
+ /* Change 'b * a + a' into 'a * b + a'.
1306
+ This is better for register allocation. */
1307
+ if (REGNO (operands[2]) == REGNO (operands[3]))
1309
+ rtx tmp = operands[1];
1310
+ operands[1] = operands[2];
1311
+ operands[2] = tmp;
1314
+ [(set_attr "type" "fp")
1315
+ (set_attr "fp_mode" "single")])
1317
+(define_insn "*fmasf4_media"
1318
+ [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
1319
+ (plus:SF (mult:SF (match_operand:SF 1 "fp_arith_reg_operand" "%f")
1320
+ (match_operand:SF 2 "fp_arith_reg_operand" "f"))
1321
+ (match_operand:SF 3 "fp_arith_reg_operand" "0")))]
1322
+ "TARGET_SHMEDIA_FPU && flag_fp_contract_mode != FP_CONTRACT_OFF"
1323
+ "fmac.s %1, %2, %0"
1324
+ [(set_attr "type" "fparith_media")])
1326
(define_expand "divsf3"
1327
[(set (match_operand:SF 0 "arith_reg_operand" "")
1328
(div:SF (match_operand:SF 1 "arith_reg_operand" "")
1329
Index: gcc/config/aarch64/aarch64.c
1330
===================================================================
1331
--- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_4_8_1_release)
1332
+++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-4_8-branch)
1333
@@ -3373,7 +3373,7 @@
1334
output_operand_lossage ("invalid operand for '%%%c'", code);
1337
- asm_fprintf (f, "0x%x", UINTVAL (x));
1338
+ asm_fprintf (f, "0x%wx", UINTVAL (x));
1342
Index: gcc/config/rs6000/rs6000.h
1343
===================================================================
1344
--- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_4_8_1_release)
1345
+++ b/src/gcc/config/rs6000/rs6000.h (.../branches/gcc-4_8-branch)
1346
@@ -2289,6 +2289,13 @@
1347
/* How to align the given loop. */
1348
#define LOOP_ALIGN(LABEL) rs6000_loop_align(LABEL)
1350
+/* Alignment guaranteed by __builtin_malloc. */
1351
+/* FIXME: 128-bit alignment is guaranteed by glibc for TARGET_64BIT.
1352
+ However, specifying the stronger guarantee currently leads to
1353
+ a regression in SPEC CPU2006 437.leslie3d. The stronger
1354
+ guarantee should be implemented here once that's fixed. */
1355
+#define MALLOC_ABI_ALIGNMENT (64)
1357
/* Pick up the return address upon entry to a procedure. Used for
1358
dwarf2 unwind information. This also enables the table driven
1360
Index: fixincludes/ChangeLog
1361
===================================================================
1362
--- a/src/fixincludes/ChangeLog (.../tags/gcc_4_8_1_release)
1363
+++ b/src/fixincludes/ChangeLog (.../branches/gcc-4_8-branch)
1365
+2013-05-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
1367
+ Backport from mainline:
1368
+ 2013-05-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
1370
+ * inclhack.def (solaris_pow_int_overload): Update comment.
1371
+ Change guard to match <cmath>.
1372
+ * fixincl.x: Regenerate.
1373
+ * tests/base/iso/math_iso.h [SOLARIS_POW_INT_OVERLOAD_CHECK]:
1376
2013-05-31 Release Manager
1378
* GCC 4.8.1 released.
1379
Index: fixincludes/tests/base/iso/math_iso.h
1380
===================================================================
1381
--- a/src/fixincludes/tests/base/iso/math_iso.h (.../tags/gcc_4_8_1_release)
1382
+++ b/src/fixincludes/tests/base/iso/math_iso.h (.../branches/gcc-4_8-branch)
1386
#if defined( SOLARIS_POW_INT_OVERLOAD_CHECK )
1387
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
1388
+#if __cplusplus < 201103L
1389
inline long double pow(long double __X, int __Y) { return
1390
__powl(__X, (long double) (__Y)); }
1392
Index: fixincludes/fixincl.x
1393
===================================================================
1394
--- a/src/fixincludes/fixincl.x (.../tags/gcc_4_8_1_release)
1395
+++ b/src/fixincludes/fixincl.x (.../branches/gcc-4_8-branch)
1398
* DO NOT EDIT THIS FILE (fixincl.x)
1400
- * It has been AutoGen-ed Saturday December 29, 2012 at 09:17:09 AM BRST
1401
+ * It has been AutoGen-ed Thursday May 16, 2013 at 03:34:25 PM MEST
1402
* From the definitions inclhack.def
1403
* and the template file fixincl
1405
-/* DO NOT SVN-MERGE THIS FILE, EITHER Sat Dec 29 09:17:10 BRST 2012
1406
+/* DO NOT SVN-MERGE THIS FILE, EITHER Thu May 16 15:34:25 MEST 2013
1408
* You must regenerate it. Use the ./genfixes script.
1410
@@ -6663,7 +6663,7 @@
1412
static const char* apzSolaris_Pow_Int_OverloadPatch[] = {
1414
- "#ifndef __GXX_EXPERIMENTAL_CXX0X__\n\
1415
+ "#if __cplusplus < 201103L\n\
1419
Index: fixincludes/inclhack.def
1420
===================================================================
1421
--- a/src/fixincludes/inclhack.def (.../tags/gcc_4_8_1_release)
1422
+++ b/src/fixincludes/inclhack.def (.../branches/gcc-4_8-branch)
1423
@@ -3447,7 +3447,7 @@
1427
- * The pow overloads with int were removed in C++ 2011.
1428
+ * The pow overloads with int were removed in C++ 2011 DR 550.
1431
hackname = solaris_pow_int_overload;
1432
@@ -3456,7 +3456,7 @@
1433
select = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)"
1434
" *\\{[^{}]*\n[^{}]*\\}";
1436
- c_fix_arg = "#ifndef __GXX_EXPERIMENTAL_CXX0X__\n%0\n#endif";
1437
+ c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif";
1440
" inline long double pow(long double __X, int __Y) { return\n"