# DP: updates from the 6 branch upto 20170510 (r247831). last_update() { cat > ${dir}LAST_UPDATED + + Backported from mainline + 2017-04-11 Jakub Jelinek + + PR libgomp/80394 + * testsuite/libgomp.c/pr80394.c: New test. + + 2017-03-30 Jakub Jelinek + + * env.c (initialize_env): Initialize stacksize to 0. + + 2017-03-08 Jakub Jelinek + + PR c/79940 + * testsuite/libgomp.c/pr79940.c: New test. + +2017-01-10 Thomas Schwinge + + Backport trunk r239125: + 2016-08-04 Thomas Schwinge + + * testsuite/libgomp.oacc-c-c++-common/crash-1.c: Make it a "link" + test, and don't hardcode -O0. + + Backport trunk r239086: + 2016-08-03 Nathan Sidwell + + * testsuite/libgomp.oacc-c-c++-common/crash-1.c: New. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c =================================================================== --- a/src/libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c (.../tags/gcc_6_3_0_release) +++ b/src/libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,27 @@ +/* { dg-do link } */ + +/* For -O0, ICEd in nvptx backend due to unexpected frame size. */ +#pragma acc routine worker +void +worker_matmul (int *c, int i) +{ + int j; + +#pragma acc loop + for (j = 0; j < 4; j++) + c[j] = j; +} + + +int +main () +{ + int c[4]; + +#pragma acc parallel + { + worker_matmul (c, 0); + } + + return 0; +} Index: libgomp/testsuite/libgomp.c/pr79940.c =================================================================== --- a/src/libgomp/testsuite/libgomp.c/pr79940.c (.../tags/gcc_6_3_0_release) +++ b/src/libgomp/testsuite/libgomp.c/pr79940.c (.../branches/gcc-6-branch) @@ -0,0 +1,47 @@ +/* PR c/79940 */ + +int +main () +{ + int i, j, l, m; + int a[10000], b[10000], c[10000]; + for (i = 0; i < 10000; i++) + { + a[i] = i; + b[i] = i & 31; + } +#pragma omp parallel shared(a, b, c) +#pragma omp single +#pragma omp taskloop shared(a, b, c) + for (i = 0; i < 10000; i++) + c[i] = a[i] + b[i]; +#pragma omp parallel +#pragma omp single + { + #pragma omp taskloop shared(a, b, c) lastprivate (i) + for (i = 0; i < 10000; i++) + c[i] += a[i] + b[i]; + l = i; + } +#pragma omp parallel +#pragma omp single +#pragma omp taskloop shared(a, b, c) collapse(2) + for (i = 0; i < 100; i++) + for (j = 0; j < 100; j++) + c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j]; +#pragma omp parallel +#pragma omp single + { + #pragma omp taskloop shared(a, b, c) lastprivate (i, j) + for (i = 0; i < 100; i++) + for (j = 0; j < 100; j++) + c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j]; + m = i * 100 + j; + } + for (i = 0; i < 10000; i++) + if (a[i] != i || b[i] != (i & 31) || c[i] != 4 * i + 4 * (i & 31)) + __builtin_abort (); + if (l != 10000 || m != 10100) + __builtin_abort (); + return 0; +} Index: libgomp/testsuite/libgomp.c/pr80394.c =================================================================== --- a/src/libgomp/testsuite/libgomp.c/pr80394.c (.../tags/gcc_6_3_0_release) +++ b/src/libgomp/testsuite/libgomp.c/pr80394.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* PR libgomp/80394 */ + +int +main () +{ + int x = 0; + #pragma omp parallel shared(x) + #pragma omp single + { + #pragma omp task depend(inout: x) + { + for (int i = 0; i < 100000; i++) + asm volatile ("" : : : "memory"); + x += 5; + } + #pragma omp task if (0) depend(inout: x) + ; + if (x != 5) + __builtin_abort (); + } + return 0; +} Index: libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc =================================================================== --- a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc (.../tags/gcc_6_3_0_release) +++ b/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc (.../branches/gcc-6-branch) @@ -21,11 +21,6 @@ #ifdef _FILE_OFFSET_BITS #undef _FILE_OFFSET_BITS #endif -#if SANITIZER_FREEBSD -#define _WANT_RTENTRY -#include -#include -#endif #include #include #include @@ -411,6 +406,7 @@ unsigned struct_input_absinfo_sz = sizeof(struct input_absinfo); unsigned struct_input_id_sz = sizeof(struct input_id); unsigned struct_mtpos_sz = sizeof(struct mtpos); + unsigned struct_rtentry_sz = sizeof(struct rtentry); unsigned struct_termio_sz = sizeof(struct termio); unsigned struct_vt_consize_sz = sizeof(struct vt_consize); unsigned struct_vt_sizes_sz = sizeof(struct vt_sizes); @@ -430,7 +426,6 @@ unsigned struct_midi_info_sz = sizeof(struct midi_info); unsigned struct_mtget_sz = sizeof(struct mtget); unsigned struct_mtop_sz = sizeof(struct mtop); - unsigned struct_rtentry_sz = sizeof(struct rtentry); unsigned struct_sbi_instrument_sz = sizeof(struct sbi_instrument); unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec); unsigned struct_synth_info_sz = sizeof(struct synth_info); Index: libsanitizer/ChangeLog =================================================================== --- a/src/libsanitizer/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/libsanitizer/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,12 @@ +2017-02-17 Andreas Tobler + + Backported from mainline + 2017-02-16 Andreas Tobler + + PR sanitizer/79562 + * sanitizer_common/sanitizer_platform_limits_posix.cc: Cherry-pick + upstream r294806. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libstdc++-v3/configure =================================================================== --- a/src/libstdc++-v3/configure (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/configure (.../branches/gcc-6-branch) @@ -18385,6 +18385,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS #include #undef isnan namespace std { Index: libstdc++-v3/python/libstdcxx/v6/xmethods.py =================================================================== --- a/src/libstdc++-v3/python/libstdcxx/v6/xmethods.py (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/python/libstdcxx/v6/xmethods.py (.../branches/gcc-6-branch) @@ -565,8 +565,14 @@ # Xmethods for std::unique_ptr class UniquePtrGetWorker(gdb.xmethod.XMethodWorker): + "Implements std::unique_ptr::get() and std::unique_ptr::operator->()" + def __init__(self, elem_type): - self._elem_type = elem_type + self._is_array = elem_type.code == gdb.TYPE_CODE_ARRAY + if self._is_array: + self._elem_type = elem_type.target() + else: + self._elem_type = elem_type def get_arg_types(self): return None @@ -574,10 +580,16 @@ def get_result_type(self, obj): return self._elem_type.pointer() + def _supports(self, method_name): + "operator-> is not supported for unique_ptr" + return method_name == 'get' or not self._is_array + def __call__(self, obj): return obj['_M_t']['_M_head_impl'] class UniquePtrDerefWorker(UniquePtrGetWorker): + "Implements std::unique_ptr::operator*()" + def __init__(self, elem_type): UniquePtrGetWorker.__init__(self, elem_type) @@ -584,9 +596,32 @@ def get_result_type(self, obj): return self._elem_type + def _supports(self, method_name): + "operator* is not supported for unique_ptr" + return not self._is_array + def __call__(self, obj): return UniquePtrGetWorker.__call__(self, obj).dereference() +class UniquePtrSubscriptWorker(UniquePtrGetWorker): + "Implements std::unique_ptr::operator[](size_t)" + + def __init__(self, elem_type): + UniquePtrGetWorker.__init__(self, elem_type) + + def get_arg_types(self): + return get_std_size_type() + + def get_result_type(self, obj, index): + return self._elem_type + + def _supports(self, method_name): + "operator[] is only supported for unique_ptr" + return self._is_array + + def __call__(self, obj, index): + return UniquePtrGetWorker.__call__(self, obj)[index] + class UniquePtrMethodsMatcher(gdb.xmethod.XMethodMatcher): def __init__(self): gdb.xmethod.XMethodMatcher.__init__(self, @@ -595,6 +630,7 @@ 'get': LibStdCxxXMethod('get', UniquePtrGetWorker), 'operator->': LibStdCxxXMethod('operator->', UniquePtrGetWorker), 'operator*': LibStdCxxXMethod('operator*', UniquePtrDerefWorker), + 'operator[]': LibStdCxxXMethod('operator[]', UniquePtrSubscriptWorker), } self.methods = [self._method_dict[m] for m in self._method_dict] @@ -604,6 +640,112 @@ method = self._method_dict.get(method_name) if method is None or not method.enabled: return None + worker = method.worker_class(class_type.template_argument(0)) + if worker._supports(method_name): + return worker + return None + +# Xmethods for std::shared_ptr + +class SharedPtrGetWorker(gdb.xmethod.XMethodWorker): + "Implements std::shared_ptr::get() and std::shared_ptr::operator->()" + + def __init__(self, elem_type): + self._is_array = elem_type.code == gdb.TYPE_CODE_ARRAY + if self._is_array: + self._elem_type = elem_type.target() + else: + self._elem_type = elem_type + + def get_arg_types(self): + return None + + def get_result_type(self, obj): + return self._elem_type.pointer() + + def __call__(self, obj): + return obj['_M_ptr'] + +class SharedPtrDerefWorker(SharedPtrGetWorker): + "Implements std::shared_ptr::operator*()" + + def __init__(self, elem_type): + SharedPtrGetWorker.__init__(self, elem_type) + + def get_result_type(self, obj): + return self._elem_type + + def __call__(self, obj): + return SharedPtrGetWorker.__call__(self, obj).dereference() + +class SharedPtrSubscriptWorker(SharedPtrGetWorker): + "Implements std::shared_ptr::operator[](size_t)" + + def __init__(self, elem_type): + SharedPtrGetWorker.__init__(self, elem_type) + + def get_arg_types(self): + return get_std_size_type() + + def get_result_type(self, obj, index): + return self._elem_type + + def __call__(self, obj, index): + # Check bounds if _elem_type is an array of known bound + m = re.match('.*\[(\d+)]$', str(self._elem_type)) + if m and index >= int(m.group(1)): + raise IndexError('shared_ptr<%s> index "%d" should not be >= %d.' % + (self._elem_type, int(index), int(m.group(1)))) + return SharedPtrGetWorker.__call__(self, obj)[index] + +class SharedPtrUseCountWorker(gdb.xmethod.XMethodWorker): + "Implements std::shared_ptr::use_count()" + + def __init__(self, elem_type): + SharedPtrUseCountWorker.__init__(self, elem_type) + + def get_arg_types(self): + return None + + def get_result_type(self, obj): + return gdb.lookup_type('long') + + def __call__(self, obj): + refcounts = ['_M_refcount']['_M_pi'] + return refcounts['_M_use_count'] if refcounts else 0 + +class SharedPtrUniqueWorker(SharedPtrUseCountWorker): + "Implements std::shared_ptr::unique()" + + def __init__(self, elem_type): + SharedPtrUseCountWorker.__init__(self, elem_type) + + def get_result_type(self, obj): + return gdb.lookup_type('bool') + + def __call__(self, obj): + return SharedPtrUseCountWorker.__call__(self, obj) == 1 + +class SharedPtrMethodsMatcher(gdb.xmethod.XMethodMatcher): + def __init__(self): + gdb.xmethod.XMethodMatcher.__init__(self, + matcher_name_prefix + 'shared_ptr') + self._method_dict = { + 'get': LibStdCxxXMethod('get', SharedPtrGetWorker), + 'operator->': LibStdCxxXMethod('operator->', SharedPtrGetWorker), + 'operator*': LibStdCxxXMethod('operator*', SharedPtrDerefWorker), + 'operator[]': LibStdCxxXMethod('operator[]', SharedPtrSubscriptWorker), + 'use_count': LibStdCxxXMethod('use_count', SharedPtrUseCountWorker), + 'unique': LibStdCxxXMethod('unique', SharedPtrUniqueWorker), + } + self.methods = [self._method_dict[m] for m in self._method_dict] + + def match(self, class_type, method_name): + if not re.match('^std::shared_ptr<.*>$', class_type.tag): + return None + method = self._method_dict.get(method_name) + if method is None or not method.enabled: + return None return method.worker_class(class_type.template_argument(0)) def register_libstdcxx_xmethods(locus): @@ -629,3 +771,4 @@ gdb.xmethod.register_xmethod_matcher( locus, AssociativeContainerMethodsMatcher('unordered_multimap')) gdb.xmethod.register_xmethod_matcher(locus, UniquePtrMethodsMatcher()) + gdb.xmethod.register_xmethod_matcher(locus, SharedPtrMethodsMatcher()) Index: libstdc++-v3/python/libstdcxx/v6/printers.py =================================================================== --- a/src/libstdc++-v3/python/libstdcxx/v6/printers.py (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/python/libstdcxx/v6/printers.py (.../branches/gcc-6-branch) @@ -127,8 +127,8 @@ def to_string (self): v = self.val['_M_t']['_M_head_impl'] - return ('std::unique_ptr<%s> containing %s' % (str(v.type.target()), - str(v))) + return 'std::unique_ptr<%s> containing %s' % (str(v.type.target()), + str(v)) def get_value_from_list_node(node): """Returns the value held in an _List_node<_Val>""" @@ -191,10 +191,12 @@ self.typename = typename def to_string(self): + if not self.val['_M_node']: + return 'non-dereferenceable iterator for std::list' nodetype = find_type(self.val.type, '_Node') nodetype = nodetype.strip_typedefs().pointer() node = self.val['_M_node'].cast(nodetype).dereference() - return get_value_from_list_node(node) + return str(get_value_from_list_node(node)) class StdSlistPrinter: "Print a __gnu_cxx::slist" @@ -237,9 +239,11 @@ self.val = val def to_string(self): + if not self.val['_M_node']: + return 'non-dereferenceable iterator for __gnu_cxx::slist' nodetype = find_type(self.val.type, '_Node') nodetype = nodetype.strip_typedefs().pointer() - return self.val['_M_node'].cast(nodetype).dereference()['_M_data'] + return str(self.val['_M_node'].cast(nodetype).dereference()['_M_data']) class StdVectorPrinter: "Print a std::vector" @@ -324,7 +328,9 @@ self.val = val def to_string(self): - return self.val['_M_current'].dereference() + if not self.val['_M_current']: + return 'non-dereferenceable iterator for std::vector' + return str(self.val['_M_current'].dereference()) class StdTuplePrinter: "Print a std::tuple" @@ -419,6 +425,11 @@ return None class RbtreeIterator(Iterator): + """ + Turn an RB-tree-based container (std::map, std::set etc.) into + a Python iterable object. + """ + def __init__(self, rbtree): self.size = rbtree['_M_t']['_M_impl']['_M_node_count'] self.node = rbtree['_M_t']['_M_impl']['_M_header']['_M_left'] @@ -472,7 +483,7 @@ # std::map::iterator), and has nothing to do with the RbtreeIterator # class above. class StdRbtreeIteratorPrinter: - "Print std::map::iterator" + "Print std::map::iterator, std::set::iterator, etc." def __init__ (self, typename, val): self.val = val @@ -481,8 +492,10 @@ self.link_type = nodetype.strip_typedefs().pointer() def to_string (self): + if not self.val['_M_node']: + return 'non-dereferenceable iterator for associative container' node = self.val['_M_node'].cast(self.link_type).dereference() - return get_value_from_Rb_tree_node(node) + return str(get_value_from_Rb_tree_node(node)) class StdDebugIteratorPrinter: "Print a debug enabled version of an iterator" @@ -494,7 +507,7 @@ # and return the wrapped iterator value. def to_string (self): itype = self.val.type.template_argument(0) - return self.val.cast(itype) + return str(self.val.cast(itype)) class StdMapPrinter: "Print a std::map or std::multimap" @@ -687,7 +700,9 @@ self.val = val def to_string(self): - return self.val['_M_cur'].dereference() + if not self.val['_M_cur']: + return 'non-dereferenceable iterator for std::deque' + return str(self.val['_M_cur'].dereference()) class StdStringPrinter: "Print a std::basic_string of some kind" @@ -873,8 +888,8 @@ def to_string(self): if self.val['_M_impl']['_M_head']['_M_next'] == 0: - return 'empty %s' % (self.typename) - return '%s' % (self.typename) + return 'empty %s' % self.typename + return '%s' % self.typename class SingleObjContainerPrinter(object): "Base class for printers of containers of single objects" @@ -975,9 +990,10 @@ def to_string (self): if self.contained_value is None: - return self.typename + " [no contained value]" + return "%s [no contained value]" % self.typename if hasattr (self.visualizer, 'children'): - return self.typename + " containing " + self.visualizer.to_string () + return "%s containing %s" % (self.typename, + self.visualizer.to_string()) return self.typename class StdExpStringViewPrinter: @@ -1133,7 +1149,8 @@ libstdcxx_printer = None class TemplateTypePrinter(object): - r"""A type printer for class templates. + r""" + A type printer for class templates. Recognizes type names that match a regular expression. Replaces them with a formatted string which can use replacement field Index: libstdc++-v3/src/c++11/cxx11-shim_facets.cc =================================================================== --- a/src/libstdc++-v3/src/c++11/cxx11-shim_facets.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/src/c++11/cxx11-shim_facets.cc (.../branches/gcc-6-branch) @@ -226,8 +226,14 @@ namespace // unnamed { + struct __shim_accessor : facet + { + using facet::__shim; // Redeclare protected member as public. + }; + using __shim = __shim_accessor::__shim; + template - struct numpunct_shim : std::numpunct<_CharT>, facet::__shim + struct numpunct_shim : std::numpunct<_CharT>, __shim { typedef typename numpunct<_CharT>::__cache_type __cache_type; @@ -251,7 +257,7 @@ }; template - struct collate_shim : std::collate<_CharT>, facet::__shim + struct collate_shim : std::collate<_CharT>, __shim { typedef basic_string<_CharT> string_type; @@ -276,7 +282,7 @@ }; template - struct time_get_shim : std::time_get<_CharT>, facet::__shim + struct time_get_shim : std::time_get<_CharT>, __shim { typedef typename std::time_get<_CharT>::iter_type iter_type; typedef typename std::time_get<_CharT>::char_type char_type; @@ -330,7 +336,7 @@ }; template - struct moneypunct_shim : std::moneypunct<_CharT, _Intl>, facet::__shim + struct moneypunct_shim : std::moneypunct<_CharT, _Intl>, __shim { typedef typename moneypunct<_CharT, _Intl>::__cache_type __cache_type; @@ -357,7 +363,7 @@ }; template - struct money_get_shim : std::money_get<_CharT>, facet::__shim + struct money_get_shim : std::money_get<_CharT>, __shim { typedef typename std::money_get<_CharT>::iter_type iter_type; typedef typename std::money_get<_CharT>::char_type char_type; @@ -398,7 +404,7 @@ }; template - struct money_put_shim : std::money_put<_CharT>, facet::__shim + struct money_put_shim : std::money_put<_CharT>, __shim { typedef typename std::money_put<_CharT>::iter_type iter_type; typedef typename std::money_put<_CharT>::char_type char_type; @@ -427,7 +433,7 @@ }; template - struct messages_shim : std::messages<_CharT>, facet::__shim + struct messages_shim : std::messages<_CharT>, __shim { typedef messages_base::catalog catalog; typedef basic_string<_CharT> string_type; Index: libstdc++-v3/src/c++11/codecvt.cc =================================================================== --- a/src/libstdc++-v3/src/c++11/codecvt.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/src/c++11/codecvt.cc (.../branches/gcc-6-branch) @@ -1,6 +1,6 @@ // Locale support (codecvt) -*- C++ -*- -// Copyright (C) 2015-2016 Free Software Foundation, Inc. +// Copyright (C) 2015-2017 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -24,7 +24,7 @@ #include #include // std::memcpy, std::memcmp -#include // std::max +#include // std::min #ifdef _GLIBCXX_USE_C99_STDINT_TR1 namespace std _GLIBCXX_VISIBILITY(default) @@ -31,6 +31,20 @@ { _GLIBCXX_BEGIN_NAMESPACE_VERSION + // The standard doesn't define these operators, which is annoying. + static underlying_type::type + to_integer(codecvt_mode m) + { return static_cast::type>(m); } + + static codecvt_mode& operator&=(codecvt_mode& m, codecvt_mode n) + { return m = codecvt_mode(to_integer(m) & to_integer(n)); } + + static codecvt_mode& operator|=(codecvt_mode& m, codecvt_mode n) + { return m = codecvt_mode(to_integer(m) | to_integer(n)); } + + static codecvt_mode operator~(codecvt_mode m) + { return codecvt_mode(~to_integer(m)); } + namespace { // Largest code point that fits in a single UTF-16 code unit. @@ -43,35 +57,142 @@ const char32_t incomplete_mb_character = char32_t(-2); const char32_t invalid_mb_sequence = char32_t(-1); - template + // Utility type for reading and writing code units of type Elem from + // a range defined by a pair of pointers. + template struct range { Elem* next; Elem* end; + // Write a code unit. + range& operator=(Elem e) + { + *next++ = e; + return *this; + } + + // Read the next code unit. Elem operator*() const { return *next; } - range& operator++() { ++next; return *this; } + // Read the Nth code unit. + Elem operator[](size_t n) const { return next[n]; } + // Move to the next code unit. + range& operator++() + { + ++next; + return *this; + } + + // Move to the Nth code unit. + range& operator+=(size_t n) + { + next += n; + return *this; + } + + // The number of code units remaining. size_t size() const { return end - next; } + + // The number of bytes remaining. + size_t nbytes() const { return (const char*)end - (const char*)next; } }; + // This specialization is used when accessing char16_t values through + // pointers to char, which might not be correctly aligned for char16_t. + template + struct range + { + using value_type = typename remove_const::type; + + using char_pointer = typename + conditional::value, const char*, char*>::type; + + char_pointer next; + char_pointer end; + + // Write a code unit. + range& operator=(Elem e) + { + memcpy(next, &e, sizeof(Elem)); + ++*this; + return *this; + } + + // Read the next code unit. + Elem operator*() const + { + value_type e; + memcpy(&e, next, sizeof(Elem)); + return e; + } + + // Read the Nth code unit. + Elem operator[](size_t n) const + { + value_type e; + memcpy(&e, next + n * sizeof(Elem), sizeof(Elem)); + return e; + } + + // Move to the next code unit. + range& operator++() + { + next += sizeof(Elem); + return *this; + } + + // Move to the Nth code unit. + range& operator+=(size_t n) + { + next += n * sizeof(Elem); + return *this; + } + + // The number of code units remaining. + size_t size() const { return nbytes() / sizeof(Elem); } + + // The number of bytes remaining. + size_t nbytes() const { return end - next; } + }; + // Multibyte sequences can have "header" consisting of Byte Order Mark const unsigned char utf8_bom[3] = { 0xEF, 0xBB, 0xBF }; - const unsigned char utf16_bom[4] = { 0xFE, 0xFF }; - const unsigned char utf16le_bom[4] = { 0xFF, 0xFE }; + const unsigned char utf16_bom[2] = { 0xFE, 0xFF }; + const unsigned char utf16le_bom[2] = { 0xFF, 0xFE }; - template - inline bool - write_bom(range& to, const unsigned char (&bom)[N]) + // Write a BOM (space permitting). + template + bool + write_bom(range& to, const unsigned char (&bom)[N]) { - if (to.size() < N) + static_assert( (N / sizeof(C)) != 0, "" ); + static_assert( (N % sizeof(C)) == 0, "" ); + + if (to.nbytes() < N) return false; memcpy(to.next, bom, N); - to.next += N; + to += (N / sizeof(C)); return true; } + // Try to read a BOM. + template + bool + read_bom(range& from, const unsigned char (&bom)[N]) + { + static_assert( (N / sizeof(C)) != 0, "" ); + static_assert( (N % sizeof(C)) == 0, "" ); + + if (from.nbytes() >= N && !memcmp(from.next, bom, N)) + { + from += (N / sizeof(C)); + return true; + } + return false; + } + // If generate_header is set in mode write out UTF-8 BOM. bool write_utf8_bom(range& to, codecvt_mode mode) @@ -83,32 +204,20 @@ // If generate_header is set in mode write out the UTF-16 BOM indicated // by whether little_endian is set in mode. + template bool - write_utf16_bom(range& to, codecvt_mode mode) + write_utf16_bom(range& to, codecvt_mode mode) { if (mode & generate_header) { - if (!to.size()) - return false; - auto* bom = (mode & little_endian) ? utf16le_bom : utf16_bom; - std::memcpy(to.next, bom, 2); - ++to.next; + if (mode & little_endian) + return write_bom(to, utf16le_bom); + else + return write_bom(to, utf16_bom); } return true; } - template - inline bool - read_bom(range& from, const unsigned char (&bom)[N]) - { - if (from.size() >= N && !memcmp(from.next, bom, N)) - { - from.next += N; - return true; - } - return false; - } - // If consume_header is set in mode update from.next to after any BOM. void read_utf8_bom(range& from, codecvt_mode mode) @@ -117,22 +226,21 @@ read_bom(from, utf8_bom); } - // If consume_header is set in mode update from.next to after any BOM. - // Return little_endian iff the UTF-16LE BOM was present. - codecvt_mode - read_utf16_bom(range& from, codecvt_mode mode) + // If consume_header is not set in mode, no effects. + // Otherwise, if *from.next is a UTF-16 BOM increment from.next and then: + // - if the UTF-16BE BOM was found unset little_endian in mode, or + // - if the UTF-16LE BOM was found set little_endian in mode. + template + void + read_utf16_bom(range& from, codecvt_mode& mode) { - if (mode & consume_header && from.size()) + if (mode & consume_header) { - if (*from.next == 0xFEFF) - ++from.next; - else if (*from.next == 0xFFFE) - { - ++from.next; - return little_endian; - } + if (read_bom(from, utf16_bom)) + mode &= ~little_endian; + else if (read_bom(from, utf16le_bom)) + mode |= little_endian; } - return {}; } // Read a codepoint from a UTF-8 multibyte sequence. @@ -144,11 +252,11 @@ const size_t avail = from.size(); if (avail == 0) return incomplete_mb_character; - unsigned char c1 = from.next[0]; + unsigned char c1 = from[0]; // https://en.wikipedia.org/wiki/UTF-8#Sample_code if (c1 < 0x80) { - ++from.next; + ++from; return c1; } else if (c1 < 0xC2) // continuation or overlong 2-byte sequence @@ -157,12 +265,12 @@ { if (avail < 2) return incomplete_mb_character; - unsigned char c2 = from.next[1]; + unsigned char c2 = from[1]; if ((c2 & 0xC0) != 0x80) return invalid_mb_sequence; char32_t c = (c1 << 6) + c2 - 0x3080; if (c <= maxcode) - from.next += 2; + from += 2; return c; } else if (c1 < 0xF0) // 3-byte sequence @@ -169,17 +277,17 @@ { if (avail < 3) return incomplete_mb_character; - unsigned char c2 = from.next[1]; + unsigned char c2 = from[1]; if ((c2 & 0xC0) != 0x80) return invalid_mb_sequence; if (c1 == 0xE0 && c2 < 0xA0) // overlong return invalid_mb_sequence; - unsigned char c3 = from.next[2]; + unsigned char c3 = from[2]; if ((c3 & 0xC0) != 0x80) return invalid_mb_sequence; char32_t c = (c1 << 12) + (c2 << 6) + c3 - 0xE2080; if (c <= maxcode) - from.next += 3; + from += 3; return c; } else if (c1 < 0xF5) // 4-byte sequence @@ -186,7 +294,7 @@ { if (avail < 4) return incomplete_mb_character; - unsigned char c2 = from.next[1]; + unsigned char c2 = from[1]; if ((c2 & 0xC0) != 0x80) return invalid_mb_sequence; if (c1 == 0xF0 && c2 < 0x90) // overlong @@ -193,15 +301,15 @@ return invalid_mb_sequence; if (c1 == 0xF4 && c2 >= 0x90) // > U+10FFFF return invalid_mb_sequence; - unsigned char c3 = from.next[2]; + unsigned char c3 = from[2]; if ((c3 & 0xC0) != 0x80) return invalid_mb_sequence; - unsigned char c4 = from.next[3]; + unsigned char c4 = from[3]; if ((c4 & 0xC0) != 0x80) return invalid_mb_sequence; char32_t c = (c1 << 18) + (c2 << 12) + (c3 << 6) + c4 - 0x3C82080; if (c <= maxcode) - from.next += 4; + from += 4; return c; } else // > U+10FFFF @@ -215,31 +323,31 @@ { if (to.size() < 1) return false; - *to.next++ = code_point; + to = code_point; } else if (code_point <= 0x7FF) { if (to.size() < 2) return false; - *to.next++ = (code_point >> 6) + 0xC0; - *to.next++ = (code_point & 0x3F) + 0x80; + to = (code_point >> 6) + 0xC0; + to = (code_point & 0x3F) + 0x80; } else if (code_point <= 0xFFFF) { if (to.size() < 3) return false; - *to.next++ = (code_point >> 12) + 0xE0; - *to.next++ = ((code_point >> 6) & 0x3F) + 0x80; - *to.next++ = (code_point & 0x3F) + 0x80; + to = (code_point >> 12) + 0xE0; + to = ((code_point >> 6) & 0x3F) + 0x80; + to = (code_point & 0x3F) + 0x80; } else if (code_point <= 0x10FFFF) { if (to.size() < 4) return false; - *to.next++ = (code_point >> 18) + 0xF0; - *to.next++ = ((code_point >> 12) & 0x3F) + 0x80; - *to.next++ = ((code_point >> 6) & 0x3F) + 0x80; - *to.next++ = (code_point & 0x3F) + 0x80; + to = (code_point >> 18) + 0xF0; + to = ((code_point >> 12) & 0x3F) + 0x80; + to = ((code_point >> 6) & 0x3F) + 0x80; + to = (code_point & 0x3F) + 0x80; } else return false; @@ -280,47 +388,47 @@ // The sequence's endianness is indicated by (mode & little_endian). // Updates from.next if the codepoint is not greater than maxcode. // Returns invalid_mb_sequence, incomplete_mb_character or the code point. - char32_t - read_utf16_code_point(range& from, unsigned long maxcode, - codecvt_mode mode) - { - const size_t avail = from.size(); - if (avail == 0) - return incomplete_mb_character; - int inc = 1; - char32_t c = adjust_byte_order(from.next[0], mode); - if (is_high_surrogate(c)) - { - if (avail < 2) - return incomplete_mb_character; - const char16_t c2 = adjust_byte_order(from.next[1], mode); - if (is_low_surrogate(c2)) - { - c = surrogate_pair_to_code_point(c, c2); - inc = 2; - } - else - return invalid_mb_sequence; - } - else if (is_low_surrogate(c)) - return invalid_mb_sequence; - if (c <= maxcode) - from.next += inc; - return c; - } + template + char32_t + read_utf16_code_point(range& from, + unsigned long maxcode, codecvt_mode mode) + { + const size_t avail = from.size(); + if (avail == 0) + return incomplete_mb_character; + int inc = 1; + char32_t c = adjust_byte_order(from[0], mode); + if (is_high_surrogate(c)) + { + if (avail < 2) + return incomplete_mb_character; + const char16_t c2 = adjust_byte_order(from[1], mode); + if (is_low_surrogate(c2)) + { + c = surrogate_pair_to_code_point(c, c2); + inc = 2; + } + else + return invalid_mb_sequence; + } + else if (is_low_surrogate(c)) + return invalid_mb_sequence; + if (c <= maxcode) + from += inc; + return c; + } - template + template bool - write_utf16_code_point(range& to, char32_t codepoint, codecvt_mode mode) + write_utf16_code_point(range& to, char32_t codepoint, codecvt_mode mode) { static_assert(sizeof(C) >= 2, "a code unit must be at least 16-bit"); - if (codepoint < max_single_utf16_unit) + if (codepoint <= max_single_utf16_unit) { if (to.size() > 0) { - *to.next = adjust_byte_order(codepoint, mode); - ++to.next; + to = adjust_byte_order(codepoint, mode); return true; } } @@ -330,9 +438,8 @@ const char32_t LEAD_OFFSET = 0xD800 - (0x10000 >> 10); char16_t lead = LEAD_OFFSET + (codepoint >> 10); char16_t trail = 0xDC00 + (codepoint & 0x3FF); - to.next[0] = adjust_byte_order(lead, mode); - to.next[1] = adjust_byte_order(trail, mode); - to.next += 2; + to = adjust_byte_order(lead, mode); + to = adjust_byte_order(trail, mode); return true; } return false; @@ -351,7 +458,7 @@ return codecvt_base::partial; if (codepoint > maxcode) return codecvt_base::error; - *to.next++ = codepoint; + to = codepoint; } return from.size() ? codecvt_base::partial : codecvt_base::ok; } @@ -365,12 +472,12 @@ return codecvt_base::partial; while (from.size()) { - const char32_t c = from.next[0]; + const char32_t c = from[0]; if (c > maxcode) return codecvt_base::error; if (!write_utf8_code_point(to, c)) return codecvt_base::partial; - ++from.next; + ++from; } return codecvt_base::ok; } @@ -377,11 +484,10 @@ // utf16 -> ucs4 codecvt_base::result - ucs4_in(range& from, range& to, + ucs4_in(range& from, range& to, unsigned long maxcode = max_code_point, codecvt_mode mode = {}) { - if (read_utf16_bom(from, mode) == little_endian) - mode = codecvt_mode(mode & little_endian); + read_utf16_bom(from, mode); while (from.size() && to.size()) { const char32_t codepoint = read_utf16_code_point(from, maxcode, mode); @@ -389,7 +495,7 @@ return codecvt_base::partial; if (codepoint > maxcode) return codecvt_base::error; - *to.next++ = codepoint; + to = codepoint; } return from.size() ? codecvt_base::partial : codecvt_base::ok; } @@ -396,7 +502,7 @@ // ucs4 -> utf16 codecvt_base::result - ucs4_out(range& from, range& to, + ucs4_out(range& from, range& to, unsigned long maxcode = max_code_point, codecvt_mode mode = {}) { if (!write_utf16_bom(to, mode)) @@ -403,34 +509,43 @@ return codecvt_base::partial; while (from.size()) { - const char32_t c = from.next[0]; + const char32_t c = from[0]; if (c > maxcode) return codecvt_base::error; if (!write_utf16_code_point(to, c, mode)) return codecvt_base::partial; - ++from.next; + ++from; } return codecvt_base::ok; } - // utf8 -> utf16 + // Flag indicating whether to process UTF-16 or UCS2 + enum class surrogates { allowed, disallowed }; + + // utf8 -> utf16 (or utf8 -> ucs2 if s == surrogates::disallowed) template codecvt_base::result utf16_in(range& from, range& to, - unsigned long maxcode = max_code_point, codecvt_mode mode = {}) + unsigned long maxcode = max_code_point, codecvt_mode mode = {}, + surrogates s = surrogates::allowed) { read_utf8_bom(from, mode); while (from.size() && to.size()) { - const char* const first = from.next; + auto orig = from; const char32_t codepoint = read_utf8_code_point(from, maxcode); if (codepoint == incomplete_mb_character) - return codecvt_base::partial; + { + if (s == surrogates::allowed) + return codecvt_base::partial; + else + return codecvt_base::error; // No surrogates in UCS2 + } if (codepoint > maxcode) return codecvt_base::error; if (!write_utf16_code_point(to, codepoint, mode)) { - from.next = first; + from = orig; // rewind to previous position return codecvt_base::partial; } } @@ -437,24 +552,28 @@ return codecvt_base::ok; } - // utf16 -> utf8 + // utf16 -> utf8 (or ucs2 -> utf8 if s == surrogates::disallowed) template codecvt_base::result utf16_out(range& from, range& to, - unsigned long maxcode = max_code_point, codecvt_mode mode = {}) + unsigned long maxcode = max_code_point, codecvt_mode mode = {}, + surrogates s = surrogates::allowed) { if (!write_utf8_bom(to, mode)) return codecvt_base::partial; while (from.size()) { - char32_t c = from.next[0]; + char32_t c = from[0]; int inc = 1; if (is_high_surrogate(c)) { + if (s == surrogates::disallowed) + return codecvt_base::error; // No surrogates in UCS-2 + if (from.size() < 2) return codecvt_base::ok; // stop converting at this point - const char32_t c2 = from.next[1]; + const char32_t c2 = from[1]; if (is_low_surrogate(c2)) { c = surrogate_pair_to_code_point(c, c2); @@ -469,7 +588,7 @@ return codecvt_base::error; if (!write_utf8_code_point(to, c)) return codecvt_base::partial; - from.next += inc; + from += inc; } return codecvt_base::ok; } @@ -492,7 +611,7 @@ ++count; } if (count+1 == max) // take one more character if it fits in a single unit - read_utf8_code_point(from, std::max(max_single_utf16_unit, maxcode)); + read_utf8_code_point(from, std::min(max_single_utf16_unit, maxcode)); return from.next; } @@ -501,7 +620,9 @@ ucs2_in(range& from, range& to, char32_t maxcode = max_code_point, codecvt_mode mode = {}) { - return utf16_in(from, to, std::max(max_single_utf16_unit, maxcode), mode); + // UCS-2 only supports characters in the BMP, i.e. one UTF-16 code unit: + maxcode = std::min(max_single_utf16_unit, maxcode); + return utf16_in(from, to, maxcode, mode, surrogates::disallowed); } // ucs2 -> utf8 @@ -509,12 +630,14 @@ ucs2_out(range& from, range& to, char32_t maxcode = max_code_point, codecvt_mode mode = {}) { - return utf16_out(from, to, std::max(max_single_utf16_unit, maxcode), mode); + // UCS-2 only supports characters in the BMP, i.e. one UTF-16 code unit: + maxcode = std::min(max_single_utf16_unit, maxcode); + return utf16_out(from, to, maxcode, mode, surrogates::disallowed); } // ucs2 -> utf16 codecvt_base::result - ucs2_out(range& from, range& to, + ucs2_out(range& from, range& to, char32_t maxcode = max_code_point, codecvt_mode mode = {}) { if (!write_utf16_bom(to, mode)) @@ -521,13 +644,13 @@ return codecvt_base::partial; while (from.size() && to.size()) { - char16_t c = from.next[0]; + char16_t c = from[0]; if (is_high_surrogate(c)) return codecvt_base::error; if (c > maxcode) return codecvt_base::error; - *to.next++ = adjust_byte_order(c, mode); - ++from.next; + to = adjust_byte_order(c, mode); + ++from; } return from.size() == 0 ? codecvt_base::ok : codecvt_base::partial; } @@ -534,36 +657,35 @@ // utf16 -> ucs2 codecvt_base::result - ucs2_in(range& from, range& to, + ucs2_in(range& from, range& to, char32_t maxcode = max_code_point, codecvt_mode mode = {}) { - if (read_utf16_bom(from, mode) == little_endian) - mode = codecvt_mode(mode & little_endian); - maxcode = std::max(max_single_utf16_unit, maxcode); + read_utf16_bom(from, mode); + // UCS-2 only supports characters in the BMP, i.e. one UTF-16 code unit: + maxcode = std::min(max_single_utf16_unit, maxcode); while (from.size() && to.size()) { const char32_t c = read_utf16_code_point(from, maxcode, mode); if (c == incomplete_mb_character) - return codecvt_base::partial; + return codecvt_base::error; // UCS-2 only supports single units. if (c > maxcode) return codecvt_base::error; - *to.next++ = c; + to = c; } return from.size() == 0 ? codecvt_base::ok : codecvt_base::partial; } const char16_t* - ucs2_span(const char16_t* begin, const char16_t* end, size_t max, + ucs2_span(range& from, size_t max, char32_t maxcode, codecvt_mode mode) { - range from{ begin, end }; - if (read_utf16_bom(from, mode) == little_endian) - mode = codecvt_mode(mode & little_endian); - maxcode = std::max(max_single_utf16_unit, maxcode); + read_utf16_bom(from, mode); + // UCS-2 only supports characters in the BMP, i.e. one UTF-16 code unit: + maxcode = std::min(max_single_utf16_unit, maxcode); char32_t c = 0; while (max-- && c <= maxcode) c = read_utf16_code_point(from, maxcode, mode); - return from.next; + return reinterpret_cast(from.next); } const char* @@ -572,7 +694,8 @@ { range from{ begin, end }; read_utf8_bom(from, mode); - maxcode = std::max(max_single_utf16_unit, maxcode); + // UCS-2 only supports characters in the BMP, i.e. one UTF-16 code unit: + maxcode = std::min(max_single_utf16_unit, maxcode); char32_t c = 0; while (max-- && c <= maxcode) c = read_utf8_code_point(from, maxcode); @@ -594,16 +717,14 @@ // return pos such that [begin,pos) is valid UCS-4 string no longer than max const char16_t* - ucs4_span(const char16_t* begin, const char16_t* end, size_t max, + ucs4_span(range& from, size_t max, char32_t maxcode = max_code_point, codecvt_mode mode = {}) { - range from{ begin, end }; - if (read_utf16_bom(from, mode) == little_endian) - mode = codecvt_mode(mode & little_endian); + read_utf16_bom(from, mode); char32_t c = 0; while (max-- && c <= maxcode) c = read_utf16_code_point(from, maxcode, mode); - return from.next; + return reinterpret_cast(from.next); } } @@ -661,7 +782,7 @@ int codecvt::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool codecvt::do_always_noconv() const throw() @@ -679,9 +800,9 @@ int codecvt::do_max_length() const throw() { - // Any valid UTF-8 sequence of 3 bytes fits in a single 16-bit code unit, - // whereas 4 byte sequences require two 16-bit code units. - return 3; + // A single character (one or two UTF-16 code units) requires + // up to four UTF-8 code units. + return 4; } // Define members of codecvt specialization. @@ -732,7 +853,7 @@ int codecvt::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool codecvt::do_always_noconv() const throw() @@ -749,7 +870,11 @@ int codecvt::do_max_length() const throw() -{ return 4; } +{ + // A single character (one UTF-32 code unit) requires + // up to 4 UTF-8 code units. + return 4; +} // Define members of codecvt_utf8 base class implementation. // Converts from UTF-8 to UCS-2. @@ -801,7 +926,7 @@ int __codecvt_utf8_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_base::do_always_noconv() const throw() @@ -818,7 +943,14 @@ int __codecvt_utf8_base::do_max_length() const throw() -{ return 3; } +{ + // A single UCS-2 character requires up to three UTF-8 code units. + // (UCS-2 cannot represent characters that use four UTF-8 code units). + int max = 3; + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; +} // Define members of codecvt_utf8 base class implementation. // Converts from UTF-8 to UTF-32 (aka UCS-4). @@ -866,7 +998,7 @@ int __codecvt_utf8_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_base::do_always_noconv() const throw() @@ -883,9 +1015,22 @@ int __codecvt_utf8_base::do_max_length() const throw() -{ return 4; } +{ + // A single UCS-4 character requires up to four UTF-8 code units. + int max = 4; + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; +} #ifdef _GLIBCXX_USE_WCHAR_T + +#if __SIZEOF_WCHAR_T__ == 2 +static_assert(sizeof(wchar_t) == sizeof(char16_t), ""); +#elif __SIZEOF_WCHAR_T__ == 4 +static_assert(sizeof(wchar_t) == sizeof(char32_t), ""); +#endif + // Define members of codecvt_utf8 base class implementation. // Converts from UTF-8 to UCS-2 or UCS-4 depending on sizeof(wchar_t). @@ -958,7 +1103,7 @@ int __codecvt_utf8_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_base::do_always_noconv() const throw() @@ -981,8 +1126,17 @@ int __codecvt_utf8_base::do_max_length() const throw() -{ return 4; } +{ +#if __SIZEOF_WCHAR_T__ == 2 + int max = 3; // See __codecvt_utf8_base::do_max_length() +#else + int max = 4; // See __codecvt_utf8_base::do_max_length() #endif + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; +} +#endif // Define members of codecvt_utf16 base class implementation. // Converts from UTF-16 to UCS-2. @@ -997,10 +1151,7 @@ extern_type*& __to_next) const { range from{ __from, __from_end }; - range to{ - reinterpret_cast(__to), - reinterpret_cast(__to_end) - }; + range to{ __to, __to_end }; auto res = ucs2_out(from, to, _M_maxcode, _M_mode); __from_next = from.next; __to_next = reinterpret_cast(to.next); @@ -1023,20 +1174,19 @@ intern_type* __to, intern_type* __to_end, intern_type*& __to_next) const { - range from{ - reinterpret_cast(__from), - reinterpret_cast(__from_end) - }; + range from{ __from, __from_end }; range to{ __to, __to_end }; auto res = ucs2_in(from, to, _M_maxcode, _M_mode); __from_next = reinterpret_cast(from.next); __to_next = to.next; + if (res == codecvt_base::ok && __from_next != __from_end) + res = codecvt_base::error; return res; } int __codecvt_utf16_base::do_encoding() const throw() -{ return 1; } +{ return 0; } // UTF-16 is not a fixed-width encoding bool __codecvt_utf16_base::do_always_noconv() const throw() @@ -1047,15 +1197,21 @@ do_length(state_type&, const extern_type* __from, const extern_type* __end, size_t __max) const { - auto next = reinterpret_cast(__from); - next = ucs2_span(next, reinterpret_cast(__end), __max, - _M_maxcode, _M_mode); + range from{ __from, __end }; + const char16_t* next = ucs2_span(from, __max, _M_maxcode, _M_mode); return reinterpret_cast(next) - __from; } int __codecvt_utf16_base::do_max_length() const throw() -{ return 3; } +{ + // A single UCS-2 character requires one UTF-16 code unit (so two chars). + // (UCS-2 cannot represent characters that use multiple UTF-16 code units). + int max = 2; + if (_M_mode & consume_header) + max += sizeof(utf16_bom); + return max; +} // Define members of codecvt_utf16 base class implementation. // Converts from UTF-16 to UTF-32 (aka UCS-4). @@ -1070,10 +1226,7 @@ extern_type*& __to_next) const { range from{ __from, __from_end }; - range to{ - reinterpret_cast(__to), - reinterpret_cast(__to_end) - }; + range to{ __to, __to_end }; auto res = ucs4_out(from, to, _M_maxcode, _M_mode); __from_next = from.next; __to_next = reinterpret_cast(to.next); @@ -1096,20 +1249,19 @@ intern_type* __to, intern_type* __to_end, intern_type*& __to_next) const { - range from{ - reinterpret_cast(__from), - reinterpret_cast(__from_end) - }; + range from{ __from, __from_end }; range to{ __to, __to_end }; auto res = ucs4_in(from, to, _M_maxcode, _M_mode); __from_next = reinterpret_cast(from.next); __to_next = to.next; + if (res == codecvt_base::ok && __from_next != __from_end) + res = codecvt_base::error; return res; } int __codecvt_utf16_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-16 is not a fixed-width encoding bool __codecvt_utf16_base::do_always_noconv() const throw() @@ -1120,15 +1272,21 @@ do_length(state_type&, const extern_type* __from, const extern_type* __end, size_t __max) const { - auto next = reinterpret_cast(__from); - next = ucs4_span(next, reinterpret_cast(__end), __max, - _M_maxcode, _M_mode); + range from{ __from, __end }; + const char16_t* next = ucs4_span(from, __max, _M_maxcode, _M_mode); return reinterpret_cast(next) - __from; } int __codecvt_utf16_base::do_max_length() const throw() -{ return 4; } +{ + // A single UCS-4 character requires one or two UTF-16 code units + // (so up to four chars). + int max = 4; + if (_M_mode & consume_header) + max += sizeof(utf16_bom); + return max; +} #ifdef _GLIBCXX_USE_WCHAR_T // Define members of codecvt_utf16 base class implementation. @@ -1143,17 +1301,17 @@ extern_type* __to, extern_type* __to_end, extern_type*& __to_next) const { - range to{ __to, __to_end }; + range to{ __to, __to_end }; #if __SIZEOF_WCHAR_T__ == 2 range from{ reinterpret_cast(__from), - reinterpret_cast(__from_end) + reinterpret_cast(__from_end), }; auto res = ucs2_out(from, to, _M_maxcode, _M_mode); #elif __SIZEOF_WCHAR_T__ == 4 range from{ reinterpret_cast(__from), - reinterpret_cast(__from_end) + reinterpret_cast(__from_end), }; auto res = ucs4_out(from, to, _M_maxcode, _M_mode); #else @@ -1160,7 +1318,7 @@ return codecvt_base::error; #endif __from_next = reinterpret_cast(from.next); - __to_next = to.next; + __to_next = reinterpret_cast(to.next); return res; } @@ -1180,30 +1338,32 @@ intern_type* __to, intern_type* __to_end, intern_type*& __to_next) const { - range from{ __from, __from_end }; + range from{ __from, __from_end }; #if __SIZEOF_WCHAR_T__ == 2 range to{ reinterpret_cast(__to), - reinterpret_cast(__to_end) + reinterpret_cast(__to_end), }; auto res = ucs2_in(from, to, _M_maxcode, _M_mode); #elif __SIZEOF_WCHAR_T__ == 4 range to{ reinterpret_cast(__to), - reinterpret_cast(__to_end) + reinterpret_cast(__to_end), }; auto res = ucs4_in(from, to, _M_maxcode, _M_mode); #else return codecvt_base::error; #endif - __from_next = from.next; + __from_next = reinterpret_cast(from.next); __to_next = reinterpret_cast(to.next); + if (res == codecvt_base::ok && __from_next != __from_end) + res = codecvt_base::error; return res; } int __codecvt_utf16_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-16 is not a fixed-width encoding bool __codecvt_utf16_base::do_always_noconv() const throw() @@ -1214,13 +1374,11 @@ do_length(state_type&, const extern_type* __from, const extern_type* __end, size_t __max) const { - auto next = reinterpret_cast(__from); + range from{ __from, __end }; #if __SIZEOF_WCHAR_T__ == 2 - next = ucs2_span(next, reinterpret_cast(__end), __max, - _M_maxcode, _M_mode); + const char16_t* next = ucs2_span(from, __max, _M_maxcode, _M_mode); #elif __SIZEOF_WCHAR_T__ == 4 - next = ucs4_span(next, reinterpret_cast(__end), __max, - _M_maxcode, _M_mode); + const char16_t* next = ucs4_span(from, __max, _M_maxcode, _M_mode); #endif return reinterpret_cast(next) - __from; } @@ -1227,8 +1385,17 @@ int __codecvt_utf16_base::do_max_length() const throw() -{ return 4; } +{ +#if __SIZEOF_WCHAR_T__ == 2 + int max = 2; // See __codecvt_utf16_base::do_max_length() +#else + int max = 4; // See __codecvt_utf16_base::do_max_length() #endif + if (_M_mode & consume_header) + max += sizeof(utf16_bom); + return max; +} +#endif // Define members of codecvt_utf8_utf16 base class implementation. // Converts from UTF-8 to UTF-16. @@ -1280,7 +1447,7 @@ int __codecvt_utf8_utf16_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_utf16_base::do_always_noconv() const throw() @@ -1298,9 +1465,12 @@ int __codecvt_utf8_utf16_base::do_max_length() const throw() { - // Any valid UTF-8 sequence of 3 bytes fits in a single 16-bit code unit, - // whereas 4 byte sequences require two 16-bit code units. - return 3; + // A single character can be 1 or 2 UTF-16 code units, + // requiring up to 4 UTF-8 code units. + int max = 4; + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; } // Define members of codecvt_utf8_utf16 base class implementation. @@ -1341,7 +1511,11 @@ { range from{ __from, __from_end }; range to{ __to, __to_end }; - auto res = utf16_in(from, to, _M_maxcode, _M_mode); + codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); +#if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ + mode = codecvt_mode(mode | little_endian); +#endif + auto res = utf16_in(from, to, _M_maxcode, mode); __from_next = from.next; __to_next = to.next; return res; @@ -1349,7 +1523,7 @@ int __codecvt_utf8_utf16_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_utf16_base::do_always_noconv() const throw() @@ -1367,9 +1541,12 @@ int __codecvt_utf8_utf16_base::do_max_length() const throw() { - // Any valid UTF-8 sequence of 3 bytes fits in a single 16-bit code unit, - // whereas 4 byte sequences require two 16-bit code units. - return 3; + // A single character can be 1 or 2 UTF-16 code units, + // requiring up to 4 UTF-8 code units. + int max = 4; + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; } #ifdef _GLIBCXX_USE_WCHAR_T @@ -1411,7 +1588,11 @@ { range from{ __from, __from_end }; range to{ __to, __to_end }; - auto res = utf16_in(from, to, _M_maxcode, _M_mode); + codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); +#if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ + mode = codecvt_mode(mode | little_endian); +#endif + auto res = utf16_in(from, to, _M_maxcode, mode); __from_next = from.next; __to_next = to.next; return res; @@ -1419,7 +1600,7 @@ int __codecvt_utf8_utf16_base::do_encoding() const throw() -{ return 0; } +{ return 0; } // UTF-8 is not a fixed-width encoding bool __codecvt_utf8_utf16_base::do_always_noconv() const throw() @@ -1437,9 +1618,12 @@ int __codecvt_utf8_utf16_base::do_max_length() const throw() { - // Any valid UTF-8 sequence of 3 bytes fits in a single 16-bit code unit, - // whereas 4 byte sequences require two 16-bit code units. - return 3; + // A single character can be 1 or 2 UTF-16 code units, + // requiring up to 4 UTF-8 code units. + int max = 4; + if (_M_mode & consume_header) + max += sizeof(utf8_bom); + return max; } #endif Index: libstdc++-v3/doc/xml/faq.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/faq.xml (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/doc/xml/faq.xml (.../branches/gcc-6-branch) @@ -1230,7 +1230,7 @@ details than for C, and most CPU designers (for good reasons elaborated below) have not stepped up to publish C++ ABIs. Such an ABI has been defined for the Itanium architecture (see - C++ + C++ ABI for Itanium) and that is used by G++ and other compilers as the de facto standard ABI on many common architectures (including x86). G++ can also use the ARM architecture's EABI, for embedded Index: libstdc++-v3/doc/xml/manual/abi.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/doc/xml/manual/abi.xml (.../branches/gcc-6-branch) @@ -42,7 +42,7 @@ virtual functions, etc. These details are defined as the compiler Application Binary Interface, or ABI. The GNU C++ compiler uses an industry-standard C++ ABI starting with version 3. Details can be - found in the ABI + found in the ABI specification. @@ -736,7 +736,7 @@ the way the compiler deals with this class in by-value return statements or parameters: instead of passing instances of this class in registers, the compiler will be forced to use memory. See the -section on Function +section on Function Calling Conventions and APIs of the C++ ABI documentation for further details. @@ -1094,7 +1094,7 @@ <link xmlns:xlink="http://www.w3.org/1999/xlink" - xlink:href="http://www.codesourcery.com/cxx-abi/"> + xlink:href="http://mentorembedded.github.io/cxx-abi/"> C++ ABI Summary </link> Index: libstdc++-v3/include/std/tuple =================================================================== --- a/src/libstdc++-v3/include/std/tuple (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/std/tuple (.../branches/gcc-6-branch) @@ -923,7 +923,9 @@ enable_if<_TMC::template _MoveConstructibleTuple<_U1, _U2>() && _TMC::template - _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), + _ImplicitlyMoveConvertibleTuple<_U1, _U2>() + && !is_same::type, + allocator_arg_t>::value, bool>::type = true> constexpr tuple(_U1&& __a1, _U2&& __a2) : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } @@ -932,7 +934,9 @@ enable_if<_TMC::template _MoveConstructibleTuple<_U1, _U2>() && !_TMC::template - _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), + _ImplicitlyMoveConvertibleTuple<_U1, _U2>() + && !is_same::type, + allocator_arg_t>::value, bool>::type = false> explicit constexpr tuple(_U1&& __a1, _U2&& __a2) : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } Index: libstdc++-v3/include/std/thread =================================================================== --- a/src/libstdc++-v3/include/std/thread (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/std/thread (.../branches/gcc-6-branch) @@ -119,6 +119,7 @@ // 2097. packaged_task constructors should be constrained thread(thread&) = delete; thread(const thread&) = delete; + thread(const thread&&) = delete; thread(thread&& __t) noexcept { swap(__t); } Index: libstdc++-v3/include/std/type_traits =================================================================== --- a/src/libstdc++-v3/include/std/type_traits (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/std/type_traits (.../branches/gcc-6-branch) @@ -2576,12 +2576,6 @@ using __detected_or_t = typename __detected_or<_Default, _Op, _Args...>::type; - // _Op<_Args...> if that is a valid type, otherwise _Default<_Args...>. - template class _Default, - template class _Op, typename... _Args> - using __detected_or_t_ = - __detected_or_t<_Default<_Args...>, _Op, _Args...>; - /// @} group metaprogramming /** Index: libstdc++-v3/include/std/memory =================================================================== --- a/src/libstdc++-v3/include/std/memory (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/std/memory (.../branches/gcc-6-branch) @@ -133,9 +133,9 @@ inline void declare_reachable(void*) { } -template - inline T* - undeclare_reachable(T* __p) { return __p; } +template + inline _Tp* + undeclare_reachable(_Tp* __p) { return __p; } inline void declare_no_pointers(char*, size_t) { } Index: libstdc++-v3/include/std/atomic =================================================================== --- a/src/libstdc++-v3/include/std/atomic (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/std/atomic (.../branches/gcc-6-branch) @@ -230,35 +230,39 @@ _Tp load(memory_order __m = memory_order_seq_cst) const noexcept - { - _Tp tmp; - __atomic_load(&_M_i, &tmp, __m); - return tmp; + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); + __atomic_load(&_M_i, __ptr, __m); + return *__ptr; } _Tp load(memory_order __m = memory_order_seq_cst) const volatile noexcept - { - _Tp tmp; - __atomic_load(&_M_i, &tmp, __m); - return tmp; + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); + __atomic_load(&_M_i, __ptr, __m); + return *__ptr; } _Tp exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept - { - _Tp tmp; - __atomic_exchange(&_M_i, &__i, &tmp, __m); - return tmp; + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); + __atomic_exchange(&_M_i, &__i, __ptr, __m); + return *__ptr; } _Tp exchange(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept - { - _Tp tmp; - __atomic_exchange(&_M_i, &__i, &tmp, __m); - return tmp; + { + alignas(_Tp) unsigned char __buf[sizeof(_Tp)]; + _Tp* __ptr = reinterpret_cast<_Tp*>(__buf); + __atomic_exchange(&_M_i, &__i, __ptr, __m); + return *__ptr; } bool Index: libstdc++-v3/include/experimental/any =================================================================== --- a/src/libstdc++-v3/include/experimental/any (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/experimental/any (.../branches/gcc-6-branch) @@ -425,7 +425,10 @@ template void* __any_caster(const any* __any) { - if (__any->_M_manager != &any::_Manager>::_S_manage) + struct _None { }; + using _Up = decay_t<_Tp>; + using _Vp = conditional_t::value, _Up, _None>; + if (__any->_M_manager != &any::_Manager<_Vp>::_S_manage) return nullptr; any::_Arg __arg; __any->_M_manager(any::_Op_access, __any, &__arg); Index: libstdc++-v3/include/experimental/iterator =================================================================== --- a/src/libstdc++-v3/include/experimental/iterator (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/experimental/iterator (.../branches/gcc-6-branch) @@ -39,10 +39,9 @@ # include #else +#include +#include #include -#include -#include -#include namespace std _GLIBCXX_VISIBILITY(default) { Index: libstdc++-v3/include/experimental/memory =================================================================== --- a/src/libstdc++-v3/include/experimental/memory (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/experimental/memory (.../branches/gcc-6-branch) @@ -124,9 +124,9 @@ constexpr __pointer release() noexcept { - __pointer tmp = get(); + __pointer __tmp = get(); reset(); - return tmp; + return __tmp; } constexpr void Index: libstdc++-v3/include/experimental/array =================================================================== --- a/src/libstdc++-v3/include/experimental/array (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/experimental/array (.../branches/gcc-6-branch) @@ -69,9 +69,9 @@ template constexpr auto make_array(_Types&&... __t) - -> array, - common_type_t<_Types...>, - _Dest>, + -> array, + common_type<_Types...>, + common_type<_Dest>>::type, sizeof...(_Types)> { static_assert(__or_< @@ -80,13 +80,12 @@ ::value, "make_array cannot be used without an explicit target type " "if any of the types given is a reference_wrapper"); - return {{forward<_Types>(__t)...}}; + return {{ std::forward<_Types>(__t)... }}; } template constexpr array, _Nm> - __to_array(_Tp (&__a)[_Nm], - index_sequence<_Idx...>) + __to_array(_Tp (&__a)[_Nm], index_sequence<_Idx...>) { return {{__a[_Idx]...}}; } @@ -94,6 +93,7 @@ template constexpr array, _Nm> to_array(_Tp (&__a)[_Nm]) + noexcept(is_nothrow_constructible, _Tp&>::value) { return __to_array(__a, make_index_sequence<_Nm>{}); } Index: libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp =================================================================== --- a/src/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp (.../branches/gcc-6-branch) @@ -103,7 +103,6 @@ swap_value_imp(it.m_p_e, r_new_val, s_no_throw_copies_ind); fix(it.m_p_e); PB_DS_ASSERT_VALID((*this)) - _GLIBCXX_DEBUG_ASSERT(is_heap()); } PB_DS_CLASS_T_DEC Index: libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp =================================================================== --- a/src/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp (.../branches/gcc-6-branch) @@ -266,20 +266,14 @@ const entry_cmp& m_cmp = static_cast(*this); entry_pointer end = m_a_entries + m_size; std::make_heap(m_a_entries, end, m_cmp); - _GLIBCXX_DEBUG_ASSERT(is_heap()); } void push_heap() { - if (!is_heap()) - make_heap(); - else - { - const entry_cmp& m_cmp = static_cast(*this); - entry_pointer end = m_a_entries + m_size; - std::push_heap(m_a_entries, end, m_cmp); - } + const entry_cmp& m_cmp = static_cast(*this); + entry_pointer end = m_a_entries + m_size; + std::push_heap(m_a_entries, end, m_cmp); } void @@ -290,15 +284,6 @@ std::pop_heap(m_a_entries, end, m_cmp); } - bool - is_heap() - { - const entry_cmp& m_cmp = static_cast(*this); - entry_pointer end = m_a_entries + m_size; - bool p = std::__is_heap(m_a_entries, end, m_cmp); - return p; - } - #ifdef _GLIBCXX_DEBUG void assert_valid(const char*, int) const; Index: libstdc++-v3/include/ext/pointer.h =================================================================== --- a/src/libstdc++-v3/include/ext/pointer.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/ext/pointer.h (.../branches/gcc-6-branch) @@ -449,9 +449,9 @@ inline _Pointer_adapter operator++(int) { - _Pointer_adapter tmp(*this); + _Pointer_adapter __tmp(*this); _Storage_policy::set(_Storage_policy::get() + 1); - return tmp; + return __tmp; } inline _Pointer_adapter& @@ -464,9 +464,9 @@ inline _Pointer_adapter operator--(int) { - _Pointer_adapter tmp(*this); + _Pointer_adapter __tmp(*this); _Storage_policy::set(_Storage_policy::get() - 1); - return tmp; + return __tmp; } }; // class _Pointer_adapter Index: libstdc++-v3/include/bits/stl_map.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_map.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/stl_map.h (.../branches/gcc-6-branch) @@ -1129,7 +1129,7 @@ template auto count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) - { return _M_t._M_find_tr(__x) == _M_t.end() ? 0 : 1; } + { return _M_t._M_count_tr(__x); } #endif //@} @@ -1153,8 +1153,8 @@ template auto lower_bound(const _Kt& __x) - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) + { return iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -1178,8 +1178,8 @@ template auto lower_bound(const _Kt& __x) const - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) + { return const_iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -1198,8 +1198,8 @@ template auto upper_bound(const _Kt& __x) - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -1218,8 +1218,8 @@ template auto upper_bound(const _Kt& __x) const - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) + { return const_iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -1247,8 +1247,8 @@ template auto equal_range(const _Kt& __x) - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } #endif //@} @@ -1276,8 +1276,12 @@ template auto equal_range(const _Kt& __x) const - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair( + _M_t._M_equal_range_tr(__x))) + { + return pair( + _M_t._M_equal_range_tr(__x)); + } #endif //@} Index: libstdc++-v3/include/bits/locale_classes.h =================================================================== --- a/src/libstdc++-v3/include/bits/locale_classes.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/locale_classes.h (.../branches/gcc-6-branch) @@ -461,10 +461,11 @@ } } - class __shim; - const facet* _M_sso_shim(const id*) const; const facet* _M_cow_shim(const id*) const; + + protected: + class __shim; // For internal use only. }; Index: libstdc++-v3/include/bits/stl_set.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_set.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/stl_set.h (.../branches/gcc-6-branch) @@ -670,7 +670,7 @@ auto count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) - { return _M_t._M_find_tr(__x) == _M_t.end() ? 0 : 1; } + { return _M_t._M_count_tr(__x); } #endif //@} @@ -735,14 +735,14 @@ template auto lower_bound(const _Kt& __x) - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) + { return iterator(_M_t._M_lower_bound_tr(__x)); } template auto lower_bound(const _Kt& __x) const - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) + { return const_iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -765,14 +765,14 @@ template auto upper_bound(const _Kt& __x) - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return iterator(_M_t._M_upper_bound_tr(__x)); } template auto upper_bound(const _Kt& __x) const - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return const_iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -804,14 +804,14 @@ template auto equal_range(const _Kt& __x) - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } template auto equal_range(const _Kt& __x) const - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } #endif //@} Index: libstdc++-v3/include/bits/locale_conv.h =================================================================== --- a/src/libstdc++-v3/include/bits/locale_conv.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/locale_conv.h (.../branches/gcc-6-branch) @@ -81,7 +81,10 @@ && (__outstr.size() - __outchars) < __maxlen); if (__result == codecvt_base::error) - return false; + { + __count = __next - __first; + return false; + } if (__result == codecvt_base::noconv) { Index: libstdc++-v3/include/bits/basic_string.h =================================================================== --- a/src/libstdc++-v3/include/bits/basic_string.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/basic_string.h (.../branches/gcc-6-branch) @@ -570,10 +570,25 @@ if (!_Alloc_traits::_S_always_equal() && !_M_is_local() && _M_get_allocator() != __str._M_get_allocator()) { - // replacement allocator cannot free existing storage - _M_destroy(_M_allocated_capacity); - _M_data(_M_local_data()); - _M_set_length(0); + // Propagating allocator cannot free existing storage so must + // deallocate it before replacing current allocator. + if (__str.size() <= _S_local_capacity) + { + _M_destroy(_M_allocated_capacity); + _M_data(_M_local_data()); + _M_set_length(0); + } + else + { + const auto __len = __str.size(); + auto __alloc = __str._M_get_allocator(); + // If this allocation throws there are no effects: + auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1); + _M_destroy(_M_allocated_capacity); + _M_data(__ptr); + _M_capacity(__len); + _M_set_length(__len); + } } std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); } Index: libstdc++-v3/include/bits/stl_multimap.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_multimap.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/stl_multimap.h (.../branches/gcc-6-branch) @@ -822,8 +822,8 @@ template auto lower_bound(const _Kt& __x) - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) + { return iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -847,8 +847,8 @@ template auto lower_bound(const _Kt& __x) const - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) + { return const_iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -867,8 +867,8 @@ template auto upper_bound(const _Kt& __x) - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -887,8 +887,8 @@ template auto upper_bound(const _Kt& __x) const - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) + { return const_iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -914,8 +914,8 @@ template auto equal_range(const _Kt& __x) - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } #endif //@} @@ -941,8 +941,12 @@ template auto equal_range(const _Kt& __x) const - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair( + _M_t._M_equal_range_tr(__x))) + { + return pair( + _M_t._M_equal_range_tr(__x)); + } #endif //@} Index: libstdc++-v3/include/bits/stl_pair.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_pair.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/stl_pair.h (.../branches/gcc-6-branch) @@ -178,6 +178,10 @@ } }; + struct __wrap_nonesuch : std::__nonesuch { + explicit __wrap_nonesuch(const __nonesuch&) = delete; + }; + #endif /** @@ -359,7 +363,7 @@ operator=(typename conditional< __and_, is_copy_assignable<_T2>>::value, - const pair&, const __nonesuch&>::type __p) + const pair&, const __wrap_nonesuch&>::type __p) { first = __p.first; second = __p.second; @@ -370,13 +374,13 @@ operator=(typename conditional< __not_<__and_, is_copy_assignable<_T2>>>::value, - const pair&, const __nonesuch&>::type __p) = delete; + const pair&, const __wrap_nonesuch&>::type __p) = delete; pair& operator=(typename conditional< __and_, is_move_assignable<_T2>>::value, - pair&&, __nonesuch&&>::type __p) + pair&&, __wrap_nonesuch&&>::type __p) noexcept(__and_, is_nothrow_move_assignable<_T2>>::value) { Index: libstdc++-v3/include/bits/ios_base.h =================================================================== --- a/src/libstdc++-v3/include/bits/ios_base.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/ios_base.h (.../branches/gcc-6-branch) @@ -207,12 +207,12 @@ const error_category& iostream_category() noexcept; inline error_code - make_error_code(io_errc e) noexcept - { return error_code(static_cast(e), iostream_category()); } + make_error_code(io_errc __e) noexcept + { return error_code(static_cast(__e), iostream_category()); } inline error_condition - make_error_condition(io_errc e) noexcept - { return error_condition(static_cast(e), iostream_category()); } + make_error_condition(io_errc __e) noexcept + { return error_condition(static_cast(__e), iostream_category()); } #endif // 27.4.2 Class ios_base Index: libstdc++-v3/include/bits/predefined_ops.h =================================================================== --- a/src/libstdc++-v3/include/bits/predefined_ops.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/predefined_ops.h (.../branches/gcc-6-branch) @@ -24,7 +24,7 @@ /** @file predefined_ops.h * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. + * You should not attempt to use it directly. @headername{algorithm} */ #ifndef _GLIBCXX_PREDEFINED_OPS_H @@ -42,6 +42,7 @@ operator()(_Iterator1 __it1, _Iterator2 __it2) const { return *__it1 < *__it2; } }; + _GLIBCXX14_CONSTEXPR inline _Iter_less_iter __iter_less_iter() @@ -53,7 +54,7 @@ bool operator()(_Iterator __it, _Value& __val) const { return *__it < __val; } - }; + }; inline _Iter_less_val __iter_less_val() @@ -69,7 +70,7 @@ bool operator()(_Value& __val, _Iterator __it) const { return __val < *__it; } - }; + }; inline _Val_less_iter __val_less_iter() @@ -85,7 +86,7 @@ bool operator()(_Iterator1 __it1, _Iterator2 __it2) const { return *__it1 == *__it2; } - }; + }; inline _Iter_equal_to_iter __iter_equal_to_iter() @@ -97,7 +98,7 @@ bool operator()(_Iterator __it, _Value& __val) const { return *__it == __val; } - }; + }; inline _Iter_equal_to_val __iter_equal_to_val() @@ -111,7 +112,8 @@ struct _Iter_comp_iter { _Compare _M_comp; - _GLIBCXX14_CONSTEXPR + + explicit _GLIBCXX14_CONSTEXPR _Iter_comp_iter(_Compare __comp) : _M_comp(__comp) { } @@ -134,6 +136,7 @@ { _Compare _M_comp; + explicit _Iter_comp_val(_Compare __comp) : _M_comp(__comp) { } @@ -159,6 +162,7 @@ { _Compare _M_comp; + explicit _Val_comp_iter(_Compare __comp) : _M_comp(__comp) { } @@ -184,6 +188,7 @@ { _Value& _M_value; + explicit _Iter_equals_val(_Value& __value) : _M_value(__value) { } @@ -202,16 +207,17 @@ template struct _Iter_equals_iter { - typename std::iterator_traits<_Iterator1>::reference _M_ref; + _Iterator1 _M_it1; + explicit _Iter_equals_iter(_Iterator1 __it1) - : _M_ref(*__it1) + : _M_it1(__it1) { } template bool operator()(_Iterator2 __it2) - { return *__it2 == _M_ref; } + { return *__it2 == *_M_it1; } }; template @@ -224,6 +230,7 @@ { _Predicate _M_pred; + explicit _Iter_pred(_Predicate __pred) : _M_pred(__pred) { } @@ -264,16 +271,16 @@ struct _Iter_comp_to_iter { _Compare _M_comp; - typename std::iterator_traits<_Iterator1>::reference _M_ref; + _Iterator1 _M_it1; _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) - : _M_comp(__comp), _M_ref(*__it1) + : _M_comp(__comp), _M_it1(__it1) { } template bool operator()(_Iterator2 __it2) - { return bool(_M_comp(*__it2, _M_ref)); } + { return bool(_M_comp(*__it2, *_M_it1)); } }; template @@ -286,6 +293,7 @@ { _Predicate _M_pred; + explicit _Iter_negate(_Predicate __pred) : _M_pred(__pred) { } Index: libstdc++-v3/include/bits/stl_multiset.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_multiset.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/stl_multiset.h (.../branches/gcc-6-branch) @@ -716,14 +716,14 @@ template auto lower_bound(const _Kt& __x) - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) + { return iterator(_M_t._M_lower_bound_tr(__x)); } template auto lower_bound(const _Kt& __x) const - -> decltype(_M_t._M_lower_bound_tr(__x)) - { return _M_t._M_lower_bound_tr(__x); } + -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) + { return iterator(_M_t._M_lower_bound_tr(__x)); } #endif //@} @@ -746,14 +746,14 @@ template auto upper_bound(const _Kt& __x) - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return iterator(_M_t._M_upper_bound_tr(__x)); } template auto upper_bound(const _Kt& __x) const - -> decltype(_M_t._M_upper_bound_tr(__x)) - { return _M_t._M_upper_bound_tr(__x); } + -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) + { return iterator(_M_t._M_upper_bound_tr(__x)); } #endif //@} @@ -785,14 +785,14 @@ template auto equal_range(const _Kt& __x) - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } template auto equal_range(const _Kt& __x) const - -> decltype(_M_t._M_equal_range_tr(__x)) - { return _M_t._M_equal_range_tr(__x); } + -> decltype(pair(_M_t._M_equal_range_tr(__x))) + { return pair(_M_t._M_equal_range_tr(__x)); } #endif //@} Index: libstdc++-v3/include/bits/mask_array.h =================================================================== --- a/src/libstdc++-v3/include/bits/mask_array.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/mask_array.h (.../branches/gcc-6-branch) @@ -136,8 +136,8 @@ }; template - inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& a) - : _M_sz(a._M_sz), _M_mask(a._M_mask), _M_array(a._M_array) {} + inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& __a) + : _M_sz(__a._M_sz), _M_mask(__a._M_mask), _M_array(__a._M_array) {} template inline Index: libstdc++-v3/include/bits/ptr_traits.h =================================================================== --- a/src/libstdc++-v3/include/bits/ptr_traits.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/ptr_traits.h (.../branches/gcc-6-branch) @@ -56,7 +56,7 @@ // Given Template and U return Template, otherwise invalid. template struct __replace_first_arg - { using type = __undefined; }; + { }; template class _Template, typename _Up, typename _Tp, typename... _Types> @@ -84,8 +84,12 @@ template using __difference_type = typename _Tp::difference_type; + template + struct __rebind : __replace_first_arg<_Tp, _Up> { }; + template - using __rebind = typename _Tp::template rebind<_Up>; + struct __rebind<_Tp, _Up, __void_t>> + { using type = typename _Tp::template rebind<_Up>; }; public: /// The pointer type. @@ -93,7 +97,7 @@ /// The type pointed to. using element_type - = __detected_or_t_<__get_first_arg_t, __element_type, _Ptr>; + = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>; /// The type used to represent the difference between two pointers. using difference_type @@ -101,8 +105,7 @@ /// A pointer to a different type. template - using rebind - = __detected_or_t_<__replace_first_arg_t, __rebind, _Ptr, _Up>; + using rebind = typename __rebind<_Ptr, _Up>::type; static _Ptr pointer_to(__make_not_void& __e) @@ -110,8 +113,6 @@ static_assert(!is_same::value, "pointer type defines element_type or is like SomePointer"); - static_assert(!is_same, __undefined>::value, - "pointer type defines rebind or is like SomePointer"); }; /** Index: libstdc++-v3/include/bits/slice_array.h =================================================================== --- a/src/libstdc++-v3/include/bits/slice_array.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/slice_array.h (.../branches/gcc-6-branch) @@ -204,8 +204,8 @@ template inline - slice_array<_Tp>::slice_array(const slice_array<_Tp>& a) - : _M_sz(a._M_sz), _M_stride(a._M_stride), _M_array(a._M_array) {} + slice_array<_Tp>::slice_array(const slice_array<_Tp>& __a) + : _M_sz(__a._M_sz), _M_stride(__a._M_stride), _M_array(__a._M_array) {} // template // inline slice_array<_Tp>::~slice_array () {} Index: libstdc++-v3/include/bits/list.tcc =================================================================== --- a/src/libstdc++-v3/include/bits/list.tcc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/list.tcc (.../branches/gcc-6-branch) @@ -380,26 +380,36 @@ // 300. list::merge() specification incomplete if (this != std::__addressof(__x)) { - _M_check_equal_allocators(__x); + _M_check_equal_allocators(__x); iterator __first1 = begin(); iterator __last1 = end(); iterator __first2 = __x.begin(); iterator __last2 = __x.end(); - while (__first1 != __last1 && __first2 != __last2) - if (*__first2 < *__first1) - { - iterator __next = __first2; - _M_transfer(__first1, __first2, ++__next); - __first2 = __next; - } - else - ++__first1; - if (__first2 != __last2) - _M_transfer(__last1, __first2, __last2); + const size_t __orig_size = __x.size(); + __try { + while (__first1 != __last1 && __first2 != __last2) + if (*__first2 < *__first1) + { + iterator __next = __first2; + _M_transfer(__first1, __first2, ++__next); + __first2 = __next; + } + else + ++__first1; + if (__first2 != __last2) + _M_transfer(__last1, __first2, __last2); - this->_M_inc_size(__x._M_get_size()); - __x._M_set_size(0); + this->_M_inc_size(__x._M_get_size()); + __x._M_set_size(0); + } + __catch(...) + { + const size_t __dist = std::distance(__first2, __last2); + this->_M_inc_size(__orig_size - __dist); + __x._M_set_size(__dist); + __throw_exception_again; + } } } @@ -423,20 +433,31 @@ iterator __last1 = end(); iterator __first2 = __x.begin(); iterator __last2 = __x.end(); - while (__first1 != __last1 && __first2 != __last2) - if (__comp(*__first2, *__first1)) - { - iterator __next = __first2; - _M_transfer(__first1, __first2, ++__next); - __first2 = __next; - } - else - ++__first1; - if (__first2 != __last2) - _M_transfer(__last1, __first2, __last2); + const size_t __orig_size = __x.size(); + __try + { + while (__first1 != __last1 && __first2 != __last2) + if (__comp(*__first2, *__first1)) + { + iterator __next = __first2; + _M_transfer(__first1, __first2, ++__next); + __first2 = __next; + } + else + ++__first1; + if (__first2 != __last2) + _M_transfer(__last1, __first2, __last2); - this->_M_inc_size(__x._M_get_size()); - __x._M_set_size(0); + this->_M_inc_size(__x._M_get_size()); + __x._M_set_size(0); + } + __catch(...) + { + const size_t __dist = std::distance(__first2, __last2); + this->_M_inc_size(__orig_size - __dist); + __x._M_set_size(__dist); + __throw_exception_again; + } } } Index: libstdc++-v3/include/bits/random.tcc =================================================================== --- a/src/libstdc++-v3/include/bits/random.tcc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/random.tcc (.../branches/gcc-6-branch) @@ -3323,18 +3323,23 @@ const size_t __m = std::max(1UL, (__b + __log2r - 1UL) / __log2r); _RealType __ret; - do + _RealType __sum = _RealType(0); + _RealType __tmp = _RealType(1); + for (size_t __k = __m; __k != 0; --__k) { - _RealType __sum = _RealType(0); - _RealType __tmp = _RealType(1); - for (size_t __k = __m; __k != 0; --__k) - { - __sum += _RealType(__urng() - __urng.min()) * __tmp; - __tmp *= __r; - } - __ret = __sum / __tmp; + __sum += _RealType(__urng() - __urng.min()) * __tmp; + __tmp *= __r; } - while (__builtin_expect(__ret >= _RealType(1), 0)); + __ret = __sum / __tmp; + if (__builtin_expect(__ret >= _RealType(1), 0)) + { +#if _GLIBCXX_USE_C99_MATH_TR1 + __ret = std::nextafter(_RealType(1), _RealType(0)); +#else + __ret = _RealType(1) + - std::numeric_limits<_RealType>::epsilon() / _RealType(2); +#endif + } return __ret; } Index: libstdc++-v3/include/bits/regex.h =================================================================== --- a/src/libstdc++-v3/include/bits/regex.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/regex.h (.../branches/gcc-6-branch) @@ -2672,9 +2672,9 @@ initializer_list, regex_constants::match_flag_type = regex_constants::match_default) = delete; - template + template regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&, - const int (&)[N], + const int (&)[_Nm], regex_constants::match_flag_type = regex_constants::match_default) = delete; Index: libstdc++-v3/include/bits/alloc_traits.h =================================================================== --- a/src/libstdc++-v3/include/bits/alloc_traits.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/include/bits/alloc_traits.h (.../branches/gcc-6-branch) @@ -44,9 +44,14 @@ struct __allocator_traits_base { - template - using __rebind = typename _Alloc::template rebind<_Up>::other; + template + struct __rebind : __replace_first_arg<_Tp, _Up> { }; + template + struct __rebind<_Tp, _Up, + __void_t::other>> + { using type = typename _Tp::template rebind<_Up>::other; }; + protected: template using __pointer = typename _Tp::pointer; @@ -57,10 +62,6 @@ template using __cv_pointer = typename _Tp::const_void_pointer; template - using __diff_type = typename _Tp::difference_type; - template - using __size_type = typename _Tp::size_type; - template using __pocca = typename _Tp::propagate_on_container_copy_assignment; template using __pocma = typename _Tp::propagate_on_container_move_assignment; @@ -71,9 +72,8 @@ }; template - using __alloc_rebind = __detected_or_t_<__replace_first_arg_t, - __allocator_traits_base::__rebind, - _Alloc, _Up>; + using __alloc_rebind + = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; /** * @brief Uniform interface to all allocator types. @@ -94,6 +94,38 @@ */ using pointer = __detected_or_t; + private: + // Select _Func<_Alloc> or pointer_traits::rebind<_Tp> + template class _Func, typename _Tp, typename = void> + struct _Ptr + { + using type = typename pointer_traits::template rebind<_Tp>; + }; + + template class _Func, typename _Tp> + struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> + { + using type = _Func<_Alloc>; + }; + + // Select _A2::difference_type or pointer_traits<_Ptr>::difference_type + template + struct _Diff + { using type = typename pointer_traits<_PtrT>::difference_type; }; + + template + struct _Diff<_A2, _PtrT, __void_t> + { using type = typename _A2::difference_type; }; + + // Select _A2::size_type or make_unsigned<_DiffT>::type + template + struct _Size : make_unsigned<_DiffT> { }; + + template + struct _Size<_A2, _DiffT, __void_t> + { using type = typename _A2::size_type; }; + + public: /** * @brief The allocator's const pointer type. * @@ -100,9 +132,7 @@ * @c Alloc::const_pointer if that type exists, otherwise * pointer_traits::rebind */ - using const_pointer - = __detected_or_t<__ptr_rebind, - __c_pointer, _Alloc>; + using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; /** * @brief The allocator's void pointer type. @@ -110,8 +140,7 @@ * @c Alloc::void_pointer if that type exists, otherwise * pointer_traits::rebind */ - using void_pointer - = __detected_or_t<__ptr_rebind, __v_pointer, _Alloc>; + using void_pointer = typename _Ptr<__v_pointer, void>::type; /** * @brief The allocator's const void pointer type. @@ -119,9 +148,7 @@ * @c Alloc::const_void_pointer if that type exists, otherwise * pointer_traits::rebind */ - using const_void_pointer - = __detected_or_t<__ptr_rebind, __cv_pointer, - _Alloc>; + using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; /** * @brief The allocator's difference type @@ -129,9 +156,7 @@ * @c Alloc::difference_type if that type exists, otherwise * pointer_traits::difference_type */ - using difference_type - = __detected_or_t::difference_type, - __diff_type, _Alloc>; + using difference_type = typename _Diff<_Alloc, pointer>::type; /** * @brief The allocator's size type @@ -139,9 +164,7 @@ * @c Alloc::size_type if that type exists, otherwise * make_unsigned::type */ - using size_type - = __detected_or_t::type, - __size_type, _Alloc>; + using size_type = typename _Size<_Alloc, difference_type>::type; /** * @brief How the allocator is propagated on copy assignment @@ -184,9 +207,6 @@ template using rebind_traits = allocator_traits>; - static_assert(!is_same, __undefined>::value, - "allocator defines rebind or is like Alloc"); - private: template static auto Index: libstdc++-v3/libsupc++/nested_exception.h =================================================================== --- a/src/libstdc++-v3/libsupc++/nested_exception.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/libsupc++/nested_exception.h (.../branches/gcc-6-branch) @@ -115,7 +115,7 @@ inline void throw_with_nested(_Tp&& __t) { - using _Up = typename remove_reference<_Tp>::type; + using _Up = typename decay<_Tp>::type; using _CopyConstructible = __and_, is_move_constructible<_Up>>; static_assert(_CopyConstructible::value, Index: libstdc++-v3/ChangeLog =================================================================== --- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,413 @@ +2017-04-03 Ville Voutilainen + + Backport from mainline + 2017-04-03 Ville Voutilainen + + PR libstdc++/79141 + * include/bits/stl_pair.h (__nonesuch_no_braces): New. + (operator=(typename conditional< + __and_, + is_copy_assignable<_T2>>::value, + const pair&, const __nonesuch&>::type)): Change __nonesuch + to __nonesuch_no_braces. + (operator=(typename conditional< + __not_<__and_, + is_copy_assignable<_T2>>>::value, + const pair&, const __nonesuch&>::type)): Likewise. + (operator=(typename conditional< + __and_, + is_move_assignable<_T2>>::value, + pair&&, __nonesuch&&>::type)): Likewise. + * testsuite/20_util/pair/79141.cc: New. + +2017-03-28 Jonathan Wakely + + PR libstdc++/80137 + * include/bits/random.tcc (generate_canonical): Use std::nextafter + or numeric_limits::epsilon() to reduce out-of-range values. + * testsuite/26_numerics/random/uniform_real_distribution/operators/ + 64351.cc: Verify complexity requirement is met. + + Backport from mainline + 2017-03-15  Xi Ruoyao   + + PR libstdc++/62045 + * include/ext/pb_ds/qdetail/binary_heap_/binary_heap_.hpp + (is_heap): Remove. + (push_heap): Remove the wrong checking using is_heap. + (make_heap): Remove the assertion using is_heap. + * include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp + (modify): Ditto. + (resize_for_insert_if_needed): Add PB_DS_ASSERT_VALID after + calling make_heap. + + Backport from mainline + 2017-03-15 Jonathan Wakely + + PR libstdc++/62045 + * testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc: + New test. + * testsuite/ext/pb_ds/regression/priority_queues.cc: Fix copy&paste + error in comment. + + Backport from mainline + 2017-02-23 Jonathan Wakely + + * include/experimental/iterator: Include . + * testsuite/experimental/iterator/requirements.cc: Check for contents + of . + +2017-03-17 Jonathan Wakely + + Backport from mainline + 2017-03-17 Jonathan Wakely + + * src/c++11/codecvt.cc (range): Add non-type template parameter and + define oerloaded operators for reading and writing code units. + (range): Define partial specialization for accessing + wide characters in potentially unaligned byte ranges. + (ucs2_span(const char16_t*, const char16_t*, ...)) + (ucs4_span(const char16_t*, const char16_t*, ...)): Change parameters + to range in order to avoid unaligned reads. + (__codecvt_utf16_base::do_out) + (__codecvt_utf16_base::do_out) + (__codecvt_utf16_base::do_out): Use range specialization for + unaligned data to avoid unaligned writes. + (__codecvt_utf16_base::do_in) + (__codecvt_utf16_base::do_in) + (__codecvt_utf16_base::do_in): Likewise for writes. Return + error if there are unprocessable trailing bytes. + (__codecvt_utf16_base::do_length) + (__codecvt_utf16_base::do_length) + (__codecvt_utf16_base::do_length): Pass arguments of type + range to span functions. + * testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc: New test. + + Backport from mainline + 2017-03-16 Jonathan Wakely + + PR libstdc++/79980 + * src/c++11/codecvt.cc (to_integer(codecvt_mode)): Fix target type. + + PR libstdc++/80041 + * src/c++11/codecvt.cc (__codecvt_utf16_base::do_out) + (__codecvt_utf16_base::do_in): Convert char arguments to + char16_t to work with UTF-16 instead of UTF-8. + * testsuite/22_locale/codecvt/codecvt_utf16/80041.cc: New test. + + * src/c++11/codecvt.cc (codecvt) + (codecvt, __codecvt_utf8_base) + (__codecvt_utf8_base, __codecvt_utf8_base) + (__codecvt_utf16_base, __codecvt_utf16_base) + (__codecvt_utf16_base, __codecvt_utf8_utf16_base) + (__codecvt_utf8_utf16_base) + (__codecvt_utf8_utf16_base): Fix do_encoding() and + do_max_length() return values. + * testsuite/22_locale/codecvt/codecvt_utf16/members.cc: New test. + * testsuite/22_locale/codecvt/codecvt_utf8/members.cc: New test. + * testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc: New test. + + PR libstdc++/79980 + * include/bits/locale_conv.h (__do_str_codecvt): Set __count on + error path. + * src/c++11/codecvt.cc (operator&=, operator|=, operator~): Overloads + for manipulating codecvt_mode values. + (read_utf16_bom): Compare input to BOM constants instead of integral + constants that depend on endianness. Take mode parameter by + reference and adjust it, to distinguish between no BOM present and + UTF-16BE BOM present. + (ucs4_in, ucs2_span, ucs4_span): Adjust calls to read_utf16_bom. + (surrogates): New enumeration type. + (utf16_in, utf16_out): Add surrogates parameter to choose between + UTF-16 and UCS2 behaviour. + (utf16_span, ucs2_span): Use std::min not std::max. + (ucs2_out): Use std::min not std::max. Disallow surrogate pairs. + (ucs2_in): Likewise. Adjust calls to read_utf16_bom. + * testsuite/22_locale/codecvt/codecvt_utf16/79980.cc: New test. + * testsuite/22_locale/codecvt/codecvt_utf8/79980.cc: New test. + + PR libstdc++/79511 + * src/c++11/codecvt.cc (write_utf16_code_point): Don't write 0xffff + as a surrogate pair. + (__codecvt_utf8_utf16_base::do_in): Use native endianness + for internal representation. + (__codecvt_utf8_utf16_base::do_in): Likewise. + * testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc: New test. + +2017-03-14 Jonathan Wakely + + * testsuite/17_intro/names.cc: Undefine macros that clash with + identifiers in AIX system headers. + +2017-03-13 Ville Voutilainen + + PR libstdc++/80034 + * include/bits/list.tcc (merge(list&&)): Use const for the size_t + in the function and in the catch-block, qualify uses of std::distance. + (merge(list&&, _StrictWeakOrdering)): Likewise. + * testsuite/23_containers/list/operations/80034.cc: New. + +2017-03-10 George Lander + + * acinclude.m4 (glibcxx_cv_obsolete_isnan): Define + _GLIBCXX_INCLUDE_NEXT_C_HEADERS before including math.h. + * configure: Regenerate. + +2017-03-02 Jonathan Wakely + + PR libstdc++/79789 + * include/bits/ios_base.h (make_error_code, make_error_condition): + Likewise. + * include/bits/mask_array.h (mask_array): Likewise. + * include/bits/regex.h (regex_token_iterator): Likewise. + * include/bits/slice_array.h (slice_array): Likewise. + * include/std/memory (undeclare_no_pointers): Likewise. + * testsuite/17_intro/names.cc: New test. + +2017-02-15 Jonathan Wakely + + PR libstdc++/79114 + * testsuite/18_support/nested_exception/79114.cc: Add dg-require. + + Backport from mainline + 2016-12-15 Jonathan Wakely + + PR libstdc++/59170 + * python/libstdcxx/v6/printers.py (StdListIteratorPrinter.to_string) + (StdSlistIteratorPrinter.to_string, StdVectorIteratorPrinter.to_string) + (StdRbtreeIteratorPrinter.to_string) + (StdDequeIteratorPrinter.to_string): Add check for value-initialized + iterators. + * testsuite/libstdc++-prettyprinters/simple.cc: Test them. + * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise. + + Backport from mainline + 2016-12-15 Jonathan Wakely + + PR libstdc++/59161 + * python/libstdcxx/v6/printers.py (StdListIteratorPrinter.to_string) + (StdSlistIteratorPrinter.to_string, StdVectorIteratorPrinter.to_string) + (StdRbtreeIteratorPrinter.to_string, StdDequeIteratorPrinter.to_string) + (StdDebugIteratorPrinter.to_string): Return string instead of + gdb.Value. + * testsuite/libstdc++-prettyprinters/59161.cc: New test. + + Backport from mainline + 2016-12-15 Jonathan Wakely + + * python/libstdcxx/v6/printers.py (UniquePointerPrinter.to_string): + Remove redundant parentheses. + (RbtreeIterator, StdRbtreeIteratorPrinter): Add docstrings. + (StdForwardListPrinter.to_string): Remove redundant parentheses. + (StdExpOptionalPrinter.to_string): Use string formatting instead of + concatenation. + (TemplateTypePrinter): Adjust whitespace. + + Backport from mainline + 2016-12-15 Jonathan Wakely + + * python/libstdcxx/v6/xmethods.py (UniquePtrGetWorker.__init__): Use + correct element type for unique_ptr. + (UniquePtrGetWorker._supports, UniquePtrDerefWorker._supports): New + functions to disable unsupported operators for unique_ptr. + (UniquePtrSubscriptWorker): New worker for operator[]. + (UniquePtrMethodsMatcher.__init__): Register UniquePtrSubscriptWorker. + (UniquePtrMethodsMatcher.match): Call _supports on the chosen worker. + (SharedPtrGetWorker, SharedPtrDerefWorker, SharedPtrSubscriptWorker) + (SharedPtrUseCountWorker, SharedPtrUniqueWorker): New workers. + (SharedPtrMethodsMatcher): New matcher for shared_ptr. + (register_libstdcxx_xmethods): Register SharedPtrMethodsMatcher. + * testsuite/libstdc++-xmethods/unique_ptr.cc: Test arrays. + * testsuite/libstdc++-xmethods/shared_ptr.cc: New test. + +2017-02-14 Jonathan Wakely + + Backport from mainline + 2017-01-20 Jonathan Wakely + + PR libstdc++/72792 + * include/bits/alloc_traits.h (__allocator_traits_base::__diff_type) + (__allocator_traits_base::__size_type): Remove. + (allocator_traits::_Ptr): New class template to detect const and void + pointer types without instantiating pointer_traits::rebind + unnecessarily. + (allocator_traits::_Diff): Likewise for detecting difference_type. + (allocator_traits::_Size): New class template to detect size_type + without instantiating make_unsigned unnecessarily. + * include/bits/ptr_traits.h (pointer_traits::element_type): Use + __detected_or_t instead of __detected_or_t_. + * include/std/type_traits (__detected_or_t_): Remove. + * testsuite/20_util/allocator_traits/members/pointers.cc: New test. + + Backport from mainline + 2017-01-20 Jonathan Wakely + + PR libstdc++/72792 + PR libstdc++/72793 + * include/bits/alloc_traits.h (__allocator_traits_base::__rebind): + Replace with class template using void_t. + (__alloc_rebind): Define in terms of + __allocator_traits_base::__rebind. + (allocator_traits): Remove unconditional static_assert for + rebind_alloc. + * include/bits/ptr_traits.h (__replace_first_arg): Remove type member. + (pointer_traits::__rebind): Replace with class template using void_t. + (pointer_traits::rebind): Define in terms of __rebind. + (pointer_traits): Remove unconditional static_assert for rebind. + * testsuite/20_util/allocator_traits/members/rebind_alloc.cc: New test. + * testsuite/20_util/pointer_traits/rebind.cc: New test. + + Backport from mainline + 2017-01-20 Jonathan Wakely + + PR libstdc++/69321 + * include/experimental/any (__any_caster): Avoid instantiating + manager function for types that can't be stored in any. + * testsuite/experimental/any/misc/any_cast.cc: Test non-copyable type. + + Backport from mainline + 2017-01-18 Jonathan Wakely + + PR libstdc++/69301 + * include/std/atomic (atomic::load, atomic::exchange): Use + aligned buffer instead of default-initialized variable. + * testsuite/29_atomics/atomic/69301.cc: New test. + * include/experimental/memory (observer_ptr::release): Use reserved + name. + * include/ext/pointer.h (_Pointer_adapter::operator++(int)) + (_Pointer_adapter::operator--(int)): Likewise. + + Backport from mainline + 2017-01-17 Jonathan Wakely + + PR libstdc++/79114 + * libsupc++/nested_exception.h (throw_with_nested): Use decay instead + of remove_reference. + * testsuite/18_support/nested_exception/79114.cc: New test. + + Backport from mainline + 2017-01-16 Jonathan Wakely + + PR libstdc++/78702 + * include/bits/locale_classes.h (locale::facet::__shim): Change from + private to protected. + * src/c++11/cxx11-shim_facets.cc (__shim_accessor): Define helper to + make locale::facet::__shim accessible. + + Backport from mainline + 2017-01-11 Jonathan Wakely + + PR libstdc++/78134 + * include/bits/stl_map.h (map::lower_bound, map::upper_bound) + (map::equal_range): Fix return type of heterogeneous overloads. + * include/bits/stl_multimap.h (multimap::lower_bound) + (multimap::upper_bound, multimap::equal_range): Likewise. + * include/bits/stl_multiset.h (multiset::lower_bound) + (multiset::upper_bound, multiset::equal_range): Likewise. + * include/bits/stl_set.h (set::lower_bound, set::upper_bound) + (set::equal_range): Likewise. + * testsuite/23_containers/map/operations/2.cc: Check return types. + * testsuite/23_containers/multimap/operations/2.cc: Likewise. + * testsuite/23_containers/multiset/operations/2.cc: Likewise. + * testsuite/23_containers/set/operations/2.cc: Likewise. + + Backport from mainline + 2017-01-11 Jonathan Wakely + + PR libstdc++/78273 + * include/bits/stl_map.h (map::count<_Kt>(const _Kt&)): Don't assume + the heterogeneous comparison can only find one match. + * include/bits/stl_set.h (set::count<_Kt>(const _Kt&)): Likewise. + * testsuite/23_containers/map/operations/2.cc: Test count works with + comparison function that just partitions rather than sorting. + * testsuite/23_containers/set/operations/2.cc: Likewise. + +2017-02-01 Jonathan Wakely + + PR libstdc++/78346 + * include/bits/predefined_ops.h (_Iter_equals_iter): Store iterator + not its referent. + (_Iter_comp_to_iter): Likewise. + * testsuite/25_algorithms/search/78346.cc: New test. + + PR libstdc++/79195 + * include/experimental/array (make_array): Use common_type<_Dest> + and delay instantiation of common_type until after conditional_t. + Qualify std::forward call. + (to_array): Add exception specification. + * testsuite/experimental/array/make_array.cc: Test argument types + without a common type. + + PR libstdc++/79254 + * include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] + (basic_string::operator=(const basic_string&)): If source object is + small just deallocate, otherwise perform new allocation before + making any changes. + * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc: + Test exception-safety of copy assignment when allocator propagates. + * testsuite/21_strings/basic_string/allocator/char/copy_assign.cc: + Likewise. + * testsuite/util/testsuite_allocator.h (uneq_allocator::swap): Make + std::swap visible. + +2017-01-22 Gerald Pfeifer + + Backport from mainline + 2017-01-01 Gerald Pfeifer + + * doc/xml/faq.xml: Update address of C++ ABI link. + * doc/xml/manual/abi.xml: Ditto. + +2017-01-16 Ville Voutilainen + + Backport from mainline + 2017-01-16 Ville Voutilainen + + PR libstdc++/78389 + * include/bits/list.tcc (merge(list&&)): Fix backwards size adjustments. + (merge(list&&, _StrictWeakOrdering)): Likewise. + * testsuite/23_containers/list/operations/78389.cc: Add + better test for the sizes. + +2017-01-15 Ville Voutilainen + + Backport from mainline + 2017-01-13 Ville Voutilainen + + PR libstdc++/78389 + * include/bits/list.tcc (merge(list&&)): + Adjust list sizes if the comparator throws. + (merge(list&&, _StrictWeakOrdering)): Likewise. + * testsuite/23_containers/list/operations/78389.cc: New. + +2017-01-15 Ville Voutilainen + + Backport from mainline + 2016-12-19 Ville Voutilainen + + Make the perfect-forwarding constructor of a two-element tuple + sfinae away when the first argument is an allocator_arg. + * include/std/tuple (tuple(_U1&&, _U2&&)): Constrain. + * testsuite/20_util/tuple/cons/allocator_with_any.cc: New. + +2017-01-06 Jonathan Wakely + + Backport from mainline + 2017-01-03 Jonathan Wakely + + PR libstdc++/78956 + * include/std/thread (thread(const thread&&)): Add deleted + constructor. + * testsuite/30_threads/thread/cons/lwg2097.cc: New test. + +2017-01-06 Jonathan Wakely + + PR libstdc++/78991 + * include/bits/predefined_ops.h (_Iter_comp_iter, _Iter_comp_val) + (_Val_comp_iter, _Iter_equals_val, _Iter_pred, _Iter_comp_to_val) + (_Iter_comp_to_iter, _Iter_negate): Make constructors explicit. + * testsuite/25_algorithms/sort/78991.cc: New test. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libstdc++-v3/testsuite/25_algorithms/search/78346.cc =================================================================== --- a/src/libstdc++-v3/testsuite/25_algorithms/search/78346.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/25_algorithms/search/78346.cc (.../branches/gcc-6-branch) @@ -0,0 +1,118 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +bool values[100]; + +unsigned next_id() +{ + static unsigned counter = 0; + VERIFY(counter < 100); + return counter++; +} + +struct value +{ + int val; + const unsigned id; + + value(int i = 0) : val(i), id(next_id()) { values[id] = true; } + value(const value& v) : val(v.val), id(next_id()) { values[id] = true; } + value& operator=(const value& v) { val = v.val; return *this; } + ~value() { values[id] = false; } +}; + +bool operator<(const value& lhs, const value& rhs) +{ + if (!values[lhs.id]) + throw lhs.id; + if (!values[rhs.id]) + throw rhs.id; + return lhs.val < rhs.val; +} + +bool operator==(const value& lhs, const value& rhs) +{ + if (!values[lhs.id]) + throw lhs.id; + if (!values[rhs.id]) + throw rhs.id; + return lhs.val == rhs.val; +} + +// A forward iterator that fails to meet the requirement that for any +// two dereferenceable forward iterators, a == b implies &*a == &*b +struct stashing_iterator +{ + typedef std::forward_iterator_tag iterator_category; + typedef value value_type; + typedef value_type const* pointer; + typedef value_type const& reference; + typedef std::ptrdiff_t difference_type; + + stashing_iterator() : ptr(), stashed() { } + stashing_iterator(pointer p) : ptr(p), stashed() { stash(); } + stashing_iterator(const stashing_iterator&) = default; + stashing_iterator& operator=(const stashing_iterator&) = default; + + stashing_iterator& operator++() + { + ++ptr; + stash(); + return *this; + } + + stashing_iterator operator++(int) + { + stashing_iterator i = *this; + ++*this; + return i; + } + + reference operator*() const { return stashed; } + pointer operator->() const { return &**this; } + + bool operator==(const stashing_iterator& i) const { return ptr == i.ptr; } + bool operator!=(const stashing_iterator& i) const { return !(*this == i); } + +private: + void stash() + { + if (ptr) + stashed = *ptr; + } + + pointer ptr; + value_type stashed; +}; + +void +test01() +{ + value s[] = { 0, 1, 2, 3, 4, 5 }; + std::search(s, s+6, stashing_iterator(s), stashing_iterator(s+4)); +} + +int +main() +{ + test01(); +} Index: libstdc++-v3/testsuite/25_algorithms/sort/78991.cc =================================================================== --- a/src/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc (.../branches/gcc-6-branch) @@ -0,0 +1,40 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++14 } } + +// PR 78991 +// This failed to compile with Clang because the result_of expression causes +// instantiation of _Iter_comp_iter::operator() outside the immediate context. + +#include + +struct function +{ + function() = default; + + template> + function(F) { } + + bool operator()(int x, int y) const { return x < y; } +}; + +int main() +{ + int a[2]{ 2, 1 }; + std::sort(a, a+2, function{}); +} Index: libstdc++-v3/testsuite/18_support/nested_exception/79114.cc =================================================================== --- a/src/libstdc++-v3/testsuite/18_support/nested_exception/79114.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/18_support/nested_exception/79114.cc (.../branches/gcc-6-branch) @@ -0,0 +1,28 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } +// { dg-require-atomic-builtins "" } + +#include + +void +test01() +{ + std::throw_with_nested(""); + std::throw_with_nested(test01); +} Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc (.../branches/gcc-6-branch) @@ -30,6 +30,7 @@ #include #include #include +#include #include int @@ -53,6 +54,9 @@ std::deque::iterator deqiter = deq.begin(); // { dg-final { note-test deqiter {"one"} } } + std::deque::iterator deqiter0; +// { dg-final { note-test deqiter0 {non-dereferenceable iterator for std::deque} } } + std::list lst; lst.push_back("one"); lst.push_back("two"); @@ -66,6 +70,9 @@ tem = *lstciter; // { dg-final { note-test lstciter {"one"}} } + std::list::iterator lstiter0; +// { dg-final { note-test lstiter0 {non-dereferenceable iterator for std::list} } } + std::map mp; mp["zardoz"] = 23; // { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } } @@ -73,6 +80,9 @@ std::map::iterator mpiter = mp.begin(); // { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } } + std::map::iterator mpiter0; +// { dg-final { note-test mpiter0 {non-dereferenceable iterator for associative container} } } + // PR 67440 const std::set const_intset = {2, 3}; // { dg-final { note-test const_intset {std::set with 2 elements = {[0] = 2, [1] = 3}} } } @@ -85,6 +95,20 @@ std::set::const_iterator spciter = sp.begin(); // { dg-final { note-test spciter {"barrel"} } } + std::set::iterator spiter0; +// { dg-final { note-test spiter0 {non-dereferenceable iterator for associative container} } } + + std::vector v; + v.push_back(1); + v.push_back(2); + v.erase(v.begin()); +// { dg-final { note-test v {std::vector of length 1, capacity 2 = {2}} } } + std::vector::iterator viter3 = v.begin(); +// { dg-final { note-test viter3 {2} } } + + std::vector::iterator viter0; +// { dg-final { note-test viter0 {non-dereferenceable iterator for std::vector} } } + __gnu_cxx::slist sll; sll.push_front(23); sll.push_front(47); @@ -93,6 +117,9 @@ __gnu_cxx::slist::iterator slliter = sll.begin(); // { dg-final { note-test slliter {47} } } + __gnu_cxx::slist::iterator slliter0; +// { dg-final { note-test slliter0 {non-dereferenceable iterator for __gnu_cxx::slist} } } + std::cout << "\n"; return 0; // Mark SPOT } Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/59161.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/59161.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/59161.cc (.../branches/gcc-6-branch) @@ -0,0 +1,70 @@ +// { dg-do run } +// { dg-options "-g -O0" } + +// Copyright (C) 2011-2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include +#include +#include +#include +#include +#include +#include + +struct C { + C(int& i) : ref(i) { } + int& ref; + bool operator<(const C& c) const { return ref < c.ref; } +}; + +int main() +{ + int i = 1; + C c(i); + + std::deque d; + d.push_back(c); + std::deque::iterator diter = d.begin(); +// { dg-final { regexp-test diter {ref = @0x.*} } } + + std::list l; + l.push_back(c); + std::list::iterator liter = l.begin(); + // Need to ensure the list::iterator::_Node typedef is in the debuginfo: + int tmp __attribute__((unused)) = (*liter).ref; +// { dg-final { regexp-test liter {ref = @0x.*} } } + + __gnu_cxx::slist sl; + sl.push_front(c); + __gnu_cxx::slist::iterator sliter = sl.begin(); +// { dg-final { regexp-test sliter {ref = @0x.*} } } + + std::set s; + s.insert(c); + std::set::iterator siter = s.begin(); +// { dg-final { regexp-test siter {ref = @0x.*} } } + + std::vector v; + v.push_back(c); + std::vector::iterator viter = v.begin(); +// { dg-final { regexp-test viter {ref = @0x.*} } } + + std::cout << "\n"; + return 0; // Mark SPOT +} +// { dg-final { gdb-test SPOT } } Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc (.../branches/gcc-6-branch) @@ -30,6 +30,7 @@ #include #include #include +#include #include int @@ -50,6 +51,9 @@ deq.push_back("two"); // { dg-final { note-test deq {std::deque with 2 elements = {"one", "two"}} } } + std::deque::iterator deqiter0; +// { dg-final { note-test deqiter0 {non-dereferenceable iterator for std::deque} } } + std::deque::iterator deqiter = deq.begin(); // { dg-final { note-test deqiter {"one"} } } @@ -58,6 +62,9 @@ lst.push_back("two"); // { dg-final { note-test lst {std::list = {[0] = "one", [1] = "two"}} } } + std::list::iterator lstiter0; +// { dg-final { note-test lstiter0 {non-dereferenceable iterator for std::list} } } + std::list::iterator lstiter = lst.begin(); tem = *lstiter; // { dg-final { note-test lstiter {"one"}} } @@ -73,6 +80,9 @@ std::map::iterator mpiter = mp.begin(); // { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } } + std::map::iterator mpiter0; +// { dg-final { note-test mpiter0 {non-dereferenceable iterator for associative container} } } + // PR 67440 std::set intset; intset.insert(2); @@ -88,6 +98,20 @@ std::set::const_iterator spciter = sp.begin(); // { dg-final { note-test spciter {"barrel"} } } + std::set::iterator spiter0; +// { dg-final { note-test spiter0 {non-dereferenceable iterator for associative container} } } + + std::vector v; + v.push_back(1); + v.push_back(2); + v.erase(v.begin()); +// { dg-final { note-test v {std::vector of length 1, capacity 2 = {2}} } } + std::vector::iterator viter3 = v.begin(); +// { dg-final { note-test viter3 {2} } } + + std::vector::iterator viter0; +// { dg-final { note-test viter0 {non-dereferenceable iterator for std::vector} } } + __gnu_cxx::slist sll; sll.push_front(23); sll.push_front(47); @@ -96,6 +120,9 @@ __gnu_cxx::slist::iterator slliter = sll.begin(); // { dg-final { note-test slliter {47} } } + __gnu_cxx::slist::iterator slliter0; +// { dg-final { note-test slliter0 {non-dereferenceable iterator for __gnu_cxx::slist} } } + std::cout << "\n"; return 0; // Mark SPOT } Index: libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc =================================================================== --- a/src/libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc (.../branches/gcc-6-branch) @@ -0,0 +1,29 @@ +// { dg-do compile { target c++11 } } +// { dg-require-cstdint "" } +// { dg-require-gthreads "" } + +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +using std::thread; +using std::is_constructible; + +static_assert( !is_constructible::value, "" ); +static_assert( !is_constructible::value, "" ); +static_assert( !is_constructible::value, "" ); Index: libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc =================================================================== --- a/src/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc (.../branches/gcc-6-branch) @@ -0,0 +1,51 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run } + +#include +#include + +int count = 0; + +struct less +{ + bool operator()(int i, int j) const + { + ++count; + return i < j; + } +}; + +void +test01() +{ + __gnu_pbds::priority_queue c; + c.push(1); + c.push(2); + c.push(3); + c.push(4); + count = 0; + c.push(5); + VERIFY( count < c.size() ); +} + +int +main() +{ + test01(); +} Index: libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc =================================================================== --- a/src/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc (.../branches/gcc-6-branch) @@ -108,7 +108,7 @@ { /* - * Perform operations on a binomial-heap queue. + * Perform operations on a binary-heap queue. */ cout << "Binary heap" << endl; __gnu_pbds::priority_queue, binary_heap_tag> c; Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc (.../branches/gcc-6-branch) @@ -0,0 +1,60 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include + +// PR libstdc++/79511 + +template + std::basic_string conv(const char* src) + { + std::wstring_convert, ElemT> conv; + return conv.from_bytes(src); + } + +void +test01() +{ + static char const src[] = "\xEF\xBF\xBF"; + VERIFY( conv(src) == u"\xffff" ); + VERIFY( conv(src) == U"\xffff" ); +#ifdef _GLIBCXX_USE_WCHAR_T + VERIFY( conv(src) == L"\xffff" ); +#endif +} + +void +test02() +{ + static char const src[] = "\xE2\x82\xAC"; + VERIFY( conv(src) == u"\x20ac" ); + VERIFY( conv(src) == U"\x20ac" ); +#ifdef _GLIBCXX_USE_WCHAR_T + VERIFY( conv(src) == L"\x20ac" ); +#endif +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc (.../branches/gcc-6-branch) @@ -0,0 +1,76 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +const int bomlen = 3; // UTF-8 BOM is 24 bits +const int maxlen = 4; + +void +test01() +{ + std::codecvt_utf8_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test02() +{ + std::codecvt_utf8_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test03() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + std::codecvt_utf8_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +#endif +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc (.../branches/gcc-6-branch) @@ -34,7 +34,7 @@ const codecvt_c16* const cvt = &use_facet(loc_c); VERIFY(!cvt->always_noconv()); - VERIFY(cvt->max_length() == 3); + VERIFY(cvt->max_length() == 4); VERIFY(cvt->encoding() == 0); const char u8dat[] = u8"H\U000000E4ll\U000000F6 \U0001F63F \U000056FD " Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc (.../branches/gcc-6-branch) @@ -0,0 +1,87 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + std::codecvt_utf16 conv; + const wchar_t wc = 0x6557; + char bytes[2] = {0}; + const wchar_t* wcnext; + std::mbstate_t st{}; + char* next = nullptr; + auto res = conv.out(st, &wc, &wc+ 1, wcnext, bytes, std::end(bytes), next); + VERIFY( res == std::codecvt_base::ok ); + VERIFY( wcnext == &wc + 1 ); + VERIFY( next == std::end(bytes) ); + VERIFY( bytes[0] == 0x65 ); + VERIFY( bytes[1] == 0x57 ); + VERIFY( conv.length(st, bytes, next, 1) == (next - bytes) ); + + wchar_t w; + wchar_t* wnext; + const char* cnext; + st = {}; + res = conv.in(st, bytes, next, cnext, &w, &w + 1, wnext); + VERIFY( res == std::codecvt_base::ok ); + VERIFY( wnext == &w + 1 ); + VERIFY( cnext == next ); + VERIFY( w == wc ); +#endif +} + +void +test02() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + std::codecvt_utf16 conv; + wchar_t wc = 0x6557; + char bytes[2] = {0}; + const wchar_t* wcnext; + std::mbstate_t st{}; + char* next = nullptr; + auto res = conv.out(st, &wc, &wc+ 1, wcnext, bytes, std::end(bytes), next); + VERIFY( res == std::codecvt_base::ok ); + VERIFY( wcnext == &wc + 1 ); + VERIFY( next == std::end(bytes) ); + VERIFY( bytes[0] == 0x57 ); + VERIFY( bytes[1] == 0x65 ); + VERIFY( conv.length(st, bytes, next, 1) == (next - bytes) ); + + wchar_t w; + wchar_t* wnext; + const char* cnext; + st = {}; + res = conv.in(st, bytes, next, cnext, &w, &w + 1, wnext); + VERIFY( res == std::codecvt_base::ok ); + VERIFY( wnext == &w + 1 ); + VERIFY( cnext == next ); + VERIFY( w == wc ); +#endif +} + +int main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc (.../branches/gcc-6-branch) @@ -0,0 +1,289 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include + +using std::codecvt_base; +using std::codecvt_mode; +using std::codecvt_utf16; +using std::wstring_convert; +using std::mbstate_t; + +constexpr codecvt_mode +operator|(codecvt_mode m1, codecvt_mode m2) +{ + using underlying = std::underlying_type::type; + return static_cast(static_cast(m1) | m2); +} + +// Read/write UTF-16 code units from data not correctly aligned for char16_t + +void +test01() +{ + mbstate_t st; + constexpr codecvt_mode m = std::consume_header|std::generate_header; + codecvt_utf16 conv; + const char src[] = "-\xFE\xFF\0\x61\xAB\xCD"; + const char* const src_end = src + 7; + + int len = conv.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + + char16_t dst[2]; + char16_t* const dst_end = dst + 2; + char16_t* dst_next; + const char* src_cnext; + auto res = conv.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + char out[sizeof(src)] = { src[0] }; + char* const out_end = out + 7; + char* out_next; + const char16_t* dst_cnext; + res = conv.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[1] ); + VERIFY( out[2] == src[2] ); + VERIFY( out[3] == src[3] ); + VERIFY( out[4] == src[4] ); + VERIFY( out[5] == src[5] ); + VERIFY( out[6] == src[6] ); + + codecvt_utf16 conv_le; + + len = conv_le.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv_le.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + + res = conv_le.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + res = conv_le.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[2] ); + VERIFY( out[2] == src[1] ); + VERIFY( out[3] == src[4] ); + VERIFY( out[4] == src[3] ); + VERIFY( out[5] == src[6] ); + VERIFY( out[6] == src[5] ); +} + +void +test02() +{ + mbstate_t st; + constexpr codecvt_mode m = std::consume_header|std::generate_header; + codecvt_utf16 conv; + const char src[] = "-\xFE\xFF\0\x61\xAB\xCD\xD8\x08\xDF\x45"; + const char* const src_end = src + 11; + + int len = conv.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + len = conv.length(st, src + 1, src_end, -1ul); + VERIFY( len == 10 ); + + char32_t dst[3]; + char32_t* const dst_end = dst + 3; + char32_t* dst_next; + const char* src_cnext; + auto res = conv.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + VERIFY( dst[2] == 0x012345 ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + char out[sizeof(src)] = { src[0] }; + char* const out_end = out + 11; + char* out_next; + const char32_t* dst_cnext; + res = conv.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[1] ); + VERIFY( out[2] == src[2] ); + VERIFY( out[3] == src[3] ); + VERIFY( out[4] == src[4] ); + VERIFY( out[5] == src[5] ); + VERIFY( out[6] == src[6] ); + VERIFY( out[7] == src[7] ); + VERIFY( out[8] == src[8] ); + VERIFY( out[9] == src[9] ); + VERIFY( out[10] == src[10] ); + + codecvt_utf16 conv_le; + + len = conv_le.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv_le.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + len = conv.length(st, src + 1, src_end, -1ul); + VERIFY( len == 10 ); + + res = conv_le.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + VERIFY( dst[2] == 0x012345 ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + res = conv_le.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[2] ); + VERIFY( out[2] == src[1] ); + VERIFY( out[3] == src[4] ); + VERIFY( out[4] == src[3] ); + VERIFY( out[5] == src[6] ); + VERIFY( out[6] == src[5] ); + VERIFY( out[7] == src[8] ); + VERIFY( out[8] == src[7] ); + VERIFY( out[9] == src[10] ); + VERIFY( out[10] == src[9] ); +} + +void +test03() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + mbstate_t st; + constexpr codecvt_mode m = std::consume_header|std::generate_header; + codecvt_utf16 conv; + const char src[] = "-\xFE\xFF\0\x61\xAB\xCD\xD8\x08\xDF\x45"; + const size_t in_len = sizeof(wchar_t) == 4 ? 11 : 7; + const size_t out_len = sizeof(wchar_t) == 4 ? 3 : 2; + const char* const src_end = src + in_len; + + int len = conv.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + if (sizeof(wchar_t) == 4) + { + len = conv.length(st, src + 1, src_end, -1ul); + VERIFY( len == 10 ); + } + + wchar_t dst[out_len]; + wchar_t* const dst_end = dst + out_len; + wchar_t* dst_next; + const char* src_cnext; + auto res = conv.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + if (sizeof(wchar_t) == 4) + VERIFY( dst[2] == 0x012345 ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + char out[sizeof(src)] = { src[0] }; + char* const out_end = out + in_len; + char* out_next; + const wchar_t* dst_cnext; + res = conv.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[1] ); + VERIFY( out[2] == src[2] ); + VERIFY( out[3] == src[3] ); + VERIFY( out[4] == src[4] ); + VERIFY( out[5] == src[5] ); + VERIFY( out[6] == src[6] ); + if (sizeof(wchar_t) == 4) + { + VERIFY( out[7] == src[7] ); + VERIFY( out[8] == src[8] ); + VERIFY( out[9] == src[9] ); + VERIFY( out[10] == src[10] ); + } + + codecvt_utf16 conv_le; + + len = conv_le.length(st, src + 1, src_end, 1); + VERIFY( len == 4 ); + len = conv_le.length(st, src + 1, src_end, 2); + VERIFY( len == 6 ); + if (sizeof(wchar_t) == 4) + { + len = conv.length(st, src + 1, src_end, -1ul); + VERIFY( len == 10 ); + } + + res = conv_le.in(st, src + 1, src_end, src_cnext, dst, dst_end, dst_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( dst[0] == 0x0061 ); + VERIFY( dst[1] == 0xabcd ); + if (sizeof(wchar_t) == 4) + VERIFY( dst[2] == 0x012345 ); + VERIFY( src_cnext == src_end ); + VERIFY( dst_next == dst_end ); + + res = conv_le.out(st, dst, dst_end, dst_cnext, out + 1, out_end, out_next); + VERIFY( res == codecvt_base::ok ); + VERIFY( out_next == out_end ); + VERIFY( dst_cnext == dst_end ); + VERIFY( out[1] == src[2] ); + VERIFY( out[2] == src[1] ); + VERIFY( out[3] == src[4] ); + VERIFY( out[4] == src[3] ); + VERIFY( out[5] == src[6] ); + VERIFY( out[6] == src[5] ); + if (sizeof(wchar_t) == 4) + { + VERIFY( out[7] == src[8] ); + VERIFY( out[8] == src[7] ); + VERIFY( out[9] == src[10] ); + VERIFY( out[10] == src[9] ); + } +#endif +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc (.../branches/gcc-6-branch) @@ -0,0 +1,142 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include + +// PR libstdc++/79980 + +constexpr std::codecvt_mode mode(std::codecvt_mode m) +{ return static_cast(m | std::consume_header); } + +template + using Conv + = std::wstring_convert, WCh>; + +void +test01() +{ + const char src[] = "\xFE\xFF\xAB\xCD"; + Conv conv; + auto dst = conv.from_bytes(src, src+4); + VERIFY( dst[0] == 0xabcd ); +} + +void +test02() +{ + const char src[] = "\xFF\xFE\xAB\xCD"; + Conv conv; + auto dst = conv.from_bytes(src, src+4); + VERIFY( dst[0] == 0xcdab ); +} + +void +test03() +{ + const char src[] = "\xFE\xFF\xAB\xCD"; + Conv conv; + auto dst = conv.from_bytes(src, src+4); + VERIFY( dst[0] == 0xabcd ); +} + +void +test04() +{ + const char src[] = "\xFF\xFE\xAB\xCD"; + Conv conv; + auto dst = conv.from_bytes(src, src+4); + VERIFY( dst[0] == 0xcdab ); +} + +void +test05() +{ + const char src[] = "\0\x61\xAB\xCD"; // character greater than 0x00FF + Conv conv("to_bytes failed", u"from_bytes failed"); + std::u16string result = conv.from_bytes(src, src+4); + VERIFY( result == u"from_bytes failed" ); + VERIFY( conv.converted() == 2 ); +} + +void +test06() +{ + const char src[] = "\0\x61\xAB\xCD"; + Conv conv("to_bytes failed", u"from_bytes failed"); + std::u16string result = conv.from_bytes(src, src+3); // incomplete character + VERIFY( result == u"from_bytes failed" ); + VERIFY( conv.converted() == 2 ); +} + +void +test07() +{ + Conv conv("to_bytes failed", u"from_bytes failed"); + // ucs2 to utf-16 conversion should fail on invalid ucs2 input: + std::u16string utf16 = u"1234\U00001111\U0001ffff"; + auto out = conv.to_bytes(utf16); + VERIFY( out == "to_bytes failed" ); + VERIFY( conv.converted() == 5 ); + + // And should also fail on incomplete surrogate pair (not return partial): + out = conv.to_bytes(utf16.substr(0, utf16.size()-1)); + VERIFY( out == "to_bytes failed" ); + VERIFY( conv.converted() == 5 ); +} + +void +test08() +{ + // Read/write UTF-16 code units from data not correctly aligned for char16_t + Conv conv; + const char src[] = "-\xFE\xFF\0\x61\xAB\xCD"; + auto out = conv.from_bytes(src + 1, src + 7); + VERIFY( out[0] == 0x0061 ); + VERIFY( out[1] == 0xabcd ); + auto bytes = conv.to_bytes(out); + VERIFY( bytes == std::string(src + 1, 6) ); +} + +void +test09() +{ + // Read/write UTF-16 code units from data not correctly aligned for char16_t + Conv conv; + const char src[] = "-\xFE\xFF\xD8\x08\xDF\x45"; + auto out = conv.from_bytes(src + 1, src + 7); + VERIFY( out == U"\U00012345" ); + auto bytes = conv.to_bytes(out); + VERIFY( bytes == std::string(src + 1, 6) ); +} + +int main() +{ + test01(); + test02(); + test03(); + test04(); + test05(); + test06(); + test07(); + test08(); + test09(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc (.../branches/gcc-6-branch) @@ -0,0 +1,81 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +const int bomlen = 2; // UTF-16 BOM is 16 bits + +void +test01() +{ + const int maxlen = 2; + + std::codecvt_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test02() +{ + const int maxlen = 4; + + std::codecvt_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test03() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + const int maxlen = sizeof(wchar_t) == 4 ? 4 : 2; + + std::codecvt_utf16 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf16 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +#endif +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc (.../branches/gcc-6-branch) @@ -0,0 +1,94 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include +#include + +using std::wstring_convert; +using std::codecvt_utf8; + +void +test01() +{ + std::string src = u8"1234\U00001111\U0001ffff"; + wstring_convert, char16_t> c("bad", u"BAD"); + + // utf-8 to ucs2 conversion should fail on character outside BMP + auto ucs2 = c.from_bytes(src); + VERIFY( ucs2 == u"BAD" ); + VERIFY( c.converted() == 7 ); + + // ucs2 to utf-8 conversion should fail on invalid ucs2 input: + std::u16string utf16 = u"1234\U00001111\U0001ffff"; + auto out = c.to_bytes(utf16); + VERIFY( out == "bad" ); + VERIFY( c.converted() == 5 ); + + // And should also fail on incomplete surrogate pair (not return partial): + out = c.to_bytes(utf16.substr(0, utf16.size()-1)); + VERIFY( out == "bad" ); + VERIFY( c.converted() == 5 ); +} + +void +test02() +{ + std::string src = u8"1234\U00001111\U0001ffff"; + wstring_convert, char16_t> c("bad", u"BAD"); + + // utf-8 to ucs2 conversion should fail on character above Maxcode=0x1000 + auto ucs2 = c.from_bytes(src); + VERIFY( ucs2 == u"BAD" ); + VERIFY( c.converted() == 4 ); +} + +void +test03() +{ + std::string src = u8"1234\U00001111\U0001ffff"; + wstring_convert, char32_t> c("bad", U"BAD"); + + // utf-8 to ucs4 conversion should fail on character above Maxcode=0x10000 + auto ucs4 = c.from_bytes(src); + VERIFY( ucs4 == U"BAD" ); + VERIFY( c.converted() == 7 ); +} + +void +test04() +{ + std::string src = u8"1234\U00001111\U0001ffff"; + wstring_convert, char32_t> c("bad", U"BAD"); + + // utf-8 to ucs4 conversion should fail on character above Maxcode=0x1000 + auto ucs4 = c.from_bytes(src); + VERIFY( ucs4 == U"BAD" ); + VERIFY( c.converted() == 4 ); +} + +int +main() +{ + test01(); + test02(); + test03(); + test04(); +} Index: libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/members.cc =================================================================== --- a/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/members.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/members.cc (.../branches/gcc-6-branch) @@ -0,0 +1,81 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +const int bomlen = 3; // UTF-8 BOM is 24 bits + +void +test01() +{ + const int maxlen = 3; + + std::codecvt_utf8 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test02() +{ + const int maxlen = 4; + + std::codecvt_utf8 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +} + +void +test03() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + const int maxlen = sizeof(wchar_t) == 4 ? 4 : 3; + + std::codecvt_utf8 c; + VERIFY( c.always_noconv() == false ); + VERIFY( c.encoding() == 0 ); + VERIFY( c.max_length() == maxlen ); + + std::codecvt_utf8 c_bom; + VERIFY( c_bom.always_noconv() == false ); + VERIFY( c_bom.encoding() == 0 ); + VERIFY( c_bom.max_length() == (maxlen + bomlen) ); +#endif +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/29_atomics/atomic/69301.cc =================================================================== --- a/src/libstdc++-v3/testsuite/29_atomics/atomic/69301.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/29_atomics/atomic/69301.cc (.../branches/gcc-6-branch) @@ -0,0 +1,57 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } +// { dg-require-atomic-builtins "" } + +#include +#include + +struct NonDefaultConstructible +{ + NonDefaultConstructible(int i) : val(i) { } + int val; +}; + +template class std::atomic; + +void +test01() +{ + std::atomic a(1); + const auto n1 = a.exchange(2); + VERIFY( n1.val == 1 ); + const auto n2 = a.load(); + VERIFY( n2.val == 2 ); +} + +void +test02() +{ + volatile std::atomic a(1); + const auto n1 = a.exchange(2); + VERIFY( n1.val == 1 ); + const auto n2 = a.load(); + VERIFY( n2.val == 2 ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc (.../branches/gcc-6-branch) @@ -53,7 +53,7 @@ cit = cx.find(2L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); static_assert(std::is_same::value, "find returns iterator"); @@ -76,7 +76,7 @@ cn = cx.count(2L); VERIFY( cn == 0 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); } void @@ -94,7 +94,12 @@ cit = cx.lower_bound(2L); VERIFY( cit != cx.end() && cit->second == '4' ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "lower_bound returns iterator"); + static_assert(std::is_same::value, + "const lower_bound returns const_iterator"); } void @@ -112,7 +117,12 @@ cit = cx.upper_bound(3L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "upper_bound returns iterator"); + static_assert(std::is_same::value, + "const upper_bound returns const_iterator"); } void @@ -131,7 +141,14 @@ cit = cx.equal_range(2L); VERIFY( cit.first == cit.second && cit.first != cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + using pair = std::pair; + static_assert(std::is_same::value, + "equal_range returns pair"); + using cpair = std::pair; + static_assert(std::is_same::value, + "const equal_range returns pair"); } Index: libstdc++-v3/testsuite/23_containers/set/operations/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/set/operations/2.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/set/operations/2.cc (.../branches/gcc-6-branch) @@ -53,7 +53,7 @@ cit = cx.find(2L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); static_assert(std::is_same::value, "find returns iterator"); @@ -76,7 +76,7 @@ cn = cx.count(2L); VERIFY( cn == 0 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); } void @@ -94,7 +94,12 @@ cit = cx.lower_bound(2L); VERIFY( cit != cx.end() && *cit == 3 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "lower_bound returns iterator"); + static_assert(std::is_same::value, + "const lower_bound returns const_iterator"); } void @@ -112,7 +117,12 @@ cit = cx.upper_bound(5L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "upper_bound returns iterator"); + static_assert(std::is_same::value, + "const upper_bound returns const_iterator"); } void @@ -130,7 +140,14 @@ cit = cx.equal_range(2L); VERIFY( cit.first == cit.second && cit.first != cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + using pair = std::pair; + static_assert(std::is_same::value, + "equal_range returns pair"); + using cpair = std::pair; + static_assert(std::is_same::value, + "const equal_range returns pair"); } void @@ -150,6 +167,28 @@ s.find(i); } +void +test07() +{ + // PR libstdc++/78273 + + struct C { + bool operator()(int l, int r) const { return l < r; } + + struct Partition { }; + + bool operator()(int l, Partition) const { return l < 2; } + bool operator()(Partition, int r) const { return 4 < r; } + + using is_transparent = void; + }; + + std::set s{ 1, 2, 3, 4, 5 }; + + auto n = s.count(C::Partition{}); + VERIFY( n == 3 ); +} + int main() { @@ -159,4 +198,5 @@ test04(); test05(); test06(); + test07(); } Index: libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc (.../branches/gcc-6-branch) @@ -53,7 +53,7 @@ cit = cx.find(2L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); static_assert(std::is_same::value, "find returns iterator"); @@ -76,7 +76,7 @@ cn = cx.count(2L); VERIFY( cn == 0 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); } void @@ -94,7 +94,12 @@ cit = cx.lower_bound(2L); VERIFY( cit != cx.end() && *cit == 3 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "lower_bound returns iterator"); + static_assert(std::is_same::value, + "const lower_bound returns const_iterator"); } void @@ -112,7 +117,12 @@ cit = cx.upper_bound(5L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "upper_bound returns iterator"); + static_assert(std::is_same::value, + "const upper_bound returns const_iterator"); } void @@ -131,7 +141,14 @@ cit = cx.equal_range(2L); VERIFY( cit.first == cit.second && cit.first != cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + using pair = std::pair; + static_assert(std::is_same::value, + "equal_range returns pair"); + using cpair = std::pair; + static_assert(std::is_same::value, + "const equal_range returns pair"); } Index: libstdc++-v3/testsuite/23_containers/list/operations/80034.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/operations/80034.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/operations/80034.cc (.../branches/gcc-6-branch) @@ -0,0 +1,32 @@ +// { dg-do compile } +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +namespace X { + struct Y { }; + bool operator<(Y, Y) { return false; } + template + void distance(T, T) { } +} + +int main() +{ + std::list l; + l.sort(); +} Index: libstdc++-v3/testsuite/23_containers/list/operations/78389.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc (.../branches/gcc-6-branch) @@ -0,0 +1,74 @@ +// { dg-do run { target c++11 } } + +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// 23.2.2.4 list operations [lib.list.ops] + +#include + +#include + +struct ThrowingComparator +{ + unsigned int throw_after = 0; + unsigned int count = 0; + bool operator()(int, int) { + if (++count >= throw_after) { + throw 666; + } + return true; + } +}; + +struct X +{ + X() = default; + X(int) {} +}; + +unsigned int throw_after_X = 0; +unsigned int count_X = 0; + +bool operator<(const X&, const X&) { + if (++count_X >= throw_after_X) { + throw 666; + } + return true; +} + + +int main() +{ + std::list a{1, 2, 3, 4}; + std::list b{5, 6, 7, 8, 9, 10, 11, 12}; + try { + a.merge(b, ThrowingComparator{4}); + } catch (...) { + } + VERIFY(a.size() == std::distance(a.begin(), a.end()) && + b.size() == std::distance(b.begin(), b.end())); + std::list ax{1, 2, 3, 4}; + std::list bx{5, 6, 7, 8, 9, 10, 11, 12}; + throw_after_X = 4; + try { + ax.merge(bx); + } catch (...) { + } + VERIFY(ax.size() == std::distance(ax.begin(), ax.end()) && + bx.size() == std::distance(bx.begin(), bx.end())); +} Index: libstdc++-v3/testsuite/23_containers/map/operations/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/map/operations/2.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/map/operations/2.cc (.../branches/gcc-6-branch) @@ -53,7 +53,7 @@ cit = cx.find(2L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); static_assert(std::is_same::value, "find returns iterator"); @@ -76,7 +76,7 @@ cn = cx.count(2L); VERIFY( cn == 0 ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); } void @@ -94,7 +94,12 @@ cit = cx.lower_bound(2L); VERIFY( cit != cx.end() && cit->second == '4' ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "lower_bound returns iterator"); + static_assert(std::is_same::value, + "const lower_bound returns const_iterator"); } void @@ -112,7 +117,12 @@ cit = cx.upper_bound(3L); VERIFY( cit == cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + static_assert(std::is_same::value, + "upper_bound returns iterator"); + static_assert(std::is_same::value, + "const upper_bound returns const_iterator"); } void @@ -130,10 +140,38 @@ cit = cx.equal_range(2L); VERIFY( cit.first == cit.second && cit.first != cx.end() ); - VERIFY( Cmp::count == 0); + VERIFY( Cmp::count == 0 ); + + using pair = std::pair; + static_assert(std::is_same::value, + "equal_range returns pair"); + using cpair = std::pair; + static_assert(std::is_same::value, + "const equal_range returns pair"); } +void +test06() +{ + // PR libstdc++/78273 + struct C { + bool operator()(int l, int r) const { return l < r; } + + struct Partition { }; + + bool operator()(int l, Partition) const { return l < 2; } + bool operator()(Partition, int r) const { return 4 < r; } + + using is_transparent = void; + }; + + std::map m{ {1,0}, {2,0}, {3,0}, {4, 0}, {5, 0} }; + + auto n = m.count(C::Partition{}); + VERIFY( n == 3 ); +} + int main() { @@ -142,4 +180,5 @@ test03(); test04(); test05(); + test06(); } Index: libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc =================================================================== --- a/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc (.../branches/gcc-6-branch) @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2016 Free Software Foundation, Inc. +// Copyright (C) 2015-2017 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -20,6 +20,7 @@ #include #include #include +#include #if _GLIBCXX_USE_CXX11_ABI using C = wchar_t; @@ -100,10 +101,44 @@ VERIFY(1 == v5.get_allocator().get_personality()); } +void test03() +{ + // PR libstdc++/79254 + using throw_alloc = __gnu_cxx::throw_allocator_limit; + typedef propagating_allocator alloc_type; + typedef std::basic_string test_type; + alloc_type a1(1), a2(2); + throw_alloc::set_limit(2); // Throw on third allocation (during assignment). + const C* s1 = L"a string that is longer than a small string"; + const C* s2 = L"another string that is longer than a small string"; + test_type v1(s1, a1); + test_type v2(s2, a2); + bool caught = false; + try { + v1 = v2; + } catch (__gnu_cxx::forced_error&) { + caught = true; + } + VERIFY( caught ); + VERIFY( v1 == s1 ); + VERIFY( v1.get_allocator() == a1 ); + + throw_alloc::set_limit(1); // Allow one more allocation (and no more). + test_type v3(s1, a1); + // No allocation when allocators are equal and capacity is sufficient: + VERIFY( v1.capacity() >= v3.size() ); + v1 = v3; + // No allocation when the contents fit in the small-string buffer: + v2 = L"sso"; + v1 = v2; + VERIFY( v1.get_allocator() == a2 ); +} + int main() { test01(); test02(); + test03(); return 0; } #else Index: libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc =================================================================== --- a/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc (.../branches/gcc-6-branch) @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2016 Free Software Foundation, Inc. +// Copyright (C) 2015-2017 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -20,6 +20,7 @@ #include #include #include +#include #if _GLIBCXX_USE_CXX11_ABI using C = char; @@ -100,10 +101,44 @@ VERIFY(1 == v5.get_allocator().get_personality()); } +void test03() +{ + // PR libstdc++/79254 + using throw_alloc = __gnu_cxx::throw_allocator_limit; + typedef propagating_allocator alloc_type; + typedef std::basic_string test_type; + alloc_type a1(1), a2(2); + throw_alloc::set_limit(2); // Throw on third allocation (during assignment). + const C* s1 = "a string that is longer than a small string"; + const C* s2 = "another string that is longer than a small string"; + test_type v1(s1, a1); + test_type v2(s2, a2); + bool caught = false; + try { + v1 = v2; + } catch (__gnu_cxx::forced_error&) { + caught = true; + } + VERIFY( caught ); + VERIFY( v1 == s1 ); + VERIFY( v1.get_allocator() == a1 ); + + throw_alloc::set_limit(1); // Allow one more allocation (and no more). + test_type v3(s1, a1); + // No allocation when allocators are equal and capacity is sufficient: + VERIFY( v1.capacity() >= v3.size() ); + v1 = v3; + // No allocation when the contents fit in the small-string buffer: + v2 = "sso"; + v1 = v2; + VERIFY( v1.get_allocator() == a2 ); +} + int main() { test01(); test02(); + test03(); return 0; } #else Index: libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/64351.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/64351.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/64351.cc (.../branches/gcc-6-branch) @@ -43,10 +43,18 @@ std::mt19937 rng(8890); std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rng.seed(sequence); - rng.discard(12 * 629143 + 6); - float n = - std::generate_canonical::digits>(rng); - VERIFY( n != 1.f ); + rng.discard(12 * 629143); + std::mt19937 rng2{rng}; + for (int i = 0; i < 20; ++i) + { + float n = + std::generate_canonical::digits>(rng); + VERIFY( n != 1.f ); + + // PR libstdc++/80137 + rng2.discard(1); + VERIFY( rng == rng2 ); + } } int Index: libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc =================================================================== --- a/src/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc (.../branches/gcc-6-branch) @@ -106,9 +106,22 @@ MoveDeleted&& md3 = any_cast(any(std::move(md))); } +void test04() +{ + // PR libstdc++/69321 + struct noncopyable { + noncopyable(noncopyable const&) = delete; + }; + + any a; + auto p = any_cast(&a); + VERIFY( p == nullptr ); +} + int main() { test01(); test02(); test03(); + test04(); } Index: libstdc++-v3/testsuite/experimental/iterator/requirements.cc =================================================================== --- a/src/libstdc++-v3/testsuite/experimental/iterator/requirements.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/experimental/iterator/requirements.cc (.../branches/gcc-6-branch) @@ -20,7 +20,7 @@ // This is a compile-only test with minimal includes #include -#include +#include // No guarantee that includes this! using namespace std::experimental; @@ -56,3 +56,13 @@ tester ww; tester iw; #endif + +std::ostream& os(); + +// Ensure that contents of are defined by : +std::reverse_iterator ii; +std::move_iterator mi; +std::istream_iterator isi; +std::ostream_iterator osi(os()); +std::istreambuf_iterator isbi; +std::ostreambuf_iterator osbi(os()); Index: libstdc++-v3/testsuite/experimental/array/make_array.cc =================================================================== --- a/src/libstdc++-v3/testsuite/experimental/array/make_array.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/experimental/array/make_array.cc (.../branches/gcc-6-branch) @@ -1,7 +1,6 @@ -// { dg-options "-std=gnu++14" } -// { dg-do compile } +// { dg-do compile { target c++14 } } -// Copyright (C) 2015-2016 Free Software Foundation, Inc. +// Copyright (C) 2015-2017 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -19,6 +18,7 @@ // . #include +#include // for std::ref and std::reference_wrapper struct MoveOnly { @@ -27,7 +27,7 @@ MoveOnly& operator=(MoveOnly&&) = default; }; -int main() +void test01() { char x[42]; std::array y = std::experimental::to_array(x); @@ -45,3 +45,13 @@ = std::experimental::make_array(1,2L, 3); constexpr std::array zzz2 = std::experimental::make_array(MoveOnly{}); } + +void test02() +{ + // PR libstdc++/79195 + struct A {}; + struct B : A {}; + struct C : A {}; + auto arr = std::experimental::make_array(B{}, C{}); + static_assert(std::is_same>::value, ""); +} Index: libstdc++-v3/testsuite/17_intro/names.cc =================================================================== --- a/src/libstdc++-v3/testsuite/17_intro/names.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/17_intro/names.cc (.../branches/gcc-6-branch) @@ -0,0 +1,110 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile } + +// Define macros for some common variables names that we must not use for +// naming variables, parameters etc. in the library. +#define tmp ( +#define A ( +#define B ( +#define C ( +#define D ( +#define E ( +#define F ( +#define G ( +#define H ( +#define I ( +#define J ( +#define K ( +#define L ( +#define M ( +#define N ( +#define O ( +#define P ( +#define Q ( +#define R ( +#define S ( +#define T ( +#define U ( +#define V ( +#define W ( +#define X ( +#define Y ( +#define Z ( +#if __cplusplus >= 201103L +// defines member functions called a() and b() +#else +#define a ( +#define b ( +#endif +// and defined data members called c +#define d ( +#define e ( +#define f ( +#define g ( +#if __cplusplus >= 201402L +// defines operator ""h in C++14 +// defines operator ""i in C++14 +#else +#define h ( +#define i ( +#endif +#define j ( +#if __cplusplus >= 201103L +// defines member functions called k() +#else +#define k ( +#endif +#define l ( +#if __cplusplus >= 201103L +// defines member functions called m() and n() +#else +#define m ( +#define n ( +#endif +#define o ( +#if __cplusplus >= 201103L +// defines member functions called p() +#else +#define p ( +#endif +#define q ( +#define r ( +#if __cplusplus >= 201103L +// defines member functions called s() and t() +// and define operator ""s in C++14 +#else +#define s ( +#define t ( +#endif +#define u ( +#define v ( +#define w ( +#define x ( +#define y ( +#define z ( + +#ifdef _AIX +// See https://gcc.gnu.org/ml/libstdc++/2017-03/msg00015.html +#undef f +#undef r +#undef x +#undef y +#endif + +#include Index: libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc (.../branches/gcc-6-branch) @@ -0,0 +1,52 @@ +// { dg-do run { target c++11 } } +// { dg-options "-g -O0" } + +// Copyright (C) 2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +struct x_struct +{ + int y; +}; + +int +main () +{ + std::shared_ptr p(new int(10)); + + std::shared_ptr q(new x_struct{23}); + +// { dg-final { note-test *p 10 } } +// { dg-final { regexp-test p.get() 0x.* } } + +// { dg-final { whatis-test *p int } } +// { dg-final { whatis-test p.get() "int \*" } } + +// { dg-final { note-test *q {\{y = 23\}} } } +// { dg-final { regexp-test q.get() 0x.* } } +// { dg-final { note-test q->y 23 } } + +// { dg-final { whatis-test *q x_struct } } +// { dg-final { whatis-test q.get() "x_struct \*" } } +// { dg-final { whatis-test q->y int } } + + return 0; // Mark SPOT +} + +// { dg-final { gdb-test SPOT {} 1 } } Index: libstdc++-v3/testsuite/libstdc++-xmethods/unique_ptr.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-xmethods/unique_ptr.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-xmethods/unique_ptr.cc (.../branches/gcc-6-branch) @@ -28,14 +28,12 @@ int main () { - int *i = new int; - *i = 10; - std::unique_ptr p(i); + std::unique_ptr p(new int(10)); - x_struct *x = new x_struct; - x->y = 23; - std::unique_ptr q(x); + std::unique_ptr q(new x_struct{23}); + std::unique_ptr r(new x_struct[2]{ {46}, {69} }); + // { dg-final { note-test *p 10 } } // { dg-final { regexp-test p.get() 0x.* } } @@ -50,6 +48,15 @@ // { dg-final { whatis-test q.get() "x_struct \*" } } // { dg-final { whatis-test q->y int } } +// { dg-final { note-test r\[1] {\{y = 69\}} } } +// { dg-final { regexp-test r.get() 0x.* } } +// { dg-final { note-test r\[1].y 69 } } + +// { dg-final { whatis-test r\[1] x_struct } } +// { dg-final { whatis-test r.get() "x_struct \*" } } +// { dg-final { whatis-test r\[1].y int } } + + return 0; // Mark SPOT } Index: libstdc++-v3/testsuite/util/testsuite_allocator.h =================================================================== --- a/src/libstdc++-v3/testsuite/util/testsuite_allocator.h (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/util/testsuite_allocator.h (.../branches/gcc-6-branch) @@ -287,7 +287,7 @@ Alloc& base() { return *this; } const Alloc& base() const { return *this; } - void swap_base(Alloc& b) { swap(b, this->base()); } + void swap_base(Alloc& b) { using std::swap; swap(b, this->base()); } public: typedef typename check_consistent_alloc_value_type::value_type Index: libstdc++-v3/testsuite/20_util/pair/79141.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/pair/79141.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/pair/79141.cc (.../branches/gcc-6-branch) @@ -0,0 +1,25 @@ +// { dg-do compile { target c++11 } } + +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +int main() { + std::pair p; + p = {}; +} Index: libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc (.../branches/gcc-6-branch) @@ -0,0 +1,81 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +using std::is_same; + +template + using Rebind = typename std::allocator_traits::template rebind_alloc; + +template + struct HasRebind { + using value_type = T; + template struct rebind { using other = std::allocator; }; + }; + +static_assert(is_same, long>, + std::allocator>::value, + "nested alias template is used"); + +template + struct NoRebind0 { + using value_type = T; + }; + +static_assert(is_same, long>, + NoRebind0>::value, + "first template argument is replaced"); + +template + struct NoRebind1 { + using value_type = T; + }; + +static_assert(is_same, long>, + NoRebind1>::value, + "first template argument is replaced"); + +template + struct NoRebind2 { + using value_type = T; + }; + +static_assert(is_same, long>, + NoRebind2>::value, + "first template argument is replaced"); + +template + struct NoRebindN { + using value_type = T; + }; + +static_assert(is_same, long>, + NoRebindN>::value, + "first template argument is replaced"); +static_assert(is_same, long>, + NoRebindN>::value, + "first template argument is replaced"); + +template + struct CannotRebind { + using value_type = T; + }; +// PR libstdc++/72792 specialization of allocator_traits is still well-formed: +std::allocator_traits>::value_type v; Index: libstdc++-v3/testsuite/20_util/allocator_traits/members/pointers.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/allocator_traits/members/pointers.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/allocator_traits/members/pointers.cc (.../branches/gcc-6-branch) @@ -0,0 +1,52 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +// Non-type template param means pointer_traits::rebind can't be instantiated. +template + struct Pointer + { + using element_type = T; + Pointer(T* p = nullptr) : ptr(p) { } + T* ptr; + }; + +template + struct Alloc + { + using value_type = T; + using pointer = Pointer; + using const_pointer = Pointer; + using void_pointer = Pointer; + using const_void_pointer = Pointer; + + pointer allocate(std::size_t n) + { return std::allocator().allocate(n); } + + void allocate(pointer p, std::size_t n) + { return std::allocator().deallocate(p, n); } + }; + +// The nested pointer types in Alloc should be found without attempting to +// instantiate pointer_traits::rebind (which would fail): +std::allocator_traits>::pointer p; +std::allocator_traits>::const_pointer cp; +std::allocator_traits>::void_pointer vp; +std::allocator_traits>::const_void_pointer cvp; Index: libstdc++-v3/testsuite/20_util/pointer_traits/rebind.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/pointer_traits/rebind.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/pointer_traits/rebind.cc (.../branches/gcc-6-branch) @@ -0,0 +1,68 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +using std::is_same; + +template + using Rebind = typename std::pointer_traits::template rebind; + +template + struct HasRebind { + template using rebind = U*; + }; + +static_assert(is_same, long>, + long*>::value, + "nested alias template is used"); + +template struct NoRebind0 { }; + +static_assert(is_same, long>, + NoRebind0>::value, + "first template argument is replaced"); + +template struct NoRebind1 { }; + +static_assert(is_same, long>, + NoRebind1>::value, + "first template argument is replaced"); + +template struct NoRebind2 { }; + +static_assert(is_same, long>, + NoRebind2>::value, + "first template argument is replaced"); + +template struct NoRebindN { }; + +static_assert(is_same, long>, + NoRebindN>::value, + "first template argument is replaced"); +static_assert(is_same, long>, + NoRebindN>::value, + "first template argument is replaced"); + +template + struct CannotRebind { + using element_type = T; + }; +// PR libstdc++/72793 specialization of pointer_traits is still well-formed: +std::pointer_traits>::element_type e; Index: libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc (.../branches/gcc-6-branch) @@ -0,0 +1,42 @@ +// { dg-do run { target c++14 } } + +// Copyright (C) 2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + + +// NOTE: This makes use of the fact that we know how moveable +// is implemented on tuple. If the implementation changed +// this test may begin to fail. + +#include +#include +#include + +using std::experimental::any; + +void test01() +{ + std::tuple t(std::allocator_arg, + std::allocator{}); + VERIFY(std::get<0>(t).empty()); + VERIFY(std::get<1>(t).empty()); +} + +int main() +{ + test01(); +} Index: libstdc++-v3/acinclude.m4 =================================================================== --- a/src/libstdc++-v3/acinclude.m4 (.../tags/gcc_6_3_0_release) +++ b/src/libstdc++-v3/acinclude.m4 (.../branches/gcc-6-branch) @@ -2304,7 +2304,8 @@ AC_MSG_CHECKING([for obsolete isnan function in ]) AC_CACHE_VAL(glibcxx_cv_obsolete_isnan, [ AC_COMPILE_IFELSE([AC_LANG_SOURCE( - [#include + [#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS + #include #undef isnan namespace std { using ::isnan; Index: configure.ac =================================================================== --- a/src/configure.ac (.../tags/gcc_6_3_0_release) +++ b/src/configure.ac (.../branches/gcc-6-branch) @@ -819,6 +819,9 @@ *-*-vxworks*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + aarch64*-*-freebsd*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; alpha*-*-*vms*) noconfigdirs="$noconfigdirs ${libgcj}" ;; Index: ChangeLog =================================================================== --- a/src/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,11 @@ +2017-01-09 Andreas Tobler + + Backport from mainline + 2016-10-10 Andreas Tobler + + * configure.ac: Add aarch64-*-freebsd*. + * configure: Regenerate. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libatomic/ChangeLog =================================================================== --- a/src/libatomic/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/libatomic/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,11 @@ +2017-02-07 Szabolcs Nagy + + Backport from mainline: + 2017-01-30 Szabolcs Nagy + + PR target/78945 + * config/arm/exch_n.c (libat_exchange): Check __ARM_FEATURE_SIMD32. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libatomic/config/arm/exch_n.c =================================================================== --- a/src/libatomic/config/arm/exch_n.c (.../tags/gcc_6_3_0_release) +++ b/src/libatomic/config/arm/exch_n.c (.../branches/gcc-6-branch) @@ -29,7 +29,7 @@ /* When using STREX to implement sub-word exchange, we can do much better than the compiler by using the APSR.GE and APSR.C flags. */ -#if !DONE && HAVE_STREX && !HAVE_STREXBH && N == 2 +#if !DONE && __ARM_FEATURE_SIMD32 && HAVE_STREX && !HAVE_STREXBH && N == 2 UTYPE SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel) { @@ -79,7 +79,7 @@ #endif /* !HAVE_STREXBH && N == 2 */ -#if !DONE && HAVE_STREX && !HAVE_STREXBH && N == 1 +#if !DONE && __ARM_FEATURE_SIMD32 && HAVE_STREX && !HAVE_STREXBH && N == 1 UTYPE SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel) { Index: config/ax_check_define.m4 =================================================================== --- a/src/config/ax_check_define.m4 (.../tags/gcc_6_3_0_release) +++ b/src/config/ax_check_define.m4 (.../branches/gcc-6-branch) @@ -0,0 +1,92 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_define.html +# =========================================================================== +# +# SYNOPSIS +# +# AC_CHECK_DEFINE([symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT]) +# AX_CHECK_DEFINE([includes],[symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT]) +# +# DESCRIPTION +# +# Complements AC_CHECK_FUNC but it does not check for a function but for a +# define to exist. Consider a usage like: +# +# AC_CHECK_DEFINE(__STRICT_ANSI__, CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500") +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 8 + +AU_ALIAS([AC_CHECK_DEFINED], [AC_CHECK_DEFINE]) +AC_DEFUN([AC_CHECK_DEFINE],[ +AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$1])dnl +AC_CACHE_CHECK([for $1 defined], ac_var, +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ + #ifdef $1 + int ok; + #else + choke me + #endif +]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)])) +AS_IF([test AS_VAR_GET(ac_var) != "no"], [$2], [$3])dnl +AS_VAR_POPDEF([ac_var])dnl +]) + +AU_ALIAS([AX_CHECK_DEFINED], [AX_CHECK_DEFINE]) +AC_DEFUN([AX_CHECK_DEFINE],[ +AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2_$1])dnl +AC_CACHE_CHECK([for $2 defined in $1], ac_var, +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$1>]], [[ + #ifdef $2 + int ok; + #else + choke me + #endif +]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)])) +AS_IF([test AS_VAR_GET(ac_var) != "no"], [$3], [$4])dnl +AS_VAR_POPDEF([ac_var])dnl +]) + +AC_DEFUN([AX_CHECK_FUNC], +[AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl +AC_CACHE_CHECK([for $2], ac_var, +dnl AC_LANG_FUNC_LINK_TRY +[AC_LINK_IFELSE([AC_LANG_PROGRAM([$1 + #undef $2 + char $2 ();],[ + char (*f) () = $2; + return f != $2; ])], + [AS_VAR_SET(ac_var, yes)], + [AS_VAR_SET(ac_var, no)])]) +AS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl +AS_VAR_POPDEF([ac_var])dnl +])# AC_CHECK_FUNC Index: config/ChangeLog =================================================================== --- a/src/config/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/config/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,8 @@ +2017-01-24 Uros Bizjak + + PR target/78478 + * ax_check_define.m4: New file. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: configure =================================================================== --- a/src/configure (.../tags/gcc_6_3_0_release) +++ b/src/configure (.../branches/gcc-6-branch) @@ -3483,6 +3483,9 @@ *-*-vxworks*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + aarch64*-*-freebsd*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; alpha*-*-*vms*) noconfigdirs="$noconfigdirs ${libgcj}" ;; Index: libgcc/config.host =================================================================== --- a/src/libgcc/config.host (.../tags/gcc_6_3_0_release) +++ b/src/libgcc/config.host (.../branches/gcc-6-branch) @@ -333,6 +333,11 @@ tmake_file="${tmake_file} ${cpu_type}/t-aarch64" tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" ;; +aarch64*-*-freebsd*) + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} ${cpu_type}/t-aarch64" + tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" + ;; aarch64*-*-linux*) extra_parts="$extra_parts crtfastmath.o" md_unwind_header=aarch64/linux-unwind.h Index: libgcc/ChangeLog =================================================================== --- a/src/libgcc/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/libgcc/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,15 @@ +2017-04-07 Alan Modra + + PR target/45053 + * config/rs6000/t-crtstuff (CRTSTUFF_T_CFLAGS): Add -O2. + +2017-01-09 Andreas Tobler + + Backport from mainline + 2016-10-10 Andreas Tobler + + * config.host: Add support for aarch64-*-freebsd*. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: libgcc/config/rs6000/t-crtstuff =================================================================== --- a/src/libgcc/config/rs6000/t-crtstuff (.../tags/gcc_6_3_0_release) +++ b/src/libgcc/config/rs6000/t-crtstuff (.../branches/gcc-6-branch) @@ -1,3 +1,6 @@ # If .sdata is enabled __CTOR_{LIST,END}__ go into .sdata instead of # .ctors. -CRTSTUFF_T_CFLAGS = -msdata=none +# Do not build crtend.o with -Os as that can result in references to +# out-of-line register save/restore functions, which may be unresolved +# as crtend.o is linked after libgcc.a. See PR45053. +CRTSTUFF_T_CFLAGS = -msdata=none -O2 Index: gcc/tree-vrp.c =================================================================== --- a/src/gcc/tree-vrp.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-vrp.c (.../branches/gcc-6-branch) @@ -2481,7 +2481,20 @@ else if (min_op0) wmin = min_op0; else if (min_op1) - wmin = minus_p ? wi::neg (min_op1) : min_op1; + { + if (minus_p) + { + wmin = wi::neg (min_op1); + + /* Check for overflow. */ + if (sgn == SIGNED && wi::neg_p (min_op1) && wi::neg_p (wmin)) + min_ovf = 1; + else if (sgn == UNSIGNED && wi::ne_p (min_op1, 0)) + min_ovf = -1; + } + else + wmin = min_op1; + } else wmin = wi::shwi (0, prec); @@ -2509,7 +2522,20 @@ else if (max_op0) wmax = max_op0; else if (max_op1) - wmax = minus_p ? wi::neg (max_op1) : max_op1; + { + if (minus_p) + { + wmax = wi::neg (max_op1); + + /* Check for overflow. */ + if (sgn == SIGNED && wi::neg_p (max_op1) && wi::neg_p (wmax)) + max_ovf = 1; + else if (sgn == UNSIGNED && wi::ne_p (max_op1, 0)) + max_ovf = -1; + } + else + wmax = max_op1; + } else wmax = wi::shwi (0, prec); @@ -2651,8 +2677,17 @@ min = build_symbolic_expr (expr_type, sym_min_op0, neg_min_op0, min); else if (sym_min_op1) - min = build_symbolic_expr (expr_type, sym_min_op1, - neg_min_op1 ^ minus_p, min); + { + /* We may not negate if that might introduce + undefined overflow. */ + if (! minus_p + || neg_min_op1 + || TYPE_OVERFLOW_WRAPS (expr_type)) + min = build_symbolic_expr (expr_type, sym_min_op1, + neg_min_op1 ^ minus_p, min); + else + min = NULL_TREE; + } /* Likewise for the upper bound. */ if (sym_max_op0 == sym_max_op1) @@ -2661,8 +2696,17 @@ max = build_symbolic_expr (expr_type, sym_max_op0, neg_max_op0, max); else if (sym_max_op1) - max = build_symbolic_expr (expr_type, sym_max_op1, - neg_max_op1 ^ minus_p, max); + { + /* We may not negate if that might introduce + undefined overflow. */ + if (! minus_p + || neg_max_op1 + || TYPE_OVERFLOW_WRAPS (expr_type)) + max = build_symbolic_expr (expr_type, sym_max_op1, + neg_max_op1 ^ minus_p, max); + else + max = NULL_TREE; + } } else { @@ -7057,8 +7101,7 @@ static enum ssa_prop_result vrp_visit_assignment_or_call (gimple *stmt, tree *output_p) { - tree def, lhs; - ssa_op_iter iter; + tree lhs; enum gimple_code code = gimple_code (stmt); lhs = gimple_get_lhs (stmt); @@ -7175,8 +7218,7 @@ } /* Every other statement produces no useful ranges. */ - FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF) - set_value_range_to_varying (get_value_range (def)); + set_defs_to_varying (stmt); return SSA_PROP_VARYING; } Index: gcc/tree-chkp.c =================================================================== --- a/src/gcc/tree-chkp.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-chkp.c (.../branches/gcc-6-branch) @@ -2215,6 +2215,7 @@ gimple *stmt; tree fndecl = gimple_call_fndecl (call); unsigned int retflags; + tree lhs = gimple_call_lhs (call); /* To avoid fixing alloca expands in targets we handle it separately. */ @@ -2224,9 +2225,8 @@ || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA_WITH_ALIGN)) { tree size = gimple_call_arg (call, 0); - tree lb = gimple_call_lhs (call); gimple_stmt_iterator iter = gsi_for_stmt (call); - bounds = chkp_make_bounds (lb, size, &iter, true); + bounds = chkp_make_bounds (lhs, size, &iter, true); } /* We know bounds returned by set_bounds builtin call. */ else if (fndecl @@ -2279,9 +2279,10 @@ bounds = chkp_find_bounds (gimple_call_arg (call, argno), &iter); } - else if (chkp_call_returns_bounds_p (call)) + else if (chkp_call_returns_bounds_p (call) + && BOUNDED_P (lhs)) { - gcc_assert (TREE_CODE (gimple_call_lhs (call)) == SSA_NAME); + gcc_assert (TREE_CODE (lhs) == SSA_NAME); /* In general case build checker builtin call to obtain returned bounds. */ @@ -2308,7 +2309,7 @@ print_gimple_stmt (dump_file, call, 0, TDF_VOPS|TDF_MEMSYMS); } - bounds = chkp_maybe_copy_and_register_bounds (gimple_call_lhs (call), bounds); + bounds = chkp_maybe_copy_and_register_bounds (lhs, bounds); return bounds; } @@ -3599,8 +3600,8 @@ break; case PARM_DECL: - gcc_unreachable (); - bounds = chkp_get_bound_for_parm (ptr_src); + /* Handled above but failed. */ + bounds = chkp_get_invalid_op_bounds (); break; case TARGET_MEM_REF: @@ -3662,6 +3663,8 @@ break; case INTEGER_CST: + case COMPLEX_CST: + case VECTOR_CST: if (integer_zerop (ptr_src)) bounds = chkp_get_none_bounds (); else @@ -3734,7 +3737,7 @@ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (rhs), cnt, field, val) { - if (chkp_type_has_pointer (TREE_TYPE (field))) + if (field && chkp_type_has_pointer (TREE_TYPE (field))) { tree lhs_field = chkp_build_component_ref (lhs, field); chkp_walk_pointer_assignments (lhs_field, val, arg, handler); Index: gcc/data-streamer-in.c =================================================================== --- a/src/gcc/data-streamer-in.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/data-streamer-in.c (.../branches/gcc-6-branch) @@ -181,6 +181,5 @@ streamer_read_gcov_count (struct lto_input_block *ib) { gcov_type ret = streamer_read_hwi (ib); - gcc_assert (ret >= 0); return ret; } Index: gcc/graphite-isl-ast-to-gimple.c =================================================================== --- a/src/gcc/graphite-isl-ast-to-gimple.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/graphite-isl-ast-to-gimple.c (.../branches/gcc-6-branch) @@ -1157,6 +1157,9 @@ is_valid_rename (tree rename, basic_block def_bb, basic_block use_bb, phi_node_kind phi_kind, tree old_name, basic_block old_bb) const { + if (SSA_NAME_IS_DEFAULT_DEF (rename)) + return true; + /* The def of the rename must either dominate the uses or come from a back-edge. Also the def must respect the loop closed ssa form. */ if (!is_loop_closed_ssa_use (use_bb, rename)) @@ -1212,6 +1215,7 @@ basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (rename)); if (is_valid_rename (rename, bb, new_bb, phi_kind, old_name, old_bb) && (phi_kind == close_phi + || ! bb || flow_bb_inside_loop_p (bb->loop_father, new_bb))) return rename; return NULL_TREE; @@ -1913,7 +1917,7 @@ if (is_gimple_reg (res) && scev_analyzable_p (res, region->region)) continue; - gphi *new_phi = create_phi_node (SSA_NAME_VAR (res), new_bb); + gphi *new_phi = create_phi_node (NULL_TREE, new_bb); tree new_res = create_new_def_for (res, new_phi, gimple_phi_result_ptr (new_phi)); set_rename (res, new_res); @@ -2013,7 +2017,7 @@ if (!bb_contains_loop_close_phi_nodes (bb) || !single_succ_p (bb)) bb = split_edge (e); - gphi *close_phi = create_phi_node (SSA_NAME_VAR (last_merge_name), bb); + gphi *close_phi = create_phi_node (NULL_TREE, bb); tree res = create_new_def_for (last_merge_name, close_phi, gimple_phi_result_ptr (close_phi)); set_rename (old_close_phi_name, res); @@ -2058,7 +2062,7 @@ last_merge_name = add_close_phis_to_outer_loops (last_merge_name, merge_e, old_close_phi); - gphi *merge_phi = create_phi_node (SSA_NAME_VAR (old_close_phi_name), new_merge_bb); + gphi *merge_phi = create_phi_node (NULL_TREE, new_merge_bb); tree merge_res = create_new_def_for (old_close_phi_name, merge_phi, gimple_phi_result_ptr (merge_phi)); set_rename (old_close_phi_name, merge_res); @@ -2111,7 +2115,7 @@ /* Loop close phi nodes should not be scev_analyzable_p. */ gcc_unreachable (); - gphi *new_close_phi = create_phi_node (SSA_NAME_VAR (res), new_bb); + gphi *new_close_phi = create_phi_node (NULL_TREE, new_bb); tree new_res = create_new_def_for (res, new_close_phi, gimple_phi_result_ptr (new_close_phi)); set_rename (res, new_res); @@ -2494,7 +2498,7 @@ if (virtual_operand_p (res)) continue; - gphi *new_phi = create_phi_node (SSA_NAME_VAR (res), new_bb); + gphi *new_phi = create_phi_node (NULL_TREE, new_bb); tree new_res = create_new_def_for (res, new_phi, gimple_phi_result_ptr (new_phi)); set_rename (res, new_res); Index: gcc/c-family/c-opts.c =================================================================== --- a/src/gcc/c-family/c-opts.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/c-opts.c (.../branches/gcc-6-branch) @@ -742,8 +742,13 @@ in_fnames[0] = ""; } else if (strcmp (in_fnames[0], "-") == 0) - in_fnames[0] = ""; + { + if (pch_file) + error ("cannot use %<-%> as input filename for a precompiled header"); + in_fnames[0] = ""; + } + if (out_fname == NULL || !strcmp (out_fname, "-")) out_fname = ""; Index: gcc/c-family/ChangeLog =================================================================== --- a/src/gcc/c-family/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,59 @@ +2017-05-05 Jakub Jelinek + + Backported from mainline + 2017-03-31 Jakub Jelinek + + PR c++/79572 + * c-ubsan.h (ubsan_maybe_instrument_reference): Change argument to + tree *. + * c-ubsan.c (ubsan_maybe_instrument_reference): Likewise. Handle + not just NOP_EXPR to REFERENCE_TYPE, but also INTEGER_CST with + REFERENCE_TYPE. + + 2017-02-21 Jakub Jelinek + + PR c++/79641 + * c-common.c (handle_mode_attribute): Use build_qualified_type to + preserve quals. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + * c-ada-spec.c (macro_length): Increment value instead of a pointer. + +2017-03-21 Martin Sebor + + PR c++/79548 + * c-common.c (set_underlying_type): Mark type used only when + original del is declared unused. + +2017-03-14 Marek Polacek + + PR c++/79962 + PR c++/79984 + * c-common.c (handle_nonnull_attribute): Save the result of default + conversion to the attribute list. + +2017-03-14 Richard Biener + + Backport from mainline + 2017-03-02 Richard Biener + + PR c/79756 + * c-common.c (c_common_mark_addressable_vec): Look through + C_MAYBE_CONST_EXPR. + +2017-01-10 Martin Liska + + Backport from mainline + 2017-01-05 Martin Liska + + PR pch/78970 + * c-opts.c (c_common_post_options): Reject '-' filename for a precompiled + header. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/c-family/c-common.c =================================================================== --- a/src/gcc/c-family/c-common.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/c-common.c (.../branches/gcc-6-branch) @@ -7596,7 +7596,7 @@ return NULL_TREE; } - *node = typefm; + *node = build_qualified_type (typefm, TYPE_QUALS (type)); } return NULL_TREE; @@ -9061,7 +9061,7 @@ tree arg = TREE_VALUE (args); if (arg && TREE_CODE (arg) != IDENTIFIER_NODE && TREE_CODE (arg) != FUNCTION_DECL) - arg = default_conversion (arg); + TREE_VALUE (args) = arg = default_conversion (arg); if (!get_nonnull_operand (arg, &arg_num)) { @@ -10677,6 +10677,8 @@ void c_common_mark_addressable_vec (tree t) { + if (TREE_CODE (t) == C_MAYBE_CONST_EXPR) + t = C_MAYBE_CONST_EXPR_EXPR (t); while (handled_component_p (t)) t = TREE_OPERAND (t, 0); if (!VAR_P (t) @@ -12026,7 +12028,12 @@ tt = build_variant_type_copy (tt); TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x)); TYPE_NAME (tt) = x; - TREE_USED (tt) = TREE_USED (x); + + /* Mark the type as used only when its type decl is decorated + with attribute unused. */ + if (lookup_attribute ("unused", DECL_ATTRIBUTES (x))) + TREE_USED (tt) = 1; + TREE_TYPE (x) = tt; } } Index: gcc/c-family/c-ubsan.c =================================================================== --- a/src/gcc/c-family/c-ubsan.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/c-ubsan.c (.../branches/gcc-6-branch) @@ -425,17 +425,26 @@ return fold_build2 (COMPOUND_EXPR, TREE_TYPE (op), call, op); } -/* Instrument a NOP_EXPR to REFERENCE_TYPE if needed. */ +/* Instrument a NOP_EXPR to REFERENCE_TYPE or INTEGER_CST with REFERENCE_TYPE + type if needed. */ void -ubsan_maybe_instrument_reference (tree stmt) +ubsan_maybe_instrument_reference (tree *stmt_p) { - tree op = TREE_OPERAND (stmt, 0); + tree stmt = *stmt_p; + tree op = stmt; + if (TREE_CODE (stmt) == NOP_EXPR) + op = TREE_OPERAND (stmt, 0); op = ubsan_maybe_instrument_reference_or_call (EXPR_LOCATION (stmt), op, TREE_TYPE (stmt), UBSAN_REF_BINDING); if (op) - TREE_OPERAND (stmt, 0) = op; + { + if (TREE_CODE (stmt) == NOP_EXPR) + TREE_OPERAND (stmt, 0) = op; + else + *stmt_p = op; + } } /* Instrument a CALL_EXPR to a method if needed. */ Index: gcc/c-family/c-ubsan.h =================================================================== --- a/src/gcc/c-family/c-ubsan.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/c-ubsan.h (.../branches/gcc-6-branch) @@ -28,7 +28,7 @@ extern tree ubsan_instrument_bounds (location_t, tree, tree *, bool); extern bool ubsan_array_ref_instrumented_p (const_tree); extern void ubsan_maybe_instrument_array_ref (tree *, bool); -extern void ubsan_maybe_instrument_reference (tree); +extern void ubsan_maybe_instrument_reference (tree *); extern void ubsan_maybe_instrument_member_call (tree, bool); /* Declare this here as well as in ubsan.h. */ Index: gcc/c-family/c-ada-spec.c =================================================================== --- a/src/gcc/c-family/c-ada-spec.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c-family/c-ada-spec.c (.../branches/gcc-6-branch) @@ -72,7 +72,7 @@ if (macro->fun_like) { - param_len++; + (*param_len)++; for (i = 0; i < macro->paramc; i++) { cpp_hashnode *param = macro->params[i]; Index: gcc/ipa-polymorphic-call.c =================================================================== --- a/src/gcc/ipa-polymorphic-call.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ipa-polymorphic-call.c (.../branches/gcc-6-branch) @@ -463,13 +463,13 @@ /* Check that type is within range. */ if (offset < 0) return false; - if (TYPE_SIZE (outer_type) && TYPE_SIZE (otr_type) - && TREE_CODE (TYPE_SIZE (outer_type)) == INTEGER_CST - && TREE_CODE (TYPE_SIZE (otr_type)) == INTEGER_CST - && wi::ltu_p (wi::to_offset (TYPE_SIZE (outer_type)), - (wi::to_offset (TYPE_SIZE (otr_type)) + offset))) - return false; + /* PR ipa/71207 + As OUTER_TYPE can be a type which has a diamond virtual inheritance, + it's not necessary that INNER_TYPE will fit within OUTER_TYPE with + a given offset. It can happen that INNER_TYPE also contains a base object, + however it would point to the same instance in the OUTER_TYPE. */ + context.offset = offset; context.outer_type = TYPE_MAIN_VARIANT (outer_type); context.maybe_derived_type = false; Index: gcc/c/ChangeLog =================================================================== --- a/src/gcc/c/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,33 @@ +2017-05-05 Jakub Jelinek + + Backported from mainline + 2017-03-21 Jakub Jelinek + + PR c/80097 + * c-typeck.c (build_binary_op): Add EXCESS_PRECISION_EXPR only around + optional COMPOUND_EXPR with ubsan instrumentation. + + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * c-parser.c (c_parser_omp_target): For -fopenmp-simd + ignore #pragma omp target even when not followed by identifier. + +2017-02-15 Jakub Jelinek + + Backported from mainline + 2017-02-09 Jakub Jelinek + + PR c/79431 + * c-parser.c (c_parser_omp_declare_target): Don't invoke + symtab_node::get on automatic variables. + +2016-12-21 Jakub Jelinek + + PR c/77767 + * c-decl.c (grokdeclarator): If *expr is non-NULL, append expression + to *expr instead of overwriting it. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/c/c-parser.c =================================================================== --- a/src/gcc/c/c-parser.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c/c-parser.c (.../branches/gcc-6-branch) @@ -15180,7 +15180,7 @@ if (context != pragma_stmt && context != pragma_compound) { c_parser_error (parser, "expected declaration specifiers"); - c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL); + c_parser_skip_to_pragma_eol (parser, false); return false; } @@ -16212,6 +16212,11 @@ return c_parser_omp_target_update (loc, parser, context); } } + if (!flag_openmp) /* flag_openmp_simd */ + { + c_parser_skip_to_pragma_eol (parser, false); + return false; + } stmt = make_node (OMP_TARGET); TREE_TYPE (stmt) = void_type_node; @@ -16560,8 +16565,11 @@ } if (!at1) { + DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t)); + if (TREE_CODE (t) != FUNCTION_DECL && !is_global_var (t)) + continue; + symtab_node *node = symtab_node::get (t); - DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t)); if (node != NULL) { node->offloadable = 1; Index: gcc/c/c-typeck.c =================================================================== --- a/src/gcc/c/c-typeck.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c/c-typeck.c (.../branches/gcc-6-branch) @@ -11627,8 +11627,6 @@ else if (TREE_CODE (ret) != INTEGER_CST && int_operands && !in_late_binary_op) ret = note_integer_operands (ret); - if (semantic_result_type) - ret = build1 (EXCESS_PRECISION_EXPR, semantic_result_type, ret); protected_set_expr_location (ret, location); if (instrument_expr != NULL) @@ -11635,6 +11633,10 @@ ret = fold_build2 (COMPOUND_EXPR, TREE_TYPE (ret), instrument_expr, ret); + if (semantic_result_type) + ret = build1_loc (location, EXCESS_PRECISION_EXPR, + semantic_result_type, ret); + return ret; } Index: gcc/c/c-decl.c =================================================================== --- a/src/gcc/c/c-decl.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/c/c-decl.c (.../branches/gcc-6-branch) @@ -5400,11 +5400,21 @@ if (TREE_CODE (type) == ERROR_MARK) return error_mark_node; if (expr == NULL) - expr = &expr_dummy; + { + expr = &expr_dummy; + expr_dummy = NULL_TREE; + } if (expr_const_operands == NULL) expr_const_operands = &expr_const_operands_dummy; - *expr = declspecs->expr; + if (declspecs->expr) + { + if (*expr) + *expr = build2 (COMPOUND_EXPR, TREE_TYPE (declspecs->expr), *expr, + declspecs->expr); + else + *expr = declspecs->expr; + } *expr_const_operands = declspecs->expr_const_operands; if (decl_context == FUNCDEF) Index: gcc/cgraph.c =================================================================== --- a/src/gcc/cgraph.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cgraph.c (.../branches/gcc-6-branch) @@ -1413,9 +1413,24 @@ if (skip_bounds) new_stmt = chkp_copy_call_skip_bounds (new_stmt); + tree old_fntype = gimple_call_fntype (e->call_stmt); gimple_call_set_fndecl (new_stmt, e->callee->decl); - gimple_call_set_fntype (new_stmt, gimple_call_fntype (e->call_stmt)); + cgraph_node *origin = e->callee; + while (origin->clone_of) + origin = origin->clone_of; + if ((origin->former_clone_of + && old_fntype == TREE_TYPE (origin->former_clone_of)) + || old_fntype == TREE_TYPE (origin->decl)) + gimple_call_set_fntype (new_stmt, TREE_TYPE (e->callee->decl)); + else + { + bitmap skip = e->callee->clone.combined_args_to_skip; + tree t = cgraph_build_function_type_skip_args (old_fntype, skip, + false); + gimple_call_set_fntype (new_stmt, t); + } + if (gimple_vdef (new_stmt) && TREE_CODE (gimple_vdef (new_stmt)) == SSA_NAME) SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt; Index: gcc/cgraph.h =================================================================== --- a/src/gcc/cgraph.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cgraph.h (.../branches/gcc-6-branch) @@ -2272,6 +2272,8 @@ void tree_function_versioning (tree, tree, vec *, bool, bitmap, bool, bitmap, basic_block); +tree cgraph_build_function_type_skip_args (tree orig_type, bitmap args_to_skip, + bool skip_return); /* In cgraphbuild.c */ int compute_call_stmt_bb_frequency (tree, basic_block bb); Index: gcc/DATESTAMP =================================================================== --- a/src/gcc/DATESTAMP (.../tags/gcc_6_3_0_release) +++ b/src/gcc/DATESTAMP (.../branches/gcc-6-branch) @@ -1 +1 @@ -20161221 +20170510 Index: gcc/postreload.c =================================================================== --- a/src/gcc/postreload.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/postreload.c (.../branches/gcc-6-branch) @@ -93,6 +93,11 @@ basic_block insn_bb = BLOCK_FOR_INSN (insn); unsigned insn_bb_succs = EDGE_COUNT (insn_bb->succs); + /* If NO_FUNCTION_CSE has been set by the target, then we should not try + to cse function calls. */ + if (NO_FUNCTION_CSE && CALL_P (insn)) + return false; + if (GET_CODE (body) == SET) { int count = 0; Index: gcc/value-prof.c =================================================================== --- a/src/gcc/value-prof.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/value-prof.c (.../branches/gcc-6-branch) @@ -384,7 +384,17 @@ break; } for (i = 0; i < hist->n_counters; i++) - streamer_write_gcov_count (ob, hist->hvalue.counters[i]); + { + /* When user uses an unsigned type with a big value, constant converted + to gcov_type (a signed type) can be negative. */ + gcov_type value = hist->hvalue.counters[i]; + if (hist->type == HIST_TYPE_SINGLE_VALUE && i == 0) + ; + else + gcc_assert (value >= 0); + + streamer_write_gcov_count (ob, value); + } if (hist->hvalue.next) stream_out_histogram_value (ob, hist->hvalue.next); } @@ -1376,7 +1386,13 @@ gimple_call_set_fndecl (dcall_stmt, direct_call->decl); dflags = flags_from_decl_or_type (direct_call->decl); if ((dflags & ECF_NORETURN) != 0) - gimple_call_set_lhs (dcall_stmt, NULL_TREE); + { + tree lhs = gimple_call_lhs (dcall_stmt); + if (lhs + && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST + && !TREE_ADDRESSABLE (TREE_TYPE (lhs))) + gimple_call_set_lhs (dcall_stmt, NULL_TREE); + } gsi_insert_before (&gsi, dcall_stmt, GSI_SAME_STMT); /* Fix CFG. */ Index: gcc/tree-ssa-strlen.c =================================================================== --- a/src/gcc/tree-ssa-strlen.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-ssa-strlen.c (.../branches/gcc-6-branch) @@ -1834,6 +1834,9 @@ { gimple *stmt = gsi_stmt (*gsi); tree lhs = gimple_call_lhs (stmt); + if (lhs == NULL_TREE) + return; + gcc_assert (get_stridx (lhs) == 0); int idx = new_stridx (lhs); tree length = NULL_TREE; Index: gcc/tree.c =================================================================== --- a/src/gcc/tree.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree.c (.../branches/gcc-6-branch) @@ -1675,13 +1675,8 @@ bool cst_and_fits_in_hwi (const_tree x) { - if (TREE_CODE (x) != INTEGER_CST) - return false; - - if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT) - return false; - - return TREE_INT_CST_NUNITS (x) == 1; + return (TREE_CODE (x) == INTEGER_CST + && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x))); } /* Build a newly constructed VECTOR_CST node of length LEN. */ Index: gcc/internal-fn.c =================================================================== --- a/src/gcc/internal-fn.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/internal-fn.c (.../branches/gcc-6-branch) @@ -1271,8 +1271,8 @@ res = expand_expr_real_2 (&ops, NULL_RTX, wmode, EXPAND_NORMAL); rtx hipart = expand_shift (RSHIFT_EXPR, wmode, res, prec, NULL_RTX, uns); - hipart = gen_lowpart (mode, hipart); - res = gen_lowpart (mode, res); + hipart = convert_modes (mode, wmode, hipart, uns); + res = convert_modes (mode, wmode, res, uns); if (uns) /* For the unsigned multiplication, there was overflow if HIPART is non-zero. */ @@ -1305,8 +1305,8 @@ unsigned int hprec = GET_MODE_PRECISION (hmode); rtx hipart0 = expand_shift (RSHIFT_EXPR, mode, op0, hprec, NULL_RTX, uns); - hipart0 = gen_lowpart (hmode, hipart0); - rtx lopart0 = gen_lowpart (hmode, op0); + hipart0 = convert_modes (hmode, mode, hipart0, uns); + rtx lopart0 = convert_modes (hmode, mode, op0, uns); rtx signbit0 = const0_rtx; if (!uns) signbit0 = expand_shift (RSHIFT_EXPR, hmode, lopart0, hprec - 1, @@ -1313,8 +1313,8 @@ NULL_RTX, 0); rtx hipart1 = expand_shift (RSHIFT_EXPR, mode, op1, hprec, NULL_RTX, uns); - hipart1 = gen_lowpart (hmode, hipart1); - rtx lopart1 = gen_lowpart (hmode, op1); + hipart1 = convert_modes (hmode, mode, hipart1, uns); + rtx lopart1 = convert_modes (hmode, mode, op1, uns); rtx signbit1 = const0_rtx; if (!uns) signbit1 = expand_shift (RSHIFT_EXPR, hmode, lopart1, hprec - 1, @@ -1505,11 +1505,12 @@ if (loxhi >> (bitsize / 2) == 0 (if uns). */ rtx hipartloxhi = expand_shift (RSHIFT_EXPR, mode, loxhi, hprec, NULL_RTX, 0); - hipartloxhi = gen_lowpart (hmode, hipartloxhi); + hipartloxhi = convert_modes (hmode, mode, hipartloxhi, 0); rtx signbitloxhi = const0_rtx; if (!uns) signbitloxhi = expand_shift (RSHIFT_EXPR, hmode, - gen_lowpart (hmode, loxhi), + convert_modes (hmode, mode, + loxhi, 0), hprec - 1, NULL_RTX, 0); do_compare_rtx_and_jump (signbitloxhi, hipartloxhi, NE, true, hmode, @@ -1519,7 +1520,8 @@ /* res = (loxhi << (bitsize / 2)) | (hmode) lo0xlo1; */ rtx loxhishifted = expand_shift (LSHIFT_EXPR, mode, loxhi, hprec, NULL_RTX, 1); - tem = convert_modes (mode, hmode, gen_lowpart (hmode, lo0xlo1), 1); + tem = convert_modes (mode, hmode, + convert_modes (hmode, mode, lo0xlo1, 1), 1); tem = expand_simple_binop (mode, IOR, loxhishifted, tem, res, 1, OPTAB_DIRECT); Index: gcc/gcc.c =================================================================== --- a/src/gcc/gcc.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/gcc.c (.../branches/gcc-6-branch) @@ -1919,6 +1919,9 @@ /* Was the option -o passed. */ static int have_o = 0; +/* Was the option -E passed. */ +static int have_E = 0; + /* Pointer to output file name passed in with -o. */ static const char *output_file = 0; @@ -4031,6 +4034,10 @@ validated = true; break; + case OPT_E: + have_E = true; + break; + case OPT_x: spec_lang = arg; if (!strcmp (spec_lang, "none")) @@ -7692,6 +7699,17 @@ { for (int j = 0; sanitizer_opts[j].name != NULL; ++j) { + struct cl_option optb; + /* -fsanitize=all is not valid, only -fno-sanitize=all. + So don't register the positive misspelling candidates + for it. */ + if (sanitizer_opts[j].flag == ~0U && i == OPT_fsanitize_) + { + optb = *option; + optb.opt_text = opt_text = "-fno-sanitize="; + optb.cl_reject_negative = true; + option = &optb; + } /* Get one arg at a time e.g. "-fsanitize=address". */ char *with_arg = concat (opt_text, sanitizer_opts[j].name, @@ -8273,8 +8291,18 @@ { for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language)) - return cp; + { + if (name != NULL && strcmp (name, "-") == 0 + && (strcmp (cp->suffix, "@c-header") == 0 + || strcmp (cp->suffix, "@c++-header") == 0) + && !have_E) + fatal_error (input_location, + "cannot use %<-%> as input filename for a " + "precompiled header"); + return cp; + } + error ("language %s not recognized", language); return 0; } Index: gcc/generic-match-head.c =================================================================== --- a/src/gcc/generic-match-head.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/generic-match-head.c (.../branches/gcc-6-branch) @@ -33,6 +33,7 @@ #include "builtins.h" #include "dumpfile.h" #include "case-cfn-macros.h" +#include "gimplify.h" /* Routine to determine if the types T1 and T2 are effectively Index: gcc/fold-const.c =================================================================== --- a/src/gcc/fold-const.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fold-const.c (.../branches/gcc-6-branch) @@ -143,6 +143,7 @@ static tree fold_convert_const (enum tree_code, tree, tree); static tree fold_view_convert_expr (tree, tree); static bool vec_cst_ctor_to_array (tree, tree *); +static tree fold_negate_expr (location_t, tree); /* Return EXPR_LOCATION of T if it is not UNKNOWN_LOCATION. @@ -530,7 +531,7 @@ returned. */ static tree -fold_negate_expr (location_t loc, tree t) +fold_negate_expr_1 (location_t loc, tree t) { tree type = TREE_TYPE (t); tree tem; @@ -541,7 +542,7 @@ case BIT_NOT_EXPR: if (INTEGRAL_TYPE_P (type)) return fold_build2_loc (loc, PLUS_EXPR, type, TREE_OPERAND (t, 0), - build_one_cst (type)); + build_one_cst (type)); break; case INTEGER_CST: @@ -589,14 +590,14 @@ case COMPLEX_EXPR: if (negate_expr_p (t)) return fold_build2_loc (loc, COMPLEX_EXPR, type, - fold_negate_expr (loc, TREE_OPERAND (t, 0)), - fold_negate_expr (loc, TREE_OPERAND (t, 1))); + fold_negate_expr (loc, TREE_OPERAND (t, 0)), + fold_negate_expr (loc, TREE_OPERAND (t, 1))); break; case CONJ_EXPR: if (negate_expr_p (t)) return fold_build1_loc (loc, CONJ_EXPR, type, - fold_negate_expr (loc, TREE_OPERAND (t, 0))); + fold_negate_expr (loc, TREE_OPERAND (t, 0))); break; case NEGATE_EXPR: @@ -615,7 +616,7 @@ { tem = negate_expr (TREE_OPERAND (t, 1)); return fold_build2_loc (loc, MINUS_EXPR, type, - tem, TREE_OPERAND (t, 0)); + tem, TREE_OPERAND (t, 0)); } /* -(A + B) -> (-A) - B. */ @@ -623,7 +624,7 @@ { tem = negate_expr (TREE_OPERAND (t, 0)); return fold_build2_loc (loc, MINUS_EXPR, type, - tem, TREE_OPERAND (t, 1)); + tem, TREE_OPERAND (t, 1)); } } break; @@ -634,7 +635,7 @@ && !HONOR_SIGNED_ZEROS (element_mode (type)) && reorder_operands_p (TREE_OPERAND (t, 0), TREE_OPERAND (t, 1))) return fold_build2_loc (loc, MINUS_EXPR, type, - TREE_OPERAND (t, 1), TREE_OPERAND (t, 0)); + TREE_OPERAND (t, 1), TREE_OPERAND (t, 0)); break; case MULT_EXPR: @@ -649,11 +650,11 @@ tem = TREE_OPERAND (t, 1); if (negate_expr_p (tem)) return fold_build2_loc (loc, TREE_CODE (t), type, - TREE_OPERAND (t, 0), negate_expr (tem)); + TREE_OPERAND (t, 0), negate_expr (tem)); tem = TREE_OPERAND (t, 0); if (negate_expr_p (tem)) return fold_build2_loc (loc, TREE_CODE (t), type, - negate_expr (tem), TREE_OPERAND (t, 1)); + negate_expr (tem), TREE_OPERAND (t, 1)); } break; @@ -726,6 +727,19 @@ return NULL_TREE; } +/* A wrapper for fold_negate_expr_1. */ + +static tree +fold_negate_expr (location_t loc, tree t) +{ + tree type = TREE_TYPE (t); + STRIP_SIGN_NOPS (t); + tree tem = fold_negate_expr_1 (loc, t); + if (tem == NULL_TREE) + return NULL_TREE; + return fold_convert_loc (loc, type, tem); +} + /* Like fold_negate_expr, but return a NEGATE_EXPR tree, if T can not be negated in a simpler way. Also allow for T to be NULL_TREE, in which case return NULL_TREE. */ @@ -3787,6 +3801,31 @@ { tree result, bftype; + /* Attempt not to lose the access path if possible. */ + if (TREE_CODE (orig_inner) == COMPONENT_REF) + { + tree ninner = TREE_OPERAND (orig_inner, 0); + machine_mode nmode; + HOST_WIDE_INT nbitsize, nbitpos; + tree noffset; + int nunsignedp, nreversep, nvolatilep = 0; + tree base = get_inner_reference (ninner, &nbitsize, &nbitpos, + &noffset, &nmode, &nunsignedp, + &nreversep, &nvolatilep, false); + if (base == inner + && noffset == NULL_TREE + && nbitsize >= bitsize + && nbitpos <= bitpos + && bitpos + bitsize <= nbitpos + nbitsize + && !reversep + && !nreversep + && !nvolatilep) + { + inner = ninner; + bitpos -= nbitpos; + } + } + alias_set_type iset = get_alias_set (orig_inner); if (iset == 0 && get_alias_set (inner) != iset) inner = fold_build2 (MEM_REF, TREE_TYPE (inner), @@ -3881,9 +3920,19 @@ return 0; } + /* Honor the C++ memory model and mimic what RTL expansion does. */ + unsigned HOST_WIDE_INT bitstart = 0; + unsigned HOST_WIDE_INT bitend = 0; + if (TREE_CODE (lhs) == COMPONENT_REF) + { + get_bit_range (&bitstart, &bitend, lhs, &lbitpos, &offset); + if (offset != NULL_TREE) + return 0; + } + /* See if we can find a mode to refer to this field. We should be able to, but fail if we can't. */ - nmode = get_best_mode (lbitsize, lbitpos, 0, 0, + nmode = get_best_mode (lbitsize, lbitpos, bitstart, bitend, const_p ? TYPE_ALIGN (TREE_TYPE (linner)) : MIN (TYPE_ALIGN (TREE_TYPE (linner)), TYPE_ALIGN (TREE_TYPE (rinner))), @@ -8864,7 +8913,7 @@ if (save_p) { tem = save_expr (build2 (code, type, cval1, cval2)); - SET_EXPR_LOCATION (tem, loc); + protected_set_expr_location (tem, loc); return tem; } return fold_build2_loc (loc, code, type, cval1, cval2); @@ -10107,12 +10156,12 @@ } if (c3 != c1) - return fold_build2_loc (loc, BIT_IOR_EXPR, type, - fold_build2_loc (loc, BIT_AND_EXPR, type, - TREE_OPERAND (arg0, 0), - wide_int_to_tree (type, - c3)), - arg1); + { + tem = fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0)); + tem = fold_build2_loc (loc, BIT_AND_EXPR, type, tem, + wide_int_to_tree (type, c3)); + return fold_build2_loc (loc, BIT_IOR_EXPR, type, tem, arg1); + } } /* See if this can be simplified into a rotate first. If that @@ -10435,7 +10484,7 @@ /* Convert -A / -B to A / B when the type is signed and overflow is undefined. */ if ((!INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_UNDEFINED (type)) - && TREE_CODE (arg0) == NEGATE_EXPR + && TREE_CODE (op0) == NEGATE_EXPR && negate_expr_p (op1)) { if (INTEGRAL_TYPE_P (type)) @@ -14215,7 +14264,8 @@ STRIP_NOPS (sub); subtype = TREE_TYPE (sub); - if (!POINTER_TYPE_P (subtype)) + if (!POINTER_TYPE_P (subtype) + || TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (op0))) return NULL_TREE; if (TREE_CODE (sub) == ADDR_EXPR) @@ -14549,6 +14599,24 @@ &volatilep, false); core = build_fold_addr_expr_loc (loc, core); } + else if (TREE_CODE (exp) == POINTER_PLUS_EXPR) + { + core = TREE_OPERAND (exp, 0); + STRIP_NOPS (core); + *pbitpos = 0; + *poffset = TREE_OPERAND (exp, 1); + if (TREE_CODE (*poffset) == INTEGER_CST) + { + offset_int tem = wi::sext (wi::to_offset (*poffset), + TYPE_PRECISION (TREE_TYPE (*poffset))); + tem = wi::lshift (tem, LOG2_BITS_PER_UNIT); + if (wi::fits_shwi_p (tem)) + { + *pbitpos = tem.to_shwi (); + *poffset = NULL_TREE; + } + } + } else { core = exp; Index: gcc/omp-low.c =================================================================== --- a/src/gcc/omp-low.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/omp-low.c (.../branches/gcc-6-branch) @@ -2711,9 +2711,11 @@ tree name, t; gomp_task *stmt = as_a (gsi_stmt (*gsi)); - /* Ignore task directives with empty bodies. */ + /* Ignore task directives with empty bodies, unless they have depend + clause. */ if (optimize > 0 - && empty_body_p (gimple_omp_body (stmt))) + && empty_body_p (gimple_omp_body (stmt)) + && !find_omp_clause (gimple_omp_task_clauses (stmt), OMP_CLAUSE_DEPEND)) { gsi_replace (gsi, gimple_build_nop (), false); return; @@ -19225,7 +19227,9 @@ static oacc_loop * oacc_loop_discovery () { - basic_block bb; + /* Clear basic block flags, in particular BB_VISITED which we're going to use + in the following. */ + clear_bb_flags (); oacc_loop *top = new_oacc_loop_outer (current_function_decl); oacc_loop_discover_walk (top, ENTRY_BLOCK_PTR_FOR_FN (cfun)); @@ -19234,9 +19238,8 @@ that diagnostics come out in an unsurprising order. */ top = oacc_loop_sibling_nreverse (top); - /* Reset the visited flags. */ - FOR_ALL_BB_FN (bb, cfun) - bb->flags &= ~BB_VISITED; + /* Clear basic block flags again. */ + clear_bb_flags (); return top; } @@ -19889,7 +19892,9 @@ { tree t = *tp; - if (TREE_CODE (t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (t) + if (TREE_CODE (t) == VAR_DECL + && DECL_HAS_VALUE_EXPR_P (t) + && is_global_var (t) && lookup_attribute ("omp declare target link", DECL_ATTRIBUTES (t))) { *walk_subtrees = 0; Index: gcc/ipa-inline-transform.c =================================================================== --- a/src/gcc/ipa-inline-transform.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ipa-inline-transform.c (.../branches/gcc-6-branch) @@ -324,6 +324,8 @@ if (DECL_FUNCTION_PERSONALITY (callee->decl)) DECL_FUNCTION_PERSONALITY (to->decl) = DECL_FUNCTION_PERSONALITY (callee->decl); + + bool reload_optimization_node = false; if (!opt_for_fn (callee->decl, flag_strict_aliasing) && opt_for_fn (to->decl, flag_strict_aliasing)) { @@ -336,8 +338,13 @@ to->name (), to->order); DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl) = build_optimization_node (&opts); + reload_optimization_node = true; } + /* Reload global optimization flags. */ + if (reload_optimization_node && DECL_STRUCT_FUNCTION (to->decl) == cfun) + set_cfun (cfun, true); + /* If aliases are involved, redirect edge to the actual destination and possibly remove the aliases. */ if (e->callee != callee) Index: gcc/toplev.c =================================================================== --- a/src/gcc/toplev.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/toplev.c (.../branches/gcc-6-branch) @@ -1263,17 +1263,42 @@ if (targetm.chkp_bound_mode () == VOIDmode) { error_at (UNKNOWN_LOCATION, - "-fcheck-pointer-bounds is not supported for this target"); + "%<-fcheck-pointer-bounds%> is not supported for this " + "target"); flag_check_pointer_bounds = 0; } + if (flag_sanitize & SANITIZE_BOUNDS_STRICT) + { + error_at (UNKNOWN_LOCATION, + "%<-fcheck-pointer-bounds%> is not supported with " + "%<-fsanitize=bounds-strict%>"); + flag_check_pointer_bounds = 0; + } + else if (flag_sanitize & SANITIZE_BOUNDS) + { + error_at (UNKNOWN_LOCATION, + "%<-fcheck-pointer-bounds%> is not supported with " + "%<-fsanitize=bounds%>"); + flag_check_pointer_bounds = 0; + } + if (flag_sanitize & SANITIZE_ADDRESS) { error_at (UNKNOWN_LOCATION, - "-fcheck-pointer-bounds is not supported with " + "%<-fcheck-pointer-bounds%> is not supported with " "Address Sanitizer"); flag_check_pointer_bounds = 0; } + + if (flag_sanitize & SANITIZE_THREAD) + { + error_at (UNKNOWN_LOCATION, + "%<-fcheck-pointer-bounds%> is not supported with " + "Thread Sanitizer"); + + flag_check_pointer_bounds = 0; + } } /* One region RA really helps to decrease the code size. */ Index: gcc/tree-chrec.c =================================================================== --- a/src/gcc/tree-chrec.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-chrec.c (.../branches/gcc-6-branch) @@ -149,7 +149,12 @@ /* This function should never be called for chrecs of loops that do not belong to the same loop nest. */ - gcc_assert (loop0 == loop1); + if (loop0 != loop1) + { + /* It still can happen if we are not in loop-closed SSA form. */ + gcc_assert (! loops_state_satisfies_p (LOOP_CLOSED_SSA)); + return chrec_dont_know; + } if (code == PLUS_EXPR || code == POINTER_PLUS_EXPR) { @@ -211,7 +216,12 @@ chrec_fold_multiply (type, CHREC_LEFT (poly0), poly1), CHREC_RIGHT (poly0)); - gcc_assert (loop0 == loop1); + if (loop0 != loop1) + { + /* It still can happen if we are not in loop-closed SSA form. */ + gcc_assert (! loops_state_satisfies_p (LOOP_CLOSED_SSA)); + return chrec_dont_know; + } /* poly0 and poly1 are two polynomials in the same variable, {a, +, b}_x * {c, +, d}_x -> {a*c, +, a*d + b*c + b*d, +, 2*b*d}_x. */ Index: gcc/tree-ssa-sccvn.c =================================================================== --- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-6-branch) @@ -1224,8 +1224,8 @@ && tem[tem.length () - 2].opcode == MEM_REF) { vn_reference_op_t new_mem_op = &tem[tem.length () - 2]; - new_mem_op->op0 = fold_convert (TREE_TYPE (mem_op->op0), - new_mem_op->op0); + new_mem_op->op0 = wide_int_to_tree (TREE_TYPE (mem_op->op0), + new_mem_op->op0); } else gcc_assert (tem.last ().opcode == STRING_CST); @@ -1817,14 +1817,34 @@ buffer, sizeof (buffer)); if (len > 0) { - tree val = native_interpret_expr (vr->type, + tree type = vr->type; + /* Make sure to interpret in a type that has a range + covering the whole access size. */ + if (INTEGRAL_TYPE_P (vr->type) + && ref->size != TYPE_PRECISION (vr->type)) + type = build_nonstandard_integer_type (ref->size, + TYPE_UNSIGNED (type)); + tree val = native_interpret_expr (type, buffer + ((offset - offset2) / BITS_PER_UNIT), ref->size / BITS_PER_UNIT); + /* If we chop off bits because the types precision doesn't + match the memory access size this is ok when optimizing + reads but not when called from the DSE code during + elimination. */ + if (val + && type != vr->type) + { + if (! int_fits_type_p (val, vr->type)) + val = NULL_TREE; + else + val = fold_convert (vr->type, val); + } + if (val) return vn_reference_lookup_or_insert_for_pieces - (vuse, vr->set, vr->type, vr->operands, val); + (vuse, vr->set, vr->type, vr->operands, val); } } } @@ -4735,6 +4755,7 @@ walker.walk (ENTRY_BLOCK_PTR_FOR_FN (cfun)); if (walker.fail) { + scc_vn_restore_ssa_info (); free_scc_vn (); return false; } Index: gcc/data-streamer-out.c =================================================================== --- a/src/gcc/data-streamer-out.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/data-streamer-out.c (.../branches/gcc-6-branch) @@ -340,7 +340,6 @@ void streamer_write_gcov_count_stream (struct lto_output_stream *obs, gcov_type work) { - gcc_assert (work >= 0); gcc_assert ((HOST_WIDE_INT) work == work); streamer_write_hwi_stream (obs, work); } Index: gcc/cgraphunit.c =================================================================== --- a/src/gcc/cgraphunit.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cgraphunit.c (.../branches/gcc-6-branch) @@ -1193,8 +1193,16 @@ at looking at optimized away DECLs, since late_global_decl will subsequently be called from the contents of the now pruned symbol table. */ - if (!decl_function_context (node->decl)) - (*debug_hooks->late_global_decl) (node->decl); + if (VAR_P (node->decl) + && !decl_function_context (node->decl)) + { + /* We are reclaiming totally unreachable code and variables + so they effectively appear as readonly. Show that to + the debug machinery. */ + TREE_READONLY (node->decl) = 1; + node->definition = false; + (*debug_hooks->late_global_decl) (node->decl); + } node->remove (); continue; Index: gcc/ChangeLog =================================================================== --- a/src/gcc/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,1699 @@ +2017-05-10 Richard Biener + + Backport from mainline + 2017-03-17 Richard Biener + + PR middle-end/80075 + * tree-eh.c (stmt_could_throw_1_p): Only handle gimple assigns. + Properly verify the LHS before the RHS possibly claims to be + handled. + (stmt_could_throw_p): Hande gimple conds fully here. Clobbers + do not throw. + + 2017-03-21 Brad Spengler + + PR plugin/80094 + * plugin.c (htab_hash_plugin): New function. + (add_new_plugin): Use it and adjust. + (parse_plugin_arg_opt): Adjust. + (init_one_plugin): Likewise. + + 2017-03-20 Richard Biener + + PR tree-optimization/80113 + * graphite-isl-ast-to-gimple.c (copy_loop_phi_nodes): Do not + allocate extra SSA name for PHI def. + (add_close_phis_to_outer_loops): Likewise. + (add_close_phis_to_merge_points): Likewise. + (copy_loop_close_phi_args): Likewise. + (copy_cond_phi_nodes): Likewise. + + 2017-03-21 Richard Biener + + PR tree-optimization/80122 + * tree-inline.c (copy_bb): Do not expans va-arg packs or + va_arg_pack_len when the inlined call stmt requires pack + expansion itself. + * tree-inline.h (struct copy_body_data): Make call_stmt a gcall *. + + 2017-03-24 Richard Biener + + PR tree-optimization/80167 + * graphite-isl-ast-to-gimple.c + (translate_isl_ast_to_gimple::is_valid_rename): Handle default-defs + properly. + (translate_isl_ast_to_gimple::get_rename): Likewise. + + 2017-03-27 Richard Biener + + PR tree-optimization/80170 + * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Make + sure DR/SCEV didnt fold in constants we do not see when looking + at the reference base alignment. + + 2017-03-27 Richard Biener + + PR middle-end/80171 + * gimple-fold.c (fold_ctor_reference): Properly guard against + NULL return value from canonicalize_constructor_val. + +2017-05-09 Richard Biener + + Backport from mainline + 2017-03-28 Richard Biener + + PR middle-end/80222 + * gimple-fold.c (gimple_fold_indirect_ref): Do not touch + TYPE_REF_CAN_ALIAS_ALL references. + * fold-const.c (fold_indirect_ref_1): Likewise. + + 2017-04-06 Richard Biener + + PR tree-optimization/80262 + * tree-sra.c (build_ref_for_offset): Preserve address-space + information. + * tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address): + Drop useless address-space information on MEM_REF offsets. + + 2017-04-03 Richard Biener + + PR tree-optimization/80275 + * fold-const.c (split_address_to_core_and_offset): Handle + POINTER_PLUS_EXPR. + + 2017-04-06 Richard Biener + + PR tree-optimization/80334 + * tree-ssa-loop-ivopts.c (rewrite_use_address): Properly + preserve alignment of accesses. + + 2017-04-10 Richard Biener + + PR middle-end/80362 + * fold-const.c (fold_binary_loc): Look at unstripped ops when + looking for NEGATE_EXPR in -A / -B to A / B folding. + + 2017-04-25 Richard Biener + + PR tree-optimization/80492 + * alias.c (compare_base_decls): Handle registers with asm + specification conservatively. + + 2017-04-27 Richard Biener + + PR middle-end/80539 + * tree-chrec.c (chrec_fold_plus_poly_poly): Deal with not + being in loop-closed SSA form conservatively. + (chrec_fold_multiply_poly_poly): Likewise. + +2017-05-09 Jakub Jelinek + + PR testsuite/80678 + 2016-06-14 Richard Biener + + PR middle-end/71310 + PR bootstrap/71510 + * expr.h (get_bit_range): Declare. + * expr.c (get_bit_range): Export. + * fold-const.c (optimize_bit_field_compare): Use get_bit_range and + word_mode again to constrain the bitfield access. + + 2016-06-11 Segher Boessenkool + + PR middle-end/71310 + * fold-const.c (optimize_bit_field_compare): Don't try to use + word_mode unconditionally for reading the bit field, look at + DECL_BIT_FIELD_REPRESENTATIVE instead. + +2017-05-05 Jakub Jelinek + + Backported from mainline + 2017-04-25 Jakub Jelinek + + * Makefile.in (s-options): Invoke opt-gather.awk with LC_ALL=C in the + environment. + + PR rtl-optimization/80501 + * combine.c (make_compound_operation_int): Set subreg_code to SET + even for AND with mask of the sign bit of mode. + + 2017-04-12 Jakub Jelinek + + PR sanitizer/80349 + * fold-const.c (fold_binary_loc) : Convert arg0's + first argument to type. + + 2017-04-11 Jakub Jelinek + + PR rtl-optimization/80385 + * simplify-rtx.c (simplify_unary_operation_1): Don't transform + (not (neg X)) into (plus X -1) for complex or non-integral modes. + + PR libgomp/80394 + * omp-low.c (scan_omp_task): Don't optimize away empty tasks + if they have any depend clauses. + + 2017-04-04 Jakub Jelinek + Richard Biener + + PR c++/80297 + * genmatch.c (capture::gen_transform): For GENERIC unshare_expr + captures used multiple times, except for the last use. + * generic-match-head.c: Include gimplify.h. + + 2017-04-04 Jakub Jelinek + + PR target/80286 + * config/i386/i386.c (ix86_expand_args_builtin): If op has scalar + int mode, convert_modes it to mode as unsigned, otherwise use + lowpart_subreg to mode rather than SImode. + * config/i386/sse.md (ashr3, + ashr3, ashr3, 3): + Use DImode instead of SImode for the shift count operand. + * config/i386/mmx.md (mmx_ashr3, mmx_3): + Likewise. + + 2017-04-13 Jakub Jelinek + + PR debug/80321 + * dwarf2out.c (decls_for_scope): Ignore declarations of + current_function_decl in BLOCK_NONLOCALIZED_VARS. + + 2017-03-31 Jakub Jelinek + + PR debug/79255 + * dwarf2out.c (decls_for_scope): If BLOCK_NONLOCALIZED_VAR is + a FUNCTION_DECL, pass it as decl instead of origin to + process_scope_var. + + PR debug/80025 + * cselib.c (cselib_hasher::equal): Pass 0 to rtx_equal_for_cselib_1. + (rtx_equal_for_cselib_1): Add depth argument. If depth + is 128, don't look up VALUE locs and punt. Increment + depth in recursive calls when walking VALUE locs. + + 2017-03-27 Jakub Jelinek + + PR sanitizer/80168 + * asan.c (instrument_derefs): Copy over last operand from + original COMPONENT_REF to the new COMPONENT_REF with + DECL_BIT_FIELD_REPRESENTATIVE. + * ubsan.c (instrument_object_size): Likewise. + + 2017-03-24 Jakub Jelinek + + PR rtl-optimization/80112 + * loop-doloop.c (doloop_condition_get): Don't check condition + if cmp isn't SET with IF_THEN_ELSE src. + + 2017-03-22 Jakub Jelinek + + PR c++/80129 + * gimplify.c (gimplify_modify_expr_rhs) : Clear + TREE_READONLY on result if writing it more than once. + + 2017-03-09 Jakub Jelinek + + PR sanitizer/79944 + * asan.c (get_mem_refs_of_builtin_call): For BUILT_IN_ATOMIC* and + BUILT_IN_SYNC*, determine the access type from the size suffix and + always build a MEM_REF with that type. Handle forgotten + BUILT_IN_SYNC_FETCH_AND_NAND_16 and BUILT_IN_SYNC_NAND_AND_FETCH_16. + + PR target/79932 + * config/i386/avx512vlintrin.h (_mm256_cmpge_epi32_mask, + _mm256_cmpge_epi64_mask, _mm256_cmpge_epu32_mask, + _mm256_cmpge_epu64_mask, _mm256_cmple_epi32_mask, + _mm256_cmple_epi64_mask, _mm256_cmple_epu32_mask, + _mm256_cmple_epu64_mask, _mm256_cmplt_epi32_mask, + _mm256_cmplt_epi64_mask, _mm256_cmplt_epu32_mask, + _mm256_cmplt_epu64_mask, _mm256_cmpneq_epi32_mask, + _mm256_cmpneq_epi64_mask, _mm256_cmpneq_epu32_mask, + _mm256_cmpneq_epu64_mask, _mm256_mask_cmpge_epi32_mask, + _mm256_mask_cmpge_epi64_mask, _mm256_mask_cmpge_epu32_mask, + _mm256_mask_cmpge_epu64_mask, _mm256_mask_cmple_epi32_mask, + _mm256_mask_cmple_epi64_mask, _mm256_mask_cmple_epu32_mask, + _mm256_mask_cmple_epu64_mask, _mm256_mask_cmplt_epi32_mask, + _mm256_mask_cmplt_epi64_mask, _mm256_mask_cmplt_epu32_mask, + _mm256_mask_cmplt_epu64_mask, _mm256_mask_cmpneq_epi32_mask, + _mm256_mask_cmpneq_epi64_mask, _mm256_mask_cmpneq_epu32_mask, + _mm256_mask_cmpneq_epu64_mask, _mm_cmpge_epi32_mask, + _mm_cmpge_epi64_mask, _mm_cmpge_epu32_mask, _mm_cmpge_epu64_mask, + _mm_cmple_epi32_mask, _mm_cmple_epi64_mask, _mm_cmple_epu32_mask, + _mm_cmple_epu64_mask, _mm_cmplt_epi32_mask, _mm_cmplt_epi64_mask, + _mm_cmplt_epu32_mask, _mm_cmplt_epu64_mask, _mm_cmpneq_epi32_mask, + _mm_cmpneq_epi64_mask, _mm_cmpneq_epu32_mask, _mm_cmpneq_epu64_mask, + _mm_mask_cmpge_epi32_mask, _mm_mask_cmpge_epi64_mask, + _mm_mask_cmpge_epu32_mask, _mm_mask_cmpge_epu64_mask, + _mm_mask_cmple_epi32_mask, _mm_mask_cmple_epi64_mask, + _mm_mask_cmple_epu32_mask, _mm_mask_cmple_epu64_mask, + _mm_mask_cmplt_epi32_mask, _mm_mask_cmplt_epi64_mask, + _mm_mask_cmplt_epu32_mask, _mm_mask_cmplt_epu64_mask, + _mm_mask_cmpneq_epi32_mask, _mm_mask_cmpneq_epi64_mask, + _mm_mask_cmpneq_epu32_mask, _mm_mask_cmpneq_epu64_mask): Move + definitions outside of __OPTIMIZE__ guarded section. + + PR target/79932 + * config/i386/avx512bwintrin.h (_mm512_packs_epi32, + _mm512_maskz_packs_epi32, _mm512_mask_packs_epi32, + _mm512_packus_epi32, _mm512_maskz_packus_epi32, + _mm512_mask_packus_epi32): Move definitions outside of __OPTIMIZE__ + guarded section. + + 2017-03-08 Jakub Jelinek + + PR c/79940 + * gimplify.c (gimplify_omp_for): Replace index var in outer + taskloop statement with an artificial variable and add + OMP_CLAUSE_PRIVATE clause for it. + + 2017-03-07 Jakub Jelinek + + PR rtl-optimization/79901 + * config/i386/sse.md (*avx512bw_3): Renamed to + ... + (*avx512f_3): ... this. + (3 with maxmin code iterator): Use VI8_AVX2_AVX512F + iterator instead of VI8_AVX2_AVX512BW. + + PR rtl-optimization/79901 + * expr.c (expand_expr_real_2): For vector MIN/MAX, if there is no + min/max expander, expand it using expand_vec_cond_expr. + + 2017-03-03 Jakub Jelinek + + PR target/79807 + * config/i386/i386.c (ix86_expand_multi_arg_builtin): If target + is a memory operand, increase num_memory. + (ix86_expand_args_builtin): Likewise. + + 2017-03-01 Jakub Jelinek + + PR c++/79681 + * fold-const.c (make_bit_field_ref): If orig_inner is COMPONENT_REF, + attempt to use its first operand as BIT_FIELD_REF base. + + 2017-02-28 Jakub Jelinek + + PR target/79729 + * config/i386/i386.c (ix86_print_operand) : Replace + gcc_unreachable with output_operand_lossage. + + 2017-02-25 Jakub Jelinek + + PR middle-end/79396 + * tree-eh.c (operation_could_trap_p, stmt_could_throw_1_p): Handle + FMA_EXPR like tcc_binary or tcc_unary. + + 2017-02-21 Jakub Jelinek + + PR target/79570 + * sel-sched.c (moveup_expr_cached): Don't call sel_bb_head + on temporarily removed DEBUG_INSNs. + + PR target/79494 + * config/i386/i386.c (ix86_expand_split_stack_prologue): Call + make_reg_eh_region_note_nothrow_nononlocal on call_insn. + * config/rs6000/rs6000.c: Include except.h. + (rs6000_expand_split_stack_prologue): Call + make_reg_eh_region_note_nothrow_nononlocal on the call insn. + + 2017-02-20 Jakub Jelinek + + PR target/79568 + * config/i386/i386.c (ix86_expand_builtin): Handle + OPTION_MASK_ISA_AVX512VL and OPTION_MASK_ISA_64BIT in + ix86_builtins_isa[fcode].isa as a requirement of those + flags and any other flag in the bitmask. + (ix86_init_mmx_sse_builtins): Use 0 instead of + ~OPTION_MASK_ISA_64BIT as mask. + * config/i386/i386-builtin.def (bdesc_special_args, + bdesc_args): Likewise. + + 2017-02-18 Jakub Jelinek + + PR target/79559 + * config/i386/i386.c (ix86_print_operand): Use output_operand_lossage + instead of gcc_assert for K, r and R code checks. Formatting fixes. + +2017-05-05 Marek Polacek + Ramana Radhakrishnan + Jakub Jelinek + + PR target/77728 + * config/arm/arm.c: Include gimple.h. + (aapcs_layout_arg): Emit -Wpsabi note if arm_needs_doubleword_align + returns negative, increment ncrn if it returned non-zero. + (arm_needs_doubleword_align): Return int instead of bool, + ignore DECL_ALIGN of non-FIELD_DECL TYPE_FIELDS chain + members, but if there is any such non-FIELD_DECL + > PARM_BOUNDARY aligned decl, return -1 instead of false. + (arm_function_arg): Emit -Wpsabi note if arm_needs_doubleword_align + returns negative, increment nregs if it returned non-zero. + (arm_setup_incoming_varargs): Likewise. + (arm_function_arg_boundary): Emit -Wpsabi note if + arm_needs_doubleword_align returns negative, return + DOUBLEWORD_ALIGNMENT if it returned non-zero. + +2017-05-03 Uros Bizjak + + Backport from mainline + 2017-05-01 Uros Bizjak + + PR target/68491 + * config/i386/cpuid.h (__get_cpuid): Always return 0 when + __get_cpuid_max returns 0. + (__get_cpuid_count): Ditto. + +2017-04-21 Eric Botcazou + + Backport from mainline + 2017-04-19 Eric Botcazou + Jakub Jelinek + + PR tree-optimization/80426 + * tree-vrp.c (extract_range_from_binary_expr_1): For an additive + operation on symbolic operands, also compute the overflow for the + invariant part when the operation degenerates into a negation. + +2017-04-19 Georg-Johann Lay + + Backport from 2017-04-19 trunk r246997. + + PR target/80462 + * config/avr/avr.c (tree.h): Include it. + (cgraph.h): Include it. + (avr_encode_section_info): Don't warn for uninitialized progmem + variable if it's just an alias. + +2017-04-18 Georg-Johann Lay + + Backport from 2017-04-18 trunk r246966. + + PR target/79453 + * config/avr/avr.c (intl.h): Include it. + (avr_pgm_check_var_decl) [reason]: Wrap diagnostic snippets into _(). + +2017-04-12 Bill Schmidt + + Backport from mainline + 2017-04-11 Bill Schmidt + + PR target/80376 + PR target/80315 + * config/rs6000/rs6000.c (rs6000_expand_unop_builtin): Return + CONST0_RTX (mode) rather than const0_rtx where appropriate. + (rs6000_expand_binop_builtin): Likewise. + (rs6000_expand_ternop_builtin): Likewise; also add missing + vsx_xxpermdi_* variants; also fix typo (arg1 => arg2) for + vshasigma built-ins. + * doc/extend.texi: Document that vec_xxpermdi's third argument + must be a constant. + +2017-04-11 Pat Haugen + + Backport from mainline + 2017-04-07 Pat Haugen + + * rs6000/rs6000.c (vec_load_pendulum): Rename... + (vec_pairing): ...to this. + (power9_sched_reorder2): Rewrite code for pairing vector/vecload insns. + (rs6000_sched_init): Adjust for name change. + (struct rs6000_sched_context): Likewise. + (rs6000_init_sched_context): Likewise. + (rs6000_set_sched_context): Likewise. + +2017-04-11 Martin Jambor + + Backport from mainline + 2017-03-30 Martin Jambor + + PR ipa/77333 + * cgraph.h (cgraph_build_function_type_skip_args): Declare. + * cgraph.c (redirect_call_stmt_to_callee): Set gimple fntype so that + it reflects the signature changes performed at the callee side. + * cgraphclones.c (build_function_type_skip_args): Make public, renamed + to cgraph_build_function_type_skip_args. + (build_function_decl_skip_args): Adjust call to the above function. + +2017-04-08 Andreas Tobler + + Backport from mainline + 2017-04-08 Andreas Tobler + + * config/aarch64/aarch64-freebsd.h: Define MCOUNT_NAME. + Add comment for WCHAR_T. + +2017-04-07 Andreas Tobler + + Backport from mainline + 2017-04-07 Andreas Tobler + + * config/aarch64/aarch64-freebsd.h: Define WCHAR_T. + +2017-04-07 Eric Botcazou + + Backport from mainline + 2017-04-05 Eric Botcazou + + PR target/78002 + * config/aarch64/aarch64.c (aarch64_emit_probe_stack_range): Replace + ptr_mode with Pmode throughout. + * config/aarch64/aarch64.md (probe_stack_range_ + + Backport from mainline + 2017-04-07 Sebastian Huber + + * config/arm/arm.h (ARM_DEFAULT_SHORT_ENUMS): Provide default + definition. + * config/arm/arm.c (arm_default_short_enums): Use + ARM_DEFAULT_SHORT_ENUMS. + * config/arm/rtems.h (ARM_DEFAULT_SHORT_ENUMS): Define. + +2017-04-06 Uros Bizjak + + Backport from mainline + 2017-04-06 Uros Bizjak + + PR target/79733 + * config/i386/i386.c (ix86_expand_builtin) + : Determine insn operand + mode from insn data. Convert operands to insn operand mode. + Copy operands that don't satisfy insn predicate to a register. + + 2017-04-05 Uros Bizjak + + PR target/80298 + * config/i386/mmintrin.h: Add -msse target option when __SSE__ is + not defined for x86_64 target. Add -mmmx target option when __SSE2__ + is not defined. + * config/i386/mm3dnow.h: Add -msse target when __SSE__ is not defined + for x86_64 target. + +2017-04-06 Thomas Preud'homme + + PR target/80082 + * config/arm/arm-protos.h (FL_LPAE): Define macro. + (FL_FOR_ARCH7VE): Add FL_LPAE. + (arm_arch_lpae): Declare extern. + * config/arm/arm.c (arm_arch_lpae): Declare. + (arm_option_override): Define arm_arch_lpae. + * config/arm/arm.h (TARGET_HAVE_LPAE): Redefine in term of + arm_arch_lpae. + +2017-04-03 Michael Meissner + + Back port from the trunk + 2017-03-14 Michael Meissner + + PR target/79947 + * config/rs6000/rs6000.h (TARGET_FRSQRTES): Add check for + -mpowerpc-gfxopt. + +2017-03-31 Richard Sandiford + + PR tree-optimization/80218 + * tree-call-cdce.c (shrink_wrap_one_built_in_call_with_conds): + Update block frequencies and counts. + +2017-03-30 Peter Bergner + + Backport from mainline + 2017-03-30 Peter Bergner + + PR target/80246 + * config/rs6000/dfp.md (dfp_dxex_): Update mode of operand 0. + (dfp_diex_): Update mode of operand 1. + * doc/extend.texi (dxex, dxexq): Document change to return type. + (diex, diexq): Document change to argument type. + +2017-03-29 Michael Meissner + + Back port from trunk + 2017-03-21 Aaron Sawdey + + PR target/80123 + * doc/md.texi (Constraints): Document wA constraint. + * config/rs6000/constraints.md (wA): New. + * config/rs6000/rs6000.c (rs6000_debug_reg_global): Add wA reg_class. + (rs6000_init_hard_regno_mode_ok): Init wA constraint. + * config/rs6000/rs6000.h (RS6000_CONSTRAINT_wA): New. + * config/rs6000/vsx.md (vsx_splat_): Use wA constraint. + + 2017-03-16 Michael Meissner + + PR target/71294 + * config/rs6000/vsx.md (vsx_splat_, VSX_D iterator): Allow a + SPLAT operation on ISA 2.07 64-bit systems that have direct move, + but no MTVSRDD support, by doing MTVSRD and XXPERMDI. + +2017-03-29 Richard Biener + + Backport from mainline + 2017-03-28 Richard Biener + + PR tree-optimization/78644 + * tree-ssa-ccp.c (evaluate_stmt): When we may not use the value + of a simplification result we may not use it at all. + + 2017-03-27 Richard Biener + + PR tree-optimization/80181 + * tree-ssa-ccp.c (likely_value): UNDEFINED ^ X is UNDEFINED. + +2017-03-28 Marek Polacek + + Backport from mainline + 2017-03-28 Marek Polacek + + PR sanitizer/80067 + * fold-const.c (fold_comparison): Use protected_set_expr_location + instead of SET_EXPR_LOCATION. + +2017-03-27 Michael Meissner + + Back port from trunk + 2017-03-27 Michael Meissner + + PR target/78543 + * config/rs6000/rs6000.md (bswaphi2_extenddi): Combine bswap + HImode and SImode with zero extend to DImode to one insn. + (bswap2_extenddi): Likewise. + (bswapsi2_extenddi): Likewise. + (bswaphi2_extendsi): Likewise. + (bswaphi2): Combine bswap HImode and SImode into one insn. + Separate memory insns from swapping register. + (bswapsi2): Likewise. + (bswap2): Likewise. + (bswaphi2_internal): Delete, no longer used. + (bswapsi2_internal): Likewise. + (bswap2_load): Split bswap HImode/SImode into separate load, + store, and gpr<-gpr swap insns. + (bswap2_store): Likewise. + (bswaphi2_reg): Register only splitter, combine with the splitter. + (bswaphi2 splitter): Likewise. + (bswapsi2_reg): Likewise. + (bswapsi2 splitter): Likewise. + (bswapdi2): If we have the LDBRX and STDBRX instructions, split + the insns into load, store, and register/register insns. + (bswapdi2_ldbrx): Likewise. + (bswapdi2_load): Likewise. + (bswapdi2_store): Likewise. + (bswapdi2_reg): Likewise. + +2017-03-25 Uros Bizjak + + PR target/80180 + * config/i386/i386.c (ix86_expand_builtin) + : Do not expand arg0 between + flags reg setting and flags reg using instructions. + : Ditto. Use non-flags reg + clobbering instructions to zero extend op2. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-14 Martin Liska + + PR lto/66295 + * multiple_target.c (expand_target_clones): Drop local.local + flag for default implementation. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-22 Martin Liska + + PR lto/79587 + * data-streamer-in.c (streamer_read_gcov_count): Remove assert. + * data-streamer-out.c (streamer_write_gcov_count_stream): + Likewise. + * value-prof.c (stream_out_histogram_value): Make assert more + precise based on type of counter. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-03 Martin Liska + + PR lto/66295 + * multiple_target.c (create_dispatcher_calls): Redirect edge + from a caller of a dispatcher. + (expand_target_clones): Make the clones local. + (ipa_target_clone): Do both target clones and resolvers. + (ipa_dispatcher_calls): Remove the pass. + (pass_dispatcher_calls::gate): Likewise. + (make_pass_dispatcher_calls): Likewise. + * passes.def (pass_target_clone): Put as very first IPA early + pass. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-22 Martin Liska + + PR target/79906 + * config/rs6000/rs6000.c (rs6000_inner_target_options): Show + error message instead of an ICE. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-21 Martin Liska + + PR gcov-profile/80081 + * Makefile.in: Add gcov-dump and fix installation of gcov-tool. + * doc/gcc.texi: Include gcov-dump stuff. + * doc/gcov-dump.texi: New file. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + PR middle-end/79753 + * tree-chkp.c (chkp_build_returned_bound): Do not build + returned bounds for a LHS that's not a BOUNDED_P type. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + PR target/79769 + PR target/79770 + * tree-chkp.c (chkp_find_bounds_1): Handle REAL_CST, + COMPLEX_CST and VECTOR_CST. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-14 Martin Liska + + PR middle-end/79831 + * doc/invoke.texi (-Wchkp): Document the option. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-14 Martin Liska + + PR target/79892 + * multiple_target.c (create_dispatcher_calls): Check that + a target can create a function dispatcher. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-13 Martin Liska + + PR middle-end/78339 + * ipa-pure-const.c (warn_function_noreturn): If the declarations + is a CHKP clone, use original declaration. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-10 Martin Liska + + PR target/65705 + PR target/69804 + * toplev.c (process_options): Enable MPX with LSAN and UBSAN. + * tree-chkp.c (chkp_walk_pointer_assignments): Verify that + FIELD != NULL. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR tree-optimization/79631 + * tree-chkp-opt.c (chkp_is_constant_addr): Call + tree_int_cst_sign_bit just for INTEGER constants. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR target/65705 + PR target/69804 + * toplev.c (process_options): Disable -fcheck-pointer-bounds with + sanitizers. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR ipa/79761 + * tree-chkp.c (chkp_get_bound_for_parm): Get bounds for a param. + (chkp_find_bounds_1): Remove gcc_unreachable. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-03 Jan Hubicka + + PR lto/79760 + * ipa-devirt.c (maybe_record_node): Properly handle + __cxa_pure_virtual visibility. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-03 Martin Liska + + PR tree-optimization/79803 + * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Remove + assert. + (pass_loop_prefetch::execute): Disabled optimization if an + assumption about L1 cache size is not met. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-03 Martin Liska + + PR rtl-optimization/79574 + * gcse.c (struct gcse_expr): Use HOST_WIDE_INT instead of int. + (hash_scan_set): Likewise. + (dump_hash_table): Likewise. + (hoist_code): Likewise. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-17 Martin Liska + + PR rtl-optimization/79574 + * gcse.c (want_to_gcse_p): Prevent integer overflow. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-17 Martin Liska + + PR rtl-optimization/79577 + * params.def (selsched-max-sched-times): Increase minimum to 1. + +2017-03-22 Martin Liska + + Backport from mainline + 2016-06-13 Martin Liska + + PR sanitizer/71458 + * toplev.c (process_options): Do not enable -fcheck-pointer-bounds + w/ -fsanitize=bounds. + +2017-03-21 Pat Haugen + + Backport from mainline: + 2017-03-17 Pat Haugen + + PR target/79951 + * config/rs6000/rs6000.md (copysign3_fcpsgn): Test + for VECTOR_UNIT_VSX_P (mode) too. + +2017-03-21 Tamar Christina + + * config/aarch64/aarch64-simd.md (*aarch64_simd_mov) + Change ins into fmov. + +2017-03-19 Dominique d'Humieres + + PR target/71017 + * config/i386/cpuid.h: Fix another undefined behavior. + +2017-03-17 Tom de Vries + + backport from trunk: + 2017-03-17 Tom de Vries + + * gcov-dump.c (print_usage): Print bug_report_url. + +2017-03-16 Richard Biener + + Backport from mainline + 2017-02-28 Richard Biener + + PR tree-optimization/79732 + * tree-inline.c (expand_call_inline): Handle anonymous + SSA lhs properly when inlining a function without return + value. + +2017-03-15 Matthias Klose + + Backport from mainline + 2017-03-14 Martin Liska + + * Makefile.in: Install gcov-dump. + +2017-03-15 Uros Bizjak + + PR target/80019 + * config/i386/i386.c (ix86_vector_duplicate_value): Create + subreg of inner mode for values already in registers. + +2017-03-14 Aaron Sawdey + + Backport from mainline + 2017-02-28 Aaron Sawdey + + PR target/79752 + * config/rs6000/rs6000.md (peephole2 for udiv/umod): Should emit + udiv rather than div since input pattern is unsigned. + +2017-03-14 Richard Biener + + Backport from mainline + 2016-05-02 Jakub Jelinek + + PR middle-end/80004 + PR target/49244 + * gimple.c (gimple_builtin_call_types_compatible_p): Allow + char/short arguments promoted to int because of promote_prototypes. + + 2017-03-09 Richard Biener + + PR tree-optimization/79977 + * graphite-scop-detection.c (scop_detection::merge_sese): + Handle the case of extra exits to blocks dominating the entry. + + 2017-03-09 Richard Biener + + PR middle-end/79971 + * gimple-expr.c (useless_type_conversion_p): Preserve + TYPE_SATURATING for fixed-point types. + + 2017-02-22 Richard Biener + + PR tree-optimization/79666 + * tree-vrp.c (extract_range_from_binary_expr_1): Make sure + to not symbolically negate if that may introduce undefined + overflow. + + 2017-02-17 Richard Biener + + PR middle-end/79576 + * params.def (max-ssa-name-query-depth): Limit to 10. + +2017-03-07 Uros Bizjak + + Backport from mainline + 2017-03-07 Segher Boessenkool + + * config/i386/i386.c (ix86_local_alignment): Align most aggregates + of 16 bytes and more to 16 bytes, not those of 16 bits and more. + +2017-03-06 John David Anglin + + PR target/77850 + * config/pa/pa-64.h (PAD_VARARGS_DOWN): Don't pad down complex and + vector types. + +2017-03-06 Michael Meissner + + Back port from trunk + 2017-03-01 Michael Meissner + + PR target/79439 + * config/rs6000/predicates.md (current_file_function_operand): Do + not allow self calls to be local if the function is replaceable. + +2017-03-02 Uros Bizjak + + PR target/79514 + * config/i386/i386.md (*pushxf_rounded): New insn_and_split pattern. + +2017-03-01 Pat Haugen + + Backport from mainline: + 2017-02-27 Pat Haugen + + PR target/79544 + * rs6000/rs6000-c.c (struct altivec_builtin_types): Use VSRAD for + arithmetic shift of unsigned V2DI. + +2017-03-01 Martin Jambor + + Backport from mainline + 2017-02-21 Martin Jambor + + PR lto/79579 + * ipa-prop.c (ipa_prop_write_jump_functions): Bail out if no edges + have been analyzed. + +2017-02-28 Eric Botcazou + + PR target/79749 + * config/sparc/sparc.c (sparc_frame_pointer_required): Add missing + condition on optimize for the leaf function test. + +2017-02-22 Bill Schmidt + + Backport from mainline + 2017-02-17 Bill Schmidt + + PR target/79261 + * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Add + support for CODE_FOR_vsx_xxpermdi_v2d[fi]_be. + * config/rs6000/rs6000.md (reload_gpr_from_vsx): Call + generator for vsx_xxpermdi__be. + * config/rs6000/vsx.md (vsx_xxpermdi_): Remove logic to + force big-endian semantics. + (vsx_xxpermdi__be): New define_expand with same + implementation as previous version of vsx_xxpermdi_. + +2017-02-20 Marek Polacek + + Backport from mainline + 2017-02-20 Marek Polacek + + PR middle-end/79537 + * gimplify.c (gimplify_expr): Handle unused *&&L;. + + PR sanitizer/79558 + * ubsan.c (ubsan_type_descriptor): Check if TYPE_MAX_VALUE is null. + +2017-02-20 Marek Polacek + + Backport from mainline + 2017-02-17 Marek Polacek + + PR middle-end/79536 + * fold-const.c (fold_negate_expr_1): Renamed from fold_negate_expr. + (fold_negate_expr): New wrapper. + +2017-02-17 Carl Love + + Backport from mainline commit r245460 on 2017-02-14 + + PR 79545 + * config/rs6000/rs6000.c: Add case statement entry to make the xvcvuxdsp + built-in argument unsigned. + * config/rs6000/vsx.md: Fix the source and return operand types so they + match the instruction definitions from the ISA document. Fix typo + in the instruction generation for the (define_insn "vsx_xvcvuxdsp" + statement. + +2017-01-17 Julia Koval + + PR target/76731 + * config/i386/avx512fintrin.h + (_mm512_i32gather_ps): Change __addr type to void const*. + (_mm512_mask_i32gather_ps): Ditto. + (_mm512_i32gather_pd): Ditto. + (_mm512_mask_i32gather_pd): Ditto. + (_mm512_i64gather_ps): Ditto. + (_mm512_mask_i64gather_ps): Ditto. + (_mm512_i64gather_pd): Ditto. + (_mm512_mask_i64gather_pd): Ditto. + (_mm512_i32gather_epi32): Ditto. + (_mm512_mask_i32gather_epi32): Ditto. + (_mm512_i32gather_epi64): Ditto. + (_mm512_mask_i32gather_epi64): Ditto. + (_mm512_i64gather_epi32): Ditto. + (_mm512_mask_i64gather_epi32): Ditto. + (_mm512_i64gather_epi64): Ditto. + (_mm512_mask_i64gather_epi64): Ditto. + (_mm512_i32scatter_ps): Change __addr type to void*. + (_mm512_mask_i32scatter_ps): Ditto. + (_mm512_i32scatter_pd): Ditto. + (_mm512_mask_i32scatter_pd): Ditto. + (_mm512_i64scatter_ps): Ditto. + (_mm512_mask_i64scatter_ps): Ditto. + (_mm512_i64scatter_pd): Ditto. + (_mm512_mask_i64scatter_pd): Ditto. + (_mm512_i32scatter_epi32): Ditto. + (_mm512_mask_i32scatter_epi32): Ditto. + (_mm512_i32scatter_epi64): Ditto. + (_mm512_mask_i32scatter_epi64): Ditto. + (_mm512_i64scatter_epi32): Ditto. + (_mm512_mask_i64scatter_epi32): Ditto. + (_mm512_i64scatter_epi64): Ditto. + (_mm512_mask_i64scatter_epi64): Ditto. + * config/i386/avx512pfintrin.h + (_mm512_mask_prefetch_i32gather_pd): Change addr type to void const*. + (_mm512_mask_prefetch_i32gather_ps): Ditto. + (_mm512_mask_prefetch_i64gather_pd): Ditto. + (_mm512_mask_prefetch_i64gather_ps): Ditto. + (_mm512_prefetch_i32scatter_pd): Change addr type to void*. + (_mm512_prefetch_i32scatter_ps): Ditto. + (_mm512_mask_prefetch_i32scatter_pd): Ditto. + (_mm512_mask_prefetch_i32scatter_ps): Ditto. + (_mm512_prefetch_i64scatter_pd): Ditto. + (_mm512_prefetch_i64scatter_ps): Ditto. + (_mm512_mask_prefetch_i64scatter_pd): Ditto. + (_mm512_mask_prefetch_i64scatter_ps): Ditto. + * config/i386/avx512vlintrin.h + (_mm256_mmask_i32gather_ps): Change __addr type to void const*. + (_mm_mmask_i32gather_ps): Ditto. + (_mm256_mmask_i32gather_pd): Ditto. + (_mm_mmask_i32gather_pd): Ditto. + (_mm256_mmask_i64gather_ps): Ditto. + (_mm_mmask_i64gather_ps): Ditto. + (_mm256_mmask_i64gather_pd): Ditto. + (_mm_mmask_i64gather_pd): Ditto. + (_mm256_mmask_i32gather_epi32): Ditto. + (_mm_mmask_i32gather_epi32): Ditto. + (_mm256_mmask_i32gather_epi64): Ditto. + (_mm_mmask_i32gather_epi64): Ditto. + (_mm256_mmask_i64gather_epi32): Ditto. + (_mm_mmask_i64gather_epi32): Ditto. + (_mm256_mmask_i64gather_epi64): Ditto. + (_mm_mmask_i64gather_epi64): Ditto. + (_mm256_i32scatter_ps): Change __addr type to void*. + (_mm256_mask_i32scatter_ps): Ditto. + (_mm_i32scatter_ps): Ditto. + (_mm_mask_i32scatter_ps): Ditto. + (_mm256_i32scatter_pd): Ditto. + (_mm256_mask_i32scatter_pd): Ditto. + (_mm_i32scatter_pd): Ditto. + (_mm_mask_i32scatter_pd): Ditto. + (_mm256_i64scatter_ps): Ditto. + (_mm256_mask_i64scatter_ps): Ditto. + (_mm_i64scatter_ps): Ditto. + (_mm_mask_i64scatter_ps): Ditto. + (_mm256_i64scatter_pd): Ditto. + (_mm256_mask_i64scatter_pd): Ditto. + (_mm_i64scatter_pd): Ditto. + (_mm_mask_i64scatter_pd): Ditto. + (_mm256_i32scatter_epi32): Ditto. + (_mm256_mask_i32scatter_epi32): Ditto. + (_mm_i32scatter_epi32): Ditto. + (_mm_mask_i32scatter_epi32): Ditto. + (_mm256_i32scatter_epi64): Ditto. + (_mm256_mask_i32scatter_epi64): Ditto. + (_mm_i32scatter_epi64): Ditto. + (_mm_mask_i32scatter_epi64): Ditto. + (_mm256_i64scatter_epi32): Ditto. + (_mm256_mask_i64scatter_epi32): Ditto. + (_mm_i64scatter_epi32): Ditto. + (_mm_mask_i64scatter_epi32): Ditto. + (_mm256_i64scatter_epi64): Ditto. + (_mm256_mask_i64scatter_epi64): Ditto. + (_mm_i64scatter_epi64): Ditto. + (_mm_mask_i64scatter_epi64): Ditto. + * config/i386/i386-builtin-types.def (V16SF_V16SF_PCFLOAT_V16SI_HI_INT) + (V8DF_V8DF_PCDOUBLE_V8SI_QI_INT, V8SF_V8SF_PCFLOAT_V8DI_QI_INT) + (V8DF_V8DF_PCDOUBLE_V8DI_QI_INT, V16SI_V16SI_PCINT_V16SI_HI_INT) + (V8DI_V8DI_PCINT64_V8SI_QI_INT, V8SI_V8SI_PCINT_V8DI_QI_INT) + (V8DI_V8DI_PCINT64_V8DI_QI_INT, V2DF_V2DF_PCDOUBLE_V4SI_QI_INT) + (V4DF_V4DF_PCDOUBLE_V4SI_QI_INT, V2DF_V2DF_PCDOUBLE_V2DI_QI_INT) + (V4DF_V4DF_PCDOUBLE_V4DI_QI_INT, V4SF_V4SF_PCFLOAT_V4SI_QI_INT) + (V8SF_V8SF_PCFLOAT_V8SI_QI_INT, V4SF_V4SF_PCFLOAT_V2DI_QI_INT) + (V4SF_V4SF_PCFLOAT_V4DI_QI_INT, V2DI_V2DI_PCINT64_V4SI_QI_INT) + (V4DI_V4DI_PCINT64_V4SI_QI_INT, V2DI_V2DI_PCINT64_V2DI_QI_INT) + (V4DI_V4DI_PCINT64_V4DI_QI_INT, V4SI_V4SI_PCINT_V4SI_QI_INT) + (V8SI_V8SI_PCINT_V8SI_QI_INT, V4SI_V4SI_PCINT_V2DI_QI_INT) + (V4SI_V4SI_PCINT_V4DI_QI_INT, VOID_PFLOAT_HI_V16SI_V16SF_INT) + (VOID_PFLOAT_QI_V8SI_V8SF_INT, VOID_PFLOAT_QI_V4SI_V4SF_INT) + (VOID_PDOUBLE_QI_V8SI_V8DF_INT, VOID_PDOUBLE_QI_V4SI_V4DF_INT) + (VOID_PDOUBLE_QI_V4SI_V2DF_INT, VOID_PFLOAT_QI_V8DI_V8SF_INT) + (VOID_PFLOAT_QI_V4DI_V4SF_INT, VOID_PFLOAT_QI_V2DI_V4SF_INT) + (VOID_PDOUBLE_QI_V8DI_V8DF_INT, VOID_PDOUBLE_QI_V4DI_V4DF_INT) + (VOID_PDOUBLE_QI_V2DI_V2DF_INT, VOID_PINT_HI_V16SI_V16SI_INT) + (VOID_PINT_QI_V8SI_V8SI_INT, VOID_PINT_QI_V4SI_V4SI_INT) + (VOID_PLONGLONG_QI_V8SI_V8DI_INT, VOID_PLONGLONG_QI_V4SI_V4DI_INT) + (VOID_PLONGLONG_QI_V4SI_V2DI_INT, VOID_PINT_QI_V8DI_V8SI_INT) + (VOID_PINT_QI_V4DI_V4SI_INT, VOID_PINT_QI_V2DI_V4SI_INT) + (VOID_PLONGLONG_QI_V8DI_V8DI_INT, VOID_QI_V8SI_PCINT64_INT_INT) + (VOID_PLONGLONG_QI_V4DI_V4DI_INT, VOID_PLONGLONG_QI_V2DI_V2DI_INT) + (VOID_HI_V16SI_PCINT_INT_INT, VOID_QI_V8DI_PCINT64_INT_INT) + (VOID_QI_V8DI_PCINT_INT_INT): Remove. + (V16SF_V16SF_PCVOID_V16SI_HI_INT, V8DF_V8DF_PCVOID_V8SI_QI_INT) + (V8SF_V8SF_PCVOID_V8DI_QI_INT, V8DF_V8DF_PCVOID_V8DI_QI_INT) + (V16SI_V16SI_PCVOID_V16SI_HI_INT, V8DI_V8DI_PCVOID_V8SI_QI_INT) + (V8SI_V8SI_PCVOID_V8DI_QI_INT, V8DI_V8DI_PCVOID_V8DI_QI_INT) + (VOID_PVOID_HI_V16SI_V16SF_INT, VOID_PVOID_QI_V8SI_V8DF_INT) + (VOID_PVOID_QI_V8DI_V8SF_INT, VOID_PVOID_QI_V8DI_V8DF_INT) + (VOID_PVOID_HI_V16SI_V16SI_INT, VOID_PVOID_QI_V8SI_V8DI_INT) + (VOID_PVOID_QI_V8DI_V8SI_INT, VOID_PVOID_QI_V8DI_V8DI_INT) + (V2DF_V2DF_PCVOID_V4SI_QI_INT, V4DF_V4DF_PCVOID_V4SI_QI_INT) + (V2DF_V2DF_PCVOID_V2DI_QI_INT, V4DF_V4DF_PCVOID_V4DI_QI_INT + (V4SF_V4SF_PCVOID_V4SI_QI_INT, V8SF_V8SF_PCVOID_V8SI_QI_INT) + (V4SF_V4SF_PCVOID_V2DI_QI_INT, V4SF_V4SF_PCVOID_V4DI_QI_INT) + (V2DI_V2DI_PCVOID_V4SI_QI_INT, V4DI_V4DI_PCVOID_V4SI_QI_INT) + (V2DI_V2DI_PCVOID_V2DI_QI_INT, V4DI_V4DI_PCVOID_V4DI_QI_INT) + (V4SI_V4SI_PCVOID_V4SI_QI_INT, V8SI_V8SI_PCVOID_V8SI_QI_INT) + (V4SI_V4SI_PCVOID_V2DI_QI_INT, V4SI_V4SI_PCVOID_V4DI_QI_INT) + (VOID_PVOID_QI_V8SI_V8SF_INT, VOID_PVOID_QI_V4SI_V4SF_INT) + (VOID_PVOID_QI_V4SI_V4DF_INT, VOID_PVOID_QI_V4SI_V2DF_INT) + (VOID_PVOID_QI_V4DI_V4SF_INT, VOID_PVOID_QI_V2DI_V4SF_INT) + (VOID_PVOID_QI_V4DI_V4DF_INT, VOID_PVOID_QI_V2DI_V2DF_INT) + (VOID_PVOID_QI_V8SI_V8SI_INT, VOID_PVOID_QI_V4SI_V4SI_INT) + (VOID_PVOID_QI_V4SI_V4DI_INT, VOID_PVOID_QI_V4SI_V2DI_INT) + (VOID_PVOID_QI_V4DI_V4SI_INT, VOID_PVOID_QI_V2DI_V4SI_INT) + (VOID_PVOID_QI_V4DI_V4DI_INT, VOID_PVOID_QI_V2DI_V2DI_INT) + (VOID_QI_V8SI_PCVOID_INT_INT, VOID_HI_V16SI_PCVOID_INT_INT) + (VOID_QI_V8DI_PCVOID_INT_INT): Add. + * config/i386/i386.c (ix86_init_mmx_sse_builtins): Adjust builtin + definitions accordingly. + +2017-02-16 Jakub Jelinek + + Backported from mainline + 2017-02-09 Marek Polacek + + PR c/79428 + * c-parser.c (c_parser_omp_ordered): Call c_parser_skip_to_pragma_eol + instead of c_parser_skip_until_found. + +2017-02-15 Jakub Jelinek + + Backported from mainline + 2017-02-10 Jakub Jelinek + + PR tree-optimization/79411 + * tree-ssa-reassoc.c (is_reassociable_op): Return false if + stmt operands are SSA_NAMEs used in abnormal phis. + (can_reassociate_p): Return false if op is SSA_NAME used in abnormal + phis. + + 2017-02-09 Jakub Jelinek + + PR c/79431 + * gimplify.c (gimplify_adjust_omp_clauses): Ignore + "omp declare target link" attribute unless is_global_var. + * omp-low.c (find_link_var_op): Likewise. + + 2017-02-07 Jakub Jelinek + Richard Biener + + PR middle-end/79399 + * ira-int.h (struct target_ira_int): Change x_max_struct_costs_size + type from int to size_t. + * ira-costs.c (struct_costs_size): Change type from int to size_t. + + 2017-02-04 Jakub Jelinek + + PR tree-optimization/79338 + * tree-parloops.c (gather_scalar_reductions): Don't call + vect_analyze_loop_form for loop->inner before destroying loop's + loop_vinfo. + + 2017-02-02 Jakub Jelinek + + PR target/79197 + * config/rs6000/rs6000.md (*fixuns_truncdi2_fctiduz): Rename to ... + (fixuns_truncdi2): ... this, remove previous expander. Put all + conditions on a single line. + + 2017-01-31 Jakub Jelinek + + PR tree-optimization/79267 + * value-prof.c (gimple_ic): Only drop lhs for noreturn calls + if should_remove_lhs_p is true. + + 2017-01-17 Kito Cheng + Kuan-Lin Chen + + PR target/79079 + * internal-fn.c (expand_mul_overflow): Use convert_modes instead of + gen_lowpart. + +2017-02-14 Uros Bizjak + + PR target/79495 + * config/i386/i386.md (*movxf_internal): Add (o,rC) alternative. + +2017-02-14 Martin Liska + + Backport from mainline + 2017-02-13 Martin Liska + + PR c/79471 + * calls.c (expand_call): Replace XALLOCAVEC with XCNEWVEC. + +2017-02-13 Gerald Pfeifer + + Backport from mainline + 2016-12-11 Roger Pau Monné + + * config/i386/x86-64.h: Append --32 to the assembler options when + -m16 is used on non-glibc systems as well. + +2017-02-08 Segher Boessenkool + + PR translation/79397 + * config/rs6000/rs6000.opt (maltivec=le, maltivec=be): Fix spelling + of AltiVec. + +2017-02-08 Richard Biener + + Backport from mainline + 2017-02-08 Richard Biener + + PR tree-optimization/71824 + * graphite-scop-detection.c (scop_detection::build_scop_breadth): + Check all loops contained in the merged region. + + 2017-02-01 Richard Biener + + PR tree-optimization/71824 + * graphite-scop-detection.c (scop_detection::build_scop_breadth): + Verify the loops are valid in the merged SESE region. + (scop_detection::can_represent_loop_1): Check analyzing the + evolution of the number of iterations in the region succeeds. + + 2017-01-31 Richard Biener + + PR tree-optimization/77318 + * graphite-sese-to-poly.c (extract_affine): Fix assert. + (create_pw_aff_from_tree): Take loop parameter. + (add_condition_to_pbb): Pass loop of the condition to + create_pw_aff_from_tree. + +2017-02-06 Dominique d'Humieres + + PR target/71017 + * config/i386/cpuid.h: Fix undefined behavior. + +2017-02-03 Carl Love + + Backport of two commits from mainline, r244943 and r244904, + dated 017-01-26 and 2017-01-25 respectively + + * config/rs6000/rs6000-c (altivec_overloaded_builtins): Fix order + of entries for ALTIVEC_BUILTIN_VEC_PACKS. Remove bogus entries + for P8V_BUILTIN_VEC_VGBBD. + +2017-02-03 Walter Lee + + Backport from mainline + 2017-02-03 Walter Lee + + PR target/78862 + * config/tilegx/tilegx.md (tilegx_expand_prologue): Add blockage + after initial stackframe link reg save. + * config/tilepro/tilepro.md (tilepro_expand_prologue): Likewise. + +2017-02-03 Maxim Ostapenko + + PR lto/79061 + * asan.c (asan_add_global): Force has_dynamic_init to zero in LTO mode. + +2017-01-31 Bill Schmidt + + Backport from mainline + 2017-01-29 Bill Schmidt + + PR target/79268 + * config/rs6000/altivec.h (vec_xl): Revise #define. + (vec_xst): Likewise. + +2017-01-26 Eric Botcazou + + Backport from mainline + 2017-01-10 Eric Botcazou + + * expr.c (store_field): In the bitfield case, fetch the return value + from the registers before applying a single big-endian adjustment. + Always do a final load for a BLKmode value not larger than a word. + + 2017-01-09 Eric Botcazou + + * expr.c (store_field): In the bitfield case, if the value comes from + a function call and is of an aggregate type returned in registers, do + not modify the field mode; extract the value in all cases if the mode + is BLKmode and the size is not larger than a word. + +2017-01-26 Richard Biener + + * tree-vrp.c (vrp_visit_assignment_or_call): Use set_defs_to_varying. + + Backport from mainline + 2016-01-10 Richard Biener + + PR tree-optimization/79034 + * tree-call-cdce.c (shrink_wrap_one_built_in_call_with_conds): + Propagate out degenerate PHIs in the joiner. + + 2016-12-13 Richard Biener + + PR middle-end/78742 + * tree.c (cst_and_fits_in_hwi): Look if the actual value fits. + * tree-object-size.c (compute_builtin_object_size): Use + tree_fits_shwi_p. + * tree-data-ref.c (initialize_matrix_A): Remove excess assert. + +2017-01-26 Richard Biener + + Backport from mainline + 2016-09-03 Kirill Yukhin + + * ubsan.c (ubsan_use_new_style_p): Fix check for empty string. + +2017-01-24 Eric Botcazou + + PR target/77439 + * config/arm/arm.c (arm_function_ok_for_sibcall): Add back restriction + for long calls with APCS frame and VFP. + +2017-01-24 Uros Bizjak + + PR target/78478 + Revert: + 2013-11-05 Uros Bizjak + + * config/i386/rtemself.h (LONG_DOUBLE_TYPE_SIZE): New define. + +2017-01-23 Martin Liska + + Backport from mainline + 2017-01-20 Martin Liska + + PR lto/69188 + * tree-profile.c (init_ic_make_global_vars): Do not call + finalize_decl. + (gimple_init_gcov_profiler): Likewise. + +2017-01-21 Gerald Pfeifer + + Backport from mainline + 2016-12-29 Gerald Pfeifer + + * doc/extend.texi (Cilk Plus Builtins): cilkplus.org now uses + https by default. + * doc/passes.texi (Cilk Plus Transformation): Ditto. + * doc/generic.texi (Statements for C++): Ditto, and use @uref. + +2017-01-20 Bill Schmidt + + Backport from mainline + 2017-01-16 Bill Schmidt + + * config/rs6000/rs6000.c (rtx_is_swappable_p): Change + UNSPEC_VSX__XXSPLTD to require special splat handling. + +2017-01-20 Wilco Dijkstra + + Backport from mainline + PR target/77455 + * config/aarch64/aarch64.md (eh_return): Remove pattern and splitter. + * config/aarch64/aarch64.h (AARCH64_EH_STACKADJ_REGNUM): Remove. + (EH_RETURN_HANDLER_RTX): New define. + * config/aarch64/aarch64.c (aarch64_frame_pointer_required): + Force frame pointer in EH return functions. + (aarch64_expand_epilogue): Add barrier for eh_return. + (aarch64_final_eh_return_addr): Remove. + (aarch64_eh_return_handler_rtx): New function. + * config/aarch64/aarch64-protos.h (aarch64_final_eh_return_addr): + Remove. + (aarch64_eh_return_handler_rtx): New prototype. + +2017-01-20 Richard Earnshaw + + Backported from mainline + 2017-01-19 Richard Earnshaw + + PR rtl-optimization/79121 + * expr.c (expand_expr_real_2, case LSHIFT_EXPR): Look at the signedness + of the inner type when shifting an extended value. + +2017-01-20 Martin Liska + + Backport from mainline + 2017-01-13 Martin Liska + + PR ipa/79043 + * function.c (set_cfun): Add new argument force. + * function.h (set_cfun): Likewise. + * ipa-inline-transform.c (inline_call): Use the function when + strict alising from is dropped for function we inline to. + +2017-01-20 Martin Liska + + Backport from mainline + 2017-01-17 Martin Liska + + PR ipa/71207 + * ipa-polymorphic-call.c (contains_type_p): Fix wrong + assumption and add comment. + +2017-01-19 Richard Biener + + PR tree-optimization/72488 + * tree-ssa-sccvn.c (run_scc_vn): When we abort the VN make + sure to restore SSA info. + +2017-01-17 Jakub Jelinek + + PR debug/78839 + * dwarf2out.c (field_byte_offset): Restore the + PCC_BITFIELD_TYPE_MATTERS behavior for INTEGER_CST DECL_FIELD_OFFSET + and DECL_FIELD_BIT_OFFSET. Use fold_build2 instead of build2 + fold. + (analyze_variants_discr, gen_variant_part): Use fold_build2 instead + of build2 + fold. + +2017-01-17 Thomas Preud'homme + + Backport from mainline + 2016-12-07 Thomas Preud'homme + + PR rtl-optimization/78617 + * lra-remat.c (do_remat): Initialize live_hard_regs from live in + registers, also setting hard registers mapped to pseudo registers. + +2017-01-13 Christophe Lyon + + Backport from mainline r244320. + 2017-01-11 Christophe Lyon + + PR target/78253 + * config/arm/arm.c (legitimize_pic_address): Handle reference to + weak symbol. + (arm_assemble_integer): Likewise. + +2017-01-12 Bill Schmidt + + Backport from mainline + 2017-01-12 Bill Schmidt + + PR target/79044 + * config/rs6000/rs6000.c (insn_is_swappable_p): Mark + element-reversing loads and stores as not swappable. + +2017-01-11 Uros Bizjak + + * config/i386/i386.c (memory_address_length): Increase len + only when rip_relative_addr_p returns false. + +2017-01-11 Maxim Ostapenko + + Backport from mainline + 2017-01-11 Maxim Ostapenko + + PR lto/79042 + * lto-cgraph.c (lto_output_varpool_node): Pack dynamically_initialized + bit. + (input_varpool_node): Unpack dynamically_initialized bit. + * lto-streamer.h (LTO_minor_version): Bump version. + +2017-01-10 Michael Meissner + + Backport from mainline + 2016-12-30 Michael Meissner + + PR target/78900 + * config/rs6000/rs6000.c (rs6000_split_signbit): Change some + assertions. Add support for doing the signbit if the IEEE 128-bit + floating point value is in a GPR. + * config/rs6000/rs6000.md (Fsignbit): Delete. + (signbit2_dm): Delete using and just use "wa". + Update the length attribute if the value is in a GPR. + (signbit2_dm_ext): Add combiner pattern to eliminate + the sign or zero extension instruction, since the value is always + 0/1. + (signbit2_dm2): Delete using . + +2017-01-10 Martin Liska + + Backport from mainline + 2017-01-09 Martin Liska + + PR pch/78970 + * gcc.c (driver_handle_option): Handle OPT_E and set + have_E. + (lookup_compiler): Do not show error message with have_E. + +2017-01-10 Martin Liska + + Backport from mainline + 2017-01-05 Martin Liska + + PR pch/78970 + * gcc.c (lookup_compiler): Reject '-' filename for a precompiled + header. + +2017-01-10 Thomas Schwinge + + PR tree-optimization/78024 + * omp-low.c (oacc_loop_discovery): Call clear_bb_flags. + + Backport trunk r239086: + 2016-08-03 Nathan Sidwell + + * config/nvptx/nvptx.c (nvptx_declare_function_name): Round frame + size to DImode boundary. + (nvptx_propagate): Likewise. + +2017-01-10 Chung-Ju Wu + + Backport from mainline + 2016-04-28 Segher Boessenkool + + PR target/70668 + * config/nds32/nds32.md (casesi): Don't access the operands array + out of bounds. + +2017-01-09 Andreas Tobler + + Backport from mainline + 2016-10-10 Andreas Tobler + + * config.gcc: Add aarch64-*-freebsd* support. + * config.host: Likewise. + * config/aarch64/aarch64-freebsd.h: New file. + * config/aarch64/t-aarch64-freebsd: Ditto. + +2017-01-09 Bill Seurer + + Backport from mainline + 2016-12-21 Bill Seurer + + PR sanitizer/65479 + * config/rs6000/rs6000.c (rs6000_option_override_internal): Add + -fasynchronous-unwind-tables option when -fsanitize=address is + specified. + +2017-01-09 Andreas Tobler + + Backport from mainline + 2016-09-19 Richard Biener + + * dwarf2out.c (dwarf2out_late_global_decl): When being during the + early debug phase do not add locations but only const value + attributes. + + Backport from mainline + 2016-10-20 Richard Biener + + * cgraphunit.c (analyze_functions): Set node->definition to + false to signal symbol removal to debug_hooks->late_global_decl. + +2017-01-09 Andre Vieira + + Backport from mainline + 2016-12-09 Andre Vieira + + PR rtl-optimization/78255 + * gcc/postreload.c (reload_cse_simplify): Do not CSE a function if + NO_FUNCTION_CSE is true. + +2017-01-06 Wilco Dijkstra + + Backport from mainline + 2016-10-25 Wilco Dijkstra + + PR target/78041 + * config/arm/neon.md (ashldi3_neon): Add "r 0 i" and "&r r i" variants. + Remove partial overlap check for shift by 1. + (ashldi3_neon): Likewise. + +2017-01-05 Kelvin Nilsen + + Backport from mainline + 2016-07-22 Kelvin Nilsen + + * config/rs6000/rs6000.c (rs6000_option_override_internal): Add + comments to explain why certain error messages make mention of + undocumented options. + (rs6000_invalid_builtin): Change error messages to replace mention + of undocumented options with mention of the -mcpu=power9 option + that enables those undocumented options. + * config/rs6000/rs6000.h: Add macro definition of MASK_FLOAT128 + and change the macro definition of RS6000_BTM_FLOAT128 to correct + an error that was discovered during the development of this patch. + * config/rs6000/rs6000.opt: Add the Undocumented qualifier to the + mpower9-fusion, mpower9-vector, mpower9-dform, and mmodulo entries. + * doc/extend.texi (PowerPC AltiVec Built-in Functions): Modify + descriptions of built-in functions so that they depend on + -mcpu=power9 instead of on the corresponding undocumented flags. + * doc/invoke.texi (Option Summary): Remove all mention of newly + undocumented flags. + (IBM RS/6000 and PowerPC Options): Likewise. + * doc/md.texi (Constraints for Particuliar Machines): Remove all + mention of newly undocumented flags. + +2017-01-05 Andreas Krebbel + + Backport from mainline + 2016-12-22 Andreas Krebbel + + * varasm.c (build_constant_desc): Use the alignment of the var + decl instead of the original expression. + +2017-01-04 Richard Biener + + Backport from mainline + 2016-05-11 Richard Biener + + PR tree-optimization/71055 + * tree-ssa-sccvn.c (vn_reference_lookup_3): When native-interpreting + sth with precision not equal to access size verify we don't chop + off bits. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-21 Jakub Jelinek + Martin Liska + + PR driver/78863 + * gcc.c (driver::build_option_suggestions): Do not add + -fsanitize=all as a suggestion candidate. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-22 Martin Liska + + PR tree-optimization/78886 + * tree-ssa-strlen.c (handle_builtin_malloc): Return when LHS + is equal to NULL. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-13 Martin Liska + + PR tree-optimization/78428 + * expr.c (store_constructor_field): Add new arguments to the + function. + (store_constructor): Set up bitregion_end and add + gcc_unreachable to fields that have either non-constant size + or (and) offset. + +2016-12-27 Jakub Jelinek + + PR translation/78922 + * config/i386/stringop.opt: Remove. + +2016-12-21 Jakub Jelinek + + Backported from mainline + 2016-12-13 Jakub Jelinek + + PR ipa/77905 + * ipa-pure-const.c (cdtor_p): Return true for + DECL_STATIC_{CON,DE}STRUCTOR even when it is + DECL_LOOPING_CONST_OR_PURE_P. + 2016-12-21 Release Manager * GCC 6.3.0 released. @@ -68,11 +1768,11 @@ Backport from mainline 2016-11-07 Bernd Schmidt - PR rtl-optimization/77309 - * combine.c (make_compound_operation): Allow EQ for IN_CODE, and - don't assume an equality comparison for plain COMPARE. - (simplify_comparison): Pass a more accurate code to - make_compound_operation. + PR rtl-optimization/77309 + * combine.c (make_compound_operation): Allow EQ for IN_CODE, and + don't assume an equality comparison for plain COMPARE. + (simplify_comparison): Pass a more accurate code to + make_compound_operation. 2016-12-12 Thomas Preud'homme Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c (.../branches/gcc-6-branch) @@ -1,230 +0,0 @@ -/* { dg-do compile { target { powerpc64-*-* } } } */ -/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -/* { dg-options "-mcpu=power9 -O0" } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ -/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */ -/* { dg-final { scan-assembler-times "lxvx" 40 } } */ -/* { dg-final { scan-assembler-times "stxvx" 40 } } */ - -#include - -extern vector double vd, *vdp; -extern vector signed long long vsll, *vsllp; -extern vector unsigned long long vull, *vullp; -extern vector float vf, *vfp; -extern vector signed int vsi, *vsip; -extern vector unsigned int vui, *vuip; -extern vector signed short vss, *vssp; -extern vector unsigned short vus, *vusp; -extern vector signed char vsc, *vscp; -extern vector unsigned char vuc, *vucp; -extern double *dp; -extern signed long long *sllp; -extern unsigned long long *ullp; -extern float *fp; -extern signed int *sip; -extern unsigned int *uip; -extern signed short *ssp; -extern unsigned short *usp; -extern signed char *scp; -extern unsigned char *ucp; - -void foo0 (void) -{ - vd = vec_xl (0, vdp); -} - -void foo1 (void) -{ - vsll = vec_xl (0, vsllp); -} - -void foo2 (void) -{ - vull = vec_xl (0, vullp); -} - -void foo3 (void) -{ - vf = vec_xl (0, vfp); -} - -void foo4 (void) -{ - vsi = vec_xl (0, vsip); -} - -void foo5 (void) -{ - vui = vec_xl (0, vuip); -} - -void foo6 (void) -{ - vss = vec_xl (0, vssp); -} - -void foo7 (void) -{ - vus = vec_xl (0, vusp); -} - -void foo8 (void) -{ - vsc = vec_xl (0, vscp); -} - -void foo9 (void) -{ - vuc = vec_xl (0, vucp); -} - -void foo10 (void) -{ - vec_xst (vd, 0, vdp); -} - -void foo11 (void) -{ - vec_xst (vsll, 0, vsllp); -} - -void foo12 (void) -{ - vec_xst (vull, 0, vullp); -} - -void foo13 (void) -{ - vec_xst (vf, 0, vfp); -} - -void foo14 (void) -{ - vec_xst (vsi, 0, vsip); -} - -void foo15 (void) -{ - vec_xst (vui, 0, vuip); -} - -void foo16 (void) -{ - vec_xst (vss, 0, vssp); -} - -void foo17 (void) -{ - vec_xst (vus, 0, vusp); -} - -void foo18 (void) -{ - vec_xst (vsc, 0, vscp); -} - -void foo19 (void) -{ - vec_xst (vuc, 0, vucp); -} - -void foo20 (void) -{ - vd = vec_xl (0, dp); -} - -void foo21 (void) -{ - vsll = vec_xl (0, sllp); -} - -void foo22 (void) -{ - vull = vec_xl (0, ullp); -} - -void foo23 (void) -{ - vf = vec_xl (0, fp); -} - -void foo24 (void) -{ - vsi = vec_xl (0, sip); -} - -void foo25 (void) -{ - vui = vec_xl (0, uip); -} - -void foo26 (void) -{ - vss = vec_xl (0, ssp); -} - -void foo27 (void) -{ - vus = vec_xl (0, usp); -} - -void foo28 (void) -{ - vsc = vec_xl (0, scp); -} - -void foo29 (void) -{ - vuc = vec_xl (0, ucp); -} - -void foo30 (void) -{ - vec_xst (vd, 0, dp); -} - -void foo31 (void) -{ - vec_xst (vsll, 0, sllp); -} - -void foo32 (void) -{ - vec_xst (vull, 0, ullp); -} - -void foo33 (void) -{ - vec_xst (vf, 0, fp); -} - -void foo34 (void) -{ - vec_xst (vsi, 0, sip); -} - -void foo35 (void) -{ - vec_xst (vui, 0, uip); -} - -void foo36 (void) -{ - vec_xst (vss, 0, ssp); -} - -void foo37 (void) -{ - vec_xst (vus, 0, usp); -} - -void foo38 (void) -{ - vec_xst (vsc, 0, scp); -} - -void foo39 (void) -{ - vec_xst (vuc, 0, ucp); -} Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c (.../branches/gcc-6-branch) @@ -1,143 +0,0 @@ -/* { dg-do compile { target { powerpc64le*-*-* } } } */ -/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -/* { dg-options "-mcpu=power8 -O0" } */ -/* { dg-final { scan-assembler-times "lxvd2x" 18 } } */ -/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */ -/* { dg-final { scan-assembler-times "stxvd2x" 18 } } */ -/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */ -/* { dg-final { scan-assembler-times "xxpermdi" 24 } } */ - -#include - -extern vector double vd, *vdp; -extern vector signed long long vsll, *vsllp; -extern vector unsigned long long vull, *vullp; -extern vector float vf, *vfp; -extern vector signed int vsi, *vsip; -extern vector unsigned int vui, *vuip; -extern double *dp; -extern signed long long *sllp; -extern unsigned long long *ullp; -extern float *fp; -extern signed int *sip; -extern unsigned int *uip; - -void foo0 (void) -{ - vd = vec_xl (0, vdp); -} - -void foo1 (void) -{ - vsll = vec_xl (0, vsllp); -} - -void foo2 (void) -{ - vull = vec_xl (0, vullp); -} - -void foo3 (void) -{ - vf = vec_xl (0, vfp); -} - -void foo4 (void) -{ - vsi = vec_xl (0, vsip); -} - -void foo5 (void) -{ - vui = vec_xl (0, vuip); -} - -void foo6 (void) -{ - vec_xst (vd, 0, vdp); -} - -void foo7 (void) -{ - vec_xst (vsll, 0, vsllp); -} - -void foo8 (void) -{ - vec_xst (vull, 0, vullp); -} - -void foo9 (void) -{ - vec_xst (vf, 0, vfp); -} - -void foo10 (void) -{ - vec_xst (vsi, 0, vsip); -} - -void foo11 (void) -{ - vec_xst (vui, 0, vuip); -} - -void foo20 (void) -{ - vd = vec_xl (0, dp); -} - -void foo21 (void) -{ - vsll = vec_xl (0, sllp); -} - -void foo22 (void) -{ - vull = vec_xl (0, ullp); -} - -void foo23 (void) -{ - vf = vec_xl (0, fp); -} - -void foo24 (void) -{ - vsi = vec_xl (0, sip); -} - -void foo25 (void) -{ - vui = vec_xl (0, uip); -} - -void foo26 (void) -{ - vec_xst (vd, 0, dp); -} - -void foo27 (void) -{ - vec_xst (vsll, 0, sllp); -} - -void foo28 (void) -{ - vec_xst (vull, 0, ullp); -} - -void foo29 (void) -{ - vec_xst (vf, 0, fp); -} - -void foo30 (void) -{ - vec_xst (vsi, 0, sip); -} - -void foo31 (void) -{ - vec_xst (vui, 0, uip); -} Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c (.../branches/gcc-6-branch) @@ -1,236 +0,0 @@ -/* { dg-do compile { target { powerpc64le*-*-* } } } */ -/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ -/* { dg-options "-mcpu=power9 -O0" } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ -/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */ -/* { dg-final { scan-assembler-times "lxvd2x" 6 } } */ -/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */ -/* { dg-final { scan-assembler-times "lxvh8x" 4 } } */ -/* { dg-final { scan-assembler-times "lxvb16x" 4 } } */ -/* { dg-final { scan-assembler-times "stxvd2x" 6 } } */ -/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */ -/* { dg-final { scan-assembler-times "stxvh8x" 4 } } */ -/* { dg-final { scan-assembler-times "stxvb16x" 4 } } */ - -#include - -extern vector double vd, *vdp; -extern vector signed long long vsll, *vsllp; -extern vector unsigned long long vull, *vullp; -extern vector float vf, *vfp; -extern vector signed int vsi, *vsip; -extern vector unsigned int vui, *vuip; -extern vector signed short vss, *vssp; -extern vector unsigned short vus, *vusp; -extern vector signed char vsc, *vscp; -extern vector unsigned char vuc, *vucp; -extern double *dp; -extern signed long long *sllp; -extern unsigned long long *ullp; -extern float *fp; -extern signed int *sip; -extern unsigned int *uip; -extern signed short *ssp; -extern unsigned short *usp; -extern signed char *scp; -extern unsigned char *ucp; - -void foo0 (void) -{ - vd = vec_xl (0, vdp); -} - -void foo1 (void) -{ - vsll = vec_xl (0, vsllp); -} - -void foo2 (void) -{ - vull = vec_xl (0, vullp); -} - -void foo3 (void) -{ - vf = vec_xl (0, vfp); -} - -void foo4 (void) -{ - vsi = vec_xl (0, vsip); -} - -void foo5 (void) -{ - vui = vec_xl (0, vuip); -} - -void foo6 (void) -{ - vss = vec_xl (0, vssp); -} - -void foo7 (void) -{ - vus = vec_xl (0, vusp); -} - -void foo8 (void) -{ - vsc = vec_xl (0, vscp); -} - -void foo9 (void) -{ - vuc = vec_xl (0, vucp); -} - -void foo10 (void) -{ - vec_xst (vd, 0, vdp); -} - -void foo11 (void) -{ - vec_xst (vsll, 0, vsllp); -} - -void foo12 (void) -{ - vec_xst (vull, 0, vullp); -} - -void foo13 (void) -{ - vec_xst (vf, 0, vfp); -} - -void foo14 (void) -{ - vec_xst (vsi, 0, vsip); -} - -void foo15 (void) -{ - vec_xst (vui, 0, vuip); -} - -void foo16 (void) -{ - vec_xst (vss, 0, vssp); -} - -void foo17 (void) -{ - vec_xst (vus, 0, vusp); -} - -void foo18 (void) -{ - vec_xst (vsc, 0, vscp); -} - -void foo19 (void) -{ - vec_xst (vuc, 0, vucp); -} - -void foo20 (void) -{ - vd = vec_xl (0, dp); -} - -void foo21 (void) -{ - vsll = vec_xl (0, sllp); -} - -void foo22 (void) -{ - vull = vec_xl (0, ullp); -} - -void foo23 (void) -{ - vf = vec_xl (0, fp); -} - -void foo24 (void) -{ - vsi = vec_xl (0, sip); -} - -void foo25 (void) -{ - vui = vec_xl (0, uip); -} - -void foo26 (void) -{ - vss = vec_xl (0, ssp); -} - -void foo27 (void) -{ - vus = vec_xl (0, usp); -} - -void foo28 (void) -{ - vsc = vec_xl (0, scp); -} - -void foo29 (void) -{ - vuc = vec_xl (0, ucp); -} - -void foo30 (void) -{ - vec_xst (vd, 0, dp); -} - -void foo31 (void) -{ - vec_xst (vsll, 0, sllp); -} - -void foo32 (void) -{ - vec_xst (vull, 0, ullp); -} - -void foo33 (void) -{ - vec_xst (vf, 0, fp); -} - -void foo34 (void) -{ - vec_xst (vsi, 0, sip); -} - -void foo35 (void) -{ - vec_xst (vui, 0, uip); -} - -void foo36 (void) -{ - vec_xst (vss, 0, ssp); -} - -void foo37 (void) -{ - vec_xst (vus, 0, usp); -} - -void foo38 (void) -{ - vec_xst (vsc, 0, scp); -} - -void foo39 (void) -{ - vec_xst (vuc, 0, ucp); -} Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c (.../branches/gcc-6-branch) @@ -1,142 +0,0 @@ -/* { dg-do compile { target { powerpc64-*-* } } } */ -/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ -/* { dg-options "-mcpu=power8 -O0" } */ -/* { dg-final { scan-assembler-times "lxvd2x" 16 } } */ -/* { dg-final { scan-assembler-times "lxvw4x" 8 } } */ -/* { dg-final { scan-assembler-times "stxvd2x" 16 } } */ -/* { dg-final { scan-assembler-times "stxvw4x" 8 } } */ - -#include - -extern vector double vd, *vdp; -extern vector signed long long vsll, *vsllp; -extern vector unsigned long long vull, *vullp; -extern vector float vf, *vfp; -extern vector signed int vsi, *vsip; -extern vector unsigned int vui, *vuip; -extern double *dp; -extern signed long long *sllp; -extern unsigned long long *ullp; -extern float *fp; -extern signed int *sip; -extern unsigned int *uip; - -void foo0 (void) -{ - vd = vec_xl (0, vdp); -} - -void foo1 (void) -{ - vsll = vec_xl (0, vsllp); -} - -void foo2 (void) -{ - vull = vec_xl (0, vullp); -} - -void foo3 (void) -{ - vf = vec_xl (0, vfp); -} - -void foo4 (void) -{ - vsi = vec_xl (0, vsip); -} - -void foo5 (void) -{ - vui = vec_xl (0, vuip); -} - -void foo6 (void) -{ - vec_xst (vd, 0, vdp); -} - -void foo7 (void) -{ - vec_xst (vsll, 0, vsllp); -} - -void foo8 (void) -{ - vec_xst (vull, 0, vullp); -} - -void foo9 (void) -{ - vec_xst (vf, 0, vfp); -} - -void foo10 (void) -{ - vec_xst (vsi, 0, vsip); -} - -void foo11 (void) -{ - vec_xst (vui, 0, vuip); -} - -void foo20 (void) -{ - vd = vec_xl (0, dp); -} - -void foo21 (void) -{ - vsll = vec_xl (0, sllp); -} - -void foo22 (void) -{ - vull = vec_xl (0, ullp); -} - -void foo23 (void) -{ - vf = vec_xl (0, fp); -} - -void foo24 (void) -{ - vsi = vec_xl (0, sip); -} - -void foo25 (void) -{ - vui = vec_xl (0, uip); -} - -void foo26 (void) -{ - vec_xst (vd, 0, dp); -} - -void foo27 (void) -{ - vec_xst (vsll, 0, sllp); -} - -void foo28 (void) -{ - vec_xst (vull, 0, ullp); -} - -void foo29 (void) -{ - vec_xst (vf, 0, fp); -} - -void foo30 (void) -{ - vec_xst (vsi, 0, sip); -} - -void foo31 (void) -{ - vec_xst (vui, 0, uip); -} Index: gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c (.../branches/gcc-6-branch) @@ -1,7 +1,5 @@ /* { dg-do compile { target { powerpc*-*-linux* } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ -/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-require-effective-target hard_dfp } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ /* { dg-options "-mcpu=power7 -O2" } */ /* { dg-final { scan-assembler-times "ddedpd " 4 } } */ @@ -10,11 +8,17 @@ /* { dg-final { scan-assembler-times "diex " 1 } } */ /* { dg-final { scan-assembler-times "dscli " 2 } } */ /* { dg-final { scan-assembler-times "dscri " 2 } } */ +/* { dg-final { scan-assembler-times "std " 1 { target lp64 } } } */ +/* { dg-final { scan-assembler-times "ld " 1 { target lp64 } } } */ +/* 32-bit needs a stack frame, and needs two GPR mem insns per _Decimal64. */ +/* { dg-final { scan-assembler-times "stwu " 2 { target ilp32 } } } */ +/* { dg-final { scan-assembler-times "stw " 2 { target ilp32 } } } */ +/* { dg-final { scan-assembler-times "lwz " 2 { target ilp32 } } } */ +/* { dg-final { scan-assembler-times "stfd " 1 } } */ +/* { dg-final { scan-assembler-times "lfd " 1 } } */ /* { dg-final { scan-assembler-not "bl __builtin" } } */ /* { dg-final { scan-assembler-not "dctqpq" } } */ /* { dg-final { scan-assembler-not "drdpq" } } */ -/* { dg-final { scan-assembler-not "stfd" } } */ -/* { dg-final { scan-assembler-not "lfd" } } */ _Decimal64 do_dedpd_0 (_Decimal64 a) @@ -52,7 +56,7 @@ return __builtin_denbcd (1, a); } -_Decimal64 +long long do_xex (_Decimal64 a) { return __builtin_dxex (a); @@ -59,7 +63,7 @@ } _Decimal64 -do_iex (_Decimal64 a, _Decimal64 b) +do_iex (long long a, _Decimal64 b) { return __builtin_diex (a, b); } Index: gcc/testsuite/gcc.target/powerpc/pr79268.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79268.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79268.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-*-aix* } } */ +/* { dg-options "-mcpu=power8 -O3 " } */ + +/* Verify that vec_xl and vec_xst accept vector pixel parameters. */ + +/* Test case to resolve PR79268. */ + +#include + +vector pixel a; + +vector pixel +pr79268 (vector pixel *x) +{ + vec_xst (a, 0, x); + return vec_xl (0, x); +} Index: gcc/testsuite/gcc.target/powerpc/pr79439.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79439.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79439.c (.../branches/gcc-6-branch) @@ -0,0 +1,29 @@ +/* { dg-do compile { target { powerpc64*-*-linux* && lp64 } } } */ +/* { dg-options "-O2 -fpic" } */ + +/* On the Linux 64-bit ABIs, we should not eliminate NOP in the 'rec' call if + -fpic is used because rec can be interposed at link time (since it is + external), and the recursive call should call the interposed function. The + Linux 32-bit ABIs do not require NOPs after the BL instruction. */ + +int f (void); + +void +g (void) +{ +} + +int +rec (int a) +{ + int ret = 0; + if (a > 10 && f ()) + ret += rec (a - 1); + g (); + return a + ret; +} + +/* { dg-final { scan-assembler-times {\mbl f\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl g\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mbl rec\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mnop\M} 4 } } */ Index: gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c (.../branches/gcc-6-branch) @@ -1,7 +1,5 @@ /* { dg-do compile { target { powerpc*-*-linux* } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ -/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-require-effective-target hard_dfp } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ /* { dg-options "-mcpu=power7 -O2" } */ /* { dg-final { scan-assembler-times "ddedpdq " 4 } } */ Index: gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c (.../branches/gcc-6-branch) @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-options "-mcpu=power8" } */ + +#include + +vector signed int +test_vsi_packs_vsll_vsll (vector signed long long x, + vector signed long long y) +{ + return vec_packs (x, y); +} + +vector unsigned int +test_vui_packs_vull_vull (vector unsigned long long x, + vector unsigned long long y) +{ + return vec_packs (x, y); +} + +/* Expected test results: + test_vsi_packs_vsll_vsll 1 vpksdss + test_vui_packs_vull_vull 1 vpkudus */ + +/* { dg-final { scan-assembler-times "vpksdss" 1 } } */ +/* { dg-final { scan-assembler-times "vpkudus" 1 } } */ Index: gcc/testsuite/gcc.target/powerpc/pr79197.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79197.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79197.c (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +/* PR target/79197 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mno-popcntd" } */ + +unsigned a; + +void +foo (void) +{ + a = *(double *) (__UINTPTR_TYPE__) 0x400000; +} Index: gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c (.../branches/gcc-6-branch) @@ -0,0 +1,68 @@ +/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ +/* { dg-options "-O2 -mvsx" } */ + +/* Added for PR79261 to test that vec_xxpermdi works correctly for + both BE and LE targets. */ + +#include +void abort (void); + +vector double vdx = { 0.0, 1.0 }; +vector double vdy = { 2.0, 3.0 }; +vector double vdz; + +vector signed long long vsllx = { 0, 1 }; +vector signed long long vslly = { 2, 3 }; +vector signed long long vsllz; + +vector float vfx = { 0.0, 1.0, 2.0, 3.0 }; +vector float vfy = { 4.0, 5.0, 6.0, 7.0 }; +vector float vfz; + +vector signed int vsix = { 0, 1, 2, 3 }; +vector signed int vsiy = { 4, 5, 6, 7 }; +vector signed int vsiz; + +vector signed short vssx = { 0, 1, 2, 3, 4, 5, 6, 7 }; +vector signed short vssy = { 8, 9, 10, 11, 12, 13, 14, 15 }; +vector signed short vssz; + +vector signed char vscx = { 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15 }; +vector signed char vscy = { 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31 }; +vector signed char vscz; + +int +main () +{ + vdz = vec_xxpermdi (vdx, vdy, 0b01); + if (vdz[0] != 0.0 || vdz[1] != 3.0) + abort (); + + vsllz = vec_xxpermdi (vsllx, vslly, 0b10); + if (vsllz[0] != 1 || vsllz[1] != 2) + abort (); + + vfz = vec_xxpermdi (vfx, vfy, 0b01); + if (vfz[0] != 0.0 || vfz[1] != 1.0 || vfz[2] != 6.0 || vfz[3] != 7.0) + abort (); + + vsiz = vec_xxpermdi (vsix, vsiy, 0b10); + if (vsiz[0] != 2 || vsiz[1] != 3 || vsiz[2] != 4 || vsiz[3] != 5) + abort (); + + vssz = vec_xxpermdi (vssx, vssy, 0b00); + if (vssz[0] != 0 || vssz[1] != 1 || vssz[2] != 2 || vssz[3] != 3 + || vssz[4] != 8 || vssz[5] != 9 || vssz[6] != 10 || vssz[7] != 11) + abort (); + + vscz = vec_xxpermdi (vscx, vscy, 0b11); + if (vscz[0] != 8 || vscz[1] != 9 || vscz[2] != 10 || vscz[3] != 11 + || vscz[4] != 12 || vscz[5] != 13 || vscz[6] != 14 || vscz[7] != 15 + || vscz[8] != 24 || vscz[9] != 25 || vscz[10] != 26 || vscz[11] != 27 + || vscz[12] != 28 || vscz[13] != 29 || vscz[14] != 30 || vscz[15] != 31) + abort (); + + return 0; +} Index: gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c (.../branches/gcc-6-branch) @@ -35,6 +35,8 @@ /* { dg-final { scan-assembler "xvcmpgesp" } } */ /* { dg-final { scan-assembler "xxsldwi" } } */ /* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler "xvcvsxdsp" } } */ +/* { dg-final { scan-assembler "xvcvuxdsp" } } */ extern __vector int si[][4]; extern __vector short ss[][4]; @@ -50,7 +52,9 @@ #ifdef __VSX__ extern __vector double d[][4]; extern __vector long sl[][4]; +extern __vector long long sll[][4]; extern __vector unsigned long ul[][4]; +extern __vector unsigned long long ull[][4]; extern __vector __bool long bl[][4]; #endif @@ -211,3 +215,22 @@ d[i][0] = __builtin_vsx_xxsldwi (d[i][1], d[i][2], 3); i++; return i; } + +int do_xvcvsxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvsxdsp (sll[i][1]); i++; + + return i; +} + +int do_xvcvuxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvuxdsp (ull[i][1]); i++; + + return i; +} + Index: gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* { dg-do compile { target { powerpc64le-*-* } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O3 " } */ +/* { dg-final { scan-assembler-times "lxvw4x" 2 } } */ +/* { dg-final { scan-assembler "stxvw4x" } } */ +/* { dg-final { scan-assembler-not "xxpermdi" } } */ + +/* Verify that swap optimization does not interfere with element-reversing + loads and stores. */ + +/* Test case to resolve PR79044. */ + +#include + +void pr79044 (float *x, float *y, float *z) +{ + vector float a = __builtin_vec_xl (0, x); + vector float b = __builtin_vec_xl (0, y); + vector float c = __builtin_vec_mul (a, b); + __builtin_vec_xst (c, 0, z); +} Index: gcc/testsuite/gcc.target/powerpc/pr79951.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79951.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79951.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -S -mno-cmpb" } */ + +float testf (float x, float y) +{ + return __builtin_copysignf (x, y); +} + Index: gcc/testsuite/gcc.target/powerpc/swaps-p8-27.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-27.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-27.c (.../branches/gcc-6-branch) @@ -0,0 +1,36 @@ +/* { dg-do compile { target { powerpc64le-*-* } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O3 " } */ +/* { dg-final { scan-assembler-times "lxvd2x" 2 } } */ +/* { dg-final { scan-assembler-times "stxvd2x" 1 } } */ +/* { dg-final { scan-assembler-times "xxpermdi" 3 } } */ + +/* Verify that swap optimization works correctly for a VSX direct splat. + The three xxpermdi's that are generated correspond to two splats + and the __builtin_vsx_xxpermdi. */ + +int printf (const char *__restrict __format, ...); +typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); + +double s1[] = {2134.3343, 6678.346}; +double s2[] = {41124.234, 6678.346}; +long long dd[] = {1, 2}, d[2]; +union{long long l[2]; double d[2];} e; + +void +foo () +{ + __m128d source1, source2, dest; + __m128d a, b, c; + + e.d[1] = s1[1]; + e.l[0] = !__builtin_isunordered(s1[0], s2[0]) + && s1[0] == s2[0] ? -1 : 0; + source1 = __builtin_vec_vsx_ld (0, s1); + source2 = __builtin_vec_vsx_ld (0, s2); + a = __builtin_vec_splat (source1, 0); + b = __builtin_vec_splat (source2, 0); + c = (__m128d)__builtin_vec_cmpeq (a, b); + dest = __builtin_vsx_xxpermdi (source1, c, 1); + *(__m128d *)d = dest; +} Index: gcc/testsuite/gcc.target/powerpc/pr80246.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr80246.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr80246.c (.../branches/gcc-6-branch) @@ -0,0 +1,37 @@ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ +/* { dg-require-effective-target hard_dfp } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler-times "dxex " 1 } } */ +/* { dg-final { scan-assembler-times "dxexq " 1 } } */ +/* { dg-final { scan-assembler-times "diex " 1 } } */ +/* { dg-final { scan-assembler-times "diexq " 1 } } */ +/* { dg-final { scan-assembler-not "bl __builtin" } } */ +/* Verify we don't generate any drintn., drintnq., dctfix, dctfixq, dcffix + or dcffixq instructions, as they imply we are getting unwanted casting. */ +/* { dg-final { scan-assembler-not "drintn\[q\]\." } } */ +/* { dg-final { scan-assembler-not "dctfix\[q\]" } } */ +/* { dg-final { scan-assembler-not "dcffix\[q\]" } } */ + +long long +do_xex (_Decimal64 arg) +{ + return __builtin_dxex (arg); +} + +long long +do_xexq (_Decimal128 arg) +{ + return __builtin_dxexq (arg); +} + +_Decimal64 +do_iex (long long exp, _Decimal64 arg) +{ + return __builtin_diex (exp, arg); +} + +_Decimal128 +do_iexq (long long exp, _Decimal128 arg) +{ + return __builtin_diexq (exp, arg); +} Index: gcc/testsuite/gcc.target/powerpc/pr79947.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79947.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79947.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-Ofast -mno-powerpc-gfxopt -mcmpb -mno-vsx" } */ + +/* PR 79949: Compiler segmentation fault due to not having conditional move + support for the target if the -mno-powerpc-gfxopt option is used. */ + +float a, b; +void +c () +{ + a = __builtin_sqrtf (b); +} Index: gcc/testsuite/gcc.target/powerpc/pr78543.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr78543.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr78543.c (.../branches/gcc-6-branch) @@ -0,0 +1,60 @@ +/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O1 -mno-lra" } */ + +typedef long a; +enum c { e, f, g, h, i, ab } j(); +int l, n, o, p; +a q, r; +void *memcpy(); +void b(); +static int k(int *s) { + int m; + if (j(&m)) + *s = m; + return !0; +} +void d(char s) { + int af[4]; + int ag; + enum c ah; + char ai[24 << 11]; + unsigned aj; + if (!k(&aj)) + goto ak; + for (;;) { + if (!k(&ag)) + goto ak; + switch (ah) { + case e: + b(""); + b("bad length %d for GUID in fileinfo v%u for \"%s\""); + case i: + b("bad length %d for TTH in fileinfo v%u for \"%s\"", aj); + case ab: + if (ag % 24) + b("for \"%s\"", s); + case f: + if (20 == ag) + case h: + if (20 == ag) + o = 0; + break; + case g: + memcpy(af, ai, sizeof af); + b(); + if (p) { + a al, am; + r = al << 2 | am; + n = af[2]; + al = n; + l = __builtin_bswap32(af[3]); + am = q = n | l; + } + default: + b("%s0 unhandled field ID %u 0", __func__); + } + } +ak:; +} Index: gcc/testsuite/gcc.target/powerpc/pr71310.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr71310.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr71310.c (.../branches/gcc-6-branch) @@ -0,0 +1,23 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O2" } */ + +/* { dg-final { scan-assembler-not {\mld} } } */ +/* { dg-final { scan-assembler-not {\mlwz} } } */ +/* { dg-final { scan-assembler-times {\mlbz} 2 } } */ + +struct mmu_gather { + long end; + int fullmm : 1; +}; + +void __tlb_reset_range(struct mmu_gather *p1) +{ + if (p1->fullmm) + p1->end = 0; +} + +void tlb_gather_mmu(struct mmu_gather *p1) +{ + p1->fullmm = 1; + __tlb_reset_range(p1); +} Index: gcc/testsuite/gcc.target/powerpc/pr79544.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr79544.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr79544.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O2" } */ + +#include + +vector unsigned long long +test_sra (vector unsigned long long x, vector unsigned long long y) +{ + return vec_sra (x, y); +} + +vector unsigned long long +test_vsrad (vector unsigned long long x, vector unsigned long long y) +{ + return vec_vsrad (x, y); +} + +/* { dg-final { scan-assembler-times {\mvsrad\M} 2 } } */ + Index: gcc/testsuite/gcc.target/arm/atomic_loaddi_10.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/atomic_loaddi_10.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/atomic_loaddi_10.c (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_arch_v7ve_ok } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_arch_v7ve } */ + +#include + +atomic_llong x = 0; + +atomic_llong get_x() +{ + return atomic_load(&x); +} + +/* { dg-final { scan-assembler "ldrd" } } */ Index: gcc/testsuite/gcc.target/arm/atomic_loaddi_11.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/atomic_loaddi_11.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/atomic_loaddi_11.c (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_arch_v7r_ok } */ +/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" "-march=*" } { "-mcpu=cortex-r5" } } */ +/* { dg-options "-O2 -mcpu=cortex-r5" } */ + +#include + +atomic_llong x = 0; + +atomic_llong get_x() +{ + return atomic_load(&x); +} + +/* { dg-final { scan-assembler-not "ldrd" } } */ Index: gcc/testsuite/gcc.target/arm/pr78255-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/pr78255-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/pr78255-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,57 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include + +struct table_s + { + void (*fun0) + ( void ); + void (*fun1) + ( void ); + void (*fun2) + ( void ); + void (*fun3) + ( void ); + void (*fun4) + ( void ); + void (*fun5) + ( void ); + void (*fun6) + ( void ); + void (*fun7) + ( void ); + } table; + +void callback0(){__asm("mov r0, r0 \n\t");} +void callback1(){__asm("mov r0, r0 \n\t");} +void callback2(){__asm("mov r0, r0 \n\t");} +void callback3(){__asm("mov r0, r0 \n\t");} +void callback4(){__asm("mov r0, r0 \n\t");} + +void test (void) { + memset(&table, 0, sizeof table); + + asm volatile ("" : : : "r3"); + + table.fun0 = callback0; + table.fun1 = callback1; + table.fun2 = callback2; + table.fun3 = callback3; + table.fun4 = callback4; + table.fun0(); +} + +void foo (void) +{ + __builtin_abort (); +} + +int main (void) +{ + unsigned long p = (unsigned long) &foo; + asm volatile ("mov r3, %0" : : "r" (p)); + test (); + + return 0; +} Index: gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c (.../branches/gcc-6-branch) @@ -0,0 +1,32 @@ +/* { dg-do run } */ +/* { dg-options "-mapcs-frame -O -foptimize-sibling-calls -ffunction-sections" } */ + +extern void abort (void); + +static __attribute__((noclone, noinline, long_call)) +int foo (int a, int b, int c, int d, double i) +{ + return a; +} + +static __attribute__((noclone, noinline)) +double baz (double i) +{ + return i; +} + +static __attribute__((noclone, noinline)) +int bar (int a, int b, int c, int d, double i, double j) +{ + double l = baz (i) * j; + return foo (a, b, c, d, l); +} + +int +main (void) +{ + if (bar (0, 0, 0, 0, 0.0, 0.0) != 0) + abort (); + + return 0; +} Index: gcc/testsuite/gcc.target/arm/pr78255-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/pr78255-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/pr78255-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern int bar (void *); + +int +foo (void) +{ + return bar ((void*)bar); +} + +/* { dg-final { scan-assembler "bl?\\s+bar" } } */ Index: gcc/testsuite/gcc.target/arm/pr78041.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/pr78041.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/pr78041.c (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-fno-inline -mthumb -O1 -mfpu=neon -w" } */ + +extern void abort (void); + +register long long x asm ("r1"); + +long long f (void) +{ + return x << 5; +} + +int main () +{ + x = 0x0100000001; + if (f () != 0x2000000020) + abort (); + return 0; +} Index: gcc/testsuite/gcc.target/s390/litpool-str-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/s390/litpool-str-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/s390/litpool-str-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* Make sure strings are recognized as being accessible through larl. + This requires the symbol ref alignment properly propagated to + encode_section_info. */ + +/* { dg-do compile } */ +/* { dg-options "-march=z900 -O2 -fpic" } */ + + +extern void foo(const char*, const char*, const char*); + +void bar(int i) +{ + const char t1[10] = "test"; + const char t2[10] = "test2"; + const char t3[2][10] = { + "foofoofoo", + "barbarbar", + }; + foo(t1, t2, t3[i]); +} + +/* { dg-final { scan-assembler-not "GOTOFF" } } */ Index: gcc/testsuite/gcc.target/sparc/20170228-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/20170228-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/20170228-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +/* PR target/79749 */ +/* Reported by Rainer Orth */ + +/* { dg-do run } */ +/* { dg-options "-fomit-frame-pointer" } */ + +extern void abort (void); + +int foo (int x1, int x2, int x3, int x4, int x5, int x6, int x7) +{ + return x7; +} + +int main (void) +{ + if (foo (100, 200, 300, 400, 500, 600, 700) != 700) + abort (); + + return 0; +} Index: gcc/testsuite/gcc.target/aarch64/pr78255.c =================================================================== --- a/src/gcc/testsuite/gcc.target/aarch64/pr78255.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/aarch64/pr78255.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mcmodel=tiny" } */ + +extern int bar (void *); + +int +foo (void) +{ + return bar ((void *)bar); +} + +/* { dg-final { scan-assembler "b\\s+bar" } } */ Index: gcc/testsuite/gcc.target/aarch64/eh_return.c =================================================================== --- a/src/gcc/testsuite/gcc.target/aarch64/eh_return.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/aarch64/eh_return.c (.../branches/gcc-6-branch) @@ -0,0 +1,82 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-inline" } */ + +#include +#include + +int val, test, failed; + +int main (void); + +void +eh0 (void *p) +{ + val = (int)(long)p & 7; + if (val) + abort (); +} + +void +eh1 (void *p, int x) +{ + void *q = __builtin_alloca (x); + eh0 (q); + __builtin_eh_return (0, p); +} + +void +eh2a (int a,int b,int c,int d,int e,int f,int g,int h, void *p) +{ + val = a + b + c + d + e + f + g + h + (int)(long)p & 7; +} + +void +eh2 (void *p) +{ + eh2a (val, val, val, val, val, val, val, val, p); + __builtin_eh_return (0, p); +} + + +void +continuation (void) +{ + test++; + main (); +} + +void +fail (void) +{ + failed = 1; + printf ("failed\n"); + continuation (); +} + +void +do_test1 (void) +{ + if (!val) + eh1 (continuation, 100); + fail (); +} + +void +do_test2 (void) +{ + if (!val) + eh2 (continuation); + fail (); +} + +int +main (void) +{ + if (test == 0) + do_test1 (); + if (test == 1) + do_test2 (); + if (failed || test != 2) + exit (1); + exit (0); +} Index: gcc/testsuite/gcc.target/i386/pr79568-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79568-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79568-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +/* PR target/79568 */ +/* { dg-do compile } */ +/* { dg-options "-mno-avx512vl -mavx512bw -O2" } */ + +#pragma GCC push_options +#pragma GCC target ("avx512vl,avx512bw") +void +foo (char __attribute__ ((__vector_size__(32))) *x, char __attribute__ ((__vector_size__(32))) *y, int z) +{ + __builtin_ia32_storedquqi256_mask (x, *y, z); +} +#pragma GCC pop_options + +void +bar (char __attribute__ ((__vector_size__(32))) *x, char __attribute__ ((__vector_size__(32))) *y, int z) +{ + __builtin_ia32_storedquqi256_mask (x, *y, z); /* { dg-error "needs isa option" } */ +} Index: gcc/testsuite/gcc.target/i386/pr49095.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr49095.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr49095.c (.../branches/gcc-6-branch) @@ -1,7 +1,7 @@ /* PR rtl-optimization/49095 */ /* { dg-do compile } */ -/* { dg-options "-Os" } */ -/* { dg-options "-Os -mregparm=2" { target ia32 } } */ +/* { dg-options "-Os -fno-shrink-wrap" } */ +/* { dg-additional-options "-mregparm=2" { target ia32 } } */ void foo (void *); @@ -70,5 +70,4 @@ G (int) G (long) -/* See PR61225 for the XFAIL. */ -/* { dg-final { scan-assembler-not "test\[lq\]" { xfail { ia32 } } } } */ +/* { dg-final { scan-assembler-not "test\[lq\]" } } */ Index: gcc/testsuite/gcc.target/i386/pr79568-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79568-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79568-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +/* PR target/79568 */ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-mno-lwp" } */ + +#pragma GCC push_options +#pragma GCC target ("lwp") +void +foo (unsigned long x, unsigned int y) +{ + __builtin_ia32_lwpval64 (x, y, 1); +} +#pragma GCC pop_options + +void +bar (unsigned long x, unsigned int y) +{ + __builtin_ia32_lwpval64 (x, y, 1); /* { dg-error "needs isa option" } */ +} Index: gcc/testsuite/gcc.target/i386/pr80262.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr80262.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr80262.c (.../branches/gcc-6-branch) @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef struct { + int v; +} S1; +S1 clearS1 () { S1 s1 = { 0 }; return s1; } + +typedef struct { + S1 s1[4]; +} S2; +void clearS2 (__seg_gs S2* p, int n) { + for (int i = 0; i < n; ++i) + p->s1[i] = clearS1 (); +} + +typedef struct { + int pad; + S2 s2; +} S3; + +long int BASE; + +void fn1(int n) { + clearS2 (&(((__seg_gs S3*)(BASE))->s2), n); +} Index: gcc/testsuite/gcc.target/i386/pr79932-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79932-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79932-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* PR target/79932 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx512bw" } */ + +#include + +__m512i a, b, c, d, e, f, g, h, i; +__mmask32 m; + +void +foo (void) +{ + d = _mm512_packs_epi32 (a, b); + e = _mm512_maskz_packs_epi32 (m, a, b); + f = _mm512_mask_packs_epi32 (c, m, a, b); + g = _mm512_packus_epi32 (a, b); + h = _mm512_maskz_packus_epi32 (m, a, b); + i = _mm512_mask_packus_epi32 (c, m, a, b); +} Index: gcc/testsuite/gcc.target/i386/pr79568-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79568-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79568-3.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* PR target/79568 */ +/* { dg-do compile } */ +/* { dg-options "-mno-sahf -mno-mmx -mno-sse" } */ +/* { dg-additional-options "-march=i386" { target ia32 } } */ + +#pragma GCC push_options +#pragma GCC target ("sse") +void +foo (void) +{ + __builtin_ia32_pause (); +} +#pragma GCC pop_options + +void +bar (void) +{ + __builtin_ia32_pause (); +} Index: gcc/testsuite/gcc.target/i386/pr79514.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79514.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79514.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* PR target/79514 */ +/* { dg-do compile } */ +/* { dg-options "-m96bit-long-double" } */ + +extern void bar (long double); + +extern long double x; + +void foo (void) +{ + bar (x); +} Index: gcc/testsuite/gcc.target/i386/pr79932-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79932-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79932-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,78 @@ +/* PR target/79932 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx512vl" } */ + +#include + +__m256i a, b; +__m128i c, d; +__mmask32 e, f[64]; + +void +foo (void) +{ + f[0] = _mm256_cmpge_epi32_mask (a, b); + f[1] = _mm256_cmpge_epi64_mask (a, b); + f[2] = _mm256_cmpge_epu32_mask (a, b); + f[3] = _mm256_cmpge_epu64_mask (a, b); + f[4] = _mm256_cmple_epi32_mask (a, b); + f[5] = _mm256_cmple_epi64_mask (a, b); + f[6] = _mm256_cmple_epu32_mask (a, b); + f[7] = _mm256_cmple_epu64_mask (a, b); + f[8] = _mm256_cmplt_epi32_mask (a, b); + f[9] = _mm256_cmplt_epi64_mask (a, b); + f[10] = _mm256_cmplt_epu32_mask (a, b); + f[11] = _mm256_cmplt_epu64_mask (a, b); + f[12] = _mm256_cmpneq_epi32_mask (a, b); + f[13] = _mm256_cmpneq_epi64_mask (a, b); + f[14] = _mm256_cmpneq_epu32_mask (a, b); + f[15] = _mm256_cmpneq_epu64_mask (a, b); + f[16] = _mm256_mask_cmpge_epi32_mask (e, a, b); + f[17] = _mm256_mask_cmpge_epi64_mask (e, a, b); + f[18] = _mm256_mask_cmpge_epu32_mask (e, a, b); + f[19] = _mm256_mask_cmpge_epu64_mask (e, a, b); + f[20] = _mm256_mask_cmple_epi32_mask (e, a, b); + f[21] = _mm256_mask_cmple_epi64_mask (e, a, b); + f[22] = _mm256_mask_cmple_epu32_mask (e, a, b); + f[23] = _mm256_mask_cmple_epu64_mask (e, a, b); + f[24] = _mm256_mask_cmplt_epi32_mask (e, a, b); + f[25] = _mm256_mask_cmplt_epi64_mask (e, a, b); + f[26] = _mm256_mask_cmplt_epu32_mask (e, a, b); + f[27] = _mm256_mask_cmplt_epu64_mask (e, a, b); + f[28] = _mm256_mask_cmpneq_epi32_mask (e, a, b); + f[29] = _mm256_mask_cmpneq_epi64_mask (e, a, b); + f[30] = _mm256_mask_cmpneq_epu32_mask (e, a, b); + f[31] = _mm256_mask_cmpneq_epu64_mask (e, a, b); + f[32] = _mm_cmpge_epi32_mask (c, d); + f[33] = _mm_cmpge_epi64_mask (c, d); + f[34] = _mm_cmpge_epu32_mask (c, d); + f[35] = _mm_cmpge_epu64_mask (c, d); + f[36] = _mm_cmple_epi32_mask (c, d); + f[37] = _mm_cmple_epi64_mask (c, d); + f[38] = _mm_cmple_epu32_mask (c, d); + f[39] = _mm_cmple_epu64_mask (c, d); + f[40] = _mm_cmplt_epi32_mask (c, d); + f[41] = _mm_cmplt_epi64_mask (c, d); + f[42] = _mm_cmplt_epu32_mask (c, d); + f[43] = _mm_cmplt_epu64_mask (c, d); + f[44] = _mm_cmpneq_epi32_mask (c, d); + f[45] = _mm_cmpneq_epi64_mask (c, d); + f[46] = _mm_cmpneq_epu32_mask (c, d); + f[47] = _mm_cmpneq_epu64_mask (c, d); + f[48] = _mm_mask_cmpge_epi32_mask (e, c, d); + f[49] = _mm_mask_cmpge_epi64_mask (e, c, d); + f[50] = _mm_mask_cmpge_epu32_mask (e, c, d); + f[51] = _mm_mask_cmpge_epu64_mask (e, c, d); + f[52] = _mm_mask_cmple_epi32_mask (e, c, d); + f[53] = _mm_mask_cmple_epi64_mask (e, c, d); + f[54] = _mm_mask_cmple_epu32_mask (e, c, d); + f[55] = _mm_mask_cmple_epu64_mask (e, c, d); + f[56] = _mm_mask_cmplt_epi32_mask (e, c, d); + f[57] = _mm_mask_cmplt_epi64_mask (e, c, d); + f[58] = _mm_mask_cmplt_epu32_mask (e, c, d); + f[59] = _mm_mask_cmplt_epu64_mask (e, c, d); + f[60] = _mm_mask_cmpneq_epi32_mask (e, c, d); + f[61] = _mm_mask_cmpneq_epi64_mask (e, c, d); + f[62] = _mm_mask_cmpneq_epu32_mask (e, c, d); + f[63] = _mm_mask_cmpneq_epu64_mask (e, c, d); +} Index: gcc/testsuite/gcc.target/i386/avx-pr80286.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/avx-pr80286.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/avx-pr80286.c (.../branches/gcc-6-branch) @@ -0,0 +1,26 @@ +/* PR target/80286 */ +/* { dg-do run { target avx } } */ +/* { dg-options "-O2 -mavx" } */ + +#include "avx-check.h" +#include + +__m256i m; + +__attribute__((noinline, noclone)) __m128i +foo (__m128i x) +{ + int s = _mm_cvtsi128_si32 (_mm256_castsi256_si128 (m)); + return _mm_srli_epi16 (x, s); +} + +static void +avx_test (void) +{ + __m128i a = (__m128i) (__v8hi) { 1 << 7, 2 << 8, 3 << 9, 4 << 10, 5 << 11, 6 << 12, 7 << 13, 8 << 12 }; + m = (__m256i) (__v8si) { 7, 8, 9, 10, 11, 12, 13, 14 }; + __m128i c = foo (a); + __m128i b = (__m128i) (__v8hi) { 1, 2 << 1, 3 << 2, 4 << 3, 5 << 4, 6 << 5, 7 << 6, 8 << 5 }; + if (__builtin_memcmp (&c, &b, sizeof (__m128i))) + __builtin_abort (); +} Index: gcc/testsuite/gcc.target/i386/pr71458.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr71458.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr71458.c (.../branches/gcc-6-branch) @@ -0,0 +1,7 @@ +/* { dg-do compile { target { ! x32 } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -fsanitize=bounds" } */ +/* { dg-error "'-fcheck-pointer-bounds' is not supported with '-fsanitize=bounds'" "" { target *-*-* } 0 } */ + +enum {} a[0]; +void fn1(int); +void fn2() { fn1(a[-1]); } Index: gcc/testsuite/gcc.target/i386/pr79733.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79733.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79733.c (.../branches/gcc-6-branch) @@ -0,0 +1,23 @@ +/* PR target/79733 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f" } */ + +typedef unsigned short __mmask16; + +extern __inline int +__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +_mm512_kortestc (__mmask16 __A, __mmask16 __B) +{ + return (__mmask16) __builtin_ia32_kortestchi ((__mmask16) __A, + (__mmask16) __B); +} + +void +avx512f_test () +{ + volatile __mmask16 k1 = 0; + __mmask16 k2 = 0; + volatile short r; + + r = _mm512_kortestc (k1, k2); +} Index: gcc/testsuite/gcc.target/i386/pr79559.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79559.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79559.c (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +/* PR target/79559 */ +/* { dg-do compile } */ + +void +foo (int x) +{ + __asm__ volatile ("# %K0" : : "r" (x)); /* { dg-error "invalid operand code" } */ + __asm__ volatile ("# %r0" : : "r" (x)); /* { dg-error "invalid operand code" } */ + __asm__ volatile ("# %r0" : : "n" (129)); /* { dg-error "invalid operand code" } */ + __asm__ volatile ("# %R0" : : "r" (x)); /* { dg-error "invalid operand code" } */ +} Index: gcc/testsuite/gcc.target/i386/pr79901.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79901.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79901.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* PR rtl-optimization/79901 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -mavx512f -fno-ssa-phiopt" } */ + +unsigned int +foo (const unsigned long long x) +{ + if (x < 0) + return 0; + else if ( x > ~0U) + return ~0U; + else + return (unsigned int) x; +} + +void +bar (unsigned x, unsigned int *y, unsigned int z) +{ + unsigned i; + for (i = 0; i < x; i++) + y[i] = foo (y[i] * (unsigned long long) z); +} Index: gcc/testsuite/gcc.target/i386/pr80019.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr80019.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr80019.c (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +/* PR target/80019 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mxop -mavx2" } */ + +typedef char v16qi __attribute__ ((vector_size (16))); + +extern v16qi b, c; + +void +foo (int e) +{ + b = c << e; +} Index: gcc/testsuite/gcc.target/i386/pr79807.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79807.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79807.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* PR target/79807 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx -ffloat-store" } */ + +typedef double __v2df __attribute__ ((__vector_size__ (16))); +typedef double __v4df __attribute__ ((__vector_size__ (32))); + +__v2df +foo (__v4df x) +{ + return __builtin_ia32_pd_pd256 (x); +} Index: gcc/testsuite/gcc.target/i386/pr65044.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr65044.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr65044.c (.../branches/gcc-6-branch) @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! x32 } } } */ /* { dg-options "-fcheck-pointer-bounds -mmpx -fsanitize=address" } */ -/* { dg-error "-fcheck-pointer-bounds is not supported with Address Sanitizer" "" { target *-*-* } 0 } */ +/* { dg-error ".-fcheck-pointer-bounds. is not supported with Address Sanitizer" "" { target *-*-* } 0 } */ extern int x[]; Index: gcc/testsuite/gcc.target/i386/pr80298-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr80298-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr80298-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,7 @@ +/* PR target/80298 */ +/* { dg-do compile } */ +/* { dg-options "-mno-sse -mmmx" } */ + +#include + +int i; Index: gcc/testsuite/gcc.target/i386/pr79495.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79495.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79495.c (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +/* PR target/79495 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -msoft-float" } */ + +long double dnan = 1.0l/0.0l - 1.0l/0.0l; +long double x = 1.0l; +void fn1 (void) +{ + if (dnan != x) + x = 1.0; +} Index: gcc/testsuite/gcc.target/i386/mvc9.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/mvc9.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/mvc9.c (.../branches/gcc-6-branch) @@ -0,0 +1,28 @@ +/* { dg-do run } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-flto -O2" { target lto } } */ + +__attribute__((target_clones("avx","arch=slm","arch=core-avx2","default"))) +int +foo () +{ + return -2; +} + +int +bar () +{ + return 2; +} + +int +main () +{ + int r = 0; + r += bar (); + r += foo (); + r += bar (); + r += foo (); + r += bar (); + return r - 2; +} Index: gcc/testsuite/gcc.target/i386/pr80298-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr80298-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr80298-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,7 @@ +/* PR target/80298 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-sse -mmmx" } */ + +#include + +int i; Index: gcc/testsuite/gcc.target/i386/pr79729.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr79729.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr79729.c (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +/* PR target/79729 */ +/* { dg-do compile } */ + +void +foo (int x) +{ + __asm__ volatile ("# %R0" : : "n" (129)); /* { dg-error "invalid operand code" } */ +} Index: gcc/testsuite/gcc.target/i386/mpx/pr79770.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/mpx/pr79770.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/mpx/pr79770.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -mabi=ms -Wno-psabi" } */ + +typedef unsigned U __attribute__ ((vector_size (64))); +typedef unsigned __int128 V __attribute__ ((vector_size (64))); + +static inline V +bar (U u, U x, V v) +{ + v = (V)(U) { 0, ~0 }; + v[x[0]] <<= u[-63]; + return v; +} + +V +foo (U u) +{ + return bar (u, (U) {}, (V) {}); +} Index: gcc/testsuite/gcc.target/i386/mpx/pr79753.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/mpx/pr79753.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/mpx/pr79753.c (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ + +int +foo (void) +{ + return 0; +} + +void +bar (int **p) +{ + *p = (int *) (__UINTPTR_TYPE__) foo (); +} Index: gcc/testsuite/gcc.target/i386/mpx/pr78339.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/mpx/pr78339.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/mpx/pr78339.c (.../branches/gcc-6-branch) @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -Wsuggest-attribute=noreturn" } */ + +extern _Noreturn void exit (int); +int main (void) { exit (1); } Index: gcc/testsuite/gcc.target/i386/mpx/pr79631.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/mpx/pr79631.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/mpx/pr79631.c (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +/* { dg-do compile { target { ! x32 } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ + +typedef struct { int _mp_size; } mpz_t[1]; +int a, b; +void fn1() +{ + mpz_t c[1][b]; + for (;;) { + int d = 0 >= 0 ? 0 == 0 ? c[0][0]->_mp_size ? -1 : 0 : 0 : 0, + e = 0 >= 0 ? 0 == 0 ? c[1][1]->_mp_size ? -1 : 0 : 0 : 0; + if (d != e) + a++; + } +} Index: gcc/testsuite/g++.old-deja/g++.abi/vtable2.C =================================================================== --- a/src/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C (.../branches/gcc-6-branch) @@ -142,10 +142,24 @@ #define INC_VDATA(A,N) ((A) += 2*(N)) #endif #else +// HPPA uses function pointers but they point to function descriptors. +#if defined __hppa__ +#ifdef __hpux__ +#ifdef _LP64 +#define CMP_VPTR(A, B) (*(unsigned long *)(*(A)+16) == *(unsigned long *)((unsigned long)(B)+16)) +#else #define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B)) +#endif /* _LP64 */ +#else +extern "C" { unsigned int __canonicalize_funcptr_for_compare (void*); } +#define CMP_VPTR(A, B) (__canonicalize_funcptr_for_compare(*(void **)A) == __canonicalize_funcptr_for_compare((void *)B)) +#endif /* __hpux__ */ +#else +#define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B)) +#endif /* __hppa__ */ #define INC_VPTR(A) ((A) += 1) #define INC_VDATA(A,N) ((A) += (N)) -#endif +#endif /* __ia64__ */ int main () { Index: gcc/testsuite/gfortran.dg/submodule_27.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_27.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_27.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,44 @@ +! { dg-do run } +! +! Tests the fix for PR71838 in which the PROCEDURE dummy argument caused +! an ICE in the submodule. This an executable version of the reduced test +! in comment #11. +! +! Contributed by Anton Shterenlikht +! Test reduced by Dominique d'Humieres +! +subroutine hello (message) + character (7), intent(inout) :: message + message = "hello " +end + +module cgca_m3clvg + interface + subroutine cgca_clvgs_abstract(message) + character (7), intent(inout) :: message + end subroutine cgca_clvgs_abstract + end interface + + interface + module subroutine cgca_clvgp(sub) + procedure( cgca_clvgs_abstract ) :: sub + end subroutine cgca_clvgp + end interface + + character (7) :: greeting +end module cgca_m3clvg + +submodule ( cgca_m3clvg ) m3clvg_sm3 + implicit none +contains + module procedure cgca_clvgp + call sub (greeting) + end procedure cgca_clvgp +end submodule m3clvg_sm3 + + use cgca_m3clvg + external hello + greeting = "goodbye" + call cgca_clvgp (hello) + if (trim (greeting) .ne. "hello") call abort +end Index: gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +! PR fortran/78866 +! { dg-do compile } + +subroutine pr78866(x) + integer :: x(*) +!$omp target map(x) ! { dg-error "Assumed size array" } + x(1) = 1 +!$omp end target +!$omp target data map(tofrom: x) ! { dg-error "Assumed size array" } +!$omp target update to(x) ! { dg-error "Assumed size array" } +!$omp target update from(x) ! { dg-error "Assumed size array" } +!$omp end target data +!$omp target map(x(:23)) ! { dg-bogus "Assumed size array" } + x(1) = 1 +!$omp end target +!$omp target map(x(:)) ! { dg-error "upper bound of assumed size array section" } + x(1) = 1 ! { dg-error "not a proper array section" "" { target *-*-* } .-1 } +!$omp end target +end Index: gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,9 @@ +! PR fortran/78866 +! { dg-do compile } + +subroutine pr78866(x) + integer :: x(*) +!$omp target ! { dg-error "implicit mapping of assumed size array" } + x(1) = 1 +!$omp end target +end Index: gcc/testsuite/gfortran.dg/gomp/map-1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/gomp/map-1.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/gomp/map-1.f90 (.../branches/gcc-6-branch) @@ -70,7 +70,7 @@ ! { dg-error "Rightmost upper bound of assumed size array section not specified" "" { target *-*-* } 68 } ! { dg-error "'aas' in MAP clause at \\\(1\\\) is not a proper array section" "" { target *-*-* } 68 } - !$omp target map(aas) ! { dg-error "The upper bound in the last dimension must appear" "" { xfail *-*-* } } + !$omp target map(aas) ! { dg-error "Assumed size array" } !$omp end target !$omp target map(aas(5:7)) Index: gcc/testsuite/gfortran.dg/coarray_event_1.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/coarray_event_1.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/coarray_event_1.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fcoarray=lib -lcaf_single" } + +! Check that pr70696 is really fixed. + + use iso_fortran_env + type(event_type) :: x[*] + + ! exchange must not be called or the link problem before the patch + ! does not occur. +contains + subroutine exchange + event post (x[1]) + end subroutine +end Index: gcc/testsuite/gfortran.dg/submodule_22.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_22.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_22.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,47 @@ +! { dg-do compile } +! +! Test the fix for PR78474. +! +! Contributed by Nicholas Brearly +! +module mtop + implicit none + real :: r + interface + module subroutine sub1() + end subroutine + end interface + interface + module subroutine sub2() + end subroutine + end interface + interface + module subroutine sub3() + end subroutine + end interface +end module mtop + +submodule (mtop) submod + implicit none + real :: s +contains + module subroutine sub1 + r = 0.0 + end subroutine sub1 +end + +submodule (mtop:submod) subsubmod +contains + module subroutine sub2 + r = 1.0 + s = 1.0 + end subroutine sub2 +end + +submodule (mtop:submod:subsubmod) subsubsubmod ! { dg-error "Syntax error in SUBMODULE statement" } +contains + module subroutine sub3 + r = 2.0 + s = 2.0 + end subroutine sub3 +end Index: gcc/testsuite/gfortran.dg/submodule_26.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_26.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_26.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,46 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! Tests the fix for PR71838 in which the PROCEDURE dummy argument caused +! an ICE in the submodule. This is the reduced test in comment #9. +! +! Contributed by Anton Shterenlikht +! Test reduced by Dominique d'Humieres +! +module cgca_m3clvg + abstract interface + subroutine cgca_clvgs_abstract( farr, marr, n, cstate, debug, & + newstate ) + integer, parameter :: iarr = 4, idef = 4, rdef = 4, ldef = 4 + integer, parameter :: l=-1, centre=l+1, u=centre+1 + integer( kind=iarr ), intent(in) :: farr(l:u,l:u,l:u), & + marr(l:u,l:u,l:u), cstate + real( kind=rdef ), intent(in) :: n(3) + logical( kind=ldef ), intent(in) :: debug + integer( kind=iarr ), intent(out) :: newstate + end subroutine cgca_clvgs_abstract + end interface + + interface + module subroutine cgca_clvgp( coarray, rt, t, scrit, sub, gcus, & + periodicbc, iter, heartbeat, debug ) + integer, parameter :: iarr = 4, idef = 4, rdef = 4, ldef = 4 + integer( kind=iarr ), allocatable, intent(inout) :: & + coarray(:,:,:,:)[:,:,:] + real( kind=rdef ), allocatable, intent(inout) :: rt(:,:,:)[:,:,:] + real( kind=rdef ), intent(in) :: t(3,3), scrit(3) + procedure( cgca_clvgs_abstract ) :: sub + logical( kind=ldef ), intent(in) :: periodicbc + integer( kind=idef ), intent(in) :: iter, heartbeat + logical( kind=ldef ), intent(in) :: debug + end subroutine cgca_clvgp + end interface +end module cgca_m3clvg + + +submodule ( cgca_m3clvg ) m3clvg_sm3 + implicit none +contains + module procedure cgca_clvgp + end procedure cgca_clvgp +end submodule m3clvg_sm3 Index: gcc/testsuite/gfortran.dg/submodule_21.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_21.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_21.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! Test the fix for PR78331. +! +! Reported on https://groups.google.com/forum/#!topic/comp.lang.fortran/NFCF9brKksg +! +MODULE MainModule +END MODULE MainModule + +SUBMODULE (MainModule) MySub1 + IMPLICIT NONE + INTEGER, PARAMETER :: a = 17 +END SUBMODULE MySub1 + +PROGRAM MyProg + USE MainModule + WRITE(*,*) a +END PROGRAM MyProg +! { dg-excess-errors "does not contain a MODULE PROCEDURE" } Index: gcc/testsuite/gfortran.dg/class_62.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/class_62.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/class_62.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,29 @@ +! { dg-do run } +! { dg-options "-fcheck=recursion" } +! +! PR 80361: [5/6/7 Regression] bogus recursive call to nonrecursive procedure with -fcheck=recursion +! +! Contributed by Jürgen Reuter + +program main_ut + + implicit none + + type :: prt_spec_expr_t + end type + + type :: prt_expr_t + class(prt_spec_expr_t), allocatable :: x + end type + + type, extends (prt_spec_expr_t) :: prt_spec_list_t + type(prt_expr_t) :: e + end type + + class(prt_spec_list_t), allocatable :: y + + allocate (y) + allocate (prt_spec_list_t :: y%e%x) + deallocate(y) + +end program Index: gcc/testsuite/gfortran.dg/submodule_25.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_25.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_25.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,43 @@ +! { dg-do compile } +! Test the fix for PR79434 in which the PRIVATE attribute of the +! component 'i' of the derived type 't' was not respected in the +! submodule 's_u'. +! +! Contributed by Reinhold Bader +! +module mod_encap_t + implicit none + type, public :: t + private + integer :: i + end type +end module +module mod_encap_u + use mod_encap_t + type, public, extends(t) :: u + private + integer :: j + end type + interface + module subroutine fu(this) + type(u), intent(inout) :: this + end subroutine + end interface +end module +submodule (mod_encap_u) s_u +contains + module procedure fu +! the following statement should cause the compiler to +! abort, pointing out a private component defined in +! a USED module is being accessed + this%i = 2 ! { dg-error "is a PRIVATE component" } + this%j = 1 + write(*, *) 'FAIL' + end procedure +end submodule +program p + use mod_encap_u + implicit none + type(u) :: x + call fu(x) +end program Index: gcc/testsuite/gfortran.dg/fimplicit_none_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_2.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/fimplicit_none_2.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-options "-fimplicit-none" } +! PR fortran/78239 - used to ICE +program p + character(*), parameter :: z(2) = [character(n) :: 'x', 'y'] ! { dg-error "Scalar INTEGER expression expected" } +end Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +! { dg-do compile } +! +! PR 80392: [5/6/7 Regression] [OOP] ICE with allocatable polymorphic function result in a procedure pointer component +! +! Contributed by + +module mwe + + implicit none + + type :: MyType + procedure(my_op), nopass, pointer :: op + end type + +contains + + function my_op() result(foo) + class(MyType), allocatable :: foo + end function + +end module Index: gcc/testsuite/gfortran.dg/coarray_43.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/coarray_43.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/coarray_43.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +! { dg-do link } +! { dg-options "-fcoarray=lib -lcaf_single" } + +program coarray_43 + implicit none + integer, parameter :: STR_LEN = 50 + character(len=STR_LEN) :: str[*] + integer :: pos + write(str,"(2(a,i2))") "Greetings from image ",this_image()," of ",num_images() + block + pos = scan(str[5], set="123456789") + end block +end program Index: gcc/testsuite/gfortran.dg/fimplicit_none_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_1.f90 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/fimplicit_none_1.f90 (.../branches/gcc-6-branch) @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-options "-fimplicit-none" } +subroutine s(n) ! { dg-error "has no IMPLICIT type" } + character(n) :: c ! { dg-error "Scalar INTEGER expression expected" } + c = 'c' ! { dg-error "has no IMPLICIT type" } +end Index: gcc/testsuite/gfortran.dg/submodule_28.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/submodule_28.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/submodule_28.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,52 @@ +! { dg-do run } +! +! Tests the fix for PR79676 in which submod_test was private even to the +! submodule 'my_submod'. +! +! Contributed by Adam Hirst +! +module my_mod + private ! This hid 'submod_test'. + interface + module subroutine submod_test(x) + integer :: x + end subroutine + end interface + integer answer + public routine1, print_two, answer +contains + subroutine routine1(x) + integer :: x + call submod_test(x) + end subroutine + subroutine print_two() + integer, parameter :: two = 2 + answer = answer * two + end subroutine +end module + +module my_mod_2 + use my_mod +contains + subroutine circular_dependency() + call print_two() + end subroutine +end module + +submodule (my_mod) my_submod + use my_mod_2 +contains +module subroutine submod_test(x) + integer :: x + answer = x + call circular_dependency() +end subroutine + +end submodule + +program hello + use my_mod + implicit none + call routine1(2) + if (answer .ne. 4) call abort +end program Index: gcc/testsuite/gfortran.dg/coarray/event_3.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/coarray/event_3.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/coarray/event_3.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +! { dg-do run } +! +! Check PR fortran/70696 is fixed. + +program global_event + use iso_fortran_env , only : event_type + implicit none + type(event_type) :: x[*] + + call exchange + contains + subroutine exchange + integer :: cnt + event post(x[1]) + event post(x[1]) + call event_query(x, cnt) + if (cnt /= 2) error stop 1 + event wait(x, until_count=2) + end subroutine +end Index: gcc/testsuite/gfortran.dg/coarray/event_4.f08 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/coarray/event_4.f08 (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gfortran.dg/coarray/event_4.f08 (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +! { dg-do run } +! +! Check that pr 70697 is fixed. + +program event_4 + use iso_fortran_env + integer :: nc(1) + type(event_type) done[*] + nc(1) = 1 + event post(done[1]) + event wait(done,until_count=nc(1)) +end Index: gcc/testsuite/gcc.c-torture/execute/pr79121.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr79121.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr79121.c (.../branches/gcc-6-branch) @@ -0,0 +1,34 @@ +extern void abort (void); + +__attribute__ ((noinline, noclone)) unsigned long long f1 (int x) +{ + return ((unsigned long long) x) << 4; +} + +__attribute__ ((noinline, noclone)) long long f2 (unsigned x) +{ + return ((long long) x) << 4; +} + +__attribute__ ((noinline, noclone)) unsigned long long f3 (unsigned x) +{ + return ((unsigned long long) x) << 4; +} + +__attribute__ ((noinline, noclone)) long long f4 (int x) +{ + return ((long long) x) << 4; +} + +int main () +{ + if (f1 (0xf0000000) != 0xffffffff00000000) + abort (); + if (f2 (0xf0000000) != 0xf00000000) + abort (); + if (f3 (0xf0000000) != 0xf00000000) + abort (); + if (f4 (0xf0000000) != 0xffffffff00000000) + abort (); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/20170419-1.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/20170419-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/20170419-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,24 @@ +/* PR tree-optimization/80426 */ +/* Testcase by */ + +#define INT_MAX 0x7fffffff +#define INT_MIN (-INT_MAX-1) + +int x; + +int main (void) +{ + volatile int a = 0; + volatile int b = -INT_MAX; + int j; + + for(j = 0; j < 18; j += 1) { + x = ( (a == 0) != (b - (int)(INT_MIN) ) ); + } + + if (x != 0) + __builtin_abort (); + + return 0; +} + Index: gcc/testsuite/gcc.c-torture/execute/pr80501.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr80501.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr80501.c (.../branches/gcc-6-branch) @@ -0,0 +1,23 @@ +/* PR rtl-optimization/80501 */ + +signed char v = 0; + +static signed char +foo (int x, int y) +{ + return x << y; +} + +__attribute__((noinline, noclone)) int +bar (void) +{ + return foo (v >= 0, __CHAR_BIT__ - 1) >= 1; +} + +int +main () +{ + if (sizeof (int) > sizeof (char) && bar () != 0) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/pr79043.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr79043.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr79043.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* PR ipa/78791 */ + +int val; + +int *ptr = &val; +float *ptr2 = &val; + +static +__attribute__((always_inline, optimize ("-fno-strict-aliasing"))) +typepun () +{ + *ptr2=0; +} + +main() +{ + *ptr=1; + typepun (); + if (*ptr) + __builtin_abort (); +} Index: gcc/testsuite/gcc.c-torture/execute/pr77767.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr77767.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr77767.c (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +/* PR c/77767 */ + +void +foo (int a, int b[a++], int c, int d[c++]) +{ + if (a != 2 || c != 2) + __builtin_abort (); +} + +int +main () +{ + int e[10]; + foo (1, e, 1, e); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/pr78617.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr78617.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr78617.c (.../branches/gcc-6-branch) @@ -0,0 +1,25 @@ +int a = 0; +int d = 1; +int f = 1; + +int fn1() { + return a || 1 >> a; +} + +int fn2(int p1, int p2) { + return p2 >= 2 ? p1 : p1 >> 1; +} + +int fn3(int p1) { + return d ^ p1; +} + +int fn4(int p1, int p2) { + return fn3(!d > fn2((f = fn1() - 1000) || p2, p1)); +} + +int main() { + if (fn4(0, 0) != 1) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.c-torture/compile/pr79197.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/pr79197.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/pr79197.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* PR target/79197 */ + +unsigned long b; + +unsigned long +foo (float *a, float *x) +{ + __builtin_memcpy (a, x, sizeof (float)); + return *a; +} Index: gcc/testsuite/gcc.c-torture/compile/pr79411.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/pr79411.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/pr79411.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* PR tree-optimization/79411 */ + +typedef struct __jmp_buf_tag { char buf[1024]; } jmp_buf[1]; +extern int setjmp (jmp_buf); +extern int bar (unsigned int *); +extern jmp_buf *baz (void); +struct C { int c1; unsigned int c2, c3, c4; }; + +void +foo (struct C *x, const int *y, unsigned int *z, unsigned int e, unsigned int g) +{ + unsigned int d = 0; + unsigned long f; + setjmp (*baz ()); + f = 1 + d; + if ((x->c1 || x->c2) && g && (!e || d >= 8)) + d = 16; + else + d = 8; + if ((!x->c3 && !x->c4 || *y == 0) && !e && bar (z)) + *z = 1 + f; +} Index: gcc/testsuite/gnat.dg/array28.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array28.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array28.adb (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Array28_Pkg; use Array28_Pkg; + +procedure Array28 is + + function Get return Outer_type is + Ret : Outer_Type; + begin + Ret (Inner_Type'Range) := F; + return Ret; + end; + + A : Outer_Type := Get; + B : Inner_Type := A (Inner_Type'Range); + +begin + if B /= "12345" then + raise Program_Error; + end if; +end; Index: gcc/testsuite/gnat.dg/opt63.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/opt63.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/opt63.adb (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatws" } + +procedure Opt63 is + + type T_MOD is mod 2**32; + subtype T_INDEX is T_MOD range 3_000_000_000 .. 4_000_000_000; + type T_ARRAY is array(T_INDEX range <>) of INTEGER; + + function Build_Crash(First : T_INDEX; Length : NATURAL) return T_ARRAY is + R : T_ARRAY(First .. T_Index'Val (T_Index'Pos (First) + Length)) + := (others => -1); -- Crash here + begin + return R; + end; + +begin + null; +end; Index: gcc/testsuite/gnat.dg/array26_pkg.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array26_pkg.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array26_pkg.adb (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package body Array26_Pkg is + + function F return Inner_Type is + begin + return "123"; + end; + +end Array26_Pkg; Index: gcc/testsuite/gnat.dg/array26_pkg.ads =================================================================== --- a/src/gcc/testsuite/gnat.dg/array26_pkg.ads (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array26_pkg.ads (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package Array26_Pkg is + + subtype Outer_Type is String (1 .. 4); + subtype Inner_Type is String (1 .. 3); + + function F return Inner_Type; + +end Array26_Pkg; Index: gcc/testsuite/gnat.dg/array27_pkg.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array27_pkg.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array27_pkg.adb (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package body Array27_Pkg is + + function F return Inner_Type is + begin + return "123"; + end; + +end Array27_Pkg; Index: gcc/testsuite/gnat.dg/array27_pkg.ads =================================================================== --- a/src/gcc/testsuite/gnat.dg/array27_pkg.ads (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array27_pkg.ads (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package Array27_Pkg is + + subtype Outer_Type is String (1 .. 8); + subtype Inner_Type is String (1 .. 3); + + function F return Inner_Type; + +end Array27_Pkg; Index: gcc/testsuite/gnat.dg/array26.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array26.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array26.adb (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Array26_Pkg; use Array26_Pkg; + +procedure Array26 is + + function Get return Outer_type is + Ret : Outer_Type; + begin + Ret (Inner_Type'Range) := F; + return Ret; + end; + + A : Outer_Type := Get; + B : Inner_Type := A (Inner_Type'Range); + +begin + if B /= "123" then + raise Program_Error; + end if; +end; Index: gcc/testsuite/gnat.dg/array27.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array27.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array27.adb (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Array27_Pkg; use Array27_Pkg; + +procedure Array27 is + + function Get return Outer_type is + Ret : Outer_Type; + begin + Ret (Inner_Type'Range) := F; + return Ret; + end; + + A : Outer_Type := Get; + B : Inner_Type := A (Inner_Type'Range); + +begin + if B /= "123" then + raise Program_Error; + end if; +end; Index: gcc/testsuite/gnat.dg/array28_pkg.adb =================================================================== --- a/src/gcc/testsuite/gnat.dg/array28_pkg.adb (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array28_pkg.adb (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package body Array28_Pkg is + + function F return Inner_Type is + begin + return "12345"; + end; + +end Array28_Pkg; Index: gcc/testsuite/gnat.dg/array28_pkg.ads =================================================================== --- a/src/gcc/testsuite/gnat.dg/array28_pkg.ads (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gnat.dg/array28_pkg.ads (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +package Array28_Pkg is + + subtype Outer_Type is String (1 .. 8); + subtype Inner_Type is String (1 .. 5); + + function F return Inner_Type; + +end Array28_Pkg; Index: gcc/testsuite/gcc.dg/vector-1.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/vector-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/vector-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu90" } */ + +typedef int V __attribute__ ((vector_size(4))); +void fn1 () +{ + (V){(1,0)}[0] = 0; +} Index: gcc/testsuite/gcc.dg/pr80218.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr80218.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr80218.c (.../branches/gcc-6-branch) @@ -0,0 +1,28 @@ +/* { dg-options "-O2 -fdump-rtl-ira-details-blocks" } */ +/* { dg-require-effective-target c99_runtime } */ + +#include + +void foo (float *); + +void +f1 (float *x) +{ + x[0] = sqrtf (x[0]); +} + +void +f2 (float *x) +{ + sqrtf (x[0]); + foo (x); +} + +void +f3 (float *x) +{ + acosf (x[0]); + foo (x); +} + +/* { dg-final { scan-rtl-dump-not "Invalid sum" "ira" } } */ Index: gcc/testsuite/gcc.dg/goacc/loop-processing-1.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/goacc/loop-processing-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/goacc/loop-processing-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +/* Make sure that OpenACC loop processing happens. */ +/* { dg-additional-options "-O2 -fdump-tree-oaccdevlow" } */ + +extern int place (); + +void vector_1 (int *ary, int size) +{ +#pragma acc parallel num_workers (32) vector_length(32) copy(ary[0:size]) firstprivate (size) + { +#pragma acc loop gang + for (int jx = 0; jx < 1; jx++) +#pragma acc loop auto + for (int ix = 0; ix < size; ix++) + ary[ix] = place (); + } +} + +/* { dg-final { scan-tree-dump "OpenACC loops.*Loop 0\\\(0\\\).*Loop 14\\\(1\\\).*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, 0, 1, 20\\\);.*Head-0:.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, 0, 1, 20\\\);.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 0\\\);.*Tail-0:.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 1\\\);.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 0\\\);.*Loop 6\\\(4\\\).*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, 0, 1, 6\\\);.*Head-0:.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, 0, 1, 6\\\);.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 2\\\);.*Tail-0:.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 1\\\);.*\\\.data_dep\\\.\[0-9_\]+ = UNIQUE \\\(\[0-9\]+, \\\.data_dep\\\.\[0-9_\]+, 2\\\);" "oaccdevlow" } } */ Index: gcc/testsuite/gcc.dg/pr79570.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr79570.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr79570.c (.../branches/gcc-6-branch) @@ -0,0 +1,6 @@ +/* PR target/79570 */ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fselective-scheduling2 -fvar-tracking-assignments" } */ +/* { dg-warning "changes selective scheduling" "" { target *-*-* } 0 } */ + +#include "pr69956.c" Index: gcc/testsuite/gcc.dg/spellcheck-options-13.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/spellcheck-options-13.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/spellcheck-options-13.c (.../branches/gcc-6-branch) @@ -0,0 +1,5 @@ +/* PR driver/78863. */ + +/* { dg-do compile } */ +/* { dg-options "-fsanitize" } */ +/* { dg-error "unrecognized command line option .-fsanitize..$" "" { target *-*-* } 0 } */ Index: gcc/testsuite/gcc.dg/pr78644-1.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr78644-1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr78644-1.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-Og -fipa-cp -w -Wno-psabi" } */ + +typedef unsigned __int128 u128; +typedef unsigned __int128 V __attribute__ ((vector_size (64))); + +V x4; + +static V +bar (u128 x2, u128 x3) +{ + while (x4[0]--) + x2 /= x3 >>= 1; + return x2 + x3 + x4; +} + +void +foo (void) +{ + bar (0, 0); +} Index: gcc/testsuite/gcc.dg/pr79574.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr79574.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr79574.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* PR rtl-optimization/79574 */ +/* { dg-do compile } */ +/* { dg-options "-Os --param gcse-cost-distance-ratio=2147483647" } */ + +void a (void) +{ + volatile int b; + for (;; b) + ; +} Index: gcc/testsuite/gcc.dg/debug/pr80321.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/debug/pr80321.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/debug/pr80321.c (.../branches/gcc-6-branch) @@ -0,0 +1,26 @@ +/* PR debug/80321 */ +/* { dg-do compile } */ +/* { dg-options "-fkeep-inline-functions" } */ + +void bar (void); + +static inline void +test (int x) +{ + inline void + foo (int x) + { + test (0); + asm volatile ("" : : : "memory"); + } + if (x != 0) + foo (x); + else + bar (); +} + +void +baz (int x) +{ + test (x); +} Index: gcc/testsuite/gcc.dg/pr79494.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr79494.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr79494.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* PR target/79494 */ +/* { dg-do compile } */ +/* { dg-require-effective-target split_stack } */ +/* { dg-options "-O2 -fsplit-stack -g" } */ + +void +foo (int a) +{ + __label__ lab; + __attribute__((noinline, noclone)) void bar (int b) + { + switch (b) + { + case 1: + goto lab; + case 2: + goto lab; + } + } + bar (a); +lab:; +} Index: gcc/testsuite/gcc.dg/ubsan/pr80097.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/ubsan/pr80097.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/ubsan/pr80097.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* PR c/80097 */ +/* { dg-do compile } */ +/* { dg-options "-std=c89 -fsanitize=float-divide-by-zero" } */ + +int +foo (double a) +{ + int b = (1 / a >= 1); + return b; +} Index: gcc/testsuite/gcc.dg/asan/pr80168.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/asan/pr80168.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/asan/pr80168.c (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +/* PR sanitizer/80168 */ +/* { dg-do compile } */ + +int a; + +int +foo (void) +{ + struct S { int c[a]; int q : 8; int e : 4; } f; + f.e = 4; + return f.e; +} Index: gcc/testsuite/gcc.dg/pr79255.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr79255.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr79255.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* PR bootstrap/79255 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g -fno-toplevel-reorder -Wno-attributes" } */ + +static inline __attribute__((always_inline)) int foo (int x); + +int +baz (void) +{ + return foo (3) + foo (6) + foo (9); +} + +static inline __attribute__((always_inline)) int +foo (int x) +{ + auto inline int __attribute__((noinline)) bar (int x) + { + return x + 3; + } + return bar (x) + bar (x + 2); +} Index: gcc/testsuite/gcc.dg/fixed-point/pr79971.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/fixed-point/pr79971.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/fixed-point/pr79971.c (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +void +a () +{ + unsigned _Accum b; + for (b = 0.1; b; b += 0.1uk) + { + _Sat unsigned _Accum b; + for (b = 0; b <= 0.8; b = 0.1) + ; + } +} Index: gcc/testsuite/gcc.dg/graphite/pr71824-2.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/graphite/pr71824-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/graphite/pr71824-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize" } */ + +typedef struct { float x1; } bx; +typedef struct { + int w; + short o; +} T2P; +T2P a; +int b; +void fn2(); +void fn3(bx*,short); +void fn1() { + unsigned i = 0; + int c; + bx *d; + bx **h; + if (b == 0) { + fn2(); + return; + } + for (; c; c++) + for (; i < 100; i++) { + d = h[i]; + d->x1 = a.w; + } + for (; i < 100; i++) { + d = h[i]; + d->x1 = a.w; + } + if (a.o) + for (; b;) + fn3(d, a.o); +} Index: gcc/testsuite/gcc.dg/graphite/pr80167.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/graphite/pr80167.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/graphite/pr80167.c (.../branches/gcc-6-branch) @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize" } */ + +typedef struct +{ + short a; + short b; + short c; +} d; +extern d e[]; +int f[8]; +void +g (d *i) +{ + int h = 0; + for (; h < 28; h++) + e[h].a = e[h].b = i[h].a; + h = 0; + for (; h < 8; h++) + f[h] = i[h].b + i[h].c; + h = 0; + for (; h < 8; h++) + f[h] = i[h].b; +} Index: gcc/testsuite/gcc.dg/graphite/pr71824-3.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/graphite/pr71824-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/graphite/pr71824-3.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-loop-distribution -floop-nest-optimize" } */ + +struct +{ + int bz; +} od, ka[2]; + +int fw; + +void +pc (void) +{ + for (od.bz = 0; od.bz < 2; ++od.bz) + { + ++fw; + ka[0] = ka[1]; + } +} Index: gcc/testsuite/gcc.dg/graphite/pr71824.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/graphite/pr71824.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/graphite/pr71824.c (.../branches/gcc-6-branch) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize" } */ + +int a, b, d; +int **c; +int fn1() { + while (a) + if (d) { + int e = -d; + for (; b < e; b++) + c[b] = &a; + } else { + for (; b; b++) + c[b] = &b; + d = 0; + } +} Index: gcc/testsuite/gcc.dg/graphite/pr79977.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/graphite/pr79977.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/graphite/pr79977.c (.../branches/gcc-6-branch) @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize" } */ + +int uo[3]; +int di; + +void +i7 (int mp) +{ + int l4; + +wh: + while (l4 > 1) + { + for (di = 0; di < 2; ++di) + uo[di] = 0; + + for (di = 0; di < 3; ++di) + { + uo[di] = 0; + if (mp != 0) + goto wh; + } + + --l4; + } +} Index: gcc/testsuite/gcc.dg/pr78644-2.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr78644-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr78644-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-Og -finline-functions-called-once -w -Wno-psabi" } */ + +typedef unsigned V __attribute__ ((vector_size (64))); +typedef unsigned __int128 U __attribute__ ((vector_size (64))); + +U +bar4 (U u0, U u1) +{ + if (u1[0]) + u1 <<= 1; + return u0 + u1; +} + +V +foo (U u, V v) +{ + v |= (unsigned)bar4(u, (U){})[0]; + return v; +} Index: gcc/testsuite/gcc.dg/comp-goto-4.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/comp-goto-4.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/comp-goto-4.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* PR middle-end/79537 */ +/* { dg-do compile } */ +/* { dg-options "" } */ +/* { dg-require-effective-target indirect_jumps } */ +/* { dg-require-effective-target label_values } */ + +void +f (void) +{ +L: + *&&L; +} + +void +f2 (void) +{ + void *p; +L: + p = &&L; + *p; /* { dg-warning "dereferencing 'void \\*' pointer" } */ +} Index: gcc/testsuite/gcc.dg/lto/pr69188_0.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/lto/pr69188_0.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/lto/pr69188_0.c (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +/* PR ipa/69188 */ +/* { dg-lto-do link } */ +/* { dg-lto-options { { -flto -O0 -fprofile-generate } } } */ +/* { dg-require-profiling "-fprofile-generate" } */ + +void fn1(void) +{ +} Index: gcc/testsuite/gcc.dg/lto/pr50199_0.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/lto/pr50199_0.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/lto/pr50199_0.c (.../branches/gcc-6-branch) @@ -0,0 +1,17 @@ +/* PR middle-end/50199 */ +/* { dg-lto-options {{-O2 -flto -fno-merge-constants --param=lto-min-partition=1}} } */ + +__attribute__ ((noinline)) const char * +foo (const char *x) +{ + return x; +} + +int +main () +{ + const char *a = "ab"; + if (a != foo (a)) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.dg/lto/pr69188_1.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/lto/pr69188_1.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/lto/pr69188_1.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* PR ipa/69188 */ +/* { dg-options "-flto -O1 -fprofile-generate" } */ + +extern void fn1(void); + +int main() { + fn1(); + return 0; +} + Index: gcc/testsuite/gcc.dg/pr79574-2.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr79574-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr79574-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,33 @@ +/* PR rtl-optimization/79574 */ +/* { dg-do compile } */ +/* { dg-options "-Os --param gcse-cost-distance-ratio=2147483647" } */ + +#include "stdarg.h" + +int buf[100]; +int buf1[10]; + +int rd (int *pppp, int n, ...) +{ + va_list argp; + int *p; + int i; + int res; + + va_start (argp, n); + for (; n > 0; n--) + va_arg (argp, double); + p = va_arg (argp, int *); + i = va_arg (argp, int); + + res = p[i]; + __builtin_printf ("%d\n", res); + + return res; +} + +int mpx_test (int argc, const char **argv) +{ + rd (buf1, 2, 10.0d, 10.0d, buf, 100, buf1); + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr79536.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr79536.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr79536.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* { dg-do compile } */ + +typedef int A; +int +fn1 (A x, A y) +{ + if ((x + (x - y) * 1i) != -(-x + (y - x) * 1i)) + return 1; + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr71055.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr71055.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr71055.c (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +/* { dg-do run } */ + +extern void abort (void); +union U { int i; _Bool b; char c; }; +void __attribute__((noinline,noclone)) +foo (union U *u) +{ + if (u->c != 0) + abort (); +} +int main() +{ + union U u; + u.i = 10; + u.b = 0; + foo (&u); + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr71881.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr71881.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr71881.c (.../branches/gcc-6-branch) @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-effective-target alloca } */ /* { dg-additional-options "-g" } */ int a, b, c, d, *e, f, g; Index: gcc/testsuite/gcc.dg/torture/pr79666.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr79666.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr79666.c (.../branches/gcc-6-branch) @@ -0,0 +1,30 @@ +/* { dg-do run } */ + +struct +{ + unsigned a:6; +} b; + +int c, e, g = 7; +signed char d, f = 6, h = -10; + +void fn1 () +{ + for (; c < 9; c++) + { + if (f) + g = ~(~0 / (g ^ e)); + b.a = ~0; + d = ~((h ^ b.a) & 132 & (~(f && g) | (d && 1))); + e = ~0; + if (d < 127 || f < 1) + continue; + g = 0; + } +} + +int main () +{ + fn1 (); + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr80181.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr80181.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr80181.c (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile } */ + +int +nr (void) +{ +} + +void +it (int dl) +{ + int vp = 0; + + for (;;) + { + dl = vp ^ nr (); + dl ^= vp; + vp = 1; + } +} Index: gcc/testsuite/gcc.dg/torture/pr80362.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr80362.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr80362.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fstrict-overflow" } */ + +int main() +{ + signed char var_0, var_1 = -128; + var_0 = (signed char)(-var_1) / 3; + if (var_0 > 0) + __builtin_abort(); +} Index: gcc/testsuite/gcc.dg/torture/pr80122.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr80122.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr80122.c (.../branches/gcc-6-branch) @@ -0,0 +1,52 @@ +/* { dg-do run } */ + +#define __GNU_ALWAYS_INLINE inline __attribute__(( __always_inline__)) + +#define DEVT_ALL 0 + +#define CMD_ABI_DEVICES 100 + +static __GNU_ALWAYS_INLINE int +send_msg_to_gm_w_dev_t(int msg_type, unsigned int dev_msg_type, + int devt, ...) +{ + char s[256]; + int nArgs = __builtin_va_arg_pack_len(); + if (nArgs != 2) + __builtin_abort (); + __builtin_sprintf (s, "%d", __builtin_va_arg_pack ()); + if (__builtin_strcmp (s, "99") != 0) + __builtin_abort (); + /* do something with nArgs and ... */ + return 0; +} + +static __GNU_ALWAYS_INLINE int +send_msg_to_gm(int msg_type, unsigned int dev_msg_type, + ...) +{ + int nArgs = __builtin_va_arg_pack_len(); + if (nArgs != 2) + __builtin_abort (); + return send_msg_to_gm_w_dev_t(msg_type, dev_msg_type, + DEVT_ALL, __builtin_va_arg_pack()); +} + +static __GNU_ALWAYS_INLINE int +send_enable(unsigned int dev_msg_type, ...) +{ + int nArgs = __builtin_va_arg_pack_len(); + if (nArgs != 2) + __builtin_abort (); + return send_msg_to_gm(CMD_ABI_DEVICES, dev_msg_type, __builtin_va_arg_pack()); +} + +int +main(void) +{ + int mode = 99; + + send_enable(1, mode, sizeof(mode)); + + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr78742.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr78742.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr78742.c (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target int128 } */ +/* { dg-require-effective-target alloca } */ + +void foo(); + +void func() +{ + int m; + + int tab[m]; + + __int128 j; + for(; j; j++) + { + tab[j] = 0; + tab[j+1] = 0; + } + + foo(); +} Index: gcc/testsuite/gcc.dg/torture/pr80539.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr80539.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr80539.c (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +/* { dg-do compile } */ + +signed char a, b; +void fn1() +{ + signed char c, e; + short d; + if (0) { + for (; d;) { +l1: + for (c = 7; a; c++) + ; + e = 6; + for (; b; e++) + ; + } + c -= e; + } + if (d == 7) + goto l1; + a = c; +} Index: gcc/testsuite/gcc.dg/torture/pr80025.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr80025.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr80025.c (.../branches/gcc-6-branch) @@ -0,0 +1,24 @@ +/* PR debug/80025 */ +/* { dg-do compile } */ +/* { dg-options "-g -ftracer -w" } */ + +int a; +long int b, c; + +long int +foo (void) +{ +} + +void +bar (int x, short int y, unsigned short int z) +{ +} + +int +baz (void) +{ + a -= b; + b = !foo (); + bar (b ^= (c ^ 1) ? (c ^ 1) : foo (), (__INTPTR_TYPE__) &bar, a); +} Index: gcc/testsuite/gcc.dg/torture/pr79732.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr79732.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr79732.c (.../branches/gcc-6-branch) @@ -0,0 +1,5 @@ +/* { dg-do link } */ + +int bar () __attribute__ ((alias ("foo"))); +void foo () { } +int main () { return bar(); } Index: gcc/testsuite/gcc.dg/tree-ssa/pr78886.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr78886.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr78886.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +void *malloc(unsigned long x); + +void foo(void) +{ + volatile int i; + malloc(1); + i; +} Index: gcc/testsuite/gcc.dg/tree-ssa/pr79803.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr79803.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr79803.c (.../branches/gcc-6-branch) @@ -0,0 +1,60 @@ +/* { dg-do compile { target { x86_64-*-* } } } */ +/* { dg-options "-march=opteron-sse3 -Ofast --param l1-cache-line-size=3 -Wdisabled-optimization" } */ +/* { dg-require-effective-target indirect_jumps } */ + +#include + +extern void abort (void); + +jmp_buf buf; + +void raise0(void) +{ + __builtin_longjmp (buf, 1); +} + +int execute(int cmd) /* { dg-warning "'l1-cache-size' parameter is not a power of two 3" } */ +{ + int last = 0; + + if (__builtin_setjmp (buf) == 0) + while (1) + { + last = 1; + raise0 (); + } + + if (last == 0) + return 0; + else + return cmd; +} + +int execute2(int cmd, int cmd2) +{ + int last = 0; + + if (__builtin_setjmp (buf) == 0) + while (1) + { + last = 1; + raise0 (); + } + + if (last == 0) + return 0; + else + return cmd; +} + + +int main(void) +{ + if (execute (1) == 0) + abort (); + + if (execute2 (1, 2) == 0) + abort (); + + return 0; +} Index: gcc/testsuite/gcc.dg/tree-ssa/pr78428.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr78428.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr78428.c (.../branches/gcc-6-branch) @@ -0,0 +1,27 @@ +/* PR tree-optimization/78428. */ +/* { dg-options "-O2" } */ +/* { dg-do run } */ + +struct S0 +{ + int f2; + int f3:16; + int f4:18; +} ; + +int a = 5; +struct S0 b = { 3, 0, 0 }; +static struct S0 global[2] = { { 77, 0, 78 }, { 77, 0, 78 } }; + +int main () +{ + volatile struct S0 *j; + for (; a;) + { + __builtin_printf ("", b.f2); + j = &b; + *j = global[1]; + a--; + } + return 0; +} Index: gcc/testsuite/gcc.dg/tls/emutls-2.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tls/emutls-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/tls/emutls-2.c (.../branches/gcc-6-branch) @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target tls } */ +/* { dg-require-effective-target global_constructor } */ /* { dg-options "-O2" } */ /* With emulated TLS, the constructor generated during IPA Index: gcc/testsuite/gcc.dg/pr80492.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr80492.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr80492.c (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-w -O2 -fdump-tree-optimized" } */ + +static __inline__ __attribute__((__always_inline__)) +void syscall_7 (int val) +{ + register int reg __asm ("4") = val; + __asm __volatile__ ("/* Some Code %0 */" :: "r" (reg)); +} + +void do_syscalls (void) +{ + for (int s = 0; s < 2; s++) + { + syscall_7 (0); + syscall_7 (1); + } +} + +/* { dg-final { scan-tree-dump-times "reg = " 4 "optimized" } } */ Index: gcc/testsuite/gcc.dg/tree-prof/pr66295.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-prof/pr66295.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-prof/pr66295.c (.../branches/gcc-6-branch) @@ -0,0 +1,35 @@ +/* { dg-require-ifunc "" } */ +/* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-O2" } */ + +static double bar (double *__restrict, double *__restrict, int) +__attribute__ ((target_clones("avx,avx2,avx512f,default"))); + +double +foo (double *__restrict a, double *__restrict b, int n) +{ + return bar (a,b,n); +} + +double +bar (double *__restrict a, double *__restrict b, int n) /* { dg-error "attribute\[^\n\r]*foo\[^\n\r]* is unknown" } */ +{ + double s; + int i; + s = 0.0; + for (i=0; i + + Backport from mainline + 2017-03-17 Richard Biener + + PR middle-end/80075 + * g++.dg/torture/pr80075.C: New testcase. + + 2017-03-21 Richard Biener + + PR tree-optimization/80122 + * gcc.dg/torture/pr80122.c: New testcase. + + 2017-03-24 Richard Biener + + PR tree-optimization/80167 + * gcc.dg/graphite/pr80167.c: New testcase. + + 2017-03-27 Richard Biener + + PR middle-end/80171 + * g++.dg/torture/pr80171.C: New testcase. + +2017-05-09 Richard Biener + + Backport from mainline + 2017-03-28 Richard Biener + + PR middle-end/80222 + * g++.dg/pr80222.C: New testcase. + + 2017-04-06 Richard Biener + + PR tree-optimization/80262 + * gcc.target/i386/pr80262.c: New testcase. + + 2017-04-03 Richard Biener + + PR tree-optimization/80275 + * g++.dg/opt/pr80275.C: New testcase. + + 2017-04-06 Richard Biener + + PR tree-optimization/80334 + * g++.dg/torture/pr80334.C: New testcase. + + 2017-04-10 Richard Biener + + PR middle-end/80362 + * gcc.dg/torture/pr80362.c: New testcase. + + 2017-04-25 Richard Biener + + PR tree-optimization/80492 + * gcc.dg/pr80492.c: New testcase. + + 2017-04-27 Richard Biener + + PR middle-end/80539 + * gcc.dg/torture/pr80539.c: New testcase. + +2017-05-09 Jakub Jelinek + + PR testsuite/80678 + 2016-06-11 Segher Boessenkool + + PR middle-end/71310 + * gcc.target/powerpc/pr71310.c: New testcase. + +2017-05-05 Jakub Jelinek + + Backported from mainline + 2017-04-25 Jakub Jelinek + + PR rtl-optimization/80501 + * gcc.c-torture/execute/pr80501.c: New test. + + 2017-04-12 Jakub Jelinek + + PR sanitizer/80349 + * g++.dg/ubsan/pr80349.C: New test. + + 2017-04-11 Jakub Jelinek + + PR rtl-optimization/80385 + * g++.dg/opt/pr80385.C: New test. + + PR c++/80363 + * g++.dg/ext/pr80363.C: New test. + + 2017-04-10 Jakub Jelinek + + PR c++/80176 + * g++.dg/init/ref23.C: New test. + + 2017-04-04 Jakub Jelinek + + PR c++/80297 + * g++.dg/torture/pr80297.C: New test. + + PR target/80286 + * gcc.target/i386/avx-pr80286.c: New test. + * gcc.dg/pr80286.c: New test. + + 2017-04-13 Jakub Jelinek + + PR debug/80321 + * gcc.dg/debug/pr80321.c: New test. + + 2017-03-31 Jakub Jelinek + + PR debug/79255 + * gcc.dg/pr79255.c: New test. + + PR c++/79572 + * g++.dg/ubsan/null-8.C: New test. + + PR debug/80025 + * gcc.dg/torture/pr80025.c: New test. + + 2017-03-27 Jakub Jelinek + + PR sanitizer/80168 + * gcc.dg/asan/pr80168.c: New test. + + 2017-03-24 Jakub Jelinek + + PR rtl-optimization/80112 + * gcc.dg/pr80112.c: New test. + + 2017-03-22 Jakub Jelinek + + PR c++/80141 + * g++.dg/gomp/pr80141.C: New test. + + PR c++/80129 + * g++.dg/torture/pr80129.C: New test. + + 2017-03-21 Jakub Jelinek + + PR c/80097 + * gcc.dg/ubsan/pr80097.c: New test. + + 2017-03-10 Jakub Jelinek + + PR c++/79896 + * g++.dg/ext/int128-5.C: New test. + + 2017-03-09 Jakub Jelinek + + PR sanitizer/79944 + * c-c++-common/asan/pr79944.c: New test. + + PR target/79932 + * gcc.target/i386/pr79932-2.c: New test. + + PR target/79932 + * gcc.target/i386/pr79932-1.c: New test. + + 2017-03-07 Jakub Jelinek + + PR rtl-optimization/79901 + * gcc.target/i386/pr79901.c: New test. + + 2017-03-03 Jakub Jelinek + + PR target/79807 + * gcc.target/i386/pr79807.c: New test. + + 2017-03-01 Jakub Jelinek + + PR c++/79681 + * g++.dg/cpp1y/constexpr-79681-1.C: New test. + * g++.dg/cpp1y/constexpr-79681-2.C: New test. + + 2017-02-28 Jakub Jelinek + + PR target/79729 + * gcc.target/i386/pr79729.c: New test. + + 2017-02-25 Jakub Jelinek + + PR middle-end/79396 + * g++.dg/opt/pr79396.C: New test. + + 2017-02-22 Jakub Jelinek + + PR c++/79664 + * g++.dg/cpp1y/constexpr-throw.C: Adjust expected diagnostic location. + * g++.dg/gomp/pr79664.C: New test. + + 2017-02-21 Jakub Jelinek + + PR c++/79639 + * g++.dg/cpp1y/constexpr-79639.C: New test. + + PR target/79570 + * gcc.dg/pr79570.c: New test. + + PR c++/79641 + * c-c++-common/pr79641.c: New test. + + PR target/79494 + * gcc.dg/pr79494.c: New test. + + 2017-02-20 Jakub Jelinek + + PR target/79568 + * gcc.target/i386/pr79568-1.c: New test. + * gcc.target/i386/pr79568-2.c: New test. + * gcc.target/i386/pr79568-3.c: New test. + + 2017-02-18 Jakub Jelinek + + PR target/79559 + * gcc.target/i386/pr79559.c: New test. + + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * c-c++-common/gomp/pr79512.c: New test. + +2017-05-05 Marek Polacek + Ramana Radhakrishnan + Jakub Jelinek + + PR target/77728 + * g++.dg/abi/pr77728-1.C: New test. + +2017-05-01 Janus Weil + + Backport from trunk + PR fortran/80392 + * gfortran.dg/proc_ptr_comp_49.f90: New test case. + +2017-04-21 Janus Weil + + Backport from trunk + PR fortran/80361 + * gfortran.dg/class_62.f90: New test case. + +2017-04-11 Martin Jambor + + Backport from mainline + 2017-03-30 Martin Jambor + + PR ipa/77333 + * g++.dg/ipa/pr77333.C: New test. + +2017-04-06 Uros Bizjak + + Backport from mainline + 2017-04-06 Uros Bizjak + + PR target/79733 + * gcc.target/i386/pr79733.c: New test. + + 2017-04-06 Uros Bizjak + + PR target/80298 + * gcc.target/i386/pr80298-1.c: New test. + * gcc.target/i386/pr80298-2.c: Ditto. + +2017-04-06 Thomas Preud'homme + + PR target/80082 + * gcc.target/arm/atomic_loaddi_10.c: New testcase. + * gcc.target/arm/atomic_loaddi_11.c: Likewise. + +2017-04-03 Michael Meissner + + Back port from the trunk + 2017-03-14 Michael Meissner + + PR target/79947 + * gcc.target/powerpc/pr79947.c: New test. + +2017-04-03 Peter Bergner + + Backport from mainline + 2017-04-03 Peter Bergner + + PR target/80246 + * gcc.target/powerpc/dfp-builtin-1.c: Require hard_dfp, not + powerpc_vsx_ok. + (std, ld): Limit scan-assembler-times check to lp64. + (stwu, stw, lwz): Add scan-assembler-times check for ilp32. + * gcc.target/powerpc/dfp-builtin-2.c: Require hard_dfp, not + powerpc_vsx_ok. + + PR target/80246 + * gcc.target/powerpc/pr80246.c: Require hard_dfp. + +2017-04-01 Paul Thomas + + Backport from trunk + PR fortran/71838 + * gfortran.dg/submodule_26.f08 : New test. + * gfortran.dg/submodule_27.f08 : New test. + +2017-04-01 Paul Thomas + + Backport from trunk + PR fortran/79676 + * gfortran.dg/submodule_28.f08 : New test. + +2017-03-31 Richard Sandiford + + PR tree-optimization/80218 + * gcc.dg/pr80218.c: New test. + +2017-03-30 Peter Bergner + + Backport from mainline + 2017-03-30 Peter Bergner + + PR target/80246 + * gcc.target/powerpc/dfp-builtin-1.c: Remove unneeded dg-skip-if for + Darwin and SPE. + (dxex, dxexq): Update return type. + (diex, diexq): Update argument type. + * gcc.target/powerpc/pr80246.c: New test. + +2017-03-29 Michael Meissner + + Back port from trunk + 2017-03-16 Michael Meissner + + PR target/71294 + * g++.dg/pr71294.C: New test. + +2017-03-29 Richard Biener + + Backport from mainline + 2017-03-28 Richard Biener + + PR tree-optimization/78644 + * gcc.dg/pr78644-1.c: New testcase. + * gcc.dg/pr78644-2.c: Likewise. + + 2017-03-27 Richard Biener + + PR tree-optimization/80181 + * gcc.dg/torture/pr80181.c: New testcase. + +2017-03-28 Marek Polacek + + Backport from mainline + 2017-03-28 Marek Polacek + + PR sanitizer/80067 + * c-c++-common/ubsan/shift-10.c: New test. + +2017-03-27 Michael Meissner + + Back port from trunk + 2017-03-27 Michael Meissner + + PR target/78543 + * gcc.target/powerpc/pr78543.c: New test. + +2017-03-27 Tom de Vries + + backport from trunk: + 2017-03-24 Tom de Vries + + PR testsuite/80092 + * gcc.dg/tls/emutls-2.c: Add dg-require-effective-target + global_constructor. + +2017-03-26 Paul Thomas + + Backport from trunk + PR fortran/79434 + * gfortran.dg/submodule_25.f08 : New test. + +2017-03-24 Tom de Vries + + backport from trunk: + 2017-03-24 Tom de Vries + + PR testsuite/80092 + * gcc.dg/torture/pr71881.c: Add dg-require-effective-target alloca. + * gcc.dg/torture/pr78742.c: Same. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-16 Segher Boessenkool + + * gcc.dg/tree-prof/pr66295.c: Skip unless on an x86 target. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-14 Martin Liska + + PR lto/66295 + * gcc.dg/tree-prof/pr66295.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-22 Martin Liska + + PR lto/79587 + * gcc.dg/tree-prof/pr79587.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-03 Martin Liska + + PR lto/66295 + * gcc.target/i386/mvc9.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-22 Martin Liska + + PR target/79906 + * g++.dg/ext/mv8.C: Add power* targets. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-21 Martin Liska + + * gcc.target/i386/pr65044.c: Add '.' in order to catch + apostrophes. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + PR middle-end/79753 + * gcc.target/i386/mpx/pr79753.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + PR target/79769 + PR target/79770 + * g++.dg/pr79769.C: New test. + * gcc.target/i386/mpx/pr79770.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-13 Martin Liska + + PR middle-end/78339 + * gcc.target/i386/mpx/pr78339.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR tree-optimization/79631 + * gcc.target/i386/mpx/pr79631.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR target/65705 + PR target/69804 + * gcc.target/i386/pr71458.c: Update scanned pattern. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-09 Martin Liska + + PR ipa/79761 + * g++.dg/pr79761.C: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-03 Martin Liska + + PR tree-optimization/79803 + * gcc.dg/tree-ssa/pr79803.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-03 Martin Liska + + PR rtl-optimization/79574 + * gcc.dg/pr79574-2.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-17 Martin Liska + + PR rtl-optimization/79574 + * gcc.dg/pr79574.c: New test. + +2017-03-22 Martin Liska + + Backport from mainline + 2016-06-13 Martin Liska + + PR sanitizer/71458 + * gcc.target/i386/pr71458.c: New test. + +2017-03-21 Martin Sebor + + PR c++/79548 + * g++.dg/warn/Wunused-var-26.C: New test. + +2017-03-21 Pat Haugen + + Backport from mainline: + 2017-03-17 Pat Haugen + + PR target/79951 + * gcc.target/powerpc/pr79951.c: New. + +2017-03-16 Richard Biener + + Backport from mainline + 2017-02-28 Richard Biener + + PR tree-optimization/79732 + * gcc.dg/torture/pr79732.c: New testcase. + +2017-03-15 Uros Bizjak + + PR target/80019 + * gcc.target/i386/pr80019.c: New test. + +2017-03-15 Marek Polacek + + Backported from mainline + 2016-12-14 Marek Polacek + + PR c++/72775 + * g++.dg/ext/flexary12.C: Adjust dg-error. + * g++.dg/ext/flexary20.C: New. + * g++.dg/ext/flexary21.C: New. + +2017-03-14 Marek Polacek + + Backported from mainline + 2017-03-09 Marek Polacek + + PR c++/79900 - ICE in strip_typedefs + * g++.dg/warn/Wpadded-1.C: New test. + + PR c++/79687 + * g++.dg/expr/ptrmem8.C: New test. + * g++.dg/expr/ptrmem9.C: New test. + + Backported from mainline + 2017-01-31 Nathan Sidwell + + PR c++/79264 + * g++.dg/cpp1y/pr61636-1.C: Augment. + + Backported from mainline + 2017-01-17 Nathan Sidwell + + PR c++/61636 + * g++.dg/cpp1y/pr61636-1.C: New. + * g++.dg/cpp1y/pr61636-2.C: New. + * g++.dg/cpp1y/pr61636-3.C: New. + +2017-03-14 Marek Polacek + + PR c++/79962 + PR c++/79984 + * c-c++-common/nonnull-3.c: New test. + * g++.dg/warn/Wnonnull3.C: New test. + +2017-03-14 Richard Biener + + Backport from mainline + 2017-03-09 Richard Biener + + PR tree-optimization/79977 + * gcc.dg/graphite/pr79977.c: New testcase. + + 2017-03-09 Richard Biener + + PR middle-end/79971 + * gcc.dg/fixed-point/pr79971.c: New testcase. + + 2017-03-02 Richard Biener + + PR c/79756 + * gcc.dg/vector-1.c: New testcase. + + 2017-02-22 Richard Biener + + PR tree-optimization/79666 + * gcc.dg/torture/pr79666.c: New testcase. + +2017-03-07 Marek Polacek + + Backported from mainline + 2017-03-06 Marek Polacek + + PR c++/79796 - ICE with NSDMI and this pointer + * g++.dg/cpp0x/nsdmi13.C: New test. + +2017-03-06 Michael Meissner + + Back port from trunk + 2017-03-01 Michael Meissner + + PR target/79439 + * gcc.target/powerpc/pr79439.c: New test. + +2017-03-02 Uros Bizjak + + PR target/79514 + * gcc.target/i386/pr79514.c: New test. + +2017-03-01 Pat Haugen + + Backport from mainline: + 2017-03-01 Pat Haugen + + * gcc.target/powerpc/pr79544.c: Add test for vec_vsrad and fix up + scan string. + + 2017-02-27 Pat Haugen + + PR target/79544 + * gcc.target/powerpc/pr79544.c: New. + +2017-02-28 Eric Botcazou + + * gcc.target/sparc/20170228-1.c: New test. + +2017-02-25 Paul Thomas + + PR fortran/78474 + * gfortran.dg/submodule_22.f08: New test. + + PR fortran/78331 + * gfortran.dg/submodule_21.f08: New test. + +2017-02-24 Eric Botcazou + + * gnat.dg/opt63.adb: New test. + +2017-02-23 Bill Schmidt + + PR target/79268 + * gcc.target/powerpc/pr79268.c: Enable for BE targets also. + +2017-02-22 Bill Schmidt + + Backport from mainline + 2017-02-17 Bill Schmidt + + PR target/79261 + * gcc.target/powerpc/vec-xxpermdi.c: New file. + +2017-02-20 Marek Polacek + + Backport from mainline + 2017-02-20 Marek Polacek + + PR middle-end/79537 + * gcc.dg/comp-goto-4.c: New. + + PR sanitizer/79558 + * c-c++-common/ubsan/bounds-14.c: New test. + +2017-02-20 Marek Polacek + + Backport from mainline + 2017-02-17 Marek Polacek + + PR middle-end/79536 + * gcc.dg/torture/pr79536.c: New test. + +2017-01-17 Carl Love + + Backport from mainline commit r245460 on 2017-02-14 + + PR 79545 + * gcc.target/powerpc/vsx-builtin-3.c: Add missing test case for the + xvcvsxdsp and xvcvuxdsp instructions. + +2017-02-16 Jakub Jelinek + + Backported from mainline + 2017-02-09 Marek Polacek + + PR c/79428 + * c-c++-common/cilk-plus/CK/pr79428-4.c: New test. + * c-c++-common/cilk-plus/CK/pr79428-7.c: New test. + * c-c++-common/gomp/pr79428-2.c: New test. + * c-c++-common/gomp/pr79428-5.c: New test. + * c-c++-common/gomp/pr79428-6.c: New test. + * c-c++-common/pr79428-3.c: New test. + +2017-02-15 Jakub Jelinek + + Backported from mainline + 2017-02-10 Jakub Jelinek + + PR tree-optimization/79411 + * gcc.c-torture/compile/pr79411.c: New test. + + 2017-02-09 Jakub Jelinek + + PR c++/79429 + * c-c++-common/gomp/pr79429.c: New test. + * g++.dg/gomp/pr79429.C: New test. + + PR c/79431 + * c-c++-common/gomp/pr79431.c: New test. + + 2017-02-06 Jakub Jelinek + + PR c++/79377 + * g++.dg/lookup/pr79377.C: New test. + + 2017-02-02 Jakub Jelinek + + PR target/79197 + * gcc.target/powerpc/pr79197.c: New test. + * gcc.c-torture/compile/pr79197.c: New test. + + 2017-01-31 Jakub Jelinek + + PR tree-optimization/79267 + * g++.dg/opt/pr79267.C: New test. + +2017-02-14 Uros Bizjak + + PR target/79495 + * gcc.target/i386/pr79495.c: New test. + + PR middle-end/61225 + * gcc.target/i386/pr49095.c: Add -fno-shrink-wrap to dg-options. + Use dg-additional-options for ia32 target. Remove XFAIL. + +2017-02-13 Nathan Sidwell + + PR c++/79296 + * g++.dg/cpp0x/pr79296.C: New. + +2017-02-08 Richard Biener + + Backport from mainline + 2017-02-08 Richard Biener + + PR tree-optimization/71824 + PR tree-optimization/79409 + * gcc.dg/graphite/pr71824-3.c: New testcase. + + 2017-02-08 Richard Biener + + PR tree-optimization/71824 + * gcc.dg/graphite/pr71824-2.c: New testcase. + + 2017-02-01 Richard Biener + + PR tree-optimization/71824 + * gcc.dg/graphite/pr71824.c: New testcase. + +2017-02-03 Carl Love + + * gcc.target/powerpc/builtins-3-p8.c: Add new testfile for missing + vec_packs built-in tests. + +2017-02-03 Bill Schmidt + + Backport from mainline + 2017-01-27 Bill Schmidt + + PR target/65484 + * g++.dg/vect/pr36648.cc: Modify to reflect that the loop is not + vectorized on POWER unless hardware misaligned loads are + available. + +2017-01-31 Bill Schmidt + + Backport from mainline + 2017-01-29 Bill Schmidt + + PR target/79268 + * gcc.target/powerpc/pr79268.c: New file. + * gcc.target/powerpc/vsx-elemrev-1.c: Delete file. + * gcc.target/powerpc/vsx-elemrev-2.c: Likewise. + * gcc.target/powerpc/vsx-elemrev-3.c: Likewise. + * gcc.target/powerpc/vsx-elemrev-4.c: Likewise. + +2017-01-29 Andre Vehreschild + + Backport from trunk + 2017-01-13 Andre Vehreschild + + PR fortran/70697 + * gfortran.dg/coarray/event_4.f08: New test. + +2017-01-29 Andre Vehreschild + + Backport from trunk + 2017-01-19 Andre Vehreschild + + PR fortran/70696 + * gfortran.dg/coarray_43.f90: New test. + + 2017-01-18 Andre Vehreschild + + PR fortran/70696 + * gfortran.dg/coarray_event_1.f08: New test. + + 2017-01-13 Andre Vehreschild + + PR fortran/70696 + * gfortran.dg/coarray/event_3.f08: New test. + +2017-01-28 John David Anglin + + PR testsuite/70583 + * g++.old-deja/g++.abi/vtable2.C: Adjust CMP_VPTR define on hppa. + +2017-01-26 Eric Botcazou + + 2017-01-09 Eric Botcazou + + * g++.dg/opt/call2.C: New test. + * g++.dg/opt/call3.C: Likewise. + * gnat.dg/array26.adb: New test. + * gnat.dg/array26_pkg.ad[sb]: New helper. + * gnat.dg/array27.adb: New test. + * gnat.dg/array27_pkg.ad[sb]: New helper. + * gnat.dg/array28.adb: New test. + * gnat.dg/array28_pkg.ad[sb]: New helper. + +2017-01-26 Richard Biener + + Backport from mainline + 2016-01-10 Richard Biener + + PR tree-optimization/79034 + * g++.dg/torture/pr79034.C: New testcase. + + 2016-12-13 Richard Biener + + PR middle-end/78742 + * gcc.dg/torture/pr78742.c: New testcase. + +2017-01-24 Eric Botcazou + + * gcc.target/arm/vfp-longcall-apcs.c: New test. + +2017-01-23 Martin Liska + + Backport from mainline + 2016-01-23 Kyrylo Tkachov + + * gcc.dg/lto/pr69188_0.c: Require profiling support for testcase. + +2017-01-23 Martin Liska + + Backport from mainline + 2017-01-20 Martin Liska + + PR lto/69188 + * gcc.dg/lto/pr69188_0.c: New test. + * gcc.dg/lto/pr69188_1.c: New test. + +2017-01-20 Bill Schmidt + + Backport from mainline + 2017-01-16 Bill Schmidt + + * gcc.target/powerpc/swaps-p8-27.c: New. + +2017-01-20 Wilco Dijkstra + + Backport from mainline + PR target/77455 + * gcc.target/aarch64/eh_return.c: New test. + +2017-01-20 Marek Polacek + + Backported from mainline + 2017-01-04 Marek Polacek + + PR c++/77545 + PR c++/77284 + * g++.dg/cpp0x/range-for32.C: New test. + * g++.dg/cpp0x/range-for33.C: New test. + +2017-01-20 Richard Earnshaw + + Backported from mainline + 2017-01-19 Richard Earnshaw + + PR rtl-optimization/79121 + * gcc.c-torture/execute/pr79121.c: New test. + +2017-01-20 Martin Liska + + Backport from mainline + 2017-01-13 Martin Liska + + PR ipa/79043 + * gcc.c-torture/execute/pr79043.c: New test. + +2017-01-20 Martin Liska + + Backport from mainline + 2017-01-17 Martin Liska + + PR ipa/71207 + * g++.dg/ipa/pr71207.C: New test. + +2017-01-17 Jakub Jelinek + + Backported from mainline + 2017-01-11 Jakub Jelinek + + PR c++/78341 + * g++.dg/cpp0x/pr78341.C: New test. + + PR middle-end/50199 + * gcc.dg/lto/pr50199_0.c: New test. + + 2017-01-04 Jakub Jelinek + + PR c++/78949 + * c-c++-common/Wunused-var-16.c: New test. + + PR c++/78693 + * g++.dg/cpp0x/pr78693.C: New test. + + PR c++/71182 + * g++.dg/cpp0x/pr71182.C: New test. + + 2016-12-21 Jakub Jelinek + + PR fortran/78866 + * gfortran.dg/gomp/map-1.f90: Add expected error. + * gfortran.dg/gomp/pr78866-1.f90: New test. + * gfortran.dg/gomp/pr78866-2.f90: New test. + +2017-01-17 Thomas Preud'homme + + Backport from mainline + 2016-12-07 Thomas Preud'homme + + PR rtl-optimization/78617 + * gcc.c-torture/execute/pr78617.c: New test. + +2017-01-12 Bill Schmidt + + Backport from mainline + 2017-01-12 Bill Schmidt + + PR target/79044 + * gcc.target/powerpc/swaps-p8-26.c: New. + +2017-01-11 Nathan Sidwell + + PR c++/77812 + * g++.dg/pr77812.C: New. + +2017-01-10 Thomas Schwinge + + Backport from trunk r241334: + 2016-10-19 Thomas Schwinge + + PR tree-optimization/78024 + * gcc.dg/goacc/loop-processing-1.c: New file. + +2017-01-09 Andre Vieira + + Backport from mainline + 2016-12-20 Andre Vieira + + * gcc.target/arm/pr78255-2.c: Fix to work for targets + that do not optimize for tailcall. + +2017-01-09 Andre Vieira + + Backport from mainline + 2016-12-09 Andre Vieira + + PR rtl-optimization/78255 + * gcc.target/aarch64/pr78255.c: New. + * gcc.target/arm/pr78255-1.c: New. + * gcc.target/arm/pr78255-2.c: New. + +2017-01-06 Wilco Dijkstra + + Backport from mainline + 2016-10-25 Wilco Dijkstra + + PR target/78041 + * gcc.target/arm/pr78041.c: New test. + +2017-01-05 Andreas Krebbel + + Backport from mainline + 2016-12-22 Andreas Krebbel + + * gcc.target/s390/litpool-str-1.c: New test. + +2017-01-04 Richard Biener + + Backport from mainline + 2016-05-11 Richard Biener + + PR tree-optimization/71055 + * gcc.dg/torture/pr71055.c: New testcase. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-21 Martin Liska + + PR driver/78863 + * gcc.dg/spellcheck-options-13.c: New test. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-22 Martin Liska + + PR tree-optimization/78886 + * gcc.dg/tree-ssa/pr78886.c: New test. + +2017-01-03 Martin Liska + + Backport from mainline + 2016-12-13 Martin Liska + + PR tree-optimization/78428 + * gcc.dg/tree-ssa/pr78428.c: New test. + +2016-12-22 Thomas Koenig + + Backport from trunk + PR fortran/78239 + * gfortran.dg/fimplicit_none_1.f90: New test. + * gfortran.dg/fimplicit_none_2.f90: New test. + +2016-12-21 Jakub Jelinek + + PR c/77767 + * gcc.c-torture/execute/pr77767.c: New test. + + Backported from mainline + 2016-12-13 Jakub Jelinek + + PR ipa/77905 + * g++.dg/ipa/pr77905.C: New test. + 2016-12-21 Release Manager * GCC 6.3.0 released. @@ -46,8 +1114,8 @@ Backport from mainline 2016-11-07 Bernd Schmidt - PR rtl-optimization/77309 - * gcc.dg/torture/pr77309.c: New test. + PR rtl-optimization/77309 + * gcc.dg/torture/pr77309.c: New test. 2016-12-12 Thomas Preud'homme @@ -456,7 +1524,7 @@ * g++.dg/torture/pr77822.C: New test. 2016-11-20 Harald Anlauf - + PR fortran/69741 * gfortran.dg/forall_18.f90: New testcase. Index: gcc/testsuite/g++.dg/pr80222.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr80222.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/pr80222.C (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +// { dg-do compile } +// { dg-options "-O2 -fdump-tree-optimized" } */ + +struct C { int i; }__attribute__((may_alias)) ; + +C a, b; + +int main() +{ + a = static_cast (b); +} + +// { dg-final { scan-tree-dump "{ref-all}\\\)&b\];" "optimized" } } */ Index: gcc/testsuite/g++.dg/opt/call3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/call3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/call3.C (.../branches/gcc-6-branch) @@ -0,0 +1,33 @@ +// { dg-do run } +// { dg-options "-O" } + +struct Foo +{ + Foo() : a(1), c('a') {} + short int a; + char c; +}; + +static Foo copy_foo(Foo) __attribute__((noinline, noclone)); + +static Foo copy_foo(Foo A) +{ + return A; +} + +struct Bar : Foo +{ + Bar(Foo t) : Foo(copy_foo(t)) {} +}; + +Foo F; + +int main (void) +{ + Bar B (F); + + if (B.a != 1 || B.c != 'a') + __builtin_abort (); + + return 0; +} Index: gcc/testsuite/g++.dg/opt/pr80275.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr80275.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr80275.C (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +// { dg-do compile { target c++14 } } +// { dg-options "-O2 -fdump-tree-optimized" } + +#include + +int g() +{ + return 1234; +} + +int f2() +{ + return std::min({1, g(), 4}); +} + +// { dg-final { scan-tree-dump "return 1;" "optimized" } } Index: gcc/testsuite/g++.dg/opt/pr79396.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr79396.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr79396.C (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +// PR middle-end/79396 +// { dg-do compile } +// { dg-options "-fnon-call-exceptions -O2" } +// { dg-additional-options "-mfma" { target i?86-*-* x86_64-*-* } } + +struct A { A (); ~A (); }; + +float +foo (float x) +{ + A a; + return __builtin_pow (x, 2) + 2; +} Index: gcc/testsuite/g++.dg/opt/declone3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/declone3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/declone3.C (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +// PR c++/79176 +// { dg-do compile { target c++11 } } +// { dg-options "-flto -Os" } + +struct A {}; +struct Object { + virtual bool m_fn1(); + virtual ~Object(); +}; +struct Item : Object, virtual A { + ~Item() { + [] {}; + } + bool m_fn1(); +}; +bool Item::m_fn1() {} Index: gcc/testsuite/g++.dg/opt/pr80385.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr80385.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr80385.C (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +// PR rtl-optimization/80385 +// { dg-do compile { target { i?86-*-* x86_64-*-* } } } +// { dg-options "-Ofast -msse2" } + +#include + +__m128 a, e; +struct A { __m128 b; A (); A (__m128 x) : b(x) {} }; +A operator+ (A, A); +A operator- (A) { __m128 c = -a; return c; } +A foo (A x) { __m128 d = x.b; return _mm_andnot_ps (d, e); } +struct B { A n[1]; }; +void bar (B x) { A f = foo (x.n[0]); A g = f + A (); } +void baz () { B h; B i; A j; i.n[0] = -j; h = i; B k = h; bar (k); } Index: gcc/testsuite/g++.dg/opt/pr79267.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr79267.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr79267.C (.../branches/gcc-6-branch) @@ -0,0 +1,69 @@ +// PR tree-optimization/79267 +// { dg-do compile } +// { dg-options "-O3" } + +struct A { A (int); }; +struct B +{ + virtual void av () = 0; + void aw (); + void h () { av (); aw (); } +}; +template struct G : B +{ + T ba; + G (int, T) : ba (0) {} + void av () { ba (0); } +}; +struct I +{ + B *bc; + template I (j, T) try { G (0, 0); } catch (...) {} + ~I () { bc->h (); } +}; +template struct C { typedef M *i; }; +template struct J +{ + J (); + template J (O, T p2) : be (0, p2) {} + typename C::i operator-> (); + I be; +}; +struct H : A { H () : A (0) {} }; +struct D { J d; void q (); }; +template class bs; +int z; + +void +foo (int p1, int *, int) +{ + if (p1 == 0) + throw H (); +} + +D bar (); +template struct L +{ + struct K { K (int); void operator() (int *) { bar ().q (); } }; + static J bp () { bq (0); } + template static void bq (br) { J (0, K (0)); } +}; +struct F +{ + virtual J x (int) { foo (0, 0, 0); J > (L >::bp ()); } +}; + +void +baz () +{ + if (z) + { + J d, e; + d->x (0); + e->x (0); + } + J v, i, j; + v->x (0); + i->x (0); + j->x (0); +} Index: gcc/testsuite/g++.dg/opt/call2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/call2.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/call2.C (.../branches/gcc-6-branch) @@ -0,0 +1,34 @@ +// { dg-do run } +// { dg-options "-O" } + +struct Foo +{ + Foo() : a(1), b(1), c('a') {} + int a; + int b; + char c; +}; + +static Foo copy_foo(Foo) __attribute__((noinline, noclone)); + +static Foo copy_foo(Foo A) +{ + return A; +} + +struct Bar : Foo +{ + Bar(Foo t) : Foo(copy_foo(t)) {} +}; + +Foo F; + +int main (void) +{ + Bar B (F); + + if (B.a != 1 || B.b != 1 || B.c != 'a') + __builtin_abort (); + + return 0; +} Index: gcc/testsuite/g++.dg/pr71294.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr71294.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/pr71294.C (.../branches/gcc-6-branch) @@ -0,0 +1,60 @@ +// { dg-do compile { target { powerpc64*-*-* && lp64 } } } +// { dg-require-effective-target powerpc_p8vector_ok } */ +// { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } +// { dg-options "-mcpu=power8 -O3 -fstack-protector -mno-lra" } + +// PAR target/71294 failed because RELOAD could not figure how create a V2DI +// vector that auto vectorization created with each element being the same +// stack address, with stack-protector turned on. + +class A; +template class B { +public: + _Tp val[m * n]; +}; +class C { +public: + C(A); +}; +struct D { + D(); + unsigned long &operator[](int); + unsigned long *p; +}; +class A { +public: + template A(const B<_Tp, m, n> &, bool); + int rows, cols; + unsigned char *data; + unsigned char *datastart; + unsigned char *dataend; + unsigned char *datalimit; + D step; +}; +template +A::A(const B<_Tp, m, n> &p1, bool) + : rows(m), cols(n) { + step[0] = cols * sizeof(_Tp); + datastart = data = (unsigned char *)p1.val; + datalimit = dataend = datastart + rows * step[0]; +} +class F { +public: + static void compute(C); + template + static void compute(const B<_Tp, m, n> &, B<_Tp, nm, 1> &, B<_Tp, m, nm> &, + B<_Tp, n, nm> &); +}; +D::D() {} +unsigned long &D::operator[](int p1) { return p[p1]; } +template +void F::compute(const B<_Tp, m, n> &, B<_Tp, nm, 1> &, B<_Tp, m, nm> &, + B<_Tp, n, nm> &p4) { + A a(p4, false); + compute(a); +} +void fn1() { + B b, c, e; + B d; + F::compute(b, d, c, e); +} Index: gcc/testsuite/g++.dg/ubsan/pr80349.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ubsan/pr80349.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ubsan/pr80349.C (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +// PR sanitizer/80349 +// { dg-do compile } +// { dg-options "-fsanitize=undefined" } + +extern const long long int v; + +void +foo () +{ + (int)((v & 50 | 051UL) << 0) << 0; +} Index: gcc/testsuite/g++.dg/ubsan/null-8.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ubsan/null-8.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ubsan/null-8.C (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +// PR c++/79572 +// { dg-do run } +// { dg-options "-fsanitize=null -std=c++14" } +// { dg-output "reference binding to null pointer of type 'const int'" } + +void +foo (const int &iref) +{ + if (&iref) + __builtin_printf ("iref %d\n", iref); + else + __builtin_printf ("iref is NULL\n"); +} + +int +main () +{ + foo (*((int*) __null)); +} Index: gcc/testsuite/g++.dg/parse/ptrmem7.C =================================================================== --- a/src/gcc/testsuite/g++.dg/parse/ptrmem7.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/parse/ptrmem7.C (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +// PR c++/80043 +// { dg-options -fpermissive } + +struct A +{ + template void foo() + { + void (A::* fp)(); + fp = A::foo<0>; // { dg-warning "assuming pointer to member" } + } +}; + +void bar() +{ + A().foo<0>(); +} Index: gcc/testsuite/g++.dg/pr77812.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr77812.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/pr77812.C (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +// PR77812 +// struct-stat hack failure when first overload is a template + +enum f {}; + +template +void f () +{ +} +enum f F; + +struct g {}; + +template +void g () +{ +} +struct g G; Index: gcc/testsuite/g++.dg/cpp0x/pr78693.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/pr78693.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/pr78693.C (.../branches/gcc-6-branch) @@ -0,0 +1,31 @@ +// PR c++/78693 +// { dg-do compile { target c++11 } } + +template +void +foo (T t) +{ + auto i = t, j = 1; // { dg-bogus "inconsistent deduction" } +} + +template +void +bar (T t) +{ + auto i = 1, j = t, k = 2; // { dg-bogus "inconsistent deduction" } +} + +template +void +foo (T t, U u) +{ + auto i = t, j = u; // { dg-bogus "inconsistent deduction" } +} + +void +foo () +{ + foo (0); + bar (0); + foo (1, 2); +} Index: gcc/testsuite/g++.dg/cpp0x/pr78341.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/pr78341.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/pr78341.C (.../branches/gcc-6-branch) @@ -0,0 +1,4 @@ +// PR c++/78341 +// { dg-do compile { target c++11 } } + +alignas (alignas double // { dg-error "" } Index: gcc/testsuite/g++.dg/cpp0x/pr71182.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/pr71182.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/pr71182.C (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +// PR c++/71182 +// { dg-do compile { target c++11 } } + +class A { + template void As(); +}; +template class B : A { + void f() { + A *g ; + g ? g->As() : nullptr; + } +}; Index: gcc/testsuite/g++.dg/cpp0x/nsdmi13.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi13.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi13.C (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +// PR c++/79796 +// { dg-do compile { target c++11 } } + +struct A +{ + A* p = this; +}; + +void foo() +{ + A a; + a = A({}); +} Index: gcc/testsuite/g++.dg/cpp0x/range-for32.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/range-for32.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/range-for32.C (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +// PR c++/77545 +// { dg-do compile { target c++11 } } +// { dg-options "-Wno-pedantic" } + +template < typename T > struct A +{ + A (); + ~A (); + T t; +}; + +void f (A < int > a) +{ + for (auto x : (A[]) { a }) + ; +} Index: gcc/testsuite/g++.dg/cpp0x/range-for34.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/range-for34.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/range-for34.C (.../branches/gcc-6-branch) @@ -0,0 +1,16 @@ +// PR c++/79566 +// { dg-do compile { target c++11 } } + +struct X { + struct Y { }; + + Y* begin(); + Y* end(); +}; + +void f() +{ + X x; + for (struct X::Y& y : x) + ; +} Index: gcc/testsuite/g++.dg/cpp0x/pr79296.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/pr79296.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/pr79296.C (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +// { dg-require-effective-target lto } +// { dg-additional-options "-flto" } +// { dg-do compile { target c++11 } } + +// PR 79296 ICE mangling local class of localized instantiation + +struct X { + template X (T const *) { + struct Z {}; + } +}; + +void Baz () +{ + struct Y { } y; + + 0, X (&y); +} Index: gcc/testsuite/g++.dg/cpp0x/pr80091.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/pr80091.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/pr80091.C (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +// { dg-do compile { target c++11 } } + +// PR 80091 ICE with member fn call from lambda in template + +struct A { + void m_fn1(); +}; +template struct B : A { + void m_fn2() { + [&] { m_fn1(); }; + } +}; Index: gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +// PR c++/80150 +// { dg-do compile { target c++11 } } + +template +bool compare_functions(R(*funcA)(Args...), R(*funcB)(Args...), Args... args) { + return false; +} + +int foo(int x) { + return x; +} + +float foo(float x) { + return x; +} + +int main() { + int a = 10; + compare_functions(foo, foo, a); +} Index: gcc/testsuite/g++.dg/cpp0x/range-for33.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/range-for33.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/range-for33.C (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +// PR c++/77284 +// { dg-do compile { target c++11 } } + +#include + +struct A +{ + ~A () {} +}; + +void foo (A & v) +{ + for (A a : { v }) {}; +} Index: gcc/testsuite/g++.dg/cpp0x/deleted13.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/deleted13.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/deleted13.C (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +// PR c++/79519 +// { dg-do compile { target c++11 } } + +struct A +{ + template void foo(); +}; + +struct B +{ + template friend void A::foo() = delete; // { dg-error "" } +}; Index: gcc/testsuite/g++.dg/torture/pr79034.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr79034.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr79034.C (.../branches/gcc-6-branch) @@ -0,0 +1,52 @@ +/* { dg-do compile } */ + +extern "C" { + float sqrtf(float); +} + +class T { +public: + float floats[1]; + + inline float length() const { + return sqrtf(floats[0]); + } +}; + +void destruct(void *); + +class Container { + + T Ts[1]; + +public: + ~Container() { + destruct((void *)Ts); + } + + T& operator[](int n) { + return Ts[0]; + } +}; + +void fill(Container&); + +void doit() +{ + Container data; + float max = 10; + + int i, j, k; + + for (i = 0; i < 10; i++) { + for (j = 1; j < 10; j++) { + if (max < 5) + break; + fill( data); + max = data[0].length(); + for (k = 1; k < j; k++) { + max = 5; + } + } + } +} Index: gcc/testsuite/g++.dg/torture/pr80171.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr80171.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr80171.C (.../branches/gcc-6-branch) @@ -0,0 +1,183 @@ +// { dg-do compile } + +template struct remove_reference; +template struct remove_reference<_Tp &> { typedef _Tp type; }; +template typename remove_reference<_Tp>::type move(_Tp &&p1) { + return static_cast::type &&>(p1); +} +void *operator new(__SIZE_TYPE__, void *p2) { return p2; } +struct Trans_NS__v1_GenericTlv { + virtual int getMinimumValueLength(); + virtual unsigned long getValueLength() const; +}; +struct IPv4NeighborAddressSubTlv; +struct Trans_NS__v1_GenericTlvBase : Trans_NS__v1_GenericTlv { + virtual bool operator==(const IPv4NeighborAddressSubTlv &) const; +}; +struct Trans_NS__v1_GenericUnsupportedTlv; +template struct backup_holder { + Trans_NS__v1_GenericUnsupportedTlv *backup_; + Trans_NS__v1_GenericUnsupportedTlv &get() { return *backup_; } +}; +template struct make_reference_content { + typedef IPv4NeighborAddressSubTlv type; +}; +template struct unwrap_recursive { + typedef IPv4NeighborAddressSubTlv type; +}; +template struct begin_impl; +template struct begin { + typedef typename Sequence::tag tag_; + typedef typename begin_impl::template apply::type type; +}; +struct long_ { + static const int value = 0; +}; +template struct O1_size_impl; +template +struct O1_size + : O1_size_impl::template apply {}; +template +struct apply_wrap2 : F::template apply {}; +template struct iter_fold_impl; +template +struct iter_fold_impl<0, First, ForwardOp> { + typedef typename apply_wrap2::type state; +}; +template struct iter_fold { + typedef + typename iter_fold_impl::value, + typename begin::type, ForwardOp>::state + type; +}; +template struct deref; +template struct pair { typedef T1 first; }; +struct make_initializer_node { + template struct apply { + struct initializer_node { + typedef typename deref::type recursive_enabled_T; + static int + initialize(void *p1, + typename unwrap_recursive::type) { + new (p1) typename make_reference_content::type; + } + }; + typedef pair type; + }; +}; +struct l_item { + typedef int tag; + typedef l_item type; + typedef long_ size; + typedef int item; +}; +template <> struct O1_size_impl { + template struct apply : List::size {}; +}; +template struct l_iter; +template struct deref> { + typedef typename Node::item type; +}; +template <> struct begin_impl { + template struct apply { + typedef l_iter type; + }; +}; +template +struct list : l_item {}; +template struct make_variant_list { typedef list type; }; +template T cast_storage(void *p1) { return *static_cast(p1); } +struct visitation_impl_step { + typedef Trans_NS__v1_GenericUnsupportedTlv type; +}; +template +void visitation_impl_invoke_impl(Visitor p1, VoidPtrCV p2, T *) { + backup_holder __trans_tmp_8 = + cast_storage>(p2); + p1.internal_visit(__trans_tmp_8, 0); +} +template +void visitation_impl_invoke(Visitor p1, VoidPtrCV p2, T p3, NoBackupFlag) { + visitation_impl_invoke_impl(p1, p2, p3); +} +template +void visitation_impl(Visitor p1, VoidPtrCV p2, NoBackupFlag, Which, step0 *) { + visitation_impl_invoke(p1, p2, static_cast(0), 0); +} +struct move_into { + move_into(void *); + template void internal_visit(backup_holder p1, int) { + T __trans_tmp_2 = p1.get(); + new (0) T(__trans_tmp_2); + } +}; +template struct variant { + struct initializer : iter_fold::type, + make_initializer_node>::type::first {}; + template void convert_construct(T p1, int) { + void *__trans_tmp_9 = this; + initializer::initialize(__trans_tmp_9, p1); + } + template variant(T p1) { convert_construct(p1, 0); } + variant(variant &&p1) { + move_into visitor(0); + p1.internal_apply_visitor(visitor); + } + template void internal_apply_visitor(Visitor p1) { + void *__trans_tmp_10 = this; + visitation_impl(p1, __trans_tmp_10, 0, 0, + static_cast(0)); + } +}; +template struct generic_element_tlvs; +template +struct generic_element_tlvs { + typedef variant variant_type; +}; +template struct Trans_NS__v1_GenericTlvContainer { + template void addTlv(const TlvClass &); +}; +template +template +void Trans_NS__v1_GenericTlvContainer::addTlv( + const TlvClass &p1) { + typename ElementTlvs::variant_type wrap(p1); + move(wrap); +} +template +struct Trans_NS__v1_GenericContainerEntryBase + : Trans_NS__v1_GenericTlvContainer {}; +template +struct Trans_NS__v1_GenericFixedLengthTlvBase : Trans_NS__v1_GenericTlvBase { + unsigned long getValueLength() const; +}; +struct Trans_NS__v1_GenericUnsupportedTlv : Trans_NS__v1_GenericTlv { + long getHeaderLengthconst; +}; +using isis_tlv_config = int; +template +using isis_element_tlvs = + generic_element_tlvs; +template +using ContainerEntryBase = Trans_NS__v1_GenericContainerEntryBase; +template +using FixedLengthTlvBase = Trans_NS__v1_GenericFixedLengthTlvBase; +struct IPv4NeighborAddressSubTlv + : FixedLengthTlvBase<0, IPv4NeighborAddressSubTlv, 0> { + bool operator==(const IPv4NeighborAddressSubTlv &) const; +}; +void test() { + ContainerEntryBase< + 0, int, + isis_element_tlvs< + FixedLengthTlvBase<0, int, 0>, FixedLengthTlvBase<0, int, 0>, + IPv4NeighborAddressSubTlv, FixedLengthTlvBase<0, int, 0>, + FixedLengthTlvBase<0, int, 0>, FixedLengthTlvBase<0, int, 0>>> + isEntry; + IPv4NeighborAddressSubTlv nbAddressSubTlv; + isEntry.addTlv(nbAddressSubTlv); +} Index: gcc/testsuite/g++.dg/torture/pr80129.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr80129.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr80129.C (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +// PR c++/80129 +// { dg-do run } +// { dg-options "-std=c++11" } + +struct A { bool a; int b; }; + +int +main () +{ + bool c = false; + const A x = c ? A {true, 1} : A {false, 0}; + if (x.a) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/torture/pr80334.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr80334.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr80334.C (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +// { dg-do run } + +struct A { alignas(16) char c; }; +struct B { A unpacked; char d; } __attribute__((packed)); + +char x; + +int +main() +{ + alignas(__BIGGEST_ALIGNMENT__) B b[3]; + for (int i = 0; i < 3; i++) b[i].unpacked.c = 'a' + i; + for (int i = 0; i < 3; i++) + { + auto a = new A(b[i].unpacked); + x = a->c; + } +} Index: gcc/testsuite/g++.dg/torture/pr80075.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr80075.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr80075.C (.../branches/gcc-6-branch) @@ -0,0 +1,27 @@ +// { dg-do compile } +// { dg-additional-options "-fnon-call-exceptions" } + +struct s { + int i; +}; + +extern int use_memcpy; +extern void my_memcpy(void*, void*, int); + +int +f (struct s* p) +{ + struct s a; + + try + { + a = (struct s){}; + if (!use_memcpy) + *p = a; + else + my_memcpy (p, &a, sizeof (struct s)); + } catch (...) { + return 0; + } + return 1; +} Index: gcc/testsuite/g++.dg/torture/pr80297.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr80297.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr80297.C (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +// PR c++/80297 +// { dg-do compile } + +extern const unsigned long int b; +extern const long long int c; + +int +foo () +{ + int a = 809 >> -(b & !c) + b - (long long)(b & !c); + return a; +} Index: gcc/testsuite/g++.dg/ipa/pr77905.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ipa/pr77905.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ipa/pr77905.C (.../branches/gcc-6-branch) @@ -0,0 +1,21 @@ +// PR ipa/77905 +// { dg-do compile } +// { dg-options "-O2" } + +struct A { + A(int); +}; +struct B : A { + B(); +} A; +struct C : virtual A { + C(int); +}; +A::A(int x) { + if (x) + A(0); +} + +B::B() : A(1) {} + +C::C(int) : A(1) {} Index: gcc/testsuite/g++.dg/ipa/pr71207.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ipa/pr71207.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ipa/pr71207.C (.../branches/gcc-6-branch) @@ -0,0 +1,42 @@ +/* PR ipa/71207 */ +/* { dg-do run } */ + +class Class1 +{ +public: + Class1() {}; + virtual ~Class1() {}; + +protected: + unsigned Field1; +}; + +class Class2 : public virtual Class1 +{ +}; + +class Class3 : public virtual Class1 +{ +public: + virtual void Method1() = 0; + + void Method2() + { + Method1(); + } +}; + +class Class4 : public Class2, public virtual Class3 +{ +public: + Class4() {}; + virtual void Method1() {}; +}; + +int main() +{ + Class4 var1; + var1.Method2(); + + return 0; +} Index: gcc/testsuite/g++.dg/ipa/pr77333.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ipa/pr77333.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ipa/pr77333.C (.../branches/gcc-6-branch) @@ -0,0 +1,65 @@ +// { dg-do run } +// { dg-options "-O2 -fno-ipa-sra" } + +volatile int global; +int __attribute__((noinline, noclone)) +get_data (int i) +{ + global = i; + return i; +} + +typedef int array[32]; + +namespace { + +char buf[512]; + +class A +{ +public: + int field; + char *s; + + A() : field(223344) + { + s = buf; + } + + int __attribute__((noinline)) + foo (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, + int k, int l, int m, int n, int o, int p, int q, int r, int s, int t) + { + global = a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t; + return global; + } + + int __attribute__((noinline)) + bar() + { + int r = foo (get_data (1), get_data (1), get_data (1), get_data (1), + get_data (1), get_data (1), get_data (1), get_data (1), + get_data (1), get_data (1), get_data (1), get_data (1), + get_data (1), get_data (1), get_data (1), get_data (1), + get_data (1), get_data (1), get_data (1), get_data (1)); + + if (field != 223344) + __builtin_abort (); + return 0; + } +}; + +} + +int main (int argc, char **argv) +{ + A a; + int r = a.bar(); + r = a.bar (); + if (a.field != 223344) + __builtin_abort (); + if (global != 20) + __builtin_abort (); + + return r; +} Index: gcc/testsuite/g++.dg/overload/ambig3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/overload/ambig3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/overload/ambig3.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/77563 + +struct A { + A(int) {} + A(unsigned) {} // Comment to make it work + + explicit A(long) {} // Comment to make it work +}; + +void f(A) { } + +int main() { + f(2); + f(3l); // { dg-error "ambiguous" } +} Index: gcc/testsuite/g++.dg/cpp1y/pr61636-1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/pr61636-1.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/pr61636-1.C (.../branches/gcc-6-branch) @@ -0,0 +1,36 @@ +// PR c++/61636 +// PR c++/79264 +// { dg-do compile { target c++14 } } + +// ICE because we figure this capture too late. + +struct Base +{ + void Bar (int); +}; + +struct A : Base { + void b (); + void Foo (int); + using Base::Bar; + template void Baz (T); +}; + +void A::b() { + + auto lam = [&](auto asdf) { Foo (asdf); }; + + lam (0); + + auto lam1 = [&](auto asdf) { Bar (asdf); }; + + lam1 (0); + + auto lam2 = [&](auto asdf) { Baz (asdf); }; + + lam2 (0); + + auto lam3 = [&](auto asdf) { Baz (asdf); }; + + lam3 (0); +} Index: gcc/testsuite/g++.dg/cpp1y/constexpr-79681-1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79681-1.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79681-1.C (.../branches/gcc-6-branch) @@ -0,0 +1,17 @@ +// PR c++/79681 +// { dg-do compile { target c++14 } } +// { dg-options "-O2" } + +struct A +{ + int i : 4; +}; + +constexpr bool +foo () +{ + A x[] = { 1 }; + return x[0].i; +} + +static_assert (foo(), ""); Index: gcc/testsuite/g++.dg/cpp1y/constexpr-union1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-union1.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-union1.C (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +// PR c++/78897 +// { dg-do compile { target c++14 } } + +struct Optional { + constexpr Optional() : _dummy{} { _value = 1; } + union { + int _dummy; + int _value; + }; +}; +Optional opt{}; Index: gcc/testsuite/g++.dg/cpp1y/constexpr-79639.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79639.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79639.C (.../branches/gcc-6-branch) @@ -0,0 +1,27 @@ +// PR c++/79639 +// { dg-do compile { target c++14 } } + +struct A +{ + void foo () {} + void bar () {} +}; +typedef void (A::*T) (); + +constexpr T +foo (T f) +{ + f = 0; + return f; +} + +constexpr T +bar (T f) +{ + f = &A::bar; + return f; +} + +constexpr T a = foo (&A::foo); +constexpr T b = foo (&A::foo); +static_assert (a == nullptr, ""); Index: gcc/testsuite/g++.dg/cpp1y/pr61636-2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/pr61636-2.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/pr61636-2.C (.../branches/gcc-6-branch) @@ -0,0 +1,72 @@ +// PR c++/61636 +// { dg-do run { target c++14 } } + +// Check we don't capture this (too) unnecessarily + +struct A { + int b (); + void f (int) {} + static void f (double) {} + + static void g (int) {} + static void g (double) {} +}; + +struct O { + void x (int) {} + static void x (double) {} +}; + +namespace N { + void y (double) {} +} + +int Check (bool expect, unsigned size) +{ + return (expect ? sizeof (void *) : 1) != size; +} + +int A::b() { + int r = 0; + + // one of the functions is non-static + auto l0 = [&](auto z) { f (z); }; + r += Check (true, sizeof l0); + l0(0.0); // doesn't need this capture for A::f(double), but too late + l0 (0); // Needs this capture for A::f(int) + + // no fn is non-static. + auto l00 = [&](auto z) { g (z); }; + r += Check (false, sizeof l00); + l00(0.0); + l00 (0); + + // sizeof isn't an evaluation context, so no this capture + auto l1 = [&](auto z) { sizeof (f (z), 1); }; + r += Check (false, sizeof l1); + l1(0.0); l1 (0); + + auto l2 = [&](auto) { f (2.4); }; + auto l3 = [&](auto) { f (0); }; + l2(0); l3(0); l2(0.0); l3 (0.0); + r += Check (false, sizeof l2); + r += Check (true, sizeof l3); + + auto l4 = [&](auto) { O::x (2.4); }; + auto l5 = [&](auto) { N::y (2.4); }; + auto l6 = [&](auto) { }; + l4(0); l5(0); l6(0); + l4(0.0); l5(0.0); l6(0.0); + r += Check (false, sizeof l4); + r += Check (false, sizeof l5); + r += Check (false, sizeof l6); + + return r; +} + +int main () +{ + A a; + + return a.b () ? 1 : 0; +} Index: gcc/testsuite/g++.dg/cpp1y/constexpr-79681-2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79681-2.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-79681-2.C (.../branches/gcc-6-branch) @@ -0,0 +1,39 @@ +// PR c++/79681 +// { dg-do compile { target c++14 } } +// { dg-options "-O2" } + +struct A +{ + char i : 4; + char k : 1; + char l : 3; +}; +struct B +{ + char j : 4; +}; +struct C +{ + long long u; + A a[1]; + B b[1]; +}; + +constexpr bool +foo () +{ + C c = { 0, { { 5, 0, 2 } }, { { 6 } } }; + C d = { 0, { { 6, 0, 1 } }, { { 5 } } }; + return c.a[0].i == d.a[0].i && c.b[0].j == d.b[0].j; +} + +constexpr bool +bar () +{ + C c = { 0, { { 5, 0, 2 } }, { { 6 } } }; + C d = { 0, { { 6, 0, 1 } }, { { 5 } } }; + return c.a[0].i == d.a[0].i && c.a[0].l == d.a[0].l; +} + +static_assert (foo () == false, ""); +static_assert (bar () == false, ""); Index: gcc/testsuite/g++.dg/cpp1y/auto-fn36.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/auto-fn36.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/auto-fn36.C (.../branches/gcc-6-branch) @@ -0,0 +1,26 @@ +// PR c++/78282 +// { dg-do compile { target c++14 } } + +struct null_node +{ + null_node(const null_node&); +}; + +extern null_node null; + +template +auto get() { return null; } + +template +struct inheritor: Ts... +{ + inheritor(const inheritor& outer) + : Ts(get())... + { } +}; + +void test() +{ + extern inheritor example; + inheritor result(example); +} Index: gcc/testsuite/g++.dg/cpp1y/constexpr-throw.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-throw.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-throw.C (.../branches/gcc-6-branch) @@ -7,19 +7,19 @@ constexpr void f2() { if (true) - throw; -} // { dg-error "not a constant-expression" } + throw; // { dg-error "not a constant-expression" } +} constexpr void f3() { if (false) ; else - throw; -}// { dg-error "not a constant-expression" } + throw; // { dg-error "not a constant-expression" } +} constexpr void f4() { - throw; -}// { dg-error "not a constant-expression" } + throw; // { dg-error "not a constant-expression" } +} constexpr int fun(int n) { switch (n) { Index: gcc/testsuite/g++.dg/cpp1y/pr61636-3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/pr61636-3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/pr61636-3.C (.../branches/gcc-6-branch) @@ -0,0 +1,25 @@ +// PR c++/61636 +// { dg-do compile { target c++14 } } +// permissiveness doesn't make this permitted +// { dg-additional-options "-fpermissive" } + +// ICE because we attempt to use dependent Foo during error recovery +// and die with an unexpected this capture need. + +template struct Base +{ + void Foo (int); +}; + +template struct A : Base { + void b (); +}; + +template void A::b() { + + auto lam = [&](auto asdf) { Foo (asdf); }; // { dg-error "not declared" } + + lam (T(0)); +} + +template void A::b (); Index: gcc/testsuite/g++.dg/cpp1y/lambda-generic-const3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const3.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/79640 +// { dg-do compile { target c++14 } } + +template void foo(F f) +{ + f(1); +} + +template void bar() +{ + const int i = i; + foo([] (auto) { sizeof(i); }); +} + +void baz() { bar<1>(); } Index: gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C (.../branches/gcc-6-branch) @@ -0,0 +1,9 @@ +// PR c++/79461 +// { dg-options -std=c++1z } + +struct S { + constexpr S(int i) { + auto f = [i]{}; + } +}; +int main() {} Index: gcc/testsuite/g++.dg/ext/mv8.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/mv8.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/mv8.C (.../branches/gcc-6-branch) @@ -1,4 +1,4 @@ -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile { target i?86-*-* x86_64-*-* powerpc*-*-* } } // { dg-options "" } __attribute__((target (11,12))) Index: gcc/testsuite/g++.dg/ext/flexary21.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/flexary21.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/flexary21.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/72775 +// { dg-do compile { target c++11 } } +// { dg-options -Wno-pedantic } + +struct S { + int i; + char a[]; + S () : a("bob") {} // { dg-error "member initializer for flexible array member" } +}; + +struct T { + int i; + char a[] = "bob"; + T () : a("bob") {} // { dg-error "member initializer for flexible array member" } +}; Index: gcc/testsuite/g++.dg/ext/int128-5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/int128-5.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/int128-5.C (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +// PR c++/79896 +// { dg-do compile { target { ilp32 && { ! int128 } } } } +// { dg-options "" } + +enum E +{ + e1 = 0xffffffffffffffffULL, + e2, // { dg-error "overflow in enumeration values" } + e3 +} e = e3; Index: gcc/testsuite/g++.dg/ext/complit15.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/complit15.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/complit15.C (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +// PR c++/79580 +// { dg-options "-flto -std=c++98" } + +class a +{ + static const double b; +}; +const double a::b ((union { double c; }){}.c); Index: gcc/testsuite/g++.dg/ext/pr80363.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/pr80363.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/pr80363.C (.../branches/gcc-6-branch) @@ -0,0 +1,12 @@ +// PR c++/80363 +// { dg-do compile } + +typedef int V __attribute__((vector_size (16))); + +int +foo (V *a, V *b) +{ + if (*a < *b) // { dg-error "could not convert\[^#]*from" } + return 1; + return 0; +} Index: gcc/testsuite/g++.dg/ext/flexary20.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/flexary20.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/flexary20.C (.../branches/gcc-6-branch) @@ -0,0 +1,49 @@ +// PR c++/72775 +// { dg-do compile { target c++11 } } +// { dg-options -Wno-pedantic } + +struct S { + int i; + char a[] = "foo"; + S () {} // { dg-error "member initializer for flexible array member" } +}; + +struct T { // { dg-error "member initializer for flexible array member" } + int i; + char a[] = "foo"; +}; + +struct U { + int i; + char a[] = "foo"; + U (); +}; + +U::U() {} // { dg-error "member initializer for flexible array member" } + +int +main () +{ + struct T t; +} + +struct V { + int i; + struct W { // { dg-error "member initializer for flexible array member" } + int j; + char a[] = "foo"; + } w; + V () {} +}; + +template +struct X { // { dg-error "member initializer for flexible array member" } + int i; + T a[] = "foo"; +}; + +void +fn () +{ + struct X x; +} Index: gcc/testsuite/g++.dg/ext/flexary12.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/flexary12.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/flexary12.C (.../branches/gcc-6-branch) @@ -44,7 +44,7 @@ D (); }; -D::D (): +D::D (): // { dg-error "member initializer for flexible array member" } a ("c") // { dg-error "incompatible types in assignment of .const char \\\[2\\\]. to .int \\\[\\\]." } { } Index: gcc/testsuite/g++.dg/vect/pr36648.cc =================================================================== --- a/src/gcc/testsuite/g++.dg/vect/pr36648.cc (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/vect/pr36648.cc (.../branches/gcc-6-branch) @@ -17,7 +17,12 @@ int main() { } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! vect_no_align } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! vect_no_align } } } } */ +/* On older powerpc hardware (POWER7 and earlier), the default flag + -mno-allow-movmisalign prevents vectorization. On POWER8 and later, + when vect_hw_misalign is true, vectorization occurs. For other + targets, ! vect_no_align is a sufficient test. */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { { ! vect_no_align } && { ! powerpc*-*-* } } || { powerpc*-*-* && vect_hw_misalign } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { { { ! vect_no_align } && { ! powerpc*-*-* } } || { powerpc*-*-* && vect_hw_misalign } } } } } */ + Index: gcc/testsuite/g++.dg/lookup/pr79377.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lookup/pr79377.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/lookup/pr79377.C (.../branches/gcc-6-branch) @@ -0,0 +1,36 @@ +// PR c++/79377 +// { dg-do run } +// { dg-options "-fpermissive" } + +struct A +{ + A () : a (0) {} + A& operator++ () { ++a; ++c; return *this; } + int a; + static int c; +}; + +int A::c = 0; + +template +void +foo (A& a) +{ + a++; // { dg-warning "trying prefix operator instead" } + if (A::c != 3 || a.a != 3) __builtin_abort (); + ++a; + if (A::c != 4 || a.a != 4) __builtin_abort (); +} + +int +main () +{ + A a; + if (A::c != 0 || a.a != 0) __builtin_abort (); + ++a; + if (A::c != 1 || a.a != 1) __builtin_abort (); + a++; // { dg-warning "trying prefix operator instead" } + if (A::c != 2 || a.a != 2) __builtin_abort (); + foo (a); + if (A::c != 4 || a.a != 4) __builtin_abort (); +} Index: gcc/testsuite/g++.dg/expr/ptrmem9.C =================================================================== --- a/src/gcc/testsuite/g++.dg/expr/ptrmem9.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/expr/ptrmem9.C (.../branches/gcc-6-branch) @@ -0,0 +1,19 @@ +// PR c++/79687 +// { dg-do run } + +struct A +{ + char c; +}; + +int main() +{ + static char A::* p1 = &A::c; + char A::* const q1 = p1; + + char A::* p2 = &A::c; + static char A::* const q2 = p2; + + A a; + return (&(a.*q1) - &a.c) || (&(a.*q2) - &a.c); +} Index: gcc/testsuite/g++.dg/expr/ptrmem8.C =================================================================== --- a/src/gcc/testsuite/g++.dg/expr/ptrmem8.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/expr/ptrmem8.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/79687 +// { dg-do run } + +struct A +{ + char c; +}; + +int main() +{ + char A::* p = &A::c; + static char A::* const q = p; + A a; + return &(a.*q) - &a.c; +} Index: gcc/testsuite/g++.dg/abi/pr77728-1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/abi/pr77728-1.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/abi/pr77728-1.C (.../branches/gcc-6-branch) @@ -0,0 +1,171 @@ +// { dg-do compile { target arm_eabi } } +// { dg-options "-Wpsabi" } + +#include + +template +struct A { double p; }; + +A<0> v; + +template +struct B +{ + typedef A T; + int i, j; +}; + +struct C : public B<0> {}; +struct D {}; +struct E : public D, C {}; +struct F : public B<1> {}; +struct G : public F { static double y; }; +struct H : public G {}; +struct I : public D { long long z; }; +struct J : public D { static double z; int i, j; }; + +template +struct K : public D { typedef A T; int i, j; }; + +struct L { static double h; int i, j; }; + +int +fn1 (int a, B<0> b) // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" } +{ + return a + b.i; +} + +int +fn2 (int a, B<1> b) +{ + return a + b.i; +} + +int +fn3 (int a, L b) // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" } +{ + return a + b.i; +} + +int +fn4 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<0> n, ...) +// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn5 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<1> n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn6 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, C n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn7 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, E n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn8 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, H n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn9 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, I n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn10 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, J n, ...) +// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn11 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<0> n, ...) +// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +int +fn12 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<2> n, ...) +{ + va_list ap; + va_start (ap, n); + int x = va_arg (ap, int); + va_end (ap); + return x; +} + +void +test () +{ + static B<0> b0; + static B<1> b1; + static L l; + static C c; + static E e; + static H h; + static I i; + static J j; + static K<0> k0; + static K<2> k2; + fn1 (1, b0); // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" } + fn2 (1, b1); + fn3 (1, l); // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" } + fn4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b0, 1, 2, 3, 4); + // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } + fn5 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b1, 1, 2, 3, 4); + fn6 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, c, 1, 2, 3, 4); + fn7 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, e, 1, 2, 3, 4); + fn8 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, h, 1, 2, 3, 4); + fn9 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, i, 1, 2, 3, 4); + fn10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, j, 1, 2, 3, 4); + // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } + fn11 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k0, 1, 2, 3, 4); + // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 } + fn12 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k2, 1, 2, 3, 4); +} Index: gcc/testsuite/g++.dg/gomp/pr79664.C =================================================================== --- a/src/gcc/testsuite/g++.dg/gomp/pr79664.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/gomp/pr79664.C (.../branches/gcc-6-branch) @@ -0,0 +1,168 @@ +// PR c++/79664 +// { dg-do compile } +// { dg-options "-std=c++14 -fopenmp" } + +constexpr int +f1 () +{ + int i = 0; +#pragma omp parallel for // { dg-error "is not a constant-expression" } + for (i = 0; i < 10; ++i) + ; + return 0; +} + +constexpr int +f2 () +{ + int i = 0; +#pragma omp parallel // { dg-error "is not a constant-expression" } + i = 5; + return 0; +} + +constexpr int +f3 () +{ + int i = 0; +#pragma omp task // { dg-error "is not a constant-expression" } + i = 5; + return 0; +} + +constexpr int +f4 () +{ + int i = 0; +#pragma omp for // { dg-error "is not a constant-expression" } + for (i = 0; i < 10; ++i) + ; + return 0; +} + +constexpr int +f5 () +{ + int i = 0; +#pragma omp taskloop // { dg-error "is not a constant-expression" } + for (i = 0; i < 10; ++i) + ; + return 0; +} + +constexpr int +f6 () +{ + int i = 0; +#pragma omp target teams // { dg-error "is not a constant-expression" } + i = 5; + return 0; +} + +constexpr int +f7 () +{ + int i = 0; +#pragma omp target data map(tofrom:i) // { dg-error "is not a constant-expression" } + i = 5; + return 0; +} + +constexpr int +f8 () +{ + int i = 0; +#pragma omp target // { dg-error "is not a constant-expression" } + i = 5; + return 0; +} + +constexpr int +f9 () +{ + int i = 0; +#pragma omp sections // { dg-error "is not a constant-expression" } + { +#pragma omp section + i = 5; + } + return 0; +} + +constexpr int +f10 () +{ + int i = 0; +#pragma omp ordered // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f11 () +{ + int i = 0; +#pragma omp critical // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f12 () +{ + int i = 0; +#pragma omp single // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f13 () +{ + int i = 0; +#pragma omp master // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f14 () +{ + int i = 0; +#pragma omp taskgroup // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f15 () +{ + int i = 0; +#pragma omp target update to(i) // { dg-error "is not a constant-expression" } + i = 1; + return 0; +} + +constexpr int +f16 () +{ + int i = 0; +#pragma omp target update to(i) // { dg-error "is not a constant-expression" } + return 0; +} + +constexpr int +f17 () +{ + int i = 0; +#pragma omp target enter data map(to:i) // { dg-error "is not a constant-expression" } + return 0; +} + +constexpr int +f18 () +{ + int i = 0; +#pragma omp target exit data map(from:i) // { dg-error "is not a constant-expression" } + return 0; +} Index: gcc/testsuite/g++.dg/gomp/pr80141.C =================================================================== --- a/src/gcc/testsuite/g++.dg/gomp/pr80141.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/gomp/pr80141.C (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +// PR c++/80141 +// { dg-do compile } + +#pragma omp declare simd aligned (p : 2 && 2) +template void foo (int *p); + +#pragma omp declare simd simdlen (2 && 2) +template void bar (int *p); Index: gcc/testsuite/g++.dg/gomp/pr79429.C =================================================================== --- a/src/gcc/testsuite/g++.dg/gomp/pr79429.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/gomp/pr79429.C (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +// PR c++/79429 + +#pragma omp ordered // { dg-error "expected declaration specifiers" } Index: gcc/testsuite/g++.dg/init/ref23.C =================================================================== --- a/src/gcc/testsuite/g++.dg/init/ref23.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/init/ref23.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/80176 +// { dg-do compile } + +struct X { static void foo(); static void baz(int); static int baz(double); } x; +struct Y { void o(unsigned char); static void o(int); void o(double); } y; +void X::foo() {} +static void bar() {} +void (&r1)() = x.foo; +void (&r2)() = X::foo; +void (&r3)() = bar; +void (&r4)(int) = x.baz; +int (&r5)(double) = x.baz; +void (&r6)(int) = X::baz; +int (&r7)(double) = X::baz; +void (&r8)(int) = y.o; Index: gcc/testsuite/g++.dg/pr79761.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr79761.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/pr79761.C (.../branches/gcc-6-branch) @@ -0,0 +1,34 @@ +/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! x32 } } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -mabi=ms" } */ + +struct Foo +{ + Foo() : a(1), b(1), c('a') {} + int a; + int b; + char c; +}; + +static Foo copy_foo(Foo) __attribute__((noinline, noclone)); + +static Foo copy_foo(Foo A) +{ + return A; +} + +struct Bar : Foo +{ + Bar(Foo t) : Foo(copy_foo(t)) {} +}; + +Foo F; + +int main (void) +{ + Bar B (F); + + if (B.a != 1 || B.b != 1 || B.c != 'a') + __builtin_abort (); + + return 0; +} Index: gcc/testsuite/g++.dg/pr79769.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr79769.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/pr79769.C (.../branches/gcc-6-branch) @@ -0,0 +1,4 @@ +/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! x32 } } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -mabi=ms" } */ + +void a (_Complex) { a (3); } Index: gcc/testsuite/g++.dg/lto/pr79050_0.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lto/pr79050_0.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/lto/pr79050_0.C (.../branches/gcc-6-branch) @@ -0,0 +1,7 @@ +// PR c++/79050 +// { dg-lto-do assemble } + +int main () +{ + auto foo (); +} Index: gcc/testsuite/g++.dg/warn/Wnonnull3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/Wnonnull3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/Wnonnull3.C (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +// PR c++/79962 +// { dg-options "-Wnonnull" } + +template +__attribute__ ((__nonnull__ (T::i))) void f (typename T::U) { } + +struct S1 { enum { i = 1 }; typedef void* U; }; +struct S2 { static const int i = 1; typedef void* U; }; + +void +g () +{ + f(0); // { dg-warning "null argument where non-null required" } + f(0); // { dg-warning "null argument where non-null required" } +} Index: gcc/testsuite/g++.dg/warn/Wunused-var-26.C =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/Wunused-var-26.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/Wunused-var-26.C (.../branches/gcc-6-branch) @@ -0,0 +1,147 @@ +// PR c++/79548 - missing -Wunused-variable on a typedef'd variable +// in a function template +// { dg-do compile } +// { dg-options "-Wunused" } + + +#define UNUSED __attribute__ ((unused)) + +template +void f_int () +{ + T t; // { dg-warning "unused variable" } + + typedef T U; + U u; // { dg-warning "unused variable" } +} + +template void f_int(); + + +template +void f_intptr () +{ + T *t = 0; // { dg-warning "unused variable" } + + typedef T U; + U *u = 0; // { dg-warning "unused variable" } +} + +template void f_intptr(); + + +template +void f_var_unused () +{ + // The variable is marked unused. + T t UNUSED; + + typedef T U; + U u UNUSED; +} + +template void f_var_unused(); + + +template +void f_var_type_unused () +{ + // The variable's type is marked unused. + T* UNUSED t = new T; // { dg-bogus "unused variable" "bug 79585" { xfail *-*-* } } + + typedef T U; + U* UNUSED u = new U; // { dg-bogus "unused variable" "bug 79585" { xfail *-*-* } } + + typedef T UNUSED U; + U v = U (); // { dg-bogus "unused variable" "bug 79585" } +} + +template void f_var_type_unused(); + + +struct A { int i; }; + +template +void f_A () +{ + T t; // { dg-warning "unused variable" } + + typedef T U; + U u; // { dg-warning "unused variable" } +} + +template void f_A(); + + +template +void f_A_unused () +{ + T t UNUSED; + + typedef T U; + U u UNUSED; +} + +template void f_A_unused(); + + +struct B { B (); }; + +template +void f_B () +{ + T t; + + typedef T U; + U u; +} + +template void f_B(); + + +struct NonTrivialDtor { ~NonTrivialDtor (); }; + +template +void f_with_NonTrivialDtor () +{ + // Expect no warnings when instantiated on a type with a non-trivial + // destructor. + T t; + + typedef T U; + U u; +} + +template void f_with_NonTrivialDtor(); + + +struct D { NonTrivialDtor b; }; + +template +void f_D () +{ + // Same as f_with_NonTrivialDtor but with a class that has a member + // with a non-trivial dtor. + T t; + + typedef T U; + U u; +} + +template void f_D(); + + +struct UNUSED DeclaredUnused { }; + +template +void f_with_unused () +{ + // Expect no warnings when instantiatiated on a type declared + // with attribute unused. + T t; + + typedef T U; + U u; +} + +template void f_with_unused(); Index: gcc/testsuite/g++.dg/warn/Wpadded-1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/Wpadded-1.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/Wpadded-1.C (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +// PR c++/79900 - ICE in strip_typedefs +// { dg-do compile } +// { dg-options "-Wpadded" } + +template struct A; +template struct B { // { dg-warning "padding struct size to alignment boundary" } + long long _M_off; + char _M_state; +}; +template <> struct A { typedef B pos_type; }; +enum _Ios_Openmode {}; +struct C { + typedef _Ios_Openmode openmode; +}; +template struct D { + typedef typename _Traits::pos_type pos_type; + pos_type m_fn1(pos_type, C::openmode); +}; +template class D >; +template +typename D<_CharT, _Traits>::pos_type D<_CharT, _Traits>::m_fn1(pos_type x, + C::openmode) { return x; } Index: gcc/testsuite/g++.dg/template/memtmpl5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/template/memtmpl5.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/template/memtmpl5.C (.../branches/gcc-6-branch) @@ -0,0 +1,22 @@ +// PR c++/79508 + +struct C +{ + template< void(*F)()> void set_default() { } +}; + + +template void random_positive() +{ +} + +template void initialize(T& x) +{ + x.template set_default >(); +} + +int main () +{ + C x; + initialize(x); +} Index: gcc/testsuite/g++.dg/template/init11.C =================================================================== --- a/src/gcc/testsuite/g++.dg/template/init11.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/template/init11.C (.../branches/gcc-6-branch) @@ -0,0 +1,9 @@ +// PR c++/79607 +// { dg-do compile { target c++11 } } + +template struct A +{ + static const int i = int{T{}}; +}; + +A a; Index: gcc/testsuite/g++.dg/template/bitfield3.C =================================================================== --- a/src/gcc/testsuite/g++.dg/template/bitfield3.C (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/g++.dg/template/bitfield3.C (.../branches/gcc-6-branch) @@ -0,0 +1,20 @@ +// PR c++/78908 + +struct A { int a : 1; }; +struct F { int foo (A const &); }; +template struct O : F { int foo (A const &); }; +struct S {} b; +template int operator<< (L, T) { return (T) 123; } +template int O::foo (A const &x) { return b << x.a; } + +int +main () +{ + A a = { 0 }; + O o; + if (o.foo (a) != 123) + __builtin_abort (); + signed char d = 2; + if ((b << d) != 123) + __builtin_abort (); +} Index: gcc/testsuite/c-c++-common/ubsan/shift-10.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/ubsan/shift-10.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/ubsan/shift-10.c (.../branches/gcc-6-branch) @@ -0,0 +1,10 @@ +/* PR sanitizer/80067 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=shift" } */ + +extern signed char a; +void +foo () +{ + 0 << ((647 > a) - 1); +} Index: gcc/testsuite/c-c++-common/ubsan/bounds-14.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/ubsan/bounds-14.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/ubsan/bounds-14.c (.../branches/gcc-6-branch) @@ -0,0 +1,13 @@ +/* PR sanitizer/79558 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=bounds" } */ + +void +fn1 (int n) +{ + int i, j; + int x[2][0]; + for (i = 0; i < n; i++) + for (j = 0; j < n; j++) + x[i][j] = 5; +} Index: gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-4.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-4.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-4.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c/79428 */ +/* { dg-options "-fcilkplus" } */ +#pragma cilk grainsize /* { dg-error "must be inside a function" } */ Index: gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-7.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-7.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/cilk-plus/CK/pr79428-7.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c/79428 */ +/* { dg-options "-fcilkplus" } */ +#pragma simd /* { dg-error "must be inside a function" } */ Index: gcc/testsuite/c-c++-common/asan/pr79944.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/asan/pr79944.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/asan/pr79944.c (.../branches/gcc-6-branch) @@ -0,0 +1,18 @@ +/* PR sanitizer/79944 */ +/* { dg-do run } */ + +struct S { int i; char p[1024]; }; + +int +main () +{ + struct S *p = (struct S *) __builtin_malloc (__builtin_offsetof (struct S, p) + 64); + p->i = 5; + asm volatile ("" : "+r" (p) : : "memory"); + __atomic_fetch_add ((int *) p, 5, __ATOMIC_RELAXED); + asm volatile ("" : "+r" (p) : : "memory"); + if (p->i != 10) + __builtin_abort (); + __builtin_free (p); + return 0; +} Index: gcc/testsuite/c-c++-common/Wunused-var-16.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/Wunused-var-16.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/Wunused-var-16.c (.../branches/gcc-6-branch) @@ -0,0 +1,15 @@ +/* PR c++/78949 */ +/* { dg-do compile } */ +/* { dg-options "-Wunused" } */ + +typedef unsigned char V __attribute__((vector_size(16))); +V v; + +void +foo () +{ + V y = {}; + V x = {}; // { dg-bogus "set but not used" } + y &= ~x; + v = y; +} Index: gcc/testsuite/c-c++-common/nonnull-3.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/nonnull-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/nonnull-3.c (.../branches/gcc-6-branch) @@ -0,0 +1,11 @@ +/* PR c++/79984 */ +/* { dg-do compile } */ +/* { dg-options "-Wnonnull-compare" } */ + +enum { r = 1 }; + +__attribute__ ((nonnull (r))) int +f (int *p) +{ + return p == 0; /* { dg-warning "nonnull argument 'p' compared to NULL" } */ +} Index: gcc/testsuite/c-c++-common/pr79641.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/pr79641.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/pr79641.c (.../branches/gcc-6-branch) @@ -0,0 +1,4 @@ +/* PR c++/79641 */ +/* { dg-do compile } */ + +const int __attribute__((__mode__ (__QI__))) i = 0; Index: gcc/testsuite/c-c++-common/pr79428-3.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/pr79428-3.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/pr79428-3.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c/79428 */ +int i; +#pragma GCC pch_preprocess /* { dg-error "'#pragma GCC pch_preprocess' must be first" } */ Index: gcc/testsuite/c-c++-common/gomp/pr79428-5.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79428-5.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79428-5.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c/79428 */ +/* { dg-options "-fopenmp" } */ +#pragma omp ordered /* { dg-error "expected declaration specifiers before end of line" } */ Index: gcc/testsuite/c-c++-common/gomp/pr79512.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79512.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79512.c (.../branches/gcc-6-branch) @@ -0,0 +1,14 @@ +/* PR c++/79512 */ +/* { dg-options "-fopenmp-simd" } */ + +void +foo (void) +{ + #pragma omp target + #pragma omp teams + { + int i; + for (i = 0; i < 10; i++) + ; + } +} Index: gcc/testsuite/c-c++-common/gomp/pr79431.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79431.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79431.c (.../branches/gcc-6-branch) @@ -0,0 +1,8 @@ +/* PR c/79431 */ + +void +foo (void) +{ + int a; + #pragma omp declare target (a) +} Index: gcc/testsuite/c-c++-common/gomp/pr79428-2.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79428-2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79428-2.c (.../branches/gcc-6-branch) @@ -0,0 +1,7 @@ +/* PR c/79428 */ +/* { dg-options "-fopenmp" } */ +void +foo () +{ +#pragma omp sections +#pragma omp section /* { dg-error "'#pragma omp section' may only be used in '#pragma omp sections' construct|not allowed|expected" } */ Index: gcc/testsuite/c-c++-common/gomp/pr79429.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79429.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79429.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c++/79429 */ + +#pragma omp target /* { dg-error "expected declaration specifiers" } */ Index: gcc/testsuite/c-c++-common/gomp/pr79428-6.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr79428-6.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr79428-6.c (.../branches/gcc-6-branch) @@ -0,0 +1,3 @@ +/* PR c/79428 */ +/* { dg-options "-fopenmp" } */ +#pragma omp target /* { dg-error "expected declaration specifiers before end of line" } */ Index: gcc/cp/typeck.c =================================================================== --- a/src/gcc/cp/typeck.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/typeck.c (.../branches/gcc-6-branch) @@ -5848,6 +5848,8 @@ errstring = _("wrong type argument to bit-complement"); else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg))) arg = cp_perform_integral_promotions (arg, complain); + else if (!noconvert && VECTOR_TYPE_P (TREE_TYPE (arg))) + arg = mark_rvalue_use (arg); break; case ABS_EXPR: @@ -8341,7 +8343,12 @@ overloaded function. Call instantiate_type to get error messages. */ if (rhstype == unknown_type_node) - instantiate_type (type, rhs, tf_warning_or_error); + { + tree r = instantiate_type (type, rhs, tf_warning_or_error); + /* -fpermissive might allow this. */ + if (!seen_error ()) + return r; + } else if (fndecl) error ("cannot convert %qT to %qT for argument %qP to %qD", rhstype, type, parmnum, fndecl); Index: gcc/cp/init.c =================================================================== --- a/src/gcc/cp/init.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/init.c (.../branches/gcc-6-branch) @@ -796,6 +796,14 @@ in that case. */ init = build_x_compound_expr_from_list (init, ELK_MEM_INIT, tf_warning_or_error); + if (TREE_CODE (type) == ARRAY_TYPE + && TYPE_DOMAIN (type) == NULL_TREE + && init != NULL_TREE) + { + error_at (DECL_SOURCE_LOCATION (current_function_decl), + "member initializer for flexible array member"); + inform (DECL_SOURCE_LOCATION (member), "%q#D initialized", member); + } if (init) finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init, @@ -2069,7 +2077,8 @@ init = DECL_INITIAL (decl); if (init == error_mark_node) { - if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)) + if (TREE_CODE (decl) == CONST_DECL + || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)) /* Treat the error as a constant to avoid cascading errors on excessively recursive template instantiation (c++/9335). */ return init; @@ -2110,6 +2119,13 @@ if (TREE_CODE (init) == CONSTRUCTOR && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)) break; + /* If the variable has a dynamic initializer, don't use its + DECL_INITIAL which doesn't reflect the real value. */ + if (VAR_P (decl) + && TREE_STATIC (decl) + && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) + && DECL_NONTRIVIALLY_INITIALIZED_P (decl)) + break; decl = unshare_expr (init); } return decl; Index: gcc/cp/decl.c =================================================================== --- a/src/gcc/cp/decl.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/decl.c (.../branches/gcc-6-branch) @@ -778,7 +778,8 @@ back ends won't understand OVERLOAD, so we remove them here. Because the BLOCK_VARS are (temporarily) shared with CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have - popped all the bindings. */ + popped all the bindings. Also remove undeduced 'auto' decls, + which LTO doesn't understand, and can't have been used by anything. */ if (block) { tree* d; @@ -785,7 +786,9 @@ for (d = &BLOCK_VARS (block); *d; ) { - if (TREE_CODE (*d) == TREE_LIST) + if (TREE_CODE (*d) == TREE_LIST + || (!processing_template_decl + && undeduced_auto_decl (*d))) *d = TREE_CHAIN (*d); else d = &DECL_CHAIN (*d); @@ -6488,6 +6491,9 @@ else if (TREE_CODE (init) == CONSTRUCTOR) /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */ { + if (dependent_type_p (TREE_TYPE (init))) + return true; + vec *elts; size_t nelts; size_t i; @@ -10574,9 +10580,9 @@ else if (TREE_CODE (type) == FUNCTION_TYPE) { if (current_class_type - && (!friendp || funcdef_flag)) + && (!friendp || funcdef_flag || initialized)) { - error (funcdef_flag + error (funcdef_flag || initialized ? G_("cannot define member function %<%T::%s%> " "within %<%T%>") : G_("cannot declare member function %<%T::%s%> " @@ -13491,9 +13497,12 @@ input_location = saved_location; /* Do not clobber shared ints. */ - value = copy_node (value); + if (value != error_mark_node) + { + value = copy_node (value); - TREE_TYPE (value) = enumtype; + TREE_TYPE (value) = enumtype; + } DECL_INITIAL (decl) = value; } Index: gcc/cp/constexpr.c =================================================================== --- a/src/gcc/cp/constexpr.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/constexpr.c (.../branches/gcc-6-branch) @@ -378,6 +378,9 @@ if (TREE_CODE (member) == COMPONENT_REF) { tree aggr = TREE_OPERAND (member, 0); + if (TREE_CODE (aggr) == VAR_DECL) + /* Initializing a local variable, don't add anything. */ + return true; if (TREE_CODE (aggr) != COMPONENT_REF) /* Normal member initialization. */ member = TREE_OPERAND (member, 1); @@ -3239,6 +3242,11 @@ tree fields = TYPE_FIELDS (DECL_CONTEXT (index)); unsigned HOST_WIDE_INT idx; + if (code == UNION_TYPE && CONSTRUCTOR_NELTS (*valp) + && CONSTRUCTOR_ELT (*valp, 0)->index != index) + /* Changing active member. */ + vec_safe_truncate (CONSTRUCTOR_ELTS (*valp), 0); + for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep); idx++, fields = DECL_CHAIN (fields)) @@ -3275,11 +3283,12 @@ wants to modify it. */ if (*valp == NULL_TREE) { - *valp = new_ctx.ctor = build_constructor (type, NULL); - CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = no_zero_init; + *valp = build_constructor (type, NULL); + CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp) = no_zero_init; } - else - new_ctx.ctor = *valp; + else if (TREE_CODE (*valp) == PTRMEM_CST) + *valp = cplus_expand_constant (*valp); + new_ctx.ctor = *valp; new_ctx.object = target; } @@ -4976,10 +4985,40 @@ case DELETE_EXPR: case VEC_DELETE_EXPR: case THROW_EXPR: + case OMP_PARALLEL: + case OMP_TASK: + case OMP_FOR: + case OMP_DISTRIBUTE: + case OMP_TASKLOOP: + case OMP_TEAMS: + case OMP_TARGET_DATA: + case OMP_TARGET: + case OMP_SECTIONS: + case OMP_ORDERED: + case OMP_CRITICAL: + case OMP_SINGLE: + case OMP_SECTION: + case OMP_MASTER: + case OMP_TASKGROUP: + case OMP_TARGET_UPDATE: + case OMP_TARGET_ENTER_DATA: + case OMP_TARGET_EXIT_DATA: case OMP_ATOMIC: case OMP_ATOMIC_READ: case OMP_ATOMIC_CAPTURE_OLD: case OMP_ATOMIC_CAPTURE_NEW: + case OACC_PARALLEL: + case OACC_KERNELS: + case OACC_DATA: + case OACC_HOST_DATA: + case OACC_LOOP: + case OACC_CACHE: + case OACC_DECLARE: + case OACC_ENTER_DATA: + case OACC_EXIT_DATA: + case OACC_UPDATE: + case CILK_SIMD: + case CILK_FOR: /* GCC internal stuff. */ case VA_ARG_EXPR: case OBJ_TYPE_REF: @@ -4988,7 +5027,8 @@ case AT_ENCODE_EXPR: fail: if (flags & tf_error) - error ("expression %qE is not a constant-expression", t); + error_at (EXPR_LOC_OR_LOC (t, input_location), + "expression %qE is not a constant-expression", t); return false; case TYPEID_EXPR: @@ -5295,6 +5335,7 @@ /* We can see these in statement-expressions. */ return true; + case CLEANUP_STMT: case EMPTY_CLASS_EXPR: return false; Index: gcc/cp/error.c =================================================================== --- a/src/gcc/cp/error.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/error.c (.../branches/gcc-6-branch) @@ -2029,6 +2029,7 @@ break; case COND_EXPR: + case VEC_COND_EXPR: pp_cxx_left_paren (pp); dump_expr (pp, TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS); pp_string (pp, " ? "); Index: gcc/cp/tree.c =================================================================== --- a/src/gcc/cp/tree.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/tree.c (.../branches/gcc-6-branch) @@ -107,6 +107,17 @@ return op1_lvalue_kind; case COMPONENT_REF: + if (BASELINK_P (TREE_OPERAND (ref, 1))) + { + tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (ref, 1)); + + /* For static member function recurse on the BASELINK, we can get + here e.g. from reference_binding. If BASELINK_FUNCTIONS is + OVERLOAD, the overload is resolved first if possible through + resolve_address_of_overloaded_function. */ + if (TREE_CODE (fn) == FUNCTION_DECL && DECL_STATIC_FUNCTION_P (fn)) + return lvalue_kind (TREE_OPERAND (ref, 1)); + } op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0)); /* Look at the member designator. */ if (!op1_lvalue_kind) @@ -1463,29 +1474,40 @@ result = TYPE_MAIN_VARIANT (t); } gcc_assert (!typedef_variant_p (result)); - if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result) - || TYPE_ALIGN (t) != TYPE_ALIGN (result)) + + if (COMPLETE_TYPE_P (result) && !COMPLETE_TYPE_P (t)) + /* If RESULT is complete and T isn't, it's likely the case that T + is a variant of RESULT which hasn't been updated yet. Skip the + attribute handling. */; + else { - gcc_assert (TYPE_USER_ALIGN (t)); - if (remove_attributes) - *remove_attributes = true; - else + if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result) + || TYPE_ALIGN (t) != TYPE_ALIGN (result)) { - if (TYPE_ALIGN (t) == TYPE_ALIGN (result)) - result = build_variant_type_copy (result); + gcc_assert (TYPE_USER_ALIGN (t)); + if (remove_attributes) + *remove_attributes = true; else - result = build_aligned_type (result, TYPE_ALIGN (t)); - TYPE_USER_ALIGN (result) = true; + { + if (TYPE_ALIGN (t) == TYPE_ALIGN (result)) + result = build_variant_type_copy (result); + else + result = build_aligned_type (result, TYPE_ALIGN (t)); + TYPE_USER_ALIGN (result) = true; + } } + + if (TYPE_ATTRIBUTES (t)) + { + if (remove_attributes) + result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t), + remove_attributes); + else + result = cp_build_type_attribute_variant (result, + TYPE_ATTRIBUTES (t)); + } } - if (TYPE_ATTRIBUTES (t)) - { - if (remove_attributes) - result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t), - remove_attributes); - else - result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t)); - } + return cp_build_qualified_type (result, cp_type_quals (t)); } @@ -2775,7 +2797,7 @@ t = make_node (code); length = TREE_CODE_LENGTH (code); - TREE_TYPE (t) = TREE_TYPE (non_dep); + TREE_TYPE (t) = unlowered_expr_type (non_dep); TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep); for (i = 0; i < length; i++) @@ -2830,8 +2852,10 @@ nargs = call_expr_nargs (non_dep); expected_nargs = cp_tree_code_length (op); - if (op == POSTINCREMENT_EXPR - || op == POSTDECREMENT_EXPR) + if ((op == POSTINCREMENT_EXPR + || op == POSTDECREMENT_EXPR) + /* With -fpermissive non_dep could be operator++(). */ + && (!flag_permissive || nargs != expected_nargs)) expected_nargs += 1; gcc_assert (nargs == expected_nargs); @@ -4146,6 +4170,14 @@ if (TREE_PUBLIC (decl)) return lk_external; + /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor variants, + check one of the "clones" for the real linkage. */ + if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl) + || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)) + && DECL_CHAIN (decl) + && DECL_CLONED_FUNCTION (DECL_CHAIN (decl))) + return decl_linkage (DECL_CHAIN (decl)); + if (TREE_CODE (decl) == NAMESPACE_DECL) return lk_external; Index: gcc/cp/ChangeLog =================================================================== --- a/src/gcc/cp/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,249 @@ +2017-05-05 Jakub Jelinek + + Backported from mainline + 2017-04-11 Jakub Jelinek + + PR c++/80363 + * error.c (dump_expr): Handle VEC_COND_EXPR like COND_EXPR. + + 2017-04-10 Jakub Jelinek + + PR c++/80176 + * tree.c (lvalue_kind): For COMPONENT_REF with BASELINK second + operand, if it is a static member function, recurse on the + BASELINK. + + 2017-03-31 Jakub Jelinek + + PR c++/79572 + * cp-gimplify.c (cp_genericize_r): Sanitize INTEGER_CSTs with + REFERENCE_TYPE. Adjust ubsan_maybe_instrument_reference caller + for NOP_EXPR to REFERENCE_TYPE. + + 2017-03-22 Jakub Jelinek + + PR c++/80141 + * semantics.c (finish_omp_clause) : Call maybe_constant_value only when not + processing_template_decl. + + 2017-03-10 Jakub Jelinek + + PR c++/79896 + * decl.c (finish_enum_value_list): If value is error_mark_node, + don't copy it and change its type. + * init.c (constant_value_1): Return error_mark_node if DECL_INITIAL + of CONST_DECL is error_mark_node. + + 2017-02-22 Jakub Jelinek + + PR c++/79664 + * parser.c (cp_parser_omp_teams, cp_parser_omp_target): Use + SET_EXPR_LOCATION on OMP_TARGET/OMP_TEAMS tree. + * constexpr.c (potential_constant_expression_1): Handle + OMP_*, OACC_* and CILK_* trees. + + 2017-02-21 Jakub Jelinek + + PR c++/79639 + * constexpr.c (cxx_eval_store_expression): If *valp is a PTRMEM_CST, + call cplus_expand_constant on it first. + + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * parser.c (cp_parser_omp_target): For -fopenmp-simd + ignore #pragma omp target even when not followed by identifier. + +2017-04-12 Jason Merrill + + PR c++/80150 - ICE with overloaded variadic deduction. + * pt.c (try_one_overload): Remove asserts. + + PR c++/77563 - missing ambiguous conversion error. + * call.c (convert_like_real): Use LOOKUP_IMPLICIT. + + PR c++/79519 - ICE with deleted template friend. + * decl.c (grokdeclarator): Complain about misplaced function + definition using =, as well. + + PR c++/79640 - infinite recursion with generic lambda. + * pt.c (tsubst_copy) [VAR_DECL]: Register the dummy instantiation + before substituting its initializer. + + PR c++/80043 - ICE with -fpermissive + * typeck.c (convert_for_assignment): Handle instantiate_type + not giving an error. + + PR c++/78282 - auto template and pack expansion + * pt.c (find_parameter_packs_r): Don't walk into the type of + templates other than template template-parameters. + + PR c++/79607 - ICE with T{} initializer + * decl.c (type_dependent_init_p): Check the type of a CONSTRUCTOR. + + PR c++/79566 - elaborated-type-specifier in range for + * parser.c (cp_parser_simple_declaration): Fix check for type + definition. + + PR c++/79580 - ICE with compound literal + * parser.c (cp_parser_class_head): If we're in the middle of an + expression, use ts_within_enclosing_non_class. + + PR c++/79508 - lookup error with member template + * parser.c (cp_parser_template_name): Clear + parser->context->object_type if we aren't doing lookup. + + PR c++/79050 - ICE with undeduced auto and LTO + * decl.c (poplevel): Remove undeduced auto decls. + + PR c++/79461 - ICE with lambda in constexpr constructor + * constexpr.c (build_data_member_initialization): Ignore + initialization of a local variable. + +2017-03-20 Nathan Sidwell + + PR c++/80091 + * lambda.c (maybe_generic_this_capture): Capture when fn + is an identifier node. + +2017-03-15 Marek Polacek + + Backported from mainline + 2016-12-14 Marek Polacek + + PR c++/72775 + * init.c (perform_member_init): Diagnose member initializer for + flexible array member. + +2017-03-14 Marek Polacek + + Backported from mainline + 2017-03-09 Marek Polacek + + PR c++/79900 - ICE in strip_typedefs + * tree.c (strip_typedefs): Skip the attribute handling if T is + a variant type which hasn't been updated yet. + + PR c++/79687 + * init.c (constant_value_1): Break if the variable has a dynamic + initializer. + + Backported from mainline + 2017-01-31 Nathan Sidwell + + PR c++/79264 + * lambda.c (maybe_generic_this_capture): Deal with template-id-exprs. + * semantics.c (finish_member_declaration): Assert class is being + defined. + + Backported from mainline + 2017-01-17 Nathan Sidwell + + PR c++/61636 + * cp-tree.h (maybe_generic_this_capture): Declare. + * lambda.c (resolvable_dummy_lambda): New, broken out of ... + (maybe_resolve_dummy): ... here. Call it. + (maybe_generic_this_capture): New. + * parser.c (cp_parser_postfix_expression): Speculatively capture + this in generic lambda in unresolved member function call. + * pt.c (tsubst_copy_and_build): Force hard error from failed + member function lookup in generic lambda. + +2017-03-07 Marek Polacek + + Backported from mainline + 2017-03-06 Marek Polacek + + PR c++/79796 - ICE with NSDMI and this pointer + * call.c (build_over_call): Handle NSDMI with a 'this' by calling + replace_placeholders. + +2017-02-15 Jakub Jelinek + + Backported from mainline + 2017-02-09 Jakub Jelinek + + PR c++/79429 + * parser.c (cp_parser_omp_ordered): Don't check for non-pragma_stmt + non-pragma_compound context here. + (cp_parser_omp_target): Likewise. + (cp_parser_pragma): Don't call push_omp_privatization_clauses and + parsing for ordered and target omp pragmas in non-pragma_stmt + non-pragma_compound contexts. + + PR c/79431 + * parser.c (cp_parser_oacc_declare): Formatting fix. + (cp_parser_omp_declare_target): Don't invoke symtab_node::get on + automatic variables. + + 2017-02-06 Jakub Jelinek + + PR c++/79377 + * tree.c (build_min_non_dep_op_overload): For POST{INC,DEC}REMENT_EXPR + allow one fewer than expected arguments if flag_permissive. + +2017-02-13 Nathan Sidwell + + PR c++/79296 - ICE mangling localized template instantiation + * decl2.c (determine_visibility): Use template fn context for + local class instantiations. + +2017-02-11 Jason Merrill + + PR c++/78908 - template ops and bitfields + * tree.c (build_min_non_dep): Use unlowered_expr_type. + +2017-02-10 Jason Merrill + + PR c++/78897 - constexpr union + * constexpr.c (cxx_eval_store_expression): A store to a union member + erases a previous store to another member. + +2017-01-26 Jason Merrill + + PR c++/79176 - lambda ICE with -flto -Os + * decl2.c (vague_linkage_p): Handle decloned 'tors. + * tree.c (decl_linkage): Likewise. + +2017-01-20 Marek Polacek + + Backported from mainline + 2017-01-04 Marek Polacek + + PR c++/77545 + PR c++/77284 + * constexpr.c (potential_constant_expression_1): Handle CLEANUP_STMT. + +2017-01-17 Jakub Jelinek + + Backported from mainline + 2017-01-11 Jakub Jelinek + + PR c++/78341 + * parser.c (cp_parser_std_attribute_spec): Remove over-eager + assertion. Formatting fix. + + 2017-01-04 Jakub Jelinek + + PR c++/78949 + * typeck.c (cp_build_unary_op): Call mark_rvalue_use on arg if it has + vector type. + + PR c++/78693 + * parser.c (cp_parser_simple_declaration): Only complain about + inconsistent auto deduction if auto_result doesn't use auto. + + PR c++/71182 + * parser.c (cp_lexer_previous_token): Use vec_safe_address in the + assertion, as lexer->buffer may be NULL. + +2017-01-11 Nathan Sidwell + + PR c++/77812 + * name-lookup.c (set_namespace_binding_1): An overload of 1 decl + is a new overload. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/cp/cp-gimplify.c =================================================================== --- a/src/gcc/cp/cp-gimplify.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/cp-gimplify.c (.../branches/gcc-6-branch) @@ -1065,6 +1065,19 @@ } } + if (TREE_CODE (stmt) == INTEGER_CST + && TREE_CODE (TREE_TYPE (stmt)) == REFERENCE_TYPE + && (flag_sanitize & (SANITIZE_NULL | SANITIZE_ALIGNMENT)) + && !wtd->no_sanitize_p) + { + ubsan_maybe_instrument_reference (stmt_p); + if (*stmt_p != stmt) + { + *walk_subtrees = 0; + return NULL_TREE; + } + } + /* Other than invisiref parms, don't walk the same tree twice. */ if (p_set->contains (stmt)) { @@ -1420,7 +1433,7 @@ if ((flag_sanitize & (SANITIZE_NULL | SANITIZE_ALIGNMENT)) && TREE_CODE (stmt) == NOP_EXPR && TREE_CODE (TREE_TYPE (stmt)) == REFERENCE_TYPE) - ubsan_maybe_instrument_reference (stmt); + ubsan_maybe_instrument_reference (stmt_p); else if (TREE_CODE (stmt) == CALL_EXPR) { tree fn = CALL_EXPR_FN (stmt); Index: gcc/cp/pt.c =================================================================== --- a/src/gcc/cp/pt.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/pt.c (.../branches/gcc-6-branch) @@ -3549,8 +3549,12 @@ *walk_subtrees = 0; return NULL_TREE; + case TEMPLATE_DECL: + if (!DECL_TEMPLATE_TEMPLATE_PARM_P (t)) + return NULL_TREE; + /* Fall through. */ + case CONSTRUCTOR: - case TEMPLATE_DECL: cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, ppd->visited); return NULL_TREE; @@ -14101,6 +14105,9 @@ local static or constant. Building a new VAR_DECL should be OK in all those cases. */ r = tsubst_decl (t, args, complain); + if (local_specializations) + /* Avoid infinite recursion (79640). */ + register_local_specialization (r, t); if (decl_maybe_constant_var_p (r)) { /* We can't call cp_finish_decl, so handle the @@ -16613,19 +16620,34 @@ if (unq != function) { - tree fn = unq; - if (INDIRECT_REF_P (fn)) - fn = TREE_OPERAND (fn, 0); - if (TREE_CODE (fn) == COMPONENT_REF) - fn = TREE_OPERAND (fn, 1); - if (is_overloaded_fn (fn)) - fn = get_first_fn (fn); - if (permerror (EXPR_LOC_OR_LOC (t, input_location), - "%qD was not declared in this scope, " - "and no declarations were found by " - "argument-dependent lookup at the point " - "of instantiation", function)) + /* In a lambda fn, we have to be careful to not + introduce new this captures. Legacy code can't + be using lambdas anyway, so it's ok to be + stricter. */ + bool in_lambda = (current_class_type + && LAMBDA_TYPE_P (current_class_type)); + char const *msg = "%qD was not declared in this scope, " + "and no declarations were found by " + "argument-dependent lookup at the point " + "of instantiation"; + + bool diag = true; + if (in_lambda) + error_at (EXPR_LOC_OR_LOC (t, input_location), + msg, function); + else + diag = permerror (EXPR_LOC_OR_LOC (t, input_location), + msg, function); + if (diag) { + tree fn = unq; + if (INDIRECT_REF_P (fn)) + fn = TREE_OPERAND (fn, 0); + if (TREE_CODE (fn) == COMPONENT_REF) + fn = TREE_OPERAND (fn, 1); + if (is_overloaded_fn (fn)) + fn = get_first_fn (fn); + if (!DECL_P (fn)) /* Can't say anything more. */; else if (DECL_CLASS_SCOPE_P (fn)) @@ -16648,7 +16670,13 @@ inform (DECL_SOURCE_LOCATION (fn), "%qD declared here, later in the " "translation unit", fn); + if (in_lambda) + { + release_tree_vector (call_args); + RETURN (error_mark_node); + } } + function = unq; } } @@ -18904,10 +18932,11 @@ is equivalent to the corresponding explicitly specified argument. We may have deduced more arguments than were explicitly specified, and that's OK. */ - gcc_assert (ARGUMENT_PACK_INCOMPLETE_P (oldelt)); - gcc_assert (ARGUMENT_PACK_ARGS (oldelt) - == ARGUMENT_PACK_EXPLICIT_ARGS (oldelt)); + /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but + that's wrong if we deduce the same argument pack from multiple + function arguments: it's only incomplete the first time. */ + tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt); tree deduced_pack = ARGUMENT_PACK_ARGS (elt); Index: gcc/cp/semantics.c =================================================================== --- a/src/gcc/cp/semantics.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/semantics.c (.../branches/gcc-6-branch) @@ -2965,6 +2965,12 @@ /* We should see only one DECL at a time. */ gcc_assert (DECL_CHAIN (decl) == NULL_TREE); + /* Don't add decls after definition. */ + gcc_assert (TYPE_BEING_DEFINED (current_class_type) + /* We can add lambda types when late parsing default + arguments. */ + || LAMBDA_TYPE_P (TREE_TYPE (decl))); + /* Set up access control for DECL. */ TREE_PRIVATE (decl) = (current_access_specifier == access_private_node); @@ -6325,9 +6331,9 @@ else { t = mark_rvalue_use (t); - t = maybe_constant_value (t); if (!processing_template_decl) { + t = maybe_constant_value (t); if (TREE_CODE (t) != INTEGER_CST || tree_int_cst_sgn (t) != 1) { @@ -6495,9 +6501,9 @@ else { t = mark_rvalue_use (t); - t = maybe_constant_value (t); if (!processing_template_decl) { + t = maybe_constant_value (t); if (TREE_CODE (t) != INTEGER_CST || tree_int_cst_sgn (t) != 1) { Index: gcc/cp/decl2.c =================================================================== --- a/src/gcc/cp/decl2.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/decl2.c (.../branches/gcc-6-branch) @@ -1875,6 +1875,14 @@ { if (!TREE_PUBLIC (decl)) { + /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor + variants, check one of the "clones" for the real linkage. */ + if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl) + || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)) + && DECL_CHAIN (decl) + && DECL_CLONED_FUNCTION (DECL_CHAIN (decl))) + return vague_linkage_p (DECL_CHAIN (decl)); + gcc_checking_assert (!DECL_COMDAT (decl)); return false; } @@ -2272,11 +2280,6 @@ void determine_visibility (tree decl) { - tree class_type = NULL_TREE; - bool use_template; - bool orig_visibility_specified; - enum symbol_visibility orig_visibility; - /* Remember that all decls get VISIBILITY_DEFAULT when built. */ /* Only relevant for names with external linkage. */ @@ -2288,25 +2291,28 @@ maybe_clone_body. */ gcc_assert (!DECL_CLONED_FUNCTION_P (decl)); - orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl); - orig_visibility = DECL_VISIBILITY (decl); + bool orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl); + enum symbol_visibility orig_visibility = DECL_VISIBILITY (decl); + /* The decl may be a template instantiation, which could influence + visibilty. */ + tree template_decl = NULL_TREE; if (TREE_CODE (decl) == TYPE_DECL) { if (CLASS_TYPE_P (TREE_TYPE (decl))) - use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)); + { + if (CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl))) + template_decl = decl; + } else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl))) - use_template = 1; - else - use_template = 0; + template_decl = decl; } - else if (DECL_LANG_SPECIFIC (decl)) - use_template = DECL_USE_TEMPLATE (decl); - else - use_template = 0; + else if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) + template_decl = decl; /* If DECL is a member of a class, visibility specifiers on the class can influence the visibility of the DECL. */ + tree class_type = NULL_TREE; if (DECL_CLASS_SCOPE_P (decl)) class_type = DECL_CONTEXT (decl); else @@ -2349,8 +2355,11 @@ } /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set, - but have no TEMPLATE_INFO, so don't try to check it. */ - use_template = 0; + but have no TEMPLATE_INFO. Their containing template + function does, and the local class could be constrained + by that. */ + if (template_decl) + template_decl = fn; } else if (VAR_P (decl) && DECL_TINFO_P (decl) && flag_visibility_ms_compat) @@ -2380,7 +2389,7 @@ && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl)))) targetm.cxx.determine_class_data_visibility (decl); } - else if (use_template) + else if (template_decl) /* Template instantiations and specializations get visibility based on their template unless they override it with an attribute. */; else if (! DECL_VISIBILITY_SPECIFIED (decl)) @@ -2397,11 +2406,11 @@ } } - if (use_template) + if (template_decl) { /* If the specialization doesn't specify visibility, use the visibility from the template. */ - tree tinfo = get_template_info (decl); + tree tinfo = get_template_info (template_decl); tree args = TI_ARGS (tinfo); tree attribs = (TREE_CODE (decl) == TYPE_DECL ? TYPE_ATTRIBUTES (TREE_TYPE (decl)) Index: gcc/cp/parser.c =================================================================== --- a/src/gcc/cp/parser.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/parser.c (.../branches/gcc-6-branch) @@ -762,7 +762,7 @@ /* Skip past purged tokens. */ while (tp->purged_p) { - gcc_assert (tp != lexer->buffer->address ()); + gcc_assert (tp != vec_safe_address (lexer->buffer)); tp--; } @@ -6867,6 +6867,7 @@ || type_dependent_expression_p (fn) || any_type_dependent_arguments_p (args))) { + maybe_generic_this_capture (instance, fn); postfix_expression = build_nt_call_vec (postfix_expression, args); release_tree_vector (args); @@ -12406,9 +12407,11 @@ if (cp_parser_error_occurred (parser)) goto done; - if (auto_result) + if (auto_result + && (!processing_template_decl || !type_uses_auto (auto_result))) { - if (last_type && last_type != error_mark_node + if (last_type + && last_type != error_mark_node && !same_type_p (auto_result, last_type)) { /* If the list of declarators contains more than one declarator, @@ -12459,7 +12462,7 @@ break; else if (maybe_range_for_decl) { - if (declares_class_or_enum && token->type == CPP_COLON) + if ((declares_class_or_enum & 2) && token->type == CPP_COLON) pedwarn (decl_specifiers.locations[ds_type_spec], 0, "types may not be defined in a for-range-declaration"); break; @@ -15153,6 +15156,7 @@ cp_lexer_purge_tokens_after (parser->lexer, start); if (is_identifier) *is_identifier = true; + parser->context->object_type = NULL_TREE; return identifier; } @@ -15164,7 +15168,12 @@ && (!parser->scope || (TYPE_P (parser->scope) && dependent_type_p (parser->scope)))) - return identifier; + { + /* We're optimizing away the call to cp_parser_lookup_name, but we + still need to do this. */ + parser->context->object_type = NULL_TREE; + return identifier; + } } /* Look up the name. */ @@ -21996,7 +22005,10 @@ /* If the class was unnamed, create a dummy name. */ if (!id) id = make_anon_name (); - type = xref_tag (class_key, id, /*tag_scope=*/ts_current, + tag_scope tag_scope = (parser->in_type_id_in_expr_p + ? ts_within_enclosing_non_class + : ts_current); + type = xref_tag (class_key, id, tag_scope, parser->num_template_parameter_lists); } @@ -24140,11 +24152,7 @@ if (!cp_parser_parse_definitely (parser)) { - gcc_assert (alignas_expr == error_mark_node - || alignas_expr == NULL_TREE); - - alignas_expr = - cp_parser_assignment_expression (parser); + alignas_expr = cp_parser_assignment_expression (parser); if (alignas_expr == error_mark_node) cp_parser_skip_to_end_of_statement (parser); if (alignas_expr == NULL_TREE @@ -34060,13 +34068,6 @@ { location_t loc = pragma_tok->location; - if (context != pragma_stmt && context != pragma_compound) - { - cp_parser_error (parser, "expected declaration specifiers"); - cp_parser_skip_to_pragma_eol (parser, pragma_tok); - return false; - } - if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) { tree id = cp_lexer_peek_token (parser->lexer)->u.value; @@ -34624,6 +34625,7 @@ OMP_TEAMS_CLAUSES (ret) = clauses; OMP_TEAMS_BODY (ret) = body; OMP_TEAMS_COMBINED (ret) = 1; + SET_EXPR_LOCATION (ret, loc); return add_stmt (ret); } } @@ -34645,6 +34647,7 @@ TREE_TYPE (stmt) = void_type_node; OMP_TEAMS_CLAUSES (stmt) = clauses; OMP_TEAMS_BODY (stmt) = cp_parser_omp_structured_block (parser, if_p); + SET_EXPR_LOCATION (stmt, loc); return add_stmt (stmt); } @@ -34959,13 +34962,6 @@ { tree *pc = NULL, stmt; - if (context != pragma_stmt && context != pragma_compound) - { - cp_parser_error (parser, "expected declaration specifiers"); - cp_parser_skip_to_pragma_eol (parser, pragma_tok); - return false; - } - if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) { tree id = cp_lexer_peek_token (parser->lexer)->u.value; @@ -35070,6 +35066,7 @@ OMP_TARGET_CLAUSES (stmt) = cclauses[C_OMP_CLAUSE_SPLIT_TARGET]; OMP_TARGET_BODY (stmt) = body; OMP_TARGET_COMBINED (stmt) = 1; + SET_EXPR_LOCATION (stmt, pragma_tok->location); add_stmt (stmt); pc = &OMP_TARGET_CLAUSES (stmt); goto check_clauses; @@ -35103,6 +35100,11 @@ return cp_parser_omp_target_update (parser, pragma_tok, context); } } + if (!flag_openmp) /* flag_openmp_simd */ + { + cp_parser_skip_to_pragma_eol (parser, pragma_tok); + return false; + } stmt = make_node (OMP_TARGET); TREE_TYPE (stmt) = void_type_node; @@ -35347,7 +35349,7 @@ id = get_identifier ("omp declare target"); DECL_ATTRIBUTES (decl) - = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (decl)); + = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (decl)); if (global_bindings_p ()) { symtab_node *node = symtab_node::get (decl); @@ -35887,8 +35889,11 @@ } if (!at1) { + DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t)); + if (TREE_CODE (t) != FUNCTION_DECL && !is_global_var (t)) + continue; + symtab_node *node = symtab_node::get (t); - DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t)); if (node != NULL) { node->offloadable = 1; @@ -37404,6 +37409,8 @@ return true; case PRAGMA_OMP_ORDERED: + if (context != pragma_stmt && context != pragma_compound) + goto bad_stmt; stmt = push_omp_privatization_clauses (false); ret = cp_parser_omp_ordered (parser, pragma_tok, context, if_p); pop_omp_privatization_clauses (stmt); @@ -37410,6 +37417,8 @@ return ret; case PRAGMA_OMP_TARGET: + if (context != pragma_stmt && context != pragma_compound) + goto bad_stmt; stmt = push_omp_privatization_clauses (false); ret = cp_parser_omp_target (parser, pragma_tok, context, if_p); pop_omp_privatization_clauses (stmt); Index: gcc/cp/call.c =================================================================== --- a/src/gcc/cp/call.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/call.c (.../branches/gcc-6-branch) @@ -6465,7 +6465,7 @@ if (complain & tf_error) { /* Call build_user_type_conversion again for the error. */ - build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL, + build_user_type_conversion (totype, convs->u.expr, LOOKUP_IMPLICIT, complain); if (fn) inform (DECL_SOURCE_LOCATION (fn), @@ -7667,6 +7667,9 @@ { arg = cp_build_indirect_ref (arg, RO_NULL, complain); val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg); + if (cxx_dialect >= cxx14) + /* Handle NSDMI that refer to the object being initialized. */ + replace_placeholders (arg, to); } else { Index: gcc/cp/lambda.c =================================================================== --- a/src/gcc/cp/lambda.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/lambda.c (.../branches/gcc-6-branch) @@ -746,16 +746,14 @@ return result; } -/* We don't want to capture 'this' until we know we need it, i.e. after - overload resolution has chosen a non-static member function. At that - point we call this function to turn a dummy object into a use of the - 'this' capture. */ +/* Return the current LAMBDA_EXPR, if this is a resolvable dummy + object. NULL otherwise.. */ -tree -maybe_resolve_dummy (tree object, bool add_capture_p) +static tree +resolvable_dummy_lambda (tree object) { if (!is_dummy_object (object)) - return object; + return NULL_TREE; tree type = TYPE_MAIN_VARIANT (TREE_TYPE (object)); gcc_assert (!TYPE_PTR_P (type)); @@ -765,18 +763,64 @@ && LAMBDA_TYPE_P (current_class_type) && lambda_function (current_class_type) && DERIVED_FROM_P (type, current_nonlambda_class_type ())) - { - /* In a lambda, need to go through 'this' capture. */ - tree lam = CLASSTYPE_LAMBDA_EXPR (current_class_type); - tree cap = lambda_expr_this_capture (lam, add_capture_p); - if (cap && cap != error_mark_node) + return CLASSTYPE_LAMBDA_EXPR (current_class_type); + + return NULL_TREE; +} + +/* We don't want to capture 'this' until we know we need it, i.e. after + overload resolution has chosen a non-static member function. At that + point we call this function to turn a dummy object into a use of the + 'this' capture. */ + +tree +maybe_resolve_dummy (tree object, bool add_capture_p) +{ + if (tree lam = resolvable_dummy_lambda (object)) + if (tree cap = lambda_expr_this_capture (lam, add_capture_p)) + if (cap != error_mark_node) object = build_x_indirect_ref (EXPR_LOCATION (object), cap, RO_NULL, tf_warning_or_error); - } return object; } +/* When parsing a generic lambda containing an argument-dependent + member function call we defer overload resolution to instantiation + time. But we have to know now whether to capture this or not. + Do that if FNS contains any non-static fns. + The std doesn't anticipate this case, but I expect this to be the + outcome of discussion. */ + +void +maybe_generic_this_capture (tree object, tree fns) +{ + if (tree lam = resolvable_dummy_lambda (object)) + if (!LAMBDA_EXPR_THIS_CAPTURE (lam)) + { + /* We've not yet captured, so look at the function set of + interest. */ + if (BASELINK_P (fns)) + fns = BASELINK_FUNCTIONS (fns); + bool id_expr = TREE_CODE (fns) == TEMPLATE_ID_EXPR; + if (id_expr) + fns = TREE_OPERAND (fns, 0); + for (; fns; fns = OVL_NEXT (fns)) + { + tree fn = OVL_CURRENT (fns); + + if (identifier_p (fns) + || ((!id_expr || TREE_CODE (fn) == TEMPLATE_DECL) + && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))) + { + /* Found a non-static member. Capture this. */ + lambda_expr_this_capture (lam, true); + break; + } + } + } +} + /* Returns the innermost non-lambda function. */ tree Index: gcc/cp/cp-tree.h =================================================================== --- a/src/gcc/cp/cp-tree.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-6-branch) @@ -6447,6 +6447,7 @@ extern bool is_normal_capture_proxy (tree); extern void register_capture_members (tree); extern tree lambda_expr_this_capture (tree, bool); +extern void maybe_generic_this_capture (tree, tree); extern tree maybe_resolve_dummy (tree, bool); extern tree current_nonlambda_function (void); extern tree nonlambda_method_basetype (void); Index: gcc/cp/name-lookup.c =================================================================== --- a/src/gcc/cp/name-lookup.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cp/name-lookup.c (.../branches/gcc-6-branch) @@ -3470,7 +3470,12 @@ if (scope == NULL_TREE) scope = global_namespace; b = binding_for_name (NAMESPACE_LEVEL (scope), name); - if (!b->value || TREE_CODE (val) == OVERLOAD || val == error_mark_node) + if (!b->value + /* For templates and using we create a single element OVERLOAD. + Look for the chain to know whether this is really augmenting + an existing overload. */ + || (TREE_CODE (val) == OVERLOAD && OVL_CHAIN (val)) + || val == error_mark_node) b->value = val; else supplement_binding (b, val); Index: gcc/tree-ssa-ccp.c =================================================================== --- a/src/gcc/tree-ssa-ccp.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-ssa-ccp.c (.../branches/gcc-6-branch) @@ -729,9 +729,11 @@ case PLUS_EXPR: case MINUS_EXPR: case POINTER_PLUS_EXPR: + case BIT_XOR_EXPR: /* Not MIN_EXPR, MAX_EXPR. One VARYING operand may be selected. Not bitwise operators, one VARYING operand may specify the - result completely. Not logical operators for the same reason. + result completely. + Not logical operators for the same reason, apart from XOR. Not COMPLEX_EXPR as one VARYING operand makes the result partly not UNDEFINED. Not *DIV_EXPR, comparisons and shifts because the undefined operand may be promoted. */ @@ -1733,18 +1735,24 @@ fold_defer_overflow_warnings (); simplified = ccp_fold (stmt); if (simplified - && TREE_CODE (simplified) == SSA_NAME + && TREE_CODE (simplified) == SSA_NAME) + { /* We may not use values of something that may be simulated again, see valueize_op_1. */ - && (SSA_NAME_IS_DEFAULT_DEF (simplified) - || ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified)))) - { - val = *get_value (simplified); - if (val.lattice_val != VARYING) + if (SSA_NAME_IS_DEFAULT_DEF (simplified) + || ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified))) { - fold_undefer_overflow_warnings (true, stmt, 0); - return val; + val = *get_value (simplified); + if (val.lattice_val != VARYING) + { + fold_undefer_overflow_warnings (true, stmt, 0); + return val; + } } + else + /* We may also not place a non-valueized copy in the lattice + as that might become stale if we never re-visit this stmt. */ + simplified = NULL_TREE; } is_constant = simplified && is_gimple_min_invariant (simplified); fold_undefer_overflow_warnings (is_constant, stmt, 0); Index: gcc/lto-cgraph.c =================================================================== --- a/src/gcc/lto-cgraph.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/lto-cgraph.c (.../branches/gcc-6-branch) @@ -623,6 +623,7 @@ } bp_pack_value (&bp, node->tls_model, 3); bp_pack_value (&bp, node->used_by_single_function, 1); + bp_pack_value (&bp, node->dynamically_initialized, 1); bp_pack_value (&bp, node->need_bounds_init, 1); streamer_write_bitpack (&bp); @@ -1397,6 +1398,7 @@ node->alias_target = get_alias_symbol (node->decl); node->tls_model = (enum tls_model)bp_unpack_value (&bp, 3); node->used_by_single_function = (enum tls_model)bp_unpack_value (&bp, 1); + node->dynamically_initialized = bp_unpack_value (&bp, 1); node->need_bounds_init = bp_unpack_value (&bp, 1); group = read_identifier (ib); if (group) Index: gcc/cgraphclones.c =================================================================== --- a/src/gcc/cgraphclones.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cgraphclones.c (.../branches/gcc-6-branch) @@ -152,9 +152,9 @@ /* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP and the return value if SKIP_RETURN is true. */ -static tree -build_function_type_skip_args (tree orig_type, bitmap args_to_skip, - bool skip_return) +tree +cgraph_build_function_type_skip_args (tree orig_type, bitmap args_to_skip, + bool skip_return) { tree new_type = NULL; tree args, new_args = NULL; @@ -219,7 +219,8 @@ if (prototype_p (new_type) || (skip_return && !VOID_TYPE_P (TREE_TYPE (new_type)))) new_type - = build_function_type_skip_args (new_type, args_to_skip, skip_return); + = cgraph_build_function_type_skip_args (new_type, args_to_skip, + skip_return); TREE_TYPE (new_decl) = new_type; /* For declarations setting DECL_VINDEX (i.e. methods) Index: gcc/passes.def =================================================================== --- a/src/gcc/passes.def (.../tags/gcc_6_3_0_release) +++ b/src/gcc/passes.def (.../branches/gcc-6-branch) @@ -132,6 +132,7 @@ POP_INSERT_PASSES () POP_INSERT_PASSES () + NEXT_PASS (pass_target_clone); NEXT_PASS (pass_ipa_chkp_produce_thunks); NEXT_PASS (pass_ipa_auto_profile); NEXT_PASS (pass_ipa_free_inline_summary); @@ -151,7 +152,6 @@ NEXT_PASS (pass_ipa_devirt); NEXT_PASS (pass_ipa_cp); NEXT_PASS (pass_ipa_cdtor_merge); - NEXT_PASS (pass_target_clone); NEXT_PASS (pass_ipa_hsa); NEXT_PASS (pass_ipa_inline); NEXT_PASS (pass_ipa_pure_const); @@ -169,7 +169,6 @@ compiled unit. */ INSERT_PASSES_AFTER (all_late_ipa_passes) NEXT_PASS (pass_ipa_pta); - NEXT_PASS (pass_dispatcher_calls); NEXT_PASS (pass_omp_simd_clone); TERMINATE_PASS_LIST () Index: gcc/tree-ssa-loop-ivopts.c =================================================================== --- a/src/gcc/tree-ssa-loop-ivopts.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-ssa-loop-ivopts.c (.../branches/gcc-6-branch) @@ -7321,7 +7321,11 @@ base_hint = var_at_stmt (data->current_loop, cand, use->stmt); iv = var_at_stmt (data->current_loop, cand, use->stmt); - ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff, + tree type = TREE_TYPE (*use->op_p); + unsigned int align = get_object_alignment (*use->op_p); + if (align != TYPE_ALIGN (type)) + type = build_aligned_type (type, align); + ref = create_mem_ref (&bsi, type, &aff, reference_alias_ptr_type (*use->op_p), iv, base_hint, data->speed); copy_ref_info (ref, *use->op_p); Index: gcc/tree-call-cdce.c =================================================================== --- a/src/gcc/tree-call-cdce.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-call-cdce.c (.../branches/gcc-6-branch) @@ -805,7 +805,18 @@ if (EDGE_COUNT (join_tgt_in_edge_from_call->dest->preds) > 1) join_tgt_bb = split_edge (join_tgt_in_edge_from_call); else - join_tgt_bb = join_tgt_in_edge_from_call->dest; + { + join_tgt_bb = join_tgt_in_edge_from_call->dest; + /* We may have degenerate PHIs in the destination. Propagate + those out. */ + for (gphi_iterator i = gsi_start_phis (join_tgt_bb); !gsi_end_p (i);) + { + gphi *phi = i.phi (); + replace_uses_by (gimple_phi_result (phi), + gimple_phi_arg_def (phi, 0)); + remove_phi_node (&i, true); + } + } } else { @@ -830,10 +841,12 @@ gsi_insert_before (&bi_call_bsi, c, GSI_SAME_STMT); cond_expr = c; } - nconds--; ci++; gcc_assert (cond_expr && gimple_code (cond_expr) == GIMPLE_COND); + typedef std::pair edge_pair; + auto_vec edges; + bi_call_in_edge0 = split_block (bi_call_bb, cond_expr); bi_call_in_edge0->flags &= ~EDGE_FALLTHRU; bi_call_in_edge0->flags |= EDGE_FALSE_VALUE; @@ -842,17 +855,11 @@ join_tgt_in_edge_fall_thru = make_edge (guard_bb, join_tgt_bb, EDGE_TRUE_VALUE); - bi_call_in_edge0->probability = REG_BR_PROB_BASE * ERR_PROB; - bi_call_in_edge0->count = - apply_probability (guard_bb->count, - bi_call_in_edge0->probability); - join_tgt_in_edge_fall_thru->probability = - inverse_probability (bi_call_in_edge0->probability); - join_tgt_in_edge_fall_thru->count = - guard_bb->count - bi_call_in_edge0->count; + edges.reserve (nconds); + edges.quick_push (edge_pair (bi_call_in_edge0, join_tgt_in_edge_fall_thru)); /* Code generation for the rest of the conditions */ - while (nconds > 0) + for (unsigned int i = 1; i < nconds; ++i) { unsigned ci0; edge bi_call_in_edge; @@ -868,7 +875,6 @@ gsi_insert_before (&guard_bsi, c, GSI_SAME_STMT); cond_expr = c; } - nconds--; ci++; gcc_assert (cond_expr && gimple_code (cond_expr) == GIMPLE_COND); guard_bb_in_edge = split_block (guard_bb, cond_expr); @@ -876,14 +882,51 @@ guard_bb_in_edge->flags |= EDGE_TRUE_VALUE; bi_call_in_edge = make_edge (guard_bb, bi_call_bb, EDGE_FALSE_VALUE); + edges.quick_push (edge_pair (bi_call_in_edge, guard_bb_in_edge)); + } - bi_call_in_edge->probability = REG_BR_PROB_BASE * ERR_PROB; - bi_call_in_edge->count = - apply_probability (guard_bb->count, - bi_call_in_edge->probability); - guard_bb_in_edge->probability = - inverse_probability (bi_call_in_edge->probability); - guard_bb_in_edge->count = guard_bb->count - bi_call_in_edge->count; + /* Now update the probability and profile information, processing the + guards in order of execution. + + There are two approaches we could take here. On the one hand we + could assign a probability of X to the call block and distribute + that probability among its incoming edges. On the other hand we + could assign a probability of X to each individual call edge. + + The choice only affects calls that have more than one condition. + In those cases, the second approach would give the call block + a greater probability than the first. However, the difference + is only small, and our chosen X is a pure guess anyway. + + Here we take the second approach because it's slightly simpler + and because it's easy to see that it doesn't lose profile counts. */ + bi_call_bb->count = 0; + bi_call_bb->frequency = 0; + while (!edges.is_empty ()) + { + edge_pair e = edges.pop (); + edge call_edge = e.first; + edge nocall_edge = e.second; + basic_block src_bb = call_edge->src; + gcc_assert (src_bb == nocall_edge->src); + + call_edge->probability = REG_BR_PROB_BASE * ERR_PROB; + call_edge->count = apply_probability (src_bb->count, + call_edge->probability); + nocall_edge->probability = inverse_probability (call_edge->probability); + nocall_edge->count = src_bb->count - call_edge->count; + + unsigned int call_frequency = apply_probability (src_bb->frequency, + call_edge->probability); + + bi_call_bb->count += call_edge->count; + bi_call_bb->frequency += call_frequency; + + if (nocall_edge->dest != join_tgt_bb) + { + nocall_edge->dest->count = nocall_edge->count; + nocall_edge->dest->frequency = src_bb->frequency - call_frequency; + } } if (dom_info_available_p (CDI_DOMINATORS)) Index: gcc/ipa-pure-const.c =================================================================== --- a/src/gcc/ipa-pure-const.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ipa-pure-const.c (.../branches/gcc-6-branch) @@ -218,11 +218,17 @@ static void warn_function_noreturn (tree decl) { + tree original_decl = decl; + + cgraph_node *node = cgraph_node::get (decl); + if (node->instrumentation_clone) + decl = node->instrumented_version->decl; + static hash_set *warned_about; if (!lang_hooks.missing_noreturn_ok_p (decl) && targetm.warn_func_return (decl)) warned_about - = suggest_attribute (OPT_Wsuggest_attribute_noreturn, decl, + = suggest_attribute (OPT_Wsuggest_attribute_noreturn, original_decl, true, warned_about, "noreturn"); } @@ -1160,7 +1166,8 @@ cdtor_p (cgraph_node *n, void *) { if (DECL_STATIC_CONSTRUCTOR (n->decl) || DECL_STATIC_DESTRUCTOR (n->decl)) - return !TREE_READONLY (n->decl) && !DECL_PURE_P (n->decl); + return ((!TREE_READONLY (n->decl) && !DECL_PURE_P (n->decl)) + || DECL_LOOPING_CONST_OR_PURE_P (n->decl)); return false; } Index: gcc/ira-int.h =================================================================== --- a/src/gcc/ira-int.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ira-int.h (.../branches/gcc-6-branch) @@ -782,7 +782,7 @@ /* Initialized once. It is a maximal possible size of the allocated struct costs. */ - int x_max_struct_costs_size; + size_t x_max_struct_costs_size; /* Allocated and initialized once, and used to initialize cost values for each insn. */ Index: gcc/sel-sched.c =================================================================== --- a/src/gcc/sel-sched.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/sel-sched.c (.../branches/gcc-6-branch) @@ -2528,6 +2528,7 @@ } if (DEBUG_INSN_P (EXPR_INSN_RTX (expr)) + && BLOCK_FOR_INSN (EXPR_INSN_RTX (expr)) && (sel_bb_head (BLOCK_FOR_INSN (EXPR_INSN_RTX (expr))) == EXPR_INSN_RTX (expr))) /* Don't use cached information for debug insns that are heads of Index: gcc/dwarf2out.c =================================================================== --- a/src/gcc/dwarf2out.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/dwarf2out.c (.../branches/gcc-6-branch) @@ -16615,10 +16615,6 @@ field_byte_offset (const_tree decl, struct vlr_context *ctx, HOST_WIDE_INT *cst_offset) { - offset_int object_offset_in_bits; - offset_int object_offset_in_bytes; - offset_int bitpos_int; - bool is_byte_offset_cst, is_bit_offset_cst; tree tree_result; dw_loc_list_ref loc_result; @@ -16629,12 +16625,9 @@ else gcc_assert (TREE_CODE (decl) == FIELD_DECL); - is_bit_offset_cst = TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST; - is_byte_offset_cst = TREE_CODE (DECL_FIELD_OFFSET (decl)) != INTEGER_CST; - /* We cannot handle variable bit offsets at the moment, so abort if it's the case. */ - if (is_bit_offset_cst) + if (TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST) return NULL; #ifdef PCC_BITFIELD_TYPE_MATTERS @@ -16641,8 +16634,12 @@ /* We used to handle only constant offsets in all cases. Now, we handle properly dynamic byte offsets only when PCC bitfield type doesn't matter. */ - if (PCC_BITFIELD_TYPE_MATTERS && is_byte_offset_cst && is_bit_offset_cst) + if (PCC_BITFIELD_TYPE_MATTERS + && TREE_CODE (DECL_FIELD_OFFSET (decl)) == INTEGER_CST) { + offset_int object_offset_in_bits; + offset_int object_offset_in_bytes; + offset_int bitpos_int; tree type; tree field_size_tree; offset_int deepest_bitpos; @@ -16737,13 +16734,23 @@ object_offset_in_bits = round_up_to_align (object_offset_in_bits, decl_align_in_bits); } + + object_offset_in_bytes + = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT); + if (ctx->variant_part_offset == NULL_TREE) + { + *cst_offset = object_offset_in_bytes.to_shwi (); + return NULL; + } + tree_result = wide_int_to_tree (sizetype, object_offset_in_bytes); } + else #endif /* PCC_BITFIELD_TYPE_MATTERS */ + tree_result = byte_position (decl); - tree_result = byte_position (decl); if (ctx->variant_part_offset != NULL_TREE) - tree_result = fold (build2 (PLUS_EXPR, TREE_TYPE (tree_result), - ctx->variant_part_offset, tree_result)); + tree_result = fold_build2 (PLUS_EXPR, TREE_TYPE (tree_result), + ctx->variant_part_offset, tree_result); /* If the byte offset is a constant, it's simplier to handle a native constant rather than a DWARF expression. */ @@ -22221,14 +22228,12 @@ if (!lower_cst_included) lower_cst - = fold (build2 (PLUS_EXPR, TREE_TYPE (lower_cst), - lower_cst, - build_int_cst (TREE_TYPE (lower_cst), 1))); + = fold_build2 (PLUS_EXPR, TREE_TYPE (lower_cst), lower_cst, + build_int_cst (TREE_TYPE (lower_cst), 1)); if (!upper_cst_included) upper_cst - = fold (build2 (MINUS_EXPR, TREE_TYPE (upper_cst), - upper_cst, - build_int_cst (TREE_TYPE (upper_cst), 1))); + = fold_build2 (MINUS_EXPR, TREE_TYPE (upper_cst), upper_cst, + build_int_cst (TREE_TYPE (upper_cst), 1)); if (!get_discr_value (lower_cst, &new_node->dw_discr_lower_bound) @@ -22397,8 +22402,8 @@ we recurse. */ vlr_sub_ctx.variant_part_offset - = fold (build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset), - variant_part_offset, byte_position (member))); + = fold_build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset), + variant_part_offset, byte_position (member)); gen_variant_part (member, &vlr_sub_ctx, variant_die); } else @@ -23151,8 +23156,18 @@ for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl)) process_scope_var (stmt, decl, NULL_TREE, context_die); for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++) - process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i), - context_die); + { + decl = BLOCK_NONLOCALIZED_VAR (stmt, i); + if (decl == current_function_decl) + /* Ignore declarations of the current function, while they + are declarations, gen_subprogram_die would treat them + as definitions again, because they are equal to + current_function_decl and endlessly recurse. */; + else if (TREE_CODE (decl) == FUNCTION_DECL) + process_scope_var (stmt, decl, NULL_TREE, context_die); + else + process_scope_var (stmt, NULL_TREE, decl, context_die); + } } /* Even if we're at -g1, we need to process the subblocks in order to get @@ -23752,7 +23767,16 @@ { dw_die_ref die = lookup_decl_die (decl); if (die) - add_location_or_const_value_attribute (die, decl, false); + { + /* We get called via the symtab code invoking late_global_decl + for symbols that are optimized out. Do not add locations + for those. */ + varpool_node *node = varpool_node::get (decl); + if (! node || ! node->definition) + tree_add_const_value_attribute_for_decl (die, decl); + else + add_location_or_const_value_attribute (die, decl, false); + } } } Index: gcc/expr.c =================================================================== --- a/src/gcc/expr.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/expr.c (.../branches/gcc-6-branch) @@ -120,7 +120,8 @@ static rtx_insn *compress_float_constant (rtx, rtx); static rtx get_subtarget (rtx); static void store_constructor_field (rtx, unsigned HOST_WIDE_INT, - HOST_WIDE_INT, machine_mode, + HOST_WIDE_INT, unsigned HOST_WIDE_INT, + unsigned HOST_WIDE_INT, machine_mode, tree, int, alias_set_type, bool); static void store_constructor (tree, rtx, int, HOST_WIDE_INT, bool); static rtx store_field (rtx, HOST_WIDE_INT, HOST_WIDE_INT, @@ -4648,7 +4649,7 @@ If the access does not need to be restricted, 0 is returned in both *BITSTART and *BITEND. */ -static void +void get_bit_range (unsigned HOST_WIDE_INT *bitstart, unsigned HOST_WIDE_INT *bitend, tree exp, @@ -5932,7 +5933,10 @@ static void store_constructor_field (rtx target, unsigned HOST_WIDE_INT bitsize, - HOST_WIDE_INT bitpos, machine_mode mode, + HOST_WIDE_INT bitpos, + unsigned HOST_WIDE_INT bitregion_start, + unsigned HOST_WIDE_INT bitregion_end, + machine_mode mode, tree exp, int cleared, alias_set_type alias_set, bool reverse) { @@ -5967,8 +5971,8 @@ reverse); } else - store_field (target, bitsize, bitpos, 0, 0, mode, exp, alias_set, false, - reverse); + store_field (target, bitsize, bitpos, bitregion_start, bitregion_end, mode, + exp, alias_set, false, reverse); } @@ -6003,6 +6007,7 @@ { tree type = TREE_TYPE (exp); HOST_WIDE_INT exp_size = int_size_in_bytes (type); + HOST_WIDE_INT bitregion_end = size > 0 ? size * BITS_PER_UNIT - 1 : 0; switch (TREE_CODE (type)) { @@ -6081,7 +6086,7 @@ if (tree_fits_uhwi_p (DECL_SIZE (field))) bitsize = tree_to_uhwi (DECL_SIZE (field)); else - bitsize = -1; + gcc_unreachable (); mode = DECL_MODE (field); if (DECL_BIT_FIELD (field)) @@ -6092,32 +6097,11 @@ && tree_fits_shwi_p (bit_position (field))) { bitpos = int_bit_position (field); - offset = 0; + offset = NULL_TREE; } else - bitpos = tree_to_shwi (DECL_FIELD_BIT_OFFSET (field)); + gcc_unreachable (); - if (offset) - { - machine_mode address_mode; - rtx offset_rtx; - - offset - = SUBSTITUTE_PLACEHOLDER_IN_EXPR (offset, - make_tree (TREE_TYPE (exp), - target)); - - offset_rtx = expand_normal (offset); - gcc_assert (MEM_P (to_rtx)); - - address_mode = get_address_mode (to_rtx); - if (GET_MODE (offset_rtx) != address_mode) - offset_rtx = convert_to_mode (address_mode, offset_rtx, 0); - - to_rtx = offset_address (to_rtx, offset_rtx, - highest_pow2_factor (offset)); - } - /* If this initializes a field that is smaller than a word, at the start of a word, try to widen it to a full word. This special case allows us to output C++ member @@ -6164,7 +6148,8 @@ MEM_KEEP_ALIAS_SET_P (to_rtx) = 1; } - store_constructor_field (to_rtx, bitsize, bitpos, mode, + store_constructor_field (to_rtx, bitsize, bitpos, + 0, bitregion_end, mode, value, cleared, get_alias_set (TREE_TYPE (field)), reverse); @@ -6324,7 +6309,8 @@ } store_constructor_field - (target, bitsize, bitpos, mode, value, cleared, + (target, bitsize, bitpos, 0, bitregion_end, + mode, value, cleared, get_alias_set (elttype), reverse); } } @@ -6427,7 +6413,8 @@ target = copy_rtx (target); MEM_KEEP_ALIAS_SET_P (target) = 1; } - store_constructor_field (target, bitsize, bitpos, mode, value, + store_constructor_field (target, bitsize, bitpos, 0, + bitregion_end, mode, value, cleared, get_alias_set (elttype), reverse); } @@ -6561,7 +6548,8 @@ ? TYPE_MODE (TREE_TYPE (value)) : eltmode; bitpos = eltpos * elt_size; - store_constructor_field (target, bitsize, bitpos, value_mode, + store_constructor_field (target, bitsize, bitpos, 0, + bitregion_end, value_mode, value, cleared, alias, reverse); } } @@ -6700,13 +6688,36 @@ temp = expand_normal (exp); - /* If the value has a record type and an integral mode then, if BITSIZE - is narrower than this mode and this is for big-endian data, we must - first put the value into the low-order bits. Moreover, the field may - be not aligned on a byte boundary; in this case, if it has reverse - storage order, it needs to be accessed as a scalar field with reverse - storage order and we must first put the value into target order. */ - if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE + /* Handle calls that return values in multiple non-contiguous locations. + The Irix 6 ABI has examples of this. */ + if (GET_CODE (temp) == PARALLEL) + { + HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); + machine_mode temp_mode + = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT); + rtx temp_target = gen_reg_rtx (temp_mode); + emit_group_store (temp_target, temp, TREE_TYPE (exp), size); + temp = temp_target; + } + + /* Handle calls that return BLKmode values in registers. */ + else if (mode == BLKmode && REG_P (temp) && TREE_CODE (exp) == CALL_EXPR) + { + rtx temp_target = gen_reg_rtx (GET_MODE (temp)); + copy_blkmode_from_reg (temp_target, temp, TREE_TYPE (exp)); + temp = temp_target; + } + + /* If the value has aggregate type and an integral mode then, if BITSIZE + is narrower than this mode and this is for big-endian data, we first + need to put the value into the low-order bits for store_bit_field, + except when MODE is BLKmode and BITSIZE larger than the word size + (see the handling of fields larger than a word in store_bit_field). + Moreover, the field may be not aligned on a byte boundary; in this + case, if it has reverse storage order, it needs to be accessed as a + scalar field with reverse storage order and we must first put the + value into target order. */ + if (AGGREGATE_TYPE_P (TREE_TYPE (exp)) && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT) { HOST_WIDE_INT size = GET_MODE_BITSIZE (GET_MODE (temp)); @@ -6717,7 +6728,8 @@ temp = flip_storage_order (GET_MODE (temp), temp); if (bitsize < size - && reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN) + && reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN + && !(mode == BLKmode && bitsize > BITS_PER_WORD)) temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp, size - bitsize, NULL_RTX, 1); } @@ -6727,12 +6739,10 @@ && mode != TYPE_MODE (TREE_TYPE (exp))) temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1); - /* If TEMP is not a PARALLEL (see below) and its mode and that of TARGET - are both BLKmode, both must be in memory and BITPOS must be aligned - on a byte boundary. If so, we simply do a block copy. Likewise for - a BLKmode-like TARGET. */ - if (GET_CODE (temp) != PARALLEL - && GET_MODE (temp) == BLKmode + /* If the mode of TEMP and TARGET is BLKmode, both must be in memory + and BITPOS must be aligned on a byte boundary. If so, we simply do + a block copy. Likewise for a BLKmode-like TARGET. */ + if (GET_MODE (temp) == BLKmode && (GET_MODE (target) == BLKmode || (MEM_P (target) && GET_MODE_CLASS (GET_MODE (target)) == MODE_INT @@ -6751,39 +6761,14 @@ return const0_rtx; } - /* Handle calls that return values in multiple non-contiguous locations. - The Irix 6 ABI has examples of this. */ - if (GET_CODE (temp) == PARALLEL) + /* If the mode of TEMP is still BLKmode and BITSIZE not larger than the + word size, we need to load the value (see again store_bit_field). */ + if (GET_MODE (temp) == BLKmode && bitsize <= BITS_PER_WORD) { - HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); - rtx temp_target; - if (mode == BLKmode || mode == VOIDmode) - mode = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT); - temp_target = gen_reg_rtx (mode); - emit_group_store (temp_target, temp, TREE_TYPE (exp), size); - temp = temp_target; + machine_mode temp_mode = smallest_mode_for_size (bitsize, MODE_INT); + temp = extract_bit_field (temp, bitsize, 0, 1, NULL_RTX, temp_mode, + temp_mode, false); } - else if (mode == BLKmode) - { - /* Handle calls that return BLKmode values in registers. */ - if (REG_P (temp) && TREE_CODE (exp) == CALL_EXPR) - { - rtx temp_target = gen_reg_rtx (GET_MODE (temp)); - copy_blkmode_from_reg (temp_target, temp, TREE_TYPE (exp)); - temp = temp_target; - } - else - { - HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); - rtx temp_target; - mode = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT); - temp_target = gen_reg_rtx (mode); - temp_target - = extract_bit_field (temp, size * BITS_PER_UNIT, 0, 1, - temp_target, mode, mode, false); - temp = temp_target; - } - } /* Store the value in the bitfield. */ store_bit_field (target, bitsize, bitpos, @@ -8800,6 +8785,18 @@ if (temp != 0) return temp; + /* For vector MIN , expand it a VEC_COND_EXPR + and similarly for MAX . */ + if (VECTOR_TYPE_P (type)) + { + tree t0 = make_tree (type, op0); + tree t1 = make_tree (type, op1); + tree comparison = build2 (code == MIN_EXPR ? LE_EXPR : GE_EXPR, + type, t0, t1); + return expand_vec_cond_expr (type, comparison, t0, t1, + original_target); + } + /* At this point, a MEM target is no longer useful; we will get better code without it. */ @@ -8941,9 +8938,9 @@ /* Left shift optimization when shifting across word_size boundary. - If mode == GET_MODE_WIDER_MODE (word_mode), then normally there isn't - native instruction to support this wide mode left shift. Given below - scenario: + If mode == GET_MODE_WIDER_MODE (word_mode), then normally + there isn't native instruction to support this wide mode + left shift. Given below scenario: Type A = (Type) B << C @@ -8952,10 +8949,11 @@ | word_size | - If the shift amount C caused we shift B to across the word size - boundary, i.e part of B shifted into high half of destination - register, and part of B remains in the low half, then GCC will use - the following left shift expand logic: + If the shift amount C caused we shift B to across the word + size boundary, i.e part of B shifted into high half of + destination register, and part of B remains in the low + half, then GCC will use the following left shift expand + logic: 1. Initialize dest_low to B. 2. Initialize every bit of dest_high to the sign bit of B. @@ -8965,20 +8963,30 @@ 5. Logic right shift D by (word_size - C). 6. Or the result of 4 and 5 to finalize dest_high. - While, by checking gimple statements, if operand B is coming from - signed extension, then we can simplify above expand logic into: + While, by checking gimple statements, if operand B is + coming from signed extension, then we can simplify above + expand logic into: 1. dest_high = src_low >> (word_size - C). 2. dest_low = src_low << C. - We can use one arithmetic right shift to finish all the purpose of - steps 2, 4, 5, 6, thus we reduce the steps needed from 6 into 2. */ + We can use one arithmetic right shift to finish all the + purpose of steps 2, 4, 5, 6, thus we reduce the steps + needed from 6 into 2. + The case is similar for zero extension, except that we + initialize dest_high to zero rather than copies of the sign + bit from B. Furthermore, we need to use a logical right shift + in this case. + + The choice of sign-extension versus zero-extension is + determined entirely by whether or not B is signed and is + independent of the current setting of unsignedp. */ + temp = NULL_RTX; if (code == LSHIFT_EXPR && target && REG_P (target) - && ! unsignedp && mode == GET_MODE_WIDER_MODE (word_mode) && GET_MODE_SIZE (mode) == 2 * GET_MODE_SIZE (word_mode) && TREE_CONSTANT (treeop1) @@ -8999,6 +9007,8 @@ rtx_insn *seq, *seq_old; unsigned int high_off = subreg_highpart_offset (word_mode, mode); + bool extend_unsigned + = TYPE_UNSIGNED (TREE_TYPE (gimple_assign_rhs1 (def))); rtx low = lowpart_subreg (word_mode, op0, mode); rtx dest_low = lowpart_subreg (word_mode, target, mode); rtx dest_high = simplify_gen_subreg (word_mode, target, @@ -9010,7 +9020,8 @@ start_sequence (); /* dest_high = src_low >> (word_size - C). */ temp = expand_variable_shift (RSHIFT_EXPR, word_mode, low, - rshift, dest_high, unsignedp); + rshift, dest_high, + extend_unsigned); if (temp != dest_high) emit_move_insn (dest_high, temp); Index: gcc/expr.h =================================================================== --- a/src/gcc/expr.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/expr.h (.../branches/gcc-6-branch) @@ -223,6 +223,10 @@ extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int, int, rtx, int, rtx, rtx, int, rtx, bool); +/* Extract the accessible bit-range from a COMPONENT_REF. */ +extern void get_bit_range (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, + tree, HOST_WIDE_INT *, tree *); + /* Expand an assignment that stores the value of FROM into TO. */ extern void expand_assignment (tree, tree, bool); Index: gcc/go/gofrontend/expressions.h =================================================================== --- a/src/gcc/go/gofrontend/expressions.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/go/gofrontend/expressions.h (.../branches/gcc-6-branch) @@ -1633,10 +1633,11 @@ } // Apply unary opcode OP to UNC, setting NC. Return true if this - // could be done, false if not. Issue errors for overflow. + // could be done, false if not. On overflow, issues an error and + // sets *ISSUED_ERROR. static bool eval_constant(Operator op, const Numeric_constant* unc, - Location, Numeric_constant* nc); + Location, Numeric_constant* nc, bool *issued_error); static Expression* do_import(Import*); @@ -1755,11 +1756,11 @@ // Apply binary opcode OP to LEFT_NC and RIGHT_NC, setting NC. // Return true if this could be done, false if not. Issue errors at - // LOCATION as appropriate. + // LOCATION as appropriate, and sets *ISSUED_ERROR if it did. static bool eval_constant(Operator op, Numeric_constant* left_nc, Numeric_constant* right_nc, Location location, - Numeric_constant* nc); + Numeric_constant* nc, bool* issued_error); // Compare constants LEFT_NC and RIGHT_NC according to OP, setting // *RESULT. Return true if this could be done, false if not. Issue Index: gcc/go/gofrontend/types.cc =================================================================== --- a/src/gcc/go/gofrontend/types.cc (.../tags/gcc_6_3_0_release) +++ b/src/gcc/go/gofrontend/types.cc (.../branches/gcc-6-branch) @@ -2175,11 +2175,26 @@ is_common = true; } + // The current garbage collector requires that the GC symbol be + // aligned to at least a four byte boundary. See the use of PRECISE + // and LOOP in libgo/runtime/mgc0.c. + int64_t align; + if (!sym_init->type()->backend_type_align(gogo, &align)) + go_assert(saw_errors()); + if (align < 4) + align = 4; + else + { + // Use default alignment. + align = 0; + } + // Since we are building the GC symbol in this package, we must create the // variable before converting the initializer to its backend representation // because the initializer may refer to the GC symbol for this type. this->gc_symbol_var_ = - gogo->backend()->implicit_variable(sym_name, sym_btype, false, true, is_common, 0); + gogo->backend()->implicit_variable(sym_name, sym_btype, false, true, + is_common, align); if (phash != NULL) *phash = this->gc_symbol_var_; Index: gcc/go/gofrontend/expressions.cc =================================================================== --- a/src/gcc/go/gofrontend/expressions.cc (.../tags/gcc_6_3_0_release) +++ b/src/gcc/go/gofrontend/expressions.cc (.../branches/gcc-6-branch) @@ -3639,8 +3639,12 @@ if (expr->numeric_constant_value(&nc)) { Numeric_constant result; - if (Unary_expression::eval_constant(op, &nc, loc, &result)) + bool issued_error; + if (Unary_expression::eval_constant(op, &nc, loc, &result, + &issued_error)) return result.expression(loc); + else if (issued_error) + return Expression::make_error(this->location()); } } @@ -3747,12 +3751,15 @@ } // Apply unary opcode OP to UNC, setting NC. Return true if this -// could be done, false if not. Issue errors for overflow. +// could be done, false if not. On overflow, issues an error and sets +// *ISSUED_ERROR. bool Unary_expression::eval_constant(Operator op, const Numeric_constant* unc, - Location location, Numeric_constant* nc) + Location location, Numeric_constant* nc, + bool* issued_error) { + *issued_error = false; switch (op) { case OPERATOR_PLUS: @@ -3897,7 +3904,12 @@ mpz_clear(uval); mpz_clear(val); - return nc->set_type(unc->type(), true, location); + if (!nc->set_type(unc->type(), true, location)) + { + *issued_error = true; + return false; + } + return true; } // Return the integral constant value of a unary expression, if it has one. @@ -3908,8 +3920,9 @@ Numeric_constant unc; if (!this->expr_->numeric_constant_value(&unc)) return false; + bool issued_error; return Unary_expression::eval_constant(this->op_, &unc, this->location(), - nc); + nc, &issued_error); } // Return the type of a unary expression. @@ -4539,13 +4552,15 @@ // Apply binary opcode OP to LEFT_NC and RIGHT_NC, setting NC. Return // true if this could be done, false if not. Issue errors at LOCATION -// as appropriate. +// as appropriate, and sets *ISSUED_ERROR if it did. bool Binary_expression::eval_constant(Operator op, Numeric_constant* left_nc, Numeric_constant* right_nc, - Location location, Numeric_constant* nc) + Location location, Numeric_constant* nc, + bool* issued_error) { + *issued_error = false; switch (op) { case OPERATOR_OROR: @@ -4594,7 +4609,11 @@ r = Binary_expression::eval_integer(op, left_nc, right_nc, location, nc); if (r) - r = nc->set_type(type, true, location); + { + r = nc->set_type(type, true, location); + if (!r) + *issued_error = true; + } return r; } @@ -4917,9 +4936,15 @@ else { Numeric_constant nc; + bool issued_error; if (!Binary_expression::eval_constant(op, &left_nc, &right_nc, - location, &nc)) + location, &nc, + &issued_error)) + { + if (issued_error) + return Expression::make_error(location); return this; + } return nc.expression(location); } } @@ -5254,8 +5279,9 @@ Numeric_constant right_nc; if (!this->right_->numeric_constant_value(&right_nc)) return false; + bool issued_error; return Binary_expression::eval_constant(this->op_, &left_nc, &right_nc, - this->location(), nc); + this->location(), nc, &issued_error); } // Note that the value is being discarded. @@ -5354,8 +5380,13 @@ Type_context subcontext(*context); - if (is_comparison) + if (is_constant_expr) { + subcontext.type = NULL; + subcontext.may_be_abstract = true; + } + else if (is_comparison) + { // In a comparison, the context does not determine the types of // the operands. subcontext.type = NULL; @@ -5396,8 +5427,7 @@ subcontext.type = subcontext.type->make_non_abstract_type(); } - if (!is_constant_expr) - this->left_->determine_type(&subcontext); + this->left_->determine_type(&subcontext); if (is_shift_op) { @@ -5417,8 +5447,7 @@ subcontext.may_be_abstract = false; } - if (!is_constant_expr) - this->right_->determine_type(&subcontext); + this->right_->determine_type(&subcontext); if (is_comparison) { Index: gcc/tree-chkp-opt.c =================================================================== --- a/src/gcc/tree-chkp-opt.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-chkp-opt.c (.../branches/gcc-6-branch) @@ -239,9 +239,11 @@ return false; else if (addr.pol[0].var) return false; + else if (TREE_CODE (addr.pol[0].cst) != INTEGER_CST) + return false; else if (integer_zerop (addr.pol[0].cst)) *sign = 0; - else if (tree_int_cst_sign_bit (addr.pol[0].cst)) + else if (tree_int_cst_sign_bit (addr.pol[0].cst)) *sign = -1; else *sign = 1; Index: gcc/tree-parloops.c =================================================================== --- a/src/gcc/tree-parloops.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-parloops.c (.../branches/gcc-6-branch) @@ -2511,8 +2511,8 @@ { gphi_iterator gsi; loop_vec_info simple_loop_info; - loop_vec_info simple_inner_loop_info = NULL; - bool allow_double_reduc = true; + auto_vec double_reduc_phis; + auto_vec double_reduc_stmts; if (!stmt_vec_info_vec.exists ()) init_stmt_vec_info_vec (); @@ -2542,44 +2542,56 @@ if (double_reduc) { - if (!allow_double_reduc - || loop->inner->inner != NULL) + if (loop->inner->inner != NULL) continue; - if (!simple_inner_loop_info) - { - simple_inner_loop_info = vect_analyze_loop_form (loop->inner); - if (!simple_inner_loop_info) - { - allow_double_reduc = false; - continue; - } - } - - use_operand_p use_p; - gimple *inner_stmt; - bool single_use_p = single_imm_use (res, &use_p, &inner_stmt); - gcc_assert (single_use_p); - if (gimple_code (inner_stmt) != GIMPLE_PHI) - continue; - gphi *inner_phi = as_a (inner_stmt); - if (simple_iv (loop->inner, loop->inner, PHI_RESULT (inner_phi), - &iv, true)) - continue; - - gimple *inner_reduc_stmt - = vect_force_simple_reduction (simple_inner_loop_info, inner_phi, - true, &double_reduc, true); - gcc_assert (!double_reduc); - if (inner_reduc_stmt == NULL) - continue; + double_reduc_phis.safe_push (phi); + double_reduc_stmts.safe_push (reduc_stmt); + continue; } build_new_reduction (reduction_list, reduc_stmt, phi); } destroy_loop_vec_info (simple_loop_info, true); - destroy_loop_vec_info (simple_inner_loop_info, true); + if (!double_reduc_phis.is_empty ()) + { + simple_loop_info = vect_analyze_loop_form (loop->inner); + if (simple_loop_info) + { + gphi *phi; + unsigned int i; + + FOR_EACH_VEC_ELT (double_reduc_phis, i, phi) + { + affine_iv iv; + tree res = PHI_RESULT (phi); + bool double_reduc; + + use_operand_p use_p; + gimple *inner_stmt; + bool single_use_p = single_imm_use (res, &use_p, &inner_stmt); + gcc_assert (single_use_p); + if (gimple_code (inner_stmt) != GIMPLE_PHI) + continue; + gphi *inner_phi = as_a (inner_stmt); + if (simple_iv (loop->inner, loop->inner, PHI_RESULT (inner_phi), + &iv, true)) + continue; + + gimple *inner_reduc_stmt + = vect_force_simple_reduction (simple_loop_info, inner_phi, + true, &double_reduc, true); + gcc_assert (!double_reduc); + if (inner_reduc_stmt == NULL) + continue; + + build_new_reduction (reduction_list, double_reduc_stmts[i], phi); + } + destroy_loop_vec_info (simple_loop_info, true); + } + } + gather_done: /* Release the claim on gimple_uid. */ free_stmt_vec_info_vec (); Index: gcc/ada/socket.c =================================================================== --- a/src/gcc/ada/socket.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/socket.c (.../branches/gcc-6-branch) @@ -202,7 +202,7 @@ struct hostent *rh; int ri; -#if defined(__linux__) || defined(__GLIBC__) +#if defined(__linux__) || defined(__GLIBC__) || defined(__rtems__) (void) gethostbyaddr_r (addr, len, type, ret, buf, buflen, &rh, h_errnop); #else rh = gethostbyaddr_r (addr, len, type, ret, buf, buflen, h_errnop); Index: gcc/ada/system-linux-ppc.ads =================================================================== --- a/src/gcc/ada/system-linux-ppc.ads (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/system-linux-ppc.ads (.../branches/gcc-6-branch) @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/PPC Version) -- -- -- --- Copyright (C) 1992-2016, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2017, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -89,7 +89,8 @@ -- Other System-Dependent Declarations type Bit_Order is (High_Order_First, Low_Order_First); - Default_Bit_Order : constant Bit_Order := High_Order_First; + Default_Bit_Order : constant Bit_Order := + Bit_Order'Val (Standard'Default_Bit_Order); pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning -- Priority-related Declarations (RM D.1) Index: gcc/ada/system-linux-aarch64-ilp32.ads =================================================================== --- a/src/gcc/ada/system-linux-aarch64-ilp32.ads (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/system-linux-aarch64-ilp32.ads (.../branches/gcc-6-branch) @@ -0,0 +1,157 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M -- +-- -- +-- S p e c -- +-- (GNU-Linux/ARM Version) -- +-- -- +-- Copyright (C) 1992-2017, Free Software Foundation, Inc. -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contents of the part following the private keyword. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package System is + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). + + pragma No_Elaboration_Code_All; + -- Allow the use of that restriction in units that WITH this unit + + type Name is (SYSTEM_NAME_GNAT); + System_Name : constant Name := SYSTEM_NAME_GNAT; + + -- System-Dependent Named Numbers + + Min_Int : constant := Long_Long_Integer'First; + Max_Int : constant := Long_Long_Integer'Last; + + Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; + Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1; + + Max_Base_Digits : constant := Long_Long_Float'Digits; + Max_Digits : constant := Long_Long_Float'Digits; + + Max_Mantissa : constant := 63; + Fine_Delta : constant := 2.0 ** (-Max_Mantissa); + + Tick : constant := 0.000_001; + + -- Storage-related Declarations + + type Address is private; + pragma Preelaborable_Initialization (Address); + Null_Address : constant Address; + + Storage_Unit : constant := 8; + Word_Size : constant := 32; + Memory_Size : constant := 2 ** Word_Size; + + -- Address comparison + + function "<" (Left, Right : Address) return Boolean; + function "<=" (Left, Right : Address) return Boolean; + function ">" (Left, Right : Address) return Boolean; + function ">=" (Left, Right : Address) return Boolean; + function "=" (Left, Right : Address) return Boolean; + + pragma Import (Intrinsic, "<"); + pragma Import (Intrinsic, "<="); + pragma Import (Intrinsic, ">"); + pragma Import (Intrinsic, ">="); + pragma Import (Intrinsic, "="); + + -- Other System-Dependent Declarations + + type Bit_Order is (High_Order_First, Low_Order_First); + Default_Bit_Order : constant Bit_Order := + Bit_Order'Val (Standard'Default_Bit_Order); + pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning + + -- Priority-related Declarations (RM D.1) + + -- 0 .. 98 corresponds to the system priority range 1 .. 99. + -- + -- If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use + -- of the entire range provided by the system. + -- + -- If the scheduling policy is SCHED_OTHER the only valid system priority + -- is 1 and other values are simply ignored. + + Max_Priority : constant Positive := 97; + Max_Interrupt_Priority : constant Positive := 98; + + subtype Any_Priority is Integer range 0 .. 98; + subtype Priority is Any_Priority range 0 .. 97; + subtype Interrupt_Priority is Any_Priority range 98 .. 98; + + Default_Priority : constant Priority := 48; + +private + + type Address is mod Memory_Size; + Null_Address : constant Address := 0; + + -------------------------------------- + -- System Implementation Parameters -- + -------------------------------------- + + -- These parameters provide information about the target that is used + -- by the compiler. They are in the private part of System, where they + -- can be accessed using the special circuitry in the Targparm unit + -- whose source should be consulted for more detailed descriptions + -- of the individual switch values. + + Backend_Divide_Checks : constant Boolean := False; + Backend_Overflow_Checks : constant Boolean := True; + Command_Line_Args : constant Boolean := True; + Configurable_Run_Time : constant Boolean := False; + Denorm : constant Boolean := True; + Duration_32_Bits : constant Boolean := False; + Exit_Status_Supported : constant Boolean := True; + Fractional_Fixed_Ops : constant Boolean := False; + Frontend_Layout : constant Boolean := False; + Machine_Overflows : constant Boolean := False; + Machine_Rounds : constant Boolean := True; + Preallocated_Stacks : constant Boolean := False; + Signed_Zeros : constant Boolean := True; + Stack_Check_Default : constant Boolean := False; + Stack_Check_Probes : constant Boolean := True; + Stack_Check_Limits : constant Boolean := False; + Support_Aggregates : constant Boolean := True; + Support_Atomic_Primitives : constant Boolean := True; + Support_Composite_Assign : constant Boolean := True; + Support_Composite_Compare : constant Boolean := True; + Support_Long_Shifts : constant Boolean := True; + Always_Compatible_Rep : constant Boolean := False; + Suppress_Standard_Library : constant Boolean := False; + Use_Ada_Main_Program_Name : constant Boolean := False; + Frontend_Exceptions : constant Boolean := False; + ZCX_By_Default : constant Boolean := True; + +end System; Index: gcc/ada/ChangeLog =================================================================== --- a/src/gcc/ada/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,55 @@ +2017-03-28 Andreas Schwab + + Backport from trunk + + 2017-03-28 Andreas Schwab + + PR ada/80117 + * system-linux-aarch64-ilp32.ads: New file. + * gcc-interface/Makefile.in (LIBGNAT_TARGET_PAIRS_COMMON): Rename + from LIBGNAT_TARGET_PAIRS. + (LIBGNAT_TARGET_PAIRS_32, LIBGNAT_TARGET_PAIRS_64): Define. + (LIBGNAT_TARGET_PAIRS): Use LIBGNAT_TARGET_PAIRS_COMMON, and + LIBGNAT_TARGET_PAIRS_64 or LIBGNAT_TARGET_PAIRS_32 for -mabi=lp64 + or -mabi=ilp32, resp. + +2017-03-08 Thanassis Tsiodras + + PR ada/79903 + * socket.c (__gnat_gethostbyaddr): Add missing test for __rtems__. + +2017-03-08 Eric Botcazou + + PR ada/79945 + * system-linux-ppc.ads (Default_Bit_Order): Use Standard's setting. + +2017-02-24 Eric Botcazou + + * gcc-interface/decl.c (gnat_to_gnu_field): Do not remove the wrapper + around a justified modular type if it doesn't have the same scalar + storage order as the enclosing record type. + +2017-02-24 Eric Botcazou + + * gcc-interface/trans.c (gnat_to_gnu): Do not apply special handling + of boolean rvalues to function calls. + +2017-02-24 Eric Botcazou + + * gcc-interface/utils.c (fold_bit_position): New function. + (rest_of_record_type_compilation): Call it instead of bit_position to + compute the field position and remove the call to remove_conversions. + (compute_related_constant): Factor out the multiplication in both + operands, if any, and streamline the final test. + +2017-02-24 Eric Botcazou + + * gcc-interface/trans.c (return_value_ok_for_nrv_p): Add sanity check. + +2017-02-12 John Marino + + * gcc-interface/Makefile.in: Support aarch64-freebsd. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/ada/gcc-interface/utils.c =================================================================== --- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-6-branch) @@ -238,6 +238,7 @@ hash_table *pad_type_hash_table; static tree merge_sizes (tree, tree, tree, bool, bool); +static tree fold_bit_position (const_tree); static tree compute_related_constant (tree, tree); static tree split_plus (tree, tree *); static tree float_type_for_precision (int, machine_mode); @@ -2021,15 +2022,11 @@ { tree field_type = TREE_TYPE (old_field); tree field_name = DECL_NAME (old_field); - tree curpos = bit_position (old_field); + tree curpos = fold_bit_position (old_field); tree pos, new_field; bool var = false; unsigned int align = 0; - /* We're going to do some pattern matching below so remove as many - conversions as possible. */ - curpos = remove_conversions (curpos, true); - /* See how the position was modified from the last position. There are two basic cases we support: a value was added @@ -2126,7 +2123,7 @@ is when there are other components at fixed positions after it (meaning there was a rep clause for every field) and we want to be able to encode them. */ - last_pos = size_binop (PLUS_EXPR, bit_position (old_field), + last_pos = size_binop (PLUS_EXPR, curpos, (TREE_CODE (TREE_TYPE (old_field)) == QUAL_UNION_TYPE) ? bitsize_zero_node @@ -2181,6 +2178,23 @@ return new_size; } +/* Return the bit position of FIELD, in bits from the start of the record, + and fold it as much as possible. This is a tree of type bitsizetype. */ + +static tree +fold_bit_position (const_tree field) +{ + tree offset = DECL_FIELD_OFFSET (field); + if (TREE_CODE (offset) == MULT_EXPR || TREE_CODE (offset) == PLUS_EXPR) + offset = size_binop (TREE_CODE (offset), + fold_convert (bitsizetype, TREE_OPERAND (offset, 0)), + fold_convert (bitsizetype, TREE_OPERAND (offset, 1))); + else + offset = fold_convert (bitsizetype, offset); + return size_binop (PLUS_EXPR, DECL_FIELD_BIT_OFFSET (field), + size_binop (MULT_EXPR, offset, bitsize_unit_node)); +} + /* Utility function of above to see if OP0 and OP1, both of SIZETYPE, are related by the addition of a constant. Return that constant if so. */ @@ -2187,17 +2201,28 @@ static tree compute_related_constant (tree op0, tree op1) { - tree op0_var, op1_var; - tree op0_con = split_plus (op0, &op0_var); - tree op1_con = split_plus (op1, &op1_var); - tree result = size_binop (MINUS_EXPR, op0_con, op1_con); + tree factor, op0_var, op1_var, op0_cst, op1_cst, result; + if (TREE_CODE (op0) == MULT_EXPR + && TREE_CODE (op1) == MULT_EXPR + && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST + && TREE_OPERAND (op1, 1) == TREE_OPERAND (op0, 1)) + { + factor = TREE_OPERAND (op0, 1); + op0 = TREE_OPERAND (op0, 0); + op1 = TREE_OPERAND (op1, 0); + } + else + factor = NULL_TREE; + + op0_cst = split_plus (op0, &op0_var); + op1_cst = split_plus (op1, &op1_var); + result = size_binop (MINUS_EXPR, op0_cst, op1_cst); + if (operand_equal_p (op0_var, op1_var, 0)) - return result; - else if (operand_equal_p (op0, size_binop (PLUS_EXPR, op1_var, result), 0)) - return result; - else - return 0; + return factor ? size_binop (MULT_EXPR, factor, result) : result; + + return NULL_TREE; } /* Utility function of above to split a tree OP which may be a sum, into a Index: gcc/ada/gcc-interface/Makefile.in =================================================================== --- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-6-branch) @@ -1475,6 +1475,34 @@ LIBRARY_VERSION := $(LIB_VERSION) endif +# aarch64 FreeBSD +ifeq ($(strip $(filter-out %aarch64 freebsd%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads DECL_ALIGN (ret_obj)) return false; + /* For the unconstrained case, test for bogus initialization. */ + if (!ret_obj + && DECL_INITIAL (ret_val) + && TREE_CODE (DECL_INITIAL (ret_val)) == NULL_EXPR) + return false; + return true; } @@ -7696,7 +7703,6 @@ && (kind == N_Identifier || kind == N_Expanded_Name || kind == N_Explicit_Dereference - || kind == N_Function_Call || kind == N_Indexed_Component || kind == N_Selected_Component) && TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE Index: gcc/asan.c =================================================================== --- a/src/gcc/asan.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/asan.c (.../branches/gcc-6-branch) @@ -587,7 +587,7 @@ case BUILT_IN_STRLEN: source0 = gimple_call_arg (call, 0); len = gimple_call_lhs (call); - break ; + break; /* And now the __atomic* and __sync builtins. These are handled differently from the classical memory memory @@ -594,196 +594,190 @@ access builtins above. */ case BUILT_IN_ATOMIC_LOAD_1: + is_store = false; + /* FALLTHRU */ + case BUILT_IN_SYNC_FETCH_AND_ADD_1: + case BUILT_IN_SYNC_FETCH_AND_SUB_1: + case BUILT_IN_SYNC_FETCH_AND_OR_1: + case BUILT_IN_SYNC_FETCH_AND_AND_1: + case BUILT_IN_SYNC_FETCH_AND_XOR_1: + case BUILT_IN_SYNC_FETCH_AND_NAND_1: + case BUILT_IN_SYNC_ADD_AND_FETCH_1: + case BUILT_IN_SYNC_SUB_AND_FETCH_1: + case BUILT_IN_SYNC_OR_AND_FETCH_1: + case BUILT_IN_SYNC_AND_AND_FETCH_1: + case BUILT_IN_SYNC_XOR_AND_FETCH_1: + case BUILT_IN_SYNC_NAND_AND_FETCH_1: + case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1: + case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1: + case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1: + case BUILT_IN_SYNC_LOCK_RELEASE_1: + case BUILT_IN_ATOMIC_EXCHANGE_1: + case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1: + case BUILT_IN_ATOMIC_STORE_1: + case BUILT_IN_ATOMIC_ADD_FETCH_1: + case BUILT_IN_ATOMIC_SUB_FETCH_1: + case BUILT_IN_ATOMIC_AND_FETCH_1: + case BUILT_IN_ATOMIC_NAND_FETCH_1: + case BUILT_IN_ATOMIC_XOR_FETCH_1: + case BUILT_IN_ATOMIC_OR_FETCH_1: + case BUILT_IN_ATOMIC_FETCH_ADD_1: + case BUILT_IN_ATOMIC_FETCH_SUB_1: + case BUILT_IN_ATOMIC_FETCH_AND_1: + case BUILT_IN_ATOMIC_FETCH_NAND_1: + case BUILT_IN_ATOMIC_FETCH_XOR_1: + case BUILT_IN_ATOMIC_FETCH_OR_1: + access_size = 1; + goto do_atomic; + case BUILT_IN_ATOMIC_LOAD_2: + is_store = false; + /* FALLTHRU */ + case BUILT_IN_SYNC_FETCH_AND_ADD_2: + case BUILT_IN_SYNC_FETCH_AND_SUB_2: + case BUILT_IN_SYNC_FETCH_AND_OR_2: + case BUILT_IN_SYNC_FETCH_AND_AND_2: + case BUILT_IN_SYNC_FETCH_AND_XOR_2: + case BUILT_IN_SYNC_FETCH_AND_NAND_2: + case BUILT_IN_SYNC_ADD_AND_FETCH_2: + case BUILT_IN_SYNC_SUB_AND_FETCH_2: + case BUILT_IN_SYNC_OR_AND_FETCH_2: + case BUILT_IN_SYNC_AND_AND_FETCH_2: + case BUILT_IN_SYNC_XOR_AND_FETCH_2: + case BUILT_IN_SYNC_NAND_AND_FETCH_2: + case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2: + case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2: + case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2: + case BUILT_IN_SYNC_LOCK_RELEASE_2: + case BUILT_IN_ATOMIC_EXCHANGE_2: + case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2: + case BUILT_IN_ATOMIC_STORE_2: + case BUILT_IN_ATOMIC_ADD_FETCH_2: + case BUILT_IN_ATOMIC_SUB_FETCH_2: + case BUILT_IN_ATOMIC_AND_FETCH_2: + case BUILT_IN_ATOMIC_NAND_FETCH_2: + case BUILT_IN_ATOMIC_XOR_FETCH_2: + case BUILT_IN_ATOMIC_OR_FETCH_2: + case BUILT_IN_ATOMIC_FETCH_ADD_2: + case BUILT_IN_ATOMIC_FETCH_SUB_2: + case BUILT_IN_ATOMIC_FETCH_AND_2: + case BUILT_IN_ATOMIC_FETCH_NAND_2: + case BUILT_IN_ATOMIC_FETCH_XOR_2: + case BUILT_IN_ATOMIC_FETCH_OR_2: + access_size = 2; + goto do_atomic; + case BUILT_IN_ATOMIC_LOAD_4: + is_store = false; + /* FALLTHRU */ + case BUILT_IN_SYNC_FETCH_AND_ADD_4: + case BUILT_IN_SYNC_FETCH_AND_SUB_4: + case BUILT_IN_SYNC_FETCH_AND_OR_4: + case BUILT_IN_SYNC_FETCH_AND_AND_4: + case BUILT_IN_SYNC_FETCH_AND_XOR_4: + case BUILT_IN_SYNC_FETCH_AND_NAND_4: + case BUILT_IN_SYNC_ADD_AND_FETCH_4: + case BUILT_IN_SYNC_SUB_AND_FETCH_4: + case BUILT_IN_SYNC_OR_AND_FETCH_4: + case BUILT_IN_SYNC_AND_AND_FETCH_4: + case BUILT_IN_SYNC_XOR_AND_FETCH_4: + case BUILT_IN_SYNC_NAND_AND_FETCH_4: + case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4: + case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4: + case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4: + case BUILT_IN_SYNC_LOCK_RELEASE_4: + case BUILT_IN_ATOMIC_EXCHANGE_4: + case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4: + case BUILT_IN_ATOMIC_STORE_4: + case BUILT_IN_ATOMIC_ADD_FETCH_4: + case BUILT_IN_ATOMIC_SUB_FETCH_4: + case BUILT_IN_ATOMIC_AND_FETCH_4: + case BUILT_IN_ATOMIC_NAND_FETCH_4: + case BUILT_IN_ATOMIC_XOR_FETCH_4: + case BUILT_IN_ATOMIC_OR_FETCH_4: + case BUILT_IN_ATOMIC_FETCH_ADD_4: + case BUILT_IN_ATOMIC_FETCH_SUB_4: + case BUILT_IN_ATOMIC_FETCH_AND_4: + case BUILT_IN_ATOMIC_FETCH_NAND_4: + case BUILT_IN_ATOMIC_FETCH_XOR_4: + case BUILT_IN_ATOMIC_FETCH_OR_4: + access_size = 4; + goto do_atomic; + case BUILT_IN_ATOMIC_LOAD_8: - case BUILT_IN_ATOMIC_LOAD_16: is_store = false; - /* fall through. */ - - case BUILT_IN_SYNC_FETCH_AND_ADD_1: - case BUILT_IN_SYNC_FETCH_AND_ADD_2: - case BUILT_IN_SYNC_FETCH_AND_ADD_4: + /* FALLTHRU */ case BUILT_IN_SYNC_FETCH_AND_ADD_8: - case BUILT_IN_SYNC_FETCH_AND_ADD_16: - - case BUILT_IN_SYNC_FETCH_AND_SUB_1: - case BUILT_IN_SYNC_FETCH_AND_SUB_2: - case BUILT_IN_SYNC_FETCH_AND_SUB_4: case BUILT_IN_SYNC_FETCH_AND_SUB_8: - case BUILT_IN_SYNC_FETCH_AND_SUB_16: - - case BUILT_IN_SYNC_FETCH_AND_OR_1: - case BUILT_IN_SYNC_FETCH_AND_OR_2: - case BUILT_IN_SYNC_FETCH_AND_OR_4: case BUILT_IN_SYNC_FETCH_AND_OR_8: - case BUILT_IN_SYNC_FETCH_AND_OR_16: - - case BUILT_IN_SYNC_FETCH_AND_AND_1: - case BUILT_IN_SYNC_FETCH_AND_AND_2: - case BUILT_IN_SYNC_FETCH_AND_AND_4: case BUILT_IN_SYNC_FETCH_AND_AND_8: - case BUILT_IN_SYNC_FETCH_AND_AND_16: - - case BUILT_IN_SYNC_FETCH_AND_XOR_1: - case BUILT_IN_SYNC_FETCH_AND_XOR_2: - case BUILT_IN_SYNC_FETCH_AND_XOR_4: case BUILT_IN_SYNC_FETCH_AND_XOR_8: - case BUILT_IN_SYNC_FETCH_AND_XOR_16: - - case BUILT_IN_SYNC_FETCH_AND_NAND_1: - case BUILT_IN_SYNC_FETCH_AND_NAND_2: - case BUILT_IN_SYNC_FETCH_AND_NAND_4: case BUILT_IN_SYNC_FETCH_AND_NAND_8: - - case BUILT_IN_SYNC_ADD_AND_FETCH_1: - case BUILT_IN_SYNC_ADD_AND_FETCH_2: - case BUILT_IN_SYNC_ADD_AND_FETCH_4: case BUILT_IN_SYNC_ADD_AND_FETCH_8: - case BUILT_IN_SYNC_ADD_AND_FETCH_16: - - case BUILT_IN_SYNC_SUB_AND_FETCH_1: - case BUILT_IN_SYNC_SUB_AND_FETCH_2: - case BUILT_IN_SYNC_SUB_AND_FETCH_4: case BUILT_IN_SYNC_SUB_AND_FETCH_8: - case BUILT_IN_SYNC_SUB_AND_FETCH_16: - - case BUILT_IN_SYNC_OR_AND_FETCH_1: - case BUILT_IN_SYNC_OR_AND_FETCH_2: - case BUILT_IN_SYNC_OR_AND_FETCH_4: case BUILT_IN_SYNC_OR_AND_FETCH_8: - case BUILT_IN_SYNC_OR_AND_FETCH_16: - - case BUILT_IN_SYNC_AND_AND_FETCH_1: - case BUILT_IN_SYNC_AND_AND_FETCH_2: - case BUILT_IN_SYNC_AND_AND_FETCH_4: case BUILT_IN_SYNC_AND_AND_FETCH_8: - case BUILT_IN_SYNC_AND_AND_FETCH_16: - - case BUILT_IN_SYNC_XOR_AND_FETCH_1: - case BUILT_IN_SYNC_XOR_AND_FETCH_2: - case BUILT_IN_SYNC_XOR_AND_FETCH_4: case BUILT_IN_SYNC_XOR_AND_FETCH_8: - case BUILT_IN_SYNC_XOR_AND_FETCH_16: - - case BUILT_IN_SYNC_NAND_AND_FETCH_1: - case BUILT_IN_SYNC_NAND_AND_FETCH_2: - case BUILT_IN_SYNC_NAND_AND_FETCH_4: case BUILT_IN_SYNC_NAND_AND_FETCH_8: + case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8: + case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8: + case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8: + case BUILT_IN_SYNC_LOCK_RELEASE_8: + case BUILT_IN_ATOMIC_EXCHANGE_8: + case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8: + case BUILT_IN_ATOMIC_STORE_8: + case BUILT_IN_ATOMIC_ADD_FETCH_8: + case BUILT_IN_ATOMIC_SUB_FETCH_8: + case BUILT_IN_ATOMIC_AND_FETCH_8: + case BUILT_IN_ATOMIC_NAND_FETCH_8: + case BUILT_IN_ATOMIC_XOR_FETCH_8: + case BUILT_IN_ATOMIC_OR_FETCH_8: + case BUILT_IN_ATOMIC_FETCH_ADD_8: + case BUILT_IN_ATOMIC_FETCH_SUB_8: + case BUILT_IN_ATOMIC_FETCH_AND_8: + case BUILT_IN_ATOMIC_FETCH_NAND_8: + case BUILT_IN_ATOMIC_FETCH_XOR_8: + case BUILT_IN_ATOMIC_FETCH_OR_8: + access_size = 8; + goto do_atomic; - case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1: - case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2: - case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4: - case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8: + case BUILT_IN_ATOMIC_LOAD_16: + is_store = false; + /* FALLTHRU */ + case BUILT_IN_SYNC_FETCH_AND_ADD_16: + case BUILT_IN_SYNC_FETCH_AND_SUB_16: + case BUILT_IN_SYNC_FETCH_AND_OR_16: + case BUILT_IN_SYNC_FETCH_AND_AND_16: + case BUILT_IN_SYNC_FETCH_AND_XOR_16: + case BUILT_IN_SYNC_FETCH_AND_NAND_16: + case BUILT_IN_SYNC_ADD_AND_FETCH_16: + case BUILT_IN_SYNC_SUB_AND_FETCH_16: + case BUILT_IN_SYNC_OR_AND_FETCH_16: + case BUILT_IN_SYNC_AND_AND_FETCH_16: + case BUILT_IN_SYNC_XOR_AND_FETCH_16: + case BUILT_IN_SYNC_NAND_AND_FETCH_16: case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16: - - case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1: - case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2: - case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4: - case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8: case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16: - - case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1: - case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2: - case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4: - case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8: case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16: - - case BUILT_IN_SYNC_LOCK_RELEASE_1: - case BUILT_IN_SYNC_LOCK_RELEASE_2: - case BUILT_IN_SYNC_LOCK_RELEASE_4: - case BUILT_IN_SYNC_LOCK_RELEASE_8: case BUILT_IN_SYNC_LOCK_RELEASE_16: - - case BUILT_IN_ATOMIC_EXCHANGE_1: - case BUILT_IN_ATOMIC_EXCHANGE_2: - case BUILT_IN_ATOMIC_EXCHANGE_4: - case BUILT_IN_ATOMIC_EXCHANGE_8: case BUILT_IN_ATOMIC_EXCHANGE_16: - - case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1: - case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2: - case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4: - case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8: case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16: - - case BUILT_IN_ATOMIC_STORE_1: - case BUILT_IN_ATOMIC_STORE_2: - case BUILT_IN_ATOMIC_STORE_4: - case BUILT_IN_ATOMIC_STORE_8: case BUILT_IN_ATOMIC_STORE_16: - - case BUILT_IN_ATOMIC_ADD_FETCH_1: - case BUILT_IN_ATOMIC_ADD_FETCH_2: - case BUILT_IN_ATOMIC_ADD_FETCH_4: - case BUILT_IN_ATOMIC_ADD_FETCH_8: case BUILT_IN_ATOMIC_ADD_FETCH_16: - - case BUILT_IN_ATOMIC_SUB_FETCH_1: - case BUILT_IN_ATOMIC_SUB_FETCH_2: - case BUILT_IN_ATOMIC_SUB_FETCH_4: - case BUILT_IN_ATOMIC_SUB_FETCH_8: case BUILT_IN_ATOMIC_SUB_FETCH_16: - - case BUILT_IN_ATOMIC_AND_FETCH_1: - case BUILT_IN_ATOMIC_AND_FETCH_2: - case BUILT_IN_ATOMIC_AND_FETCH_4: - case BUILT_IN_ATOMIC_AND_FETCH_8: case BUILT_IN_ATOMIC_AND_FETCH_16: - - case BUILT_IN_ATOMIC_NAND_FETCH_1: - case BUILT_IN_ATOMIC_NAND_FETCH_2: - case BUILT_IN_ATOMIC_NAND_FETCH_4: - case BUILT_IN_ATOMIC_NAND_FETCH_8: case BUILT_IN_ATOMIC_NAND_FETCH_16: - - case BUILT_IN_ATOMIC_XOR_FETCH_1: - case BUILT_IN_ATOMIC_XOR_FETCH_2: - case BUILT_IN_ATOMIC_XOR_FETCH_4: - case BUILT_IN_ATOMIC_XOR_FETCH_8: case BUILT_IN_ATOMIC_XOR_FETCH_16: - - case BUILT_IN_ATOMIC_OR_FETCH_1: - case BUILT_IN_ATOMIC_OR_FETCH_2: - case BUILT_IN_ATOMIC_OR_FETCH_4: - case BUILT_IN_ATOMIC_OR_FETCH_8: case BUILT_IN_ATOMIC_OR_FETCH_16: - - case BUILT_IN_ATOMIC_FETCH_ADD_1: - case BUILT_IN_ATOMIC_FETCH_ADD_2: - case BUILT_IN_ATOMIC_FETCH_ADD_4: - case BUILT_IN_ATOMIC_FETCH_ADD_8: case BUILT_IN_ATOMIC_FETCH_ADD_16: - - case BUILT_IN_ATOMIC_FETCH_SUB_1: - case BUILT_IN_ATOMIC_FETCH_SUB_2: - case BUILT_IN_ATOMIC_FETCH_SUB_4: - case BUILT_IN_ATOMIC_FETCH_SUB_8: case BUILT_IN_ATOMIC_FETCH_SUB_16: - - case BUILT_IN_ATOMIC_FETCH_AND_1: - case BUILT_IN_ATOMIC_FETCH_AND_2: - case BUILT_IN_ATOMIC_FETCH_AND_4: - case BUILT_IN_ATOMIC_FETCH_AND_8: case BUILT_IN_ATOMIC_FETCH_AND_16: - - case BUILT_IN_ATOMIC_FETCH_NAND_1: - case BUILT_IN_ATOMIC_FETCH_NAND_2: - case BUILT_IN_ATOMIC_FETCH_NAND_4: - case BUILT_IN_ATOMIC_FETCH_NAND_8: case BUILT_IN_ATOMIC_FETCH_NAND_16: - - case BUILT_IN_ATOMIC_FETCH_XOR_1: - case BUILT_IN_ATOMIC_FETCH_XOR_2: - case BUILT_IN_ATOMIC_FETCH_XOR_4: - case BUILT_IN_ATOMIC_FETCH_XOR_8: case BUILT_IN_ATOMIC_FETCH_XOR_16: - - case BUILT_IN_ATOMIC_FETCH_OR_1: - case BUILT_IN_ATOMIC_FETCH_OR_2: - case BUILT_IN_ATOMIC_FETCH_OR_4: - case BUILT_IN_ATOMIC_FETCH_OR_8: case BUILT_IN_ATOMIC_FETCH_OR_16: + access_size = 16; + /* FALLTHRU */ + do_atomic: { dest = gimple_call_arg (call, 0); /* DEST represents the address of a memory location. @@ -790,15 +784,11 @@ instrument_derefs wants the memory location, so lets dereference the address DEST before handing it to instrument_derefs. */ - if (TREE_CODE (dest) == ADDR_EXPR) - dest = TREE_OPERAND (dest, 0); - else if (TREE_CODE (dest) == SSA_NAME || TREE_CODE (dest) == INTEGER_CST) - dest = build2 (MEM_REF, TREE_TYPE (TREE_TYPE (dest)), - dest, build_int_cst (TREE_TYPE (dest), 0)); - else - gcc_unreachable (); - - access_size = int_size_in_bytes (TREE_TYPE (dest)); + tree type = build_nonstandard_integer_type (access_size + * BITS_PER_UNIT, 1); + dest = build2 (MEM_REF, type, dest, + build_int_cst (build_pointer_type (char_type_node), 0)); + break; } default: @@ -1801,7 +1791,8 @@ tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)); instrument_derefs (iter, build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (t, 0), repr, - NULL_TREE), location, is_store); + TREE_OPERAND (t, 2)), + location, is_store); return; } @@ -2275,7 +2266,11 @@ CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, fold_convert (const_ptr_type_node, module_name_cst)); varpool_node *vnode = varpool_node::get (decl); - int has_dynamic_init = vnode ? vnode->dynamically_initialized : 0; + int has_dynamic_init = 0; + /* FIXME: Enable initialization order fiasco detection in LTO mode once + proper fix for PR 79061 will be applied. */ + if (!in_lto_p) + has_dynamic_init = vnode ? vnode->dynamically_initialized : 0; CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, has_dynamic_init)); tree locptr = NULL_TREE; Index: gcc/lra-remat.c =================================================================== --- a/src/gcc/lra-remat.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/lra-remat.c (.../branches/gcc-6-branch) @@ -1116,6 +1116,7 @@ static bool do_remat (void) { + unsigned regno; rtx_insn *insn; basic_block bb; bitmap_head avail_cands; @@ -1123,12 +1124,21 @@ bool changed_p = false; /* Living hard regs and hard registers of living pseudos. */ HARD_REG_SET live_hard_regs; + bitmap_iterator bi; bitmap_initialize (&avail_cands, ®_obstack); bitmap_initialize (&active_cands, ®_obstack); FOR_EACH_BB_FN (bb, cfun) { - REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (bb)); + CLEAR_HARD_REG_SET (live_hard_regs); + EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), 0, regno, bi) + { + int hard_regno = regno < FIRST_PSEUDO_REGISTER + ? regno + : reg_renumber[regno]; + if (hard_regno >= 0) + SET_HARD_REG_BIT (live_hard_regs, hard_regno); + } bitmap_and (&avail_cands, &get_remat_bb_data (bb)->avin_cands, &get_remat_bb_data (bb)->livein_cands); /* Activating insns are always in the same block as their corresponding Index: gcc/tree-eh.c =================================================================== --- a/src/gcc/tree-eh.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-eh.c (.../branches/gcc-6-branch) @@ -2513,7 +2513,8 @@ if (TREE_CODE_CLASS (op) != tcc_comparison && TREE_CODE_CLASS (op) != tcc_unary - && TREE_CODE_CLASS (op) != tcc_binary) + && TREE_CODE_CLASS (op) != tcc_binary + && op != FMA_EXPR) return false; return operation_could_trap_helper_p (op, fp_operation, honor_trapv, @@ -2725,9 +2726,9 @@ an assignment or a conditional) may throw. */ static bool -stmt_could_throw_1_p (gimple *stmt) +stmt_could_throw_1_p (gassign *stmt) { - enum tree_code code = gimple_expr_code (stmt); + enum tree_code code = gimple_assign_rhs_code (stmt); bool honor_nans = false; bool honor_snans = false; bool fp_operation = false; @@ -2738,13 +2739,11 @@ if (TREE_CODE_CLASS (code) == tcc_comparison || TREE_CODE_CLASS (code) == tcc_unary - || TREE_CODE_CLASS (code) == tcc_binary) + || TREE_CODE_CLASS (code) == tcc_binary + || code == FMA_EXPR) { - if (is_gimple_assign (stmt) - && TREE_CODE_CLASS (code) == tcc_comparison) + if (TREE_CODE_CLASS (code) == tcc_comparison) t = TREE_TYPE (gimple_assign_rhs1 (stmt)); - else if (gimple_code (stmt) == GIMPLE_COND) - t = TREE_TYPE (gimple_cond_lhs (stmt)); else t = gimple_expr_type (stmt); fp_operation = FLOAT_TYPE_P (t); @@ -2757,10 +2756,14 @@ honor_trapv = true; } + /* First check the LHS. */ + if (tree_could_trap_p (gimple_assign_lhs (stmt))) + return true; + /* Check if the main expression may trap. */ - t = is_gimple_assign (stmt) ? gimple_assign_rhs2 (stmt) : NULL; ret = operation_could_trap_helper_p (code, fp_operation, honor_trapv, - honor_nans, honor_snans, t, + honor_nans, honor_snans, + gimple_assign_rhs2 (stmt), &handled); if (handled) return ret; @@ -2767,7 +2770,7 @@ /* If the expression does not trap, see if any of the individual operands may trap. */ - for (i = 0; i < gimple_num_ops (stmt); i++) + for (i = 1; i < gimple_num_ops (stmt); i++) if (tree_could_trap_p (gimple_op (stmt, i))) return true; @@ -2793,11 +2796,22 @@ case GIMPLE_CALL: return !gimple_call_nothrow_p (as_a (stmt)); + case GIMPLE_COND: + { + if (!cfun->can_throw_non_call_exceptions) + return false; + gcond *cond = as_a (stmt); + tree lhs = gimple_cond_lhs (cond); + return operation_could_trap_p (gimple_cond_code (cond), + FLOAT_TYPE_P (TREE_TYPE (lhs)), + false, NULL_TREE); + } + case GIMPLE_ASSIGN: - case GIMPLE_COND: - if (!cfun->can_throw_non_call_exceptions) + if (!cfun->can_throw_non_call_exceptions + || gimple_clobber_p (stmt)) return false; - return stmt_could_throw_1_p (stmt); + return stmt_could_throw_1_p (as_a (stmt)); case GIMPLE_ASM: if (!cfun->can_throw_non_call_exceptions) Index: gcc/fortran/openmp.c =================================================================== --- a/src/gcc/fortran/openmp.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/openmp.c (.../branches/gcc-6-branch) @@ -3530,6 +3530,11 @@ else resolve_oacc_data_clauses (n->sym, n->where, name); } + else if (list != OMP_CLAUSE_DEPEND + && n->sym->as + && n->sym->as->type == AS_ASSUMED_SIZE) + gfc_error ("Assumed size array %qs in %s clause at %L", + n->sym->name, name, &n->where); } if (list != OMP_LIST_DEPEND) Index: gcc/fortran/trans-expr.c =================================================================== --- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-6-branch) @@ -1898,8 +1898,11 @@ &expr->where); } - caf_decl = expr->symtree->n.sym->backend_decl; - gcc_assert (caf_decl); + /* Make sure the backend_decl is present before accessing it. */ + caf_decl = expr->symtree->n.sym->backend_decl == NULL_TREE + ? gfc_get_symbol_decl (expr->symtree->n.sym) + : expr->symtree->n.sym->backend_decl; + if (expr->symtree->n.sym->ts.type == BT_CLASS) caf_decl = gfc_class_data_get (caf_decl); if (expr->symtree->n.sym->attr.codimension) Index: gcc/fortran/symbol.c =================================================================== --- a/src/gcc/fortran/symbol.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/symbol.c (.../branches/gcc-6-branch) @@ -464,8 +464,13 @@ } } - if (attr->dummy && ((attr->function || attr->subroutine) && - gfc_current_state () == COMP_CONTAINS)) + /* The copying of procedure dummy arguments for module procedures in + a submodule occur whilst the current state is COMP_CONTAINS. It + is necessary, therefore, to let this through. */ + if (attr->dummy + && (attr->function || attr->subroutine) + && gfc_current_state () == COMP_CONTAINS + && !(gfc_new_block && gfc_new_block->abr_modproc_decl)) gfc_error_now ("internal procedure %qs at %L conflicts with " "DUMMY argument", name, where); @@ -1587,6 +1592,13 @@ if (attr->flavor == f && f == FL_VARIABLE) return true; + /* Copying a procedure dummy argument for a module procedure in a + submodule results in the flavor being copied and would result in + an error without this. */ + if (gfc_new_block && gfc_new_block->abr_modproc_decl + && attr->flavor == f && f == FL_PROCEDURE) + return true; + if (attr->flavor != FL_UNKNOWN) { if (where == NULL) Index: gcc/fortran/class.c =================================================================== --- a/src/gcc/fortran/class.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/class.c (.../branches/gcc-6-branch) @@ -1599,6 +1599,7 @@ final->attr.flavor = FL_PROCEDURE; final->attr.function = 1; final->attr.pure = 0; + final->attr.recursive = 1; final->result = final; final->ts.type = BT_INTEGER; final->ts.kind = 4; Index: gcc/fortran/decl.c =================================================================== --- a/src/gcc/fortran/decl.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/decl.c (.../branches/gcc-6-branch) @@ -922,7 +922,8 @@ if (!t && e->ts.type == BT_UNKNOWN && e->symtree->n.sym->attr.untyped == 1 - && (e->symtree->n.sym->ns->seen_implicit_none == 1 + && (flag_implicit_none + || e->symtree->n.sym->ns->seen_implicit_none == 1 || e->symtree->n.sym->ns->parent->seen_implicit_none == 1)) { gfc_free_expr (e); Index: gcc/fortran/trans-openmp.c =================================================================== --- a/src/gcc/fortran/trans-openmp.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/trans-openmp.c (.../branches/gcc-6-branch) @@ -37,6 +37,11 @@ #include "arith.h" #include "omp-low.h" #include "gomp-constants.h" +#undef GCC_DIAG_STYLE +#define GCC_DIAG_STYLE __gcc_tdiag__ +#include "diagnostic-core.h" +#undef GCC_DIAG_STYLE +#define GCC_DIAG_STYLE __gcc_gfc__ int ompws_flags; @@ -1028,6 +1033,21 @@ return; tree decl = OMP_CLAUSE_DECL (c); + + /* Assumed-size arrays can't be mapped implicitly, they have to be + mapped explicitly using array sections. */ + if (TREE_CODE (decl) == PARM_DECL + && GFC_ARRAY_TYPE_P (TREE_TYPE (decl)) + && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_UNKNOWN + && GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl), + GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1) + == NULL) + { + error_at (OMP_CLAUSE_LOCATION (c), + "implicit mapping of assumed size array %qD", decl); + return; + } + tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE; if (POINTER_TYPE_P (TREE_TYPE (decl))) { Index: gcc/fortran/ChangeLog =================================================================== --- a/src/gcc/fortran/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,111 @@ +2017-05-01 Janus Weil + + Backport from trunk + PR fortran/80392 + * trans-types.c (gfc_get_derived_type): Prevent an infinite loop when + building a derived type that includes a procedure pointer component + with a polymorphic result. + +2017-04-21 Janus Weil + + Backport from trunk + PR fortran/80361 + * class.c (generate_finalization_wrapper): Give the finalization wrapper + the recursive attribute. + +2017-04-01 Paul Thomas + + Backport from trunk + PR fortran/71838 + * symbol.c (check_conflict): A dummy procedure in a submodule, + module procedure is not an error. + (gfc_add_flavor): Ditto. + +2017-04-01 Paul Thomas + + Backport from trunk + PR fortran/79676 + * module.c (mio_symbol_attribute): Remove reset of the flag + 'no_module_procedures'. + (check_for_module_procedures): New function. Move declaration + of 'no_module_procedures' to above it. + (gfc_dump_module): Traverse namespace calling new function. + +2017-03-26 Paul Thomas + + Backport from trunk + PR fortran/79434 + * parse.c (check_component, parse_union): Whitespace. + (set_syms_host_assoc): For a derived type, check if the module + in which it was declared is one of the submodule ancestors. If + it is, make the components public. Otherwise, reset attribute + 'host_assoc' and set 'use-assoc' so that encapsulation is + preserved. + +2017-03-14 Richard Biener + + Backport from mainline + 2017-03-06 Richard Biener + + PR fortran/79894 + * trans.c (gfc_add_modify_loc): Weaken assert. + +2017-02-25 Paul Thomas + + PR fortran/78474 + * module.c (gfc_match_submodule): If there is more than one + colon, it is a syntax error. + + PR fortran/78331 + * module.c (gfc_use_module): If an smod file does not exist it + is either because the module does not have a module procedure + interface or there is an error in the module. + +2017-02-07 Steven G. Kargl + + * trans-types.c (gfc_get_int_kind_from_width_isofortranen): Choose + REAL type with the widest precision if two (or more) have the same + storage size. + +2017-01-29 Andre Vehreschild + + Backported from trunk + 2017-01-13 Andre Vehreschild + + PR fortran/70697 + * resolve.c (resolve_lock_unlock_event): Resolve the expression for + event's until_count. + +2017-01-29 Andre Vehreschild + + Backport from trunk + PR fortran/70696 + * trans-expr.c (gfc_get_tree_for_caf_expr): Ensure the backend_decl + is valid before accessing it. Remove unnecessary assert. + * trans-decl.c (gfc_build_qualified_array): Add static tokens to the + parent function's scope only, when the decl-context is not the + translation unit. + +2017-01-17 Jakub Jelinek + + Backported from mainline + 2016-12-21 Jakub Jelinek + + PR fortran/78866 + * openmp.c (resolve_omp_clauses): Diagnose assumed size arrays in + OpenMP map, to and from clauses. + * trans-openmp.c: Include diagnostic-core.h, temporarily redefining + GCC_DIAG_STYLE to __gcc_tdiag__. + (gfc_omp_finish_clause): Diagnose implicitly mapped assumed size + arrays. + +2016-12-22 Thomas Koenig + + Backport from trunk + PR fortran/78239 + * decl.c (char_len_param_value): Also check for -fimplicit-none + when determining if implicit none is in force. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/fortran/module.c =================================================================== --- a/src/gcc/fortran/module.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/module.c (.../branches/gcc-6-branch) @@ -193,10 +193,6 @@ /* The name of the .smod file that the submodule will write to. */ static const char *submodule_name; -/* Suppress the output of a .smod file by module, if no module - procedures have been seen. */ -static bool no_module_procedures; - static gfc_use_list *module_list; /* If we're reading an intrinsic module, this is its ID. */ @@ -740,6 +736,7 @@ match m; char name[GFC_MAX_SYMBOL_LEN + 1]; gfc_use_list *use_list; + bool seen_colon = false; if (!gfc_notify_std (GFC_STD_F2008, "SUBMODULE declaration at %C")) return MATCH_ERROR; @@ -772,7 +769,7 @@ } else { - module_list = use_list; + module_list = use_list; use_list->module_name = gfc_get_string (name); use_list->submodule_name = use_list->module_name; } @@ -780,8 +777,11 @@ if (gfc_match_char (')') == MATCH_YES) break; - if (gfc_match_char (':') != MATCH_YES) + if (gfc_match_char (':') != MATCH_YES + || seen_colon) goto syntax; + + seen_colon = true; } m = gfc_match (" %s%t", &gfc_new_block); @@ -2236,10 +2236,7 @@ if (attr->array_outer_dependency) MIO_NAME (ab_attribute) (AB_ARRAY_OUTER_DEPENDENCY, attr_bits); if (attr->module_procedure) - { MIO_NAME (ab_attribute) (AB_MODULE_PROCEDURE, attr_bits); - no_module_procedures = false; - } if (attr->oacc_declare_create) MIO_NAME (ab_attribute) (AB_OACC_DECLARE_CREATE, attr_bits); if (attr->oacc_declare_copyin) @@ -6125,6 +6122,18 @@ } +/* Suppress the output of a .smod file by module, if no module + procedures have been seen. */ +static bool no_module_procedures; + +static void +check_for_module_procedures (gfc_symbol *sym) +{ + if (sym && sym->attr.module_procedure) + no_module_procedures = false; +} + + void gfc_dump_module (const char *name, int dump_flag) { @@ -6134,6 +6143,8 @@ dump_smod =false; no_module_procedures = true; + gfc_traverse_ns (gfc_current_ns, check_for_module_procedures); + dump_module (name, dump_flag); if (no_module_procedures || dump_smod) @@ -6917,8 +6928,17 @@ } if (module_fp == NULL) - gfc_fatal_error ("Can't open module file %qs for reading at %C: %s", - filename, xstrerror (errno)); + { + if (gfc_state_stack->state != COMP_SUBMODULE + && module->submodule_name == NULL) + gfc_fatal_error ("Can't open module file %qs for reading at %C: %s", + filename, xstrerror (errno)); + else + gfc_fatal_error ("Module file %qs has not been generated, either " + "because the module does not contain a MODULE " + "PROCEDURE or there is an error in the module.", + filename); + } /* Check that we haven't already USEd an intrinsic module with the same name. */ Index: gcc/fortran/trans.c =================================================================== --- a/src/gcc/fortran/trans.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/trans.c (.../branches/gcc-6-branch) @@ -151,11 +151,11 @@ tree t1, t2; t1 = TREE_TYPE (rhs); t2 = TREE_TYPE (lhs); - /* Make sure that the types of the rhs and the lhs are the same + /* Make sure that the types of the rhs and the lhs are compatible for scalar assignments. We should probably have something similar for aggregates, but right now removing that check just breaks everything. */ - gcc_checking_assert (t1 == t2 + gcc_checking_assert (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2) || AGGREGATE_TYPE_P (TREE_TYPE (lhs))); tmp = fold_build2_loc (loc, MODIFY_EXPR, void_type_node, lhs, Index: gcc/fortran/trans-types.c =================================================================== --- a/src/gcc/fortran/trans-types.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/trans-types.c (.../branches/gcc-6-branch) @@ -234,27 +234,42 @@ return -1; } -/* Get the kind number corresponding to a real of given storage size, - following the required return values for ISO_FORTRAN_ENV REAL* constants: - -2 is returned if we support a kind of larger size, -1 otherwise. */ + +/* Get the kind number corresponding to a real of a given storage size. + If two real's have the same storage size, then choose the real with + the largest precision. If a kind type is unavailable and a real + exists with wider storage, then return -2; otherwise, return -1. */ + int gfc_get_real_kind_from_width_isofortranenv (int size) { - int i; + int digits, i, kind; size /= 8; + kind = -1; + digits = 0; + /* Look for a kind with matching storage size. */ for (i = 0; gfc_real_kinds[i].kind != 0; i++) if (int_size_in_bytes (gfc_get_real_type (gfc_real_kinds[i].kind)) == size) - return gfc_real_kinds[i].kind; + { + if (gfc_real_kinds[i].digits > digits) + { + digits = gfc_real_kinds[i].digits; + kind = gfc_real_kinds[i].kind; + } + } + if (kind != -1) + return kind; + /* Look for a kind with larger storage size. */ for (i = 0; gfc_real_kinds[i].kind != 0; i++) if (int_size_in_bytes (gfc_get_real_type (gfc_real_kinds[i].kind)) > size) - return -2; + kind = -2; - return -1; + return kind; } @@ -2595,9 +2610,10 @@ the same as derived, by forcing the procedure pointer component to be built as if the explicit interface does not exist. */ if (c->attr.proc_pointer - && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS) - || (c->ts.u.derived - && !gfc_compare_derived_types (derived, c->ts.u.derived)))) + && (c->ts.type != BT_DERIVED || (c->ts.u.derived + && !gfc_compare_derived_types (derived, c->ts.u.derived))) + && (c->ts.type != BT_CLASS || (CLASS_DATA (c)->ts.u.derived + && !gfc_compare_derived_types (derived, CLASS_DATA (c)->ts.u.derived)))) field_type = gfc_get_ppc_type (c); else if (c->attr.proc_pointer && derived->backend_decl) { Index: gcc/fortran/resolve.c =================================================================== --- a/src/gcc/fortran/resolve.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/resolve.c (.../branches/gcc-6-branch) @@ -8840,10 +8840,13 @@ return; /* Check for EVENT WAIT the UNTIL_COUNT. */ - if (code->op == EXEC_EVENT_WAIT && code->expr4 - && (code->expr4->ts.type != BT_INTEGER || code->expr4->rank != 0)) - gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER " - "expression", &code->expr4->where); + if (code->op == EXEC_EVENT_WAIT && code->expr4) + { + if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER + || code->expr4->rank != 0) + gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER " + "expression", &code->expr4->where); + } } Index: gcc/fortran/trans-decl.c =================================================================== --- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-6-branch) @@ -887,6 +887,10 @@ DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl; gfc_module_add_decl (cur_module, token); } + else if (sym->attr.host_assoc + && TREE_CODE (DECL_CONTEXT (current_function_decl)) + != TRANSLATION_UNIT_DECL) + gfc_add_decl_to_parent_function (token); else gfc_add_decl_to_function (token); } Index: gcc/fortran/parse.c =================================================================== --- a/src/gcc/fortran/parse.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/fortran/parse.c (.../branches/gcc-6-branch) @@ -2795,7 +2795,7 @@ coarray = true; sym->attr.coarray_comp = 1; } - + if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp && !c->attr.pointer) { @@ -2959,7 +2959,7 @@ /* Add a component to the union for each map. */ if (!gfc_add_component (un, gfc_new_block->name, &c)) { - gfc_internal_error ("failed to create map component '%s'", + gfc_internal_error ("failed to create map component '%s'", gfc_new_block->name); reject_statement (); return; @@ -5668,6 +5668,9 @@ set_syms_host_assoc (gfc_symbol *sym) { gfc_component *c; + const char dot[2] = "."; + char parent1[GFC_MAX_SYMBOL_LEN + 1]; + char parent2[GFC_MAX_SYMBOL_LEN + 1]; if (sym == NULL) return; @@ -5675,8 +5678,6 @@ if (sym->attr.module_procedure) sym->attr.external = 0; -/* sym->attr.access = ACCESS_PUBLIC; */ - sym->attr.use_assoc = 0; sym->attr.host_assoc = 1; sym->attr.used_in_submodule =1; @@ -5683,8 +5684,26 @@ if (sym->attr.flavor == FL_DERIVED) { - for (c = sym->components; c; c = c->next) - c->attr.access = ACCESS_PUBLIC; + /* Derived types with PRIVATE components that are declared in + modules other than the parent module must not be changed to be + PUBLIC. The 'use-assoc' attribute must be reset so that the + test in symbol.c(gfc_find_component) works correctly. This is + not necessary for PRIVATE symbols since they are not read from + the module. */ + memset(parent1, '\0', sizeof(parent1)); + memset(parent2, '\0', sizeof(parent2)); + strcpy (parent1, gfc_new_block->name); + strcpy (parent2, sym->module); + if (strcmp (strtok (parent1, dot), strtok (parent2, dot)) == 0) + { + for (c = sym->components; c; c = c->next) + c->attr.access = ACCESS_PUBLIC; + } + else + { + sym->attr.use_assoc = 1; + sym->attr.host_assoc = 0; + } } } Index: gcc/ipa-devirt.c =================================================================== --- a/src/gcc/ipa-devirt.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ipa-devirt.c (.../branches/gcc-6-branch) @@ -2462,10 +2462,19 @@ nodes.safe_push (target_node); } } - else if (completep - && (!type_in_anonymous_namespace_p - (DECL_CONTEXT (target)) - || flag_ltrans)) + else if (!completep) + ; + /* We have definition of __cxa_pure_virtual that is not accessible (it is + optimized out or partitioned to other unit) so we can not add it. When + not sanitizing, there is nothing to do. + Otherwise declare the list incomplete. */ + else if (pure_virtual) + { + if (flag_sanitize & SANITIZE_UNREACHABLE) + *completep = false; + } + else if (flag_ltrans + || !type_in_anonymous_namespace_p (DECL_CONTEXT (target))) *completep = false; } Index: gcc/function.c =================================================================== --- a/src/gcc/function.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/function.c (.../branches/gcc-6-branch) @@ -4800,9 +4800,9 @@ /* cfun should never be set directly; use this function. */ void -set_cfun (struct function *new_cfun) +set_cfun (struct function *new_cfun, bool force) { - if (cfun != new_cfun) + if (cfun != new_cfun || force) { cfun = new_cfun; invoke_set_current_function_hook (new_cfun ? new_cfun->decl : NULL_TREE); Index: gcc/function.h =================================================================== --- a/src/gcc/function.h (.../tags/gcc_6_3_0_release) +++ b/src/gcc/function.h (.../branches/gcc-6-branch) @@ -606,7 +606,7 @@ extern void number_blocks (tree); /* cfun shouldn't be set directly; use one of these functions instead. */ -extern void set_cfun (struct function *new_cfun); +extern void set_cfun (struct function *new_cfun, bool force = false); extern void push_cfun (struct function *new_cfun); extern void pop_cfun (void); Index: gcc/gcse.c =================================================================== --- a/src/gcc/gcse.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/gcse.c (.../branches/gcc-6-branch) @@ -279,7 +279,7 @@ to keep register pressure under control. A value of "0" removes restrictions on how far the expression can travel. */ - int max_distance; + HOST_WIDE_INT max_distance; }; /* Occurrence of an expression. @@ -457,7 +457,7 @@ static int oprs_anticipatable_p (const_rtx, const rtx_insn *); static int oprs_available_p (const_rtx, const rtx_insn *); static void insert_expr_in_table (rtx, machine_mode, rtx_insn *, int, int, - int, struct gcse_hash_table_d *); + HOST_WIDE_INT, struct gcse_hash_table_d *); static unsigned int hash_expr (const_rtx, machine_mode, int *, int); static void record_last_reg_set_info (rtx_insn *, int); static void record_last_mem_set_info (rtx_insn *); @@ -487,8 +487,10 @@ static void free_code_hoist_mem (void); static void compute_code_hoist_vbeinout (void); static void compute_code_hoist_data (void); -static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *, basic_block, - sbitmap, int, int *, enum reg_class, +static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *, + basic_block, + sbitmap, HOST_WIDE_INT, int *, + enum reg_class, int *, bitmap, rtx_insn *); static int hoist_code (void); static enum reg_class get_regno_pressure_class (int regno, int *nregs); @@ -742,7 +744,7 @@ GCSE. */ static int -want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr) +want_to_gcse_p (rtx x, machine_mode mode, HOST_WIDE_INT *max_distance_ptr) { #ifdef STACK_REGS /* On register stack architectures, don't GCSE constants from the @@ -789,7 +791,7 @@ /* PRE doesn't implement max_distance restriction. */ { int cost; - int max_distance; + HOST_WIDE_INT max_distance; gcc_assert (!optimize_function_for_speed_p (cfun) && optimize_function_for_size_p (cfun)); @@ -797,7 +799,8 @@ if (cost < COSTS_N_INSNS (GCSE_UNRESTRICTED_COST)) { - max_distance = (GCSE_COST_DISTANCE_RATIO * cost) / 10; + max_distance + = ((HOST_WIDE_INT)GCSE_COST_DISTANCE_RATIO * cost) / 10; if (max_distance == 0) return 0; @@ -1113,7 +1116,8 @@ static void insert_expr_in_table (rtx x, machine_mode mode, rtx_insn *insn, int antic_p, - int avail_p, int max_distance, struct gcse_hash_table_d *table) + int avail_p, HOST_WIDE_INT max_distance, + struct gcse_hash_table_d *table) { int found, do_not_record_p; unsigned int hash; @@ -1229,7 +1233,7 @@ else if (REG_P (dest)) { unsigned int regno = REGNO (dest); - int max_distance = 0; + HOST_WIDE_INT max_distance = 0; /* See if a REG_EQUAL note shows this equivalent to a simpler expression. @@ -1298,7 +1302,7 @@ else if (flag_gcse_las && REG_P (src) && MEM_P (dest)) { unsigned int regno = REGNO (src); - int max_distance = 0; + HOST_WIDE_INT max_distance = 0; /* Only record sets of pseudo-regs in the hash table. */ if (regno >= FIRST_PSEUDO_REGISTER @@ -1410,7 +1414,8 @@ if (flat_table[i] != 0) { expr = flat_table[i]; - fprintf (file, "Index %d (hash value %d; max distance %d)\n ", + fprintf (file, "Index %d (hash value %d; max distance " + HOST_WIDE_INT_PRINT_DEC ")\n ", expr->bitmap_index, hash_val[i], expr->max_distance); print_rtl (file, expr->expr); fprintf (file, "\n"); @@ -2874,7 +2879,8 @@ static int should_hoist_expr_to_dom (basic_block expr_bb, struct gcse_expr *expr, - basic_block bb, sbitmap visited, int distance, + basic_block bb, sbitmap visited, + HOST_WIDE_INT distance, int *bb_size, enum reg_class pressure_class, int *nregs, bitmap hoisted_bbs, rtx_insn *from) { @@ -3151,7 +3157,7 @@ computes the expression. */ FOR_EACH_VEC_ELT (domby, j, dominated) { - int max_distance; + HOST_WIDE_INT max_distance; /* Ignore self dominance. */ if (bb == dominated) Index: gcc/genmatch.c =================================================================== --- a/src/gcc/genmatch.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/genmatch.c (.../branches/gcc-6-branch) @@ -2389,7 +2389,18 @@ } } - fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where); + /* If in GENERIC some capture is used multiple times, unshare it except + when emitting the last use. */ + if (!gimple + && cinfo->info.exists () + && cinfo->info[cinfo->info[where].same_as].result_use_count > 1) + { + fprintf_indent (f, indent, "%s = unshare_expr (captures[%u]);\n", + dest, where); + cinfo->info[cinfo->info[where].same_as].result_use_count--; + } + else + fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where); /* ??? Stupid tcc_comparison GENERIC trees in COND_EXPRs. Deal with substituting a capture of that. */ Index: gcc/alias.c =================================================================== --- a/src/gcc/alias.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/alias.c (.../branches/gcc-6-branch) @@ -2035,6 +2035,18 @@ if (base1 == base2) return 1; + /* If we have two register decls with register specification we + cannot decide unless their assembler name is the same. */ + if (DECL_REGISTER (base1) + && DECL_REGISTER (base2) + && DECL_ASSEMBLER_NAME_SET_P (base1) + && DECL_ASSEMBLER_NAME_SET_P (base2)) + { + if (DECL_ASSEMBLER_NAME (base1) == DECL_ASSEMBLER_NAME (base2)) + return 1; + return -1; + } + /* Declarations of non-automatic variables may have aliases. All other decls are unique. */ if (!decl_in_symtab_p (base1) Index: gcc/tree-data-ref.c =================================================================== --- a/src/gcc/tree-data-ref.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-data-ref.c (.../branches/gcc-6-branch) @@ -2112,8 +2112,6 @@ switch (TREE_CODE (chrec)) { case POLYNOMIAL_CHREC: - gcc_assert (TREE_CODE (CHREC_RIGHT (chrec)) == INTEGER_CST); - A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec)); return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult); Index: gcc/tree-vect-data-refs.c =================================================================== --- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-6-branch) @@ -765,7 +765,7 @@ base = ref; while (handled_component_p (base)) base = TREE_OPERAND (base, 0); - unsigned int base_alignment; + unsigned int base_alignment = 0; unsigned HOST_WIDE_INT base_bitpos; get_object_alignment_1 (base, &base_alignment, &base_bitpos); /* As data-ref analysis strips the MEM_REF down to its base operand @@ -774,8 +774,17 @@ DR_BASE_ADDRESS. */ if (TREE_CODE (base) == MEM_REF) { - base_bitpos -= mem_ref_offset (base).to_short_addr () * BITS_PER_UNIT; - base_bitpos &= (base_alignment - 1); + /* Note all this only works if DR_BASE_ADDRESS is the same as + MEM_REF operand zero, otherwise DR/SCEV analysis might have factored + in other offsets. We need to rework DR to compute the alingment + of DR_BASE_ADDRESS as long as all information is still available. */ + if (operand_equal_p (TREE_OPERAND (base, 0), base_addr, 0)) + { + base_bitpos -= mem_ref_offset (base).to_short_addr () * BITS_PER_UNIT; + base_bitpos &= (base_alignment - 1); + } + else + base_bitpos = BITS_PER_UNIT; } if (base_bitpos != 0) base_alignment = base_bitpos & -base_bitpos; Index: gcc/gimplify.c =================================================================== --- a/src/gcc/gimplify.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/gimplify.c (.../branches/gcc-6-branch) @@ -4362,6 +4362,14 @@ if (ret != GS_ERROR) ret = GS_OK; + /* If we are going to write RESULT more than once, clear + TREE_READONLY flag, otherwise we might incorrectly promote + the variable to static const and initialize it at compile + time in one of the branches. */ + if (VAR_P (result) + && TREE_TYPE (TREE_OPERAND (cond, 1)) != void_type_node + && TREE_TYPE (TREE_OPERAND (cond, 2)) != void_type_node) + TREE_READONLY (result) = 0; if (TREE_TYPE (TREE_OPERAND (cond, 1)) != void_type_node) TREE_OPERAND (cond, 1) = build2 (code, void_type_node, result, @@ -8136,8 +8144,9 @@ if ((ctx->region_type & ORT_TARGET) != 0 && !(n->value & GOVD_SEEN) && GOMP_MAP_ALWAYS_P (OMP_CLAUSE_MAP_KIND (c)) == 0 - && !lookup_attribute ("omp declare target link", - DECL_ATTRIBUTES (decl))) + && (!is_global_var (decl) + || !lookup_attribute ("omp declare target link", + DECL_ATTRIBUTES (decl)))) { remove = true; /* For struct element mapping, if struct is never referenced @@ -9434,8 +9443,9 @@ gimple_omp_for_set_combined_into_p (gfor, true); for (i = 0; i < (int) gimple_omp_for_collapse (gfor); i++) { - t = unshare_expr (gimple_omp_for_index (gfor, i)); - gimple_omp_for_set_index (gforo, i, t); + tree type = TREE_TYPE (gimple_omp_for_index (gfor, i)); + tree v = create_tmp_var (type); + gimple_omp_for_set_index (gforo, i, v); t = unshare_expr (gimple_omp_for_initial (gfor, i)); gimple_omp_for_set_initial (gforo, i, t); gimple_omp_for_set_cond (gforo, i, @@ -9443,7 +9453,13 @@ t = unshare_expr (gimple_omp_for_final (gfor, i)); gimple_omp_for_set_final (gforo, i, t); t = unshare_expr (gimple_omp_for_incr (gfor, i)); + gcc_assert (TREE_OPERAND (t, 0) == gimple_omp_for_index (gfor, i)); + TREE_OPERAND (t, 0) = v; gimple_omp_for_set_incr (gforo, i, t); + t = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE); + OMP_CLAUSE_DECL (t) = v; + OMP_CLAUSE_CHAIN (t) = gimple_omp_for_clauses (gforo); + gimple_omp_for_set_clauses (gforo, t); } gimplify_seq_add_stmt (pre_p, gforo); } @@ -11156,8 +11172,11 @@ if (fallback == fb_none && *expr_p && !is_gimple_stmt (*expr_p)) { /* We aren't looking for a value, and we don't have a valid - statement. If it doesn't have side-effects, throw it away. */ - if (!TREE_SIDE_EFFECTS (*expr_p)) + statement. If it doesn't have side-effects, throw it away. + We can also get here with code such as "*&&L;", where L is + a LABEL_DECL that is marked as FORCED_LABEL. */ + if (TREE_CODE (*expr_p) == LABEL_DECL + || !TREE_SIDE_EFFECTS (*expr_p)) *expr_p = NULL; else if (!TREE_THIS_VOLATILE (*expr_p)) { Index: gcc/graphite-scop-detection.c =================================================================== --- a/src/gcc/graphite-scop-detection.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/graphite-scop-detection.c (.../branches/gcc-6-branch) @@ -817,6 +817,25 @@ != loop_depth (exit->dest->loop_father)) return invalid_sese; + /* For now we just bail out when there is a loop exit in the region + that is not also the exit of the region. We could enlarge the + region to cover the loop that region exits to. See PR79977. */ + if (loop_outer (entry->src->loop_father)) + { + vec exits = get_loop_exit_edges (entry->src->loop_father); + for (unsigned i = 0; i < exits.length (); ++i) + { + if (exits[i] != exit + && bb_in_region (exits[i]->src, entry->dest, exit->src)) + { + DEBUG_PRINT (dp << "[scop-detection-fail] cannot merge seses.\n"); + exits.release (); + return invalid_sese; + } + } + exits.release (); + } + /* For now we just want to bail out when exit does not post-dominate entry. TODO: We might just add a basic_block at the exit to make exit post-dominate entry (the entire region). */ @@ -905,7 +924,19 @@ sese_l combined = merge_sese (s1, s2); + /* Combining adjacent loops may add unrelated loops into the + region so we have to check all sub-loops of the outer loop + that are in the combined region. */ if (combined) + for (l = loop_outer (loop)->inner; l; l = l->next) + if (bb_in_sese_p (l->header, combined) + && ! loop_is_valid_in_scop (l, combined)) + { + combined = invalid_sese; + break; + } + + if (combined) s1 = combined; else add_scop (s2); @@ -931,6 +962,8 @@ && niter_desc.control.no_overflow && (niter = number_of_latch_executions (loop)) && !chrec_contains_undetermined (niter) + && !chrec_contains_undetermined (scalar_evolution_in_region (scop, + loop, niter)) && graphite_can_represent_expr (scop, loop, niter); } Index: gcc/calls.c =================================================================== --- a/src/gcc/calls.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/calls.c (.../branches/gcc-6-branch) @@ -2695,8 +2695,7 @@ n_named_args = num_actuals; /* Make a vector to hold all the information about each arg. */ - args = XALLOCAVEC (struct arg_data, num_actuals); - memset (args, 0, num_actuals * sizeof (struct arg_data)); + args = XCNEWVEC (struct arg_data, num_actuals); /* Build up entries in the ARGS array, compute the size of the arguments into ARGS_SIZE, etc. */ @@ -3710,6 +3709,7 @@ currently_expanding_call--; free (stack_usage_map_buf); + free (args); /* Join result with returned bounds so caller may use them if needed. */ target = chkp_join_splitted_slot (target, valbnd); Index: gcc/multiple_target.c =================================================================== --- a/src/gcc/multiple_target.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/multiple_target.c (.../branches/gcc-6-branch) @@ -68,6 +68,13 @@ " supported by this target"); break; } + else if (!targetm.get_function_versions_dispatcher) + { + error_at (gimple_location (call), + "target does not support function version dispatcher"); + break; + } + e_next = e->next_caller; idecl = targetm.get_function_versions_dispatcher (decl); if (!idecl) @@ -87,6 +94,7 @@ inode->resolve_alias (cgraph_node::get (resolver_decl)); e->redirect_callee (inode); + e->redirect_call_stmt_to_callee (); /* Since REDIRECT_CALLEE modifies NEXT_CALLER field we move to previously set NEXT_CALLER. */ e = NULL; @@ -283,6 +291,7 @@ create_new_asm_name (attr, suffix); /* Create new target clone. */ cgraph_node *new_node = create_target_clone (node, definition, suffix); + new_node->local.local = false; XDELETEVEC (suffix); /* Set new attribute for the clone. */ @@ -325,6 +334,7 @@ tree attributes = make_attribute ("target", "default", DECL_ATTRIBUTES (node->decl)); DECL_ATTRIBUTES (node->decl) = attributes; + node->local.local = false; location_t saved_loc = input_location; input_location = DECL_SOURCE_LOCATION (node->decl); bool ret @@ -334,17 +344,19 @@ return ret; } -static bool target_clone_pass; - static unsigned int ipa_target_clone (void) { struct cgraph_node *node; - target_clone_pass = false; + bool target_clone_pass = false; FOR_EACH_FUNCTION (node) - if (node->definition) - target_clone_pass |= expand_target_clones (node, true); + target_clone_pass |= expand_target_clones (node, node->definition); + + if (target_clone_pass) + FOR_EACH_FUNCTION (node) + create_dispatcher_calls (node); + return 0; } @@ -360,7 +372,7 @@ 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - 0 /* todo_flags_finish */ + TODO_update_ssa /* todo_flags_finish */ }; class pass_target_clone : public simple_ipa_opt_pass @@ -388,58 +400,3 @@ { return new pass_target_clone (ctxt); } - -static unsigned int -ipa_dispatcher_calls (void) -{ - struct cgraph_node *node; - - FOR_EACH_FUNCTION (node) - if (!node->definition) - target_clone_pass |= expand_target_clones (node, false); - if (target_clone_pass) - FOR_EACH_FUNCTION (node) - create_dispatcher_calls (node); - return 0; -} - -namespace { - -const pass_data pass_data_dispatcher_calls = -{ - SIMPLE_IPA_PASS, /* type */ - "dispachercalls", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - TV_NONE, /* tv_id */ - ( PROP_ssa | PROP_cfg ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - 0 /* todo_flags_finish */ -}; - -class pass_dispatcher_calls : public simple_ipa_opt_pass -{ -public: - pass_dispatcher_calls (gcc::context *ctxt) - : simple_ipa_opt_pass (pass_data_dispatcher_calls, ctxt) - {} - - /* opt_pass methods: */ - virtual bool gate (function *); - virtual unsigned int execute (function *) { return ipa_dispatcher_calls (); } -}; - -bool -pass_dispatcher_calls::gate (function *) -{ - return true; -} - -} // anon namespace - -simple_ipa_opt_pass * -make_pass_dispatcher_calls (gcc::context *ctxt) -{ - return new pass_dispatcher_calls (ctxt); -} Index: gcc/loop-doloop.c =================================================================== --- a/src/gcc/loop-doloop.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/loop-doloop.c (.../branches/gcc-6-branch) @@ -152,10 +152,13 @@ } else inc = PATTERN (prev_insn); - /* We expect the condition to be of the form (reg != 0) */ - cond = XEXP (SET_SRC (cmp), 0); - if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) - return 0; + if (GET_CODE (cmp) == SET && GET_CODE (SET_SRC (cmp)) == IF_THEN_ELSE) + { + /* We expect the condition to be of the form (reg != 0) */ + cond = XEXP (SET_SRC (cmp), 0); + if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) + return 0; + } } else { Index: gcc/gimple-fold.c =================================================================== --- a/src/gcc/gimple-fold.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/gimple-fold.c (.../branches/gcc-6-branch) @@ -5506,9 +5506,12 @@ && !compare_tree_int (TYPE_SIZE (TREE_TYPE (ctor)), size)) { ret = canonicalize_constructor_val (unshare_expr (ctor), from_decl); - ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); if (ret) - STRIP_USELESS_TYPE_CONVERSION (ret); + { + ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); + if (ret) + STRIP_USELESS_TYPE_CONVERSION (ret); + } return ret; } /* For constants and byte-aligned/sized reads try to go through @@ -5804,8 +5807,8 @@ return gimple_get_virt_method_for_vtable (token, v, offset, can_refer); } -/* Given a pointer value OP0, return a simplified version of an - indirection through OP0, or NULL_TREE if no simplification is +/* Given a pointer value T, return a simplified version of an + indirection through T, or NULL_TREE if no simplification is possible. Note that the resulting type may be different from the type pointed to in the sense that it is still compatible from the langhooks point of view. */ @@ -5819,7 +5822,8 @@ STRIP_NOPS (sub); subtype = TREE_TYPE (sub); - if (!POINTER_TYPE_P (subtype)) + if (!POINTER_TYPE_P (subtype) + || TYPE_REF_CAN_ALIAS_ALL (ptype)) return NULL_TREE; if (TREE_CODE (sub) == ADDR_EXPR) Index: gcc/cselib.c =================================================================== --- a/src/gcc/cselib.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/cselib.c (.../branches/gcc-6-branch) @@ -49,7 +49,7 @@ static void unchain_one_elt_list (struct elt_list **); static void unchain_one_elt_loc_list (struct elt_loc_list **); static void remove_useless_values (void); -static int rtx_equal_for_cselib_1 (rtx, rtx, machine_mode); +static int rtx_equal_for_cselib_1 (rtx, rtx, machine_mode, int); static unsigned int cselib_hash_rtx (rtx, int, machine_mode); static cselib_val *new_cselib_val (unsigned int, machine_mode, rtx); static void add_mem_for_addr (cselib_val *, cselib_val *, rtx); @@ -125,7 +125,7 @@ /* We don't guarantee that distinct rtx's have different hash values, so we need to do a comparison. */ for (l = v->locs; l; l = l->next) - if (rtx_equal_for_cselib_1 (l->loc, x, memmode)) + if (rtx_equal_for_cselib_1 (l->loc, x, memmode, 0)) { promote_debug_loc (l); return true; @@ -794,7 +794,7 @@ int rtx_equal_for_cselib_p (rtx x, rtx y) { - return rtx_equal_for_cselib_1 (x, y, VOIDmode); + return rtx_equal_for_cselib_1 (x, y, VOIDmode, 0); } /* If x is a PLUS or an autoinc operation, expand the operation, @@ -844,7 +844,7 @@ addresses, MEMMODE should be VOIDmode. */ static int -rtx_equal_for_cselib_1 (rtx x, rtx y, machine_mode memmode) +rtx_equal_for_cselib_1 (rtx x, rtx y, machine_mode memmode, int depth) { enum rtx_code code; const char *fmt; @@ -877,6 +877,9 @@ if (GET_CODE (y) == VALUE) return e == canonical_cselib_val (CSELIB_VAL_PTR (y)); + if (depth == 128) + return 0; + for (l = e->locs; l; l = l->next) { rtx t = l->loc; @@ -886,7 +889,7 @@ list. */ if (REG_P (t) || MEM_P (t) || GET_CODE (t) == VALUE) continue; - else if (rtx_equal_for_cselib_1 (t, y, memmode)) + else if (rtx_equal_for_cselib_1 (t, y, memmode, depth + 1)) return 1; } @@ -897,6 +900,9 @@ cselib_val *e = canonical_cselib_val (CSELIB_VAL_PTR (y)); struct elt_loc_list *l; + if (depth == 128) + return 0; + for (l = e->locs; l; l = l->next) { rtx t = l->loc; @@ -903,7 +909,7 @@ if (REG_P (t) || MEM_P (t) || GET_CODE (t) == VALUE) continue; - else if (rtx_equal_for_cselib_1 (x, t, memmode)) + else if (rtx_equal_for_cselib_1 (x, t, memmode, depth + 1)) return 1; } @@ -924,12 +930,12 @@ if (!xoff != !yoff) return 0; - if (xoff && !rtx_equal_for_cselib_1 (xoff, yoff, memmode)) + if (xoff && !rtx_equal_for_cselib_1 (xoff, yoff, memmode, depth)) return 0; /* Don't recurse if nothing changed. */ if (x != xorig || y != yorig) - return rtx_equal_for_cselib_1 (x, y, memmode); + return rtx_equal_for_cselib_1 (x, y, memmode, depth); return 0; } @@ -963,7 +969,8 @@ case MEM: /* We have to compare any autoinc operations in the addresses using this MEM's mode. */ - return rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 0), GET_MODE (x)); + return rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 0), GET_MODE (x), + depth); default: break; @@ -998,7 +1005,7 @@ /* And the corresponding elements must match. */ for (j = 0; j < XVECLEN (x, i); j++) if (! rtx_equal_for_cselib_1 (XVECEXP (x, i, j), - XVECEXP (y, i, j), memmode)) + XVECEXP (y, i, j), memmode, depth)) return 0; break; @@ -1005,10 +1012,13 @@ case 'e': if (i == 1 && targetm.commutative_p (x, UNKNOWN) - && rtx_equal_for_cselib_1 (XEXP (x, 1), XEXP (y, 0), memmode) - && rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 1), memmode)) + && rtx_equal_for_cselib_1 (XEXP (x, 1), XEXP (y, 0), memmode, + depth) + && rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 1), memmode, + depth)) return 1; - if (! rtx_equal_for_cselib_1 (XEXP (x, i), XEXP (y, i), memmode)) + if (! rtx_equal_for_cselib_1 (XEXP (x, i), XEXP (y, i), memmode, + depth)) return 0; break; Index: gcc/simplify-rtx.c =================================================================== --- a/src/gcc/simplify-rtx.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/simplify-rtx.c (.../branches/gcc-6-branch) @@ -900,8 +900,10 @@ && XEXP (op, 1) == constm1_rtx) return simplify_gen_unary (NEG, mode, XEXP (op, 0), mode); - /* Similarly, (not (neg X)) is (plus X -1). */ - if (GET_CODE (op) == NEG) + /* Similarly, (not (neg X)) is (plus X -1). Only do this for + modes that have CONSTM1_RTX, i.e. MODE_INT, MODE_PARTIAL_INT + and MODE_VECTOR_INT. */ + if (GET_CODE (op) == NEG && CONSTM1_RTX (mode)) return simplify_gen_binary (PLUS, mode, XEXP (op, 0), CONSTM1_RTX (mode)); Index: gcc/tree-sra.c =================================================================== --- a/src/gcc/tree-sra.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/tree-sra.c (.../branches/gcc-6-branch) @@ -1638,6 +1638,13 @@ unsigned HOST_WIDE_INT misalign; unsigned int align; + /* Preserve address-space information. */ + addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (base)); + if (as != TYPE_ADDR_SPACE (exp_type)) + exp_type = build_qualified_type (exp_type, + TYPE_QUALS (exp_type) + | ENCODE_QUAL_ADDR_SPACE (as)); + gcc_checking_assert (offset % BITS_PER_UNIT == 0); get_object_alignment_1 (base, &align, &misalign); base = get_addr_base_and_unit_offset (base, &base_offset); Index: gcc/ubsan.c =================================================================== --- a/src/gcc/ubsan.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ubsan.c (.../branches/gcc-6-branch) @@ -408,7 +408,9 @@ { pp_left_bracket (&pretty_name); tree dom = TYPE_DOMAIN (t); - if (dom && TREE_CODE (TYPE_MAX_VALUE (dom)) == INTEGER_CST) + if (dom != NULL_TREE + && TYPE_MAX_VALUE (dom) != NULL_TREE + && TREE_CODE (TYPE_MAX_VALUE (dom)) == INTEGER_CST) { if (tree_fits_uhwi_p (TYPE_MAX_VALUE (dom)) && tree_to_uhwi (TYPE_MAX_VALUE (dom)) + 1 != 0) @@ -1471,7 +1473,7 @@ expanded_location xloc = expand_location (loc); if (xloc.file == NULL || strncmp (xloc.file, "\1", 2) == 0 - || xloc.file == '\0' || xloc.file[0] == '\xff' + || xloc.file[0] == '\0' || xloc.file[0] == '\xff' || xloc.file[1] == '\xff') return false; @@ -1758,7 +1760,7 @@ { tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)); t = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (t, 0), - repr, NULL_TREE); + repr, TREE_OPERAND (t, 2)); } break; case ARRAY_REF: Index: gcc/lto/ChangeLog =================================================================== --- a/src/gcc/lto/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/lto/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,12 @@ +2017-01-17 Jakub Jelinek + + Backported from mainline + 2017-01-11 Jakub Jelinek + + PR middle-end/50199 + * lto-lang.c (lto_post_options): Force flag_merge_constants = 1 + if it was 0. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/lto/lto-lang.c =================================================================== --- a/src/gcc/lto/lto-lang.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/lto/lto-lang.c (.../branches/gcc-6-branch) @@ -852,6 +852,12 @@ support. */ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST; + /* When partitioning, we can tear appart STRING_CSTs uses from the same + TU into multiple partitions. Without constant merging the constants + might not be equal at runtime. See PR50199. */ + if (!flag_merge_constants) + flag_merge_constants = 1; + /* Initialize the compiler back end. */ return false; } Index: gcc/ipa-prop.c =================================================================== --- a/src/gcc/ipa-prop.c (.../tags/gcc_6_3_0_release) +++ b/src/gcc/ipa-prop.c (.../branches/gcc-6-branch) @@ -4745,7 +4745,7 @@ lto_symtab_encoder_iterator lsei; lto_symtab_encoder_t encoder; - if (!ipa_node_params_sum) + if (!ipa_node_params_sum || !ipa_edge_args_vector) return; ob = create_output_block (LTO_section_jump_functions); Index: gcc/po/exgettext =================================================================== --- a/src/gcc/po/exgettext (.../tags/gcc_6_3_0_release) +++ b/src/gcc/po/exgettext (.../branches/gcc-6-branch) @@ -237,6 +237,8 @@ field = 0 while (getline < file) { if (/^[ \t]*(;|$)/ || !/^[^ \t]/) { + if (field > 2) + printf("_(\"%s\")\n", line) field = 0 } else { if ((field == 1) && /MissingArgError/) { @@ -275,12 +277,15 @@ if (field == 2) { line = $0 printf("#line %d \"%s\"\n", lineno, file) - printf("_(\"%s\")\n", line) + } else if (field > 2) { + line = line " " $0 } field++; } lineno++; } + if (field > 2) + printf("_(\"%s\")\n", line) }') >> $emsg # Run the xgettext commands, with temporary added as a file to scan. Index: gcc/po/es.po =================================================================== --- a/src/gcc/po/es.po (.../tags/gcc_6_3_0_release) +++ b/src/gcc/po/es.po (.../branches/gcc-6-branch) @@ -16,7 +16,7 @@ # demangled - mutilado # hardware - hardware # hotness - calentura -# insns - TBD +# insns - instrucciones #: config/frv/frv.opt:126 # instruction - instrucción # iv optimization - optimización iv # omp (OpenMP) - omp @@ -36,7 +36,7 @@ "Project-Id-Version: gcc 6.2.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2016-08-19 21:03+0000\n" -"PO-Revision-Date: 2016-12-15 01:25+0100\n" +"PO-Revision-Date: 2016-12-31 09:29+0100\n" "Last-Translator: Antonio Ceballos \n" "Language-Team: Spanish \n" "Language: es\n" @@ -11633,140 +11633,94 @@ msgstr "Usa instrucciones high de multiplicación para la parte high de la multiplicación 32x32." #: config/microblaze/microblaze.opt:104 -#, fuzzy -#| msgid "Use hardware floating point conversion instructions" msgid "Use hardware floating point conversion instructions." msgstr "Usa instrucciones de conversión de coma flotante de hardware." #: config/microblaze/microblaze.opt:108 -#, fuzzy -#| msgid "Use hardware floating point square root instruction" msgid "Use hardware floating point square root instruction." msgstr "Usa instrucciones de raíz cuadrada de coma flotante de hardware." #: config/microblaze/microblaze.opt:112 -#, fuzzy -#| msgid "Description for mxl-mode-executable" msgid "Description for mxl-mode-executable." msgstr "Descripción para mxl-mode-executable." #: config/microblaze/microblaze.opt:116 -#, fuzzy -#| msgid "Description for mxl-mode-xmdstub" msgid "Description for mxl-mode-xmdstub." msgstr "Descripción para mxl-mode-xmdstub." #: config/microblaze/microblaze.opt:120 -#, fuzzy -#| msgid "Description for mxl-mode-bootstrap" msgid "Description for mxl-mode-bootstrap." msgstr "Descripción para mxl-mode-bootstrap." #: config/microblaze/microblaze.opt:124 -#, fuzzy -#| msgid "Description for mxl-mode-novectors" msgid "Description for mxl-mode-novectors." msgstr "Descripción para mxl-mode-novectors." #: config/microblaze/microblaze.opt:128 -#, fuzzy -#| msgid "Use hardware quad FP instructions" msgid "Use hardware prefetch instruction" -msgstr "Usa instrucciones de FP quad de hardware" +msgstr "Usa instrucciones de precargado de hardware" #: config/vax/vax.opt:23 config/vax/vax.opt:27 -#, fuzzy -#| msgid "Target DFLOAT double precision code" msgid "Target DFLOAT double precision code." msgstr "Apunta a código DFLOAT de doble precisión." #: config/vax/vax.opt:31 config/vax/vax.opt:35 -#, fuzzy -#| msgid "Generate GFLOAT double precision code" msgid "Generate GFLOAT double precision code." msgstr "Genera código GFLOAT de doble precisión." #: config/vax/vax.opt:39 -#, fuzzy -#| msgid "Generate code for GNU assembler (gas)" msgid "Generate code for GNU assembler (gas)." msgstr "Genera código para el ensamblador de GNU (gas)." #: config/vax/vax.opt:43 -#, fuzzy -#| msgid "Generate code for UNIX assembler" msgid "Generate code for UNIX assembler." msgstr "Genera código para el ensamblador UNIX." #: config/vax/vax.opt:47 -#, fuzzy -#| msgid "Use VAXC structure conventions" msgid "Use VAXC structure conventions." -msgstr "Usa convenciones de estructura VAXC." +msgstr "Usa los convenios de estructura VAXC." #: config/vax/vax.opt:51 -#, fuzzy -#| msgid "Use new adddi3/subdi3 patterns" msgid "Use new adddi3/subdi3 patterns." -msgstr "Usa patrones nuevos adddi3/subdi3." +msgstr "Usa los patrones nuevos adddi3/subdi3." #: config/frv/frv.opt:30 -#, fuzzy -#| msgid "Use 4 media accumulators" msgid "Use 4 media accumulators." msgstr "Usa 4 acumuladores de medios." #: config/frv/frv.opt:34 -#, fuzzy -#| msgid "Use 8 media accumulators" msgid "Use 8 media accumulators." msgstr "Usa 8 acumuladores de medios." #: config/frv/frv.opt:38 -#, fuzzy -#| msgid "Enable label alignment optimizations" msgid "Enable label alignment optimizations." msgstr "Activa las optimizaciones de alineación de etiquetas." #: config/frv/frv.opt:42 -#, fuzzy -#| msgid "Dynamically allocate cc registers" msgid "Dynamically allocate cc registers." msgstr "Asigna dinámicamente los registros cc." #: config/frv/frv.opt:49 -#, fuzzy -#| msgid "Set the cost of branches" msgid "Set the cost of branches." msgstr "Establece el costo de las ramificaciones." #: config/frv/frv.opt:53 -#, fuzzy -#| msgid "Enable conditional execution other than moves/scc" msgid "Enable conditional execution other than moves/scc." msgstr "Activa la ejecución condicional en lugar de moves/scc." #: config/frv/frv.opt:57 -#, fuzzy -#| msgid "Change the maximum length of conditionally-executed sequences" msgid "Change the maximum length of conditionally-executed sequences." msgstr "Cambia la longitud máxima de las secuencias ejecutadas condicionalmente." #: config/frv/frv.opt:61 -#, fuzzy -#| msgid "Change the number of temporary registers that are available to conditionally-executed sequences" msgid "Change the number of temporary registers that are available to conditionally-executed sequences." msgstr "Cambia el número de registros temporales disponibles para secuencias ejecutadas condicionalmente." #: config/frv/frv.opt:65 -#, fuzzy -#| msgid "Enable conditional moves" msgid "Enable conditional moves." msgstr "Activa moves condicionales." #: config/frv/frv.opt:69 -#, fuzzy -#| msgid "Set the target CPU type" msgid "Set the target CPU type." msgstr "Especifica el tipo del CPU destino." @@ -11775,296 +11729,204 @@ msgstr "CPUs FR-V conocidos (para usar con la opción -mcpu=):" #: config/frv/frv.opt:122 -#, fuzzy -#| msgid "Use fp double instructions" msgid "Use fp double instructions." msgstr "Usa instrucciones fp double." #: config/frv/frv.opt:126 -#, fuzzy -#| msgid "Change the ABI to allow double word insns" msgid "Change the ABI to allow double word insns." msgstr "Cambia la ABI para permitir instrucciones double word." #: config/frv/frv.opt:134 -#, fuzzy -#| msgid "Just use icc0/fcc0" msgid "Just use icc0/fcc0." msgstr "Usa solamente icc0/fcc0." #: config/frv/frv.opt:138 -#, fuzzy -#| msgid "Only use 32 FPRs" msgid "Only use 32 FPRs." msgstr "Usa solamente 32 FPRs." #: config/frv/frv.opt:142 -#, fuzzy -#| msgid "Use 64 FPRs" msgid "Use 64 FPRs." msgstr "Usa 64 FPRs." #: config/frv/frv.opt:146 -#, fuzzy -#| msgid "Only use 32 GPRs" msgid "Only use 32 GPRs." msgstr "Usa solamente 32 GPRs." #: config/frv/frv.opt:150 -#, fuzzy -#| msgid "Use 64 GPRs" msgid "Use 64 GPRs." msgstr "Usa 64 GPRs." #: config/frv/frv.opt:154 -#, fuzzy -#| msgid "Enable use of GPREL for read-only data in FDPIC" msgid "Enable use of GPREL for read-only data in FDPIC." msgstr "Activa el uso de GPREL para datos de sólo lectura en FDPIC." #: config/frv/frv.opt:166 -#, fuzzy -#| msgid "Enable PIC support for building libraries" msgid "Enable PIC support for building libraries." msgstr "Activa el soporte PIC para construir bibliotecas." #: config/frv/frv.opt:170 -#, fuzzy -#| msgid "Follow the EABI linkage requirements" msgid "Follow the EABI linkage requirements." msgstr "Sigue los requerimientos de enlace de EABI." #: config/frv/frv.opt:174 -#, fuzzy -#| msgid "Disallow direct calls to global functions" msgid "Disallow direct calls to global functions." -msgstr "Desactiva las llamdas directas a funciones globales." +msgstr "Desactiva las llamadas directas a funciones globales." #: config/frv/frv.opt:178 -#, fuzzy -#| msgid "Use media instructions" msgid "Use media instructions." msgstr "Usa instrucciones de medios." #: config/frv/frv.opt:182 -#, fuzzy -#| msgid "Use multiply add/subtract instructions" msgid "Use multiply add/subtract instructions." msgstr "Usa instrucciones acumular/sustraer de multiplicar." #: config/frv/frv.opt:186 -#, fuzzy -#| msgid "Enable optimizing &&/|| in conditional execution" msgid "Enable optimizing &&/|| in conditional execution." msgstr "Activa la optimización &&/|| en la ejecución condicional." #: config/frv/frv.opt:190 -#, fuzzy -#| msgid "Enable nested conditional execution optimizations" msgid "Enable nested conditional execution optimizations." msgstr "Activa las optimizaciones de ejecución condicional anidada." #: config/frv/frv.opt:195 -#, fuzzy -#| msgid "Do not mark ABI switches in e_flags" msgid "Do not mark ABI switches in e_flags." msgstr "No marca las opciones ABI en e_flags." #: config/frv/frv.opt:199 -#, fuzzy -#| msgid "Remove redundant membars" msgid "Remove redundant membars." msgstr "Remueve miembros redundantes." #: config/frv/frv.opt:203 -#, fuzzy -#| msgid "Pack VLIW instructions" msgid "Pack VLIW instructions." msgstr "Empaca las instrucciones VLIW." #: config/frv/frv.opt:207 -#, fuzzy -#| msgid "Enable setting GPRs to the result of comparisons" msgid "Enable setting GPRs to the result of comparisons." msgstr "Permite establecer los GPRs al resultado de las comparaciones." #: config/frv/frv.opt:211 -#, fuzzy -#| msgid "Change the amount of scheduler lookahead" msgid "Change the amount of scheduler lookahead." msgstr "Cambia la cantidad de vista hacia adelante del planificador." #: config/frv/frv.opt:219 -#, fuzzy -#| msgid "Assume a large TLS segment" msgid "Assume a large TLS segment." msgstr "Asume un segmento TLS grande." #: config/frv/frv.opt:223 -#, fuzzy -#| msgid "Do not assume a large TLS segment" msgid "Do not assume a large TLS segment." msgstr "No asume un segmento TLS grande." #: config/frv/frv.opt:228 -#, fuzzy -#| msgid "Cause gas to print tomcat statistics" msgid "Cause gas to print tomcat statistics." msgstr "Causa que gas muestre estadísticas de tomcat." #: config/frv/frv.opt:233 -#, fuzzy -#| msgid "Link with the library-pic libraries" msgid "Link with the library-pic libraries." msgstr "Enlaza con las bibliotecas de pic de biblioteca." #: config/frv/frv.opt:237 -#, fuzzy -#| msgid "Allow branches to be packed with other instructions" msgid "Allow branches to be packed with other instructions." msgstr "Permite que las ramificaciones se empaquen con otras instrucciones." #: config/mn10300/mn10300.opt:30 -#, fuzzy -#| msgid "Target the AM33 processor" msgid "Target the AM33 processor." msgstr "Apunta al procesador AM33." #: config/mn10300/mn10300.opt:34 -#, fuzzy -#| msgid "Target the AM33/2.0 processor" msgid "Target the AM33/2.0 processor." msgstr "Apunta al procesador AM33/2.0." #: config/mn10300/mn10300.opt:38 -#, fuzzy -#| msgid "Target the AM34 processor" msgid "Target the AM34 processor." msgstr "Apunta al procesador AM34." #: config/mn10300/mn10300.opt:46 -#, fuzzy -#| msgid "Work around hardware multiply bug" msgid "Work around hardware multiply bug." msgstr "Evita el error de multiplicación de hardware." #: config/mn10300/mn10300.opt:55 -#, fuzzy -#| msgid "Enable linker relaxations" msgid "Enable linker relaxations." msgstr "Activa la relajación del enlazador." #: config/mn10300/mn10300.opt:59 -#, fuzzy -#| msgid "Return pointers in both a0 and d0" msgid "Return pointers in both a0 and d0." msgstr "Devuelve punteros tanto en a0 como en d0." #: config/mn10300/mn10300.opt:63 -#, fuzzy -#| msgid "Allow gcc to generate LIW instructions" msgid "Allow gcc to generate LIW instructions." msgstr "Permite a gcc generar instrucciones LIW." #: config/mn10300/mn10300.opt:67 -#, fuzzy -#| msgid "Allow gcc to generate the SETLB and Lcc instructions" msgid "Allow gcc to generate the SETLB and Lcc instructions." msgstr "Permite a gcc generar las instrucciones SETLB y Lcc." #: config/nds32/nds32.opt:26 -#, fuzzy -#| msgid "Generate code in big endian mode" msgid "Generate code in big-endian mode." msgstr "Genera código en modo big endian." #: config/nds32/nds32.opt:30 -#, fuzzy -#| msgid "Generate code in little endian mode" msgid "Generate code in little-endian mode." msgstr "Genera código en modo little endian." #: config/nds32/nds32.opt:34 -#, fuzzy -#| msgid "Reschedule instructions before register allocation" msgid "Use reduced-set registers for register allocation." -msgstr "Recalendariza las instrucciones antes del alojamiento de registros." +msgstr "Usa un juego reducido de registros para asignación de registros." #: config/nds32/nds32.opt:38 -#, fuzzy -#| msgid "Reschedule instructions before register allocation" msgid "Use full-set registers for register allocation." -msgstr "Recalendariza las instrucciones antes del alojamiento de registros." +msgstr "Usa el juego completo de registros para asignación de registros." #: config/nds32/nds32.opt:42 -#, fuzzy -#| msgid "enable conditional move instruction usage." msgid "Generate conditional move instructions." -msgstr "activa el uso de la instrucción move condicional." +msgstr "Genera instrucciones move condicionales." #: config/nds32/nds32.opt:46 -#, fuzzy -#| msgid "Generate bit instructions" msgid "Generate performance extension instructions." -msgstr "Genera instrucciones bit." +msgstr "Genera instrucciones de extensión del rendimiento." #: config/nds32/nds32.opt:50 -#, fuzzy -#| msgid "Generate isel instructions" msgid "Generate v3 push25/pop25 instructions." -msgstr "Genera instrucciones isel." +msgstr "Genera instrucciones v3 push25/pop25." #: config/nds32/nds32.opt:54 -#, fuzzy -#| msgid "Generate bit instructions" msgid "Generate 16-bit instructions." -msgstr "Genera instrucciones bit." +msgstr "Genera instrucciones de 16 bits." #: config/nds32/nds32.opt:58 msgid "Specify the size of each interrupt vector, which must be 4 or 16." -msgstr "" +msgstr "Especifica el tamaño de cada vector de interrupciones, que ha de ser 4 o 16." #: config/nds32/nds32.opt:62 msgid "Specify the size of each cache block, which must be a power of 2 between 4 and 512." -msgstr "" +msgstr "Especifica el tamaño de cada bloque de caché, que ha de ser potencia de 2 entre 4 y 512." #: config/nds32/nds32.opt:70 -#, fuzzy -#| msgid "Known ARM architectures (for use with the -march= option):" msgid "Known arch types (for use with the -march= option):" -msgstr "Arquitecturas ARM conocidas (para usar con la opción -march=):" +msgstr "Tipos de arquitectura conocidos (para usar con la opción -march=):" #: config/nds32/nds32.opt:83 msgid "Specify the address generation strategy for code model." -msgstr "" +msgstr "Especifica la estrategia de generación de direcciones para modelo de código." #: config/nds32/nds32.opt:87 -#, fuzzy -#| msgid "Known code models (for use with the -mcmodel= option):" msgid "Known cmodel types (for use with the -mcmodel= option):" -msgstr "Modelos de código conocidos (para uso con la opción -mcmodel=):" +msgstr "Tipos de modelos de código conocidos (para uso con la opción -mcmodel=):" #: config/nds32/nds32.opt:100 -#, fuzzy -#| msgid "Warn when all constructors and destructors are private" msgid "Enable constructor/destructor feature." -msgstr "Avisa cuando todos los constructores y destructores son privados." +msgstr "Activa la opción constructor/destructor." #: config/nds32/nds32.opt:104 -#, fuzzy -#| msgid "Generate isel instructions" msgid "Guide linker to relax instructions." -msgstr "Genera instrucciones isel." +msgstr "Guía al enlazador para que relaje las instrucciones." #: config/iq2000/iq2000.opt:31 -#, fuzzy -#| msgid "Specify CPU for code generation purposes" msgid "Specify CPU for code generation purposes." -msgstr "Especifica el CPU para propósitos de generación de código." +msgstr "Especifica la CPU para propósitos de generación de código." #: config/iq2000/iq2000.opt:47 msgid "Specify CPU for scheduling purposes." -msgstr "Especifica el CPU para propósitos de planificación." +msgstr "Especifica la CPU para propósitos de planificación." #: config/iq2000/iq2000.opt:51 msgid "Known IQ2000 CPUs (for use with the -mcpu= option):" @@ -12071,20 +11933,14 @@ msgstr "CPUs IQ2000 conocidos (para uso con la opción -mcpu=):" #: config/iq2000/iq2000.opt:61 config/mips/mips.opt:142 -#, fuzzy -#| msgid "Use ROM instead of RAM" msgid "Use ROM instead of RAM." msgstr "Usa la ROM en lugar de la RAM." #: config/iq2000/iq2000.opt:70 -#, fuzzy -#| msgid "No default crt0.o" msgid "No default crt0.o." -msgstr "No define a crt0.o por defecto." +msgstr "Sin crt0.o predeterminada." #: config/iq2000/iq2000.opt:74 config/mips/mips.opt:393 -#, fuzzy -#| msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgid "Put uninitialized constants in ROM (needs -membedded-data)." msgstr "Pone las constantes sin inicializar en ROM (necesita -membedded-data)." @@ -12093,136 +11949,96 @@ msgstr "ISAs C6X conocidas (para uso con la opción -march=):" #: config/c6x/c6x.opt:46 -#, fuzzy -#| msgid "Valid arguments for the -msdata= option" msgid "Valid arguments for the -msdata= option." msgstr "Argumentos válidos para la opción -msdata=." #: config/c6x/c6x.opt:59 -#, fuzzy -#| msgid "Compile for the DSBT shared library ABI" msgid "Compile for the DSBT shared library ABI." msgstr "Compila para la ABI de biblioteca compartida DSBT." #: config/cris/linux.opt:27 -#, fuzzy -#| msgid "Together with -fpic and -fPIC, do not use GOTPLT references" msgid "Together with -fpic and -fPIC, do not use GOTPLT references." msgstr "Junto con -fpic y -fPIC, no utiliza referencias GOTPLT." #: config/cris/cris.opt:45 -#, fuzzy -#| msgid "Work around bug in multiplication instruction" msgid "Work around bug in multiplication instruction." msgstr "Evita el error en la instrucción de multiplicación." #: config/cris/cris.opt:51 -#, fuzzy -#| msgid "Compile for ETRAX 4 (CRIS v3)" msgid "Compile for ETRAX 4 (CRIS v3)." msgstr "Compila para ETRAX 4 (CRIS v3)." #: config/cris/cris.opt:56 -#, fuzzy -#| msgid "Compile for ETRAX 100 (CRIS v8)" msgid "Compile for ETRAX 100 (CRIS v8)." msgstr "Compila para ETRAX 100 (CRIS v8)." #: config/cris/cris.opt:64 -#, fuzzy -#| msgid "Emit verbose debug information in assembly code" msgid "Emit verbose debug information in assembly code." msgstr "Emite información de depuración detallada en el código ensamblador." #: config/cris/cris.opt:71 -#, fuzzy -#| msgid "Do not use condition codes from normal instructions" msgid "Do not use condition codes from normal instructions." msgstr "No usa códigos de condición para las instrucciones normales." #: config/cris/cris.opt:80 -#, fuzzy -#| msgid "Do not emit addressing modes with side-effect assignment" msgid "Do not emit addressing modes with side-effect assignment." msgstr "No emite modos de direccionamiento con asignaciones colaterales." #: config/cris/cris.opt:89 -#, fuzzy -#| msgid "Do not tune stack alignment" msgid "Do not tune stack alignment." msgstr "No ajusta la alineación de la pila." #: config/cris/cris.opt:98 -#, fuzzy -#| msgid "Do not tune writable data alignment" msgid "Do not tune writable data alignment." msgstr "No ajusta la alineación de los datos modificables." #: config/cris/cris.opt:107 -#, fuzzy -#| msgid "Do not tune code and read-only data alignment" msgid "Do not tune code and read-only data alignment." msgstr "No ajusta la alineación del código y de datos de sólo lectura." #: config/cris/cris.opt:116 -#, fuzzy -#| msgid "Align code and data to 32 bits" msgid "Align code and data to 32 bits." msgstr "Alinea código y datos a 32 bits." #: config/cris/cris.opt:133 -#, fuzzy -#| msgid "Don't align items in code or data" msgid "Don't align items in code or data." msgstr "No alinea los elementos en el código o los datos." #: config/cris/cris.opt:142 -#, fuzzy -#| msgid "Do not emit function prologue or epilogue" msgid "Do not emit function prologue or epilogue." msgstr "No emite el prólogo o epílogo de funciones." #: config/cris/cris.opt:149 -#, fuzzy -#| msgid "Use the most feature-enabling options allowed by other options" msgid "Use the most feature-enabling options allowed by other options." msgstr "Usa la mayor cantidad de características permitidas por otras opciones." #: config/cris/cris.opt:158 -#, fuzzy -#| msgid "Override -mbest-lib-options" msgid "Override -mbest-lib-options." msgstr "Anula -mbest-lib-options." #: config/cris/cris.opt:165 -#, fuzzy -#| msgid "-march=ARCH\tGenerate code for the specified chip or CPU version" msgid "-march=ARCH\tGenerate code for the specified chip or CPU version." msgstr "-march=ARQ\tGenera código para el chip o la versión de CPU especificados." #: config/cris/cris.opt:169 -#, fuzzy -#| msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version" msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version." msgstr "-mtune=ARQ\tAjusta la alineación para el chip o la versión de CPU especificados." #: config/cris/cris.opt:173 -#, fuzzy -#| msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size" msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size." msgstr "-mmax-stackframe=TAM\tAvisa cuando un marco de pila es más grande que el tamaño especificado." #: config/cris/cris.opt:180 msgid "Emit traps as \"break 8\", default for CRIS v3 and up. If disabled, calls to abort() are used." -msgstr "" +msgstr "Emite traps como \"break 8\", predeterminado para CRIS v3 y superior. Si está desactivado, se usan llamadas a abort()." #: config/cris/cris.opt:184 msgid "Emit checks causing \"break 8\" instructions to execute when applying atomic builtins on misaligned memory." -msgstr "" +msgstr "Emite comprobaciones haciendo que las instrucciones \"break 8\" se ejecuten cuando se aplican funciones internas atómicas sobre memoria desalineada." #: config/cris/cris.opt:188 msgid "Handle atomic builtins that may be applied to unaligned data by calling library functions. Overrides -mtrap-unaligned-atomic." -msgstr "" +msgstr "Maneja las funciones internas atómicas que pueden aplicarse a datos desalineados mediante llamadas a funciones de biblioteca. Anula -mtrap-unaligned-atomic." #: config/sh/superh.opt:6 msgid "Board name [and memory region]." @@ -12233,116 +12049,78 @@ msgstr "Nombre del entorno de ejecución." #: config/sh/sh.opt:48 -#, fuzzy -#| msgid "Generate SH1 code" msgid "Generate SH1 code." msgstr "Genera código SH1." #: config/sh/sh.opt:52 -#, fuzzy -#| msgid "Generate SH2 code" msgid "Generate SH2 code." msgstr "Genera código SH2." #: config/sh/sh.opt:56 -#, fuzzy -#| msgid "Generate default double-precision SH2a-FPU code" msgid "Generate default double-precision SH2a-FPU code." msgstr "Genera código FPU de SH2a de doble precisión por defecto." #: config/sh/sh.opt:60 -#, fuzzy -#| msgid "Generate SH2a FPU-less code" msgid "Generate SH2a FPU-less code." msgstr "Genera código SH2a sin FPU." #: config/sh/sh.opt:64 -#, fuzzy -#| msgid "Generate default single-precision SH2a-FPU code" msgid "Generate default single-precision SH2a-FPU code." msgstr "Genera código FPU de SH2a de precisión simple." #: config/sh/sh.opt:68 -#, fuzzy -#| msgid "Generate only single-precision SH2a-FPU code" msgid "Generate only single-precision SH2a-FPU code." msgstr "Genera solamente código FPU de SH2a de precisión simple." #: config/sh/sh.opt:72 -#, fuzzy -#| msgid "Generate SH2e code" msgid "Generate SH2e code." msgstr "Genera código SH2e." #: config/sh/sh.opt:76 -#, fuzzy -#| msgid "Generate SH3 code" msgid "Generate SH3 code." msgstr "Genera código SH3." #: config/sh/sh.opt:80 -#, fuzzy -#| msgid "Generate SH3e code" msgid "Generate SH3e code." msgstr "Genera código SH3e." #: config/sh/sh.opt:84 -#, fuzzy -#| msgid "Generate SH4 code" msgid "Generate SH4 code." msgstr "Genera código SH4." #: config/sh/sh.opt:88 -#, fuzzy -#| msgid "Generate SH4-100 code" msgid "Generate SH4-100 code." msgstr "Genera código SH4-100." #: config/sh/sh.opt:92 -#, fuzzy -#| msgid "Generate SH4-200 code" msgid "Generate SH4-200 code." msgstr "Genera código SH4-200." #: config/sh/sh.opt:98 -#, fuzzy -#| msgid "Generate SH4-300 code" msgid "Generate SH4-300 code." msgstr "Genera código SH4-300." #: config/sh/sh.opt:102 -#, fuzzy -#| msgid "Generate SH4 FPU-less code" msgid "Generate SH4 FPU-less code." msgstr "Genera código SH4 sin FPU." #: config/sh/sh.opt:106 -#, fuzzy -#| msgid "Generate SH4-100 FPU-less code" msgid "Generate SH4-100 FPU-less code." msgstr "Genera código SH4-100 sin FPU." #: config/sh/sh.opt:110 -#, fuzzy -#| msgid "Generate SH4-200 FPU-less code" msgid "Generate SH4-200 FPU-less code." msgstr "Genera código SH4-200 sin FPU." #: config/sh/sh.opt:114 -#, fuzzy -#| msgid "Generate SH4-300 FPU-less code" msgid "Generate SH4-300 FPU-less code." msgstr "Genera código SH4-300 sin FPU." #: config/sh/sh.opt:118 -#, fuzzy -#| msgid "Generate code for SH4 340 series (MMU/FPU-less)" msgid "Generate code for SH4 340 series (MMU/FPU-less)." msgstr "Genera código para SH4 series 340 (sin MMU/FPU)." #: config/sh/sh.opt:123 -#, fuzzy -#| msgid "Generate code for SH4 400 series (MMU/FPU-less)" msgid "Generate code for SH4 400 series (MMU/FPU-less)." msgstr "Genera código para SH4 series 400 (sin MMU/FPU)." @@ -12351,156 +12129,107 @@ msgstr "Genera código para SH4 series 500 (sin FPU)." #: config/sh/sh.opt:133 -#, fuzzy -#| msgid "Generate default single-precision SH4 code" msgid "Generate default single-precision SH4 code." msgstr "Genera código SH4 de precisión simple por defecto." #: config/sh/sh.opt:137 -#, fuzzy -#| msgid "Generate default single-precision SH4-100 code" msgid "Generate default single-precision SH4-100 code." msgstr "Genera código SH4-100 de precisión simple por defecto." #: config/sh/sh.opt:141 -#, fuzzy -#| msgid "Generate default single-precision SH4-200 code" msgid "Generate default single-precision SH4-200 code." msgstr "Genera código SH4-200 de precisión simple por defecto." #: config/sh/sh.opt:145 -#, fuzzy -#| msgid "Generate default single-precision SH4-300 code" msgid "Generate default single-precision SH4-300 code." msgstr "Genera código SH4-300 de precisión simple por defecto." #: config/sh/sh.opt:149 -#, fuzzy -#| msgid "Generate only single-precision SH4 code" msgid "Generate only single-precision SH4 code." msgstr "Genera código SH4 solamente de precisión simple." #: config/sh/sh.opt:153 -#, fuzzy -#| msgid "Generate only single-precision SH4-100 code" msgid "Generate only single-precision SH4-100 code." msgstr "Genera código SH4-100 solamente de precisión simple." #: config/sh/sh.opt:157 -#, fuzzy -#| msgid "Generate only single-precision SH4-200 code" msgid "Generate only single-precision SH4-200 code." msgstr "Genera código SH4-200 solamente de precisión simple." #: config/sh/sh.opt:161 -#, fuzzy -#| msgid "Generate only single-precision SH4-300 code" msgid "Generate only single-precision SH4-300 code." msgstr "Genera código SH4-300 solamente de precisión simple." #: config/sh/sh.opt:165 -#, fuzzy -#| msgid "Generate SH4a code" msgid "Generate SH4a code." msgstr "Genera código SH4a." #: config/sh/sh.opt:169 -#, fuzzy -#| msgid "Generate SH4a FPU-less code" msgid "Generate SH4a FPU-less code." msgstr "Genera código SH4a sin FPU." #: config/sh/sh.opt:173 -#, fuzzy -#| msgid "Generate default single-precision SH4a code" msgid "Generate default single-precision SH4a code." msgstr "Genera código SH4a de precisión simple por defecto." #: config/sh/sh.opt:177 -#, fuzzy -#| msgid "Generate only single-precision SH4a code" msgid "Generate only single-precision SH4a code." msgstr "Genera código SH4a solamente de precisión simple." #: config/sh/sh.opt:181 -#, fuzzy -#| msgid "Generate SH4al-dsp code" msgid "Generate SH4al-dsp code." msgstr "Genera código SH4al-dsp." #: config/sh/sh.opt:185 -#, fuzzy -#| msgid "Generate 32-bit SHmedia code" msgid "Generate 32-bit SHmedia code." msgstr "Genera código SHmedia de 32-bit." #: config/sh/sh.opt:189 -#, fuzzy -#| msgid "Generate 32-bit FPU-less SHmedia code" msgid "Generate 32-bit FPU-less SHmedia code." msgstr "Genera código SHmedia de 32-bit sin FPU." #: config/sh/sh.opt:193 -#, fuzzy -#| msgid "Generate 64-bit SHmedia code" msgid "Generate 64-bit SHmedia code." msgstr "Genera código SHmedia de 64-bit." #: config/sh/sh.opt:197 -#, fuzzy -#| msgid "Generate 64-bit FPU-less SHmedia code" msgid "Generate 64-bit FPU-less SHmedia code." msgstr "Genera código SHmedia de 64-bit sin FPU." #: config/sh/sh.opt:201 -#, fuzzy -#| msgid "Generate SHcompact code" msgid "Generate SHcompact code." msgstr "Genera código SHcompact." #: config/sh/sh.opt:205 -#, fuzzy -#| msgid "Generate FPU-less SHcompact code" msgid "Generate FPU-less SHcompact code." msgstr "Genera código SHcompact sin FPU." #: config/sh/sh.opt:217 -#, fuzzy -#| msgid "Generate code in big endian mode" msgid "Generate code in big endian mode." msgstr "Genera código en modo big endian." #: config/sh/sh.opt:221 -#, fuzzy -#| msgid "Generate 32-bit offsets in switch tables" msgid "Generate 32-bit offsets in switch tables." msgstr "Genera desplazamientos de 32-bit en las tablas de switch." #: config/sh/sh.opt:225 -#, fuzzy -#| msgid "Generate bit instructions" msgid "Generate bit instructions." -msgstr "Genera instrucciones bit." +msgstr "Genera instrucciones de bit." #: config/sh/sh.opt:229 -#, fuzzy -#| msgid "Cost to assume for a branch insn" msgid "Cost to assume for a branch insn." msgstr "Costo de asumir una ramificación de insn." #: config/sh/sh.opt:233 msgid "Assume that zero displacement conditional branches are fast." -msgstr "" +msgstr "Asume que las ramificaciones condicionales con desplazamiento cero son rápidas." #: config/sh/sh.opt:236 config/sh/sh.opt:240 -#, fuzzy, c-format -#| msgid "Deprecated. This switch has no effect" +#, c-format msgid "%qs is deprecated and has no effect" -msgstr "Obsoleto. Esta opción no tiene efecto" +msgstr "%qs está obsoleto y no tiene ningún efecto" #: config/sh/sh.opt:237 -#, fuzzy -#| msgid "Enable cbranchdi4 pattern" msgid "Enable cbranchdi4 pattern." msgstr "Activa el patrón cbranchdi4." @@ -12510,37 +12239,27 @@ #: config/sh/sh.opt:245 msgid "Force the usage of delay slots for conditional branches." -msgstr "" +msgstr "Fuerza el uso de ranuras de retardo para las ramificaciones condicionales." #: config/sh/sh.opt:249 -#, fuzzy -#| msgid "Enable SH5 cut2 workaround" msgid "Enable SH5 cut2 workaround." msgstr "Permite evitar cut2 en SH5." #: config/sh/sh.opt:253 -#, fuzzy -#| msgid "Align doubles at 64-bit boundaries" msgid "Align doubles at 64-bit boundaries." msgstr "Alinea doubles en límites de 64-bit." #: config/sh/sh.opt:257 -#, fuzzy -#| msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table" msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table." -msgstr "Estrategia de división, uno de: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table." +msgstr "Estrategia de división, una de las siguientes: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table." #: config/sh/sh.opt:261 -#, fuzzy -#| msgid "Specify name for 32 bit signed division function" msgid "Specify name for 32 bit signed division function." msgstr "Especifica un nombre para la función de división de 32 bit con signo." #: config/sh/sh.opt:265 -#, fuzzy -#| msgid "Generate LP64 code" msgid "Generate ELF FDPIC code." -msgstr "Genera código LP64." +msgstr "Genera código ELF FDPIC." #: config/sh/sh.opt:269 msgid "Enable the use of 64-bit floating point registers in fmov instructions. See -mdalign if 64-bit alignment is required." @@ -12547,68 +12266,46 @@ msgstr "Activa el uso de registros de coma flotante de 64-bit en instrucciones. fmov. Vea -mdalign si se requiere alineación de 64-bit." #: config/sh/sh.opt:277 -#, fuzzy -#| msgid "Cost to assume for gettr insn" msgid "Cost to assume for gettr insn." msgstr "Costo de asumir la instrucción gettr." #: config/sh/sh.opt:281 config/sh/sh.opt:331 -#, fuzzy -#| msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions" msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions." msgstr "Sigue las convenciones de llamada Renesas (anteriormente Hitachi) / SuperH." #: config/sh/sh.opt:285 -#, fuzzy -#| msgid "Increase the IEEE compliance for floating-point comparisons" msgid "Increase the IEEE compliance for floating-point comparisons." msgstr "Incrementa el cumplimiento con IEEE para las comparaciones de coma flotante." #: config/sh/sh.opt:289 -#, fuzzy -#| msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact" msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact." -msgstr "Permite el uso del modo de direccionamiento indizado para SHmedia32/SHcompact." +msgstr "Permite el uso del modo de direccionamiento indexado para SHmedia32/SHcompact." #: config/sh/sh.opt:293 -#, fuzzy -#| msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines" msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines." msgstr "Código inline para invalidar las entradas de caché de instruciones después de establecerer los trampolines de funciones anidadas." #: config/sh/sh.opt:297 -#, fuzzy -#| msgid "Assume symbols might be invalid" msgid "Assume symbols might be invalid." msgstr "Asume que los símbolos pueden ser no válidos." #: config/sh/sh.opt:301 config/arc/arc.opt:209 -#, fuzzy -#| msgid "Annotate assembler instructions with estimated addresses" msgid "Annotate assembler instructions with estimated addresses." msgstr "Anota las instrucciones de ensamblador con direcciones estimadas." #: config/sh/sh.opt:305 -#, fuzzy -#| msgid "Generate code in little endian mode" msgid "Generate code in little endian mode." msgstr "Genera código en modo little endian." #: config/sh/sh.opt:309 -#, fuzzy -#| msgid "Mark MAC register as call-clobbered" msgid "Mark MAC register as call-clobbered." msgstr "Marca los registros MAC como sobreescritos por llamada." #: config/sh/sh.opt:315 -#, fuzzy -#| msgid "Make structs a multiple of 4 bytes (warning: ABI altered)" msgid "Make structs a multiple of 4 bytes (warning: ABI altered)." -msgstr "Marca los structs como un múltiplo de 4 bytes (aviso: se altera la ABI)." +msgstr "Construye los structs como un múltiplo de 4 bytes (aviso: se altera la ABI)." #: config/sh/sh.opt:319 -#, fuzzy -#| msgid "Emit function-calls using global offset table when generating PIC" msgid "Emit function-calls using global offset table when generating PIC." msgstr "Emite llamadas a función usando la tabla de desplazamiento global al generar PIC." @@ -12617,34 +12314,26 @@ msgstr "Asume que las instrucciones pt* no capturarán" #: config/sh/sh.opt:327 -#, fuzzy -#| msgid "Shorten address references during linking" msgid "Shorten address references during linking." msgstr "Abrevia las referencias de direcciones durante el enlace." #: config/sh/sh.opt:335 msgid "Deprecated. Use -matomic= instead to select the atomic model." -msgstr "" +msgstr "Obsoleta. Utilice -matomic= en su lugar para seleccionar el modelo atómico." #: config/sh/sh.opt:339 -#, fuzzy -#| msgid "Generate code for built-in atomic operations" msgid "Specify the model for atomic operations." -msgstr "Genera código para operaciones atómicas internas." +msgstr "Especifica el modelo para operaciones atómicas." #: config/sh/sh.opt:343 msgid "Use tas.b instruction for __atomic_test_and_set." -msgstr "" +msgstr "Usa la instrucción tas.b para __atomic_test_and_set." #: config/sh/sh.opt:347 -#, fuzzy -#| msgid "Deprecated. Use -Os instead" msgid "Deprecated. Use -Os instead." msgstr "Obsoleto. Utilice en su lugar -Os." #: config/sh/sh.opt:351 -#, fuzzy -#| msgid "Cost to assume for a multiply insn" msgid "Cost to assume for a multiply insn." msgstr "Costo de asumir una instrucción multiply." @@ -12657,198 +12346,134 @@ msgstr "Pretende que una ramificación-alrededor-de-un-movimiento es un movimiento condicional." #: config/sh/sh.opt:365 -#, fuzzy -#| msgid "Enable the use of the short load instructions" msgid "Enable the use of the fsca instruction." -msgstr "Activa el uso de las instrucciones short load." +msgstr "Activa el uso de la instrucción fsca." #: config/sh/sh.opt:369 -#, fuzzy -#| msgid "Enable the use of the short load instructions" msgid "Enable the use of the fsrra instruction." -msgstr "Activa el uso de las instrucciones short load." +msgstr "Activa el uso de la instrucción fsrra." #: config/sh/sh.opt:373 msgid "Use LRA instead of reload (transitional)." -msgstr "" +msgstr "Usa LRA en lugar de reload (transicional)." #: config/fr30/fr30.opt:23 -#, fuzzy -#| msgid "Assume small address space" msgid "Assume small address space." msgstr "Asume espacio de direcciones small." #: config/mep/mep.opt:23 -#, fuzzy -#| msgid "Enable absolute difference instructions" msgid "Enable absolute difference instructions." msgstr "Activa las instrucciones de diferencia absoluta." #: config/mep/mep.opt:27 -#, fuzzy -#| msgid "Enable all optional instructions" msgid "Enable all optional instructions." msgstr "Activa todas las instrucciones opcionales." #: config/mep/mep.opt:31 -#, fuzzy -#| msgid "Enable average instructions" msgid "Enable average instructions." msgstr "Activa las instrucciones promedio." #: config/mep/mep.opt:35 -#, fuzzy -#| msgid "Variables this size and smaller go in the based section. (default 0)" msgid "Variables this size and smaller go in the based section. (default 0)." msgstr "Las variables de este tamaño y menores van en la sección basada. (por defecto 0)." #: config/mep/mep.opt:39 -#, fuzzy -#| msgid "Enable bit manipulation instructions" msgid "Enable bit manipulation instructions." msgstr "Activa las instrucciones de manipulación de bits." #: config/mep/mep.opt:43 -#, fuzzy -#| msgid "Section to put all const variables in (tiny, near, far) (no default)" msgid "Section to put all const variables in (tiny, near, far) (no default)." msgstr "Sección para poner todas las variables const en (tiny, near, far) (sin valor por defecto)." #: config/mep/mep.opt:47 -#, fuzzy -#| msgid "Enable clip instructions" msgid "Enable clip instructions." msgstr "Activa las instrucciones clip." #: config/mep/mep.opt:51 -#, fuzzy -#| msgid "Configuration name" msgid "Configuration name." msgstr "Nombre de configuración." #: config/mep/mep.opt:55 -#, fuzzy -#| msgid "Enable MeP Coprocessor" msgid "Enable MeP Coprocessor." msgstr "Habilita el Coprocesador MeP." #: config/mep/mep.opt:59 -#, fuzzy -#| msgid "Enable MeP Coprocessor with 32-bit registers" msgid "Enable MeP Coprocessor with 32-bit registers." msgstr "Habilita el Coprocesador MeP con registros de 32-bit." #: config/mep/mep.opt:63 -#, fuzzy -#| msgid "Enable MeP Coprocessor with 64-bit registers" msgid "Enable MeP Coprocessor with 64-bit registers." msgstr "Habilita el Coprocesador MeP con registros de 64-bit." #: config/mep/mep.opt:67 -#, fuzzy -#| msgid "Enable IVC2 scheduling" msgid "Enable IVC2 scheduling." msgstr "Activa la planificación IVC2." #: config/mep/mep.opt:71 -#, fuzzy -#| msgid "Const variables default to the near section" msgid "Const variables default to the near section." -msgstr "Las variables cons van por defecto a la sección near." +msgstr "Las variables const van por defecto a la sección near." #: config/mep/mep.opt:78 -#, fuzzy -#| msgid "Enable 32-bit divide instructions" msgid "Enable 32-bit divide instructions." msgstr "Activa las instrucciones divide de 32-bit." #: config/mep/mep.opt:93 -#, fuzzy -#| msgid "__io vars are volatile by default" msgid "__io vars are volatile by default." msgstr "__io vars son volatile por defecto." #: config/mep/mep.opt:97 -#, fuzzy -#| msgid "All variables default to the far section" msgid "All variables default to the far section." msgstr "Todas las variables van por defecto a la sección far." #: config/mep/mep.opt:101 -#, fuzzy -#| msgid "Enable leading zero instructions" msgid "Enable leading zero instructions." msgstr "Activa las instrucciones con ceros al inicio." #: config/mep/mep.opt:108 -#, fuzzy -#| msgid "All variables default to the near section" msgid "All variables default to the near section." msgstr "Todas las variables van por defecto a la sección near." #: config/mep/mep.opt:112 -#, fuzzy -#| msgid "Enable min/max instructions" msgid "Enable min/max instructions." msgstr "Activa las instrucciones min/max." #: config/mep/mep.opt:116 -#, fuzzy -#| msgid "Enable 32-bit multiply instructions" msgid "Enable 32-bit multiply instructions." msgstr "Activa las instrucciones multiply de 32-bit." #: config/mep/mep.opt:120 -#, fuzzy -#| msgid "Disable all optional instructions" msgid "Disable all optional instructions." msgstr "Desactiva todas las instrucciones opcionales." #: config/mep/mep.opt:127 -#, fuzzy -#| msgid "Allow gcc to use the repeat/erepeat instructions" msgid "Allow gcc to use the repeat/erepeat instructions." msgstr "Permite a gcc usar las instrucciones repeat/erepeat." #: config/mep/mep.opt:131 -#, fuzzy -#| msgid "All variables default to the tiny section" msgid "All variables default to the tiny section." msgstr "Todas las variables van por defecto a la sección tiny." #: config/mep/mep.opt:135 -#, fuzzy -#| msgid "Enable saturation instructions" msgid "Enable saturation instructions." msgstr "Activa las instrucciones de saturación." #: config/mep/mep.opt:139 -#, fuzzy -#| msgid "Use sdram version of runtime" msgid "Use sdram version of runtime." msgstr "Usa la versión sdram de tiempo de ejecución." #: config/mep/mep.opt:147 -#, fuzzy -#| msgid "Use simulator runtime without vectors" msgid "Use simulator runtime without vectors." msgstr "Usa el simulador de tiempo de ejecución sin vectores." #: config/mep/mep.opt:151 -#, fuzzy -#| msgid "All functions default to the far section" msgid "All functions default to the far section." msgstr "Todas las funciones van por defecto en la sección far." #: config/mep/mep.opt:155 -#, fuzzy -#| msgid "Variables this size and smaller go in the tiny section. (default 4)" msgid "Variables this size and smaller go in the tiny section. (default 4)." msgstr "Las variables de este tamaño y menores van en la sección tiny. (por defecto 4)." #: config/mips/mips.opt:32 -#, fuzzy -#| msgid "-mabi=ABI\tGenerate code that conforms to the given ABI" msgid "-mabi=ABI\tGenerate code that conforms to the given ABI." msgstr "-mabi=ABI\tGenera código que cumpla con la ABI dada." @@ -12857,58 +12482,40 @@ msgstr "ABIs MIPS conocidos (para uso con la opción -mabi=):" #: config/mips/mips.opt:55 -#, fuzzy -#| msgid "Generate code that can be used in SVR4-style dynamic objects" msgid "Generate code that can be used in SVR4-style dynamic objects." msgstr "Genera código que se pueda usar en objetos dinámicos de estilo SVR4." #: config/mips/mips.opt:59 -#, fuzzy -#| msgid "Use PMC-style 'mad' instructions" msgid "Use PMC-style 'mad' instructions." msgstr "Usa instrucciones 'mad' de estilo PMC." #: config/mips/mips.opt:63 -#, fuzzy -#| msgid "Use multiply add/subtract instructions" msgid "Use integer madd/msub instructions." -msgstr "Usa instrucciones acumular/sustraer de multiplicar." +msgstr "Usa instrucciones madd/msub de enteros." #: config/mips/mips.opt:67 -#, fuzzy -#| msgid "-march=ISA\tGenerate code for the given ISA" msgid "-march=ISA\tGenerate code for the given ISA." msgstr "-march=ISA\tGenera código para el ISA dado." #: config/mips/mips.opt:71 -#, fuzzy -#| msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions" msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions." msgstr "-mbranch-cost=COSTO\tEstablece el costo de las ramificaciones aproximadamente a COSTO instrucciones." #: config/mips/mips.opt:75 -#, fuzzy -#| msgid "Use Branch Likely instructions, overriding the architecture default" msgid "Use Branch Likely instructions, overriding the architecture default." -msgstr "Usa instrucciones Branch Likely, sobreponiendo el valor por defecto para la arquitectura." +msgstr "Usa instrucciones Branch Likely, anulando el valor predeterminado de la arquitectura." #: config/mips/mips.opt:79 -#, fuzzy -#| msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing" msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing." -msgstr "Activa/desactiva el ASE de MIPS16 en funciones alternates para pruebas del compilador." +msgstr "Activa/desactiva el ASE de MIPS16 en funciones alternantes para pruebas del compilador." #: config/mips/mips.opt:83 -#, fuzzy -#| msgid "Trap on integer divide by zero" msgid "Trap on integer divide by zero." msgstr "Atrapa la división entera por cero." #: config/mips/mips.opt:87 -#, fuzzy -#| msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code" msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code." -msgstr "-mcode-readable=OPCIÓN\tEspecifica cuando se permite que las instrucciones accedan código." +msgstr "-mcode-readable=OPCIÓN\tEspecifica cuándo se permite que las instrucciones accedan al código." #: config/mips/mips.opt:91 msgid "Valid arguments to -mcode-readable=:" @@ -12915,314 +12522,214 @@ msgstr "Argumentos válidos para -fcode-readable=:" #: config/mips/mips.opt:104 -#, fuzzy -#| msgid "Use branch-and-break sequences to check for integer divide by zero" msgid "Use branch-and-break sequences to check for integer divide by zero." msgstr "Usa secuencias ramifica-y-para para revisar la división entera por cero." #: config/mips/mips.opt:108 -#, fuzzy -#| msgid "Use trap instructions to check for integer divide by zero" msgid "Use trap instructions to check for integer divide by zero." msgstr "Usa instrucciones trap para revisar la división entera por cero." #: config/mips/mips.opt:112 -#, fuzzy -#| msgid "Allow the use of MDMX instructions" msgid "Allow the use of MDMX instructions." msgstr "Permite el uso de las instrucciones MDMX." #: config/mips/mips.opt:116 -#, fuzzy -#| msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations" msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations." msgstr "Permite que las instrucciones de coma flotante de hardware cubran tanto operaciones de 32-bit como de 64-bit." #: config/mips/mips.opt:120 -#, fuzzy -#| msgid "Use MIPS-DSP instructions" msgid "Use MIPS-DSP instructions." msgstr "Usa instrucciones MIPS-DSP." #: config/mips/mips.opt:124 -#, fuzzy -#| msgid "Use MIPS-DSP REV 2 instructions" msgid "Use MIPS-DSP REV 2 instructions." msgstr "Usa instrucciones MIPS-DSP REV 2." #: config/mips/mips.opt:146 -#, fuzzy -#| msgid "Use the bit-field instructions" msgid "Use Enhanced Virtual Addressing instructions." -msgstr "Usa las instrucciones de campos de bit." +msgstr "Usa las instrucciones de direccionamiento virtual mejorado." #: config/mips/mips.opt:150 -#, fuzzy -#| msgid "Use NewABI-style %reloc() assembly operators" msgid "Use NewABI-style %reloc() assembly operators." msgstr "Usa los operadores de ensamblador %reloc() del estilo NewABI." #: config/mips/mips.opt:154 -#, fuzzy -#| msgid "Use -G for data that is not defined by the current object" msgid "Use -G for data that is not defined by the current object." msgstr "Usa -G para los datos que están definidos por el objeto actual." #: config/mips/mips.opt:158 -#, fuzzy -#| msgid "Work around certain 24K errata" msgid "Work around certain 24K errata." -msgstr "Evita errores de ciertos 24K." +msgstr "Evita ciertos errores de 24K." #: config/mips/mips.opt:162 -#, fuzzy -#| msgid "Work around certain R4000 errata" msgid "Work around certain R4000 errata." -msgstr "Evita errores de ciertos R4000." +msgstr "Evita ciertos errores de R4000." #: config/mips/mips.opt:166 -#, fuzzy -#| msgid "Work around certain R4400 errata" msgid "Work around certain R4400 errata." -msgstr "Evita errores de ciertos R4400." +msgstr "Evita ciertos errores de R4400." #: config/mips/mips.opt:170 -#, fuzzy -#| msgid "Work around certain R4000 errata" msgid "Work around certain RM7000 errata." -msgstr "Evita errores de ciertos R4000." +msgstr "Evita ciertos errores de R4000." #: config/mips/mips.opt:174 -#, fuzzy -#| msgid "Work around certain R10000 errata" msgid "Work around certain R10000 errata." -msgstr "Evita errores de ciertos R10000." +msgstr "Evita ciertos errores de R10000." #: config/mips/mips.opt:178 -#, fuzzy -#| msgid "Work around errata for early SB-1 revision 2 cores" msgid "Work around errata for early SB-1 revision 2 cores." msgstr "Evita los errores para núcleos tempranos SB-1 revisión 2." #: config/mips/mips.opt:182 -#, fuzzy -#| msgid "Work around certain VR4120 errata" msgid "Work around certain VR4120 errata." -msgstr "Evita errores de ciertos VR4120." +msgstr "Evita ciertos errores de VR4120." #: config/mips/mips.opt:186 -#, fuzzy -#| msgid "Work around VR4130 mflo/mfhi errata" msgid "Work around VR4130 mflo/mfhi errata." msgstr "Evita el error mflo/mfhi del VR4130." #: config/mips/mips.opt:190 -#, fuzzy -#| msgid "Work around an early 4300 hardware bug" msgid "Work around an early 4300 hardware bug." msgstr "Evita el error de hardware de los primeros 4300." #: config/mips/mips.opt:194 -#, fuzzy -#| msgid "FP exceptions are enabled" msgid "FP exceptions are enabled." msgstr "Las excepciones FP están activadas." #: config/mips/mips.opt:198 -#, fuzzy -#| msgid "Use 32-bit floating-point registers" msgid "Use 32-bit floating-point registers." msgstr "Usa los registros de coma flotante de 32-bit." #: config/mips/mips.opt:202 msgid "Conform to the o32 FPXX ABI." -msgstr "" +msgstr "Conforma al o32 FPXX ABI." #: config/mips/mips.opt:206 -#, fuzzy -#| msgid "Use 64-bit floating-point registers" msgid "Use 64-bit floating-point registers." msgstr "Usa los registros de coma flotante de 64-bit." #: config/mips/mips.opt:210 -#, fuzzy -#| msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines" msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines." msgstr "-mflush-func=FUNC\tUsa FUNC para vaciar el caché antes de llamar a los trampolines de pila." #: config/mips/mips.opt:214 msgid "-mabs=MODE\tSelect the IEEE 754 ABS/NEG instruction execution mode." -msgstr "" +msgstr "-mabs=MODO\tSelecciona el modo de ejecución de instrucciones IEEE 754 ABS/NEG." #: config/mips/mips.opt:218 msgid "-mnan=ENCODING\tSelect the IEEE 754 NaN data encoding." -msgstr "" +msgstr "-mnan=CODIFICACIÓN\tSelecciona la codificación de datos IEEE 754 NaN." #: config/mips/mips.opt:222 -#, fuzzy -#| msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):" msgid "Known MIPS IEEE 754 settings (for use with the -mabs= and -mnan= options):" -msgstr "CPUs MIPS conocidos (para uso con las opciones -march= y -mtune=):" +msgstr "Configuración de lso MIPS IEEE 754 conocidos (para uso con las opciones -mabs= y -mnan=):" #: config/mips/mips.opt:232 -#, fuzzy -#| msgid "Use 32-bit general registers" msgid "Use 32-bit general registers." msgstr "Usa los registros generales de 32-bit." #: config/mips/mips.opt:236 -#, fuzzy -#| msgid "Use 64-bit general registers" msgid "Use 64-bit general registers." msgstr "Usa los registros generales de 64-bit." #: config/mips/mips.opt:240 -#, fuzzy -#| msgid "Use GP-relative addressing to access small data" msgid "Use GP-relative addressing to access small data." msgstr "Usa el direccionamiento relativo al GP para acceder a datos small." #: config/mips/mips.opt:244 -#, fuzzy -#| msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations" msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations." msgstr "Al generar código -mabicalls, permite que los ejecutables usen PLTs y copien reubicaciones." #: config/mips/mips.opt:248 -#, fuzzy -#| msgid "Allow the use of hardware floating-point ABI and instructions" msgid "Allow the use of hardware floating-point ABI and instructions." msgstr "Permite el uso de la ABI y las instrucciones de coma flotante de hardware." #: config/mips/mips.opt:252 -#, fuzzy -#| msgid "Generate code that can be safely linked with MIPS16 code." msgid "Generate code that is link-compatible with MIPS16 and microMIPS code." -msgstr "Genera código que se puede enlazar sin problemas con código MIPS16." +msgstr "Genera código que se puede enlazar con código MIPS16 microMIPS." #: config/mips/mips.opt:256 -#, fuzzy -#| msgid "Does nothing. Preserved for backward compatibility." msgid "An alias for minterlink-compressed provided for backward-compatibility." -msgstr "No hace nada. Preservado por compatibilidad hacia atrás." +msgstr "Sinónimo de minterlink-compressed, preservado por compatibilidad hacia atrás." #: config/mips/mips.opt:260 -#, fuzzy -#| msgid "-mipsN\tGenerate code for ISA level N" msgid "-mipsN\tGenerate code for ISA level N." msgstr "-mipsN\tGenera código para ISA nivel N." #: config/mips/mips.opt:264 -#, fuzzy -#| msgid "Generate MIPS16 code" msgid "Generate MIPS16 code." msgstr "Genera código MIPS16." #: config/mips/mips.opt:268 -#, fuzzy -#| msgid "Use MIPS-3D instructions" msgid "Use MIPS-3D instructions." msgstr "Usa instrucciones MIPS-3D." #: config/mips/mips.opt:272 -#, fuzzy -#| msgid "Use ll, sc and sync instructions" msgid "Use ll, sc and sync instructions." msgstr "Usa las instrucciones ll, sc y sync." #: config/mips/mips.opt:276 -#, fuzzy -#| msgid "Use -G for object-local data" msgid "Use -G for object-local data." msgstr "Usa -G para los datos del objeto local." #: config/mips/mips.opt:280 -#, fuzzy -#| msgid "Use indirect calls" msgid "Use indirect calls." msgstr "Usa llamadas indirectas." #: config/mips/mips.opt:284 -#, fuzzy -#| msgid "Use a 32-bit long type" msgid "Use a 32-bit long type." msgstr "Usa un tipo long de 32-bit." #: config/mips/mips.opt:288 -#, fuzzy -#| msgid "Use a 64-bit long type" msgid "Use a 64-bit long type." msgstr "Usa un tipo long de 64-bit." #: config/mips/mips.opt:292 -#, fuzzy -#| msgid "Pass the address of the ra save location to _mcount in $12" msgid "Pass the address of the ra save location to _mcount in $12." msgstr "Pasa la dirección de la ubicación de ra save a _mcount en $12." #: config/mips/mips.opt:296 -#, fuzzy -#| msgid "Don't optimize block moves" msgid "Don't optimize block moves." msgstr "No optimiza los movimientos de bloques." #: config/mips/mips.opt:300 -#, fuzzy -#| msgid "Use SmartMIPS instructions" msgid "Use microMIPS instructions." -msgstr "Usa instrucciones SmartMIPS." +msgstr "Usa instrucciones microMIPS." #: config/mips/mips.opt:304 -#, fuzzy -#| msgid "Allow the use of MT instructions" msgid "Allow the use of MT instructions." msgstr "Permite el uso de las instrucciones MT." #: config/mips/mips.opt:308 -#, fuzzy -#| msgid "Prevent the use of all floating-point operations" msgid "Prevent the use of all floating-point operations." msgstr "Previene el uso de todas las instrucciones de coma flotante." #: config/mips/mips.opt:312 -#, fuzzy -#| msgid "Use MIPS-3D instructions" msgid "Use MCU instructions." -msgstr "Usa instrucciones MIPS-3D." +msgstr "Usa instrucciones MCU." #: config/mips/mips.opt:316 -#, fuzzy -#| msgid "Do not use a cache-flushing function before calling stack trampolines" msgid "Do not use a cache-flushing function before calling stack trampolines." msgstr "No usa una función que vacíe el caché antes de llamar los trampolines de pila." #: config/mips/mips.opt:320 -#, fuzzy -#| msgid "Do not use MDMX instructions" msgid "Do not use MDMX instructions." msgstr "No usa instrucciones MDMX." #: config/mips/mips.opt:324 -#, fuzzy -#| msgid "Generate normal-mode code" msgid "Generate normal-mode code." msgstr "Genera código normal-mode." #: config/mips/mips.opt:328 -#, fuzzy -#| msgid "Do not use MIPS-3D instructions" msgid "Do not use MIPS-3D instructions." msgstr "No usa instrucciones MIPS-3D." #: config/mips/mips.opt:332 -#, fuzzy -#| msgid "Use paired-single floating-point instructions" msgid "Use paired-single floating-point instructions." msgstr "Usa instrucciones apareadas-sencillas de coma flotante." #: config/mips/mips.opt:336 -#, fuzzy -#| msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted" msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted." msgstr "-mr10k-cache-barrier=OPCIÓN\tEspecifica cuando se deben insertar las barreras de caché de r10k." @@ -13231,94 +12738,64 @@ msgstr "Argumentos válidos para -mr10k-cache-barrier=:" #: config/mips/mips.opt:353 -#, fuzzy -#| msgid "Try to allow the linker to turn PIC calls into direct calls" msgid "Try to allow the linker to turn PIC calls into direct calls." msgstr "Trata de permitir que el enlazador convierta las llamadas PIC a llamadas directas." #: config/mips/mips.opt:357 -#, fuzzy -#| msgid "When generating -mabicalls code, make the code suitable for use in shared libraries" msgid "When generating -mabicalls code, make the code suitable for use in shared libraries." msgstr "Al generar código -mabicalls, hace que el código sea adecuado para su uso en bibliotecas compartidas." #: config/mips/mips.opt:361 -#, fuzzy -#| msgid "Restrict the use of hardware floating-point instructions to 32-bit operations" msgid "Restrict the use of hardware floating-point instructions to 32-bit operations." msgstr "Restringe el uso de instrucciones de coma flotante de hardware para operaciones de 32-bit." #: config/mips/mips.opt:365 -#, fuzzy -#| msgid "Use SmartMIPS instructions" msgid "Use SmartMIPS instructions." msgstr "Usa instrucciones SmartMIPS." #: config/mips/mips.opt:369 -#, fuzzy -#| msgid "Prevent the use of all hardware floating-point instructions" msgid "Prevent the use of all hardware floating-point instructions." msgstr "Previene el uso de todas las instrucciones de coma flotante de hardware." #: config/mips/mips.opt:373 -#, fuzzy -#| msgid "Optimize lui/addiu address loads" msgid "Optimize lui/addiu address loads." msgstr "Optimiza las cargas de las direcciones lui/addiu." #: config/mips/mips.opt:377 -#, fuzzy -#| msgid "Assume all symbols have 32-bit values" msgid "Assume all symbols have 32-bit values." msgstr "Asume que todos los símbolos tienen valores de 32-bit." #: config/mips/mips.opt:381 -#, fuzzy -#| msgid "Use synci instruction to invalidate i-cache" msgid "Use synci instruction to invalidate i-cache." msgstr "Usa la instrucción synci para invalidar el i-caché." #: config/mips/mips.opt:389 -#, fuzzy -#| msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR" msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR." msgstr "-mtune=PROCESADOR\tOptimiza la salida para el PROCESADOR." #: config/mips/mips.opt:397 -#, fuzzy -#| msgid "Use decimal floating point instructions" msgid "Use Virtualization Application Specific instructions." -msgstr "Usa instrucciones de coma flotante decimal." +msgstr "Usa instrucciones específicas de aplicación de virtualización." #: config/mips/mips.opt:401 -#, fuzzy -#| msgid "Use vector/scalar (VSX) instructions" msgid "Use eXtended Physical Address (XPA) instructions." -msgstr "Usa instrucciones (VSX) vector/escalar." +msgstr "Usa instrucciones de direcciones físicas extendidas (XPA)." #: config/mips/mips.opt:405 -#, fuzzy -#| msgid "Perform VR4130-specific alignment optimizations" msgid "Perform VR4130-specific alignment optimizations." msgstr "Realiza optimizaciones de alineación específicas para VR4130." #: config/mips/mips.opt:409 -#, fuzzy -#| msgid "Lift restrictions on GOT size" msgid "Lift restrictions on GOT size." msgstr "Levanta restricciones en el tamaño de GOT." #: config/mips/mips.opt:413 -#, fuzzy -#| msgid "Don't allocate floats and doubles in extended-precision registers" msgid "Enable use of odd-numbered single-precision registers." -msgstr "No aloja floats y doubles en registros de precisión extendida." +msgstr "Activa el uso de registros de precisión sencilla impares." #: config/mips/mips.opt:417 -#, fuzzy -#| msgid "Optimize for space rather than speed" msgid "Optimize frame header." -msgstr "Optimiza para espacio en lugar de velocidad." +msgstr "Optimiza la cabecera de marco." #: config/mips/mips.opt:424 #, fuzzy @@ -13328,11 +12805,11 @@ #: config/mips/mips.opt:428 msgid "Specify the compact branch usage policy." -msgstr "" +msgstr "Especifica la política de uso de ramificación compacta." #: config/mips/mips.opt:432 msgid "Policies available for use with -mcompact-branches=:" -msgstr "" +msgstr "Políticas disponibles para usar con -mcompact-branches=:" #: config/mips/mips-tables.opt:24 msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):" @@ -13355,136 +12832,104 @@ msgstr "Compila con longs y punteros de 64 bit." #: config/tilegx/tilegx.opt:53 -#, fuzzy -#| msgid "Use given x86-64 code model" msgid "Use given TILE-Gx code model." -msgstr "Usa el modelo de código del x86-64 dado." +msgstr "Usa el modelo de código del TILE-Gx dado." #: config/arc/arc.opt:26 -#, fuzzy -#| msgid "Generate code in big endian mode" msgid "Compile code for big endian mode." -msgstr "Genera código en modo big endian." +msgstr "Compila código para modo big endian." #: config/arc/arc.opt:30 -#, fuzzy -#| msgid "Stores doubles in 32 bits. This is the default." msgid "Compile code for little endian mode. This is the default." -msgstr "Almacena dobles en 32 bits. Este es el valor por defecto." +msgstr "Compila código para modo little endian. Este es el valor predefinido." #: config/arc/arc.opt:34 msgid "Disable ARCompact specific pass to generate conditional execution instructions." -msgstr "" +msgstr "Desactiva el paso específico ARCompact para generar instrucciones de ejecución condicional." #: config/arc/arc.opt:38 msgid "Generate ARCompact 32-bit code for ARC600 processor." -msgstr "" +msgstr "Genera código de 32 bits ARCompact para el procesador ARC600." #: config/arc/arc.opt:42 -#, fuzzy -#| msgid "Same as -mcpu=i386" msgid "Same as -mA6." -msgstr "Igual que -mcpu=i386." +msgstr "Igual que -mA6." #: config/arc/arc.opt:46 msgid "Generate ARCompact 32-bit code for ARC601 processor." -msgstr "" +msgstr "Genera código de 32 bits ARCompact para el procesador ARC601." #: config/arc/arc.opt:50 msgid "Generate ARCompact 32-bit code for ARC700 processor." -msgstr "" +msgstr "Genera código de 32 bits ARCompact para el procesador ARC700." #: config/arc/arc.opt:54 -#, fuzzy -#| msgid "Same as -mcpu=i386" msgid "Same as -mA7." -msgstr "Igual que -mcpu=i386." +msgstr "Igual que -mA7." #: config/arc/arc.opt:58 msgid "-mmpy-option={0,1,2,3,4,5,6,7,8,9} Compile ARCv2 code with a multiplier design option. Option 2 is default on." -msgstr "" +msgstr "-mmpy-option={0,1,2,3,4,5,6,7,8,9} Compila código ARCv2 con una opción de diseño de multiplicador. La opción 2 es la activa predefinida." #: config/arc/arc.opt:62 -#, fuzzy -#| msgid "Enable clip instructions" msgid "Enable DIV-REM instructions for ARCv2." -msgstr "Activa las instrucciones clip." +msgstr "Activa las instrucciones DIV-REM para ARCv2." #: config/arc/arc.opt:66 -#, fuzzy -#| msgid "Enable barrel shift instructions" msgid "Enable code density instructions for ARCv2." -msgstr "Activa las instrucciones barrel shift." +msgstr "Activa las instrucciones de densidad de código para ARCv2." #: config/arc/arc.opt:70 -#, fuzzy -#| msgid "preferentially allocate registers that allow short instruction generation." msgid "Tweak register allocation to help 16-bit instruction generation." -msgstr "aloja de preferencia registros que permitan la generación de instrucciones short." +msgstr "Retoca la asignación de registros para ayudar a la generación de instrucciones de 16 bits." #: config/arc/arc.opt:80 msgid "Use ordinarily cached memory accesses for volatile references." -msgstr "" +msgstr "Usa accesos normales a memoria cacheada para referencias volátiles." #: config/arc/arc.opt:84 -#, fuzzy -#| msgid "Don't use data cache for volatile mem refs" msgid "Enable cache bypass for volatile references." -msgstr "No usar el caché de datos para referencias a memoria volatile." +msgstr "Activa el bypass de caché para referencias volátiles." #: config/arc/arc.opt:88 -#, fuzzy -#| msgid "Generate string instructions for block moves" msgid "Generate instructions supported by barrel shifter." -msgstr "Genera instrucciones de cadena para movimiento de bloques." +msgstr "Genera instrucciones admitidas por el barrel shift." #: config/arc/arc.opt:92 -#, fuzzy -#| msgid "Generate bit instructions" msgid "Generate norm instruction." -msgstr "Genera instrucciones bit." +msgstr "Genera instrucciones norm." #: config/arc/arc.opt:96 -#, fuzzy -#| msgid "Generate isel instructions" msgid "Generate swap instruction." -msgstr "Genera instrucciones isel." +msgstr "Genera instrucciones swap." #: config/arc/arc.opt:100 -#, fuzzy -#| msgid "Generate load/store multiple instructions" msgid "Generate mul64 and mulu64 instructions." -msgstr "Genera múltiples instrucciones load/store." +msgstr "Genera instrucciones mul64 y mulu64." #: config/arc/arc.opt:104 -#, fuzzy -#| msgid "Do not generate multm instructions" msgid "Do not generate mpy instructions for ARC700." -msgstr "No generar instrucciones multm." +msgstr "No generar instrucciones mpy para ARC700." #: config/arc/arc.opt:108 msgid "Generate Extended arithmetic instructions. Currently only divaw, adds, subs and sat16 are supported." -msgstr "" +msgstr "Genera instrucciones de aritmética extendida. Actualmente solo se dispone de divaw, adds, subs y sat16." #: config/arc/arc.opt:112 msgid "Dummy flag. This is the default unless FPX switches are provided explicitly." -msgstr "" +msgstr "Indicador tonto. Es el predefinido a menos que que se proporcionen switches FPX explícitamente." #: config/arc/arc.opt:116 -#, fuzzy -#| msgid "Generate call insns as indirect calls" msgid "Generate call insns as register indirect calls." -msgstr "Genera las llamadas insns como llamadas indirectas." +msgstr "Genera las llamadas insns como llamadas indirectas de registros." #: config/arc/arc.opt:120 -#, fuzzy -#| msgid "Do not generate char instructions" msgid "Do no generate BRcc instructions in arc_reorg." -msgstr "No generar instrucciones char." +msgstr "No generar instrucciones BRcc en arc_reorg." #: config/arc/arc.opt:124 msgid "Generate sdata references. This is the default, unless you compile for PIC." -msgstr "" +msgstr "Generar referencias de sdata. Es lo predefinido, salvo que se compile para PIC." #: config/arc/arc.opt:128 #, fuzzy @@ -13494,419 +12939,316 @@ #: config/arc/arc.opt:132 config/arc/arc.opt:136 msgid "FPX: Generate Single Precision FPX (compact) instructions." -msgstr "" +msgstr "FPX: Generar instrucciones FPX de precisión sencilla (compactas)." #: config/arc/arc.opt:140 -#, fuzzy -#| msgid "Generate bit instructions" msgid "FPX: Generate Single Precision FPX (fast) instructions." -msgstr "Genera instrucciones bit." +msgstr "FPX: Generar instrucciones FPX de precisión sencilla (rápidas)." #: config/arc/arc.opt:144 msgid "FPX: Enable Argonaut ARC CPU Double Precision Floating Point extensions." -msgstr "" +msgstr "FPX: Activar las extensiones de coma flotante de doble precisión de la CPU Argonaut ARC." #: config/arc/arc.opt:148 config/arc/arc.opt:152 -#, fuzzy -#| msgid "Generate bit instructions" msgid "FPX: Generate Double Precision FPX (compact) instructions." -msgstr "Genera instrucciones bit." +msgstr "FPX: Generar instrucciones FPX de precisión doble (compactas)." #: config/arc/arc.opt:156 -#, fuzzy -#| msgid "Generate bit instructions" msgid "FPX: Generate Double Precision FPX (fast) instructions." -msgstr "Genera instrucciones bit." +msgstr "FPX: Generar instrucciones FPX de precisión doble (rápidas)." #: config/arc/arc.opt:160 msgid "Disable LR and SR instructions from using FPX extension aux registers." -msgstr "" +msgstr "Desactivar en las instrucciones LR y SR el uso de registros auxiliares de la extensión FPX." #: config/arc/arc.opt:164 msgid "Enable generation of ARC SIMD instructions via target-specific builtins." -msgstr "" +msgstr "Activar la generación de instrucciones ARC SIMD mediante funciones internas específicas de objetivo." #: config/arc/arc.opt:168 -#, fuzzy -#| msgid "-mcpu=CPU\tCompile code for ARC variant CPU" msgid "-mcpu=CPU\tCompile code for ARC variant CPU." -msgstr "-mcpu=CPU\tCompila código para el CPU de variante ARC." +msgstr "-mcpu=CPU\tCompila código para la CPU de variante ARC." #: config/arc/arc.opt:205 msgid "size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os." -msgstr "" +msgstr "nivel de optimización del tamaño: 0:nada 1:oportunista 2:regalloc 3:alineación libre, -Os." #: config/arc/arc.opt:213 -#, fuzzy -#| msgid "Cost to assume for a multiply insn" msgid "Cost to assume for a multiply instruction, with 4 being equal to a normal insn." -msgstr "Costo de asumir una instrucción multiply." +msgstr "Costo de asumir una instrucción multiply, siendo 4 el de una instrucción normal." #: config/arc/arc.opt:217 msgid "Tune for ARC600 cpu." -msgstr "" +msgstr "Afinado para cpu ARC600." #: config/arc/arc.opt:221 msgid "Tune for ARC601 cpu." -msgstr "" +msgstr "Afinado para cpu ARC601." #: config/arc/arc.opt:225 msgid "Tune for ARC700 R4.2 Cpu with standard multiplier block." -msgstr "" +msgstr "Afinado para Cpu ARC700 R4.2 con bloque multiplicador estándar." #: config/arc/arc.opt:229 config/arc/arc.opt:233 config/arc/arc.opt:237 msgid "Tune for ARC700 R4.2 Cpu with XMAC block." -msgstr "" +msgstr "Afinado para Cpu ARC700 R4.2 con bloque XMAC." #: config/arc/arc.opt:241 -#, fuzzy -#| msgid "Enable the use of the short load instructions" msgid "Enable the use of indexed loads." -msgstr "Activa el uso de las instrucciones short load." +msgstr "Activa el uso de loads indexadas." #: config/arc/arc.opt:245 msgid "Enable the use of pre/post modify with register displacement." -msgstr "" +msgstr "Activa el uso de pre/post modify con desplazamiento de registro." #: config/arc/arc.opt:249 -#, fuzzy -#| msgid "Generate fused multiply/add instructions" msgid "Generate 32x16 multiply and mac instructions." -msgstr "Genera instrucciones multiply/add de corto circuito." +msgstr "Genera instrucciones multiply y mac de 32x16." #: config/arc/arc.opt:255 msgid "Set probability threshold for unaligning branches." -msgstr "" +msgstr "Establece el umbral de probabilidad para ramificaciones desalineadas." #: config/arc/arc.opt:259 msgid "Don't use less than 25 bit addressing range for calls." -msgstr "" +msgstr "No utilizar rango de direccionamiento de menos de 25 bits para llamadas." #: config/arc/arc.opt:263 msgid "Explain what alignment considerations lead to the decision to make an insn short or long." -msgstr "" +msgstr "Explicar qué consideraciones de alineamiento llevan a la decisión de hacer una insn corta o larga." #: config/arc/arc.opt:267 -#, fuzzy -#| msgid "Avoid all range limits on call instructions" msgid "Do alignment optimizations for call instructions." -msgstr "Evita todos los límites de rango en las instrucciones de llamadas." +msgstr "Efectúa optimizaciones de alineamiento en las instrucciones de llamadas." #: config/arc/arc.opt:271 msgid "Enable Rcq constraint handling - most short code generation depends on this." -msgstr "" +msgstr "Activa el manejo de restricciones Rcq - la mayor parte de la generación de código corto depende de esto." #: config/arc/arc.opt:275 msgid "Enable Rcw constraint handling - ccfsm condexec mostly depends on this." -msgstr "" +msgstr "Activa el manejo de restricciones Rcw - la ejecución condicional ccfsd depende principalmente de esto." #: config/arc/arc.opt:279 -#, fuzzy -#| msgid "Enable cbranchdi4 pattern" msgid "Enable pre-reload use of cbranchsi pattern." -msgstr "Activa el patrón cbranchdi4." +msgstr "Activa el uso pre-recarga del patrón cbranchsi." #: config/arc/arc.opt:283 msgid "Enable bbit peephole2." -msgstr "" +msgstr "Activa bbit peephole2." #: config/arc/arc.opt:287 msgid "Use pc-relative switch case tables - this enables case table shortening." -msgstr "" +msgstr "Usa tables switch case relativas a contador de programa - esto activa el acortamiento de tablas case." #: config/arc/arc.opt:291 -#, fuzzy -#| msgid "Enable cbranchdi4 pattern" msgid "Enable compact casesi pattern." -msgstr "Activa el patrón cbranchdi4." +msgstr "Activa el patrón casesi compacto." #: config/arc/arc.opt:295 -#, fuzzy -#| msgid "Enable clip instructions" msgid "Enable 'q' instruction alternatives." -msgstr "Activa las instrucciones clip." +msgstr "Activa las instrucciones alternativas 'q'." #: config/arc/arc.opt:299 msgid "Expand adddi3 and subdi3 at rtl generation time into add.f / adc etc." -msgstr "" +msgstr "Expande adddi3 y subdi3 en tiempo de generación de rtl en add.f / adc, etc." #: config/arc/arc.opt:306 msgid "Enable variable polynomial CRC extension." -msgstr "" +msgstr "Activa la extensión de CRC polinómico variable." #: config/arc/arc.opt:310 -#, fuzzy -#| msgid "Enable Plan 9 language extensions" msgid "Enable DSP 3.1 Pack A extensions." -msgstr "Activa las extensiones de lenguaje de Plan9." +msgstr "Activa las extensiones DSP 3.1 Pack A." #: config/arc/arc.opt:314 -#, fuzzy -#| msgid "Enable linker relaxation." msgid "Enable dual viterbi butterfly extension." -msgstr "Activa la relajación del enlazador." +msgstr "Activa la la extensión dual viterbi butterfly." #: config/arc/arc.opt:324 -#, fuzzy -#| msgid "Enable leading zero instructions" msgid "Enable Dual and Single Operand Instructions for Telephony." -msgstr "Activa las instrucciones con ceros al inicio." +msgstr "Activa las instrucciones de operando dual y único para telefonía." #: config/arc/arc.opt:328 msgid "Enable XY Memory extension (DSP version 3)." -msgstr "" +msgstr "Activa la extensión XY Memory (DSP versión 3)." #: config/arc/arc.opt:333 -#, fuzzy -#| msgid "Enable hoisting loads from conditional pointers." msgid "Enable Locked Load/Store Conditional extension." -msgstr "Activa las cargas de elevación de punteros condicionales." +msgstr "Activa la extensión condicional load/store bloqueada." #: config/arc/arc.opt:337 -#, fuzzy -#| msgid "Enable sign extend instructions" msgid "Enable swap byte ordering extension instruction." -msgstr "Activa las instrucciones de signo extendido." +msgstr "Activa la instrucción de extensión del orden de byte de intercambio." #: config/arc/arc.opt:341 -#, fuzzy -#| msgid "Enable bit manipulation instructions" msgid "Enable 64-bit Time-Stamp Counter extension instruction." -msgstr "Activa las instrucciones de manipulación de bits." +msgstr "Activa la instrucción de extensión del contador de sello de tiempo de 64 bits." #: config/arc/arc.opt:345 -#, fuzzy -#| msgid "Pass -z text to linker" msgid "Pass -EB option through to linker." -msgstr "Pasa -z texto al enlazador." +msgstr "Pasa la opción -EB al enlazador." #: config/arc/arc.opt:349 -#, fuzzy -#| msgid "Pass -z text to linker" msgid "Pass -EL option through to linker." -msgstr "Pasa -z texto al enlazador." +msgstr "Pasa la opción -EL al enlazador." #: config/arc/arc.opt:353 -#, fuzzy -#| msgid "Pass -z text to linker" msgid "Pass -marclinux option through to linker." -msgstr "Pasa -z texto al enlazador." +msgstr "Pasa la opción -marclinux al enlazador." #: config/arc/arc.opt:357 msgid "Pass -marclinux_prof option through to linker." -msgstr "" +msgstr "Pasa la opción -marclinux_prof al enlazador." #: config/arc/arc.opt:365 -#, fuzzy -#| msgid "Enable linker relaxation." msgid "Enable lra." -msgstr "Activa la relajación del enlazador." +msgstr "Activa lra." #: config/arc/arc.opt:369 msgid "Don't indicate any priority with TARGET_REGISTER_PRIORITY." -msgstr "" +msgstr "No indica ninguna prioridad con TARGET_REGISTER_PRIORITY." #: config/arc/arc.opt:373 msgid "Indicate priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY." -msgstr "" +msgstr "Indica prioridad para r0..r3 / r12..r15 con TARGET_REGISTER_PRIORITY." #: config/arc/arc.opt:377 msgid "Reduce priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY." -msgstr "" +msgstr "Reduce prioridad para r0..r3 / r12..r15 con TARGET_REGISTER_PRIORITY." #: config/arc/arc.opt:381 msgid "instrument with mcount calls as in the ucb code." -msgstr "" +msgstr "instrumenta con llamadas mcount como en el código ucb." #: config/arc/arc.opt:411 -#, fuzzy -#| msgid "Enable clip instructions" msgid "Enable atomic instructions." -msgstr "Activa las instrucciones clip." +msgstr "Activa instrucciones atómicas." #: config/arc/arc.opt:415 -#, fuzzy -#| msgid "Enable unaligned load/store instruction" msgid "Enable double load/store instructions for ARC HS." -msgstr "Activa la instrucción load/store sin alineación." +msgstr "Activa las instrucciones dobles load/store para ARC HS." #: config/arc/arc.opt:419 -#, fuzzy -#| msgid "Specify the name of the target floating point hardware/format" msgid "Specify the name of the target floating point configuration." -msgstr "Especifica el nombre del hardware/formato de coma flotante destino." +msgstr "Especifica el nombre de la configuración de coma flotante destino." #: java/lang.opt:122 -#, fuzzy -#| msgid "Warn if deprecated empty statements are found" msgid "Warn if deprecated empty statements are found." msgstr "Avisa si se encuentran declaraciones vacías obsoletas." #: java/lang.opt:126 -#, fuzzy -#| msgid "Warn if .class files are out of date" msgid "Warn if .class files are out of date." msgstr "Avisa si los ficheros .class están desactualizados." #: java/lang.opt:130 -#, fuzzy -#| msgid "Warn if modifiers are specified when not necessary" msgid "Warn if modifiers are specified when not necessary." msgstr "Avisa si se especifican modificadores cuando no son necesarios." #: java/lang.opt:150 -#, fuzzy -#| msgid "--CLASSPATH\tDeprecated; use --classpath instead" msgid "--CLASSPATH\tDeprecated; use --classpath instead." msgstr "--CLASSPATH\tObsoleto; use en su lugar --classpath." #: java/lang.opt:157 -#, fuzzy -#| msgid "Permit the use of the assert keyword" msgid "Permit the use of the assert keyword." msgstr "Permite el uso de la palabra clave assert." #: java/lang.opt:179 -#, fuzzy -#| msgid "--bootclasspath=\tReplace system path" msgid "--bootclasspath=\tReplace system path." msgstr "--bootclasspath=\tReemplaza la ruta del sistema." #: java/lang.opt:183 -#, fuzzy -#| msgid "Generate checks for references to NULL" msgid "Generate checks for references to NULL." msgstr "Genera revisiones para referencias a NULL." #: java/lang.opt:187 -#, fuzzy -#| msgid "--classpath=\tSet class path" msgid "--classpath=\tSet class path." msgstr "--classpath=\tEstablece la ruta de clases." #: java/lang.opt:194 -#, fuzzy -#| msgid "Output a class file" msgid "Output a class file." msgstr "Genera un fichero clase como salida." #: java/lang.opt:198 -#, fuzzy -#| msgid "Alias for -femit-class-file" msgid "Alias for -femit-class-file." msgstr "Alias para -femit-class-file." #: java/lang.opt:202 -#, fuzzy -#| msgid "--encoding=\tChoose input encoding (defaults from your locale)" msgid "--encoding=\tChoose input encoding (defaults from your locale)." msgstr "--encoding=\tEscoge la codificación de entrada (por defecto viene del local)." #: java/lang.opt:206 -#, fuzzy -#| msgid "--extdirs=\tSet the extension directory path" msgid "--extdirs=\tSet the extension directory path." msgstr "--extdirs=\tEstablece la ruta del directorio de extensiones." #: java/lang.opt:216 -#, fuzzy -#| msgid "Input file is a file with a list of filenames to compile" msgid "Input file is a file with a list of filenames to compile." msgstr "El fichero de entrada es un fichero con la lista de nombres de fichero a compilar." #: java/lang.opt:223 -#, fuzzy -#| msgid "Always check for non gcj generated classes archives" msgid "Always check for non gcj generated classes archives." msgstr "Revisa siempre por archivos de clases no generados por gcj." #: java/lang.opt:227 -#, fuzzy -#| msgid "Assume the runtime uses a hash table to map an object to its synchronization structure" msgid "Assume the runtime uses a hash table to map an object to its synchronization structure." msgstr "Asume que el tiempo de ejecución usa una tabla hash para mapear un objeto a su estructura de sincronización." #: java/lang.opt:231 -#, fuzzy -#| msgid "Generate instances of Class at runtime" msgid "Generate instances of Class at runtime." msgstr "Genera instancias de Class en tiempo de ejecución." #: java/lang.opt:235 -#, fuzzy -#| msgid "Use offset tables for virtual method calls" msgid "Use offset tables for virtual method calls." msgstr "Utiliza tablas de desplazamiento para llamadas a métodos virtuales." #: java/lang.opt:242 -#, fuzzy -#| msgid "Assume native functions are implemented using JNI" msgid "Assume native functions are implemented using JNI." msgstr "Asume que las funciones nativas se implementan usando JNI." #: java/lang.opt:246 -#, fuzzy -#| msgid "Enable optimization of static class initialization code" msgid "Enable optimization of static class initialization code." msgstr "Activa la optimización del código de inicialización de las clases static." #: java/lang.opt:253 -#, fuzzy -#| msgid "Reduce the amount of reflection meta-data generated" msgid "Reduce the amount of reflection meta-data generated." msgstr "Reduce la cantidad de metadatos de reflexión generados." #: java/lang.opt:257 -#, fuzzy -#| msgid "Enable assignability checks for stores into object arrays" msgid "Enable assignability checks for stores into object arrays." msgstr "Activa revisiones de asignabilidad para almacenamientos en matrices de objetos." #: java/lang.opt:261 -#, fuzzy -#| msgid "Generate code for the Boehm GC" msgid "Generate code for the Boehm GC." msgstr "Genera código para el GC de Boehm." #: java/lang.opt:265 -#, fuzzy -#| msgid "Call a library routine to do integer divisions" msgid "Call a library routine to do integer divisions." msgstr "Llama a una rutina de biblioteca para hacer divisiones enteras." #: java/lang.opt:269 -#, fuzzy -#| msgid "Generate code for built-in atomic operations" msgid "Generate code for built-in atomic operations." msgstr "Genera código para operaciones atómicas internas." #: java/lang.opt:273 -#, fuzzy -#| msgid "Generated should be loaded by bootstrap loader" msgid "Generated should be loaded by bootstrap loader." msgstr "El generado se debe cargar con el cargador de arranque." #: java/lang.opt:277 -#, fuzzy -#| msgid "Set the source language version" msgid "Set the source language version." msgstr "Establece la versión del lenguaje fuente." #: java/lang.opt:281 -#, fuzzy -#| msgid "Set the target VM version" msgid "Set the target VM version." msgstr "Establece la versión de la MV destino." #: lto/lang.opt:28 -#, fuzzy, c-format -#| msgid "unknown architecture %qs" +#, c-format msgid "unknown linker output %qs" -msgstr "arquitectura %qs desconocida" +msgstr "salida %qs del enlazador desconocida" #: lto/lang.opt:47 msgid "Set linker output type (used internally during LTO optimization)" -msgstr "" +msgstr "Establece el tipo de salida del enlazador (usado internamente durante la optimización LTO)" #: lto/lang.opt:52 msgid "Run the link-time optimizer in local transformation (LTRANS) mode." @@ -13922,165 +13264,113 @@ #: lto/lang.opt:64 msgid "Whole program analysis (WPA) mode with number of parallel jobs specified." -msgstr "" +msgstr "Modo de análisis del programa completo (WPA) con número de trabajos paralelos especificado." #: lto/lang.opt:68 -#, fuzzy -#| msgid "The resolution file" msgid "The resolution file." msgstr "El fichero de resolución." #: common.opt:235 -#, fuzzy -#| msgid "Enable user-defined instructions" msgid "Enable coverage-guided fuzzing code instrumentation." -msgstr "Activa las instrucciones definidas por el usuario." +msgstr "Activa la instrumentación de código borrosa guiada por cobertura." #: common.opt:302 -#, fuzzy -#| msgid "Display this information" msgid "Display this information." msgstr "Muestra esta información." #: common.opt:306 -#, fuzzy -#| msgid "--help=\tDisplay descriptions of a specific class of options. is one or more of optimizers, target, warnings, undocumented, params" msgid "--help=\tDisplay descriptions of a specific class of options. is one or more of optimizers, target, warnings, undocumented, params." msgstr "--help=\tMuestra las descripciones para una clase específica de opciones. es uno o más de optimizers, target, warnings, undocumented, params." #: common.opt:424 -#, fuzzy -#| msgid "Alias for --help=target" msgid "Alias for --help=target." -msgstr "Alias para -mhelp=target." +msgstr "Alias para --help=target." #: common.opt:449 -#, fuzzy -#| msgid "--param =\tSet parameter to value. See below for a complete list of parameters" msgid "--param =\tSet parameter to value. See below for a complete list of parameters." msgstr "--param =\tEstablece el parámetro al valor. Vea a continuación una lista completa de parámetros." #: common.opt:477 -#, fuzzy -#| msgid "-O\tSet optimization level to " msgid "-O\tSet optimization level to ." msgstr "-O\tEstablece el nivel de optimización a ." #: common.opt:481 -#, fuzzy -#| msgid "Optimize for space rather than speed" msgid "Optimize for space rather than speed." msgstr "Optimiza para espacio en lugar de velocidad." #: common.opt:485 -#, fuzzy -#| msgid "Optimize for speed disregarding exact standards compliance" msgid "Optimize for speed disregarding exact standards compliance." msgstr "Optimiza para velocidad descartando el cumplimento exacto de estándares." #: common.opt:489 -#, fuzzy -#| msgid "Optimize for space rather than speed" msgid "Optimize for debugging experience rather than speed or size." -msgstr "Optimiza para espacio en lugar de velocidad." +msgstr "Optimiza para experiencia de depuración en lugar de velocidad o tamaño." #: common.opt:529 -#, fuzzy -#| msgid "This switch is deprecated; use -Wextra instead" msgid "This switch is deprecated; use -Wextra instead." msgstr "Esta opción es obsoleta; utilice en su lugar -Wextra." #: common.opt:542 -#, fuzzy -#| msgid "Warn about returning structures, unions or arrays" msgid "Warn about returning structures, unions or arrays." msgstr "Avisa sobre la devolución de estructuras, unions o matrices." #: common.opt:546 msgid "Warn if a loop with constant number of iterations triggers undefined behavior." -msgstr "" +msgstr "Avisa si un bucle con un número constante de iteraciones provoca un comportamiento indefinido." #: common.opt:550 common.opt:554 -#, fuzzy -#| msgid "Warn if an array is accessed out of bounds" msgid "Warn if an array is accessed out of bounds." msgstr "Avisa si se accede a una matriz fuera de los límites." #: common.opt:558 -#, fuzzy -#| msgid "Warn about inappropriate attribute usage" msgid "Warn about inappropriate attribute usage." msgstr "Avisa sobre la aritmética de punteros de funciones." #: common.opt:562 -#, fuzzy -#| msgid "Warn about pointer casts which increase alignment" msgid "Warn about pointer casts which increase alignment." msgstr "Avisa sobre conversión de punteros que incremente la alineación." #: common.opt:566 -#, fuzzy -#| msgid "Warn when a #warning directive is encountered" msgid "Warn when a #warning directive is encountered." msgstr "Avisa cuando se encuentra una directiva #warning." #: common.opt:570 -#, fuzzy -#| msgid "Warn about uses of __attribute__((deprecated)) declarations" msgid "Warn about uses of __attribute__((deprecated)) declarations." msgstr "Avisa sobre usos de declaraciones __attribute__((obsoleto))." #: common.opt:574 -#, fuzzy -#| msgid "Warn when an optimization pass is disabled" msgid "Warn when an optimization pass is disabled." msgstr "Avisa cuando se desactiva un paso de optimización." #: common.opt:578 -#, fuzzy -#| msgid "Treat all warnings as errors" msgid "Treat all warnings as errors." msgstr "Trata todos los avisos como errores." #: common.opt:582 -#, fuzzy -#| msgid "Treat specified warning as error" msgid "Treat specified warning as error." msgstr "Trata el aviso especificado como error." #: common.opt:586 -#, fuzzy -#| msgid "Print extra (possibly unwanted) warnings" msgid "Print extra (possibly unwanted) warnings." msgstr "Muestra avisos extra (posiblemente no deseados)." #: common.opt:590 -#, fuzzy -#| msgid "Exit on the first error occurred" msgid "Exit on the first error occurred." msgstr "Termina cuando sucede el primer error." #: common.opt:594 -#, fuzzy -#| msgid "-Wframe-larger-than=\tWarn if a function's stack frame requires more than bytes" msgid "-Wframe-larger-than=\tWarn if a function's stack frame requires more than bytes." msgstr "-Wframe-larger-than=\tAvisa si el marco de la pila de una función requiere más de bytes." #: common.opt:598 -#, fuzzy -#| msgid "Warn when attempting to free a non-heap object" msgid "Warn when attempting to free a non-heap object." msgstr "Avisa cuando se intenta liberar un objeto que no es de pila." #: common.opt:602 -#, fuzzy -#| msgid "Warn when an inlined function cannot be inlined" msgid "Warn when a function cannot be expanded to HSAIL." -msgstr "Avisa cuando una función incluida en línea no se puede incluir en línea." +msgstr "Avisa cuando una función no se puede expandir a HSAIL." #: common.opt:606 -#, fuzzy -#| msgid "Warn when an inlined function cannot be inlined" msgid "Warn when an inlined function cannot be inlined." msgstr "Avisa cuando una función incluida en línea no se puede incluir en línea." @@ -14089,18 +13379,16 @@ msgstr "Avisa cuando un parámetro de modelo de memoria atomic se reconoce que está fuera del rango válido." #: common.opt:617 -#, fuzzy -#| msgid "-Wlarger-than=\tWarn if an object is larger than bytes" msgid "-Wlarger-than=\tWarn if an object is larger than bytes." msgstr "-Wlarger-than=\tAvisa si un objeto es más grande que bytes." #: common.opt:621 msgid "Warn if comparing pointer parameter with nonnull attribute with NULL." -msgstr "" +msgstr "Avisa si se compara parámetro puntero con atributo no nulo con NULL." #: common.opt:625 msgid "Warn if dereferencing a NULL pointer may lead to erroneous or undefined behavior." -msgstr "" +msgstr "Avisa si la desreferencia de un puntero NULL puede llevar a un comportamiento erróneo o indefinido." #: common.opt:629 msgid "Warn if the loop cannot be optimized due to nontrivial assumptions." @@ -14108,249 +13396,175 @@ #: common.opt:636 msgid "Warn about some C++ One Definition Rule violations during link time optimization." -msgstr "" +msgstr "Advierto de algunas violaciones de la regla de una definición de C++ durante la optimización de tiempo de enlazado." #: common.opt:640 -#, fuzzy -#| msgid "Warn about overflow in arithmetic expressions" msgid "Warn about overflow in arithmetic expressions." msgstr "Avisa sobre desbordamiento por debajo en expresiones numéricas." #: common.opt:644 msgid "During link time optimization warn about mismatched types of global declarations." -msgstr "" +msgstr "Durante la optimización en tiempo de enlazado advierte de tipos de declaraciones globales que no casan." #: common.opt:648 -#, fuzzy -#| msgid "Warn when the packed attribute has no effect on struct layout" msgid "Warn when the packed attribute has no effect on struct layout." msgstr "Avisa cuando el atributo packed no tiene efecto en la disposición de un struct." #: common.opt:652 -#, fuzzy -#| msgid "Warn when padding is required to align structure members" msgid "Warn when padding is required to align structure members." msgstr "Avisa cuando se requiere relleno para alinear a los miembros de una estructura." #: common.opt:656 -#, fuzzy -#| msgid "Issue warnings needed for strict compliance to the standard" msgid "Issue warnings needed for strict compliance to the standard." msgstr "Activa los avisos necesarios para cumplir estrictamente con el estándar." #: common.opt:660 -#, fuzzy -#| msgid "returning reference to temporary" msgid "Warn about returning a pointer/reference to a local or temporary variable." -msgstr "se devuelve la referencia al temporal." +msgstr "Advierte del retorno de puntero/referencia a variable local o temporal." #: common.opt:664 -#, fuzzy -#| msgid "Warn when one local variable shadows another" msgid "Warn when one local variable shadows another." -msgstr "Avisa cuando una variable local oscurece otra." +msgstr "Avisa cuando una variable local oculta otra." #: common.opt:668 -#, fuzzy -#| msgid "Warn when not issuing stack smashing protection for some reason" msgid "Warn when not issuing stack smashing protection for some reason." msgstr "Avisa cuando no se está usando la protección contra destrucción de la pila por alguna razón." #: common.opt:672 -#, fuzzy -#| msgid "Warn if stack usage might be larger than specified amount" msgid "Warn if stack usage might be larger than specified amount." msgstr "Avisa si el uso de pila puede ser mayor que el monto especificado." #: common.opt:676 common.opt:680 -#, fuzzy -#| msgid "Warn about code which might break strict aliasing rules" msgid "Warn about code which might break strict aliasing rules." msgstr "Avisa sobre código que pueda romper las reglas estrictas de aliases." #: common.opt:684 common.opt:688 -#, fuzzy -#| msgid "Warn about optimizations that assume that signed overflow is undefined" msgid "Warn about optimizations that assume that signed overflow is undefined." msgstr "Desactiva las optimizaciones que asumen que un desbordamiento con signo está indefinido." #: common.opt:692 -#, fuzzy -#| msgid "Warn about functions which might be candidates for __attribute__((const))" msgid "Warn about functions which might be candidates for __attribute__((const))." msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute__((const))." #: common.opt:696 -#, fuzzy -#| msgid "Warn about functions which might be candidates for __attribute__((pure))" msgid "Warn about functions which might be candidates for __attribute__((pure))." msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute__((pure))." #: common.opt:700 -#, fuzzy -#| msgid "Warn about functions which might be candidates for __attribute__((noreturn))" msgid "Warn about functions which might be candidates for __attribute__((noreturn))." msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute((noreturn))." #: common.opt:704 msgid "Warn about C++ polymorphic types where adding final keyword would improve code quality." -msgstr "" +msgstr "Advierte de tipos polimórficos en C++ cuando añadir la palabra clave final mejoraría la calidad del código." #: common.opt:708 msgid "Warn about C++ virtual methods where adding final keyword would improve code quality." -msgstr "" +msgstr "Advierte de métodos virtuales en C++ cuando añadir la palabra clave final mejoraría la calidad del código." #: common.opt:712 -#, fuzzy -#| msgid "Do not suppress warnings from system headers" msgid "Do not suppress warnings from system headers." msgstr "No suprime los avisos de los encabezados del sistema." #: common.opt:716 -#, fuzzy -#| msgid "Warn whenever a trampoline is generated" msgid "Warn whenever a trampoline is generated." -msgstr "Avisa cuando se genera un trampolín." +msgstr "Avisa siempre que se genera un trampolín." #: common.opt:720 -#, fuzzy -#| msgid "Warn if a comparison is always true or always false due to the limited range of the data type" msgid "Warn if a comparison is always true or always false due to the limited range of the data type." msgstr "Avisa si la comparación es siempre verdadera o siempre falsa debido al rango limitado del tipo de datos." #: common.opt:724 -#, fuzzy -#| msgid "Warn about uninitialized automatic variables" msgid "Warn about uninitialized automatic variables." msgstr "Avisa sobre variables automáticas sin inicializar." #: common.opt:728 -#, fuzzy -#| msgid "Warn about maybe uninitialized automatic variables" msgid "Warn about maybe uninitialized automatic variables." msgstr "Avisa sobre variables automáticas probablemente sin inicializar." #: common.opt:736 -#, fuzzy -#| msgid "Enable all -Wunused- warnings" msgid "Enable all -Wunused- warnings." msgstr "Activa todos los avisos -Wunused-." #: common.opt:740 -#, fuzzy -#| msgid "Warn when a function parameter is only set, otherwise unused" msgid "Warn when a function parameter is only set, otherwise unused." msgstr "Avisa cuando sólo se define un parámetro de función, y no se usa posteriormente." #: common.opt:744 -#, fuzzy -#| msgid "Warn when a variable is only set, otherwise unused" msgid "Warn when a variable is only set, otherwise unused." msgstr "Avisa cuando sólo se define una variable, y no se usa posteriormente." #: common.opt:748 -#, fuzzy -#| msgid "Warn when a function is unused" msgid "Warn when a function is unused." msgstr "Avisa cuando no se usa una función." #: common.opt:752 -#, fuzzy -#| msgid "Warn when a label is unused" msgid "Warn when a label is unused." msgstr "Avisa cuando no se usa una etiqueta." #: common.opt:756 -#, fuzzy -#| msgid "Warn when a function parameter is unused" msgid "Warn when a function parameter is unused." msgstr "Avisa cuando no se usa un parámetro de una función." #: common.opt:760 -#, fuzzy -#| msgid "Warn when an expression value is unused" msgid "Warn when an expression value is unused." msgstr "Avisa cuando no se usa un valor de una expresión." #: common.opt:764 -#, fuzzy -#| msgid "Warn when a variable is unused" msgid "Warn when a variable is unused." msgstr "Avisa cuando no se usa una variable." #: common.opt:768 -#, fuzzy -#| msgid "Warn in case profiles in -fprofile-use do not match" msgid "Warn in case profiles in -fprofile-use do not match." msgstr "Avisa en perfiles case en -fprofile-use que no coincidan." #: common.opt:772 -#, fuzzy -#| msgid "Warn when a vector operation is compiled outside the SIMD" msgid "Warn when a vector operation is compiled outside the SIMD." msgstr "Avisar cuando una operación vectorial se compila fuera del SIMD." #: common.opt:788 -#, fuzzy -#| msgid "-aux-info \tEmit declaration information into " msgid "-aux-info \tEmit declaration information into ." msgstr "-aux-info \tEmite la información de declaraciones en el ." #: common.opt:807 -#, fuzzy -#| msgid "-d\tEnable dumps from specific passes of the compiler" msgid "-d\tEnable dumps from specific passes of the compiler." msgstr "-d\tActiva los volcados de pasos específicos del compilador." #: common.opt:811 -#, fuzzy -#| msgid "-dumpbase \tSet the file basename to be used for dumps" msgid "-dumpbase \tSet the file basename to be used for dumps." msgstr "-dumpbase \tEstablece el nombre base de fichero a usar para los volcados." #: common.opt:815 -#, fuzzy -#| msgid "-dumpdir \tSet the directory name to be used for dumps" msgid "-dumpdir \tSet the directory name to be used for dumps." msgstr "-dumpdir \tEstablece el nombre del directorio a usar para los volcados." #: common.opt:884 msgid "The version of the C++ ABI in use." -msgstr "" +msgstr "La versión de la ABI de C++ que se está usando." #: common.opt:888 msgid "Aggressively optimize loops using language constraints." -msgstr "" +msgstr "Optimiza los bucles de forma agresiva empleando restricciones del lenguaje." #: common.opt:892 -#, fuzzy -#| msgid "Align the start of functions" msgid "Align the start of functions." msgstr "Alinea el inicio de las funciones." #: common.opt:899 -#, fuzzy -#| msgid "Align labels which are only reached by jumping" msgid "Align labels which are only reached by jumping." msgstr "Alinea las etiquetas que solamente se alcanzan saltando." #: common.opt:906 -#, fuzzy -#| msgid "Align all labels" msgid "Align all labels." msgstr "Alinea todas las etiquetas." #: common.opt:913 -#, fuzzy -#| msgid "Align the start of loops" msgid "Align the start of loops." msgstr "Alinea el inicio de los bucles." #: common.opt:936 -#, fuzzy -#| msgid "Select the runtime" msgid "Select what to sanitize." -msgstr "Selecciona el tiempo de ejecución." +msgstr "Selecciona qué sanear." #: common.opt:940 msgid "-fasan-shadow-offset=\tUse custom shadow memory offset." @@ -14358,115 +13572,83 @@ #: common.opt:944 msgid "-fsanitize-sections=\tSanitize global variables" -msgstr "" +msgstr "-fsanitize-sections=\tSanea las variables globales" #: common.opt:949 msgid "After diagnosing undefined behavior attempt to continue execution." -msgstr "" +msgstr "Tras el diagnóstico de comportamiento indefinido intenta continuar la ejecución." #: common.opt:953 -#, fuzzy -#| msgid "This switch is deprecated; use -Wextra instead" msgid "This switch is deprecated; use -fsanitize-recover= instead." -msgstr "Esta opción es obsoleta; utilice en su lugar -Wextra." +msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-recover=." #: common.opt:957 msgid "Use trap instead of a library function for undefined behavior sanitization." -msgstr "" +msgstr "Usa trap en lugar de una función de biblioteca para sanear el comportamiento indefinido." #: common.opt:961 -#, fuzzy -#| msgid "Generate unwind tables that are exact at each instruction boundary" msgid "Generate unwind tables that are exact at each instruction boundary." msgstr "Genera tablas de desenredo que sean exactas en cada límite de instrucción." #: common.opt:965 -#, fuzzy -#| msgid "Generate auto-inc/dec instructions" msgid "Generate auto-inc/dec instructions." msgstr "Genera instrucciones auto-inc/dec." #: common.opt:969 msgid "Use sample profile information for call graph node weights. The default" -msgstr "" +msgstr "Usa información de perfil de muestra para los pesos de los nodos de los grafos de llamadas. Lo predeterminado" #: common.opt:974 -#, fuzzy -#| msgid "Use profiling information for branch probabilities" msgid "Use sample profile information for call graph node weights. The profile" -msgstr "Usa la información de análisis de perfil para las probabilidades de ramificación" +msgstr "Usa la información de perfil de muestra para los pesos de los nodos de los grafos de llamadas. El perfil" #: common.opt:983 -#, fuzzy -#| msgid "Generate code to check bounds before indexing arrays" msgid "Generate code to check bounds before indexing arrays." -msgstr "Genera código para revisar los límites antes de indizar matrices." +msgstr "Genera código para revisar los límites antes de indexar matrices." #: common.opt:987 -#, fuzzy -#| msgid "Replace add, compare, branch with branch on count register" msgid "Replace add, compare, branch with branch on count register." msgstr "Reemplaza add, compare, branch con branch en la cuenta de registros." #: common.opt:991 -#, fuzzy -#| msgid "Use profiling information for branch probabilities" msgid "Use profiling information for branch probabilities." msgstr "Usa la información de análisis de perfil para las probabilidades de ramificación." #: common.opt:995 -#, fuzzy -#| msgid "Perform branch target load optimization before prologue / epilogue threading" msgid "Perform branch target load optimization before prologue / epilogue threading." msgstr "Realiza optimización de carga de ramificación objetivo antes del hilo prólogo / epílogo." #: common.opt:999 -#, fuzzy -#| msgid "Perform branch target load optimization after prologue / epilogue threading" msgid "Perform branch target load optimization after prologue / epilogue threading." msgstr "Realiza optimización de carga de ramificación objetivo después del hilo prólogo / epílogo." #: common.opt:1003 -#, fuzzy -#| msgid "Restrict target load migration not to re-use registers in any basic block" msgid "Restrict target load migration not to re-use registers in any basic block." msgstr "Restringe que la migración de carga de objetivos no reuse registros en ningún bloque básico." #: common.opt:1007 -#, fuzzy -#| msgid "-fcall-saved-\tMark as being preserved across functions" msgid "-fcall-saved-\tMark as being preserved across functions." msgstr "-fcall-saved-\tMarca el como preservado entre funciones." #: common.opt:1011 -#, fuzzy -#| msgid "-fcall-used-\tMark as being corrupted by function calls" msgid "-fcall-used-\tMark as being corrupted by function calls." msgstr "-fcall-used-\tMarca el como corrupto por llamadas de función." #: common.opt:1018 -#, fuzzy -#| msgid "Save registers around function calls" msgid "Save registers around function calls." msgstr "Guarda registros alrededor de llamadas de función." #: common.opt:1022 -#, fuzzy -#| msgid "This switch is deprecated; use -Wextra instead" msgid "This switch is deprecated; do not use." -msgstr "Esta opción es obsoleta; utilice en su lugar -Wextra." +msgstr "Esta opción es obsoleta; no lo utilice." #: common.opt:1026 -#, fuzzy -#| msgid "Check the return value of new" msgid "Check the return value of new in C++." -msgstr "Revisa el valor de devolución de new." +msgstr "Revisa el valor de devolución de new en C++." #: common.opt:1030 -#, fuzzy -#| msgid "internal consistency failure" msgid "Perform internal consistency checkings." -msgstr "falla interna de consistencia." +msgstr "Realiza comprobaciones de consistencia internas." #: common.opt:1034 msgid "Looks for opportunities to reduce stack adjustments and stack references." @@ -14473,68 +13655,46 @@ msgstr "Busca oportunidades para reducir los ajustes de pila y las referencias de pila." #: common.opt:1038 -#, fuzzy -#| msgid "Do not put uninitialized globals in the common section" msgid "Do not put uninitialized globals in the common section." msgstr "No pone globales sin inicializar en la sección común." #: common.opt:1046 -#, fuzzy -#| msgid "-fcompare-debug[=]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump" msgid "-fcompare-debug[=]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump." msgstr "-fcompare-debug[=]\tCompila con y sin p.e. -gtoggle, y compara el volcado de insns finales." #: common.opt:1050 -#, fuzzy -#| msgid "Run only the second compilation of -fcompare-debug" msgid "Run only the second compilation of -fcompare-debug." msgstr "Ejecuta sólo la segunda compilación de -fcompare-debug." #: common.opt:1054 -#, fuzzy -#| msgid "Perform comparison elimination after register allocation has finished" msgid "Perform comparison elimination after register allocation has finished." msgstr "Realiza la eliminación de comparaciones después de terminar el alojamiento de registros." #: common.opt:1058 -#, fuzzy -#| msgid "Do not perform optimizations increasing noticeably stack usage" msgid "Do not perform optimizations increasing noticeably stack usage." msgstr "No realizar optimizaciones que incrementan notablemente el uso de la pila." #: common.opt:1062 -#, fuzzy -#| msgid "Perform a register copy-propagation optimization pass" msgid "Perform a register copy-propagation optimization pass." msgstr "Realiza el paso de optimización de copia-propagación de registros." #: common.opt:1066 -#, fuzzy -#| msgid "Perform cross-jumping optimization" msgid "Perform cross-jumping optimization." msgstr "Realiza optimizaciones de saltos cruzados." #: common.opt:1070 -#, fuzzy -#| msgid "When running CSE, follow jumps to their targets" msgid "When running CSE, follow jumps to their targets." msgstr "Cuando se esté ejecutando CSE, sigue los saltos a sus objetivos." #: common.opt:1078 -#, fuzzy -#| msgid "Omit range reduction step when performing complex division" msgid "Omit range reduction step when performing complex division." msgstr "Omite el paso de reducción de rango al realizar divisiones complejas." #: common.opt:1082 -#, fuzzy -#| msgid "Complex multiplication and division follow Fortran rules" msgid "Complex multiplication and division follow Fortran rules." msgstr "La multiplicación y la división complejas siguen las reglas Fortran." #: common.opt:1086 -#, fuzzy -#| msgid "Place data items into their own section" msgid "Place data items into their own section." msgstr "Coloca los elementos de datos en su propia sección." @@ -14543,14 +13703,10 @@ msgstr "Enumera todos los contadores de depuración disponibles con sus límites y cuentas." #: common.opt:1094 -#, fuzzy -#| msgid "-fdbg-cnt=:[,:,...]\tSet the debug counter limit. " msgid "-fdbg-cnt=:[,:,...]\tSet the debug counter limit." msgstr "-fdbg-cnt=:[,:,...]\tEstablece el límite del contador de depuración." #: common.opt:1098 -#, fuzzy -#| msgid "Map one directory name to another in debug information" msgid "Map one directory name to another in debug information." msgstr "Mapea un nombre de directorio a otro en la información de depuración." @@ -14559,58 +13715,52 @@ msgstr "Muestra la sección .debug_types al usar la información de depuración DWARF v4." #: common.opt:1108 -#, fuzzy -#| msgid "Defer popping functions args from stack until later" msgid "Defer popping functions args from stack until later." msgstr "Posterga la extracción de argumentos de funciones de la pila hasta más tarde." #: common.opt:1112 -#, fuzzy -#| msgid "Attempt to fill delay slots of branch instructions" msgid "Attempt to fill delay slots of branch instructions." msgstr "Intenta rellenar las ranuras de retraso de las instrucciones de ramificación." #: common.opt:1116 msgid "Delete dead instructions that may throw exceptions." -msgstr "" +msgstr "Borra instrucciones muertas que pueden lanzar excepciones." #: common.opt:1120 -#, fuzzy -#| msgid "Delete useless null pointer checks" msgid "Delete useless null pointer checks." msgstr "Borra las revisiones de punteros nulos sin uso." #: common.opt:1124 msgid "Stream extra data to support more aggressive devirtualization in LTO local transformation mode." -msgstr "" +msgstr "Hace fluir datos extra para permitir desvirtualización más agresiva en el modo de transformación local LTO." #: common.opt:1128 #, fuzzy -#| msgid "Perform superblock formation via tail duplication" msgid "Perform speculative devirtualization." -msgstr "Realiza la formación de superbloques a través de la duplicación de colas." +msgstr "Realiza desvirtualización especulativa." #: common.opt:1132 +#, fuzzy msgid "Try to convert virtual calls to direct ones." msgstr "Trata de convertir las llamadas virtuales a llamadas directas." #: common.opt:1136 #, fuzzy -#| msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics" msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics." msgstr "-fdiagnostics-show-location=[once|every-line]\tIndica que tan seguido se debe emitir la ubicación del código al inicio de los diagnósticos con corte de línea." #: common.opt:1153 +#, fuzzy msgid "Show the source line with a caret indicating the column." -msgstr "" +msgstr "Muestra la línea de código con un signo de intercalación para indicar la columna." #: common.opt:1161 +#, fuzzy msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics." -msgstr "" +msgstr "-fdiagnostics-color=[never|always|auto]\tColorea los diagnósticos." #: common.opt:1181 #, fuzzy -#| msgid "Amend appropriate diagnostic messages with the command line option that controls them" msgid "Amend appropriate diagnostic messages with the command line option that controls them." msgstr "Asocia adecuadamente los mensajes de diagnóstico con la opción de línea de orden que los controla." Index: gcc/po/fr.po =================================================================== --- a/src/gcc/po/fr.po (.../tags/gcc_6_3_0_release) +++ b/src/gcc/po/fr.po (.../branches/gcc-6-branch) @@ -133,7 +133,7 @@ "Project-Id-Version: gcc 6.2.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2016-08-19 21:03+0000\n" -"PO-Revision-Date: 2016-12-16 19:16+0100\n" +"PO-Revision-Date: 2016-12-23 15:39+0100\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -1636,9 +1636,8 @@ msgstr "attribut de fonction incohérent" #: cif-code.def:129 -#, fuzzy msgid "caller function contains cilk spawn" -msgstr "la fonction appelante contient du généré cilk" +msgstr "la fonction appelante contient au moins une fonction démarrée en parallèle par cilk" #: cif-code.def:133 msgid "unreachable" @@ -7701,2188 +7700,1613 @@ msgstr "Préférer des accès par mots plutôt que des accès par octets." #: config/mcore/mcore.opt:71 -#, fuzzy -#| msgid "Maximum amount for a single stack increment operation" msgid "Set the maximum amount for a single stack increment operation." -msgstr "Montant maximal pour une opération d'incrémentation simple de la pile" +msgstr "Fixer le montant maximum pour une seule opération d'incrémentation de la pile." #: config/mcore/mcore.opt:75 -#, fuzzy -#| msgid "Always treat bit-field as int-sized" msgid "Always treat bitfields as int-sized." -msgstr "Toujours traiter les champs de bits comme si la taille entière" +msgstr "Toujours traiter les champs de bits comme ayant la taille d'un « int »." #: config/linux-android.opt:23 -#, fuzzy -#| msgid "Generate code for little endian" msgid "Generate code for the Android platform." -msgstr "Générer du code pour un système à octets de poids faible" +msgstr "Générer du code pour la plateforme Android." #: config/mmix/mmix.opt:24 -#, fuzzy -#| msgid "For intrinsics library: pass all parameters in registers" msgid "For intrinsics library: pass all parameters in registers." -msgstr "Pour les bibliothèques intrinsèques : passer tous les paramètres par registre" +msgstr "Pour les bibliothèques intrinsèques : passer tous les paramètres dans des registres." #: config/mmix/mmix.opt:28 -#, fuzzy -#| msgid "Use register stack for parameters and return value" msgid "Use register stack for parameters and return value." -msgstr "Utiliser le registre de la pile pour les paramètres et la valeur retournée" +msgstr "Utiliser la pile de registres pour les paramètres et la valeur retournée." #: config/mmix/mmix.opt:32 -#, fuzzy -#| msgid "Use call-clobbered registers for parameters and return value" msgid "Use call-clobbered registers for parameters and return value." -msgstr "utiliser les registres d'appels maltraités pour les paramètres et les valeurs retournées" +msgstr "Utiliser des registres écrasés durant l'appel pour les paramètres et les valeurs retournées." #: config/mmix/mmix.opt:37 -#, fuzzy -#| msgid "Use epsilon-respecting floating point compare instructions" msgid "Use epsilon-respecting floating point compare instructions." -msgstr "Utiliser un epsilon respectant les instructions de comparaison en virgule flottante" +msgstr "Utiliser des instructions de comparaisons en virgule flottante qui respectent l'epsilon." #: config/mmix/mmix.opt:41 -#, fuzzy -#| msgid "Use zero-extending memory loads, not sign-extending ones" msgid "Use zero-extending memory loads, not sign-extending ones." -msgstr "utiliser des chargements mémoire avec zéro extension, pas celles avec signe d'extension" +msgstr "Utiliser des chargements mémoire qui étendent les zéros au lieu de celles qui étendent le signe." #: config/mmix/mmix.opt:45 -#, fuzzy -#| msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)." -msgstr "générer des résultats de division avec reste ayant le même signe que le diviseur (pas le dividende)" +msgstr "Générer des résultats de divisions où le reste a le même signe que le diviseur (pas le dividende)." #: config/mmix/mmix.opt:49 -#, fuzzy -#| msgid "Prepend global symbols with \":\" (for use with PREFIX)" msgid "Prepend global symbols with \":\" (for use with PREFIX)." -msgstr "pré ajouter les symboles globaux avec «:» (pour l'utilisation avec PREFIX)" +msgstr "Préfixer les symboles globaux avec « : » (pour l'utilisation avec PREFIX)." #: config/mmix/mmix.opt:53 -#, fuzzy -#| msgid "Do not provide a default start-address 0x100 of the program" msgid "Do not provide a default start-address 0x100 of the program." -msgstr "Ne pas fournir d'adresse de départ par défaut 0x100 du programme" +msgstr "Ne pas fournir d'adresse de départ par défaut 0x100 du programme." #: config/mmix/mmix.opt:57 -#, fuzzy -#| msgid "Link to emit program in ELF format (rather than mmo)" msgid "Link to emit program in ELF format (rather than mmo)." -msgstr "Faire l'édition de liens pour produire le programme en format ELF (au lieu de mmo)" +msgstr "Faire l'édition de liens pour produire le programme au format ELF (au lieu de mmo)." #: config/mmix/mmix.opt:61 -#, fuzzy -#| msgid "Use P-mnemonics for branches statically predicted as taken" msgid "Use P-mnemonics for branches statically predicted as taken." -msgstr "Utiliser les mnémoniques P pour les branchements statiquement prévus à être pris" +msgstr "Utiliser les mnémoniques P pour les branchements statiquement prévus comme étant pris." #: config/mmix/mmix.opt:65 -#, fuzzy -#| msgid "Don't use P-mnemonics for branches" msgid "Don't use P-mnemonics for branches." -msgstr "Ne pas utiliser les mnémoniques P pour les branchements" +msgstr "Ne pas utiliser les mnémoniques P pour les branchements." #: config/mmix/mmix.opt:79 -#, fuzzy -#| msgid "Use addresses that allocate global registers" msgid "Use addresses that allocate global registers." -msgstr "Utiliser les adresses qui allouent des registres globaux" +msgstr "Utiliser les adresses qui allouent des registres globaux." #: config/mmix/mmix.opt:83 -#, fuzzy -#| msgid "Do not use addresses that allocate global registers" msgid "Do not use addresses that allocate global registers." -msgstr "Ne pas utiliser des adresses qui allouent des registres globaux" +msgstr "Ne pas utiliser des adresses qui allouent des registres globaux." #: config/mmix/mmix.opt:87 -#, fuzzy -#| msgid "Generate a single exit point for each function" msgid "Generate a single exit point for each function." -msgstr "Générer un point de sortie simple pour chaque fonction" +msgstr "Générer un point de sortie unique pour chaque fonction." #: config/mmix/mmix.opt:91 -#, fuzzy -#| msgid "Do not generate a single exit point for each function" msgid "Do not generate a single exit point for each function." -msgstr "Ne pas générer un point de sortie simple pour chaque fonction" +msgstr "Ne pas générer un point de sortie unique pour chaque fonction." #: config/mmix/mmix.opt:95 -#, fuzzy -#| msgid "Set start-address of the program" msgid "Set start-address of the program." -msgstr "Adresse de départ du programme fixée" +msgstr "Fixer l'adresse de départ du programme." #: config/mmix/mmix.opt:99 -#, fuzzy -#| msgid "Set start-address of data" msgid "Set start-address of data." -msgstr "Adresse de départ des données fixée" +msgstr "Fixer l'adresse de départ des données." #: config/darwin.opt:114 -#, fuzzy -#| msgid "Generate code using byte writes" msgid "Generate compile-time CFString objects." -msgstr "Générer le code en utilisant des écritures par octets" +msgstr "Générer les objets CFString à la compilation." #: config/darwin.opt:211 msgid "Warn if constant CFString objects contain non-portable characters." -msgstr "" +msgstr "Avertir si des objets CFString constants contiennent des caractères non portables." #: config/darwin.opt:216 msgid "Generate AT&T-style stubs for Mach-O." -msgstr "" +msgstr "Générer des stubs dans le style AT&T pour Mach-O." #: config/darwin.opt:220 -#, fuzzy -#| msgid "Generate code suitable for executables (NOT shared libs)" msgid "Generate code suitable for executables (NOT shared libs)." -msgstr "Générer du code adapté pour les exécutables (PAS les librairies partagées)" +msgstr "Générer du code adapté pour les exécutables (PAS pour les librairies partagées)." #: config/darwin.opt:224 -#, fuzzy -#| msgid "Generate code suitable for executables (NOT shared libs)" msgid "Generate code suitable for fast turn around debugging." -msgstr "Générer du code adapté pour les exécutables (PAS les librairies partagées)" +msgstr "Générer du code adapté pour un débogage avec cycle court." #: config/darwin.opt:232 msgid "The earliest MacOS X version on which this program will run." -msgstr "" +msgstr "La version la plus ancienne de MacOS X sur laquelle ce programme tournera." #: config/darwin.opt:236 -#, fuzzy -#| msgid "Set sizeof(bool) to 1" msgid "Set sizeof(bool) to 1." -msgstr "Affecter sizeof(bool) à 1" +msgstr "Faire en sorte que sizeof(bool) vaille 1." #: config/darwin.opt:240 -#, fuzzy -#| msgid "Generate code for little endian" msgid "Generate code for darwin loadable kernel extensions." -msgstr "Générer du code pour un système à octets de poids faible" +msgstr "Générer du code pour des extensions à charger dans le noyau de darwin." #: config/darwin.opt:244 -#, fuzzy -#| msgid "Generate code for the specified chip or CPU version" msgid "Generate code for the kernel or loadable kernel extensions." -msgstr "Générer le code pour la version de processeur ou de circuit spécifiée" +msgstr "Générer du code pour le noyau ou pour des extensions à charger dans le noyau." #: config/darwin.opt:248 -#, fuzzy -#| msgid "-idirafter \tAdd to the end of the system include path" msgid "-iframework \tAdd to the end of the system framework include path." -msgstr "-idirafter \tajouter à la fin du chemin système d'inclusion" +msgstr "-iframework \tAjouter à la fin du chemin d'inclusion du framework système." #: config/bfin/bfin.opt:40 config/msp430/msp430.opt:3 config/c6x/c6x.opt:38 #: config/mep/mep.opt:143 -#, fuzzy -#| msgid "Use the WindISS simulator" msgid "Use simulator runtime." -msgstr "Utiliser le simulateur WindISS" +msgstr "Produire l'exécutable pour un simulateur." #: config/bfin/bfin.opt:44 config/arm/arm.opt:106 -#, fuzzy -#| msgid "Specify the name of the target CPU" msgid "Specify the name of the target CPU." -msgstr "Spécifier le nom du processeur cible" +msgstr "Spécifier le nom du processeur cible." #: config/bfin/bfin.opt:48 -#, fuzzy -#| msgid "Omit the frame pointer in leaf functions" msgid "Omit frame pointer for leaf functions." -msgstr "Omettre le pointeur de trame dans les fonctions feuilles" +msgstr "Omettre le pointeur de trame dans les fonctions feuilles." #: config/bfin/bfin.opt:52 msgid "Program is entirely located in low 64k of memory." -msgstr "" +msgstr "Le programme est entièrement situé dans les 64k inférieurs de la mémoire." #: config/bfin/bfin.opt:56 msgid "Work around a hardware anomaly by adding a number of NOPs before a" -msgstr "" +msgstr "Contourner une anomalie du matériel en ajoutant plusieurs NOP devant une instruction CSYNC ou SSYNC." #: config/bfin/bfin.opt:61 msgid "Avoid speculative loads to work around a hardware anomaly." -msgstr "" +msgstr "Éviter les chargements spéculatifs pour contourner une anomalie matérielle." #: config/bfin/bfin.opt:65 -#, fuzzy -#| msgid "Enable ID based shared library" msgid "Enabled ID based shared library." -msgstr "Autoriser les identificateurs de librairies partagées de base" +msgstr "Autoriser les bibliothèques partagées basées sur un ID." #: config/bfin/bfin.opt:69 msgid "Generate code that won't be linked against any other ID shared libraries," -msgstr "" +msgstr "Générer du code qui ne sera pas lié avec une autre bibliothèque partagée par son ID mais qui pourra être utilisé comme bibliothèque partagée." #: config/bfin/bfin.opt:74 config/m68k/m68k.opt:171 -#, fuzzy -#| msgid "ID of shared library to build" msgid "ID of shared library to build." -msgstr "Identification de librairie partagé à construire" +msgstr "Identification de la bibliothèque partagée à construire." #: config/bfin/bfin.opt:78 config/m68k/m68k.opt:167 -#, fuzzy -#| msgid "Enable separate data segment" msgid "Enable separate data segment." -msgstr "Autoriser des segments de données séparés" +msgstr "Activer des segments de données séparés." #: config/bfin/bfin.opt:82 config/c6x/c6x.opt:63 msgid "Avoid generating pc-relative calls; use indirection." -msgstr "" +msgstr "Éviter des générer des appels relatifs au PC; utiliser des indirections." #: config/bfin/bfin.opt:86 -#, fuzzy -#| msgid "Use the Xtensa floating-point unit" msgid "Link with the fast floating-point library." -msgstr "Utiliser l'unité matérielle pour virgule flottante Xtensa" +msgstr "Lier avec la bibliothèque en virgule flottante rapide." #: config/bfin/bfin.opt:90 config/frv/frv.opt:130 -#, fuzzy -#| msgid "Enable function profiling" msgid "Enable Function Descriptor PIC mode." -msgstr "Autoriser le profilage de fonction" +msgstr "Activer le mode PIC avec descripteurs de fonctions." #: config/bfin/bfin.opt:94 config/frv/frv.opt:162 -#, fuzzy -#| msgid "Enable use of RTPS instruction" msgid "Enable inlining of PLT in function calls." -msgstr "Autoriser l'utilisation de l'instruction RTPS" +msgstr "Activer la mise en ligne de PLT dans les appels de fonctions." #: config/bfin/bfin.opt:98 msgid "Do stack checking using bounds in L1 scratch memory." -msgstr "" +msgstr "Vérifier la pile en utilisant des limites dans la mémoire temporaire L1." #: config/bfin/bfin.opt:102 -#, fuzzy -#| msgid "Enable multicore support" msgid "Enable multicore support." -msgstr "Activer le support multicÅ“ur" +msgstr "Activer le support multicÅ“ur." #: config/bfin/bfin.opt:106 -#, fuzzy -#| msgid "Build for Core A" msgid "Build for Core A." -msgstr "Compiler pour Core A" +msgstr "Compiler pour le cÅ“ur A." #: config/bfin/bfin.opt:110 -#, fuzzy -#| msgid "Build for Core B" msgid "Build for Core B." -msgstr "Compiler pour Core B" +msgstr "Compiler pour le cÅ“ur B." #: config/bfin/bfin.opt:114 -#, fuzzy -#| msgid "Build for SDRAM" msgid "Build for SDRAM." -msgstr "compiler pour SDRAM" +msgstr "Compiler pour SDRAM." #: config/bfin/bfin.opt:118 msgid "Assume ICPLBs are enabled at runtime." -msgstr "" +msgstr "Supposer que les ICPLB sont activés à l'exécution." #: config/m68k/m68k-tables.opt:25 msgid "Known M68K CPUs (for use with the -mcpu= option):" -msgstr "" +msgstr "Processeurs M68K connus (à utiliser avec l'option -mcpu=):" #: config/m68k/m68k-tables.opt:365 msgid "Known M68K microarchitectures (for use with the -mtune= option):" -msgstr "" +msgstr "Microarchitectures M68K connues (à utiliser avec l'option -mtune=):" #: config/m68k/m68k-tables.opt:411 msgid "Known M68K ISAs (for use with the -march= option):" -msgstr "" +msgstr "ISA connues pour M68K (à utiliser avec l'option -march=):" #: config/m68k/ieee.opt:24 config/i386/i386.opt:358 -#, fuzzy -#| msgid "Use IEEE math for fp comparisons" msgid "Use IEEE math for fp comparisons." -msgstr "Utiliser les mathématiques IEEE pour les comparaisons FP" +msgstr "Utiliser les mathématiques IEEE pour les comparaisons en virgule flottantes." #: config/m68k/m68k.opt:30 -#, fuzzy -#| msgid "Generate code for a 520X" msgid "Generate code for a 520X." -msgstr "Générer du code pour un 520X" +msgstr "Générer du code pour un 520X." #: config/m68k/m68k.opt:34 -#, fuzzy -#| msgid "Generate code for a 5206e" msgid "Generate code for a 5206e." -msgstr "Générer du code pour un 5206e" +msgstr "Générer du code pour un 5206e." #: config/m68k/m68k.opt:38 -#, fuzzy -#| msgid "Generate code for a 528x" msgid "Generate code for a 528x." -msgstr "Générer du code pour un 528x" +msgstr "Générer du code pour un 528x." #: config/m68k/m68k.opt:42 -#, fuzzy -#| msgid "Generate code for a 5307" msgid "Generate code for a 5307." -msgstr "Générer du code pour un 5307" +msgstr "Générer du code pour un 5307." #: config/m68k/m68k.opt:46 -#, fuzzy -#| msgid "Generate code for a 5407" msgid "Generate code for a 5407." -msgstr "Générer du code pour un 5407" +msgstr "Générer du code pour un 5407." #: config/m68k/m68k.opt:50 config/m68k/m68k.opt:111 -#, fuzzy -#| msgid "Generate code for a 68000" msgid "Generate code for a 68000." -msgstr "Générer le code pour un 68000" +msgstr "Générer le code pour un 68000." #: config/m68k/m68k.opt:54 -#, fuzzy -#| msgid "Generate code for a 68010" msgid "Generate code for a 68010." -msgstr "Générer le code pour un 68010" +msgstr "Générer le code pour un 68010." #: config/m68k/m68k.opt:58 config/m68k/m68k.opt:115 -#, fuzzy -#| msgid "Generate code for a 68020" msgid "Generate code for a 68020." -msgstr "Générer le code pour un 68020" +msgstr "Générer le code pour un 68020." #: config/m68k/m68k.opt:62 -#, fuzzy -#| msgid "Generate code for a 68040, without any new instructions" msgid "Generate code for a 68040, without any new instructions." -msgstr "Générer du code pour un 68040 sans les nouvelles instructions" +msgstr "Générer du code pour un 68040 sans les nouvelles instructions." #: config/m68k/m68k.opt:66 -#, fuzzy -#| msgid "Generate code for a 68060, without any new instructions" msgid "Generate code for a 68060, without any new instructions." -msgstr "Générer du code pour un 68060 sans les nouvelles instructions" +msgstr "Générer du code pour un 68060 sans les nouvelles instructions." #: config/m68k/m68k.opt:70 -#, fuzzy -#| msgid "Generate code for a 68030" msgid "Generate code for a 68030." -msgstr "Générer du code pour un 68030" +msgstr "Générer du code pour un 68030." #: config/m68k/m68k.opt:74 -#, fuzzy -#| msgid "Generate code for a 68040" msgid "Generate code for a 68040." -msgstr "Générer du code pour un 68040" +msgstr "Générer du code pour un 68040." #: config/m68k/m68k.opt:78 -#, fuzzy -#| msgid "Generate code for a 68060" msgid "Generate code for a 68060." -msgstr "Générer du code pour un 68060" +msgstr "Générer du code pour un 68060." #: config/m68k/m68k.opt:82 -#, fuzzy -#| msgid "Generate code for a 68302" msgid "Generate code for a 68302." -msgstr "Générer du code pour un 68302" +msgstr "Générer du code pour un 68302." #: config/m68k/m68k.opt:86 -#, fuzzy -#| msgid "Generate code for a 68332" msgid "Generate code for a 68332." -msgstr "Générer du code pour un 68332" +msgstr "Générer du code pour un 68332." #: config/m68k/m68k.opt:91 -#, fuzzy -#| msgid "Generate code for a 68851" msgid "Generate code for a 68851." -msgstr "Générer le code pour un 68851" +msgstr "Générer le code pour un 68851." #: config/m68k/m68k.opt:95 -#, fuzzy -#| msgid "Use hardware floating point instructions" msgid "Generate code that uses 68881 floating-point instructions." -msgstr "Utiliser les instructions matérielles en virgule flottante" +msgstr "Générer du code qui utilise les instructions en virgule flottantes du 68881." #: config/m68k/m68k.opt:99 -#, fuzzy -#| msgid "Align variables on a 32-bit boundary" msgid "Align variables on a 32-bit boundary." -msgstr "Aligner les variables sur des frontières de 32 bits" +msgstr "Aligner les variables sur des frontières de 32 bits." #: config/m68k/m68k.opt:103 config/arm/arm.opt:81 config/nios2/nios2.opt:570 #: config/nds32/nds32.opt:66 config/c6x/c6x.opt:67 -#, fuzzy -#| msgid "Specify the name of the target architecture" msgid "Specify the name of the target architecture." -msgstr "Spécifier le nom de l'architecture cible" +msgstr "Spécifier le nom de l'architecture cible." #: config/m68k/m68k.opt:107 -#, fuzzy -#| msgid "Use the bit-field instructions" msgid "Use the bit-field instructions." -msgstr "Utiliser les instructions de champs de bits" +msgstr "Utiliser les instructions de champs de bits." #: config/m68k/m68k.opt:119 -#, fuzzy -#| msgid "Generate code for the M*Core M340" msgid "Generate code for a ColdFire v4e." -msgstr "Générer du code pour M*Core M340" +msgstr "Générer du code pour un ColdFire v4e." #: config/m68k/m68k.opt:123 -#, fuzzy -#| msgid "Specify the target CPU" msgid "Specify the target CPU." -msgstr "Spécifier le processeur cible" +msgstr "Spécifier le processeur cible." #: config/m68k/m68k.opt:127 -#, fuzzy -#| msgid "Generate code for a cpu32" msgid "Generate code for a cpu32." -msgstr "Générer du code pour un cpu32" +msgstr "Générer du code pour un cpu32." #: config/m68k/m68k.opt:131 -#, fuzzy -#| msgid "Use hardware quad fp instructions" msgid "Use hardware division instructions on ColdFire." -msgstr "Utiliser les instructions matérielles quad FP" +msgstr "Utiliser les instructions de divisions matérielles sur un ColdFire." #: config/m68k/m68k.opt:135 -#, fuzzy -#| msgid "Generate code for a Fido A" msgid "Generate code for a Fido A." -msgstr "Générer le code pour un Fido A" +msgstr "Générer le code pour un Fido A." #: config/m68k/m68k.opt:139 -#, fuzzy -#| msgid "Use hardware floating point instructions" msgid "Generate code which uses hardware floating point instructions." -msgstr "Utiliser les instructions matérielles en virgule flottante" +msgstr "Générer du code qui utilise les instructions en virgule flottantes matérielles." #: config/m68k/m68k.opt:143 -#, fuzzy -#| msgid "Enable ID based shared library" msgid "Enable ID based shared library." -msgstr "Autoriser les identificateurs de librairies partagées de base" +msgstr "Activer la bibliothèque partagée basée sur un ID." #: config/m68k/m68k.opt:147 -#, fuzzy -#| msgid "Do not use the bit-field instructions" msgid "Do not use the bit-field instructions." -msgstr "Ne pas utiliser les instructions de champs de bits" +msgstr "Ne pas utiliser les instructions de champs de bits." #: config/m68k/m68k.opt:151 -#, fuzzy -#| msgid "Use normal calling convention" msgid "Use normal calling convention." -msgstr "Utiliser la convention normale d'appels" +msgstr "Utiliser la convention d'appels normale." #: config/m68k/m68k.opt:155 -#, fuzzy -#| msgid "Consider type 'int' to be 32 bits wide" msgid "Consider type 'int' to be 32 bits wide." -msgstr "Considérer le type « int » comme ayant une largeur de 32 bits" +msgstr "Considérer le type « int » comme ayant une largeur de 32 bits." #: config/m68k/m68k.opt:159 -#, fuzzy -#| msgid "Generate pc-relative code" msgid "Generate pc-relative code." -msgstr "Générer du code relatif au compteur de programme (PC)" +msgstr "Générer du code relatif au compteur de programme (PC)." #: config/m68k/m68k.opt:163 -#, fuzzy -#| msgid "Use different calling convention using 'rtd'" msgid "Use different calling convention using 'rtd'." -msgstr "Utiliser une convention différente d'appel en utilisant « rtd »" +msgstr "Utiliser une convention d'appel différente en utilisant « rtd »." #: config/m68k/m68k.opt:175 -#, fuzzy -#| msgid "Consider type 'int' to be 16 bits wide" msgid "Consider type 'int' to be 16 bits wide." -msgstr "Considérer le type « int » comme ayant une largeur de 16 bits" +msgstr "Considérer le type « int » comme ayant une largeur de 16 bits." #: config/m68k/m68k.opt:179 -#, fuzzy -#| msgid "Generate code with library calls for floating point" msgid "Generate code with library calls for floating point." -msgstr "Générer du code avec les appels de bibliothèques pour la virgule flottante" +msgstr "Générer du code avec des appels de bibliothèque pour la virgule flottante." #: config/m68k/m68k.opt:183 -#, fuzzy -#| msgid "Do not use unaligned memory references" msgid "Do not use unaligned memory references." -msgstr "Ne pas utiliser des références mémoire non alignées" +msgstr "Ne pas utiliser des références mémoire non alignées." #: config/m68k/m68k.opt:187 -#, fuzzy -#| msgid "Specify the name of the target architecture" msgid "Tune for the specified target CPU or architecture." -msgstr "Spécifier le nom de l'architecture cible" +msgstr "Ajuster pour le processeur ou l'architecture cible spécifiée." #: config/m68k/m68k.opt:191 msgid "Support more than 8192 GOT entries on ColdFire." -msgstr "" +msgstr "Supporter plus de 8192 entrées dans la GOT d'un ColdFire." #: config/m68k/m68k.opt:195 msgid "Support TLS segment larger than 64K." -msgstr "" +msgstr "Supporter des segments TLS plus grands que 64K." #: config/m32c/m32c.opt:23 -#, fuzzy -#| msgid "Use the WindISS simulator" msgid "-msim\tUse simulator runtime." -msgstr "Utiliser le simulateur WindISS" +msgstr "-msim\tProduire l'exécutable pour un simulateur." #: config/m32c/m32c.opt:27 msgid "-mcpu=r8c\tCompile code for R8C variants." -msgstr "" +msgstr "-mcpu=r8c\tCompiler le code pour les variantes R8C." #: config/m32c/m32c.opt:31 msgid "-mcpu=m16c\tCompile code for M16C variants." -msgstr "" +msgstr "-mcpu=m16c\tCompiler le code pour les variantes M16C." #: config/m32c/m32c.opt:35 msgid "-mcpu=m32cm\tCompile code for M32CM variants." -msgstr "" +msgstr "-mcpu=m32cm\tCompiler le code pour les variantes M32CM." #: config/m32c/m32c.opt:39 msgid "-mcpu=m32c\tCompile code for M32C variants." -msgstr "" +msgstr "-mcpu=m32c\tCompiler le code pour les variantes M32C." #: config/m32c/m32c.opt:43 msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)." -msgstr "" +msgstr "-memregs=\tLe nombre d'octets memreg (par défaut: 16, plage: 0..16)." #: config/msp430/msp430.opt:7 msgid "Force assembly output to always use hex constants." -msgstr "" +msgstr "Forcer la sortie en assembleur à toujours utiliser des constantes en hexadécimal." #: config/msp430/msp430.opt:11 -#, fuzzy -#| msgid "Specify the MCU name" msgid "Specify the MCU to build for." -msgstr "Spécifier le nom du MCU" +msgstr "Spécifier le MCU pour lequel compiler." #: config/msp430/msp430.opt:15 msgid "Warn if an MCU name is unrecognised or conflicts with other options (default: on)." -msgstr "" +msgstr "Avertir si le nom d'un MCU n'est pas reconnu ou entre en conflit avec d'autres options (défaut: on)." #: config/msp430/msp430.opt:19 -#, fuzzy -#| msgid "Specify the MCU name" msgid "Specify the ISA to build for: msp430, msp430x, msp430xv2." -msgstr "Spécifier le nom du MCU" +msgstr "Spécifier l'ISA pour laquelle compiler: msp430, msp430x, msp430xv2." #: config/msp430/msp430.opt:23 msgid "Select large model - 20-bit addresses/pointers." -msgstr "" +msgstr "Sélectionner le modèle large – adresses/pointeurs sur 20 bits." #: config/msp430/msp430.opt:27 msgid "Select small model - 16-bit addresses/pointers (default)." -msgstr "" +msgstr "Sélectionner le modèle court – adresses/pointeurs sur 16 bits (défaut)." #: config/msp430/msp430.opt:31 msgid "Optimize opcode sizes at link time." -msgstr "" +msgstr "Optimiser la taille des opcodes lors de la liaison." #: config/msp430/msp430.opt:38 msgid "Use a minimum runtime (no static initializers or ctors) for memory-constrained devices." -msgstr "" +msgstr "Utiliser un moteur d'exécution (pas d'initialisations ni de créateurs statiques) pour les périphériques ayant une mémoire limitée." #: config/msp430/msp430.opt:45 msgid "Specify the type of hardware multiply to support." -msgstr "" +msgstr "Spécifier le type de multiplication matérielle à supporter." #: config/msp430/msp430.opt:67 msgid "Specify whether functions should be placed into low or high memory." -msgstr "" +msgstr "Spécifier si les fonctions doivent être placées en mémoire basse ou haute." #: config/msp430/msp430.opt:71 msgid "Specify whether variables should be placed into low or high memory." -msgstr "" +msgstr "Spécifier si les variables doivent être placées en mémoire basse ou haute." #: config/msp430/msp430.opt:90 msgid "Passes on a request to the assembler to enable fixes for various silicon errata." -msgstr "" +msgstr "Passer une requête à l'assembleur pour corriger divers erratas du silicium." #: config/msp430/msp430.opt:94 msgid "Passes on a request to the assembler to warn about various silicon errata." -msgstr "" +msgstr "Passer une requête à l'assembleur pour avertir à propos de divers erratas du silicium." #: config/aarch64/aarch64.opt:40 msgid "The possible TLS dialects:" -msgstr "" +msgstr "Les dialectes TLS possibles:" #: config/aarch64/aarch64.opt:52 msgid "The code model option names for -mcmodel:" -msgstr "" +msgstr "Les noms d'options du modèle de code pour -mcmodel:" #: config/aarch64/aarch64.opt:65 config/arm/arm.opt:94 #: config/microblaze/microblaze.opt:60 -#, fuzzy -#| msgid "Assume target CPU is configured as big endian" msgid "Assume target CPU is configured as big endian." -msgstr "Présumer que le processeur cible est un système à octets de poids fort" +msgstr "Supposer que le processeur cible est configuré comme gros boutiste." #: config/aarch64/aarch64.opt:69 -#, fuzzy -#| msgid "Generate code which uses the FPU" msgid "Generate code which uses only the general registers." -msgstr "Générer du code qui utilise le FPU" +msgstr "Générer du code qui n'utilise que des registres généraux." #: config/aarch64/aarch64.opt:73 msgid "Workaround for ARM Cortex-A53 Erratum number 835769." -msgstr "" +msgstr "Correctif pour l'erratum numéro 835769 de l'ARM Cortex-A53." #: config/aarch64/aarch64.opt:77 msgid "Workaround for ARM Cortex-A53 Erratum number 843419." -msgstr "" +msgstr "Correctif pour l'erratum numéro 843419 de l'ARM Cortex-A53." #: config/aarch64/aarch64.opt:81 config/arm/arm.opt:155 #: config/microblaze/microblaze.opt:64 -#, fuzzy -#| msgid "Assume target CPU is configured as little endian" msgid "Assume target CPU is configured as little endian." -msgstr "Présumer que le processeur cible est un système à octets de poids faible" +msgstr "Supposer que le processeur cible est configuré comme petit boutiste." #: config/aarch64/aarch64.opt:85 -#, fuzzy -#| msgid "Specify the MCU name" msgid "Specify the code model." -msgstr "Spécifier le nom du MCU" +msgstr "Spécifier le modèle de code." #: config/aarch64/aarch64.opt:89 -#, fuzzy -#| msgid "Don't assume that unaligned accesses are handled by the system" msgid "Don't assume that unaligned accesses are handled by the system." -msgstr "Ne pas présumer que les accès non alignées sont traités par le système" +msgstr "Ne pas supposer que les accès non alignés sont traités par le système." #: config/aarch64/aarch64.opt:93 config/i386/i386.opt:390 -#, fuzzy -#| msgid "Omit the frame pointer in leaf functions" msgid "Omit the frame pointer in leaf functions." -msgstr "Omettre le pointeur de trame dans les fonctions feuilles" +msgstr "Omettre le pointeur de trame dans les fonctions feuilles." #: config/aarch64/aarch64.opt:97 msgid "Specify TLS dialect." -msgstr "" +msgstr "Spécifier le dialecte TLS." #: config/aarch64/aarch64.opt:101 -#, fuzzy -#| msgid "Specify bit size of immediate TLS offsets" msgid "Specifies bit size of immediate TLS offsets. Valid values are 12, 24, 32, 48." -msgstr "Spécifier la taille de bit des décalages immédiats TLS" +msgstr "Spécifier la taille en bits des décalages TLS immédiats. Les valeurs valides sont 12, 24, 32, 48." #: config/aarch64/aarch64.opt:120 -#, fuzzy -#| msgid "Use features of and schedule code for given CPU" msgid "-march=ARCH\tUse features of architecture ARCH." -msgstr "Utiliser les options et ordonnancer le code pour le processeur donné" +msgstr "-march=ARCH\tUtiliser les fonctionnalités de l'architecture ARCH." #: config/aarch64/aarch64.opt:124 -#, fuzzy -#| msgid "Use features of and schedule code for given CPU" msgid "-mcpu=CPU\tUse features of and optimize for CPU." -msgstr "Utiliser les options et ordonnancer le code pour le processeur donné" +msgstr "-mcpu=CPU\tUtiliser les fonctionnalités et optimiser pour ce processeur." #: config/aarch64/aarch64.opt:128 -#, fuzzy -#| msgid "Use features of and schedule code for given CPU" msgid "-mtune=CPU\tOptimize for CPU." -msgstr "Utiliser les options et ordonnancer le code pour le processeur donné" +msgstr "-mtune=CPU\tOptimiser pour ce processeur." #: config/aarch64/aarch64.opt:132 -#, fuzzy -#| msgid "Generate code for given CPU" msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI." -msgstr "Générer le code pour le processeur donné" +msgstr "-mabi=ABI\tGénérer du code conforme à l'ABI spécifiée." #: config/aarch64/aarch64.opt:136 msgid "-moverride=STRING\tPower users only! Override CPU optimization parameters." -msgstr "" +msgstr "-moverride=CHAÃŽNE\tUniquement pour les utilisateurs avertis ! Outrepasser les paramètres d'optimisation du processeur." #: config/aarch64/aarch64.opt:140 msgid "Known AArch64 ABIs (for use with the -mabi= option):" -msgstr "" +msgstr "ABI AArch64 connues (à utiliser avec l'option -mabi=):" #: config/aarch64/aarch64.opt:150 msgid "PC relative literal loads." -msgstr "" +msgstr "Chargements littéraux relatifs au PC." #: config/aarch64/aarch64.opt:154 msgid "When calculating the reciprocal square root approximation," -msgstr "" +msgstr "Lors du calcul de l'approximation de la racine carrée réciproque, utiliser une étape en moins que d'habitude, ce qui réduit la latence et la précision." #: config/linux.opt:24 -#, fuzzy -#| msgid "Use uClibc C library" msgid "Use Bionic C library." -msgstr "Utiliser la bibliothèque C uClibc" +msgstr "Utiliser la bibliothèque C Bionic." #: config/linux.opt:28 -#, fuzzy -#| msgid "Use GNU C library" msgid "Use GNU C library." -msgstr "Utiliser la bibliothèque C GNU" +msgstr "Utiliser la bibliothèque C GNU." #: config/linux.opt:32 -#, fuzzy -#| msgid "Use uClibc C library" msgid "Use uClibc C library." -msgstr "Utiliser la bibliothèque C uClibc" +msgstr "Utiliser la bibliothèque C uClibc." #: config/linux.opt:36 -#, fuzzy -#| msgid "Use uClibc C library" msgid "Use musl C library." -msgstr "Utiliser la bibliothèque C uClibc" +msgstr "Utiliser la bibliothèque C musl." #: config/ia64/ilp32.opt:3 -#, fuzzy -#| msgid "Generate ILP32 code" msgid "Generate ILP32 code." -msgstr "Générer du code ILP32" +msgstr "Générer du code ILP32." #: config/ia64/ilp32.opt:7 -#, fuzzy -#| msgid "Generate LP64 code" msgid "Generate LP64 code." -msgstr "Générer du code LP64" +msgstr "Générer du code LP64." #: config/ia64/ia64.opt:28 -#, fuzzy -#| msgid "Generate big endian code" msgid "Generate big endian code." -msgstr "Générer du code de système à octets de poids fort" +msgstr "Générer du code gros boutiste." #: config/ia64/ia64.opt:32 -#, fuzzy -#| msgid "Generate little endian code" msgid "Generate little endian code." -msgstr "Générer du code de système à octets de poids faible" +msgstr "Générer du code petit boutiste." #: config/ia64/ia64.opt:36 -#, fuzzy -#| msgid "Generate code for GNU as" msgid "Generate code for GNU as." -msgstr "Générer du code pour GNU tel que" +msgstr "Générer du code pour GNU as." #: config/ia64/ia64.opt:40 -#, fuzzy -#| msgid "Generate code for GNU ld" msgid "Generate code for GNU ld." -msgstr "Générer du code pour GNU ld" +msgstr "Générer du code pour GNU ld." #: config/ia64/ia64.opt:44 -#, fuzzy -#| msgid "Emit stop bits before and after volatile extended asms" msgid "Emit stop bits before and after volatile extended asms." -msgstr "Produire de stop bits avant et après les asms étendus" +msgstr "Produire des bits de stop avant et après les asms étendues volatiles." #: config/ia64/ia64.opt:48 -#, fuzzy -#| msgid "Use in/loc/out register names" msgid "Use in/loc/out register names." -msgstr "Utilise les noms des registres in/loc/out " +msgstr "Utiliser les noms des registres in/loc/out." #: config/ia64/ia64.opt:55 -#, fuzzy -#| msgid "Enable use of sdata/scommon/sbss" msgid "Enable use of sdata/scommon/sbss." -msgstr "Autoriser l'utilisation de sdata/scommon/sbss" +msgstr "Activer l'utilisation de sdata/scommon/sbss." #: config/ia64/ia64.opt:59 -#, fuzzy -#| msgid "Generate code without GP reg" msgid "Generate code without GP reg." -msgstr "Générer du code sans registre GP" +msgstr "Générer du code sans registre GP." #: config/ia64/ia64.opt:63 -#, fuzzy -#| msgid "gp is constant (but save/restore gp on indirect calls)" msgid "gp is constant (but save/restore gp on indirect calls)." -msgstr "gp est une constante (mais save/restore gp fait par appels indirects)" +msgstr "gp est constant (mais save/restore gp lors d'appels indirects)." #: config/ia64/ia64.opt:67 -#, fuzzy -#| msgid "Generate self-relocatable code" msgid "Generate self-relocatable code." -msgstr "Générer du code auto-relocalisable" +msgstr "Générer du code auto-relocalisable." #: config/ia64/ia64.opt:71 -#, fuzzy -#| msgid "Generate inline floating point division, optimize for latency" msgid "Generate inline floating point division, optimize for latency." -msgstr "Générer la division enligne en point flottant, optimiser pour la latence" +msgstr "Générer une version en ligne de la division en virgule flottante, optimiser pour la latence." #: config/ia64/ia64.opt:75 -#, fuzzy -#| msgid "Generate inline floating point division, optimize for throughput" msgid "Generate inline floating point division, optimize for throughput." -msgstr "Générer la division en point flottant enligne, optimiser pour le débit" +msgstr "Générer une version en ligne de la division en virgule flottante, optimiser pour le débit." #: config/ia64/ia64.opt:82 -#, fuzzy -#| msgid "Generate inline integer division, optimize for latency" msgid "Generate inline integer division, optimize for latency." -msgstr "Générer la division entière enligne, optimiser pour la latence" +msgstr "Générer une version en ligne de la division entière, optimiser pour la latence." #: config/ia64/ia64.opt:86 -#, fuzzy -#| msgid "Generate inline integer division, optimize for throughput" msgid "Generate inline integer division, optimize for throughput." -msgstr "Générer la divisions entière enligne, optimiser pour le débit" +msgstr "Générer une version en ligne de la division entière, optimiser pour le débit." #: config/ia64/ia64.opt:90 -#, fuzzy -#| msgid "Warn about compile-time integer division by zero" msgid "Do not inline integer division." -msgstr "Avertir au sujet de la division entière par zéro au moment de la compilation" +msgstr "Ne pas mettre en ligne la division entière." #: config/ia64/ia64.opt:94 -#, fuzzy -#| msgid "Generate inline square root, optimize for latency" msgid "Generate inline square root, optimize for latency." -msgstr "Générer la racine carrée enligne, optimiser pour la latence" +msgstr "Générer une version en ligne de la racine carrée, optimiser pour la latence." #: config/ia64/ia64.opt:98 -#, fuzzy -#| msgid "Generate inline square root, optimize for throughput" msgid "Generate inline square root, optimize for throughput." -msgstr "Générer la racine carrée enligne, optimiser pour le débit" +msgstr "Générer une version en ligne de la racine carrée, optimiser pour le débit." #: config/ia64/ia64.opt:102 -#, fuzzy -#| msgid "Do not disable space regs" msgid "Do not inline square root." -msgstr "Ne pas désactiver l'espace registre" +msgstr "Ne pas mettre en ligne la racine carrée." #: config/ia64/ia64.opt:106 -#, fuzzy -#| msgid "Enable Dwarf 2 line debug info via GNU as" msgid "Enable DWARF line debug info via GNU as." -msgstr "Autoriser les infos de lignes de mise au point Dwarf 2 via GNU tel que" +msgstr "Activer les infos DWARF de débogage des lignes via GNU as." #: config/ia64/ia64.opt:110 -#, fuzzy -#| msgid "Enable earlier placing stop bits for better scheduling" msgid "Enable earlier placing stop bits for better scheduling." -msgstr "Autoriser l'insertion antérieure de stop bits pour un meilleur ordonnancement" +msgstr "Activer l'insertion plus tôt de bits de stop pour un meilleur ordonnancement." #: config/ia64/ia64.opt:114 config/spu/spu.opt:72 config/pa/pa.opt:58 #: config/sh/sh.opt:273 -#, fuzzy -#| msgid "Specify range of registers to make fixed" msgid "Specify range of registers to make fixed." -msgstr "spécifier l'étendue des registres pour la rendre fixe" +msgstr "Spécifier la plage des registres à rendre fixes." #: config/ia64/ia64.opt:118 config/rs6000/sysv4.opt:32 #: config/alpha/alpha.opt:130 -#, fuzzy -#| msgid "Specify bit size of immediate TLS offsets" msgid "Specify bit size of immediate TLS offsets." -msgstr "Spécifier la taille de bit des décalages immédiats TLS" +msgstr "Spécifier la taille en bits des décalages TLS immédiats." #: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:504 #: config/s390/s390.opt:170 config/sparc/sparc.opt:130 #: config/visium/visium.opt:49 -#, fuzzy -#| msgid "Schedule code for given CPU" msgid "Schedule code for given CPU." -msgstr "Ordonnancer le code pour le processeur donné" +msgstr "Ordonnancer le code pour le processeur donné." #: config/ia64/ia64.opt:126 msgid "Known Itanium CPUs (for use with the -mtune= option):" -msgstr "" +msgstr "Processeurs Itanium connus (à utiliser avec l'option -mtune=):" #: config/ia64/ia64.opt:136 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use data speculation before reload." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser la spéculation de données avant le rechargement." #: config/ia64/ia64.opt:140 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use data speculation after reload." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser la spéculation de données après le rechargement." #: config/ia64/ia64.opt:144 -#, fuzzy -#| msgid "Create console application" msgid "Use control speculation." -msgstr "Créer une application de type console" +msgstr "Utiliser la spéculation de contrôle." #: config/ia64/ia64.opt:148 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use in block data speculation before reload." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser la spéculation sur les données dans le bloc avant le rechargement." #: config/ia64/ia64.opt:152 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use in block data speculation after reload." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser la spéculation sur les données dans le bloc après le rechargement." #: config/ia64/ia64.opt:156 -#, fuzzy -#| msgid "Create console application" msgid "Use in block control speculation." -msgstr "Créer une application de type console" +msgstr "Utiliser la spéculation sur le contrôle dans le bloc." #: config/ia64/ia64.opt:160 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use simple data speculation check." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser une vérification simple de la spéculation sur les données." #: config/ia64/ia64.opt:164 -#, fuzzy -#| msgid "Allow speculative motion of more loads" msgid "Use simple data speculation check for control speculation." -msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" +msgstr "Utiliser une vérification simple de la spéculation sur les données pour la spéculation du contrôle." #: config/ia64/ia64.opt:174 msgid "Count speculative dependencies while calculating priority of instructions." -msgstr "" +msgstr "Compter les dépendances spéculatives tout en calculant la priorité des instructions." #: config/ia64/ia64.opt:178 -#, fuzzy -#| msgid "Enable earlier placing stop bits for better scheduling" msgid "Place a stop bit after every cycle when scheduling." -msgstr "Autoriser l'insertion antérieure de stop bits pour un meilleur ordonnancement" +msgstr "Placer un bit de stop après chaque cycle lors de l'ordonnancement." #: config/ia64/ia64.opt:182 msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group." -msgstr "" +msgstr "Supposer que les stockages et chargements de nombres en virgule flottante ne produiront probablement pas de conflits si ils sont placés dans un groupe d'instructions." #: config/ia64/ia64.opt:186 msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1." -msgstr "" +msgstr "Limite souple sur le nombre d'insns mémoire par groupe d'instructions. Donne une priorité plus basse aux insns mémoire suivantes qui tentent d'être ordonnancées dans le même groupe d'insn. Fréquemment utilisé pour éviter des conflits dans les zones de cache. La valeur par défaut est 1. " #: config/ia64/ia64.opt:190 msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)." -msgstr "" +msgstr "Interdit plus que « msched-max-memory-insns » dans le groupe d'instructions. Autrement, la limite est « souple » (préfère les opérations non-mémoire quand la limite est atteinte)." #: config/ia64/ia64.opt:194 msgid "Don't generate checks for control speculation in selective scheduling." -msgstr "" +msgstr "Ne pas générer de vérifications pour la spéculation de contrôle dans l'ordonnancement sélectif." #: config/spu/spu.opt:20 -#, fuzzy -#| msgid "location enumeration for BOOLS" msgid "Emit warnings when run-time relocations are generated." -msgstr "localisation d'énumération pour BOOLÉENS" +msgstr "Émettre des avertissements quand des relocalisations à l'exécution sont générées." #: config/spu/spu.opt:24 msgid "Emit errors when run-time relocations are generated." -msgstr "" +msgstr "Émettre des erreurs quand des relocalisations à l'exécution sont générées." #: config/spu/spu.opt:28 msgid "Specify cost of branches (Default 20)." -msgstr "" +msgstr "Spécifier le coût des branches (20 par défaut)." #: config/spu/spu.opt:32 -#, fuzzy -#| msgid "Generate load/store with update instructions" msgid "Make sure loads and stores are not moved past DMA instructions." -msgstr "Générer les instructions de mise à jour de chargement/stockage" +msgstr "S'assurer que les chargements et les stockages ne sont pas déplacés au delà d'instructions DMA." #: config/spu/spu.opt:36 msgid "volatile must be specified on any memory that is effected by DMA." -msgstr "" +msgstr "« volatile » doit être spécifié sur toute mémoire qui est affectée par le DMA." #: config/spu/spu.opt:40 config/spu/spu.opt:44 msgid "Insert nops when it might improve performance by allowing dual issue (default)." -msgstr "" +msgstr "Insérer des nops quand cela pourrait améliorer la performance en permettant des doubles émissions dans les pipelines (par défaut)." #: config/spu/spu.opt:48 -#, fuzzy -#| msgid "Use jsr and rts for function calls and returns" msgid "Use standard main function as entry for startup." -msgstr "Utiliser jsr et rtc pour les appels de fonction et les retours" +msgstr "Utiliser la fonction « main » standard comme point d'entrée au démarrage." #: config/spu/spu.opt:52 -#, fuzzy -#| msgid "Generate string instructions for block moves" msgid "Generate branch hints for branches." -msgstr "Générer les instructions chaînes pour les déplacements de blocs" +msgstr "Générer des indices de branchement pour les branches." #: config/spu/spu.opt:56 -#, fuzzy -#| msgid "The maximum number of instructions to consider to fill a delay slot" msgid "Maximum number of nops to insert for a hint (Default 2)." -msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai" +msgstr "Le nombre maximum de nops à insérer pour un indice (2 par défaut)." #: config/spu/spu.opt:60 -#, fuzzy -#| msgid "The maximum number of instructions to consider to unroll in a loop" msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]." -msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle" +msgstr "Nombre maximum approximatif d'instructions à permettre entre un indice et sa branche [125]." #: config/spu/spu.opt:64 -#, fuzzy -#| msgid "Generate code for big endian" msgid "Generate code for 18 bit addressing." -msgstr "Générer du code pour un système à octets de poids fort" +msgstr "Générer du code pour un adressage sur 18 bits." #: config/spu/spu.opt:68 -#, fuzzy -#| msgid "Generate code for big endian" msgid "Generate code for 32 bit addressing." -msgstr "Générer du code pour un système à octets de poids fort" +msgstr "Générer du code pour un adressage sur 32 bits." #: config/spu/spu.opt:76 msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue." -msgstr "" +msgstr "Insérer des instructions hbrp après des cibles de branchements avec indices pour éviter de planter le SPU." #: config/spu/spu.opt:80 config/i386/i386.opt:247 config/s390/s390.opt:56 -#, fuzzy -#| msgid "Generate code for given CPU" msgid "Generate code for given CPU." -msgstr "Générer le code pour le processeur donné" +msgstr "Générer du code pour le processeur donné." #: config/spu/spu.opt:88 -#, fuzzy -#| msgid "Pass parameters in registers (default)" msgid "Access variables in 32-bit PPU objects (default)." -msgstr "Passer les paramètres par les registres (par défaut)" +msgstr "Accéder aux variables dans des objets PPU sur 32 bits (par défaut)." #: config/spu/spu.opt:92 -#, fuzzy -#| msgid "Pass parameters in registers (default)" msgid "Access variables in 64-bit PPU objects." -msgstr "Passer les paramètres par les registres (par défaut)" +msgstr "Accéder aux variables dans des objets PPU sur 64 bits." #: config/spu/spu.opt:96 msgid "Allow conversions between __ea and generic pointers (default)." -msgstr "" +msgstr "Permettre les conversions entre __ea et les pointeurs génériques (par défaut)." #: config/spu/spu.opt:100 msgid "Size (in KB) of software data cache." -msgstr "" +msgstr "La taille (en Ko) de la cache des données logicielles." #: config/spu/spu.opt:104 msgid "Atomically write back software data cache lines (default)." -msgstr "" +msgstr "Écrire atomiquement dans les lignes de cache des données logicielles (par défaut)." #: config/epiphany/epiphany.opt:24 msgid "Don't use any of r32..r63." -msgstr "" +msgstr "N'utiliser aucun des r32..r63." #: config/epiphany/epiphany.opt:28 msgid "preferentially allocate registers that allow short instruction generation." -msgstr "" +msgstr "allouer de préférence des registres qui autorisent la génération d'instructions courtes." #: config/epiphany/epiphany.opt:32 -#, fuzzy -#| msgid "Relax branches" msgid "Set branch cost." -msgstr "Branchements relaxés" +msgstr "Définir le coût d'un branchement." #: config/epiphany/epiphany.opt:36 -#, fuzzy -#| msgid "Enable use of conditional move instructions" msgid "enable conditional move instruction usage." -msgstr "Autoriser l'utilisation des instructions conditionnelles move" +msgstr "activer l'utilisation de l'instruction de déplacement conditionnel." #: config/epiphany/epiphany.opt:40 -#, fuzzy -#| msgid "The maximum number of instructions to consider to fill a delay slot" msgid "set number of nops to emit before each insn pattern." -msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai" +msgstr "fixer le nombre de nops a émettre avant chaque motif d'insn." #: config/epiphany/epiphany.opt:52 -#, fuzzy -#| msgid "Use software floating point" msgid "Use software floating point comparisons." -msgstr "Utiliser le traitement par logiciel des nombres flottants" +msgstr "Utiliser les comparaisons logicielles des virgules flottantes." #: config/epiphany/epiphany.opt:56 msgid "Enable split of 32 bit immediate loads into low / high part." -msgstr "" +msgstr "Autoriser la scission des chargements d'immédiats sur 32 bits en partie basse / haute." #: config/epiphany/epiphany.opt:60 msgid "Enable use of POST_INC / POST_DEC." -msgstr "" +msgstr "Activer l'utilisation de POST_INC / POST_DEC." #: config/epiphany/epiphany.opt:64 msgid "Enable use of POST_MODIFY." -msgstr "" +msgstr "Activer l'utilisation de POST_MODIFY." #: config/epiphany/epiphany.opt:68 msgid "Set number of bytes on the stack preallocated for use by the callee." -msgstr "" +msgstr "Définir le nombre d'octets pré-alloués sur la pile destinés à être utilisés par l'appelé." #: config/epiphany/epiphany.opt:72 msgid "Assume round to nearest is selected for purposes of scheduling." -msgstr "" +msgstr "Supposer que l'arrondi au plus proche est sélectionné quand il s'agit d'ordonnancer." #: config/epiphany/epiphany.opt:76 -#, fuzzy -#| msgid "Generate call insns as indirect calls, if necessary" msgid "Generate call insns as indirect calls." -msgstr "Générer l'appel insn comme un appel indirect, si nécessaire" +msgstr "Générer les insns d'appels comme appels indirects." #: config/epiphany/epiphany.opt:80 -#, fuzzy -#| msgid "Generate call insns as indirect calls, if necessary" msgid "Generate call insns as direct calls." -msgstr "Générer l'appel insn comme un appel indirect, si nécessaire" +msgstr "Générer les insns d'appels comme appels directs." #: config/epiphany/epiphany.opt:84 msgid "Assume labels and symbols can be addressed using 16 bit absolute addresses." -msgstr "" +msgstr "Supposer que les étiquettes et les symboles peuvent être adressés en utilisant des adresses absolues sur 16 bits." #: config/epiphany/epiphany.opt:108 msgid "A floatig point to integer truncation may be replaced with rounding to save mode switching." -msgstr "" +msgstr "La troncature d'un nombre décimal en nombre entier peut être remplacée par un arrondi pour économiser un changement de mode." #: config/epiphany/epiphany.opt:112 -#, fuzzy -#| msgid "Use structs on stronger alignment for double-word copies" msgid "Vectorize for double-word operations." -msgstr "Utiliser des structs avec alignement plus fort pour les copies de mots-doubles" +msgstr "Vectoriser pour des opérations sur des doubles mots." #: config/epiphany/epiphany.opt:128 msgid "Split unaligned 8 byte vector moves before post-modify address generation." -msgstr "" +msgstr "Scinder les déplacements de vecteurs de 8 octets non-alignés avant la génération d'adresse post-modifiée." #: config/epiphany/epiphany.opt:132 -#, fuzzy -#| msgid "Use hardware floating point instructions" msgid "Use the floating point unit for integer add/subtract." -msgstr "Utiliser les instructions matérielles en virgule flottante" +msgstr "Utiliser l'unité en virgule flottante pour ajouter/soustraire des entiers." #: config/epiphany/epiphany.opt:136 msgid "Set register to hold -1." -msgstr "" +msgstr "Définir le registre pour contenir -1." #: config/ft32/ft32.opt:23 msgid "target the software simulator." -msgstr "" +msgstr "cible le simulateur logiciel." #: config/ft32/ft32.opt:27 config/s390/s390.opt:201 config/mips/mips.opt:385 -#, fuzzy -#| msgid "Use ROM instead of RAM" msgid "Use LRA instead of reload." -msgstr "Utiliser le ROM au lieu de la RAM" +msgstr "Utiliser LRA au lieu d'un rechargement." #: config/ft32/ft32.opt:31 -#, fuzzy -#| msgid "Enable use of DB instruction" msgid "Avoid use of the DIV and MOD instructions" -msgstr "Activer l'utilisation d'instruction DB" +msgstr "Éviter l'utilisation des instructions DIV et MOD" #: config/h8300/h8300.opt:23 -#, fuzzy -#| msgid "Generate H8S code" msgid "Generate H8S code." -msgstr "Générer du code H8S" +msgstr "Générer du code H8S." #: config/h8300/h8300.opt:27 -#, fuzzy -#| msgid "Generate H8SX code" msgid "Generate H8SX code." -msgstr "Générer du code H8SX" +msgstr "Générer du code H8SX." #: config/h8300/h8300.opt:31 -#, fuzzy -#| msgid "Generate H8S/2600 code" msgid "Generate H8S/2600 code." -msgstr "Générer du code H8S/S2600" +msgstr "Générer du code H8S/S2600." #: config/h8300/h8300.opt:35 -#, fuzzy -#| msgid "Make integers 32 bits wide" msgid "Make integers 32 bits wide." -msgstr "Rendre les entiers larges de 32 bits" +msgstr "Rendre les entiers larges de 32 bits." #: config/h8300/h8300.opt:42 -#, fuzzy -#| msgid "Use registers for argument passing" msgid "Use registers for argument passing." -msgstr "Utiliser les registres pour le passage d'arguments" +msgstr "Utiliser les registres pour le passage d'arguments." #: config/h8300/h8300.opt:46 -#, fuzzy -#| msgid "Consider access to byte sized memory slow" msgid "Consider access to byte sized memory slow." -msgstr "Considérer l'accès mémoire lent pour la taille d'octets" +msgstr "Considérer que l'accès à une mémoire de un octet est lente." #: config/h8300/h8300.opt:50 -#, fuzzy -#| msgid "Enable linker relaxing" msgid "Enable linker relaxing." -msgstr "Activer la relâche par l'éditeur de liens" +msgstr "Activer la relâche par l'éditeur de liens." #: config/h8300/h8300.opt:54 -#, fuzzy -#| msgid "Generate H8/300H code" msgid "Generate H8/300H code." -msgstr "Générer du code H8/300H" +msgstr "Générer du code H8/300H." #: config/h8300/h8300.opt:58 -#, fuzzy -#| msgid "Enable the normal mode" msgid "Enable the normal mode." -msgstr "Activer le mode normal" +msgstr "Activer le mode normal." #: config/h8300/h8300.opt:62 -#, fuzzy -#| msgid "Use H8/300 alignment rules" msgid "Use H8/300 alignment rules." -msgstr "Utiliser les règles d'alignement H8/300" +msgstr "Utiliser les règles d'alignement du H8/300." #: config/h8300/h8300.opt:66 msgid "Push extended registers on stack in monitor functions." -msgstr "" +msgstr "Pousser les registres étendus sur la pile dans les fonctions de monitoring." #: config/h8300/h8300.opt:70 -#, fuzzy -#| msgid "Do not use the callt instruction" msgid "Do not push extended registers on stack in monitor functions." -msgstr "Ne pas utiliser l'instruction callt" +msgstr "Ne pas pousser les registres étendus sur la pile dans les fonctions de monitoring." #: config/pdp11/pdp11.opt:23 -#, fuzzy -#| msgid "Generate code for an 11/10" msgid "Generate code for an 11/10." -msgstr "Générer du code pour un 11/10" +msgstr "Générer du code pour un 11/10." #: config/pdp11/pdp11.opt:27 -#, fuzzy -#| msgid "Generate code for an 11/40" msgid "Generate code for an 11/40." -msgstr "Générer du code pour un 11/40" +msgstr "Générer du code pour un 11/40." #: config/pdp11/pdp11.opt:31 -#, fuzzy -#| msgid "Generate code for an 11/45" msgid "Generate code for an 11/45." -msgstr "Générer du code pour un 11/45" +msgstr "Générer du code pour un 11/45." #: config/pdp11/pdp11.opt:35 -#, fuzzy -#| msgid "Return floating point results in ac0" msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)." -msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0." +msgstr "Retourne les résultats en virgule flottante dans ac0 (fr0 dans la syntaxe de l'assembleur Unix)." #: config/pdp11/pdp11.opt:39 msgid "Do not use inline patterns for copying memory." -msgstr "" +msgstr "Ne pas utiliser des motifs en lignes pour copier de la mémoire." #: config/pdp11/pdp11.opt:43 msgid "Use inline patterns for copying memory." -msgstr "" +msgstr "Utiliser des motifs en lignes pour copier de la mémoire." #: config/pdp11/pdp11.opt:47 msgid "Do not pretend that branches are expensive." -msgstr "" +msgstr "Ne pas prétendre que les branches sont onéreuses." #: config/pdp11/pdp11.opt:51 msgid "Pretend that branches are expensive." -msgstr "" +msgstr "Prétendre que les branches sont onéreuses." #: config/pdp11/pdp11.opt:55 -#, fuzzy -#| msgid "Use the DEC assembler syntax" msgid "Use the DEC assembler syntax." -msgstr "Utiliser la syntaxe de l'assembleur DEC" +msgstr "Utiliser la syntaxe de l'assembleur DEC." #: config/pdp11/pdp11.opt:59 -#, fuzzy -#| msgid "Use 32 bit float" msgid "Use 32 bit float." -msgstr "Utiliser des flottants de 32 bits" +msgstr "Utiliser des flottants de 32 bits." #: config/pdp11/pdp11.opt:63 -#, fuzzy -#| msgid "Use 64 bit float" msgid "Use 64 bit float." -msgstr "Utiliser des flottants de 64 bits" +msgstr "Utiliser des flottants de 64 bits." #: config/pdp11/pdp11.opt:67 config/rs6000/rs6000.opt:177 #: config/frv/frv.opt:158 -#, fuzzy -#| msgid "Use hardware floating point" msgid "Use hardware floating point." -msgstr "Utiliser l'unité matérielle en virgule flottante" +msgstr "Utiliser l'unité matérielle pour les opérations en virgule flottante." #: config/pdp11/pdp11.opt:71 -#, fuzzy -#| msgid "Use 16 bit int" msgid "Use 16 bit int." -msgstr "Utiliser des int de 16 bits" +msgstr "Utiliser des int de 16 bits." #: config/pdp11/pdp11.opt:75 -#, fuzzy -#| msgid "Use 32 bit int" msgid "Use 32 bit int." -msgstr "Utiliser des int de 32 bits" +msgstr "Utiliser des int de 32 bits." #: config/pdp11/pdp11.opt:79 config/rs6000/rs6000.opt:173 -#, fuzzy -#| msgid "Do not use hardware floating point" msgid "Do not use hardware floating point." -msgstr "Ne pas utiliser le matériel pour virgule flottante" +msgstr "Ne pas utiliser l'unité matérielle pour les opérations en virgule flottante." #: config/pdp11/pdp11.opt:83 -#, fuzzy -#| msgid "Target has split I&D" msgid "Target has split I&D." -msgstr "Cible a un I&D séparé" +msgstr "La cible a un bus I&D (Instruction and Data space) séparé." #: config/pdp11/pdp11.opt:87 -#, fuzzy -#| msgid "Use UNIX assembler syntax" msgid "Use UNIX assembler syntax." -msgstr "Utiliser la syntaxe de l'assembleur UNIX" +msgstr "Utiliser la syntaxe de l'assembleur UNIX." #: config/xtensa/xtensa.opt:23 -#, fuzzy -#| msgid "Use CONST16 instruction to load constants" msgid "Use CONST16 instruction to load constants." -msgstr "Utiliser les instructions CONST16 pour charger les constantes" +msgstr "Utiliser l'instruction CONST16 pour charger les constantes." #: config/xtensa/xtensa.opt:27 -#, fuzzy -#| msgid "Generate position-independent code if possible" msgid "Disable position-independent code (PIC) for use in OS kernel code." -msgstr "Générer du code indépendant de la position si possible" +msgstr "Désactiver le code indépendant de la position (PIC) pour l'utilisation dans du code du noyau de l'OS." #: config/xtensa/xtensa.opt:31 -#, fuzzy -#| msgid "Use indirect CALLXn instructions for large programs" msgid "Use indirect CALLXn instructions for large programs." -msgstr "Utiliser les instructions indirectes CALLXn pour les grands programmes" +msgstr "Utiliser les instructions indirectes CALLXn pour les grands programmes." #: config/xtensa/xtensa.opt:35 -#, fuzzy -#| msgid "Automatically align branch targets to reduce branch penalties" msgid "Automatically align branch targets to reduce branch penalties." -msgstr "Aligner automatiquement les branchements cibles pour réduire les pénalités de branchement" +msgstr "Aligner automatiquement les cibles des branchements pour réduire les pénalités des branchements." #: config/xtensa/xtensa.opt:39 -#, fuzzy -#| msgid "Intersperse literal pools with code in the text section" msgid "Intersperse literal pools with code in the text section." -msgstr "Entrecouper les lots de littéraux avec le code dans la section texte" +msgstr "Entrecouper les lots de littéraux avec le code dans la section texte." #: config/xtensa/xtensa.opt:43 msgid "Relax literals in assembler and place them automatically in the text section." -msgstr "" +msgstr "Relaxer les littéraux en assembleur et les placer automatiquement dans la section texte." #: config/xtensa/xtensa.opt:47 -#, fuzzy -#| msgid "Do not serialize volatile memory references with MEMW instructions" msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions." -msgstr "Ne pas sérialiser les références à la mémoire volatile avec des instructions MEMW" +msgstr "-mno-serialize-volatile\tNe pas sérialiser les références à la mémoire volatile avec des instructions MEMW." #: config/i386/cygming.opt:23 -#, fuzzy -#| msgid "Create console application" msgid "Create console application." -msgstr "Créer une application de type console" +msgstr "Créer une application de type console." #: config/i386/cygming.opt:27 -#, fuzzy -#| msgid "Generate code for a DLL" msgid "Generate code for a DLL." -msgstr "Générer le code pour un DLL" +msgstr "Générer le code pour une DLL." #: config/i386/cygming.opt:31 -#, fuzzy -#| msgid "Ignore dllimport for functions" msgid "Ignore dllimport for functions." -msgstr "Ignorer dllimport pour fonctions" +msgstr "Ignorer dllimport pour les fonctions." #: config/i386/cygming.opt:35 -#, fuzzy -#| msgid "Use Mingw-specific thread support" msgid "Use Mingw-specific thread support." -msgstr "Utilise le support de thread spécifique à Mingw" +msgstr "Utiliser le support de threads spécifique à Mingw." #: config/i386/cygming.opt:39 -#, fuzzy -#| msgid "Set Windows defines" msgid "Set Windows defines." -msgstr "Initialiser les définitions Windows" +msgstr "Initialiser les définitions Windows." #: config/i386/cygming.opt:43 -#, fuzzy -#| msgid "Create GUI application" msgid "Create GUI application." -msgstr "Créer une application de type GUI" +msgstr "Créer une application de type GUI." #: config/i386/cygming.opt:47 config/i386/interix.opt:32 msgid "Use the GNU extension to the PE format for aligned common data." -msgstr "" +msgstr "Utiliser l'extension GNU du format PE pour les données communes alignées." #: config/i386/cygming.opt:51 msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement." -msgstr "" +msgstr "Compiler du code qui repose sur la surcouche de la DLL Cygwin pour supporter le remplacement des opérateurs new et delete du C++." #: config/i386/cygming.opt:58 msgid "Put relocated read-only data into .data section." -msgstr "" +msgstr "Placer les données relocalisées en lecture seule dans la section .data." #: config/i386/mingw.opt:29 msgid "Warn about none ISO msvcrt scanf/printf width extensions." -msgstr "" +msgstr "Avertir à propos des extensions de largeur de scanf/printf de msvcrt qui ne sont pas ISO." #: config/i386/mingw.opt:33 msgid "For nested functions on stack executable permission is set." -msgstr "" +msgstr "Activer la permission d'exécution sur la pile pour les fonctions imbriquées." #: config/i386/mingw-w64.opt:23 msgid "Use unicode startup and define UNICODE macro." -msgstr "" +msgstr "Utiliser une amorce unicode et défini la macro UNICODE." #: config/i386/i386.opt:182 -#, fuzzy -#| msgid "sizeof(long double) is 16" msgid "sizeof(long double) is 16." -msgstr "sizeof(long double) est 16" +msgstr "sizeof(long double) vaut 16." #: config/i386/i386.opt:186 config/i386/i386.opt:354 -#, fuzzy -#| msgid "Use hardware fp" msgid "Use hardware fp." -msgstr "Utiliser le FP matériel" +msgstr "Utiliser le coprocesseur mathématique." #: config/i386/i386.opt:190 -#, fuzzy -#| msgid "sizeof(long double) is 12" msgid "sizeof(long double) is 12." -msgstr "sizeof(long double) est 12" +msgstr "sizeof(long double) vaut 12." #: config/i386/i386.opt:194 -#, fuzzy -#| msgid "Use 80-bit long double" msgid "Use 80-bit long double." -msgstr "Utiliser un long double de 80 bits" +msgstr "Utiliser un long double de 80 bits." #: config/i386/i386.opt:198 config/s390/s390.opt:130 #: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:102 -#, fuzzy -#| msgid "Use 64-bit long double" msgid "Use 64-bit long double." -msgstr "Utiliser un long double de 64 bits" +msgstr "Utiliser un long double de 64 bits." #: config/i386/i386.opt:202 config/s390/s390.opt:126 #: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:98 -#, fuzzy -#| msgid "Use 128-bit long double" msgid "Use 128-bit long double." -msgstr "Utiliser un long double de 128 bits" +msgstr "Utiliser un long double de 128 bits." #: config/i386/i386.opt:206 config/sh/sh.opt:209 -#, fuzzy -#| msgid "Do not move instructions into a function's prologue" msgid "Reserve space for outgoing arguments in the function prologue." -msgstr "Ne pas déplacer les instruction dans le prologue de fonction" +msgstr "Réserver de l'espace dans le prologue d'une fonction pour les arguments de sortie." #: config/i386/i386.opt:210 -#, fuzzy -#| msgid "Align some doubles on dword boundary" msgid "Align some doubles on dword boundary." -msgstr "Aligner quelques doubles sur des frontières de mots doubles" +msgstr "Aligner quelques doubles sur des frontières de mots doubles." #: config/i386/i386.opt:214 -#, fuzzy -#| msgid "Function starts are aligned to this power of 2" msgid "Function starts are aligned to this power of 2." -msgstr "Débuts des fonction alignés selon une puissance de 2" +msgstr "Aligner les débuts des fonctions sur une puissance de 2 de cette valeur." #: config/i386/i386.opt:218 -#, fuzzy -#| msgid "Jump targets are aligned to this power of 2" msgid "Jump targets are aligned to this power of 2." -msgstr "Sauts de cibles alignés selon une puissance de 2" +msgstr "Aligner les cibles des sauts sur une puissance de 2 de cette valeur." #: config/i386/i386.opt:222 -#, fuzzy -#| msgid "Loop code aligned to this power of 2" msgid "Loop code aligned to this power of 2." -msgstr "Codes de boucles alignés selon une puissance de 2" +msgstr "Aligner le code des boucles sur une puissance de 2 de cette valeur." #: config/i386/i386.opt:226 -#, fuzzy -#| msgid "Align destination of the string operations" msgid "Align destination of the string operations." -msgstr "Aligner la destination des opérations sur les chaînes" +msgstr "Aligner la destination des opérations sur les chaînes." #: config/i386/i386.opt:230 -#, fuzzy -#| msgid "Do not tune writable data alignment" msgid "Use the given data alignment." -msgstr "Ne pas ajuster l'alignement les sections de données dynamiques" +msgstr "Utiliser l'alignement de données spécifié." #: config/i386/i386.opt:234 msgid "Known data alignment choices (for use with the -malign-data= option):" -msgstr "" +msgstr "Choix connus pour l'alignement de données (à utiliser avec l'option -malign-data=):" #: config/i386/i386.opt:251 -#, fuzzy -#| msgid "Use given assembler dialect" msgid "Use given assembler dialect." -msgstr "Utiliser la syntaxe de l'assembleur donné" +msgstr "Utiliser le dialecte de l'assembleur donné." #: config/i386/i386.opt:255 msgid "Known assembler dialects (for use with the -masm-dialect= option):" -msgstr "" +msgstr "Dialectes d'assembleurs connus (à utiliser avec l'option -masm-dialect=):" #: config/i386/i386.opt:265 -#, fuzzy -#| msgid "Branches are this expensive (1-5, arbitrary units)" msgid "Branches are this expensive (1-5, arbitrary units)." -msgstr "Branchements coûteux à ce point (1-4, unités arbitraires)" +msgstr "Les branchements sont coûteux à ce point (1-5, unités arbitraires)." #: config/i386/i386.opt:269 msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model." -msgstr "" +msgstr "Les données plus grandes que la limite spécifiée iront dans la section .ldata dans le modèle moyen du x86-64." #: config/i386/i386.opt:273 -#, fuzzy -#| msgid "Use given x86-64 code model" msgid "Use given x86-64 code model." -msgstr "Utiliser le modèle de x86-64 donné" +msgstr "Utiliser le modèle de code x86-64 donné." #: config/i386/i386.opt:277 config/rs6000/aix64.opt:36 #: config/rs6000/linux64.opt:32 config/tilegx/tilegx.opt:57 msgid "Known code models (for use with the -mcmodel= option):" -msgstr "" +msgstr "Modèles de code connus (à utiliser avec l'option -mcmodel=):" #: config/i386/i386.opt:296 -#, fuzzy -#| msgid "Use complex addressing modes" msgid "Use given address mode." -msgstr "Utiliser les modes d'adressage complexes" +msgstr "Utiliser le mode d'adressage spécifié." #: config/i386/i386.opt:300 msgid "Known address mode (for use with the -maddress-mode= option):" -msgstr "" +msgstr "Modes d'adressage connus (à utiliser avec l'option -maddress-mode=):" #: config/i386/i386.opt:309 -#, fuzzy -#| msgid "This switch is deprecated; use -Wextra instead" msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead" -msgstr "Cette option est obsolète; utiliser -Wextra à la place" +msgstr "%<-mcpu=%> est déprécié; utilisez plutôt %<-mtune=%> ou %<-march=%>" #: config/i386/i386.opt:313 -#, fuzzy -#| msgid "Generate sin, cos, sqrt for FPU" msgid "Generate sin, cos, sqrt for FPU." -msgstr "Générer sin, cos, sqrt pour le FPU" +msgstr "Générer sin, cos, sqrt pour le coprocesseur mathématique." #: config/i386/i386.opt:317 msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack." -msgstr "" +msgstr "Toujours utiliser DRAP (Dynamic Realigned Argument Pointer) pour ré-aligner la pile." #: config/i386/i386.opt:321 -#, fuzzy -#| msgid "Return values of functions in FPU registers" msgid "Return values of functions in FPU registers." -msgstr "Retourner les valeurs de fonctions dans les registres FPU" +msgstr "Retourner les valeurs de fonctions dans les registres du coprocesseur mathématique." #: config/i386/i386.opt:325 -#, fuzzy -#| msgid "Generate floating point mathematics using given instruction set" msgid "Generate floating point mathematics using given instruction set." -msgstr "Générer les mathématiques en virgule flottante avec le jeu d'instructions données" +msgstr "Générer les mathématiques en virgule flottante avec le jeu d'instructions donné." #: config/i386/i386.opt:329 -#, fuzzy -#| msgid "too many arguments for format" msgid "Valid arguments to -mfpmath=:" -msgstr "trop d'arguments pour le format" +msgstr "Arguments valides pour -mfpmath=:" #: config/i386/i386.opt:362 -#, fuzzy -#| msgid "Inline all known string operations" msgid "Inline all known string operations." -msgstr "Permettre l'enlignage dans toutes les opérations portant sur les chaînes" +msgstr "Mettre en ligne toutes les opérations connues sur des chaînes." #: config/i386/i386.opt:366 msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks." -msgstr "" +msgstr "Mettre en ligne les opérations memset/memcpy sur des chaînes mais n'exécuter la version en ligne que pour des petits blocs." #: config/i386/i386.opt:369 msgid "%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead" -msgstr "" +msgstr "%<-mintel-syntax%> et %<-mno-intel-syntax%> sont dépréciés; utilisez plutôt %<-masm=intel%> et %<-masm=att%>" #: config/i386/i386.opt:374 -#, fuzzy -#| msgid "Use native (MS) bitfield layout" msgid "Use native (MS) bitfield layout." -msgstr "Utiliser une configuration de champ de bits native (MS)" +msgstr "Utiliser une disposition des champs de bits native (MS)." #: config/i386/i386.opt:394 -#, fuzzy -#| msgid "Return floating point results in ac0" msgid "Set 80387 floating-point precision to 32-bit." -msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0." +msgstr "Fixer la précision en virgule flottante du 80387 à 32 bits." #: config/i386/i386.opt:398 -#, fuzzy -#| msgid "Return floating point results in ac0" msgid "Set 80387 floating-point precision to 64-bit." -msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0." +msgstr "Fixer la précision en virgule flottante du 80387 à 64 bits." #: config/i386/i386.opt:402 -#, fuzzy -#| msgid "Return floating point results in ac0" msgid "Set 80387 floating-point precision to 80-bit." -msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0." +msgstr "Fixer la précision en virgule flottante du 80387 à 80 bits." #: config/i386/i386.opt:406 -#, fuzzy -#| msgid "Attempt to keep stack aligned to this power of 2" msgid "Attempt to keep stack aligned to this power of 2." -msgstr "Tentative de conservation de la pile alignée selon une puissance de 2" +msgstr "Essayer de conserver l'alignement de la pile sur cette puissance de 2." #: config/i386/i386.opt:410 -#, fuzzy -#| msgid "Attempt to keep stack aligned to this power of 2" msgid "Assume incoming stack aligned to this power of 2." -msgstr "Tentative de conservation de la pile alignée selon une puissance de 2" +msgstr "Supposer que l'alignement de la pile entrante est sur cette puissance de 2." #: config/i386/i386.opt:414 -#, fuzzy -#| msgid "Use push instructions to save outgoing arguments" msgid "Use push instructions to save outgoing arguments." -msgstr "Utiliser les instructions push pour sauvegardes les arguments sortants" +msgstr "Utiliser les instructions push pour sauvegardes les arguments sortants." #: config/i386/i386.opt:418 -#, fuzzy -#| msgid "Use red-zone in the x86-64 code" msgid "Use red-zone in the x86-64 code." -msgstr "Utiliser la zone-rouge pour le code x86-64" +msgstr "Utiliser une zone rouge (espace réservé sur la pile pour usage par l'appelé) dans le code x86-64." #: config/i386/i386.opt:422 -#, fuzzy -#| msgid "Number of registers used to pass integer arguments" msgid "Number of registers used to pass integer arguments." -msgstr "Nombre de registres utilisés pour passer les arguments entiers" +msgstr "Nombre de registres utilisés pour passer les arguments entiers." #: config/i386/i386.opt:426 -#, fuzzy -#| msgid "Alternate calling convention" msgid "Alternate calling convention." -msgstr "Convention alternative d'appels" +msgstr "Convention d'appel alternative." #: config/i386/i386.opt:430 config/alpha/alpha.opt:23 -#, fuzzy -#| msgid "Do not use hardware fp" msgid "Do not use hardware fp." -msgstr "Ne pas utiliser l'unité FP matérielle" +msgstr "Ne pas utiliser le coprocesseur mathématique." #: config/i386/i386.opt:434 msgid "Use SSE register passing conventions for SF and DF mode." -msgstr "" +msgstr "Utiliser les conventions de passage des registres SSE pour les modes SF et DF." #: config/i386/i386.opt:438 msgid "Realign stack in prologue." -msgstr "" +msgstr "Ré-aligner la pile dans le prologue." #: config/i386/i386.opt:442 -#, fuzzy -#| msgid "Enable stack probing" msgid "Enable stack probing." -msgstr "Autoriser le sondage de la pile" +msgstr "Autoriser le sondage de la pile." #: config/i386/i386.opt:446 msgid "Specify memcpy expansion strategy when expected size is known." -msgstr "" +msgstr "Spécifier la stratégie d'expansion de memcpy quand la taille attendue est connue." #: config/i386/i386.opt:450 msgid "Specify memset expansion strategy when expected size is known." -msgstr "" +msgstr "Spécifier la stratégie d'expansion de memset quand la taille attendue est connue." #: config/i386/i386.opt:454 -#, fuzzy -#| msgid "possible start of unterminated string literal" msgid "Chose strategy to generate stringop using." -msgstr "début possible d'une chaîne de mot non terminée" +msgstr "Choisir la stratégie pour générer du code en ligne pour les opérations sur des chaînes." #: config/i386/i386.opt:458 msgid "Valid arguments to -mstringop-strategy=:" -msgstr "" +msgstr "Les arguments valables pour -mstringop-strategy=:" #: config/i386/i386.opt:486 -#, fuzzy -#| msgid "Use given thread-local storage dialect" msgid "Use given thread-local storage dialect." -msgstr "Utiliser le dialecte de stockage du thread local fourni" +msgstr "Utiliser le dialecte de stockage local au thread fourni." #: config/i386/i386.opt:490 msgid "Known TLS dialects (for use with the -mtls-dialect= option):" -msgstr "" +msgstr "Dialectes TLS connus (à utiliser avec l'option -mtls-dialect=):" #: config/i386/i386.opt:500 -#, fuzzy, c-format -#| msgid "Use direct references against %gs when accessing tls data" +#, c-format msgid "Use direct references against %gs when accessing tls data." -msgstr "Utiliser la référence directe envers %gs lors de l'accès des données tls" +msgstr "Utiliser les références directes envers %gs lors de l'accès des données TLS." #: config/i386/i386.opt:508 -#, fuzzy -#| msgid "Allow all ugly features" msgid "Fine grain control of tune features." -msgstr "Permettre toutes les options laides" +msgstr "Contrôle fin des fonctionnalités d'ajustement." #: config/i386/i386.opt:512 -#, fuzzy -#| msgid "Allow all ugly features" msgid "Clear all tune features." -msgstr "Permettre toutes les options laides" +msgstr "Effacer toutes les fonctionnalités d'ajustement." #: config/i386/i386.opt:519 -#, fuzzy -#| msgid "Generate code for given CPU" msgid "Generate code that conforms to Intel MCU psABI." -msgstr "Générer le code pour le processeur donné" +msgstr "Générer du code conforme à l'ABI spécifique au processeur (psABI) du MCU Intel." #: config/i386/i386.opt:523 -#, fuzzy -#| msgid "Generate code for given CPU" msgid "Generate code that conforms to the given ABI." -msgstr "Générer le code pour le processeur donné" +msgstr "Générer du code conforme à l'ABI spécifiée." #: config/i386/i386.opt:527 msgid "Known ABIs (for use with the -mabi= option):" -msgstr "" +msgstr "ABI connues (à utiliser avec l'option -mabi=):" #: config/i386/i386.opt:537 config/rs6000/rs6000.opt:189 -#, fuzzy -#| msgid "Specify ABI to use" msgid "Vector library ABI to use." -msgstr "Spécifier l'ABI à utiliser" +msgstr "ABI de la bibliothèque vectorielle à utiliser." #: config/i386/i386.opt:541 msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):" -msgstr "" +msgstr "ABI des bibliothèques vectorielles connues (à utiliser avec l'option -mveclibabi=):" #: config/i386/i386.opt:551 -#, fuzzy -#| msgid "Return floating point results in memory" msgid "Return 8-byte vectors in memory." -msgstr "Le résultat retourné en virgule flottante se retrouve en mémoire." +msgstr "Retourner des vecteurs de 8 octets en mémoire." #: config/i386/i386.opt:555 msgid "Generate reciprocals instead of divss and sqrtss." -msgstr "" +msgstr "Générer des réciproques au lieu de divss et sqrtss." #: config/i386/i386.opt:559 msgid "Control generation of reciprocal estimates." -msgstr "" +msgstr "Contrôle la génération des estimations réciproques." #: config/i386/i386.opt:563 -#, fuzzy -#| msgid "Do not move instructions into a function's prologue" msgid "Generate cld instruction in the function prologue." -msgstr "Ne pas déplacer les instruction dans le prologue de fonction" +msgstr "Générer l'instruction cld dans le prologue de fonctions." #: config/i386/i386.opt:567 msgid "Generate vzeroupper instruction before a transfer of control flow out of" -msgstr "" +msgstr "Générer l'instruction vzeroupper avant un transfert du flux de contrôle hors d'une fonction." #: config/i386/i386.opt:572 msgid "Disable Scalar to Vector optimization pass transforming 64-bit integer" -msgstr "" +msgstr "Désactiver la passe d'optimisation de scalaires en vecteurs qui transforme les calculs sur des entiers de 64 bits en calculs sur des vecteurs." #: config/i386/i386.opt:577 msgid "Do dispatch scheduling if processor is bdver1, bdver2, bdver3, bdver4" -msgstr "" +msgstr "Effectuer le changement de contexte de l'ordonnanceur si le processeur est un bdver1, bdver2, bdver3, bdver4 ou znver1 et l'ordonnancement Haifa est sélectionné." #: config/i386/i386.opt:582 msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer." -msgstr "" +msgstr "Utiliser les instructions AVX 128 bits au lieu des instructions AVX 256 bits dans le vectoriseur automatique." #: config/i386/i386.opt:588 -#, fuzzy -#| msgid "Generate 32bit i386 code" msgid "Generate 32bit i386 code." -msgstr "Générer du code 32 bits pour i386" +msgstr "Générer du code 32 bits pour i386." #: config/i386/i386.opt:592 -#, fuzzy -#| msgid "Generate 64bit x86-64 code" msgid "Generate 64bit x86-64 code." -msgstr "Générer du code 64 bits pour x86-64" +msgstr "Générer du code 64 bits pour x86-64." #: config/i386/i386.opt:596 -#, fuzzy -#| msgid "Generate 32bit x86-64 code" msgid "Generate 32bit x86-64 code." -msgstr "Générer du code 32 bits pour x86-64" +msgstr "Générer du code 32 bits pour x86-64." #: config/i386/i386.opt:600 -#, fuzzy -#| msgid "Generate 16bit i386 code" msgid "Generate 16bit i386 code." -msgstr "Générer du code 16 bits pour i386" +msgstr "Générer du code 16 bits pour i386." #: config/i386/i386.opt:604 -#, fuzzy -#| msgid "Support MMX built-in functions" msgid "Support MMX built-in functions." -msgstr "Supporte les fonctions internes MMX" +msgstr "Supporter les fonctions internes MMX." #: config/i386/i386.opt:608 -#, fuzzy -#| msgid "Support 3DNow! built-in functions" msgid "Support 3DNow! built-in functions." -msgstr "Supporte les fonctions internes 3DNOW!" +msgstr "Supporter les fonctions internes 3DNow!." #: config/i386/i386.opt:612 -#, fuzzy -#| msgid "Support Athlon 3Dnow! built-in functions" msgid "Support Athlon 3Dnow! built-in functions." -msgstr "Supporte les fonctions internes 3DNOW!" +msgstr "Supporter les fonctions internes 3DNow! de l'Athlon." #: config/i386/i386.opt:616 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support MMX and SSE built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes MMX et SSE et la génération de code." #: config/i386/i386.opt:620 -#, fuzzy -#| msgid "Support MMX, SSE and SSE2 built-in functions and code generation" msgid "Support MMX, SSE and SSE2 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE et SSE2 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE et SSE2 et la génération de code." #: config/i386/i386.opt:624 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code." #: config/i386/i386.opt:628 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3 et SSSE3 et la génération de code." #: config/i386/i386.opt:632 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3 et SSE4.1 et la génération de code." #: config/i386/i386.opt:636 config/i386/i386.opt:640 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 et SSE4.2 et la génération de code." #: config/i386/i386.opt:644 -#, fuzzy -#| msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation." -msgstr "Ne supporte pas les fonctions internes MMX, SSE et SSE2 et la génération de code" +msgstr "Ne pas supporter les fonctions internes SSE4.1 et SSE4.2 et la génération de code." #: config/i386/i386.opt:647 msgid "%<-msse5%> was removed" -msgstr "" +msgstr "%<-msse5%> a été supprimé" #: config/i386/i386.opt:652 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 et AVX et la génération de code." #: config/i386/i386.opt:656 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et AVX2 et la génération de code." #: config/i386/i386.opt:660 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVX512F et la génération de code." #: config/i386/i386.opt:664 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512PF et la génération de code." #: config/i386/i386.opt:668 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512ER et la génération de code." #: config/i386/i386.opt:672 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512CD et la génération de code." #: config/i386/i386.opt:676 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512DQ et la génération de code." #: config/i386/i386.opt:680 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512BW et la génération de code." #: config/i386/i386.opt:684 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512VL et la génération de code." #: config/i386/i386.opt:688 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512IFMA et la génération de code." #: config/i386/i386.opt:692 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F et AVX512VBMI et la génération de code." #: config/i386/i386.opt:696 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et FMA et la génération de code." #: config/i386/i386.opt:700 -#, fuzzy -#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code" +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3 et SSE4A et la génération de code." #: config/i386/i386.opt:704 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support FMA4 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes FMA4 et la génération de code." #: config/i386/i386.opt:708 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support XOP built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes XOP et la génération de code." #: config/i386/i386.opt:712 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support LWP built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes LWP et la génération de code." #: config/i386/i386.opt:716 msgid "Support code generation of Advanced Bit Manipulation (ABM) instructions." -msgstr "" +msgstr "Supporter la génération de code des instructions ABM (Advanced Bit Manipulation)." #: config/i386/i386.opt:720 -#, fuzzy -#| msgid "Do not generate single field mfcr instruction" msgid "Support code generation of popcnt instruction." -msgstr "Ne pas générer des instructions à champ simple mfcr" +msgstr "Supporter la génération de code de l'instruction popcnt." #: config/i386/i386.opt:724 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support BMI built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes BMI et la génération de code." #: config/i386/i386.opt:728 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support BMI2 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes BMI2 et la génération de code." #: config/i386/i386.opt:732 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support LZCNT built-in function and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes LZCNT et la génération de code." #: config/i386/i386.opt:736 msgid "Support Hardware Lock Elision prefixes." -msgstr "" +msgstr "Supporter les préfixes pour l'élision matérielle des verrous (Hardware Lock Elision)." #: config/i386/i386.opt:740 -#, fuzzy -#| msgid "Support RDSEED instruction" msgid "Support RDSEED instruction." -msgstr "Supporte l'instruction RDSEED" +msgstr "Supporter l'instruction RDSEED." #: config/i386/i386.opt:744 -#, fuzzy -#| msgid "Support PREFETCHW instruction" msgid "Support PREFETCHW instruction." -msgstr "Supporte l'instruction PREFETCHW" +msgstr "Supporter l'instruction PREFETCHW." #: config/i386/i386.opt:748 -#, fuzzy -#| msgid "Do not generate char instructions" msgid "Support flag-preserving add-carry instructions." -msgstr "Ne pas générer des instructions « char »" +msgstr "Supporter les instructions de préservation du fanion de report de l'addition." #: config/i386/i386.opt:752 -#, fuzzy -#| msgid "Support CLFLUSHOPT instructions" msgid "Support CLFLUSHOPT instructions." -msgstr "Supporte les instructions CLFLUSHOPT" +msgstr "Supporter les instructions CLFLUSHOPT." #: config/i386/i386.opt:756 -#, fuzzy -#| msgid "Support CLWB instruction" msgid "Support CLWB instruction." -msgstr "Supporte l'instruction CLWB" +msgstr "Supporter l'instruction CLWB." #: config/i386/i386.opt:760 -#, fuzzy -#| msgid "Support PCOMMIT instruction" msgid "Support PCOMMIT instruction." -msgstr "Supporte l'instruction PCOMMIT" +msgstr "Supporter l'instruction PCOMMIT." #: config/i386/i386.opt:764 -#, fuzzy -#| msgid "Support FXSAVE and FXRSTOR instructions" msgid "Support FXSAVE and FXRSTOR instructions." -msgstr "Supporte les instructions FXSAVE et FXRSTOR" +msgstr "Supporter les instructions FXSAVE et FXRSTOR." #: config/i386/i386.opt:768 -#, fuzzy -#| msgid "Support XSAVE and XRSTOR instructions" msgid "Support XSAVE and XRSTOR instructions." -msgstr "Supporter les instructions XSAVE et XRSTOR" +msgstr "Supporter les instructions XSAVE et XRSTOR." #: config/i386/i386.opt:772 -#, fuzzy -#| msgid "Support XSAVEOPT instruction" msgid "Support XSAVEOPT instruction." -msgstr "Supporte les instructions XSAVEOPT" +msgstr "Supporter l'instruction XSAVEOPT." #: config/i386/i386.opt:776 -#, fuzzy -#| msgid "Support XSAVEC instructions" msgid "Support XSAVEC instructions." -msgstr "Supporte les instructions XSAVEC" +msgstr "Supporter les instructions XSAVEC." #: config/i386/i386.opt:780 -#, fuzzy -#| msgid "Support XSAVES and XRSTORS instructions" msgid "Support XSAVES and XRSTORS instructions." -msgstr "Supporte les instructions XSAVES et XRSTORS" +msgstr "Supporter les instructions XSAVES et XRSTORS." #: config/i386/i386.opt:784 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support TBM built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes TBM et la génération de code." #: config/i386/i386.opt:788 -#, fuzzy -#| msgid "Do not generate single field mfcr instruction" msgid "Support code generation of cmpxchg16b instruction." -msgstr "Ne pas générer des instructions à champ simple mfcr" +msgstr "Supporter la génération de code pour l'instruction cmpxchg16b." #: config/i386/i386.opt:792 msgid "Support code generation of sahf instruction in 64bit x86-64 code." -msgstr "" +msgstr "Supporter la génération de code pour l'instruction sahf dans le code x86-64 en 64 bit." #: config/i386/i386.opt:796 -#, fuzzy -#| msgid "Do not generate single field mfcr instruction" msgid "Support code generation of movbe instruction." -msgstr "Ne pas générer des instructions à champ simple mfcr" +msgstr "Supporter la génération de code pour l'instruction movbe." #: config/i386/i386.opt:800 -#, fuzzy -#| msgid "Do not generate char instructions" msgid "Support code generation of crc32 instruction." -msgstr "Ne pas générer des instructions « char »" +msgstr "Supporter la génération de code pour l'instruction crc32." #: config/i386/i386.opt:804 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support AES built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes AES et la génération de code." #: config/i386/i386.opt:808 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support SHA1 and SHA256 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes SHA1 et SHA256 et la génération de code." #: config/i386/i386.opt:812 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support PCLMUL built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes PCLMUL et la génération de code." #: config/i386/i386.opt:816 msgid "Encode SSE instructions with VEX prefix." -msgstr "" +msgstr "Encoder les instructions SSE avec le préfixe VEX." #: config/i386/i386.opt:820 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support FSGSBASE built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes FSGSBASE et la génération de code." #: config/i386/i386.opt:824 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support RDRND built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes RDRND et la génération de code." #: config/i386/i386.opt:828 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support F16C built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes F16C et la génération de code." #: config/i386/i386.opt:832 -#, fuzzy -#| msgid "Support MMX and SSE built-in functions and code generation" msgid "Support PREFETCHWT1 built-in functions and code generation." -msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" +msgstr "Supporter les fonctions internes PREFETCHWT1 et la génération de code." #: config/i386/i386.opt:836 -#, fuzzy -#| msgid "Call mcount for profiling after a function prologue" msgid "Emit profiling counter call at function entry before prologue." -msgstr "Ne pas appeler mcount pour le profilage avant le prologue de la fonction" +msgstr "Émettre un appel au compteur de profilage avant le prologue lors de l'entrée dans une fonction." #: config/i386/i386.opt:840 msgid "Generate __mcount_loc section with all mcount or __fentry__ calls." -msgstr "" +msgstr "Générer une section __mcount_loc avec tous des appels à mcount ou __fentry__." #: config/i386/i386.opt:844 msgid "Generate mcount/__fentry__ calls as nops. To activate they need to be" -msgstr "" +msgstr "Générer les appels mcount/__fentry__ sous forme de nops. Pour les activer, il faut insérer les instructions réelles." #: config/i386/i386.opt:849 msgid "Skip setting up RAX register when passing variable arguments." -msgstr "" +msgstr "Passe outre la préparation du registre RAX lors du passage d'arguments variables." #: config/i386/i386.opt:853 msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check." -msgstr "" +msgstr "Remplacer les divisions entières sur 32 ou 64 bits par des divisions sur 8 bits non signées avec vérification à l'exécution." #: config/i386/i386.opt:857 msgid "Split 32-byte AVX unaligned load." -msgstr "" +msgstr "Scinder les chargements AVX non alignés de 32 octets" #: config/i386/i386.opt:861 msgid "Split 32-byte AVX unaligned store." -msgstr "" +msgstr "Scinder les stockages AVX non alignés de 32 octets." #: config/i386/i386.opt:865 #, fuzzy Index: gcc/po/ChangeLog =================================================================== --- a/src/gcc/po/ChangeLog (.../tags/gcc_6_3_0_release) +++ b/src/gcc/po/ChangeLog (.../branches/gcc-6-branch) @@ -1,3 +1,25 @@ +2017-01-02 Joseph Myers + + * es.po: Update. + +2016-12-30 Jakub Jelinek + + PR translation/78745 + * exgettext: Handle multi-line help texts in *.opt files. + * gcc.pot: Regenerate. + +2016-12-30 Joseph Myers + + * es.po, fr.po: Update. + +2016-12-27 Jakub Jelinek + + * gcc.pot: Regenerate. + +2016-12-22 Joseph Myers + + * es.po: Update. + 2016-12-21 Release Manager * GCC 6.3.0 released. Index: gcc/po/gcc.pot =================================================================== --- a/src/gcc/po/gcc.pot (.../tags/gcc_6_3_0_release) +++ b/src/gcc/po/gcc.pot (.../branches/gcc-6-branch) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2016-08-19 21:03+0000\n" +"POT-Creation-Date: 2016-12-30 20:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -98,7 +98,7 @@ msgid "%s: some warnings being treated as errors" msgstr "" -#: diagnostic.c:290 input.c:169 c-family/c-opts.c:1310 cp/error.c:1196 +#: diagnostic.c:290 input.c:169 c-family/c-opts.c:1310 cp/error.c:1195 #: fortran/cpp.c:576 fortran/error.c:996 fortran/error.c:1016 msgid "" msgstr "" @@ -188,13 +188,13 @@ #. TARGET_PRINT_OPERAND must handle them. #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. -#: final.c:3940 config/arc/arc.c:4817 config/i386/i386.c:15968 +#: final.c:3940 config/arc/arc.c:4817 config/i386/i386.c:16020 #: config/pdp11/pdp11.c:1691 #, c-format msgid "floating constant misused" msgstr "" -#: final.c:3998 config/arc/arc.c:4889 config/i386/i386.c:16066 +#: final.c:3998 config/arc/arc.c:4889 config/i386/i386.c:16118 #: config/pdp11/pdp11.c:1732 #, c-format msgid "invalid expression as operand" @@ -1077,7 +1077,7 @@ msgid "GCSE disabled" msgstr "" -#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9773 +#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9783 #, gcc-internal-format msgid "function returns address of local variable" msgstr "" @@ -1102,17 +1102,17 @@ msgid "ignoring nonexistent directory \"%s\"\n" msgstr "" -#: incpath.c:373 +#: incpath.c:374 #, c-format msgid "#include \"...\" search starts here:\n" msgstr "" -#: incpath.c:377 +#: incpath.c:378 #, c-format msgid "#include <...> search starts here:\n" msgstr "" -#: incpath.c:382 +#: incpath.c:383 #, c-format msgid "End of search list.\n" msgstr "" @@ -1141,25 +1141,25 @@ msgid "At top level:" msgstr "" -#: langhooks.c:393 cp/error.c:3315 +#: langhooks.c:393 cp/error.c:3314 #, c-format msgid "In member function %qs" msgstr "" -#: langhooks.c:397 cp/error.c:3318 +#: langhooks.c:397 cp/error.c:3317 #, c-format msgid "In function %qs" msgstr "" -#: langhooks.c:448 cp/error.c:3268 +#: langhooks.c:448 cp/error.c:3267 msgid " inlined from %qs at %r%s:%d:%d%R" msgstr "" -#: langhooks.c:453 cp/error.c:3273 +#: langhooks.c:453 cp/error.c:3272 msgid " inlined from %qs at %r%s:%d%R" msgstr "" -#: langhooks.c:459 cp/error.c:3279 +#: langhooks.c:459 cp/error.c:3278 #, c-format msgid " inlined from %qs" msgstr "" @@ -1184,7 +1184,7 @@ msgid "this is the insn:" msgstr "" -#: lra-constraints.c:3564 reload.c:3830 +#: lra-constraints.c:3589 reload.c:3830 msgid "unable to generate reloads for:" msgstr "" @@ -1397,8 +1397,8 @@ msgid "options enabled: " msgstr "" -#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6818 cp/error.c:682 -#: cp/error.c:995 c-family/c-pretty-print.c:408 +#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6828 cp/error.c:682 +#: cp/error.c:994 c-family/c-pretty-print.c:411 #, gcc-internal-format msgid "" msgstr "" @@ -2929,8 +2929,8 @@ msgid "" msgstr "" -#: config/aarch64/aarch64.c:4451 config/arm/arm.c:21959 config/arm/arm.c:21972 -#: config/arm/arm.c:21997 config/nios2/nios2.c:2642 +#: config/aarch64/aarch64.c:4451 config/arm/arm.c:21958 config/arm/arm.c:21971 +#: config/arm/arm.c:21996 config/nios2/nios2.c:2642 #, c-format msgid "Unsupported operand for code '%c'" msgstr "" @@ -2949,7 +2949,7 @@ msgid "incompatible floating point / vector register operand for '%%%c'" msgstr "" -#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22504 +#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22503 #, c-format msgid "missing operand" msgstr "" @@ -2969,8 +2969,8 @@ msgid "invalid operand prefix '%%%c'" msgstr "" -#: config/alpha/alpha.c:5102 config/i386/i386.c:17140 -#: config/rs6000/rs6000.c:21150 config/sparc/sparc.c:8749 +#: config/alpha/alpha.c:5102 config/i386/i386.c:17192 +#: config/rs6000/rs6000.c:21180 config/sparc/sparc.c:8748 #, c-format msgid "'%%&' used without any local dynamic TLS references" msgstr "" @@ -2986,18 +2986,18 @@ msgstr "" #: config/alpha/alpha.c:5200 config/ia64/ia64.c:5436 -#: config/rs6000/rs6000.c:20830 config/xtensa/xtensa.c:2357 +#: config/rs6000/rs6000.c:20860 config/xtensa/xtensa.c:2357 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:20750 +#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:20780 #: config/xtensa/xtensa.c:2324 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:20778 +#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:20808 #, c-format msgid "invalid %%P value" msgstr "" @@ -3028,7 +3028,7 @@ msgstr "" #: config/alpha/alpha.c:5300 config/alpha/alpha.c:5311 -#: config/rs6000/rs6000.c:20838 +#: config/rs6000/rs6000.c:20868 #, c-format msgid "invalid %%s value" msgstr "" @@ -3038,7 +3038,7 @@ msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:20614 +#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:20644 #, c-format msgid "invalid %%E value" msgstr "" @@ -3049,7 +3049,7 @@ msgstr "" #: config/alpha/alpha.c:5393 config/cr16/cr16.c:1531 -#: config/rs6000/rs6000.c:21155 config/spu/spu.c:1446 +#: config/rs6000/rs6000.c:21185 config/spu/spu.c:1446 #, c-format msgid "invalid %%xn code" msgstr "" @@ -3102,7 +3102,7 @@ #. Unknown flag. #. Undocumented flag. #: config/arc/arc.c:3312 config/epiphany/epiphany.c:1286 -#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8932 +#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8931 #, c-format msgid "invalid operand output code" msgstr "" @@ -3112,29 +3112,29 @@ msgid "invalid UNSPEC as operand: %d" msgstr "" -#: config/arm/arm.c:19018 config/arm/arm.c:19043 config/arm/arm.c:19053 -#: config/arm/arm.c:19062 config/arm/arm.c:19070 +#: config/arm/arm.c:19013 config/arm/arm.c:19038 config/arm/arm.c:19048 +#: config/arm/arm.c:19057 config/arm/arm.c:19065 #, c-format msgid "invalid shift operand" msgstr "" -#: config/arm/arm.c:21835 config/arm/arm.c:21853 +#: config/arm/arm.c:21834 config/arm/arm.c:21852 #, c-format msgid "predicated Thumb instruction" msgstr "" -#: config/arm/arm.c:21841 +#: config/arm/arm.c:21840 #, c-format msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.c:22074 config/arm/arm.c:22096 config/arm/arm.c:22106 -#: config/arm/arm.c:22116 config/arm/arm.c:22126 config/arm/arm.c:22165 -#: config/arm/arm.c:22183 config/arm/arm.c:22208 config/arm/arm.c:22223 -#: config/arm/arm.c:22250 config/arm/arm.c:22257 config/arm/arm.c:22275 -#: config/arm/arm.c:22282 config/arm/arm.c:22290 config/arm/arm.c:22311 -#: config/arm/arm.c:22318 config/arm/arm.c:22451 config/arm/arm.c:22458 -#: config/arm/arm.c:22485 config/arm/arm.c:22492 config/bfin/bfin.c:1436 +#: config/arm/arm.c:22073 config/arm/arm.c:22095 config/arm/arm.c:22105 +#: config/arm/arm.c:22115 config/arm/arm.c:22125 config/arm/arm.c:22164 +#: config/arm/arm.c:22182 config/arm/arm.c:22207 config/arm/arm.c:22222 +#: config/arm/arm.c:22249 config/arm/arm.c:22256 config/arm/arm.c:22274 +#: config/arm/arm.c:22281 config/arm/arm.c:22289 config/arm/arm.c:22310 +#: config/arm/arm.c:22317 config/arm/arm.c:22450 config/arm/arm.c:22457 +#: config/arm/arm.c:22484 config/arm/arm.c:22491 config/bfin/bfin.c:1436 #: config/bfin/bfin.c:1443 config/bfin/bfin.c:1450 config/bfin/bfin.c:1457 #: config/bfin/bfin.c:1466 config/bfin/bfin.c:1473 config/bfin/bfin.c:1480 #: config/bfin/bfin.c:1487 @@ -3142,22 +3142,22 @@ msgid "invalid operand for code '%c'" msgstr "" -#: config/arm/arm.c:22178 +#: config/arm/arm.c:22177 #, c-format msgid "instruction never executed" msgstr "" #. Former Maverick support, removed after GCC-4.7. -#: config/arm/arm.c:22199 +#: config/arm/arm.c:22198 #, c-format msgid "obsolete Maverick format code '%c'" msgstr "" -#: config/arm/arm.c:23618 +#: config/arm/arm.c:23617 msgid "function parameters cannot have __fp16 type" msgstr "" -#: config/arm/arm.c:23628 +#: config/arm/arm.c:23627 msgid "functions cannot return __fp16 type" msgstr "" @@ -3199,32 +3199,32 @@ msgid "internal compiler error. Unknown mode:" msgstr "" -#: config/avr/avr.c:3419 config/avr/avr.c:4349 config/avr/avr.c:4798 +#: config/avr/avr.c:3455 config/avr/avr.c:4385 config/avr/avr.c:4834 msgid "invalid insn:" msgstr "" -#: config/avr/avr.c:3473 config/avr/avr.c:3578 config/avr/avr.c:3636 -#: config/avr/avr.c:3682 config/avr/avr.c:3701 config/avr/avr.c:3893 -#: config/avr/avr.c:4201 config/avr/avr.c:4485 config/avr/avr.c:4691 -#: config/avr/avr.c:4855 config/avr/avr.c:4949 config/avr/avr.c:5145 +#: config/avr/avr.c:3509 config/avr/avr.c:3614 config/avr/avr.c:3672 +#: config/avr/avr.c:3718 config/avr/avr.c:3737 config/avr/avr.c:3929 +#: config/avr/avr.c:4237 config/avr/avr.c:4521 config/avr/avr.c:4727 +#: config/avr/avr.c:4891 config/avr/avr.c:4985 config/avr/avr.c:5181 msgid "incorrect insn:" msgstr "" -#: config/avr/avr.c:3717 config/avr/avr.c:3992 config/avr/avr.c:4272 -#: config/avr/avr.c:4557 config/avr/avr.c:4737 config/avr/avr.c:5005 -#: config/avr/avr.c:5203 +#: config/avr/avr.c:3753 config/avr/avr.c:4028 config/avr/avr.c:4308 +#: config/avr/avr.c:4593 config/avr/avr.c:4773 config/avr/avr.c:5041 +#: config/avr/avr.c:5239 msgid "unknown move insn:" msgstr "" -#: config/avr/avr.c:5634 +#: config/avr/avr.c:5670 msgid "bad shift insn:" msgstr "" -#: config/avr/avr.c:5742 config/avr/avr.c:6223 config/avr/avr.c:6638 +#: config/avr/avr.c:5778 config/avr/avr.c:6259 config/avr/avr.c:6674 msgid "internal compiler error. Incorrect shift:" msgstr "" -#: config/avr/avr.c:7975 +#: config/avr/avr.c:8011 msgid "unsupported fixed-point conversion" msgstr "" @@ -3256,7 +3256,7 @@ #: config/cris/cris.c:612 config/ft32/ft32.c:104 config/moxie/moxie.c:103 #: final.c:3407 final.c:3409 fold-const.c:271 gcc.c:5211 gcc.c:5225 #: loop-iv.c:3043 loop-iv.c:3052 rtl-error.c:101 toplev.c:333 -#: tree-ssa-loop-niter.c:2328 tree-vrp.c:7480 cp/typeck.c:6065 java/expr.c:382 +#: tree-ssa-loop-niter.c:2328 tree-vrp.c:7508 cp/typeck.c:6065 java/expr.c:382 #: lto/lto-object.c:184 lto/lto-object.c:281 lto/lto-object.c:338 #: lto/lto-object.c:362 #, gcc-internal-format, gfc-internal-format @@ -3477,63 +3477,63 @@ msgid "bad output_condmove_single operand" msgstr "" -#: config/i386/i386.c:16060 +#: config/i386/i386.c:16112 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.c:16764 +#: config/i386/i386.c:16816 #, c-format msgid "invalid operand size for operand code 'O'" msgstr "" -#: config/i386/i386.c:16799 +#: config/i386/i386.c:16851 #, c-format msgid "invalid operand size for operand code 'z'" msgstr "" -#: config/i386/i386.c:16869 +#: config/i386/i386.c:16921 #, c-format msgid "invalid operand type used with operand code 'Z'" msgstr "" -#: config/i386/i386.c:16874 +#: config/i386/i386.c:16926 #, c-format msgid "invalid operand size for operand code 'Z'" msgstr "" -#: config/i386/i386.c:16950 +#: config/i386/i386.c:17002 #, c-format msgid "operand is not a condition code, invalid operand code 'Y'" msgstr "" -#: config/i386/i386.c:17023 +#: config/i386/i386.c:17075 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" msgstr "" -#: config/i386/i386.c:17040 +#: config/i386/i386.c:17092 #, c-format msgid "operand is not a condition code, invalid operand code '%c'" msgstr "" -#: config/i386/i386.c:17053 +#: config/i386/i386.c:17105 #, c-format msgid "" "operand is not an offsettable memory reference, invalid operand code 'H'" msgstr "" -#: config/i386/i386.c:17218 +#: config/i386/i386.c:17270 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.c:17276 +#: config/i386/i386.c:17328 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.c:27754 +#: config/i386/i386.c:27807 msgid "unknown insn mode" msgstr "" @@ -3572,13 +3572,13 @@ msgid "invalid operation on %<__fpreg%>" msgstr "" -#: config/iq2000/iq2000.c:3135 config/tilegx/tilegx.c:5308 +#: config/iq2000/iq2000.c:3135 config/tilegx/tilegx.c:5311 #: config/tilepro/tilepro.c:4703 #, c-format msgid "invalid %%P operand" msgstr "" -#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:20768 +#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:20798 #, c-format msgid "invalid %%p value" msgstr "" @@ -3641,7 +3641,7 @@ msgid "post-increment address is not a register" msgstr "" -#: config/m32r/m32r.c:2328 config/m32r/m32r.c:2343 config/rs6000/rs6000.c:32640 +#: config/m32r/m32r.c:2328 config/m32r/m32r.c:2343 config/rs6000/rs6000.c:32707 msgid "bad address" msgstr "" @@ -3766,277 +3766,277 @@ msgid "Try running '%s' in the shell to raise its limit.\n" msgstr "" -#: config/rs6000/rs6000.c:3959 +#: config/rs6000/rs6000.c:3967 msgid "-maltivec=le not allowed for big-endian targets" msgstr "" -#: config/rs6000/rs6000.c:3971 +#: config/rs6000/rs6000.c:3979 msgid "-mvsx requires hardware floating point" msgstr "" -#: config/rs6000/rs6000.c:3979 +#: config/rs6000/rs6000.c:3987 msgid "-mvsx and -mpaired are incompatible" msgstr "" -#: config/rs6000/rs6000.c:3981 +#: config/rs6000/rs6000.c:3989 msgid "-mvsx needs indexed addressing" msgstr "" -#: config/rs6000/rs6000.c:3986 +#: config/rs6000/rs6000.c:3994 msgid "-mvsx and -mno-altivec are incompatible" msgstr "" -#: config/rs6000/rs6000.c:3988 +#: config/rs6000/rs6000.c:3996 msgid "-mno-altivec disables vsx" msgstr "" -#: config/rs6000/rs6000.c:4129 +#: config/rs6000/rs6000.c:4137 msgid "-mquad-memory requires 64-bit mode" msgstr "" -#: config/rs6000/rs6000.c:4132 +#: config/rs6000/rs6000.c:4140 msgid "-mquad-memory-atomic requires 64-bit mode" msgstr "" -#: config/rs6000/rs6000.c:4144 +#: config/rs6000/rs6000.c:4152 msgid "-mquad-memory is not available in little endian mode" msgstr "" -#: config/rs6000/rs6000.c:4212 +#: config/rs6000/rs6000.c:4220 msgid "-mtoc-fusion requires 64-bit" msgstr "" -#: config/rs6000/rs6000.c:4219 +#: config/rs6000/rs6000.c:4227 msgid "-mtoc-fusion requires medium/large code model" msgstr "" -#: config/rs6000/rs6000.c:9919 +#: config/rs6000/rs6000.c:9949 msgid "bad move" msgstr "" -#: config/rs6000/rs6000.c:20411 +#: config/rs6000/rs6000.c:20441 msgid "Bad 128-bit move" msgstr "" -#: config/rs6000/rs6000.c:20602 +#: config/rs6000/rs6000.c:20632 #, c-format msgid "invalid %%e value" msgstr "" -#: config/rs6000/rs6000.c:20623 +#: config/rs6000/rs6000.c:20653 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.c:20632 +#: config/rs6000/rs6000.c:20662 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.c:20641 +#: config/rs6000/rs6000.c:20671 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.c:20676 +#: config/rs6000/rs6000.c:20706 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.c:20686 +#: config/rs6000/rs6000.c:20716 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.c:20696 +#: config/rs6000/rs6000.c:20726 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.c:20711 config/xtensa/xtensa.c:2343 +#: config/rs6000/rs6000.c:20741 config/xtensa/xtensa.c:2343 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.c:20758 +#: config/rs6000/rs6000.c:20788 #, c-format msgid "invalid %%O value" msgstr "" -#: config/rs6000/rs6000.c:20805 +#: config/rs6000/rs6000.c:20835 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.c:20858 +#: config/rs6000/rs6000.c:20888 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.c:20870 +#: config/rs6000/rs6000.c:20900 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.c:20884 config/xtensa/xtensa.c:2313 +#: config/rs6000/rs6000.c:20914 config/xtensa/xtensa.c:2313 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.c:20951 config/xtensa/xtensa.c:2364 +#: config/rs6000/rs6000.c:20981 config/xtensa/xtensa.c:2364 #, c-format msgid "invalid %%x value" msgstr "" -#: config/rs6000/rs6000.c:21099 +#: config/rs6000/rs6000.c:21129 #, c-format msgid "invalid %%y value, try using the 'Z' constraint" msgstr "" -#: config/rs6000/rs6000.c:21814 +#: config/rs6000/rs6000.c:21844 msgid "__float128 and __ibm128 cannot be used in the same expression" msgstr "" -#: config/rs6000/rs6000.c:21820 +#: config/rs6000/rs6000.c:21850 msgid "__ibm128 and long double cannot be used in the same expression" msgstr "" -#: config/rs6000/rs6000.c:21826 +#: config/rs6000/rs6000.c:21856 msgid "__float128 and long double cannot be used in the same expression" msgstr "" -#: config/rs6000/rs6000.c:35706 +#: config/rs6000/rs6000.c:35773 msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/rs6000/rs6000.c:37429 +#: config/rs6000/rs6000.c:37496 msgid "Could not generate addis value for fusion" msgstr "" -#: config/rs6000/rs6000.c:37501 +#: config/rs6000/rs6000.c:37568 msgid "Unable to generate load/store offset for fusion" msgstr "" -#: config/rs6000/rs6000.c:37605 +#: config/rs6000/rs6000.c:37672 msgid "Bad GPR fusion" msgstr "" -#: config/rs6000/rs6000.c:37823 +#: config/rs6000/rs6000.c:37890 msgid "emit_fusion_p9_load, bad reg #1" msgstr "" -#: config/rs6000/rs6000.c:37860 +#: config/rs6000/rs6000.c:37936 msgid "emit_fusion_p9_load, bad reg #2" msgstr "" -#: config/rs6000/rs6000.c:37863 +#: config/rs6000/rs6000.c:37939 msgid "emit_fusion_p9_load not MEM" msgstr "" -#: config/rs6000/rs6000.c:37901 +#: config/rs6000/rs6000.c:37977 msgid "emit_fusion_p9_store, bad reg #1" msgstr "" -#: config/rs6000/rs6000.c:37938 +#: config/rs6000/rs6000.c:38023 msgid "emit_fusion_p9_store, bad reg #2" msgstr "" -#: config/rs6000/rs6000.c:37941 +#: config/rs6000/rs6000.c:38026 msgid "emit_fusion_p9_store not MEM" msgstr "" -#: config/s390/s390.c:7168 +#: config/s390/s390.c:7170 #, c-format msgid "symbolic memory references are only supported on z10 or later" msgstr "" -#: config/s390/s390.c:7179 +#: config/s390/s390.c:7181 #, c-format msgid "cannot decompose address" msgstr "" -#: config/s390/s390.c:7248 +#: config/s390/s390.c:7250 #, c-format msgid "invalid comparison operator for 'E' output modifier" msgstr "" -#: config/s390/s390.c:7271 +#: config/s390/s390.c:7273 #, c-format msgid "invalid reference for 'J' output modifier" msgstr "" -#: config/s390/s390.c:7289 +#: config/s390/s390.c:7291 #, c-format msgid "invalid address for 'O' output modifier" msgstr "" -#: config/s390/s390.c:7311 +#: config/s390/s390.c:7313 #, c-format msgid "invalid address for 'R' output modifier" msgstr "" -#: config/s390/s390.c:7329 +#: config/s390/s390.c:7331 #, c-format msgid "memory reference expected for 'S' output modifier" msgstr "" -#: config/s390/s390.c:7339 +#: config/s390/s390.c:7341 #, c-format msgid "invalid address for 'S' output modifier" msgstr "" -#: config/s390/s390.c:7360 +#: config/s390/s390.c:7362 #, c-format msgid "register or memory expression expected for 'N' output modifier" msgstr "" -#: config/s390/s390.c:7371 +#: config/s390/s390.c:7373 #, c-format msgid "register or memory expression expected for 'M' output modifier" msgstr "" -#: config/s390/s390.c:7456 config/s390/s390.c:7477 +#: config/s390/s390.c:7458 config/s390/s390.c:7479 #, c-format msgid "invalid constant for output modifier '%c'" msgstr "" -#: config/s390/s390.c:7474 +#: config/s390/s390.c:7476 #, c-format msgid "invalid constant - try using an output modifier" msgstr "" -#: config/s390/s390.c:7515 +#: config/s390/s390.c:7517 #, c-format msgid "invalid constant vector for output modifier '%c'" msgstr "" -#: config/s390/s390.c:7522 +#: config/s390/s390.c:7524 #, c-format msgid "invalid expression - try using an output modifier" msgstr "" -#: config/s390/s390.c:7525 +#: config/s390/s390.c:7527 #, c-format msgid "invalid expression for output modifier '%c'" msgstr "" -#: config/s390/s390.c:11377 +#: config/s390/s390.c:11379 msgid "Vector argument passed to unprototyped function" msgstr "" -#: config/s390/s390.c:15036 +#: config/s390/s390.c:15038 msgid "types differ in signess" msgstr "" -#: config/s390/s390.c:15046 +#: config/s390/s390.c:15048 msgid "binary operator does not support two vector bool operands" msgstr "" -#: config/s390/s390.c:15049 +#: config/s390/s390.c:15051 msgid "binary operator does not support vector bool operand" msgstr "" -#: config/s390/s390.c:15057 +#: config/s390/s390.c:15059 msgid "" "binary operator does not support mixing vector bool with floating point " "vector operands" @@ -4064,43 +4064,43 @@ msgid "created and used with different endianness" msgstr "" -#: config/sparc/sparc.c:8758 config/sparc/sparc.c:8764 +#: config/sparc/sparc.c:8757 config/sparc/sparc.c:8763 #, c-format msgid "invalid %%Y operand" msgstr "" -#: config/sparc/sparc.c:8834 +#: config/sparc/sparc.c:8833 #, c-format msgid "invalid %%A operand" msgstr "" -#: config/sparc/sparc.c:8844 +#: config/sparc/sparc.c:8843 #, c-format msgid "invalid %%B operand" msgstr "" -#: config/sparc/sparc.c:8873 config/tilegx/tilegx.c:5095 +#: config/sparc/sparc.c:8872 config/tilegx/tilegx.c:5098 #: config/tilepro/tilepro.c:4510 #, c-format msgid "invalid %%C operand" msgstr "" -#: config/sparc/sparc.c:8890 config/tilegx/tilegx.c:5128 +#: config/sparc/sparc.c:8889 config/tilegx/tilegx.c:5131 #, c-format msgid "invalid %%D operand" msgstr "" -#: config/sparc/sparc.c:8906 +#: config/sparc/sparc.c:8905 #, c-format msgid "invalid %%f operand" msgstr "" -#: config/sparc/sparc.c:8918 +#: config/sparc/sparc.c:8917 #, c-format msgid "invalid %%s operand" msgstr "" -#: config/sparc/sparc.c:8963 +#: config/sparc/sparc.c:8962 #, c-format msgid "floating-point constant not a valid immediate operand" msgstr "" @@ -4125,57 +4125,57 @@ msgid "xstormy16_print_operand: unknown code" msgstr "" -#: config/tilegx/tilegx.c:5080 config/tilepro/tilepro.c:4495 +#: config/tilegx/tilegx.c:5083 config/tilepro/tilepro.c:4495 #, c-format msgid "invalid %%c operand" msgstr "" -#: config/tilegx/tilegx.c:5111 +#: config/tilegx/tilegx.c:5114 #, c-format msgid "invalid %%d operand" msgstr "" -#: config/tilegx/tilegx.c:5208 +#: config/tilegx/tilegx.c:5211 #, c-format msgid "invalid %%H specifier" msgstr "" -#: config/tilegx/tilegx.c:5250 config/tilepro/tilepro.c:4524 +#: config/tilegx/tilegx.c:5253 config/tilepro/tilepro.c:4524 #, c-format msgid "invalid %%h operand" msgstr "" -#: config/tilegx/tilegx.c:5262 config/tilepro/tilepro.c:4588 +#: config/tilegx/tilegx.c:5265 config/tilepro/tilepro.c:4588 #, c-format msgid "invalid %%I operand" msgstr "" -#: config/tilegx/tilegx.c:5274 config/tilepro/tilepro.c:4600 +#: config/tilegx/tilegx.c:5277 config/tilepro/tilepro.c:4600 #, c-format msgid "invalid %%i operand" msgstr "" -#: config/tilegx/tilegx.c:5295 config/tilepro/tilepro.c:4621 +#: config/tilegx/tilegx.c:5298 config/tilepro/tilepro.c:4621 #, c-format msgid "invalid %%j operand" msgstr "" -#: config/tilegx/tilegx.c:5326 +#: config/tilegx/tilegx.c:5329 #, c-format msgid "invalid %%%c operand" msgstr "" -#: config/tilegx/tilegx.c:5341 config/tilepro/tilepro.c:4735 +#: config/tilegx/tilegx.c:5344 config/tilepro/tilepro.c:4735 #, c-format msgid "invalid %%N operand" msgstr "" -#: config/tilegx/tilegx.c:5385 +#: config/tilegx/tilegx.c:5388 #, c-format msgid "invalid operand for 'r' specifier" msgstr "" -#: config/tilegx/tilegx.c:5409 config/tilepro/tilepro.c:4816 +#: config/tilegx/tilegx.c:5412 config/tilepro/tilepro.c:4816 #, c-format msgid "unable to print out operand yet; code == %d (%c)" msgstr "" @@ -4303,7 +4303,7 @@ #: c/c-parser.c:8938 c/c-parser.c:9119 c/c-parser.c:9899 c/c-parser.c:9969 #: c/c-parser.c:10012 c/c-parser.c:14492 c/c-parser.c:14516 c/c-parser.c:14534 #: c/c-parser.c:14747 c/c-parser.c:14790 c/c-parser.c:2950 c/c-parser.c:9112 -#: cp/parser.c:26388 cp/parser.c:26961 +#: cp/parser.c:26403 cp/parser.c:26976 #, gcc-internal-format msgid "expected %<;%>" msgstr "" @@ -4323,13 +4323,13 @@ #: c/c-parser.c:12632 c/c-parser.c:12714 c/c-parser.c:12822 c/c-parser.c:12857 #: c/c-parser.c:12905 c/c-parser.c:12963 c/c-parser.c:14694 c/c-parser.c:16640 #: c/c-parser.c:16850 c/c-parser.c:17291 c/c-parser.c:17349 c/c-parser.c:17775 -#: c/c-parser.c:10969 cp/parser.c:24120 cp/parser.c:26964 +#: c/c-parser.c:10969 cp/parser.c:24134 cp/parser.c:26979 #, gcc-internal-format msgid "expected %<(%>" msgstr "" #: c/c-parser.c:2192 c/c-parser.c:7230 c/c-parser.c:7636 c/c-parser.c:7677 -#: c/c-parser.c:7813 cp/parser.c:26386 cp/parser.c:26979 +#: c/c-parser.c:7813 cp/parser.c:26401 cp/parser.c:26994 #, gcc-internal-format msgid "expected %<,%>" msgstr "" @@ -4356,7 +4356,7 @@ #: c/c-parser.c:12876 c/c-parser.c:12924 c/c-parser.c:12932 c/c-parser.c:12967 #: c/c-parser.c:14576 c/c-parser.c:14755 c/c-parser.c:14801 c/c-parser.c:16829 #: c/c-parser.c:16906 c/c-parser.c:17327 c/c-parser.c:17411 c/c-parser.c:17784 -#: cp/parser.c:24152 cp/parser.c:27009 +#: cp/parser.c:24166 cp/parser.c:27024 #, gcc-internal-format msgid "expected %<)%>" msgstr "" @@ -4363,8 +4363,8 @@ #: c/c-parser.c:3583 c/c-parser.c:4514 c/c-parser.c:4550 c/c-parser.c:6136 #: c/c-parser.c:7744 c/c-parser.c:8102 c/c-parser.c:8251 c/c-parser.c:10656 -#: c/c-parser.c:17687 c/c-parser.c:17689 c/c-parser.c:18028 cp/parser.c:7024 -#: cp/parser.c:26973 +#: c/c-parser.c:17687 c/c-parser.c:17689 c/c-parser.c:18028 cp/parser.c:7034 +#: cp/parser.c:26988 #, gcc-internal-format msgid "expected %<]%>" msgstr "" @@ -4373,13 +4373,13 @@ msgid "expected %<;%>, %<,%> or %<)%>" msgstr "" -#: c/c-parser.c:4372 c/c-parser.c:14517 cp/parser.c:26967 cp/parser.c:28889 +#: c/c-parser.c:4372 c/c-parser.c:14517 cp/parser.c:26982 cp/parser.c:28904 #, gcc-internal-format msgid "expected %<}%>" msgstr "" #: c/c-parser.c:4684 c/c-parser.c:9453 c/c-parser.c:15237 c/c-parser.c:2768 -#: c/c-parser.c:2971 c/c-parser.c:9007 cp/parser.c:17162 cp/parser.c:26970 +#: c/c-parser.c:2971 c/c-parser.c:9007 cp/parser.c:17172 cp/parser.c:26985 #, gcc-internal-format msgid "expected %<{%>" msgstr "" @@ -4388,7 +4388,7 @@ #: c/c-parser.c:7278 c/c-parser.c:9218 c/c-parser.c:9601 c/c-parser.c:9662 #: c/c-parser.c:10643 c/c-parser.c:11440 c/c-parser.c:11574 c/c-parser.c:11946 #: c/c-parser.c:12038 c/c-parser.c:12666 c/c-parser.c:16697 c/c-parser.c:16753 -#: c/c-parser.c:11063 cp/parser.c:27003 cp/parser.c:28100 cp/parser.c:30758 +#: c/c-parser.c:11063 cp/parser.c:27018 cp/parser.c:28115 cp/parser.c:30773 #, gcc-internal-format msgid "expected %<:%>" msgstr "" @@ -4409,7 +4409,7 @@ msgid "Cilk array notation cannot be used as a condition for while statement" msgstr "" -#: c/c-parser.c:5656 cp/parser.c:26897 +#: c/c-parser.c:5656 cp/parser.c:26912 #, gcc-internal-format msgid "expected %" msgstr "" @@ -4427,39 +4427,39 @@ msgid "expected %<.%>" msgstr "" -#: c/c-parser.c:8678 c/c-parser.c:8710 c/c-parser.c:8950 cp/parser.c:28674 -#: cp/parser.c:28748 +#: c/c-parser.c:8678 c/c-parser.c:8710 c/c-parser.c:8950 cp/parser.c:28689 +#: cp/parser.c:28763 #, gcc-internal-format msgid "expected %<@end%>" msgstr "" -#: c/c-parser.c:9367 cp/parser.c:26988 +#: c/c-parser.c:9367 cp/parser.c:27003 #, gcc-internal-format msgid "expected %<>%>" msgstr "" -#: c/c-parser.c:12116 c/c-parser.c:12880 cp/parser.c:27012 +#: c/c-parser.c:12116 c/c-parser.c:12880 cp/parser.c:27027 #, gcc-internal-format msgid "expected %<,%> or %<)%>" msgstr "" #: c/c-parser.c:14229 c/c-parser.c:14273 c/c-parser.c:14501 c/c-parser.c:14736 -#: c/c-parser.c:16891 c/c-parser.c:17513 c/c-parser.c:4573 cp/parser.c:26991 +#: c/c-parser.c:16891 c/c-parser.c:17513 c/c-parser.c:4573 cp/parser.c:27006 #, gcc-internal-format msgid "expected %<=%>" msgstr "" -#: c/c-parser.c:15280 c/c-parser.c:15270 cp/parser.c:34132 +#: c/c-parser.c:15280 c/c-parser.c:15270 cp/parser.c:34147 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" msgstr "" -#: c/c-parser.c:17675 c/c-parser.c:10602 cp/parser.c:26976 cp/parser.c:30031 +#: c/c-parser.c:17675 c/c-parser.c:10602 cp/parser.c:26991 cp/parser.c:30046 #, gcc-internal-format msgid "expected %<[%>" msgstr "" -#: c/c-typeck.c:7405 +#: c/c-typeck.c:7415 msgid "(anonymous)" msgstr "" @@ -4471,11 +4471,11 @@ msgid "candidate 2:" msgstr "" -#: cp/decl2.c:778 +#: cp/decl2.c:779 msgid "candidates are: %+#D" msgstr "" -#: cp/decl2.c:780 +#: cp/decl2.c:781 msgid "candidate is: %+#D" msgstr "" @@ -4519,43 +4519,43 @@ msgid "(static destructors for %s)" msgstr "" -#: cp/error.c:1063 +#: cp/error.c:1062 msgid "vtable for " msgstr "" -#: cp/error.c:1087 +#: cp/error.c:1086 msgid " " msgstr "" -#: cp/error.c:1102 +#: cp/error.c:1101 msgid "{anonymous}" msgstr "" -#: cp/error.c:1104 +#: cp/error.c:1103 msgid "(anonymous namespace)" msgstr "" -#: cp/error.c:1220 +#: cp/error.c:1219 msgid "