1
# DP: updates from the 4.8 branch upto 20140728 (r213129).
5
cat > ${dir}LAST_UPDATED <<EOF
6
Mon Jul 28 17:06:11 CEST 2014
7
Mon Jul 28 15:06:11 UTC 2014 (revision 213129)
11
LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_3_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/scripts/run_doxygen
16
===================================================================
17
--- a/src/libstdc++-v3/scripts/run_doxygen (.../tags/gcc_4_8_3_release)
18
+++ b/src/libstdc++-v3/scripts/run_doxygen (.../branches/gcc-4_8-branch)
23
- # Also drop in the header file and style sheet
24
- doxygen -w latex header.tex doxygen.sty
25
+ # Grrr, Doxygen 1.8.x changed the -w latex options.
26
+ need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'`
28
+ # Also drop in the header file (maybe footer file) and style sheet
29
+ if $need_footer; then
30
+ doxygen -w latex header.tex footer.tex doxygen.sty
32
+ doxygen -w latex header.tex doxygen.sty
36
echo :: LaTeX pages begin with
37
Index: libstdc++-v3/include/std/future
38
===================================================================
39
--- a/src/libstdc++-v3/include/std/future (.../tags/gcc_4_8_3_release)
40
+++ b/src/libstdc++-v3/include/std/future (.../branches/gcc-4_8-branch)
43
_M_set_result(function<_Ptr_type()> __res, bool __ignore_failure = false)
45
- bool __set = __ignore_failure;
47
// all calls to this function are serialized,
48
// side-effects of invoking __res only happen once
49
call_once(_M_once, &_State_base::_M_do_set, this, ref(__res),
53
+ _M_cond.notify_all();
54
+ else if (!__ignore_failure)
55
__throw_future_error(int(future_errc::promise_already_satisfied));
59
lock_guard<mutex> __lock(_M_mutex);
60
_M_result.swap(__res);
62
- _M_cond.notify_all();
68
set_value(const _Res& __r)
70
+ auto __future = _M_future;
71
auto __setter = _State::__setter(this, __r);
72
- _M_future->_M_set_result(std::move(__setter));
73
+ __future->_M_set_result(std::move(__setter));
79
+ auto __future = _M_future;
80
auto __setter = _State::__setter(this, std::move(__r));
81
- _M_future->_M_set_result(std::move(__setter));
82
+ __future->_M_set_result(std::move(__setter));
86
set_exception(exception_ptr __p)
88
+ auto __future = _M_future;
89
auto __setter = _State::__setter(__p, this);
90
- _M_future->_M_set_result(std::move(__setter));
91
+ __future->_M_set_result(std::move(__setter));
95
@@ -1081,15 +1085,17 @@
99
+ auto __future = _M_future;
100
auto __setter = _State::__setter(this, __r);
101
- _M_future->_M_set_result(std::move(__setter));
102
+ __future->_M_set_result(std::move(__setter));
106
set_exception(exception_ptr __p)
108
+ auto __future = _M_future;
109
auto __setter = _State::__setter(__p, this);
110
- _M_future->_M_set_result(std::move(__setter));
111
+ __future->_M_set_result(std::move(__setter));
115
@@ -1166,8 +1172,9 @@
117
set_exception(exception_ptr __p)
119
+ auto __future = _M_future;
120
auto __setter = _State::__setter(__p, this);
121
- _M_future->_M_set_result(std::move(__setter));
122
+ __future->_M_set_result(std::move(__setter));
126
@@ -1193,8 +1200,9 @@
128
promise<void>::set_value()
130
+ auto __future = _M_future;
131
auto __setter = _State::__setter(this);
132
- _M_future->_M_set_result(std::move(__setter));
133
+ __future->_M_set_result(std::move(__setter));
137
Index: libstdc++-v3/include/bits/stl_tree.h
138
===================================================================
139
--- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_4_8_3_release)
140
+++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-4_8-branch)
141
@@ -510,11 +510,11 @@
145
- { return static_cast<_Link_type>(&this->_M_impl._M_header); }
146
+ { return reinterpret_cast<_Link_type>(&this->_M_impl._M_header); }
150
- { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); }
151
+ { return reinterpret_cast<_Const_Link_type>(&this->_M_impl._M_header); }
153
static const_reference
154
_S_value(_Const_Link_type __x)
155
Index: libstdc++-v3/include/tr2/bool_set
156
===================================================================
157
--- a/src/libstdc++-v3/include/tr2/bool_set (.../tags/gcc_4_8_3_release)
158
+++ b/src/libstdc++-v3/include/tr2/bool_set (.../branches/gcc-4_8-branch)
162
* See N2136, Bool_set: multi-valued logic
163
- * by Herv� Br�nnimann, Guillaume Melquiond, Sylvain Pion.
164
+ * by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
166
* The implicit conversion to bool is slippery! I may use the new
167
* explicit conversion. This has been specialized in the language
168
Index: libstdc++-v3/ChangeLog
169
===================================================================
170
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_3_release)
171
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch)
173
+2014-06-03 Jonathan Wakely <jwakely@redhat.com>
175
+ Backport from mainline
176
+ 2014-04-15 Jonathan Wakely <jwakely@redhat.com>
179
+ * include/bits/stl_tree.h (_Rb_tree::_M_end): Fix invalid cast.
181
+ Backport from mainline
182
+ 2014-05-16 Jonathan Wakely <jwakely@redhat.com>
185
+ * include/std/future (__future_base::_State_baseV2::_M_set_result):
186
+ Signal condition variable after call_once returns.
187
+ (__future_base::_State_baseV2::_M_do_set): Do not signal here.
188
+ (promise::set_value, promise::set_exception): Increment the reference
189
+ count on the shared state until the function returns.
190
+ * testsuite/30_threads/promise/60966.cc: New.
192
+2014-05-29 Jonathan Wakely <jwakely@redhat.com>
194
+ * include/tr2/bool_set: Use UTF-8 for accented characters.
195
+ * scripts/run_doxygen: Handle Doxygen 1.8.x change.
197
2014-05-22 Release Manager
199
* GCC 4.8.3 released.
200
Index: libstdc++-v3/testsuite/30_threads/promise/60966.cc
201
===================================================================
202
--- a/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../tags/gcc_4_8_3_release)
203
+++ b/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../branches/gcc-4_8-branch)
205
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
206
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
207
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
208
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
209
+// { dg-require-cstdint "" }
210
+// { dg-require-gthreads "" }
211
+// { dg-require-atomic-builtins "" }
213
+// Copyright (C) 2014 Free Software Foundation, Inc.
215
+// This file is part of the GNU ISO C++ Library. This library is free
216
+// software; you can redistribute it and/or modify it under the
217
+// terms of the GNU General Public License as published by the
218
+// Free Software Foundation; either version 3, or (at your option)
219
+// any later version.
221
+// This library is distributed in the hope that it will be useful,
222
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
223
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
224
+// GNU General Public License for more details.
226
+// You should have received a copy of the GNU General Public License along
227
+// with this library; see the file COPYING3. If not see
228
+// <http://www.gnu.org/licenses/>.
231
+// This test hangs if std::promise::~promise() destroys the
232
+// shared state before std::promise::set_value() finishes using it.
238
+const int THREADS = 10;
240
+void run_task(std::promise<void>* pr)
242
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
248
+ std::vector<std::promise<void>*> tasks(THREADS);
249
+ std::vector<std::thread> threads(THREADS);
250
+ std::vector<std::future<void>> futures(THREADS);
252
+ for (int i = 0; i < THREADS; ++i)
254
+ std::promise<void>* task = new std::promise<void>;
256
+ futures[i] = task->get_future();
257
+ threads[i] = std::thread(run_task, task);
260
+ for (int i = 0; i < THREADS; ++i)
262
+ // the temporary future releases the state as soon as wait() returns
263
+ std::future<void>(std::move(futures[i])).wait();
264
+ // state is ready, should now be safe to delete promise, so it
265
+ // releases the shared state too
269
+ for (auto& t : threads)
273
===================================================================
274
--- a/src/configure.ac (.../tags/gcc_4_8_3_release)
275
+++ b/src/configure.ac (.../branches/gcc-4_8-branch)
276
@@ -1154,6 +1154,9 @@
278
host_makefile_frag="config/mh-mingw"
281
+ host_makefile_frag="config/mh-alpha-linux"
284
host_makefile_frag="config/mh-pa-hpux10"
287
===================================================================
288
--- a/src/ChangeLog (.../tags/gcc_4_8_3_release)
289
+++ b/src/ChangeLog (.../branches/gcc-4_8-branch)
291
+2014-07-26 Uros Bizjak <ubizjak@gmail.com>
294
+ * configure.ac (alpha*-*-linux*): Use mh-alpha-linux.
295
+ * configure: Regenerate.
297
2014-05-22 Release Manager
299
* GCC 4.8.3 released.
300
Index: contrib/ChangeLog
301
===================================================================
302
--- a/src/contrib/ChangeLog (.../tags/gcc_4_8_3_release)
303
+++ b/src/contrib/ChangeLog (.../branches/gcc-4_8-branch)
305
+2014-07-07 Richard Biener <rguenther@suse.de>
307
+ * gennews: Use gcc-3.0/index.html.
309
2014-05-22 Release Manager
311
* GCC 4.8.3 released.
312
Index: contrib/gennews
313
===================================================================
314
--- a/src/contrib/gennews (.../tags/gcc_4_8_3_release)
315
+++ b/src/contrib/gennews (.../branches/gcc-4_8-branch)
317
gcc-3.3/index.html gcc-3.3/changes.html
318
gcc-3.2/index.html gcc-3.2/changes.html
319
gcc-3.1/index.html gcc-3.1/changes.html
320
- gcc-3.0/gcc-3.0.html gcc-3.0/features.html gcc-3.0/caveats.html
321
+ gcc-3.0/index.html gcc-3.0/features.html gcc-3.0/caveats.html
322
gcc-2.95/index.html gcc-2.95/features.html gcc-2.95/caveats.html
323
egcs-1.1/index.html egcs-1.1/features.html egcs-1.1/caveats.html
324
egcs-1.0/index.html egcs-1.0/features.html egcs-1.0/caveats.html"
325
Index: config/mh-alpha-linux
326
===================================================================
327
--- a/src/config/mh-alpha-linux (.../tags/gcc_4_8_3_release)
328
+++ b/src/config/mh-alpha-linux (.../branches/gcc-4_8-branch)
330
+# Prevent GPREL16 relocation truncation
331
+LDFLAGS += -Wl,--no-relax
332
+BOOT_LDFLAGS += -Wl,--no-relax
333
Index: config/ChangeLog
334
===================================================================
335
--- a/src/config/ChangeLog (.../tags/gcc_4_8_3_release)
336
+++ b/src/config/ChangeLog (.../branches/gcc-4_8-branch)
338
+2014-07-26 Uros Bizjak <ubizjak@gmail.com>
341
+ * mh-alpha-linux: New file.
343
2014-05-22 Release Manager
345
* GCC 4.8.3 released.
346
Index: libjava/classpath
347
===================================================================
348
--- a/src/libjava/classpath (.../tags/gcc_4_8_3_release)
349
+++ b/src/libjava/classpath (.../branches/gcc-4_8-branch)
351
Property changes on: libjava/classpath
352
___________________________________________________________________
353
Modified: svn:mergeinfo
354
Merged /trunk/libjava/classpath:r211733
356
===================================================================
357
--- a/src/configure (.../tags/gcc_4_8_3_release)
358
+++ b/src/configure (.../branches/gcc-4_8-branch)
359
@@ -3834,6 +3834,9 @@
361
host_makefile_frag="config/mh-mingw"
364
+ host_makefile_frag="config/mh-alpha-linux"
367
host_makefile_frag="config/mh-pa-hpux10"
370
===================================================================
371
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_3_release)
372
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
377
===================================================================
378
--- a/src/gcc/ipa-cp.c (.../tags/gcc_4_8_3_release)
379
+++ b/src/gcc/ipa-cp.c (.../branches/gcc-4_8-branch)
381
else if (!opt_for_fn (node->symbol.decl, optimize)
382
|| !opt_for_fn (node->symbol.decl, flag_ipa_cp))
383
reason = "non-optimized function";
384
+ else if (node->tm_clone)
385
+ reason = "transactional memory clone";
387
if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
388
fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
390
===================================================================
391
--- a/src/gcc/omp-low.c (.../tags/gcc_4_8_3_release)
392
+++ b/src/gcc/omp-low.c (.../branches/gcc-4_8-branch)
393
@@ -1586,7 +1586,6 @@
394
TREE_STATIC (decl) = 1;
395
TREE_USED (decl) = 1;
396
DECL_ARTIFICIAL (decl) = 1;
397
- DECL_NAMELESS (decl) = 1;
398
DECL_IGNORED_P (decl) = 0;
399
TREE_PUBLIC (decl) = 0;
400
DECL_UNINLINABLE (decl) = 1;
402
===================================================================
403
--- a/src/gcc/toplev.c (.../tags/gcc_4_8_3_release)
404
+++ b/src/gcc/toplev.c (.../branches/gcc-4_8-branch)
405
@@ -1036,16 +1036,19 @@
407
if (warn_stack_usage >= 0)
409
+ const location_t loc = DECL_SOURCE_LOCATION (current_function_decl);
411
if (stack_usage_kind == DYNAMIC)
412
- warning (OPT_Wstack_usage_, "stack usage might be unbounded");
413
+ warning_at (loc, OPT_Wstack_usage_, "stack usage might be unbounded");
414
else if (stack_usage > warn_stack_usage)
416
if (stack_usage_kind == DYNAMIC_BOUNDED)
417
- warning (OPT_Wstack_usage_, "stack usage might be %wd bytes",
420
+ OPT_Wstack_usage_, "stack usage might be %wd bytes",
423
- warning (OPT_Wstack_usage_, "stack usage is %wd bytes",
425
+ warning_at (loc, OPT_Wstack_usage_, "stack usage is %wd bytes",
431
===================================================================
432
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_3_release)
433
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
435
+2014-07-25 Uros Bizjak <ubizjak@gmail.com>
437
+ * config/alpha/elf.h: Define TARGET_UNWIND_TABLES_DEFAULT.
439
+2014-07-24 Kyle McMartin <kyle@redhat.com>
441
+ * config/aarch64/aarch64-linux.h (TARGET_ASM_FILE_END): Define.
443
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
445
+ * config/rs6000/rs6000-protos.h (rs6000_special_adjust_field_align_p):
447
+ * config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p): New
448
+ function. Issue -Wpsabi warning if future GCC releases will use
449
+ different field alignment rules for this type.
450
+ * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Call it.
451
+ * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise.
452
+ * config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise.
454
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
456
+ * config/rs6000/rs6000.c (rs6000_function_arg_boundary): Issue
457
+ -Wpsabi note when encountering a type where future GCC releases
458
+ will apply different alignment requirements.
460
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
462
+ * config/rs6000/rs6000.c (rs6000_function_arg): If a float argument
463
+ does not fit fully into floating-point registers, and there is still
464
+ space in the register parameter area, issue -Wpsabi note that the ABI
465
+ will change in a future GCC release.
467
+2014-07-23 Sebastian Huber <sebastian.huber@embedded-brains.de>
469
+ * config/arm/t-rtems-eabi: Add
470
+ mthumb/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard,
471
+ mthumb/march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard,
472
+ mbig-endian/mthumb/march=armv7-r, and
473
+ mbig-endian/mthumb/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
476
+2014-07-21 Peter Bergner <bergner@vnet.ibm.com>
478
+ * config/rs6000/sysv4.h (LIBASAN_EARLY_SPEC): Define.
479
+ (LIBTSAN_EARLY_SPEC): Likewise.
480
+ (STATIC_LIBASAN_LIBS): Likewise.
481
+ (STATIC_LIBTSAN_LIBS): Likewise.
483
+2014-07-19 Eric Botcazou <ebotcazou@adacore.com>
485
+ * toplev.c (output_stack_usage): Adjust the location of the warning.
487
+2014-07-19 Daniel Cederman <cederman@gaisler.com>
489
+ * config/sparc/sync.md (*membar_storeload_leon3): New insn.
490
+ (*membar_storeload): Disable for LEON3.
492
+2014-07-17 Richard Biener <rguenther@suse.de>
494
+ PR rtl-optimization/61801
495
+ * sched-deps.c (sched_analyze_2): For ASM_OPERANDS and
496
+ ASM_INPUT don't set reg_pending_barrier if it appears in a
499
+2014-07-16 Jakub Jelinek <jakub@redhat.com>
501
+ * omp-low.c (create_omp_child_function): Don't set DECL_NAMELESS
502
+ on the FUNCTION_DECL.
504
+2014-07-10 Tom G. Christensen <tgc@jupiterrise.com>
506
+ * doc/install.texi: Remove links to defunct package providers for
509
+2014-07-10 Eric Botcazou <ebotcazou@adacore.com>
511
+ PR middle-end/53590
512
+ * function.c (allocate_struct_function): Revert r188667 change.
514
+2014-07-04 Jakub Jelinek <jakub@redhat.com>
516
+ PR tree-optimization/61684
517
+ * tree-ssa-ifcombine.c (recognize_single_bit_test): Make sure
518
+ rhs1 of conversion is a SSA_NAME before using SSA_NAME_DEF_STMT on it.
520
+2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
522
+ Backport from Mainline
523
+ 2014-06-20 Jakub Jelinek <jakub@redhat.com>
524
+ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
526
+ PR tree-optimization/61306
527
+ * tree-ssa-math-opts.c (struct symbolic_number): Store type of
528
+ expression instead of its size.
529
+ (do_shift_rotate): Adapt to change in struct symbolic_number. Return
530
+ false to prevent optimization when the result is unpredictable due to
531
+ arithmetic right shift of signed type with highest byte is set.
532
+ (verify_symbolic_number_p): Adapt to change in struct symbolic_number.
533
+ (find_bswap_1): Likewise. Return NULL to prevent optimization when the
534
+ result is unpredictable due to sign extension.
535
+ (find_bswap): Adapt to change in struct symbolic_number.
537
+2014-06-27 Uros Bizjak <ubizjak@gmail.com>
539
+ Backport from mainline
540
+ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
543
+ * config/alpha/alpha.c (alpha_handle_trap_shadows): Handle BARRIER RTX.
545
+2014-06-26 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
548
+ * config/rs6000/vsx.md (vsx_extract_v4sf): Fix bug with element
549
+ extraction other than index 3.
551
+2014-06-24 Jakub Jelinek <jakub@redhat.com>
554
+ * config/i386/driver-i386.c (host_detect_local_cpu): For unknown
555
+ model family 6 CPU with has_longmode never use a CPU without
558
+2014-06-20 Chung-Lin Tang <cltang@codesourcery.com>
560
+ Backport from mainline
562
+ 2014-06-20 Julian Brown <julian@codesourcery.com>
563
+ Chung-Lin Tang <cltang@codesourcery.com>
565
+ * config/arm/arm.c (arm_output_mi_thunk): Fix offset for
566
+ TARGET_THUMB1_ONLY. Add comments.
568
+2014-06-18 Uros Bizjak <ubizjak@gmail.com>
570
+ Backport from mainline
571
+ 2014-06-06 Uros Bizjak <ubizjak@gmail.com>
574
+ * config/i386/i386.md (*floatunssi<mode>2_i387_with_xmm): New
575
+ define_insn_and_split pattern, merged from *floatunssi<mode>2_1
576
+ and corresponding splitters. Zero extend general register
577
+ or memory input operand to XMM temporary. Enable for
578
+ TARGET_SSE2 and TARGET_INTER_UNIT_MOVES_TO_VEC only.
579
+ (floatunssi<mode>2): Update expander predicate.
581
+2014-06-18 Richard Henderson <rth@redhat.com>
584
+ * config/aarch64/aarch64.md (tlsdesc_small): Clobber CC_REGNUM.
586
+2014-06-17 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
588
+ Revert on gcc-4_8-branch.
589
+ * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
590
+ * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
592
+2014-06-17 Yufeng Zhang <yufeng.zhang@arm.com>
594
+ Backport from mainline
597
+ * config/aarch64/aarch64.c (aarch64_layout_arg): Add new local
598
+ variable 'size'; calculate 'size' right in the front; use
599
+ 'size' to compute 'nregs' (when 'allocate_ncrn != 0') and
600
+ pcum->aapcs_stack_words.
602
+2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
604
+ Backport from mainline
606
+ 2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
608
+ * config/rs6000/rs6000-builtin.def (BU_MISC_1): Delete.
609
+ (BU_MISC_2): Rename to ...
610
+ (BU_LDBL128_2): ... this.
611
+ * config/rs6000/rs6000.h (RS6000_BTM_LDBL128): New define.
612
+ (RS6000_BTM_COMMON): Add RS6000_BTM_LDBL128.
613
+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
614
+ RS6000_BTM_LDBL128.
615
+ (rs6000_invalid_builtin): Add long double 128-bit builtin support.
616
+ (rs6000_builtin_mask_names): Add RS6000_BTM_LDBL128.
617
+ * config/rs6000/rs6000.md (unpacktf_0): Remove define)expand.
618
+ (unpacktf_1): Likewise.
619
+ * doc/extend.texi (__builtin_longdouble_dw0): Remove documentation.
620
+ (__builtin_longdouble_dw1): Likewise.
621
+ * doc/sourcebuild.texi (longdouble128): Document.
623
+2014-06-13 Jason Merrill <jason@redhat.com>
626
+ * common.opt (-fno-gnu-unique): Add.
627
+ * config/elfos.h (USE_GNU_UNIQUE_OBJECT): Check it.
629
+2014-06-12 Georg-Johann Lay <avr@gjlay.de>
631
+ Backport from 2014-05-09 trunk r210272
633
+ * config/avr/avr-fixed.md (round<mode>3): Use -1U instead of -1 in
634
+ unsigned int initializers for regno_in, regno_out.
636
+ Backport from 2014-05-14 trunk r210418
637
+ * config/avr/avr.h (REG_CLASS_CONTENTS): Use unsigned suffix for
638
+ shifted values to avoid build warning.
640
+ Backport from 2014-06-12 trunk r211491
643
+ * config/avr/avr.md (push<mode>1): Avoid (subreg(mem)) when
644
+ loading from address spaces.
646
+2014-06-12 Alan Modra <amodra@gmail.com>
649
+ * doc/tm.texi.in (INCOMING_REG_PARM_STACK_SPACE): Document.
650
+ * doc/tm.texi: Regenerate.
651
+ * function.c (INCOMING_REG_PARM_STACK_SPACE): Provide default.
652
+ Use throughout in place of REG_PARM_STACK_SPACE.
653
+ * config/rs6000/rs6000.c (rs6000_reg_parm_stack_space): Add
654
+ "incoming" param. Pass to rs6000_function_parms_need_stack.
655
+ (rs6000_function_parms_need_stack): Add "incoming" param, ignore
656
+ prototype_p when incoming. Use function decl when incoming
657
+ to handle K&R style functions.
658
+ * config/rs6000/rs6000.h (REG_PARM_STACK_SPACE): Adjust.
659
+ (INCOMING_REG_PARM_STACK_SPACE): Define.
661
+2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
663
+ Back port from trunk
664
+ 2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
667
+ * config/rs6000/vsx.md (VSX_LE): Split VSX_D into 2 separate
668
+ iterators, VSX_D that handles 64-bit types, and VSX_LE that
669
+ handles swapping the two 64-bit double words on little endian
670
+ systems. Include V1TImode and optionally TImode in VSX_LE so that
671
+ these types are properly swapped. Change all of the insns and
672
+ splits that do the 64-bit swaps to use VSX_LE.
673
+ (vsx_le_perm_load_<mode>): Likewise.
674
+ (vsx_le_perm_store_<mode>): Likewise.
675
+ (splitters for little endian memory operations): Likewise.
676
+ (vsx_xxpermdi2_le_<mode>): Likewise.
677
+ (vsx_lxvd2x2_le_<mode>): Likewise.
678
+ (vsx_stxvd2x2_le_<mode>): Likewise.
680
+2014-06-05 Martin Jambor <mjambor@suse.cz>
683
+ * ipa-cp.c (determine_versionability): Pretend that tm_clones are
686
+2014-06-04 Richard Biener <rguenther@suse.de>
688
+ PR tree-optimization/61383
689
+ * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure
692
+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
694
+ Backport from mainline
695
+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
697
+ PR rtl-optimization/60866
698
+ * sel-sched-ir (sel_init_new_insn): New parameter old_seqno.
699
+ Default it to -1. Pass it down to init_simplejump_data.
700
+ (init_simplejump_data): New parameter old_seqno. Pass it down
701
+ to get_seqno_for_a_jump.
702
+ (get_seqno_for_a_jump): New parameter old_seqno. Use it for
703
+ initializing new jump seqno as a last resort. Add comment.
704
+ (sel_redirect_edge_and_branch): Save old seqno of the conditional
705
+ jump and pass it down to sel_init_new_insn.
706
+ (sel_redirect_edge_and_branch_force): Likewise.
708
+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
710
+ Backport from mainline
711
+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
713
+ PR rtl-optimization/60901
714
+ * config/i386/i386.c (ix86_dependencies_evaluation_hook): Check that
715
+ bb predecessor belongs to the same scheduling region. Adjust comment.
717
+2014-06-03 Uros Bizjak <ubizjak@gmail.com>
719
+ Backport from mainline
720
+ 2014-06-02 Uros Bizjak <ubizjak@gmail.com>
723
+ * config/i386/i386.c (ix86_expand_vec_perm) [case V32QImode]: Use
724
+ GEN_INT (-128) instead of GEN_INT (128) to set MSB of QImode constant.
726
+2014-05-28 Guozhi Wei <carrot@google.com>
729
+ * config/aarch64/arm_neon.h (vqdmulh_n_s16): Change the last operand's
731
+ (vqdmulhq_n_s16): Likewise.
733
+2014-05-28 Eric Botcazou <ebotcazou@adacore.com>
735
+ Backport from mainline
736
+ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
738
+ * double-int.c (div_and_round_double) <ROUND_DIV_EXPR>: Use the proper
739
+ predicate to detect a negative quotient.
741
+2014-05-28 Georg-Johann Lay <avr@gjlay.de>
744
+ * doc/extend.texi (Local Labels): Note that label differences are
745
+ not supported for AVR.
747
+2014-05-26 Michael Tautschnig <mt@debian.org>
750
+ * doc/extend.texi (X86 Built-in Functions): Fix parameter lists of
751
+ __builtin_ia32_vfrczs[sd] and __builtin_ia32_mpsadbw256.
753
+2014-05-23 Alan Modra <amodra@gmail.com>
756
+ * config/rs6000/rs6000.c (mem_operand_gpr): Handle SImode.
757
+ * config/rs6000/rs6000.md (extendsidi2_lfiwax, extendsidi2_nocell):
758
+ Use "Y" constraint rather than "m".
760
+2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
762
+ Backport from mainline
763
+ 2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
765
+ * config/rs6000/htm.md (ttest): Use correct shift value to get CR0.
767
+2014-05-22 Richard Earnshaw <rearnsha@arm.com>
770
+ * arm.md (arm_cmpdi_unsigned): Fix length calculation for Thumb2.
772
2014-05-22 Release Manager
774
* GCC 4.8.3 released.
775
Index: gcc/testsuite/gcc.target/powerpc/tfmode_off.c
776
===================================================================
777
--- a/src/gcc/testsuite/gcc.target/powerpc/tfmode_off.c (.../tags/gcc_4_8_3_release)
778
+++ b/src/gcc/testsuite/gcc.target/powerpc/tfmode_off.c (.../branches/gcc-4_8-branch)
780
/* { dg-do assemble } */
781
/* { dg-skip-if "" { powerpc-ibm-aix* } { "*" } { "" } } */
782
/* { dg-skip-if "no TFmode" { powerpc-*-eabi* } { "*" } { "" } } */
783
+/* { dg-require-effective-target longdouble128 } */
784
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
786
typedef float TFmode __attribute__ ((mode (TF)));
787
Index: gcc/testsuite/gcc.target/powerpc/pack02.c
788
===================================================================
789
--- a/src/gcc/testsuite/gcc.target/powerpc/pack02.c (.../tags/gcc_4_8_3_release)
790
+++ b/src/gcc/testsuite/gcc.target/powerpc/pack02.c (.../branches/gcc-4_8-branch)
792
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
793
/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
794
/* { dg-require-effective-target powerpc_fprs } */
795
+/* { dg-require-effective-target longdouble128 } */
796
/* { dg-options "-O2 -mhard-float" } */
799
Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c
800
===================================================================
801
--- a/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c (.../tags/gcc_4_8_3_release)
802
+++ b/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c (.../branches/gcc-4_8-branch)
804
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
805
+/* { dg-options "-mabi=elfv2" } */
812
+void test (struct f8 a, struct f8 b) /* { dg-message "note: the ABI of passing homogeneous float aggregates will change" } */
816
Index: gcc/testsuite/gcc.target/powerpc/htm-ttest.c
817
===================================================================
818
--- a/src/gcc/testsuite/gcc.target/powerpc/htm-ttest.c (.../tags/gcc_4_8_3_release)
819
+++ b/src/gcc/testsuite/gcc.target/powerpc/htm-ttest.c (.../branches/gcc-4_8-branch)
821
+/* { dg-do compile { target { powerpc*-*-* } } } */
822
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
823
+/* { dg-require-effective-target powerpc_htm_ok } */
824
+/* { dg-options "-O2 -mhtm" } */
826
+/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,3,30,31" { target { ilp32 } } } } */
827
+/* { dg-final { scan-assembler "rldicl r?\[0-9\]+,r?\[0-9\]+,35,62" { target { lp64 } } } } */
829
+#include <htmintrin.h>
833
+ return _HTM_STATE(__builtin_ttest());
835
Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c
836
===================================================================
837
--- a/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c (.../tags/gcc_4_8_3_release)
838
+++ b/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c (.../branches/gcc-4_8-branch)
840
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
841
+/* { dg-options "-mno-compat-align-parm" } */
845
+ long a __attribute__((aligned (16)));
848
+void test (struct test a) /* { dg-message "note: the ABI of passing aggregates with 16-byte alignment will change" } */
852
Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c
853
===================================================================
854
--- a/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c (.../tags/gcc_4_8_3_release)
855
+++ b/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c (.../branches/gcc-4_8-branch)
857
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
858
+/* { dg-require-effective-target powerpc_altivec_ok } */
859
+/* { dg-options "-maltivec" } */
863
+ int a __attribute__((vector_size (8)));
864
+ }; /* { dg-message "note: the layout of aggregates containing vectors with 8-byte alignment will change" } */
866
Index: gcc/testsuite/gcc.target/alpha/pr61586.c
867
===================================================================
868
--- a/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../tags/gcc_4_8_3_release)
869
+++ b/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../branches/gcc-4_8-branch)
871
+/* { dg-do compile } */
872
+/* { dg-options "-O2 -mieee" } */
874
+void foo (int *dimensions, double **params, int hh)
878
+ else if (dimensions[hh] > 0)
879
+ params[hh][0] = 1.0f;
881
Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c
882
===================================================================
883
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c (.../tags/gcc_4_8_3_release)
884
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c (.../branches/gcc-4_8-branch)
886
+/* Test AAPCS64 layout and __builtin_va_start.
888
+ Pass named HFA/HVA argument on stack. */
890
+/* { dg-do run { target aarch64*-*-* } } */
892
+#ifndef IN_FRAMEWORK
893
+#define AAPCS64_TEST_STDARG
894
+#define TESTFILE "va_arg-14.c"
895
+#include "type-def.h"
897
+struct hfa_fx2_t hfa_fx2 = {1.2f, 2.2f};
898
+struct hfa_fx3_t hfa_fx3 = {3.2f, 4.2f, 5.2f};
899
+vf4_t float32x4 = {6.2f, 7.2f, 8.2f, 9.2f};
900
+vf4_t float32x4_2 = {10.2f, 11.2f, 12.2f, 13.2f};
902
+#include "abitest.h"
904
+ ARG (float, 1.0f, S0, 0)
905
+ ARG (float, 2.0f, S1, 1)
906
+ ARG (float, 3.0f, S2, 2)
907
+ ARG (float, 4.0f, S3, 3)
908
+ ARG (float, 5.0f, S4, 4)
909
+ ARG (float, 6.0f, S5, 5)
910
+ ARG (float, 7.0f, S6, 6)
911
+ ARG (struct hfa_fx3_t, hfa_fx3, STACK, 7)
912
+ /* Previous argument size has been rounded up to the nearest multiple of
914
+ ARG (struct hfa_fx2_t, hfa_fx2, STACK + 16, 8)
915
+ /* NSAA is rounded up to the nearest natural alignment of float32x4. */
916
+ ARG (vf4_t, float32x4, STACK + 32, 9)
917
+ ARG (vf4_t, float32x4_2, STACK + 48, LAST_NAMED_ARG_ID)
919
+ LAST_ANON (double, 123456789.987, STACK + 64, 11)
921
Index: gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
922
===================================================================
923
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h (.../tags/gcc_4_8_3_release)
924
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h (.../branches/gcc-4_8-branch)
939
Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c
940
===================================================================
941
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c (.../tags/gcc_4_8_3_release)
942
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c (.../branches/gcc-4_8-branch)
944
+/* Test AAPCS64 layout and __builtin_va_start.
946
+ Pass named HFA/HVA argument on stack. */
948
+/* { dg-do run { target aarch64*-*-* } } */
950
+#ifndef IN_FRAMEWORK
951
+#define AAPCS64_TEST_STDARG
952
+#define TESTFILE "va_arg-13.c"
954
+struct float_float_t
966
+#define HAS_DATA_INIT_FUNC
970
+ float_float.a = 1.2f;
971
+ float_float.b = 2.2f;
973
+ float_int.b8 = 4983.80f;
976
+#include "abitest.h"
978
+ ARG (float, 1.0f, S0, 0)
979
+ ARG (float, 2.0f, S1, 1)
980
+ ARG (float, 3.0f, S2, 2)
981
+ ARG (float, 4.0f, S3, 3)
982
+ ARG (float, 5.0f, S4, 4)
983
+ ARG (float, 6.0f, S5, 5)
984
+ ARG (float, 7.0f, S6, 6)
985
+ ARG (struct float_float_t, float_float, STACK, 7)
986
+ ARG (int, 9, W0, 8)
987
+ ARG (int, 10, W1, 9)
988
+ ARG (int, 11, W2, 10)
989
+ ARG (int, 12, W3, 11)
990
+ ARG (int, 13, W4, 12)
991
+ ARG (int, 14, W5, 13)
992
+ ARG (int, 15, W6, LAST_NAMED_ARG_ID)
994
+ /* Note on the reason of using 'X7' instead of 'W7' here:
995
+ Using 'X7' makes sure the test works in the big-endian mode.
996
+ According to PCS rules B.4 and C.10, the size of float_int is rounded
997
+ to 8 bytes and prepared in the register X7 as if loaded via LDR from
998
+ the memory, with the content of the other 4 bytes unspecified. The
999
+ test framework will only compare the 4 relavent bytes. */
1000
+ ANON (union float_int_t, float_int, X7, 15)
1001
+ LAST_ANON (long long, 12683143434LL, STACK + 8, 16)
1003
Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c
1004
===================================================================
1005
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c (.../tags/gcc_4_8_3_release)
1006
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c (.../branches/gcc-4_8-branch)
1008
+/* Test AAPCS64 layout and __builtin_va_start.
1010
+ Pass named __128int argument on stack. */
1012
+/* { dg-do run { target aarch64*-*-* } } */
1014
+#ifndef IN_FRAMEWORK
1015
+#define AAPCS64_TEST_STDARG
1016
+#define TESTFILE "va_arg-15.c"
1017
+#include "type-def.h"
1019
+union int128_t qword;
1021
+#define HAS_DATA_INIT_FUNC
1025
+ /* Init signed quad-word integer. */
1026
+ qword.l64 = 0xfdb9753102468aceLL;
1027
+ qword.h64 = 0xeca8642013579bdfLL;
1030
+#include "abitest.h"
1032
+ ARG (int, 1, W0, 0)
1033
+ ARG (int, 2, W1, 1)
1034
+ ARG (int, 3, W2, 2)
1035
+ ARG (int, 4, W3, 3)
1036
+ ARG (int, 5, W4, 4)
1037
+ ARG (int, 6, W5, 5)
1038
+ ARG (int, 7, W6, 6)
1039
+ ARG (__int128, qword.i, STACK, LAST_NAMED_ARG_ID)
1041
+#ifndef __AAPCS64_BIG_ENDIAN__
1042
+ LAST_ANON (int, 8, STACK + 16, 8)
1044
+ LAST_ANON (int, 8, STACK + 20, 8)
1047
Index: gcc/testsuite/gcc.target/avr/torture/pr61443.c
1048
===================================================================
1049
--- a/src/gcc/testsuite/gcc.target/avr/torture/pr61443.c (.../tags/gcc_4_8_3_release)
1050
+++ b/src/gcc/testsuite/gcc.target/avr/torture/pr61443.c (.../branches/gcc-4_8-branch)
1052
+/* { dg-do run } */
1053
+/* { dg-options "-std=gnu99" } */
1055
+#include <stdlib.h>
1056
+#include <stdarg.h>
1058
+#define NC __attribute__((noinline,noclone))
1060
+void NC vfun (char n, ...)
1071
+ if (11 != va_arg (ap, int))
1075
+ if (2222 != va_arg (ap, int))
1079
+ if (333333 != va_arg (ap, __int24))
1083
+ if (44444444 != va_arg (ap, long))
1087
+ if (8888888888888888 != va_arg (ap, long long))
1096
+void NC boo_qi (const __flash char *p)
1101
+void NC boox_qi (const __memx char *p)
1106
+void NC boo_hi (const __flash int *p)
1111
+void NC boox_hi (const __memx int *p)
1116
+void NC boo_psi (const __flash __int24 *p)
1121
+void NC boox_psi (const __memx __int24 *p)
1126
+void NC boo_si (const __flash long *p)
1131
+void NC boox_si (const __memx long *p)
1136
+void NC boo_di (const __flash long long *p)
1141
+void NC boox_di (const __memx long long *p)
1146
+const __flash char f_qi = 11;
1147
+const __flash int f_hi = 2222;
1148
+const __flash __int24 f_psi = 333333;
1149
+const __flash long f_si = 44444444;
1150
+const __flash long long f_di = 8888888888888888;
1152
+const __memx char x_qi = 11;
1153
+const __memx int x_hi = 2222;
1154
+const __memx __int24 x_psi = 333333;
1155
+const __memx long x_si = 44444444;
1156
+const __memx long long x_di = 8888888888888888;
1160
+__int24 r_psi = 333333;
1161
+long r_si = 44444444;
1162
+long long r_di = 8888888888888888;
1174
+ boox_psi (&x_psi);
1180
+ boox_psi (&r_psi);
1186
Index: gcc/testsuite/gcc.target/i386/pr61423.c
1187
===================================================================
1188
--- a/src/gcc/testsuite/gcc.target/i386/pr61423.c (.../tags/gcc_4_8_3_release)
1189
+++ b/src/gcc/testsuite/gcc.target/i386/pr61423.c (.../branches/gcc-4_8-branch)
1191
+/* PR target/61423 */
1192
+/* { dg-do run { target ia32 } } */
1193
+/* { dg-options "-O1 -ftree-vectorize -msse2 -mfpmath=387 -mtune=core2" } */
1196
+static unsigned int A[N];
1199
+__attribute__((noinline))
1202
+ unsigned int sum = 0;
1206
+ for (i = 0; i < N; i++)
1219
+ for(i = 0; i < N; i++)
1225
+ __builtin_abort ();
1229
Index: gcc/testsuite/gcc.target/i386/pr60901.c
1230
===================================================================
1231
--- a/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../tags/gcc_4_8_3_release)
1232
+++ b/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../branches/gcc-4_8-branch)
1234
+/* { dg-options "-O -fselective-scheduling -fschedule-insns -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-tree-dominator-opts" } */
1237
+extern void bar (void);
1238
+extern int baz (int);
1244
+ for (j = 0; j < n; j++)
1246
+ for (i = 1; i < j; i++)
1251
Index: gcc/testsuite/gcc.target/i386/pr61801.c
1252
===================================================================
1253
--- a/src/gcc/testsuite/gcc.target/i386/pr61801.c (.../tags/gcc_4_8_3_release)
1254
+++ b/src/gcc/testsuite/gcc.target/i386/pr61801.c (.../branches/gcc-4_8-branch)
1256
+/* { dg-do compile } */
1257
+/* { dg-options "-Os -fcompare-debug" } */
1271
+ asm volatile("" : "=a"(e) : "0"(a), "i"(0));
1278
Index: gcc/testsuite/gcc.target/i386/pr61446.c
1279
===================================================================
1280
--- a/src/gcc/testsuite/gcc.target/i386/pr61446.c (.../tags/gcc_4_8_3_release)
1281
+++ b/src/gcc/testsuite/gcc.target/i386/pr61446.c (.../branches/gcc-4_8-branch)
1283
+/* PR rtl-optimization/61446 */
1285
+/* { dg-do compile { target { ia32 } } } */
1286
+/* { dg-options "-O2 -march=corei7 -mfpmath=387" } */
1291
+ const double dfa = a;
1292
+ const unsigned int hi = dfa / 0x1p32f;
1293
+ const unsigned int lo = dfa - (double) hi * 0x1p32f;
1295
+ return ((unsigned long long) hi << (4 * (8))) | lo;
1297
Index: gcc/testsuite/lib/target-supports.exp
1298
===================================================================
1299
--- a/src/gcc/testsuite/lib/target-supports.exp (.../tags/gcc_4_8_3_release)
1300
+++ b/src/gcc/testsuite/lib/target-supports.exp (.../branches/gcc-4_8-branch)
1301
@@ -1790,6 +1790,15 @@
1305
+# Return 1 if the target supports long double of 128 bits,
1308
+proc check_effective_target_longdouble128 { } {
1309
+ return [check_no_compiler_messages longdouble128 object {
1310
+ int dummy[sizeof(long double) == 16 ? 1 : -1];
1314
# Return 1 if the target supports double of 64 bits,
1317
Index: gcc/testsuite/gfortran.dg/default_format_denormal_2.f90
1318
===================================================================
1319
--- a/src/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 (.../tags/gcc_4_8_3_release)
1320
+++ b/src/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 (.../branches/gcc-4_8-branch)
1322
! { dg-require-effective-target fortran_large_real }
1323
-! { dg-do run { xfail powerpc*-apple-darwin* powerpc*-*-linux* } }
1324
-! Test XFAILed on these platforms because the system's printf() lacks
1325
+! { dg-do run { xfail powerpc*-apple-darwin* } }
1326
+! Test XFAILed on this platform because the system's printf() lacks
1327
! proper support for denormalized long doubles. See PR24685
1329
! This tests that the default formats for formatted I/O of reals are
1330
Index: gcc/testsuite/gfortran.dg/cray_pointers_10.f90
1331
===================================================================
1332
--- a/src/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 (.../tags/gcc_4_8_3_release)
1333
+++ b/src/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 (.../branches/gcc-4_8-branch)
1336
+! { dg-options "-fcray-pointer" }
1351
+ if (z /= 42) call abort
1353
Index: gcc/testsuite/gfortran.dg/dependency_44.f90
1354
===================================================================
1355
--- a/src/gcc/testsuite/gfortran.dg/dependency_44.f90 (.../tags/gcc_4_8_3_release)
1356
+++ b/src/gcc/testsuite/gfortran.dg/dependency_44.f90 (.../branches/gcc-4_8-branch)
1359
+! Tests fix for PR61780 in which the loop reversal mechanism was
1360
+! not accounting for the first index being an element so that no
1361
+! loop in this dimension is created.
1363
+! Contributed by Manfred Tietze on clf.
1367
+ integer, parameter :: n = 10, k = 3
1369
+ integer, dimension(n,n) :: y
1370
+ integer :: res1(n), res2(n)
1383
+ y(k,4:n) = y(k,3:n-1)
1387
+ y(k,n:4:-1) = y(k,n-1:3:-1)
1392
+ if (any(res1 /= res2)) call abort ()
1394
Index: gcc/testsuite/gfortran.dg/oldstyle_5.f
1395
===================================================================
1396
--- a/src/gcc/testsuite/gfortran.dg/oldstyle_5.f (.../tags/gcc_4_8_3_release)
1397
+++ b/src/gcc/testsuite/gfortran.dg/oldstyle_5.f (.../branches/gcc-4_8-branch)
1399
+C { dg-do compile }
1401
+ INTEGER A(2)/1,2/ ! { dg-error "Invalid old style initialization for derived type component" }
1404
+ INTEGER B/1/ ! { dg-error "Invalid old style initialization for derived type component" }
1407
Index: gcc/testsuite/gfortran.dg/nint_2.f90
1408
===================================================================
1409
--- a/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../tags/gcc_4_8_3_release)
1410
+++ b/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../branches/gcc-4_8-branch)
1412
! http://gcc.gnu.org/ml/fortran/2005-04/msg00139.html
1415
-! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix powerpc*-*-linux* *-*-mingw* } { "-O0" } { "" } }
1416
+! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix powerpc-*-linux* powerpc64-*-linux* *-*-mingw* } { "-O0" } { "" } }
1417
+! Note that this doesn't fail on powerpc64le-*-linux*.
1419
integer(kind=8) :: i1, i2
1421
Index: gcc/testsuite/gfortran.dg/allocatable_function_8.f90
1422
===================================================================
1423
--- a/src/gcc/testsuite/gfortran.dg/allocatable_function_8.f90 (.../tags/gcc_4_8_3_release)
1424
+++ b/src/gcc/testsuite/gfortran.dg/allocatable_function_8.f90 (.../branches/gcc-4_8-branch)
1427
+! Test the fix for PR61459.
1429
+! Contributed by John Wingate <johnww@tds.net>
1435
+ public :: f_segfault, f_segfault_plus, f_workaround
1436
+ integer, dimension(2,2) :: b = reshape([1,-1,1,1],[2,2])
1440
+ function f_segfault(x)
1441
+ real, dimension(:), allocatable :: f_segfault
1442
+ real, dimension(:), intent(in) :: x
1443
+ allocate(f_segfault(2))
1444
+ f_segfault = matmul(b,x)
1445
+ end function f_segfault
1447
+! Sefaulted without the ALLOCATE as well.
1448
+ function f_segfault_plus(x)
1449
+ real, dimension(:), allocatable :: f_segfault_plus
1450
+ real, dimension(:), intent(in) :: x
1451
+ f_segfault_plus = matmul(b,x)
1452
+ end function f_segfault_plus
1454
+ function f_workaround(x)
1455
+ real, dimension(:), allocatable :: f_workaround
1456
+ real, dimension(:), intent(in) :: x
1457
+ real, dimension(:), allocatable :: tmp
1458
+ allocate(f_workaround(2),tmp(2))
1460
+ f_workaround = tmp
1461
+ end function f_workaround
1468
+ real, dimension(2) :: x = 1.0, y
1469
+ y = f_workaround (x)
1470
+ if (any (f_segfault (x) .ne. y)) call abort
1471
+ if (any (f_segfault_plus (x) .ne. y)) call abort
1473
Index: gcc/testsuite/gcc.c-torture/execute/pr61306-1.c
1474
===================================================================
1475
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../tags/gcc_4_8_3_release)
1476
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../branches/gcc-4_8-branch)
1478
+#ifdef __INT32_TYPE__
1479
+typedef __INT32_TYPE__ int32_t;
1481
+typedef int int32_t;
1484
+#ifdef __UINT32_TYPE__
1485
+typedef __UINT32_TYPE__ uint32_t;
1487
+typedef unsigned uint32_t;
1490
+#define __fake_const_swab32(x) ((uint32_t)( \
1491
+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \
1492
+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \
1493
+ (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \
1494
+ (( (int32_t)(x) & (int32_t)0xff000000UL) >> 24)))
1496
+/* Previous version of bswap optimization failed to consider sign extension
1497
+ and as a result would replace an expression *not* doing a bswap by a
1500
+__attribute__ ((noinline, noclone)) uint32_t
1501
+fake_bswap32 (uint32_t in)
1503
+ return __fake_const_swab32 (in);
1509
+ if (sizeof (int32_t) * __CHAR_BIT__ != 32)
1511
+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
1513
+ if (fake_bswap32 (0x87654321) != 0xffffff87)
1514
+ __builtin_abort ();
1517
Index: gcc/testsuite/gcc.c-torture/execute/pr23135.x
1518
===================================================================
1519
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr23135.x (.../tags/gcc_4_8_3_release)
1520
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr23135.x (.../branches/gcc-4_8-branch)
1522
+set additional_flags "-Wno-psabi"
1524
Index: gcc/testsuite/gcc.c-torture/execute/pr61306-3.c
1525
===================================================================
1526
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../tags/gcc_4_8_3_release)
1527
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../branches/gcc-4_8-branch)
1539
+ __builtin_abort ();
1542
Index: gcc/testsuite/gcc.c-torture/execute/20050604-1.x
1543
===================================================================
1544
--- a/src/gcc/testsuite/gcc.c-torture/execute/20050604-1.x (.../tags/gcc_4_8_3_release)
1545
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20050604-1.x (.../branches/gcc-4_8-branch)
1547
set additional_flags "-mno-mmx"
1550
+set additional_flags "-Wno-psabi"
1552
Index: gcc/testsuite/gcc.c-torture/execute/pr61306-2.c
1553
===================================================================
1554
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../tags/gcc_4_8_3_release)
1555
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../branches/gcc-4_8-branch)
1557
+#ifdef __INT16_TYPE__
1558
+typedef __INT16_TYPE__ int16_t;
1560
+typedef short int16_t;
1563
+#ifdef __UINT32_TYPE__
1564
+typedef __UINT32_TYPE__ uint32_t;
1566
+typedef unsigned uint32_t;
1569
+#define __fake_const_swab32(x) ((uint32_t)( \
1570
+ (((uint32_t) (x) & (uint32_t)0x000000ffUL) << 24) | \
1571
+ (((uint32_t)(int16_t)(x) & (uint32_t)0x00ffff00UL) << 8) | \
1572
+ (((uint32_t) (x) & (uint32_t)0x00ff0000UL) >> 8) | \
1573
+ (((uint32_t) (x) & (uint32_t)0xff000000UL) >> 24)))
1576
+/* Previous version of bswap optimization failed to consider sign extension
1577
+ and as a result would replace an expression *not* doing a bswap by a
1580
+__attribute__ ((noinline, noclone)) uint32_t
1581
+fake_bswap32 (uint32_t in)
1583
+ return __fake_const_swab32 (in);
1589
+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
1591
+ if (sizeof (int16_t) * __CHAR_BIT__ != 16)
1593
+ if (fake_bswap32 (0x81828384) != 0xff838281)
1594
+ __builtin_abort ();
1597
Index: gcc/testsuite/gcc.c-torture/execute/20050316-1.x
1598
===================================================================
1599
--- a/src/gcc/testsuite/gcc.c-torture/execute/20050316-1.x (.../tags/gcc_4_8_3_release)
1600
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20050316-1.x (.../branches/gcc-4_8-branch)
1605
+set additional_flags "-Wno-psabi"
1607
Index: gcc/testsuite/gcc.c-torture/execute/20050316-3.x
1608
===================================================================
1609
--- a/src/gcc/testsuite/gcc.c-torture/execute/20050316-3.x (.../tags/gcc_4_8_3_release)
1610
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20050316-3.x (.../branches/gcc-4_8-branch)
1612
+set additional_flags "-Wno-psabi"
1614
Index: gcc/testsuite/gcc.c-torture/compile/pr61684.c
1615
===================================================================
1616
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr61684.c (.../tags/gcc_4_8_3_release)
1617
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr61684.c (.../branches/gcc-4_8-branch)
1619
+/* PR tree-optimization/61684 */
1624
+static short **e = 0;
1629
+ for (; c < 1; c++)
1632
+ a = d && (c && 1) & *b;
1634
Index: gcc/testsuite/gnat.dg/opt39.adb
1635
===================================================================
1636
--- a/src/gcc/testsuite/gnat.dg/opt39.adb (.../tags/gcc_4_8_3_release)
1637
+++ b/src/gcc/testsuite/gnat.dg/opt39.adb (.../branches/gcc-4_8-branch)
1639
+-- { dg-do compile }
1640
+-- { dg-options "-O2 -fno-inline -fdump-tree-optimized" }
1642
+procedure Opt39 (I : Integer) is
1644
+ type Rec is record
1652
+ procedure Set (A : access Rec; I : Integer) is
1653
+ Tmp : Rec := A.all;
1662
+ Set (R'Access, I);
1664
+ raise Program_Error;
1668
+-- { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } }
1669
+-- { dg-final { cleanup-tree-dump "optimized" } }
1670
Index: gcc/testsuite/gnat.dg/overflow_fixed.adb
1671
===================================================================
1672
--- a/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../tags/gcc_4_8_3_release)
1673
+++ b/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../branches/gcc-4_8-branch)
1676
+-- { dg-options "-gnato -O" }
1678
+procedure Overflow_Fixed is
1680
+ type Unsigned_8_Bit is mod 2**8;
1682
+ procedure Fixed_To_Eight (Value : Duration) is
1683
+ Item : Unsigned_8_Bit;
1685
+ Item := Unsigned_8_Bit(Value);
1686
+ raise Program_Error;
1688
+ when Constraint_Error => null; -- expected case
1692
+ Fixed_To_Eight (-0.5);
1694
Index: gcc/testsuite/gnat.dg/aliasing1.adb
1695
===================================================================
1696
--- a/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../tags/gcc_4_8_3_release)
1697
+++ b/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../branches/gcc-4_8-branch)
1702
--- { dg-final { scan-tree-dump-not "__gnat_rcheck" "optimized" } }
1703
+-- { dg-final { scan-tree-dump-not "gnat_rcheck" "optimized" } }
1704
-- { dg-final { cleanup-tree-dump "optimized" } }
1705
Index: gcc/testsuite/gcc.dg/pr60866.c
1706
===================================================================
1707
--- a/src/gcc/testsuite/gcc.dg/pr60866.c (.../tags/gcc_4_8_3_release)
1708
+++ b/src/gcc/testsuite/gcc.dg/pr60866.c (.../branches/gcc-4_8-branch)
1710
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
1711
+/* { dg-options "-O -fselective-scheduling -fno-if-conversion -fschedule-insns" } */
1716
+foo (int w, int **dnroot, int **dn)
1719
+ int *xchild = xchild;
1720
+ for (; w < n; w++)
1724
+ for (child = *dn; child; child = xchild)
1728
Index: gcc/testsuite/gcc.dg/torture/pr61383-1.c
1729
===================================================================
1730
--- a/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../tags/gcc_4_8_3_release)
1731
+++ b/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../branches/gcc-4_8-branch)
1733
+/* { dg-do run } */
1735
+int a, b = 1, c, d, e, f, g;
1744
+ g = g ? 0 : 1 % g;
1746
+ for (; d < 1; d = e)
1768
Index: gcc/testsuite/gcc.dg/stack-usage-2.c
1769
===================================================================
1770
--- a/src/gcc/testsuite/gcc.dg/stack-usage-2.c (.../tags/gcc_4_8_3_release)
1771
+++ b/src/gcc/testsuite/gcc.dg/stack-usage-2.c (.../branches/gcc-4_8-branch)
1773
/* { dg-do compile } */
1774
/* { dg-options "-Wstack-usage=512" } */
1777
+int foo1 (void) /* { dg-bogus "stack usage" } */
1782
-} /* { dg-bogus "stack usage" } */
1786
+int foo2 (void) /* { dg-warning "stack usage is \[0-9\]* bytes" } */
1791
-} /* { dg-warning "stack usage is \[0-9\]* bytes" } */
1795
+int foo3 (void) /* { dg-warning "stack usage might be \[0-9\]* bytes" } */
1797
char arr[1024] __attribute__((aligned (512)));
1800
/* Force dynamic realignment of argument pointer. */
1801
__builtin_apply ((void (*)()) foo2, 0, 0);
1805
-} /* { dg-warning "stack usage might be \[0-9\]* bytes" } */
1808
+int foo4 (int n) /* { dg-warning "stack usage might be unbounded" } */
1813
-} /* { dg-warning "stack usage might be unbounded" } */
1815
Index: gcc/testsuite/ChangeLog
1816
===================================================================
1817
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_3_release)
1818
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
1820
+2014-07-28 Richard Biener <rguenther@suse.de>
1822
+ PR rtl-optimization/61801
1823
+ * gcc.target/i386/pr61801.c: Fix testcase.
1825
+2014-07-28 Richard Biener <rguenther@suse.de>
1827
+ PR rtl-optimization/61801
1828
+ * gcc.target/i386/pr61801.c: New testcase.
1830
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1832
+ Backport from mainline:
1833
+ 2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1835
+ * gcc.target/powerpc/ppc64-abi-warn-3.c: New test.
1837
+ * gcc.c-torture/execute/20050316-1.x: Add -Wno-psabi.
1838
+ * gcc.c-torture/execute/20050604-1.x: Add -Wno-psabi.
1839
+ * gcc.c-torture/execute/20050316-3.x: New file. Add -Wno-psabi.
1840
+ * gcc.c-torture/execute/pr23135.x: Likewise.
1842
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1844
+ Backport from mainline:
1845
+ 2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1847
+ * gcc.target/powerpc/ppc64-abi-warn-2.c: New test.
1849
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1851
+ Backport from mainline:
1852
+ 2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1854
+ * gcc.target/powerpc/ppc64-abi-warn-1.c: New test.
1856
+2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1858
+ Backport from mainline:
1859
+ 2014-07-24 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
1861
+ * g++.dg/compat/struct-layout-1.exp: Load g++-dg.exp.
1863
+2014-07-19 Eric Botcazou <ebotcazou@adacore.com>
1865
+ * gcc.dg/stack-usage-2.c: Adjust.
1867
+2014-07-19 Paul Thomas <pault@gcc.gnu.org>
1869
+ Backport from trunk.
1871
+ * gfortran.dg/dependency_44.f90 : New test
1873
+2014-07-10 Eric Botcazou <ebotcazou@adacore.com>
1875
+ * gnat.dg/opt39.adb: New test.
1877
+2014-07-08 Paul Thomas <pault@gcc.gnu.org>
1881
+ * gfortran.dg/allocatable_function_8.f90 : New test
1883
+2014-07-04 Jakub Jelinek <jakub@redhat.com>
1885
+ PR tree-optimization/61684
1886
+ * gcc.c-torture/compile/pr61684.c: New test.
1888
+2014-07-02 Jakub Jelinek <jakub@redhat.com>
1889
+ Fritz Reese <Reese-Fritz@zai.com>
1891
+ * gfortran.dg/oldstyle_5.f: New test.
1893
+2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
1895
+ Backport from mainline
1896
+ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
1898
+ PR tree-optimization/61306
1899
+ * gcc.c-torture/execute/pr61306-1.c: New test.
1900
+ * gcc.c-torture/execute/pr61306-2.c: Likewise.
1901
+ * gcc.c-torture/execute/pr61306-3.c: Likewise.
1903
+2014-06-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
1905
+ * gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.
1907
+2014-06-27 Uros Bizjak <ubizjak@gmail.com>
1909
+ Backport from mainline
1910
+ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
1913
+ * gcc.target/alpha/pr61586.c: New test.
1915
+2014-06-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
1917
+ * gfortran.dg/default_format_denormal_2.f90: Remove xfail for
1918
+ powerpc*-*-linux*.
1920
+2014-06-18 Uros Bizjak <ubizjak@gmail.com>
1922
+ Backport from mainline
1923
+ 2014-06-13 Ilya Enkovich <ilya.enkovich@intel.com>
1925
+ PR rtl-optimization/61094
1926
+ PR rtl-optimization/61446
1927
+ * gcc.target/i386/pr61446.c : New.
1929
+ Backport from mainline
1930
+ 2014-06-06 Uros Bizjak <ubizjak@gmail.com>
1933
+ * gcc.target/i386/pr61423.c: New test.
1935
+2014-06-17 Yufeng Zhang <yufeng.zhang@arm.com>
1937
+ Backport from mainline
1940
+ * gcc.target/aarch64/aapcs64/type-def.h (struct hfa_fx2_t): New type.
1941
+ * gcc.target/aarch64/aapcs64/va_arg-13.c: New test.
1942
+ * gcc.target/aarch64/aapcs64/va_arg-14.c: Ditto.
1943
+ * gcc.target/aarch64/aapcs64/va_arg-15.c: Ditto.
1945
+2014-06-15 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
1947
+ Backport from trunk.
1949
+ * gfortran.dg/cray_pointers_10.f90: New file.
1951
+2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
1953
+ Backport from mainline
1955
+ 2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
1957
+ * lib/target-supports.exp (check_effective_target_longdouble128): New.
1958
+ * gcc.target/powerpc/pack02.c: Use it.
1959
+ * gcc.target/powerpc/tfmode_off.c: Likewise.
1961
+2014-06-12 Georg-Johann Lay <avr@gjlay.de>
1963
+ Backport from 2014-06-12 trunk r211491
1966
+ * gcc.target/avr/torture/pr61443.c: New test.
1968
+2014-06-04 Richard Biener <rguenther@suse.de>
1970
+ PR tree-optimization/61383
1971
+ * gcc.dg/torture/pr61383-1.c: New testcase.
1973
+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
1975
+ Backport from mainline
1976
+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
1978
+ PR rtl-optimization/60866
1979
+ * gcc.dg/pr60866.c: New test.
1981
+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
1983
+ Backport from mainline
1984
+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
1986
+ PR rtl-optimization/60901
1987
+ * gcc.target/i386/pr60901.c: New test.
1989
+2014-05-28 Eric Botcazou <ebotcazou@adacore.com>
1991
+ Backport from mainline
1992
+ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
1994
+ * gnat.dg/overflow_fixed.adb: New test.
1996
+2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
1998
+ * gnat.dg/aliasing1.adb (dg-final): Robustify pattern matching.
2000
+2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
2002
+ Backport from mainline
2003
+ 2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
2005
+ * gcc.target/powerpc/htm-ttest.c: New test.
2007
2014-05-22 Release Manager
2009
* GCC 4.8.3 released.
2010
Index: gcc/testsuite/g++.dg/compat/struct-layout-1.exp
2011
===================================================================
2012
--- a/src/gcc/testsuite/g++.dg/compat/struct-layout-1.exp (.../tags/gcc_4_8_3_release)
2013
+++ b/src/gcc/testsuite/g++.dg/compat/struct-layout-1.exp (.../branches/gcc-4_8-branch)
2015
# This must be done after the compat-use-*-compiler definitions.
2018
+# Provide the g++-dg-prune routine (gcc-dp.exp is loaded by compat.exp)
2019
+load_lib g++-dg.exp
2023
# Save variables for the C++ compiler under test, which each test will
2024
Index: gcc/testsuite/g++.dg/cpp0x/variadic158.C
2025
===================================================================
2026
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic158.C (.../tags/gcc_4_8_3_release)
2027
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic158.C (.../branches/gcc-4_8-branch)
2030
+// { dg-do compile { target c++11 } }
2034
+template <typename>
2036
+ typedef const char* name;
2039
+template <typename VT, typename... Fields>
2040
+void New(const char* name,
2041
+ typename Fixed<Fields>::name... field_names);
2043
+template <typename VT, typename... Fields>
2044
+void CreateMetric(const char* name,
2045
+ typename Fixed<Fields>::name... field_names,
2051
+ CreateMetric<int, const char*>("abcd", "def", Base());
2053
Index: gcc/testsuite/g++.dg/cpp0x/variadic160.C
2054
===================================================================
2055
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../tags/gcc_4_8_3_release)
2056
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../branches/gcc-4_8-branch)
2059
+// { dg-do compile { target c++11 } }
2061
+template <typename _CharT> class A;
2062
+template <typename> class B;
2063
+template <class charT> class C;
2064
+template <> class C<char>
2066
+ virtual void xparse (int &, const B<A<char> > &) const;
2068
+template <class T, class charT = char> class G : C<charT>
2072
+ void default_value (const T &);
2073
+ void xparse (int &, const B<A<charT> > &) const;
2075
+template <class T, class charT>
2076
+void validate (int &, const B<A<charT> > &, T *, int);
2077
+template <class T, class charT>
2078
+void G<T, charT>::xparse (int &p1, const B<A<charT> > &p2) const
2080
+ validate (p1, p2, (T *)0, 0);
2082
+template <class T> G<T> *value (T *) { return new G<T>(0); }
2085
+template <typename T> struct D;
2086
+template <typename, int, int, int = 0, int = 0, int = 0 > class F;
2087
+template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
2089
+struct D<F<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
2091
+ typedef _Scalar Scalar;
2093
+template <typename, int, int, int, int, int _MaxCols> class F
2096
+ typedef typename Eigen::D<F>::Scalar Scalar;
2097
+ F (const Scalar &, const Scalar &, const Scalar &);
2099
+template <class... T>
2100
+void validate (int &, const B<A<char> > &, Eigen::F<T...> *);
2102
+int main (int, char *[])
2104
+ Eigen::F<double, 3, 1> a (0, 0, 0);
2105
+ value (&a)->default_value (Eigen::F<double, 3, 1>(0, 0, 0));
2107
Index: gcc/testsuite/g++.dg/template/local-fn1.C
2108
===================================================================
2109
--- a/src/gcc/testsuite/g++.dg/template/local-fn1.C (.../tags/gcc_4_8_3_release)
2110
+++ b/src/gcc/testsuite/g++.dg/template/local-fn1.C (.../branches/gcc-4_8-branch)
2114
+template <typename T = int>
2120
Index: gcc/testsuite/g++.dg/template/conv14.C
2121
===================================================================
2122
--- a/src/gcc/testsuite/g++.dg/template/conv14.C (.../tags/gcc_4_8_3_release)
2123
+++ b/src/gcc/testsuite/g++.dg/template/conv14.C (.../branches/gcc-4_8-branch)
2129
+template<typename Container, typename Key>
2132
+template<typename Container, typename Key, typename KeyStore = Key>
2138
+ Variant(Container st, const Key& i) : index(i), state(st) {}
2140
+ template<typename T>
2141
+ operator T() const {
2142
+ return Accessor<Container, KeyStore>::template get<T>(state, index);
2146
+class AutoCleanVariant : public Variant<XX*, int> {
2148
+ AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {}
2150
+ template<typename T>
2151
+ operator T() const {
2152
+ return Variant<XX*, int>::operator T();
2155
Index: gcc/testsuite/g++.dg/template/ptrmem27.C
2156
===================================================================
2157
--- a/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../tags/gcc_4_8_3_release)
2158
+++ b/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../branches/gcc-4_8-branch)
2166
+ int foo(int X::* ptr);
2168
+ template <int X::* ptr>
2172
+int X::foo(int X::* ptr) {
2173
+ int* p = &(this->*ptr); // OK.
2177
+template <int X::* ptr>
2179
+ int* p = &(this->*ptr); // gcc 4.9.0: OK in C++98 mode, fails in C++11 mode.
2182
Index: gcc/cp/tree.c
2183
===================================================================
2184
--- a/src/gcc/cp/tree.c (.../tags/gcc_4_8_3_release)
2185
+++ b/src/gcc/cp/tree.c (.../branches/gcc-4_8-branch)
2188
return lvalue_kind (TREE_OPERAND (ref, 0));
2191
+ case DOTSTAR_EXPR:
2192
+ if (TREE_CODE (ref) == MEMBER_REF)
2193
+ op1_lvalue_kind = clk_ordinary;
2195
+ op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
2196
+ if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
2197
+ op1_lvalue_kind = clk_none;
2198
+ return op1_lvalue_kind;
2201
op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
2202
/* Look at the member designator. */
2203
Index: gcc/cp/ChangeLog
2204
===================================================================
2205
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_3_release)
2206
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
2208
+2014-06-30 Jason Merrill <jason@redhat.com>
2211
+ * pt.c (type_dependent_expression_p): Check BASELINK_OPTYPE.
2214
+ * pt.c (unify_one_argument): Type/expression mismatch just causes
2215
+ deduction failure.
2218
+ * tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
2220
+2014-06-17 Jason Merrill <jason@redhat.com>
2223
+ * pt.c (check_default_tmpl_args): Check DECL_LOCAL_FUNCTION_P.
2225
+2014-06-02 Jason Merrill <jason@redhat.com>
2228
+ * pt.c (pack_deducible_p): Handle canonicalization.
2230
2014-05-22 Release Manager
2232
* GCC 4.8.3 released.
2234
===================================================================
2235
--- a/src/gcc/cp/pt.c (.../tags/gcc_4_8_3_release)
2236
+++ b/src/gcc/cp/pt.c (.../branches/gcc-4_8-branch)
2237
@@ -4308,7 +4308,8 @@
2238
in the template-parameter-list of the definition of a member of a
2241
- if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2242
+ if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
2243
+ || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
2244
/* You can't have a function template declaration in a local
2245
scope, nor you can you define a member of a class template in a
2247
@@ -14934,7 +14935,7 @@
2249
for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
2250
packs; packs = TREE_CHAIN (packs))
2251
- if (TREE_VALUE (packs) == parm)
2252
+ if (template_args_equal (TREE_VALUE (packs), parm))
2254
/* The template parameter pack is used in a function parameter
2255
pack. If this is the end of the parameter list, the
2256
@@ -15502,8 +15503,9 @@
2257
maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
2260
- gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
2261
- == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
2262
+ if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
2263
+ != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
2264
+ return unify_template_argument_mismatch (explain_p, parm, arg);
2266
/* For deduction from an init-list we need the actual list. */
2267
if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
2268
@@ -20009,7 +20011,12 @@
2271
if (BASELINK_P (expression))
2272
- expression = BASELINK_FUNCTIONS (expression);
2274
+ if (BASELINK_OPTYPE (expression)
2275
+ && dependent_type_p (BASELINK_OPTYPE (expression)))
2277
+ expression = BASELINK_FUNCTIONS (expression);
2280
if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
2282
Index: gcc/double-int.c
2283
===================================================================
2284
--- a/src/gcc/double-int.c (.../tags/gcc_4_8_3_release)
2285
+++ b/src/gcc/double-int.c (.../branches/gcc-4_8-branch)
2287
== (unsigned HOST_WIDE_INT) htwice)
2288
&& (labs_den <= ltwice)))
2292
/* quo = quo - 1; */
2293
add_double (*lquo, *hquo,
2294
(HOST_WIDE_INT) -1, (HOST_WIDE_INT) -1, lquo, hquo);
2295
Index: gcc/tree-ssa-math-opts.c
2296
===================================================================
2297
--- a/src/gcc/tree-ssa-math-opts.c (.../tags/gcc_4_8_3_release)
2298
+++ b/src/gcc/tree-ssa-math-opts.c (.../branches/gcc-4_8-branch)
2299
@@ -1537,7 +1537,7 @@
2301
struct symbolic_number {
2302
unsigned HOST_WIDEST_INT n;
2307
/* Perform a SHIFT or ROTATE operation by COUNT bits on symbolic
2308
@@ -1549,13 +1549,15 @@
2309
struct symbolic_number *n,
2312
+ int bitsize = TYPE_PRECISION (n->type);
2317
/* Zero out the extra bits of N in order to avoid them being shifted
2318
into the significant bits. */
2319
- if (n->size < (int)sizeof (HOST_WIDEST_INT))
2320
- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
2321
+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
2322
+ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
2326
@@ -1563,20 +1565,24 @@
2330
+ /* Arithmetic shift of signed type: result is dependent on the value. */
2331
+ if (!TYPE_UNSIGNED (n->type)
2332
+ && (n->n & ((unsigned HOST_WIDEST_INT) 0xff << (bitsize - 8))))
2337
- n->n = (n->n << count) | (n->n >> ((n->size * BITS_PER_UNIT) - count));
2338
+ n->n = (n->n << count) | (n->n >> (bitsize - count));
2341
- n->n = (n->n >> count) | (n->n << ((n->size * BITS_PER_UNIT) - count));
2342
+ n->n = (n->n >> count) | (n->n << (bitsize - count));
2347
/* Zero unused bits for size. */
2348
- if (n->size < (int)sizeof (HOST_WIDEST_INT))
2349
- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
2350
+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
2351
+ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
2355
@@ -1593,7 +1599,7 @@
2356
if (TREE_CODE (lhs_type) != INTEGER_TYPE)
2359
- if (TYPE_PRECISION (lhs_type) != n->size * BITS_PER_UNIT)
2360
+ if (TYPE_PRECISION (lhs_type) != TYPE_PRECISION (n->type))
2364
@@ -1650,20 +1656,23 @@
2365
to initialize the symbolic number. */
2370
/* Set up the symbolic number N by setting each byte to a
2371
value between 1 and the byte size of rhs1. The highest
2372
order byte is set to n->size and the lowest order
2374
- n->size = TYPE_PRECISION (TREE_TYPE (rhs1));
2375
- if (n->size % BITS_PER_UNIT != 0)
2376
+ n->type = TREE_TYPE (rhs1);
2377
+ size = TYPE_PRECISION (n->type);
2378
+ if (size % BITS_PER_UNIT != 0)
2380
- n->size /= BITS_PER_UNIT;
2381
+ size /= BITS_PER_UNIT;
2382
n->n = (sizeof (HOST_WIDEST_INT) < 8 ? 0 :
2383
(unsigned HOST_WIDEST_INT)0x08070605 << 32 | 0x04030201);
2385
- if (n->size < (int)sizeof (HOST_WIDEST_INT))
2386
+ if (size < (int)sizeof (HOST_WIDEST_INT))
2387
n->n &= ((unsigned HOST_WIDEST_INT)1 <<
2388
- (n->size * BITS_PER_UNIT)) - 1;
2389
+ (size * BITS_PER_UNIT)) - 1;
2391
source_expr1 = rhs1;
2393
@@ -1672,12 +1681,12 @@
2398
+ int i, size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
2399
unsigned HOST_WIDEST_INT val = widest_int_cst_value (rhs2);
2400
unsigned HOST_WIDEST_INT tmp = val;
2402
/* Only constants masking full bytes are allowed. */
2403
- for (i = 0; i < n->size; i++, tmp >>= BITS_PER_UNIT)
2404
+ for (i = 0; i < size; i++, tmp >>= BITS_PER_UNIT)
2405
if ((tmp & 0xff) != 0 && (tmp & 0xff) != 0xff)
2408
@@ -1693,12 +1702,22 @@
2413
+ int type_size, old_type_size;
2416
- type_size = TYPE_PRECISION (gimple_expr_type (stmt));
2417
+ type = gimple_expr_type (stmt);
2418
+ type_size = TYPE_PRECISION (type);
2419
if (type_size % BITS_PER_UNIT != 0)
2422
+ /* Sign extension: result is dependent on the value. */
2423
+ old_type_size = TYPE_PRECISION (n->type);
2424
+ if (!TYPE_UNSIGNED (n->type)
2425
+ && type_size > old_type_size
2427
+ ((unsigned HOST_WIDEST_INT) 0xff << (old_type_size - 8)))
2430
if (type_size / BITS_PER_UNIT < (int)(sizeof (HOST_WIDEST_INT)))
2432
/* If STMT casts to a smaller type mask out the bits not
2433
@@ -1705,7 +1724,7 @@
2434
belonging to the target type. */
2435
n->n &= ((unsigned HOST_WIDEST_INT)1 << type_size) - 1;
2437
- n->size = type_size / BITS_PER_UNIT;
2442
@@ -1718,7 +1737,7 @@
2444
if (rhs_class == GIMPLE_BINARY_RHS)
2448
struct symbolic_number n1, n2;
2449
unsigned HOST_WIDEST_INT mask;
2451
@@ -1742,11 +1761,12 @@
2452
source_expr2 = find_bswap_1 (rhs2_stmt, &n2, limit - 1);
2454
if (source_expr1 != source_expr2
2455
- || n1.size != n2.size)
2456
+ || TYPE_PRECISION (n1.type) != TYPE_PRECISION (n2.type))
2459
- n->size = n1.size;
2460
- for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
2461
+ n->type = n1.type;
2462
+ size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
2463
+ for (i = 0, mask = 0xff; i < size; i++, mask <<= BITS_PER_UNIT)
2465
unsigned HOST_WIDEST_INT masked1, masked2;
2467
@@ -1785,7 +1805,7 @@
2469
struct symbolic_number n;
2472
+ int limit, bitsize;
2474
/* The last parameter determines the depth search limit. It usually
2475
correlates directly to the number of bytes to be touched. We
2476
@@ -1800,13 +1820,14 @@
2479
/* Zero out the extra bits of N and CMP. */
2480
- if (n.size < (int)sizeof (HOST_WIDEST_INT))
2481
+ bitsize = TYPE_PRECISION (n.type);
2482
+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
2484
unsigned HOST_WIDEST_INT mask =
2485
- ((unsigned HOST_WIDEST_INT)1 << (n.size * BITS_PER_UNIT)) - 1;
2486
+ ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
2489
- cmp >>= (sizeof (HOST_WIDEST_INT) - n.size) * BITS_PER_UNIT;
2490
+ cmp >>= sizeof (HOST_WIDEST_INT) * BITS_PER_UNIT - bitsize;
2493
/* A complete byte swap should make the symbolic number to start
2494
Index: gcc/tree-ssa-ifcombine.c
2495
===================================================================
2496
--- a/src/gcc/tree-ssa-ifcombine.c (.../tags/gcc_4_8_3_release)
2497
+++ b/src/gcc/tree-ssa-ifcombine.c (.../branches/gcc-4_8-branch)
2498
@@ -105,7 +105,11 @@
2500
gimple stmt = gsi_stmt (gsi);
2502
+ if (is_gimple_debug (stmt))
2505
if (gimple_has_side_effects (stmt)
2506
+ || gimple_could_trap_p (stmt)
2507
|| gimple_vuse (stmt))
2511
while (is_gimple_assign (stmt)
2512
&& ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
2513
&& (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (stmt)))
2514
- <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt)))))
2515
+ <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt))))
2516
+ && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
2517
|| gimple_assign_ssa_name_copy_p (stmt)))
2518
stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
2520
Index: gcc/sel-sched-ir.c
2521
===================================================================
2522
--- a/src/gcc/sel-sched-ir.c (.../tags/gcc_4_8_3_release)
2523
+++ b/src/gcc/sel-sched-ir.c (.../branches/gcc-4_8-branch)
2525
static void free_av_set (basic_block);
2526
static void invalidate_av_set (basic_block);
2527
static void extend_insn_data (void);
2528
-static void sel_init_new_insn (insn_t, int);
2529
+static void sel_init_new_insn (insn_t, int, int = -1);
2530
static void finish_insns (void);
2532
/* Various list functions. */
2533
@@ -4011,9 +4011,10 @@
2537
-/* Compute seqno for INSN by its preds or succs. */
2538
+/* Compute seqno for INSN by its preds or succs. Use OLD_SEQNO to compute
2539
+ seqno in corner cases. */
2541
-get_seqno_for_a_jump (insn_t insn)
2542
+get_seqno_for_a_jump (insn_t insn, int old_seqno)
2546
@@ -4069,8 +4070,16 @@
2548
seqno = get_seqno_by_succs (insn);
2552
+ /* The only case where this could be here legally is that the only
2553
+ unscheduled insn was a conditional jump that got removed and turned
2554
+ into this unconditional one. Initialize from the old seqno
2555
+ of that jump passed down to here. */
2556
+ seqno = old_seqno;
2559
gcc_assert (seqno >= 0);
2564
@@ -4250,22 +4259,24 @@
2567
/* This is used to initialize spurious jumps generated by
2568
- sel_redirect_edge (). */
2569
+ sel_redirect_edge (). OLD_SEQNO is used for initializing seqnos
2570
+ in corner cases within get_seqno_for_a_jump. */
2572
-init_simplejump_data (insn_t insn)
2573
+init_simplejump_data (insn_t insn, int old_seqno)
2575
init_expr (INSN_EXPR (insn), vinsn_create (insn, false), 0,
2576
REG_BR_PROB_BASE, 0, 0, 0, 0, 0, 0,
2577
vNULL, true, false, false,
2579
- INSN_SEQNO (insn) = get_seqno_for_a_jump (insn);
2580
+ INSN_SEQNO (insn) = get_seqno_for_a_jump (insn, old_seqno);
2581
init_first_time_insn_data (insn);
2584
/* Perform deferred initialization of insns. This is used to process
2585
- a new jump that may be created by redirect_edge. */
2587
-sel_init_new_insn (insn_t insn, int flags)
2588
+ a new jump that may be created by redirect_edge. OLD_SEQNO is used
2589
+ for initializing simplejumps in init_simplejump_data. */
2591
+sel_init_new_insn (insn_t insn, int flags, int old_seqno)
2593
/* We create data structures for bb when the first insn is emitted in it. */
2595
@@ -4292,7 +4303,7 @@
2596
if (flags & INSN_INIT_TODO_SIMPLEJUMP)
2598
extend_insn_data ();
2599
- init_simplejump_data (insn);
2600
+ init_simplejump_data (insn, old_seqno);
2603
gcc_assert (CONTAINING_RGN (BLOCK_NUM (insn))
2604
@@ -5578,8 +5589,7 @@
2607
/* A wrapper for redirect_edge_and_branch_force, which also initializes
2608
- data structures for possibly created bb and insns. Returns the newly
2609
- added bb or NULL, when a bb was not needed. */
2610
+ data structures for possibly created bb and insns. */
2612
sel_redirect_edge_and_branch_force (edge e, basic_block to)
2614
@@ -5586,6 +5596,7 @@
2615
basic_block jump_bb, src, orig_dest = e->dest;
2618
+ int old_seqno = -1;
2620
/* This function is now used only for bookkeeping code creation, where
2621
we'll never get the single pred of orig_dest block and thus will not
2622
@@ -5594,8 +5605,13 @@
2623
&& !single_pred_p (orig_dest));
2625
prev_max_uid = get_max_uid ();
2626
+ /* Compute and pass old_seqno down to sel_init_new_insn only for the case
2627
+ when the conditional jump being redirected may become unconditional. */
2628
+ if (any_condjump_p (BB_END (src))
2629
+ && INSN_SEQNO (BB_END (src)) >= 0)
2630
+ old_seqno = INSN_SEQNO (BB_END (src));
2632
jump_bb = redirect_edge_and_branch_force (e, to);
2634
if (jump_bb != NULL)
2635
sel_add_bb (jump_bb);
2637
@@ -5607,7 +5623,8 @@
2639
jump = find_new_jump (src, jump_bb, prev_max_uid);
2641
- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
2642
+ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP,
2644
set_immediate_dominator (CDI_DOMINATORS, to,
2645
recompute_dominator (CDI_DOMINATORS, to));
2646
set_immediate_dominator (CDI_DOMINATORS, orig_dest,
2647
@@ -5626,6 +5643,7 @@
2649
bool recompute_toporder_p = false;
2650
bool maybe_unreachable = single_pred_p (orig_dest);
2651
+ int old_seqno = -1;
2653
latch_edge_p = (pipelining_p
2654
&& current_loop_nest
2655
@@ -5634,6 +5652,12 @@
2657
prev_max_uid = get_max_uid ();
2659
+ /* Compute and pass old_seqno down to sel_init_new_insn only for the case
2660
+ when the conditional jump being redirected may become unconditional. */
2661
+ if (any_condjump_p (BB_END (src))
2662
+ && INSN_SEQNO (BB_END (src)) >= 0)
2663
+ old_seqno = INSN_SEQNO (BB_END (src));
2665
redirected = redirect_edge_and_branch (e, to);
2667
gcc_assert (redirected && !last_added_blocks.exists ());
2668
@@ -5654,7 +5678,7 @@
2670
jump = find_new_jump (src, NULL, prev_max_uid);
2672
- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
2673
+ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP, old_seqno);
2675
/* Only update dominator info when we don't have unreachable blocks.
2676
Otherwise we'll update in maybe_tidy_empty_bb. */
2677
Index: gcc/fortran/trans-expr.c
2678
===================================================================
2679
--- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_4_8_3_release)
2680
+++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-4_8-branch)
2681
@@ -7096,7 +7096,7 @@
2683
res_desc = gfc_evaluate_now (desc, &se->pre);
2684
gfc_conv_descriptor_data_set (&se->pre, res_desc, null_pointer_node);
2685
- se->expr = gfc_build_addr_expr (TREE_TYPE (se->expr), res_desc);
2686
+ se->expr = gfc_build_addr_expr (NULL_TREE, res_desc);
2688
/* Free the lhs after the function call and copy the result data to
2689
the lhs descriptor. */
2690
Index: gcc/fortran/decl.c
2691
===================================================================
2692
--- a/src/gcc/fortran/decl.c (.../tags/gcc_4_8_3_release)
2693
+++ b/src/gcc/fortran/decl.c (.../branches/gcc-4_8-branch)
2694
@@ -1996,6 +1996,13 @@
2695
if (gfc_notify_std (GFC_STD_GNU, "Old-style "
2696
"initialization at %C") == FAILURE)
2698
+ else if (gfc_current_state () == COMP_DERIVED)
2700
+ gfc_error ("Invalid old style initialization for derived type "
2701
+ "component at %C");
2706
return match_old_style_init (name);
2708
Index: gcc/fortran/ChangeLog
2709
===================================================================
2710
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_3_release)
2711
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
2713
+2014-07-19 Paul Thomas <pault@gcc.gnu.org>
2715
+ Backport from trunk.
2717
+ * dependency.c (gfc_dep_resolver): Index the 'reverse' array so
2718
+ that elements are skipped. This then correctly aligns 'reverse'
2719
+ with the scalarizer loops.
2721
+2014-07-08 Paul Thomas <pault@gcc.gnu.org>
2725
+ * trans-expr.c (fcncall_realloc_result): Use the natural type
2726
+ for the address expression of 'res_desc'.
2728
+2014-07-02 Jakub Jelinek <jakub@redhat.com>
2729
+ Fritz Reese <Reese-Fritz@zai.com>
2731
+ * decl.c (variable_decl): Reject old style initialization
2732
+ for derived type components.
2734
+2014-06-15 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
2736
+ Backport from trunk.
2738
+ * trans-decl.c (gfc_create_module_variable): Don't create
2739
+ Cray-pointee decls twice.
2741
+2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
2743
+ Backport from mainline
2744
+ PR libfortran/61310
2745
+ * intrinsics.texi (CTIME): Remove mention of locale-dependent
2748
2014-05-22 Release Manager
2750
* GCC 4.8.3 released.
2751
Index: gcc/fortran/trans-decl.c
2752
===================================================================
2753
--- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_8_3_release)
2754
+++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_8-branch)
2755
@@ -4084,8 +4084,8 @@
2758
/* Don't generate variables from other modules. Variables from
2759
- COMMONs will already have been generated. */
2760
- if (sym->attr.use_assoc || sym->attr.in_common)
2761
+ COMMONs and Cray pointees will already have been generated. */
2762
+ if (sym->attr.use_assoc || sym->attr.in_common || sym->attr.cray_pointee)
2765
/* Equivalenced variables arrive here after creation. */
2766
Index: gcc/fortran/dependency.c
2767
===================================================================
2768
--- a/src/gcc/fortran/dependency.c (.../tags/gcc_4_8_3_release)
2769
+++ b/src/gcc/fortran/dependency.c (.../branches/gcc-4_8-branch)
2770
@@ -1779,6 +1779,7 @@
2771
gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gfc_reverse *reverse)
2775
gfc_dependency fin_dep;
2776
gfc_dependency this_dep;
2778
@@ -1828,6 +1829,8 @@
2782
+ /* Index for the reverse array. */
2784
for (n=0; n < lref->u.ar.dimen; n++)
2786
/* Assume dependency when either of array reference is vector
2787
@@ -1862,31 +1865,37 @@
2788
The ability to reverse or not is set by previous conditions
2789
in this dimension. If reversal is not activated, the
2790
value GFC_DEP_BACKWARD is reset to GFC_DEP_OVERLAP. */
2792
+ /* Get the indexing right for the scalarizing loop. If this
2793
+ is an element, there is no corresponding loop. */
2794
+ if (lref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
2797
if (rref->u.ar.dimen_type[n] == DIMEN_RANGE
2798
&& lref->u.ar.dimen_type[n] == DIMEN_RANGE)
2800
/* Set reverse if backward dependence and not inhibited. */
2801
- if (reverse && reverse[n] == GFC_ENABLE_REVERSE)
2802
- reverse[n] = (this_dep == GFC_DEP_BACKWARD) ?
2803
- GFC_REVERSE_SET : reverse[n];
2804
+ if (reverse && reverse[m] == GFC_ENABLE_REVERSE)
2805
+ reverse[m] = (this_dep == GFC_DEP_BACKWARD) ?
2806
+ GFC_REVERSE_SET : reverse[m];
2808
/* Set forward if forward dependence and not inhibited. */
2809
- if (reverse && reverse[n] == GFC_ENABLE_REVERSE)
2810
- reverse[n] = (this_dep == GFC_DEP_FORWARD) ?
2811
- GFC_FORWARD_SET : reverse[n];
2812
+ if (reverse && reverse[m] == GFC_ENABLE_REVERSE)
2813
+ reverse[m] = (this_dep == GFC_DEP_FORWARD) ?
2814
+ GFC_FORWARD_SET : reverse[m];
2816
/* Flag up overlap if dependence not compatible with
2817
the overall state of the expression. */
2818
- if (reverse && reverse[n] == GFC_REVERSE_SET
2819
+ if (reverse && reverse[m] == GFC_REVERSE_SET
2820
&& this_dep == GFC_DEP_FORWARD)
2822
- reverse[n] = GFC_INHIBIT_REVERSE;
2823
+ reverse[m] = GFC_INHIBIT_REVERSE;
2824
this_dep = GFC_DEP_OVERLAP;
2826
- else if (reverse && reverse[n] == GFC_FORWARD_SET
2827
+ else if (reverse && reverse[m] == GFC_FORWARD_SET
2828
&& this_dep == GFC_DEP_BACKWARD)
2830
- reverse[n] = GFC_INHIBIT_REVERSE;
2831
+ reverse[m] = GFC_INHIBIT_REVERSE;
2832
this_dep = GFC_DEP_OVERLAP;
2835
@@ -1893,7 +1902,7 @@
2836
/* If no intention of reversing or reversing is explicitly
2837
inhibited, convert backward dependence to overlap. */
2838
if ((reverse == NULL && this_dep == GFC_DEP_BACKWARD)
2839
- || (reverse != NULL && reverse[n] == GFC_INHIBIT_REVERSE))
2840
+ || (reverse != NULL && reverse[m] == GFC_INHIBIT_REVERSE))
2841
this_dep = GFC_DEP_OVERLAP;
2844
Index: gcc/function.c
2845
===================================================================
2846
--- a/src/gcc/function.c (.../tags/gcc_4_8_3_release)
2847
+++ b/src/gcc/function.c (.../branches/gcc-4_8-branch)
2848
@@ -1354,9 +1354,13 @@
2849
#define STACK_POINTER_OFFSET 0
2852
+#if defined (REG_PARM_STACK_SPACE) && !defined (INCOMING_REG_PARM_STACK_SPACE)
2853
+#define INCOMING_REG_PARM_STACK_SPACE REG_PARM_STACK_SPACE
2856
/* If not defined, pick an appropriate default for the offset of dynamically
2857
allocated memory depending on the value of ACCUMULATE_OUTGOING_ARGS,
2858
- REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
2859
+ INCOMING_REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
2861
#ifndef STACK_DYNAMIC_OFFSET
2863
@@ -1368,12 +1372,12 @@
2864
`crtl->outgoing_args_size'. Nevertheless, we must allow
2865
for it when allocating stack dynamic objects. */
2867
-#if defined(REG_PARM_STACK_SPACE)
2868
+#ifdef INCOMING_REG_PARM_STACK_SPACE
2869
#define STACK_DYNAMIC_OFFSET(FNDECL) \
2870
((ACCUMULATE_OUTGOING_ARGS \
2871
? (crtl->outgoing_args_size \
2872
+ (OUTGOING_REG_PARM_STACK_SPACE ((!(FNDECL) ? NULL_TREE : TREE_TYPE (FNDECL))) ? 0 \
2873
- : REG_PARM_STACK_SPACE (FNDECL))) \
2874
+ : INCOMING_REG_PARM_STACK_SPACE (FNDECL))) \
2875
: 0) + (STACK_POINTER_OFFSET))
2877
#define STACK_DYNAMIC_OFFSET(FNDECL) \
2878
@@ -2211,8 +2215,9 @@
2880
all->args_so_far = pack_cumulative_args (&all->args_so_far_v);
2882
-#ifdef REG_PARM_STACK_SPACE
2883
- all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
2884
+#ifdef INCOMING_REG_PARM_STACK_SPACE
2885
+ all->reg_parm_stack_space
2886
+ = INCOMING_REG_PARM_STACK_SPACE (current_function_decl);
2890
@@ -4518,6 +4523,7 @@
2891
/* ??? This could be set on a per-function basis by the front-end
2892
but is this worth the hassle? */
2893
cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
2894
+ cfun->can_delete_dead_exceptions = flag_delete_dead_exceptions;
2898
Index: gcc/common.opt
2899
===================================================================
2900
--- a/src/gcc/common.opt (.../tags/gcc_4_8_3_release)
2901
+++ b/src/gcc/common.opt (.../branches/gcc-4_8-branch)
2902
@@ -1226,6 +1226,10 @@
2903
Common Report Var(flag_tm)
2904
Enable support for GNU transactional memory
2907
+Common Report Var(flag_gnu_unique) Init(1)
2908
+Use STB_GNU_UNIQUE if supported by the assembler
2912
Does nothing. Preserved for backward compatibility.
2913
Index: gcc/sched-deps.c
2914
===================================================================
2915
--- a/src/gcc/sched-deps.c (.../tags/gcc_4_8_3_release)
2916
+++ b/src/gcc/sched-deps.c (.../branches/gcc-4_8-branch)
2917
@@ -2744,7 +2744,8 @@
2918
Consider for instance a volatile asm that changes the fpu rounding
2919
mode. An insn should not be moved across this even if it only uses
2920
pseudo-regs because it might give an incorrectly rounded result. */
2921
- if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
2922
+ if ((code != ASM_OPERANDS || MEM_VOLATILE_P (x))
2923
+ && !DEBUG_INSN_P (insn))
2924
reg_pending_barrier = TRUE_BARRIER;
2926
/* For all ASM_OPERANDS, we must traverse the vector of input operands.
2927
Index: gcc/config/alpha/elf.h
2928
===================================================================
2929
--- a/src/gcc/config/alpha/elf.h (.../tags/gcc_4_8_3_release)
2930
+++ b/src/gcc/config/alpha/elf.h (.../branches/gcc-4_8-branch)
2931
@@ -126,6 +126,10 @@
2932
"%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
2933
%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
2935
+/* This variable should be set to 'true' if the target ABI requires
2936
+ unwinding tables even when exceptions are not used. */
2937
+#define TARGET_UNWIND_TABLES_DEFAULT true
2939
/* Select a format to encode pointers in exception handling data. CODE
2940
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
2941
true if the symbol may be affected by dynamic relocations.
2942
Index: gcc/config/alpha/alpha.c
2943
===================================================================
2944
--- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_8_3_release)
2945
+++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_8-branch)
2946
@@ -8658,6 +8658,11 @@
2951
+ /* __builtin_unreachable can expand to no code at all,
2952
+ leaving (barrier) RTXes in the instruction stream. */
2953
+ goto close_shadow_notrapb;
2958
@@ -8673,6 +8678,7 @@
2959
n = emit_insn_before (gen_trapb (), i);
2960
PUT_MODE (n, TImode);
2961
PUT_MODE (i, TImode);
2962
+ close_shadow_notrapb:
2966
Index: gcc/config/elfos.h
2967
===================================================================
2968
--- a/src/gcc/config/elfos.h (.../tags/gcc_4_8_3_release)
2969
+++ b/src/gcc/config/elfos.h (.../branches/gcc-4_8-branch)
2971
/* Write the extra assembler code needed to declare an object properly. */
2973
#ifdef HAVE_GAS_GNU_UNIQUE_OBJECT
2974
-#define USE_GNU_UNIQUE_OBJECT 1
2975
+#define USE_GNU_UNIQUE_OBJECT flag_gnu_unique
2977
#define USE_GNU_UNIQUE_OBJECT 0
2979
Index: gcc/config/sparc/sync.md
2980
===================================================================
2981
--- a/src/gcc/config/sparc/sync.md (.../tags/gcc_4_8_3_release)
2982
+++ b/src/gcc/config/sparc/sync.md (.../branches/gcc-4_8-branch)
2985
[(set_attr "type" "multi")])
2987
+;; For LEON3, STB has the effect of membar #StoreLoad.
2988
+(define_insn "*membar_storeload_leon3"
2989
+ [(set (match_operand:BLK 0 "" "")
2990
+ (unspec:BLK [(match_dup 0) (const_int 2)] UNSPEC_MEMBAR))]
2992
+ "stb\t%%g0, [%%sp-1]"
2993
+ [(set_attr "type" "store")])
2995
;; For V8, LDSTUB has the effect of membar #StoreLoad.
2996
(define_insn "*membar_storeload"
2997
[(set (match_operand:BLK 0 "" "")
2998
(unspec:BLK [(match_dup 0) (const_int 2)] UNSPEC_MEMBAR))]
3000
+ "TARGET_V8 && !TARGET_LEON3"
3001
"ldstub\t[%%sp-1], %%g0"
3002
[(set_attr "type" "multi")])
3004
Index: gcc/config/i386/i386.md
3005
===================================================================
3006
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_8_3_release)
3007
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_8-branch)
3008
@@ -5339,66 +5339,37 @@
3010
;; Avoid store forwarding (partial memory) stall penalty by extending
3011
;; SImode value to DImode through XMM register instead of pushing two
3012
-;; SImode values to stack. Note that even !TARGET_INTER_UNIT_MOVES
3013
-;; targets benefit from this optimization. Also note that fild
3014
-;; loads from memory only.
3015
+;; SImode values to stack. Also note that fild loads from memory only.
3017
-(define_insn "*floatunssi<mode>2_1"
3018
- [(set (match_operand:X87MODEF 0 "register_operand" "=f,f")
3019
+(define_insn_and_split "*floatunssi<mode>2_i387_with_xmm"
3020
+ [(set (match_operand:X87MODEF 0 "register_operand" "=f")
3021
(unsigned_float:X87MODEF
3022
- (match_operand:SI 1 "nonimmediate_operand" "x,m")))
3023
- (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
3024
- (clobber (match_scratch:SI 3 "=X,x"))]
3025
+ (match_operand:SI 1 "nonimmediate_operand" "rm")))
3026
+ (clobber (match_scratch:DI 3 "=x"))
3027
+ (clobber (match_operand:DI 2 "memory_operand" "=m"))]
3029
&& TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
3031
+ && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES"
3033
+ "&& reload_completed"
3034
+ [(set (match_dup 3) (zero_extend:DI (match_dup 1)))
3035
+ (set (match_dup 2) (match_dup 3))
3036
+ (set (match_dup 0)
3037
+ (float:X87MODEF (match_dup 2)))]
3039
[(set_attr "type" "multi")
3040
(set_attr "mode" "<MODE>")])
3043
- [(set (match_operand:X87MODEF 0 "register_operand")
3044
- (unsigned_float:X87MODEF
3045
- (match_operand:SI 1 "register_operand")))
3046
- (clobber (match_operand:DI 2 "memory_operand"))
3047
- (clobber (match_scratch:SI 3))]
3049
- && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
3051
- && reload_completed"
3052
- [(set (match_dup 2) (match_dup 1))
3053
- (set (match_dup 0)
3054
- (float:X87MODEF (match_dup 2)))]
3055
- "operands[1] = simplify_gen_subreg (DImode, operands[1], SImode, 0);")
3058
- [(set (match_operand:X87MODEF 0 "register_operand")
3059
- (unsigned_float:X87MODEF
3060
- (match_operand:SI 1 "memory_operand")))
3061
- (clobber (match_operand:DI 2 "memory_operand"))
3062
- (clobber (match_scratch:SI 3))]
3064
- && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
3066
- && reload_completed"
3067
- [(set (match_dup 2) (match_dup 3))
3068
- (set (match_dup 0)
3069
- (float:X87MODEF (match_dup 2)))]
3071
- emit_move_insn (operands[3], operands[1]);
3072
- operands[3] = simplify_gen_subreg (DImode, operands[3], SImode, 0);
3075
(define_expand "floatunssi<mode>2"
3077
[(set (match_operand:X87MODEF 0 "register_operand")
3078
(unsigned_float:X87MODEF
3079
(match_operand:SI 1 "nonimmediate_operand")))
3080
- (clobber (match_dup 2))
3081
- (clobber (match_scratch:SI 3))])]
3082
+ (clobber (match_scratch:DI 3))
3083
+ (clobber (match_dup 2))])]
3085
&& ((TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
3087
+ && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES)
3088
|| (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))"
3090
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
3091
Index: gcc/config/i386/driver-i386.c
3092
===================================================================
3093
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_8_3_release)
3094
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_8-branch)
3095
@@ -713,6 +713,11 @@
3096
/* Assume Core 2. */
3099
+ else if (has_longmode)
3100
+ /* Perhaps some emulator? Assume x86-64, otherwise gcc
3101
+ -march=native would be unusable for 64-bit compilations,
3102
+ as all the CPUs below are 32-bit only. */
3105
/* It is Core Duo. */
3107
Index: gcc/config/i386/i386.c
3108
===================================================================
3109
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_8_3_release)
3110
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_8-branch)
3111
@@ -20505,7 +20505,7 @@
3112
t1 = gen_reg_rtx (V32QImode);
3113
t2 = gen_reg_rtx (V32QImode);
3114
t3 = gen_reg_rtx (V32QImode);
3115
- vt2 = GEN_INT (128);
3116
+ vt2 = GEN_INT (-128);
3117
for (i = 0; i < 32; i++)
3119
vt = gen_rtx_CONST_VECTOR (V32QImode, gen_rtvec_v (32, vec));
3120
@@ -24640,13 +24640,17 @@
3124
- /* Assume that region is SCC, i.e. all immediate predecessors
3125
- of non-head block are in the same region. */
3127
+ /* Regions are SCCs with the exception of selective
3128
+ scheduling with pipelining of outer blocks enabled.
3129
+ So also check that immediate predecessors of a non-head
3130
+ block are in the same region. */
3131
FOR_EACH_EDGE (e, ei, bb->preds)
3133
/* Avoid creating of loop-carried dependencies through
3134
- using topological odering in region. */
3135
- if (BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
3136
+ using topological ordering in the region. */
3137
+ if (rgn == CONTAINING_RGN (e->src->index)
3138
+ && BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
3139
add_dependee_for_func_arg (first_arg, e->src);
3142
Index: gcc/config/microblaze/predicates.md
3143
===================================================================
3144
--- a/src/gcc/config/microblaze/predicates.md (.../tags/gcc_4_8_3_release)
3145
+++ b/src/gcc/config/microblaze/predicates.md (.../branches/gcc-4_8-branch)
3147
(ior (match_operand 0 "const_0_operand")
3148
(match_operand 0 "register_operand")))
3150
-(define_predicate "reg_or_mem_operand"
3151
- (ior (match_operand 0 "memory_operand")
3152
- (match_operand 0 "register_operand")))
3154
;; Return if the operand is either the PC or a label_ref.
3155
(define_special_predicate "pc_or_label_operand"
3156
(ior (match_code "pc,label_ref")
3157
Index: gcc/config/microblaze/microblaze.md
3158
===================================================================
3159
--- a/src/gcc/config/microblaze/microblaze.md (.../tags/gcc_4_8_3_release)
3160
+++ b/src/gcc/config/microblaze/microblaze.md (.../branches/gcc-4_8-branch)
3161
@@ -1119,18 +1119,6 @@
3165
-;;Load and store reverse
3166
-(define_insn "movsi4_rev"
3167
- [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
3168
- (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
3173
- [(set_attr "type" "load,store")
3174
- (set_attr "mode" "SI")
3175
- (set_attr "length" "4,4")])
3177
;; 32-bit floating point moves
3179
(define_expand "movsf"
3180
Index: gcc/config/avr/avr-fixed.md
3181
===================================================================
3182
--- a/src/gcc/config/avr/avr-fixed.md (.../tags/gcc_4_8_3_release)
3183
+++ b/src/gcc/config/avr/avr-fixed.md (.../branches/gcc-4_8-branch)
3187
// Input and output of the libgcc function
3188
- const unsigned int regno_in[] = { -1, 22, 22, -1, 18 };
3189
- const unsigned int regno_out[] = { -1, 24, 24, -1, 22 };
3190
+ const unsigned int regno_in[] = { -1U, 22, 22, -1U, 18 };
3191
+ const unsigned int regno_out[] = { -1U, 24, 24, -1U, 22 };
3193
operands[3] = gen_rtx_REG (<MODE>mode, regno_out[(size_t) GET_MODE_SIZE (<MODE>mode)]);
3194
operands[4] = gen_rtx_REG (<MODE>mode, regno_in[(size_t) GET_MODE_SIZE (<MODE>mode)]);
3195
Index: gcc/config/avr/avr.md
3196
===================================================================
3197
--- a/src/gcc/config/avr/avr.md (.../tags/gcc_4_8_3_release)
3198
+++ b/src/gcc/config/avr/avr.md (.../branches/gcc-4_8-branch)
3199
@@ -367,6 +367,15 @@
3204
+ // Avoid (subreg (mem)) for non-generic address spaces below. Because
3205
+ // of the poor addressing capabilities of these spaces it's better to
3206
+ // load them in one chunk. And it avoids PR61443.
3208
+ if (MEM_P (operands[0])
3209
+ && !ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (operands[0])))
3210
+ operands[0] = copy_to_mode_reg (<MODE>mode, operands[0]);
3212
for (i = GET_MODE_SIZE (<MODE>mode) - 1; i >= 0; --i)
3214
rtx part = simplify_gen_subreg (QImode, operands[0], <MODE>mode, i);
3215
Index: gcc/config/avr/avr.h
3216
===================================================================
3217
--- a/src/gcc/config/avr/avr.h (.../tags/gcc_4_8_3_release)
3218
+++ b/src/gcc/config/avr/avr.h (.../branches/gcc-4_8-branch)
3219
@@ -250,18 +250,18 @@
3220
#define REG_CLASS_CONTENTS { \
3221
{0x00000000,0x00000000}, /* NO_REGS */ \
3222
{0x00000001,0x00000000}, /* R0_REG */ \
3223
- {3 << REG_X,0x00000000}, /* POINTER_X_REGS, r26 - r27 */ \
3224
- {3 << REG_Y,0x00000000}, /* POINTER_Y_REGS, r28 - r29 */ \
3225
- {3 << REG_Z,0x00000000}, /* POINTER_Z_REGS, r30 - r31 */ \
3226
+ {3u << REG_X,0x00000000}, /* POINTER_X_REGS, r26 - r27 */ \
3227
+ {3u << REG_Y,0x00000000}, /* POINTER_Y_REGS, r28 - r29 */ \
3228
+ {3u << REG_Z,0x00000000}, /* POINTER_Z_REGS, r30 - r31 */ \
3229
{0x00000000,0x00000003}, /* STACK_REG, STACK */ \
3230
- {(3 << REG_Y) | (3 << REG_Z), \
3231
+ {(3u << REG_Y) | (3u << REG_Z), \
3232
0x00000000}, /* BASE_POINTER_REGS, r28 - r31 */ \
3233
- {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z), \
3234
+ {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z), \
3235
0x00000000}, /* POINTER_REGS, r26 - r31 */ \
3236
- {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z) | (3 << REG_W), \
3237
+ {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z) | (3u << REG_W), \
3238
0x00000000}, /* ADDW_REGS, r24 - r31 */ \
3239
{0x00ff0000,0x00000000}, /* SIMPLE_LD_REGS r16 - r23 */ \
3240
- {(3 << REG_X)|(3 << REG_Y)|(3 << REG_Z)|(3 << REG_W)|(0xff << 16), \
3241
+ {(3u << REG_X)|(3u << REG_Y)|(3u << REG_Z)|(3u << REG_W)|(0xffu << 16),\
3242
0x00000000}, /* LD_REGS, r16 - r31 */ \
3243
{0x0000ffff,0x00000000}, /* NO_LD_REGS r0 - r15 */ \
3244
{0xffffffff,0x00000000}, /* GENERAL_REGS, r0 - r31 */ \
3245
Index: gcc/config/aarch64/arm_neon.h
3246
===================================================================
3247
--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_3_release)
3248
+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch)
3249
@@ -13815,7 +13815,7 @@
3251
__asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
3255
: /* No clobbers */);
3258
@@ -13837,7 +13837,7 @@
3260
__asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
3264
: /* No clobbers */);
3267
Index: gcc/config/aarch64/aarch64.md
3268
===================================================================
3269
--- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_8_3_release)
3270
+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_8-branch)
3271
@@ -3292,6 +3292,7 @@
3272
(unspec:DI [(match_operand:DI 0 "aarch64_valid_symref" "S")]
3274
(clobber (reg:DI LR_REGNUM))
3275
+ (clobber (reg:CC CC_REGNUM))
3276
(clobber (match_scratch:DI 1 "=r"))]
3278
"adrp\\tx0, %A0\;ldr\\t%1, [x0, #%L0]\;add\\tx0, x0, %L0\;.tlsdesccall\\t%0\;blr\\t%1"
3279
Index: gcc/config/aarch64/aarch64.c
3280
===================================================================
3281
--- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_4_8_3_release)
3282
+++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-4_8-branch)
3283
@@ -1201,6 +1201,7 @@
3284
CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
3285
int ncrn, nvrn, nregs;
3286
bool allocate_ncrn, allocate_nvrn;
3287
+ HOST_WIDE_INT size;
3289
/* We need to do this once per argument. */
3290
if (pcum->aapcs_arg_processed)
3291
@@ -1208,6 +1209,11 @@
3293
pcum->aapcs_arg_processed = true;
3295
+ /* Size in bytes, rounded to the nearest multiple of 8 bytes. */
3297
+ = AARCH64_ROUND_UP (type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode),
3300
allocate_ncrn = (type) ? !(FLOAT_TYPE_P (type)) : !FLOAT_MODE_P (mode);
3301
allocate_nvrn = aarch64_vfp_is_call_candidate (pcum_v,
3303
@@ -1258,10 +1264,8 @@
3306
ncrn = pcum->aapcs_ncrn;
3307
- nregs = ((type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode))
3308
- + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
3309
+ nregs = size / UNITS_PER_WORD;
3312
/* C6 - C9. though the sign and zero extension semantics are
3313
handled elsewhere. This is the case where the argument fits
3314
entirely general registers. */
3315
@@ -1309,13 +1313,12 @@
3316
pcum->aapcs_nextncrn = NUM_ARG_REGS;
3318
/* The argument is passed on stack; record the needed number of words for
3319
- this argument (we can re-use NREGS) and align the total size if
3321
+ this argument and align the total size if necessary. */
3323
- pcum->aapcs_stack_words = nregs;
3324
+ pcum->aapcs_stack_words = size / UNITS_PER_WORD;
3325
if (aarch64_function_arg_alignment (mode, type) == 16 * BITS_PER_UNIT)
3326
pcum->aapcs_stack_size = AARCH64_ROUND_UP (pcum->aapcs_stack_size,
3327
- 16 / UNITS_PER_WORD) + 1;
3328
+ 16 / UNITS_PER_WORD);
3332
Index: gcc/config/aarch64/aarch64-linux.h
3333
===================================================================
3334
--- a/src/gcc/config/aarch64/aarch64-linux.h (.../tags/gcc_4_8_3_release)
3335
+++ b/src/gcc/config/aarch64/aarch64-linux.h (.../branches/gcc-4_8-branch)
3340
+#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
3342
#endif /* GCC_AARCH64_LINUX_H */
3343
Index: gcc/config/rs6000/htm.md
3344
===================================================================
3345
--- a/src/gcc/config/rs6000/htm.md (.../tags/gcc_4_8_3_release)
3346
+++ b/src/gcc/config/rs6000/htm.md (.../branches/gcc-4_8-branch)
3349
UNSPECV_HTM_TABORTWCI))
3350
(set (subreg:CC (match_dup 2) 0) (match_dup 1))
3351
- (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 24)))
3352
+ (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 28)))
3353
(parallel [(set (match_operand:SI 0 "int_reg_operand" "")
3354
(and:SI (match_dup 3) (const_int 15)))
3355
(clobber (scratch:CC))])]
3356
Index: gcc/config/rs6000/freebsd64.h
3357
===================================================================
3358
--- a/src/gcc/config/rs6000/freebsd64.h (.../tags/gcc_4_8_3_release)
3359
+++ b/src/gcc/config/rs6000/freebsd64.h (.../branches/gcc-4_8-branch)
3361
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
3362
#undef ADJUST_FIELD_ALIGN
3363
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
3364
- ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
3365
+ (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
3368
&& TARGET_ALIGN_NATURAL == 0 \
3369
Index: gcc/config/rs6000/rs6000-protos.h
3370
===================================================================
3371
--- a/src/gcc/config/rs6000/rs6000-protos.h (.../tags/gcc_4_8_3_release)
3372
+++ b/src/gcc/config/rs6000/rs6000-protos.h (.../branches/gcc-4_8-branch)
3376
extern unsigned int rs6000_data_alignment (tree, unsigned int, enum data_align);
3377
+extern bool rs6000_special_adjust_field_align_p (tree, unsigned int);
3378
extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
3380
extern unsigned int darwin_rs6000_special_round_type_align (tree, unsigned int,
3382
extern rtx rs6000_libcall_value (enum machine_mode);
3383
extern rtx rs6000_va_arg (tree, tree);
3384
extern int function_ok_for_sibcall (tree);
3385
-extern int rs6000_reg_parm_stack_space (tree);
3386
+extern int rs6000_reg_parm_stack_space (tree, bool);
3387
extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
3388
extern bool rs6000_elf_in_small_data_p (const_tree);
3389
#ifdef ARGS_SIZE_RTX
3390
Index: gcc/config/rs6000/rs6000-builtin.def
3391
===================================================================
3392
--- a/src/gcc/config/rs6000/rs6000-builtin.def (.../tags/gcc_4_8_3_release)
3393
+++ b/src/gcc/config/rs6000/rs6000-builtin.def (.../branches/gcc-4_8-branch)
3394
@@ -622,20 +622,13 @@
3395
| RS6000_BTC_TERNARY), \
3396
CODE_FOR_ ## ICODE) /* ICODE */
3398
-/* Miscellaneous builtins. */
3399
-#define BU_MISC_1(ENUM, NAME, ATTR, ICODE) \
3400
+/* 128-bit long double floating point builtins. */
3401
+#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \
3402
RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
3403
"__builtin_" NAME, /* NAME */ \
3404
- RS6000_BTM_HARD_FLOAT, /* MASK */ \
3405
+ (RS6000_BTM_HARD_FLOAT /* MASK */ \
3406
+ | RS6000_BTM_LDBL128), \
3407
(RS6000_BTC_ ## ATTR /* ATTR */ \
3408
- | RS6000_BTC_UNARY), \
3409
- CODE_FOR_ ## ICODE) /* ICODE */
3411
-#define BU_MISC_2(ENUM, NAME, ATTR, ICODE) \
3412
- RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
3413
- "__builtin_" NAME, /* NAME */ \
3414
- RS6000_BTM_HARD_FLOAT, /* MASK */ \
3415
- (RS6000_BTC_ ## ATTR /* ATTR */ \
3416
| RS6000_BTC_BINARY), \
3417
CODE_FOR_ ## ICODE) /* ICODE */
3419
@@ -1593,10 +1586,8 @@
3420
BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
3421
BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
3423
-BU_MISC_2 (PACK_TF, "pack_longdouble", CONST, packtf)
3424
-BU_MISC_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
3425
-BU_MISC_1 (UNPACK_TF_0, "longdouble_dw0", CONST, unpacktf_0)
3426
-BU_MISC_1 (UNPACK_TF_1, "longdouble_dw1", CONST, unpacktf_1)
3427
+BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf)
3428
+BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
3430
BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
3431
BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
3432
Index: gcc/config/rs6000/linux64.h
3433
===================================================================
3434
--- a/src/gcc/config/rs6000/linux64.h (.../tags/gcc_4_8_3_release)
3435
+++ b/src/gcc/config/rs6000/linux64.h (.../branches/gcc-4_8-branch)
3437
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
3438
#undef ADJUST_FIELD_ALIGN
3439
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
3440
- ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
3441
+ (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
3444
&& TARGET_ALIGN_NATURAL == 0 \
3445
Index: gcc/config/rs6000/rs6000.c
3446
===================================================================
3447
--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_8_3_release)
3448
+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_8-branch)
3449
@@ -3014,7 +3014,8 @@
3450
| ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0)
3451
| ((TARGET_HTM) ? RS6000_BTM_HTM : 0)
3452
| ((TARGET_DFP) ? RS6000_BTM_DFP : 0)
3453
- | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0));
3454
+ | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0)
3455
+ | ((TARGET_LONG_DOUBLE_128) ? RS6000_BTM_LDBL128 : 0));
3458
/* Override command line options. Mostly we process the processor type and
3459
@@ -5861,6 +5862,34 @@
3463
+/* Previous GCC releases forced all vector types to have 16-byte alignment. */
3466
+rs6000_special_adjust_field_align_p (tree field, unsigned int computed)
3468
+ if (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE)
3470
+ if (computed != 128)
3472
+ static bool warned;
3473
+ if (!warned && warn_psabi)
3476
+ inform (input_location,
3477
+ "the layout of aggregates containing vectors with"
3478
+ " %d-byte alignment will change in a future GCC release",
3479
+ computed / BITS_PER_UNIT);
3482
+ /* GCC 4.8/4.9 Note: To avoid any ABI change on a release branch, we
3483
+ keep the special treatment of vector types, but warn if there will
3484
+ be differences in future GCC releases. */
3491
/* AIX increases natural record alignment to doubleword if the first
3492
field is an FP double while the FP fields remain word aligned. */
3494
@@ -6109,7 +6138,8 @@
3497
extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
3498
- gcc_assert (extra >= 0);
3502
if (GET_CODE (addr) == LO_SUM)
3503
/* For lo_sum addresses, we must allow any offset except one that
3504
@@ -9198,14 +9228,51 @@
3505
|| (type && TREE_CODE (type) == VECTOR_TYPE
3506
&& int_size_in_bytes (type) >= 16))
3508
- else if (((TARGET_MACHO && rs6000_darwin64_abi)
3509
- || DEFAULT_ABI == ABI_ELFv2
3510
- || (DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm))
3511
- && mode == BLKmode
3512
- && type && TYPE_ALIGN (type) > 64)
3514
+ /* Aggregate types that need > 8 byte alignment are quadword-aligned
3515
+ in the parameter area in the ELFv2 ABI, and in the AIX ABI unless
3516
+ -mcompat-align-parm is used. */
3517
+ if (((DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm)
3518
+ || DEFAULT_ABI == ABI_ELFv2)
3519
+ && type && TYPE_ALIGN (type) > 64)
3521
+ /* "Aggregate" means any AGGREGATE_TYPE except for single-element
3522
+ or homogeneous float/vector aggregates here. We already handled
3523
+ vector aggregates above, but still need to check for float here. */
3524
+ bool aggregate_p = (AGGREGATE_TYPE_P (type)
3525
+ && !SCALAR_FLOAT_MODE_P (elt_mode));
3527
+ /* We used to check for BLKmode instead of the above aggregate type
3528
+ check. Warn when this results in any difference to the ABI. */
3529
+ if (aggregate_p != (mode == BLKmode))
3531
+ static bool warned;
3532
+ if (!warned && warn_psabi)
3535
+ inform (input_location,
3536
+ "the ABI of passing aggregates with %d-byte alignment"
3537
+ " will change in a future GCC release",
3538
+ (int) TYPE_ALIGN (type) / BITS_PER_UNIT);
3542
+ /* GCC 4.8/4.9 Note: To avoid any ABI change on a release branch, we
3543
+ keep using the BLKmode check, but warn if there will be differences
3544
+ in future GCC releases. */
3545
+ if (mode == BLKmode)
3549
+ /* Similar for the Darwin64 ABI. Note that for historical reasons we
3550
+ implement the "aggregate type" check as a BLKmode check here; this
3551
+ means certain aggregate types are in fact not aligned. */
3552
+ if (TARGET_MACHO && rs6000_darwin64_abi
3553
+ && mode == BLKmode
3554
+ && type && TYPE_ALIGN (type) > 64)
3557
- return PARM_BOUNDARY;
3559
+ return PARM_BOUNDARY;
3562
/* The offset in words to the start of the parameter save area. */
3563
@@ -10243,6 +10310,7 @@
3566
unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3;
3569
/* Do we also need to pass this argument in the parameter
3571
@@ -10271,6 +10339,37 @@
3572
rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
3575
+ /* If there were not enough FPRs to hold the argument, the rest
3576
+ usually goes into memory. However, if the current position
3577
+ is still within the register parameter area, a portion may
3578
+ actually have to go into GPRs.
3580
+ Note that it may happen that the portion of the argument
3581
+ passed in the first "half" of the first GPR was already
3582
+ passed in the last FPR as well.
3584
+ For unnamed arguments, we already set up GPRs to cover the
3585
+ whole argument in rs6000_psave_function_arg, so there is
3586
+ nothing further to do at this point.
3588
+ GCC 4.8/4.9 Note: This was implemented incorrectly in earlier
3589
+ GCC releases. To avoid any ABI change on the release branch,
3590
+ we retain that original implementation here, but warn if we
3591
+ encounter a case where the ABI will change in the future. */
3592
+ fpr_words = (i * GET_MODE_SIZE (elt_mode)) / (TARGET_32BIT ? 4 : 8);
3593
+ if (i < n_elts && align_words + fpr_words < GP_ARG_NUM_REG
3594
+ && cum->nargs_prototype > 0)
3596
+ static bool warned;
3597
+ if (!warned && warn_psabi)
3600
+ inform (input_location,
3601
+ "the ABI of passing homogeneous float aggregates"
3602
+ " will change in a future GCC release");
3606
return rs6000_finish_function_arg (mode, rvec, k);
3608
else if (align_words < GP_ARG_NUM_REG)
3609
@@ -10497,10 +10596,9 @@
3610
list, or passes any parameter in memory. */
3613
-rs6000_function_parms_need_stack (tree fun)
3614
+rs6000_function_parms_need_stack (tree fun, bool incoming)
3616
- function_args_iterator args_iter;
3618
+ tree fntype, result;
3619
CUMULATIVE_ARGS args_so_far_v;
3620
cumulative_args_t args_so_far;
3622
@@ -10507,26 +10605,57 @@
3624
/* Must be a libcall, all of which only use reg parms. */
3629
- fun = TREE_TYPE (fun);
3630
+ fntype = TREE_TYPE (fun);
3632
/* Varargs functions need the parameter save area. */
3633
- if (!prototype_p (fun) || stdarg_p (fun))
3634
+ if ((!incoming && !prototype_p (fntype)) || stdarg_p (fntype))
3637
- INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fun, NULL_RTX);
3638
+ INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fntype, NULL_RTX);
3639
args_so_far = pack_cumulative_args (&args_so_far_v);
3641
- if (aggregate_value_p (TREE_TYPE (fun), fun))
3642
+ /* When incoming, we will have been passed the function decl.
3643
+ It is necessary to use the decl to handle K&R style functions,
3644
+ where TYPE_ARG_TYPES may not be available. */
3647
- tree type = build_pointer_type (TREE_TYPE (fun));
3648
- rs6000_parm_needs_stack (args_so_far, type);
3649
+ gcc_assert (DECL_P (fun));
3650
+ result = DECL_RESULT (fun);
3653
+ result = TREE_TYPE (fntype);
3655
- FOREACH_FUNCTION_ARGS (fun, arg_type, args_iter)
3656
- if (rs6000_parm_needs_stack (args_so_far, arg_type))
3658
+ if (result && aggregate_value_p (result, fntype))
3660
+ if (!TYPE_P (result))
3661
+ result = TREE_TYPE (result);
3662
+ result = build_pointer_type (result);
3663
+ rs6000_parm_needs_stack (args_so_far, result);
3670
+ for (parm = DECL_ARGUMENTS (fun);
3671
+ parm && parm != void_list_node;
3672
+ parm = TREE_CHAIN (parm))
3673
+ if (rs6000_parm_needs_stack (args_so_far, TREE_TYPE (parm)))
3678
+ function_args_iterator args_iter;
3681
+ FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
3682
+ if (rs6000_parm_needs_stack (args_so_far, arg_type))
3689
@@ -10537,7 +10666,7 @@
3690
all parameters in registers. */
3693
-rs6000_reg_parm_stack_space (tree fun)
3694
+rs6000_reg_parm_stack_space (tree fun, bool incoming)
3696
int reg_parm_stack_space;
3698
@@ -10555,7 +10684,7 @@
3700
/* ??? Recomputing this every time is a bit expensive. Is there
3701
a place to cache this information? */
3702
- if (rs6000_function_parms_need_stack (fun))
3703
+ if (rs6000_function_parms_need_stack (fun, incoming))
3704
reg_parm_stack_space = TARGET_64BIT ? 64 : 32;
3706
reg_parm_stack_space = 0;
3707
@@ -13544,11 +13673,15 @@
3708
else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
3709
== (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
3710
error ("Builtin function %s requires the -mhard-dfp and"
3711
- "-mpower8-vector options", name);
3712
+ " -mpower8-vector options", name);
3713
else if ((fnmask & RS6000_BTM_DFP) != 0)
3714
error ("Builtin function %s requires the -mhard-dfp option", name);
3715
else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
3716
error ("Builtin function %s requires the -mpower8-vector option", name);
3717
+ else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
3718
+ == (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
3719
+ error ("Builtin function %s requires the -mhard-float and"
3720
+ " -mlong-double-128 options", name);
3721
else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
3722
error ("Builtin function %s requires the -mhard-float option", name);
3724
@@ -31413,6 +31546,7 @@
3725
{ "htm", RS6000_BTM_HTM, false, false },
3726
{ "hard-dfp", RS6000_BTM_DFP, false, false },
3727
{ "hard-float", RS6000_BTM_HARD_FLOAT, false, false },
3728
+ { "long-double-128", RS6000_BTM_LDBL128, false, false },
3731
/* Option variables that we want to support inside attribute((target)) and
3732
Index: gcc/config/rs6000/vsx.md
3733
===================================================================
3734
--- a/src/gcc/config/rs6000/vsx.md (.../tags/gcc_4_8_3_release)
3735
+++ b/src/gcc/config/rs6000/vsx.md (.../branches/gcc-4_8-branch)
3737
;; Iterator for the 2 64-bit vector types
3738
(define_mode_iterator VSX_D [V2DF V2DI])
3740
+;; Iterator for the 2 64-bit vector types + 128-bit types that are loaded with
3741
+;; lxvd2x to properly handle swapping words on little endian
3742
+(define_mode_iterator VSX_LE [V2DF
3745
+ (TI "VECTOR_MEM_VSX_P (TImode)")])
3747
;; Iterator for the 2 32-bit vector types
3748
(define_mode_iterator VSX_W [V4SF V4SI])
3751
;; The patterns for LE permuted loads and stores come before the general
3752
;; VSX moves so they match first.
3753
(define_insn_and_split "*vsx_le_perm_load_<mode>"
3754
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
3755
- (match_operand:VSX_D 1 "memory_operand" "Z"))]
3756
+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
3757
+ (match_operand:VSX_LE 1 "memory_operand" "Z"))]
3758
"!BYTES_BIG_ENDIAN && TARGET_VSX"
3760
"!BYTES_BIG_ENDIAN && TARGET_VSX"
3762
(set_attr "length" "8")])
3764
(define_insn "*vsx_le_perm_store_<mode>"
3765
- [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
3766
- (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))]
3767
+ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
3768
+ (match_operand:VSX_LE 1 "vsx_register_operand" "+wa"))]
3769
"!BYTES_BIG_ENDIAN && TARGET_VSX"
3771
[(set_attr "type" "vecstore")
3773
(set_attr "length" "12")])
3776
- [(set (match_operand:VSX_D 0 "memory_operand" "")
3777
- (match_operand:VSX_D 1 "vsx_register_operand" ""))]
3778
+ [(set (match_operand:VSX_LE 0 "memory_operand" "")
3779
+ (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
3780
"!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
3784
;; The post-reload split requires that we re-permute the source
3785
;; register in case it is still live.
3787
- [(set (match_operand:VSX_D 0 "memory_operand" "")
3788
- (match_operand:VSX_D 1 "vsx_register_operand" ""))]
3789
+ [(set (match_operand:VSX_LE 0 "memory_operand" "")
3790
+ (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
3791
"!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
3794
@@ -1352,9 +1359,9 @@
3795
;; xxpermdi for little endian loads and stores. We need several of
3796
;; these since the form of the PARALLEL differs by mode.
3797
(define_insn "*vsx_xxpermdi2_le_<mode>"
3798
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
3800
- (match_operand:VSX_D 1 "vsx_register_operand" "wa")
3801
+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
3802
+ (vec_select:VSX_LE
3803
+ (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
3804
(parallel [(const_int 1) (const_int 0)])))]
3805
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
3806
"xxpermdi %x0,%x1,%x1,2"
3807
@@ -1401,9 +1408,9 @@
3808
;; lxvd2x for little endian loads. We need several of
3809
;; these since the form of the PARALLEL differs by mode.
3810
(define_insn "*vsx_lxvd2x2_le_<mode>"
3811
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
3813
- (match_operand:VSX_D 1 "memory_operand" "Z")
3814
+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
3815
+ (vec_select:VSX_LE
3816
+ (match_operand:VSX_LE 1 "memory_operand" "Z")
3817
(parallel [(const_int 1) (const_int 0)])))]
3818
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
3820
@@ -1450,9 +1457,9 @@
3821
;; stxvd2x for little endian stores. We need several of
3822
;; these since the form of the PARALLEL differs by mode.
3823
(define_insn "*vsx_stxvd2x2_le_<mode>"
3824
- [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
3826
- (match_operand:VSX_D 1 "vsx_register_operand" "wa")
3827
+ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
3828
+ (vec_select:VSX_LE
3829
+ (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
3830
(parallel [(const_int 1) (const_int 0)])))]
3831
"!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
3833
@@ -1606,7 +1613,7 @@
3835
if (GET_CODE (op3) == SCRATCH)
3836
op3 = gen_reg_rtx (V4SFmode);
3837
- emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, op2));
3838
+ emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, GEN_INT (ele)));
3841
emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp));
3842
Index: gcc/config/rs6000/rs6000.h
3843
===================================================================
3844
--- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_4_8_3_release)
3845
+++ b/src/gcc/config/rs6000/rs6000.h (.../branches/gcc-4_8-branch)
3846
@@ -1593,8 +1593,15 @@
3847
/* Define this if stack space is still allocated for a parameter passed
3848
in a register. The value is the number of bytes allocated to this
3850
-#define REG_PARM_STACK_SPACE(FNDECL) rs6000_reg_parm_stack_space((FNDECL))
3851
+#define REG_PARM_STACK_SPACE(FNDECL) \
3852
+ rs6000_reg_parm_stack_space ((FNDECL), false)
3854
+/* Define this macro if space guaranteed when compiling a function body
3855
+ is different to space required when making a call, a situation that
3856
+ can arise with K&R style function definitions. */
3857
+#define INCOMING_REG_PARM_STACK_SPACE(FNDECL) \
3858
+ rs6000_reg_parm_stack_space ((FNDECL), true)
3860
/* Define this if the above stack space is to be considered part of the
3861
space allocated by the caller. */
3862
#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
3863
@@ -2483,8 +2490,8 @@
3864
#define RS6000_BTC_SAT RS6000_BTC_MISC /* saturate sets VSCR. */
3866
/* Builtin targets. For now, we reuse the masks for those options that are in
3867
- target flags, and pick two random bits for SPE and paired which aren't in
3869
+ target flags, and pick three random bits for SPE, paired and ldbl128 which
3870
+ aren't in target_flags. */
3871
#define RS6000_BTM_ALWAYS 0 /* Always enabled. */
3872
#define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */
3873
#define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */
3874
@@ -2501,6 +2508,7 @@
3875
#define RS6000_BTM_CELL MASK_FPRND /* Target is cell powerpc. */
3876
#define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */
3877
#define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */
3878
+#define RS6000_BTM_LDBL128 MASK_MULTIPLE /* 128-bit long double. */
3880
#define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \
3882
@@ -2514,7 +2522,8 @@
3883
| RS6000_BTM_POPCNTD \
3886
- | RS6000_BTM_HARD_FLOAT)
3887
+ | RS6000_BTM_HARD_FLOAT \
3888
+ | RS6000_BTM_LDBL128)
3890
/* Define builtin enum index. */
3892
Index: gcc/config/rs6000/rs6000.md
3893
===================================================================
3894
--- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_4_8_3_release)
3895
+++ b/src/gcc/config/rs6000/rs6000.md (.../branches/gcc-4_8-branch)
3898
(define_insn "*extendsidi2_lfiwax"
3899
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wl,!wu")
3900
- (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r,r,Z,Z")))]
3901
+ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r,r,Z,Z")))]
3902
"TARGET_POWERPC64 && TARGET_LFIWAX"
3907
(define_insn "*extendsidi2_nocell"
3908
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
3909
- (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
3910
+ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r")))]
3911
"TARGET_POWERPC64 && rs6000_gen_cell_microcode && !TARGET_LFIWAX"
3914
@@ -15847,26 +15847,6 @@
3918
-;; The Advance Toolchain 7.0-3 added private builtins: __builtin_longdouble_dw0
3919
-;; and __builtin_longdouble_dw1 to optimize glibc. Add support for these
3922
-(define_expand "unpacktf_0"
3923
- [(set (match_operand:DF 0 "nonimmediate_operand" "")
3924
- (unspec:DF [(match_operand:TF 1 "register_operand" "")
3926
- UNSPEC_UNPACK_128BIT))]
3930
-(define_expand "unpacktf_1"
3931
- [(set (match_operand:DF 0 "nonimmediate_operand" "")
3932
- (unspec:DF [(match_operand:TF 1 "register_operand" "")
3934
- UNSPEC_UNPACK_128BIT))]
3938
(define_insn_and_split "unpack<mode>_dm"
3939
[(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,d,r,m")
3941
Index: gcc/config/rs6000/sysv4.h
3942
===================================================================
3943
--- a/src/gcc/config/rs6000/sysv4.h (.../tags/gcc_4_8_3_release)
3944
+++ b/src/gcc/config/rs6000/sysv4.h (.../branches/gcc-4_8-branch)
3946
/* An expression for the alignment of a structure field FIELD if the
3947
alignment computed in the usual way is COMPUTED. */
3948
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
3949
- ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
3950
+ (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
3953
#undef BIGGEST_FIELD_ALIGNMENT
3954
@@ -949,3 +949,27 @@
3955
#define TARGET_USES_SYSV4_OPT 1
3957
#undef DBX_REGISTER_NUMBER
3959
+/* Link -lasan early on the command line. For -static-libasan, don't link
3960
+ it for -shared link, the executable should be compiled with -static-libasan
3961
+ in that case, and for executable link link with --{,no-}whole-archive around
3962
+ it to force everything into the executable. And similarly for -ltsan. */
3963
+#if defined(HAVE_LD_STATIC_DYNAMIC)
3964
+#undef LIBASAN_EARLY_SPEC
3965
+#define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \
3966
+ "%{static-libasan:%{!shared:" \
3967
+ LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \
3968
+ LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}"
3969
+#undef LIBTSAN_EARLY_SPEC
3970
+#define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \
3971
+ LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \
3972
+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}"
3975
+/* Additional libraries needed by -static-libasan. */
3976
+#undef STATIC_LIBASAN_LIBS
3977
+#define STATIC_LIBASAN_LIBS "-ldl -lpthread"
3979
+/* Additional libraries needed by -static-libtsan. */
3980
+#undef STATIC_LIBTSAN_LIBS
3981
+#define STATIC_LIBTSAN_LIBS "-ldl -lpthread"
3982
Index: gcc/config/arm/arm.c
3983
===================================================================
3984
--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_8_3_release)
3985
+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_8-branch)
3986
@@ -24476,9 +24476,13 @@
3987
fputs (":\n", file);
3990
- /* Output ".word .LTHUNKn-7-.LTHUNKPCn". */
3991
+ /* Output ".word .LTHUNKn-[3,7]-.LTHUNKPCn". */
3992
rtx tem = XEXP (DECL_RTL (function), 0);
3993
- tem = gen_rtx_PLUS (GET_MODE (tem), tem, GEN_INT (-7));
3994
+ /* For TARGET_THUMB1_ONLY the thunk is in Thumb mode, so the PC
3995
+ pipeline offset is four rather than eight. Adjust the offset
3997
+ tem = plus_constant (GET_MODE (tem), tem,
3998
+ TARGET_THUMB1_ONLY ? -3 : -7);
3999
tem = gen_rtx_MINUS (GET_MODE (tem),
4001
gen_rtx_SYMBOL_REF (Pmode,
4002
Index: gcc/config/arm/arm.md
4003
===================================================================
4004
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_8_3_release)
4005
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_8-branch)
4006
@@ -7630,12 +7630,13 @@
4008
(define_insn "*arm_cmpdi_unsigned"
4009
[(set (reg:CC_CZ CC_REGNUM)
4010
- (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "r")
4011
- (match_operand:DI 1 "arm_di_operand" "rDi")))]
4012
+ (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "r,r")
4013
+ (match_operand:DI 1 "arm_di_operand" "rDi,rDi")))]
4015
"cmp\\t%R0, %R1\;it eq\;cmpeq\\t%Q0, %Q1"
4016
[(set_attr "conds" "set")
4017
- (set_attr "length" "8")]
4018
+ (set_attr "arch" "a,t2")
4019
+ (set_attr "length" "8,10")]
4022
(define_insn "*arm_cmpdi_zero"
4023
Index: gcc/config/arm/t-rtems-eabi
4024
===================================================================
4025
--- a/src/gcc/config/arm/t-rtems-eabi (.../tags/gcc_4_8_3_release)
4026
+++ b/src/gcc/config/arm/t-rtems-eabi (.../branches/gcc-4_8-branch)
4028
# Custom RTEMS EABI multilibs
4030
-MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon mfloat-abi=hard
4031
-MULTILIB_DIRNAMES = thumb armv6-m armv7-a armv7-r armv7-m neon hard
4032
+MULTILIB_OPTIONS = mbig-endian mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon/mfpu=vfpv3-d16/mfpu=fpv4-sp-d16 mfloat-abi=hard
4033
+MULTILIB_DIRNAMES = eb thumb armv6-m armv7-a armv7-r armv7-m neon vfpv3-d16 fpv4-sp-d16 hard
4035
# Enumeration of multilibs
4037
MULTILIB_EXCEPTIONS =
4038
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
4039
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=neon
4040
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
4041
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=vfpv3-d16
4042
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4043
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfpu=fpv4-sp-d16
4044
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m/mfloat-abi=hard
4045
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv6-m
4046
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
4047
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=neon
4048
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
4049
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=vfpv3-d16
4050
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
4051
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfpu=fpv4-sp-d16
4052
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a/mfloat-abi=hard
4053
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-a
4054
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
4055
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=neon
4056
+# MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
4057
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=vfpv3-d16
4058
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
4059
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfpu=fpv4-sp-d16
4060
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r/mfloat-abi=hard
4061
+# MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-r
4062
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
4063
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=neon
4064
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
4065
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=vfpv3-d16
4066
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4067
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfpu=fpv4-sp-d16
4068
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m/mfloat-abi=hard
4069
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/march=armv7-m
4070
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=neon/mfloat-abi=hard
4071
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=neon
4072
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=vfpv3-d16/mfloat-abi=hard
4073
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=vfpv3-d16
4074
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=fpv4-sp-d16/mfloat-abi=hard
4075
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfpu=fpv4-sp-d16
4076
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb/mfloat-abi=hard
4077
+MULTILIB_EXCEPTIONS += mbig-endian/mthumb
4078
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=neon/mfloat-abi=hard
4079
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=neon
4080
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
4081
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=vfpv3-d16
4082
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4083
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfpu=fpv4-sp-d16
4084
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m/mfloat-abi=hard
4085
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv6-m
4086
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=neon/mfloat-abi=hard
4087
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=neon
4088
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
4089
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=vfpv3-d16
4090
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
4091
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfpu=fpv4-sp-d16
4092
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a/mfloat-abi=hard
4093
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-a
4094
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=neon/mfloat-abi=hard
4095
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=neon
4096
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
4097
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=vfpv3-d16
4098
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
4099
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfpu=fpv4-sp-d16
4100
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r/mfloat-abi=hard
4101
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-r
4102
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=neon/mfloat-abi=hard
4103
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=neon
4104
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
4105
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=vfpv3-d16
4106
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4107
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfpu=fpv4-sp-d16
4108
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m/mfloat-abi=hard
4109
+MULTILIB_EXCEPTIONS += mbig-endian/march=armv7-m
4110
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=neon/mfloat-abi=hard
4111
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=neon
4112
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=vfpv3-d16/mfloat-abi=hard
4113
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=vfpv3-d16
4114
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=fpv4-sp-d16/mfloat-abi=hard
4115
+MULTILIB_EXCEPTIONS += mbig-endian/mfpu=fpv4-sp-d16
4116
+MULTILIB_EXCEPTIONS += mbig-endian/mfloat-abi=hard
4117
+MULTILIB_EXCEPTIONS += mbig-endian
4118
MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
4119
MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon
4120
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
4121
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=vfpv3-d16
4122
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4123
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=fpv4-sp-d16
4124
MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfloat-abi=hard
4125
# MULTILIB_EXCEPTIONS += mthumb/march=armv6-m
4126
# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
4127
MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon
4128
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
4129
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=vfpv3-d16
4130
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
4131
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=fpv4-sp-d16
4132
MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfloat-abi=hard
4133
# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a
4134
MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
4135
MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon
4136
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
4137
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=vfpv3-d16
4138
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
4139
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=fpv4-sp-d16
4140
MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfloat-abi=hard
4141
# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r
4142
MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
4143
MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon
4144
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
4145
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=vfpv3-d16
4146
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4147
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=fpv4-sp-d16
4148
MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfloat-abi=hard
4149
# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m
4150
MULTILIB_EXCEPTIONS += mthumb/mfpu=neon/mfloat-abi=hard
4151
MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
4152
+MULTILIB_EXCEPTIONS += mthumb/mfpu=vfpv3-d16/mfloat-abi=hard
4153
+MULTILIB_EXCEPTIONS += mthumb/mfpu=vfpv3-d16
4154
+MULTILIB_EXCEPTIONS += mthumb/mfpu=fpv4-sp-d16/mfloat-abi=hard
4155
+MULTILIB_EXCEPTIONS += mthumb/mfpu=fpv4-sp-d16
4156
MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=hard
4157
# MULTILIB_EXCEPTIONS += mthumb
4158
MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon/mfloat-abi=hard
4159
MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon
4160
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
4161
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=vfpv3-d16
4162
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4163
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=fpv4-sp-d16
4164
MULTILIB_EXCEPTIONS += march=armv6-m/mfloat-abi=hard
4165
MULTILIB_EXCEPTIONS += march=armv6-m
4166
MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon/mfloat-abi=hard
4167
MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon
4168
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
4169
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=vfpv3-d16
4170
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
4171
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=fpv4-sp-d16
4172
MULTILIB_EXCEPTIONS += march=armv7-a/mfloat-abi=hard
4173
MULTILIB_EXCEPTIONS += march=armv7-a
4174
MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon/mfloat-abi=hard
4175
MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon
4176
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
4177
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=vfpv3-d16
4178
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
4179
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=fpv4-sp-d16
4180
MULTILIB_EXCEPTIONS += march=armv7-r/mfloat-abi=hard
4181
MULTILIB_EXCEPTIONS += march=armv7-r
4182
MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon/mfloat-abi=hard
4183
MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon
4184
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
4185
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=vfpv3-d16
4186
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
4187
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=fpv4-sp-d16
4188
MULTILIB_EXCEPTIONS += march=armv7-m/mfloat-abi=hard
4189
MULTILIB_EXCEPTIONS += march=armv7-m
4190
MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
4191
MULTILIB_EXCEPTIONS += mfpu=neon
4192
+MULTILIB_EXCEPTIONS += mfpu=vfpv3-d16/mfloat-abi=hard
4193
+MULTILIB_EXCEPTIONS += mfpu=vfpv3-d16
4194
+MULTILIB_EXCEPTIONS += mfpu=fpv4-sp-d16/mfloat-abi=hard
4195
+MULTILIB_EXCEPTIONS += mfpu=fpv4-sp-d16
4196
MULTILIB_EXCEPTIONS += mfloat-abi=hard
4197
Index: libobjc/encoding.c
4198
===================================================================
4199
--- a/src/libobjc/encoding.c (.../tags/gcc_4_8_3_release)
4200
+++ b/src/libobjc/encoding.c (.../branches/gcc-4_8-branch)
4202
? MAX (MAX (COMPUTED, SPECIFIED), 64) \
4203
: MAX (COMPUTED, SPECIFIED));})
4205
+#define rs6000_special_adjust_field_align_p(FIELD, COMPUTED) \
4206
+ (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE)
4208
/* Skip a variable name, enclosed in quotes ("). */
4210
Index: libobjc/ChangeLog
4211
===================================================================
4212
--- a/src/libobjc/ChangeLog (.../tags/gcc_4_8_3_release)
4213
+++ b/src/libobjc/ChangeLog (.../branches/gcc-4_8-branch)
4215
+2014-07-27 Ulrich Weigand <uweigand@de.ibm.com>
4218
+ * encoding.c (rs6000_special_adjust_field_align_p): Use definition
4219
+ that matches the 4.8 branch ABI.
4221
+2014-07-27 Alan Modra <amodra@gmail.com>
4222
+ Matthias Klose <doko@ubuntu.com>
4226
+ * encoding.c: Define rs6000_special_adjust_field_align_p.
4228
2014-05-22 Release Manager
4230
* GCC 4.8.3 released.
4231
Index: libgfortran/intrinsics/ctime.c
4232
===================================================================
4233
--- a/src/libgfortran/intrinsics/ctime.c (.../tags/gcc_4_8_3_release)
4234
+++ b/src/libgfortran/intrinsics/ctime.c (.../branches/gcc-4_8-branch)
4239
-/* strftime-like function that fills a C string with %c format which
4240
- is identical to ctime in the default locale. As ctime and ctime_r
4241
- are poorly specified and their usage not recommended, the
4242
- implementation instead uses strftime. */
4243
+/* Maximum space a ctime-like string might need. A "normal" ctime
4244
+ string is 26 bytes, and in our case 24 bytes as we don't include
4245
+ the trailing newline and null. However, the longest possible year
4246
+ number is -2,147,481,748 (1900 - 2,147,483,648, since tm_year is a
4247
+ 32-bit signed integer) so an extra 7 bytes are needed. */
4248
+#define CTIME_BUFSZ 31
4251
-strctime (char *s, size_t max, const time_t *timep)
4253
+/* Thread-safe ctime-like function that fills a Fortran
4254
+ string. ctime_r is a portability headache and marked as obsolescent
4255
+ in POSIX 2008, which recommends strftime in its place. However,
4256
+ strftime(..., "%c",...) doesn't produce ctime-like output on
4257
+ MinGW, so do it manually with snprintf. */
4260
+gf_ctime (char *s, size_t max, const time_t timev)
4264
+ char buf[CTIME_BUFSZ + 1];
4265
/* Some targets provide a localtime_r based on a draft of the POSIX
4266
standard where the return type is int rather than the
4267
standardized struct tm*. */
4268
- __builtin_choose_expr (__builtin_classify_type (localtime_r (timep, <m))
4269
+ __builtin_choose_expr (__builtin_classify_type (localtime_r (&timev, <m))
4271
- failed = localtime_r (timep, <m) == NULL,
4272
- failed = localtime_r (timep, <m) != 0);
4273
+ failed = localtime_r (&timev, <m) == NULL,
4274
+ failed = localtime_r (&timev, <m) != 0);
4277
- return strftime (s, max, "%c", <m);
4279
+ int n = snprintf (buf, sizeof (buf),
4280
+ "%3.3s %3.3s%3d %.2d:%.2d:%.2d %d",
4281
+ "SunMonTueWedThuFriSat" + ltm.tm_wday * 3,
4282
+ "JanFebMarAprMayJunJulAugSepOctNovDec" + ltm.tm_mon * 3,
4283
+ ltm.tm_mday, ltm.tm_hour, ltm.tm_min, ltm.tm_sec,
4284
+ 1900 + ltm.tm_year);
4287
+ if ((size_t) n <= max)
4289
+ cf_strcpy (s, max, buf);
4293
+ memset (s, ' ', max);
4297
-/* In the default locale, the date and time representation fits in 26
4298
- bytes. However, other locales might need more space. */
4301
extern void fdate (char **, gfc_charlen_type *);
4302
export_proto(fdate);
4304
fdate (char ** date, gfc_charlen_type * date_len)
4306
time_t now = time(NULL);
4307
- *date = xmalloc (CSZ);
4308
- *date_len = strctime (*date, CSZ, &now);
4309
+ *date = xmalloc (CTIME_BUFSZ);
4310
+ *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
4315
fdate_sub (char * date, gfc_charlen_type date_len)
4317
time_t now = time(NULL);
4318
- char *s = xmalloc (date_len + 1);
4319
- size_t n = strctime (s, date_len + 1, &now);
4320
- fstrcpy (date, date_len, s, n);
4322
+ gf_ctime (date, date_len, now);
4327
PREFIX(ctime) (char ** date, gfc_charlen_type * date_len, GFC_INTEGER_8 t)
4330
- *date = xmalloc (CSZ);
4331
- *date_len = strctime (*date, CSZ, &now);
4332
+ *date = xmalloc (CTIME_BUFSZ);
4333
+ *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
4338
ctime_sub (GFC_INTEGER_8 * t, char * date, gfc_charlen_type date_len)
4341
- char *s = xmalloc (date_len + 1);
4342
- size_t n = strctime (s, date_len + 1, &now);
4343
- fstrcpy (date, date_len, s, n);
4345
+ gf_ctime (date, date_len, now);
4347
Index: libgfortran/ChangeLog
4348
===================================================================
4349
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_8_3_release)
4350
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_8-branch)
4352
+2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
4354
+ Backport from mainline
4355
+ PR libfortran/61310
4356
+ * intrinsics/ctime.c (strctime): Rename to gf_ctime, use snprintf
4357
+ instead of strftime.
4358
+ (fdate): Use gf_ctime.
4359
+ (fdate_sub): Likewise.
4360
+ (ctime): Likewise.
4361
+ (ctime_sub): Likewise.
4363
+2014-05-25 Janne Blomqvist <jb@gcc.gnu.org>
4365
+ Backport from trunk.
4366
+ PR libfortran/61187
4367
+ * io/unix.c (raw_close): Check if s->fd is -1.
4368
+ (fd_to_stream): Check return value of fstat(), handle error.
4370
2014-05-22 Release Manager
4372
* GCC 4.8.3 released.
4373
Index: libgfortran/io/unix.c
4374
===================================================================
4375
--- a/src/libgfortran/io/unix.c (.../tags/gcc_4_8_3_release)
4376
+++ b/src/libgfortran/io/unix.c (.../branches/gcc-4_8-branch)
4381
- if (s->fd != STDOUT_FILENO
4384
+ else if (s->fd != STDOUT_FILENO
4385
&& s->fd != STDERR_FILENO
4386
&& s->fd != STDIN_FILENO)
4387
retval = close (s->fd);
4388
@@ -983,7 +985,15 @@
4390
/* Get the current length of the file. */
4392
- fstat (fd, &statbuf);
4393
+ if (fstat (fd, &statbuf) == -1)
4395
+ s->st_dev = s->st_ino = -1;
4396
+ s->file_length = 0;
4397
+ if (errno == EBADF)
4400
+ return (stream *) s;
4403
s->st_dev = statbuf.st_dev;
4404
s->st_ino = statbuf.st_ino;
4406
===================================================================
4407
--- a/src/. (.../tags/gcc_4_8_3_release)
4408
+++ b/src/. (.../branches/gcc-4_8-branch)
4410
Property changes on: .
4411
___________________________________________________________________
4412
Modified: svn:mergeinfo
4413
Merged /trunk:r211733