--- gcc-7-7.2.0.orig/debian/NEWS.gcc +++ gcc-7-7.2.0/debian/NEWS.gcc @@ -0,0 +1,865 @@ +This file contains information about GCC releases which has been generated +automatically from the online release notes. It covers releases of GCC +(and the former EGCS project) since EGCS 1.0, on the line of development +that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2, +see ONEWS. + +====================================================================== +http://gcc.gnu.org/gcc-7/index.html + + GCC 7 Release Series + Changes, New Features, and Fixes + + This page is a brief summary of some of the huge number of improvements + in GCC 7. For more information, see the "Porting to GCC 7" page and the + full GCC documentation. + +Caveats + + * GCC now uses LRA (a new local register allocator) by default for new + targets. + * The non-standard C++0x type traits has_trivial_default_constructor, + has_trivial_copy_constructor and has_trivial_copy_assign have been + removed. + * The libstdc++ Profile Mode has been deprecated and will be removed in a + future version. + * The Cilk+ extensions to the C and C++ languages have been deprecated. + +General Optimizer Improvements + + * GCC 7 can determine the return value or range of return values of some + calls to the sprintf family of functions and make it available to other + optimization passes. Some calls to the snprintf function with a zero size + argument can be folded into constants. This optimization is included in + -O1 and can be selectively controlled by the -fprintf-return-value option. + * A new store merging pass has been added. It merges constant stores to + adjacent memory locations into fewer, wider, stores. It is enabled by the + -fstore-merging option and at the -O2 optimization level or higher (and + -Os). + * A new code hoisting optimization has been added to the partial redundancy + elimination pass. It attempts to move evaluation of expressions executed + on all paths to the function exit as early as possible, which helps + primarily for code size, but can be useful for speed of generated code as + well. It is enabled by the -fcode-hoisting option and at the -O2 + optimization level or higher (and -Os). + * A new interprocedural bitwise constant propagation optimization has been + added, which propagates knowledge about which bits of variables are known + to be zero (including pointer alignment information) across the call + graph. It is enabled by the -fipa-bit-cp option if -fipa-cp is enabled as + well, and is enabled at the -O2 optimization level and higher (and -Os). + This optimization supersedes interprocedural alignment propagation of GCC + 6, and therefore the option -fipa-cp-alignment is now deprecated and + ignored. + * A new interprocedural value range propagation optimization has been + added, which propagates integral ranges that variable values can be + proven to be within across the call graph. It is enabled by the -fipa-vrp + option and at the -O2 optimization level and higher (and -Os). + * A new loop splitting optimization pass has been added. It splits certain + loops if they contain a condition that is always true on one side of the + iteration space and always false on the other into two loops where each + of the new two loops iterates just on one of the sides of the iteration + space and the condition does not need to be checked inside of the loop. + It is enabled by the -fsplit-loops option and at the -O3 optimization + level or higher. + * The shrink-wrapping optimization can now separate portions of prologues + and epilogues to improve performance if some of the work done + traditionally by prologues and epilogues is not needed on certain paths. + This is controlled by the -fshrink-wrap-separate option, enabled by + default. It requires target support, which is currently only implemented + in the PowerPC and AArch64 ports. + * AddressSanitizer gained a new sanitization option, -fsanitize-address- + use-after-scope, which enables sanitization of variables whose address is + taken and used after a scope where the variable is defined: + + int + main (int argc, char **argv) + { + char *ptr; + { + char my_char; + ptr = &my_char; + } + + *ptr = 123; + return *ptr; + } + + ==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 + WRITE of size 1 at 0x7fffb8dba990 thread T0 + #0 0x4006d4 in main /tmp/use-after-scope-1.c:10 + #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290) + #2 0x400739 in _start (/tmp/a.out+0x400739) + + Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame + #0 0x40067f in main /tmp/use-after-scope-1.c:3 + + This frame has 1 object(s): + [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable + + The option is enabled by default with -fsanitize=address and disabled by + default with -fsanitize=kernel-address. Compared to the LLVM compiler, + where the option already exists, the implementation in the GCC compiler + has couple of improvements and advantages: + o A complex usage of gotos and case labels are properly handled and + should not report any false positive or false negatives. + o C++ temporaries are sanitized. + o Sanitization can handle invalid memory stores that are optimized + out by the LLVM compiler when using an optimization level. + * The -fsanitize=signed-integer-overflow suboption of the UndefinedBehavior + Sanitizer now diagnoses arithmetic overflows even on arithmetic + operations with generic vectors. + * Version 5 of the DWARF debugging information standard is supported + through the -gdwarf-5 option. The DWARF version 4 debugging information + remains the default until debugging information consumers are adjusted. + +New Languages and Language specific improvements + + OpenACC support in C, C++, and Fortran continues to be maintained and +improved. See the OpenACC and Offloading wiki pages for further information. + +Ada + * On mainstream native platforms, Ada programs no longer require the stack + to be made executable in order to run properly. + +BRIG (HSAIL) + +Support for processing BRIG 1.0 files was added in this release. BRIG is a +binary format for HSAIL (Heterogeneous System Architecture Intermediate +Language). The BRIG frontend can be used for implementing HSAIL "finalizers" +(compilation of HSAIL to a native ISA) for gcc-supported targets. An +implementation of an HSAIL runtime library, libhsail-rt is also included. + +C family + + * New command-line options have been added for the C and C++ compilers: + o -Wimplicit-fallthrough warns when a switch case falls through. This + warning has five different levels. The compiler is able to parse a + wide range of fallthrough comments, depending on the level. It also + handles control-flow statements, such as ifs. It's possible to + suppres the warning by either adding a fallthrough comment, or by + using a null statement: __attribute__ ((fallthrough)); (C, C++), or + [[fallthrough]]; (C++17), or [[gnu::fallthrough]]; (C++11/C++14). + This warning is enabled by -Wextra. + o -Wpointer-compare warns when a pointer is compared with a zero + character constant. Such code is now invalid in C++11 and GCC + rejects it. This warning is enabled by default. + o -Wduplicated-branches warns when an if-else has identical branches. + o -Wrestrict warns when an argument passed to a restrict-qualified + parameter aliases with another argument. + o -Wmemset-elt-size warns for memset calls, when the first argument + references an array, and the third argument is a number equal to + the number of elements of the array, but not the size of the array. + This warning is enabled by -Wall. + o -Wint-in-bool-context warns about suspicious uses of integer values + where boolean values are expected. This warning is enabled by - + Wall. + o -Wswitch-unreachable warns when a switch statement has statements + between the controlling expression and the first case label which + will never be executed. This warning is enabled by default. + o -Wexpansion-to-defined warns when defined is used outside #if. This + warning is enabled by -Wextra or -Wpedantic. + o -Wregister warns about uses of the register storage specifier. In + C++17 this keyword has been removed and for C++17 this is a + pedantic warning enabled by default. The warning is not emitted for + the GNU Explicit Register Variables extension. + o -Wvla-larger-than=N warns about unbounded uses of variable-length + arrays, and about bounded uses of variable-length arrays whose + bound can be larger than N bytes. + o -Wduplicate-decl-specifier warns when a declaration has duplicate + const, volatile, restrict or _Atomic specifier. This warning is + enabled by -Wall. + * GCC 6's C and C++ frontends were able to offer suggestions for misspelled + field names: + spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'? + return ptr->colour; + ^~~~~~ + GCC 7 greatly expands the scope of these suggestions. Firstly, it adds + fix-it hints to such suggestions: + spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'? + return ptr->colour; + ^~~~~~ + color + The suggestions now cover many other things, such as misspelled function + names: + spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_widget_showall'; did you mean + 'gtk_widget_show_all'? [-Wimplicit-function-declaration] + gtk_widget_showall (w); + ^~~~~~~~~~~~~~~~~~ + gtk_widget_show_all + misspelled macro names and enum values: + spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a function); did you mean 'MAX_ITEMS'? + int array[MAX_ITEM]; + ^~~~~~~~ + MAX_ITEMS + misspelled type names: + spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'signed'? + void test (singed char e); + ^~~~~~ + signed + and, in the C frontend, named initializers: + test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color'? + struct s test = { .colour = 3 }; + ^~~~~~ + color + * The preprocessor can now offer suggestions for misspelled directives, + e.g.: + test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif? + #endfi + ^~~~~ + endif + * Warnings about format strings now underline the pertinent part of the + string, and can offer suggested fixes. In some cases, the pertinent + argument is underlined. + test.c:51:29: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat=] + printf ("foo: %d bar: %s baz: %d", 100, i + j, 102); + ~^ ~~~~~ + %d + * The new -Wdangling-else command-line option has been split out of + -Wparentheses and warns about dangling else. + * The -Wshadow warning has been split into three variants. -Wshadow=global + warns for any shadowing. This is the default when using -Wshadow without + any argument. -Wshadow=local only warns for a local variable shadowing + another local variable or parameter. -Wshadow=compatible-local only warns + for a local variable shadowing another local variable or parameter whose + type is compatible (in C++ compatible means that the type of the + shadowing variable can be converted to that of the shadowed variable). + The following example shows the different kinds of shadow warnings: + + enum operation { add, count }; + struct container { int nr; }; + + int + container_count (struct container c, int count) + { + int r = 0; + for (int count = 0; count > 0; count--) + { + struct container count = c; + r += count.nr; + } + return r; + } + + -Wshadow=compatible-local will warn for the parameter being shadowed with + the same type: + warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=compatible-local] + for (int count = 0; count > 0; count--) + ^~~~~ + warn-test.c:5:42: note: shadowed declaration is here + container_count (struct container c, int count) + ^~~~~ + -Wshadow=local will warn for the above and for the shadowed declaration + with incompatible type: + warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Wshadow=local] + struct container count = c; + ^~~~~ + warn-test.c:8:12: note: shadowed declaration is here + for (int count = 0; count > 0; count--) + ^~~~~ + -Wshadow=global will warn for all of the above and the shadowing of the + global declaration: + warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [-Wshadow] + container_count (struct container c, int count) + ^~~~~ + warn-test.c:1:23: note: shadowed declaration is here + enum operation { add, count }; + ^~~~~ + * GCC 7 contains a number of enhancements that help detect buffer overflow + and other forms of invalid memory accesses. + o The -Walloc-size-larger-than=size option detects calls to standard + and user-defined memory allocation functions decorated with + attribute alloc_size whose argument exceeds the specified size + (PTRDIFF_MAX by default). The option also detects arithmetic + overflow in the computation of the size in two-argument allocation + functions like calloc where the total size is the product of the + two arguments. Since calls with an excessive size cannot succeed + they are typically the result of programming errors. Such bugs have + been known to be the source of security vulnerabilities and a + target of exploits. -Walloc-size-larger-than=PTRDIFF_MAX is + included in -Wall. + For example, the following call to malloc incorrectly tries to + avoid passing a negative argument to the function and instead ends + up unconditionally invoking it with an argument less than or equal + to zero. Since after conversion to the type of the argument of the + function (size_t) a negative argument results in a value in excess + of the maximum PTRDIFF_MAX the call is diagnosed. + + void* f (int n) + { + return malloc (n > 0 ? 0 : n); + } + + warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2147483647 [-Walloc-size-larger-than=] + + o The -Walloc-zero option detects calls to standard and user-defined + memory allocation functions decorated with attribute alloc_size + with a zero argument. -Walloc-zero is not included in either -Wall + or -Wextra and must be explicitly enabled. + o The -Walloca option detects all calls to the alloca function in the + program. -Walloca is not included in either -Wall or -Wextra and + must be explicitly enabled. + o The -Walloca-larger-than=size option detects calls to the alloca + function whose argument either may exceed the specified size, or + that is not known to be sufficiently constrained to avoid exceeding + it. -Walloca-larger-than is not included in either -Wall or -Wextra + and must be explicitly enabled. + For example, compiling the following snippet with -Walloca-larger- + than=1024 results in a warning because even though the code appears + to call alloca only with sizes of 1kb and less, since n is signed, + a negative value would result in a call to the function well in + excess of the limit. + + void f (int n) + { + char *d; + if (n < 1025) + d = alloca (n); + else + d = malloc (n); + … + } + + warning: argument to 'alloca may be too large due to conversion from 'int' to 'long unsigned int' [-Walloca-larger-than=] + + In contrast, a call to alloca that isn't bounded at all such as in + the following function will elicit the warning below regardless of + the size argument to the option. + + void f (size_t n) + { + char *d = alloca (n); + ... + } + + warning: unbounded use of 'alloca' [-Walloca-larger-than=] + + o The -Wformat-overflow=level option detects certain and likely + buffer overflow in calls to the sprintf family of formatted output + functions. Although the option is enabled even without optimization + it works best with -O2 and higher. + For example, in the following snippet the call to sprintf is + diagnosed because even though its output has been constrained using + the modulo operation it could result in as many as three bytes if + mday were negative. The solution is to either allocate a larger + buffer or make sure the argument is not negative, for example by + changing mday's type to unsigned or by making the type of the + second operand of the modulo expression unsigned: 100U. + + void* f (int mday) + { + char *buf = malloc (3); + sprintf (buf, "%02i", mday % 100); + return buf; + } + + warning: 'sprintf may write a terminating nul past the end of the destination [-Wformat-overflow=] + note: 'sprintf' output between 3 and 4 bytes into a destination of size 3 + + o The -Wformat-truncation=level option detects certain and likely + output truncation in calls to the snprintf family of formatted + output functions. -Wformat-truncation=1 is included in -Wall and + enabled without optimization but works best with -O2 and higher. + For example, the following function attempts to format an integer + between 0 and 255 in hexadecimal, including the 0x prefix, into a + buffer of four charactars. But since the function must always + terminate output by the null character ('\0') such a buffer is only + big enough to fit just one digit plus the prefix. Therefore the + snprintf call is diagnosed. To avoid the warning either use a + bigger buffer or handle the function's return value which indicates + whether or not its output has been truncated. + + void f (unsigned x) + { + char d[4]; + snprintf (d, sizeof d, "%#02x", x & 0xff); + … + } + + warning: 'snprintf' output may be truncated before the last format character [-Wformat-truncation=] + note: 'snprintf' output between 3 and 5 bytes into a destination of size 4 + + o The -Wnonnull option has been enhanced to detect a broader set of + cases of passing null pointers to functions that expect a non-null + argument (those decorated with attribute nonnull). By taking + advantage of optimizations the option can detect many more cases of + the problem than in prior GCC versions. + o The -Wstringop-overflow=type option detects buffer overflow in + calls to string handling functions like memcpy and strcpy. The + option relies on Object_Size_Checking and has an effect similar to + defining the _FORTIFY_SOURCE macro. -Wstringop-overflow=2 is + enabled by default. + For example, in the following snippet, because the call to strncat + specifies a maximum that allows the function to write past the end + of the destination, it is diagnosed. To correct the problem and + avoid the overflow the function should be called with a size of at + most sizeof d - strlen(d) - 1. + + void f (const char *fname) + { + char d[8]; + strncpy (d, "/tmp/", sizeof d); + strncat (d, fname, sizeof d); + ... + } + + warning: specified bound 8 equals the size of the destination [-Wstringop-overflow=] + + * The header provided by GCC defines macros such as INT_WIDTH + for the width in bits of integer types, if + __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is included. + The header defines such macros as SIZE_WIDTH and INTMAX_WIDTH + for the width of some standard typedef names for integer types, again if + __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is included; + note that GCC's implementation of this header is only used for + freestanding compilations, not hosted compilations, on most systems. + These macros come from ISO/IEC TS 18661-1:2014. + * The header provided by GCC defines the macro CR_DECIMAL_DIG, + from ISO/IEC TS 18661-1:2014, if __STDC_WANT_IEC_60559_BFP_EXT__ is + defined before the header is included. This represents the number of + decimal digits for which conversions between decimal character strings + and binary formats, in both directions, are correctly rounded, and + currently has the value of UINTMAX_MAX on all systems, reflecting that + GCC's compile-time conversions are correctly rounded for any number of + digits. + * New __builtin_add_overflow_p, __builtin_sub_overflow_p, + __builtin_mul_overflow_p built-in functions have been added. These work + similarly to their siblings without the _p suffix, but do not actually + store the result of the arithmetics anywhere, just return whether the + operation would overflow. Calls to these built-ins with integer constant + arguments evaluate to integer constants expressions. + For example, in the following, c is assigned the result of a * b only if + the multiplication does not overflow, otherwise it is assigned the value + zero. The multiplication is performed at compile-time and without + triggering a -Woverflow warning. + + enum { + a = 12345678, + b = 87654321, + c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b + }; + +C + + * The C front end now supports type names _FloatN for floating-point types + with IEEE interchange formats and _FloatNx for floating-point types with + IEEE extended formats. These type names come from ISO/IEC TS 18661-3: + 2015. + The set of types supported depends on the target for which GCC is + configured. Most targets support _Float32, _Float32x and _Float64. + _Float128 is supported on targets where IEEE binary128 encoding was + already supported as long double or __float128. _Float64x is supported on + targets where a type with either binary128 or Intel extended precision + format is available. + Constants with these types are supported using suffixes fN, FN, fNx and + FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are defined in + if __STDC_WANT_IEC_60559_TYPES_EXT__ is defined before it is + included. + These new types are always distinct from each other and from float, + double and long double, even if they have the same encoding. Complex + types such as _Complex _Float128 are also supported. + Type-generic built-in functions such as __builtin_isinf support the new + types, and the following type-specific built-in functions have versions + (suffixed fN or fNx) for the new types: __builtin_copysign, + __builtin_fabs, __builtin_huge_val, __builtin_inf, __builtin_nan, + __builtin_nans. + * Compilation with -fopenmp is now compatible with the C11 _Atomic keyword. + +C++ + + * The C++ front end has experimental support for all of the current C++17 + draft with the -std=c++1z or -std=gnu++1z flags, including if constexpr, + class template argument deduction, auto template parameters, and + structured bindings. For a full list of new features, see the_C++_status + page. + * C++17 support for new of over-aligned types can be enabled in other modes + with the -faligned-new flag. + * The C++17 evaluation order requirements can be selected in other modes + with the -fstrong-eval-order flag, or disabled in C++17 mode with -fno- + strong-eval-order. + * The default semantics of inherited constructors has changed in all modes, + following P0136. Essentially, overload resolution happens as if calling + the inherited constructor directly, and the compiler fills in + construction of the other bases and members as needed. Most uses should + not need any changes. The old behavior can be restored with -fno-new- + inheriting-ctors, or -fabi-version less than 11. + * The resolution of DR 150 on matching of template template parameters, + allowing default template arguments to make a template match a parameter, + is currently enabled by default in C++17 mode only. The default can be + overridden with -f{no-,}new-ttp-matching. + * The C++ front end will now provide fix-it hints for some missing + semicolons, allowing for automatic fixes by IDEs: + + test.cc:4:11: error: expected ';' after class definition + class a {} + ^ + ; + * -Waligned-new has been added to the C++ front end. It warns about new of + type with extended alignment without -faligned-new. + +Runtime Library (libstdc++) + + * The type of exception thrown by iostreams, std::ios_base::failure, now + uses the cxx11_ABI. + * Experimental support for C++17, including the following new features: + o std::string_view; + o std::any, std::optional, and std::variant; + o std::invoke, std::is_invocable, std::is_nothrow_invocable, and + invoke_result; + o std::is_swappable, and std::is_nothrow_swappable; + o std::apply, and std::make_from_tuple; + o std::void_t, std::bool_constant, std::conjunction, std:: + disjunction, and std::negation; + o Variable templates for type traits; + o Mathematical Special Functions; + o std::chrono::floor, std::chrono::ceil, std::chrono::round, and + std::chrono::abs; + o std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot; + o std::scoped_lock, std::shared_mutex, std::atomic:: + is_always_lock_free; + o std::sample, std::default_searcher, std::boyer_moore_searcher and + std::boyer_moore_horspool_searcher; + o Extraction and re-insertion of map and set nodes, try_emplace + members for maps, and functions for accessing containers std::size, + std::empty, and std::data; + o std::shared_ptr support for arrays, std::shared_ptr::weak_type, + std::enable_shared_from_this::weak_from_this(), and std:: + owner_less; + o std::byte; + o std::as_const, std::not_fn, std::has_unique_object_representations, + constexpr std::addressof. + Thanks to Daniel Krügler, Tim Shen, Edward Smith-Rowland, and Ville + Voutilainen for work on the C++17 support. + * A new power-of-two rehashing policy for use with the _Hashtable + internals, thanks to François Dumont. + +Fortran + + * Support for a number of extensions for compatibility with legacy code + with new flags: + o -fdec-structure Support for DEC STRUCTURE and UNION + o -fdec-intrinsic-ints Support for new integer intrinsics with B/I/J/ + K prefixes such as BABS, JIAND... + o -fdec-math Support for additional math intrinsics, including COTAN + and degree-valued trigonometric functions such as TAND, ASIND... + o -fdec Enable the -fdec-* family of extensions. + * New flag -finit-derived to allow default initialization of derived-type + variables. + * Improved DO loops with step equal to 1 or -1, generates faster code + without a loop preheader. A new warning, -Wundefined-do-loop, warns when + a loop iterates either to HUGE(i) (with step equal to 1), or to -HUGE(i) + (with step equal to -1). Invalid behavior can be caught at run time with + -fcheck=do enabled: + + program test + implicit none + integer(1) :: i + do i = -HUGE(i)+10, -HUGE(i)-1, -1 + print *, i + end do + end program test + + At line 8 of file do_check_12.f90 + Fortran runtime error: Loop iterates infinitely + + * Version 4.5 of the OpenMP_specification is now partially supported also + in the Fortran compiler; the largest missing item is structure element + mapping. + * User-defined derived-type input/output (UDTIO) is added. + * Derived type coarrays with allocable and pointer components is partially + supported. + * Non-constant stop codes and error stop codes (Fortran 2015 feature). + * Derived types with allocatable components of recursive type. + * Intrinsic assignment to polymorphic variables. + * Improved submodule support. + * Improved diagnostics (polymorphic results in pure functions). + +Go + + * GCC 7 provides a complete implementation of the Go 1.8.1 user packages. + * Compared to the Go 1.8.1 toolchain, the garbage collector is more + conservative and less concurrent. + * Escape analysis is available for experimental use via the -fgo-optimize- + allocs option. The -fgo-debug-escape prints information useful for + debugging escape analysis choices. + +Java (GCJ) + +The GCC Java frontend and associated libjava runtime library have been removed +from GCC. + +libgccjit + +The libgccjit API gained support for marking calls as requiring tail-call +optimization via a new entrypoint: gcc_jit_rvalue_set_bool_require_tail_call. +libgccjit performs numerous checks at the API boundary, but if these succeed, +it previously ignored errors and other diagnostics emitted within the core of +GCC, and treated the compile of a gcc_jit_context as having succeeded. As of +GCC 7 it now ensures that if any diagnostics are emitted, they are visible from +the libgccjit API, and that the the context is flagged as having failed. + +New Targets and Target Specific Improvements + +AArch64 + + * The ARMv8.3-A architecture is now supported. It can be used by specifying + the -march=armv8.3-a option. + * The option -msign-return-address= is supported to enable return address + protection using ARMv8.3-A Pointer Authentication Extensions. For more + information on the arguments accepted by this option, please refer to + AArch64-Options. + * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point + Extensions are now supported. They can be used by specifying the - + march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit Floating- + Point Extensions introduce new half-precision data processing floating- + point instructions. + * Support has been added for the following processors (GCC identifiers in + parentheses): ARM Cortex-A73 (cortex-a73), Broadcom Vulcan (vulcan), + Cavium ThunderX CN81xx (thunderxt81), Cavium ThunderX CN83xx + (thunderxt83), Cavium ThunderX CN88xx (thunderxt88), Cavium ThunderX + CN88xx pass 1.x (thunderxt88p1), Cavium ThunderX 2 CN99xx (thunderx2t99), + Qualcomm Falkor (falkor). The GCC identifiers can be used as arguments to + the -mcpu or -mtune options, for example: -mcpu=cortex-a73 or - + mtune=vulcan or as arguments to the equivalent target attributes and + pragmas. + +ARC + + * Add support for ARC HS and ARC EM processors. + * Add support for ARC EM variation found in Intel QuarkSE SoCs. + * Add support for NPS400 ARC700 based CPUs. + * Thread Local Storage is now supported by ARC CPUs. + * Fix errors for ARC600 when using 32x16 multiplier option. + * Fix PIE for ARC CPUs. + * New CPU templates are supported via multilib. + +ARM + + * Support for the ARMv5 and ARMv5E architectures has been deprecated (which + have no known implementations) and will be removed in a future GCC + release. Note that ARMv5T, ARMv5TE and ARMv5TEJ architectures remain + supported. The values armv5 and armv5e of -march are thus deprecated. + * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point + Extensions are now supported. They can be used by specifying the - + march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit Floating- + Point Extensions introduce new half-precision data processing floating- + point instructions. + * The ARMv8-M architecture is now supported in its two architecture + profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and + Floating-Point Extensions. They can be used by specifying the - + march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options. + * Support has been added for the following processors (GCC identifiers in + parentheses): ARM Cortex-A73 (cortex-a73), ARM Cortex-M23 (cortex-m23) + and ARM Cortex-M33 (cortex-m33). The GCC identifiers can be used as + arguments to the -mcpu or -mtune options, for example: -mcpu=cortex-a73 + or -mtune=cortex-m33. + * A new command-line option -mpure-code has been added. It does not allow + constant data to be placed in code sections. This option is only + available when generating non-pic code for ARMv7-M targets. + * Support for the ACLE Coprocessor Intrinsics has been added. This enables + the generation of coprocessor instructions through the use of intrinsics + such as cdp, ldc, and others. + * The configure option --with-multilib-list now accepts the value rmprofile + to build multilib libraries for a range of embedded targets. See our + installation_instructions for details. + +AVR + + * On the reduced Tiny cores, the progmem variable_attribute is now properly + supported. Respective read-only variables are located in flash memory in + section .progmem.data. No special code is needed to access such + variables; the compiler automatically adds an offset of 0x4000 to all + addresses, which is needed to access variables in flash memory. As + opposed to ordinary cores where it is sufficient to specify the progmem + attribute with definitions, on the reduced Tiny cores the attribute also + has to be specified with (external) declarations: + + extern const int array[] __attribute__((__progmem__)); + + int get_value2 (void) + { + /* Access via addresses array + 0x4004 and array + 0x4005. */ + return array[2]; + } + + const int* get_address (unsigned idx) + { + /* Returns array + 0x4000 + 2 * idx. */ + return &array[idx]; + } + + * A new command-line option -Wmisspelled-isr has been added. It turns off — + or turns into errors — warnings that are reported for interrupt service + routines (ISRs) which don't follow AVR-LibC's naming convention of + prefixing ISR names with __vector. + * __builtin_avr_nops(n) is a new built-in_function that inserts n NOP + instructions into the instruction stream. n must be a value known at + compile time. + +IA-32/x86-64 + + * Support for the AVX-512 Fused Multiply Accumulation Packed Single + precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word + variable precision (4VNNIW), AVX-512 Vector Population Count (VPOPCNTDQ) + and Software Guard Extensions (SGX) ISA extensions has been added. + +NVPTX + + * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs. See the + Offloading_Wiki on how to configure it. + +PowerPC / PowerPC64 / RS6000 + + * The PowerPC port now uses LRA by default. + * GCC now diagnoses inline assembly that clobbers register r2. This has + always been invalid code, and is no longer quietly tolerated. + * The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been enhanced + to generate more of the new instructions by default, and to provide more + built-in functions to generate code for other new instructions. + * The configuration option --enable-gnu-indirect-function is now enabled by + default on PowerPC GNU/Linux builds. + * The PowerPC port will now allow 64-bit and 32-bit integer types to be + allocated to the VSX vector registers (ISA 2.06 and above). In addition, + on ISA 3.0, 16-bit and 8-bit integer types can be allocated in the vector + registers. Previously, only 64-bit integer types were allowed in the + traditional floating point registers. + * New options -mstack-protector-guard=global, -mstack-protector-guard=tls, + -mstack-protector-guard-reg=, and -mstack-protector-guard-offset= change + how the stack protector gets the value to use as canary. + +RISC-V + + * Support for the RISC-V instruction set has been added. + +SPARC + + * The SPARC port now uses LRA by default. + * Support for the new Subtract-Extended-with-Carry instruction available in + SPARC M7 (Niagara 7) has been added. + +Operating Systems + +AIX + + * Visibility support has been enabled for AIX 7.1 and above. + +Fuchsia + + * Support has been added for the Fuchsia_OS. + +RTEMS + + * The ABI changes on ARM so that no short enums are used by default. + +Other significant improvements + + * -fverbose-asm previously emitted information on the meanings of assembly + expressions. This has been extended so that it now also prints comments + showing the source lines that correspond to the assembly, making it + easier to read the generated assembly (especially with larger functions). + For example, given this C source file: + + int test (int n) + { + int i; + int total = 0; + + for (i = 0; i < n; i++) + total += i * i; + return total; + } + + -fverbose-asm now gives output similar to this for the function body + (when compiling for x86_64, with -Os): + + .text + .globl test + .type test, @@function + test: + .LFB0: + .cfi_startproc + # example.c:4: int total = 0; + xorl %eax, %eax # + # example.c:6: for (i = 0; i < n; i++) + xorl %edx, %edx # i + .L2: + # example.c:6: for (i = 0; i < n; i++) + cmpl %edi, %edx # n, i + jge .L5 #, + # example.c:7: total += i * i; + movl %edx, %ecx # i, tmp92 + imull %edx, %ecx # i, tmp92 + # example.c:6: for (i = 0; i < n; i++) + incl %edx # i + # example.c:7: total += i * i; + addl %ecx, %eax # tmp92, + jmp .L2 # + .L5: + # example.c:10: } + ret + .cfi_endproc + + * Two new options have been added for printing fix-it hints: + o -fdiagnostics-parseable-fixits allows for fix-it hints to be + emitted in a machine-readable form, suitable for consumption by + IDEs. For example, given: + + spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'? + return ptr->colour; + ^~~~~~ + color + it will emit: + fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color" + o -fdiagnostics-generate-patch will print a patch in "unified" format + after any diagnostics are printed, showing the result of applying + all fix-it hints. For the above example it would emit: + --- spellcheck-fields.cc + +++ spellcheck-fields.cc + @@ -49,5 +49,5 @@ + + color get_color(struct s *ptr) + { + - return ptr->colour; + + return ptr->color; + } + * The gcc and g++ driver programs will now provide suggestions for + misspelled arguments to command-line options. + $ gcc -c test.c -ftls-model=global-dinamic + gcc: error: unknown TLS model 'global-dinamic' + gcc: note: valid arguments to '-ftls-model=' are: global- + dynamic initial-exec local-dynamic local-exec; did you mean + 'global-dynamic'? + * The compiler will now provide suggestions for misspelled parameters. + $ gcc -c test.c --param max-early-inliner-iteration=3 + cc1: error: invalid --param name 'max-early-inliner-iteration'; + did you mean 'max-early-inliner-iterations'? + * Profile-guided optimization (PGO) instrumentation, as well as test + coverage (GCOV), can newly instrument constructors (functions marks with + __attribute__((constructor))), destructors and C++ constructors (and + destructors) of classes that are used as a type of a global variable. + * A new option -fprofile-update=atomic prevents creation of corrupted + profiles created during instrumentation run (-fprofile=generate) of an + application. Downside of the option is a speed penalty. Providing - + pthread on command line would result in selection of atomic profile + updating (when supports by a target). + * GCC's already extensive testsuite has gained some new capabilities, to + further improve the reliability of the compiler: + o GCC now has has an internal unit testing API and a suite of tests + for programmatic self-testing of subsystems. + o GCC's C frontend has been extended so that it can parse dumps of + GCC's internal representations, allowing for DejaGnu tests that + more directly exercise specific optimization passes. This covers + both the GIMPLE_representation (for testing higher-level + optimizations) and the RTL_representation, allowing for more direct + testing of lower-level details, such as register allocation and + instruction selection. + + For questions related to the use of GCC, please consult these web + pages and the GCC_manuals. If that fails, the gcc-help@gcc.gnu.org + mailing list might help. Comments on these web pages and the + development of GCC are welcome on our developer list at + gcc@gcc.gnu.org. All of our_lists have public archives. + +Copyright (C) Free Software Foundation, Inc. Verbatim copying and +distribution of this entire article is permitted in any medium, +provided this notice is preserved. These pages are maintained by the +GCC team. Last modified 2017-05-01. --- gcc-7-7.2.0.orig/debian/NEWS.html +++ gcc-7-7.2.0/debian/NEWS.html @@ -0,0 +1,1285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +GCC 7 Release Series — Changes, New Features, and Fixes +- GNU Project - Free Software Foundation (FSF) + + + + + + + + + +

GCC 7 Release Series
Changes, New Features, and Fixes

+ +

+This page is a brief summary of some of the huge number of improvements in GCC 7. +For more information, see the +Porting to GCC 7 page and the +full GCC documentation. +

+ + +

Disclaimer: GCC 7 has not been released yet, so this document is +a work-in-progress.

+ + +

Caveats

+
    +
  • GCC now uses LRA (a + new local register allocator) by default for new targets.
  • + +
  • The non-standard C++0x type traits + has_trivial_default_constructor, + has_trivial_copy_constructor and + has_trivial_copy_assign have been removed.
  • +
  • The libstdc++ + Profile + Mode has been deprecated and will be removed in a future version. +
  • + +
  • The Cilk+ extensions to the C and C++ languages have been deprecated.
  • +
+ + +

General Optimizer Improvements

+
    +
  • GCC 7 can determine the return value or range of return values of + some calls to the sprintf family of functions and make + it available to other optimization passes. Some calls to the + snprintf function with a zero size argument can be folded + into constants. This optimization is included in -O1 + and can be selectively controlled by the + -fprintf-return-value option.
  • +
  • A new store merging pass has been added. It merges constant stores to + adjacent memory locations into fewer, wider, stores. + It is enabled by the -fstore-merging option and at the + -O2 optimization level or higher (and -Os).
  • + +
  • A new code hoisting optimization has been added to the partial + redundancy elimination pass. It attempts to move evaluation of + expressions executed on all paths to the function exit as early as + possible, which helps primarily for code size, but can be useful for + speed of generated code as well. It is enabled by the + -fcode-hoisting option and at the -O2 + optimization level or higher (and -Os).
  • + +
  • A new interprocedural bitwise constant propagation optimization + has been added, which propagates knowledge about which bits of variables + are known to be zero (including pointer alignment information) across + the call graph. It is enabled by the -fipa-bit-cp + option if -fipa-cp is enabled as well, and is enabled + at the -O2 optimization level and higher (and + -Os). This optimization supersedes interprocedural + alignment propagation of GCC 6, and therefore the + option -fipa-cp-alignment is now deprecated and + ignored.
  • + +
  • A new interprocedural value range propagation optimization has been + added, which propagates integral ranges that variable values can be proven + to be within across the call graph. It is enabled by the + -fipa-vrp option and at the -O2 optimization + level and higher (and -Os).
  • + +
  • A new loop splitting optimization pass has been added. It splits + certain loops if they contain a condition that is always true on one + side of the iteration space and always false on the other into two + loops where each of the new two loops iterates just on one of the sides + of the iteration space and the condition does not need to be checked + inside of the loop. It is enabled by the -fsplit-loops + option and at the -O3 optimization level or higher.
  • + +
  • The shrink-wrapping optimization can now separate portions of + prologues and epilogues to improve performance if some of the + work done traditionally by prologues and epilogues is not needed + on certain paths. This is controlled by the + -fshrink-wrap-separate option, enabled by default. + It requires target support, which is currently only implemented in the + PowerPC and AArch64 ports.
  • + +
  • AddressSanitizer gained a new sanitization option, -fsanitize-address-use-after-scope, + which enables sanitization of variables whose address is taken and used after a scope where the + variable is defined: +
    +int
    +main (int argc, char **argv)
    +{
    +  char *ptr;
    +    {
    +      char my_char;
    +      ptr = &my_char;
    +    }
    +
    +  *ptr = 123;
    +  return *ptr;
    +}
    +
    +==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
    +WRITE of size 1 at 0x7fffb8dba990 thread T0
    +    #0 0x4006d4 in main /tmp/use-after-scope-1.c:10
    +    #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
    +    #2 0x400739 in _start (/tmp/a.out+0x400739)
    +
    +Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
    +    #0 0x40067f in main /tmp/use-after-scope-1.c:3
    +
    +  This frame has 1 object(s):
    +    [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
    +  
    + + The option is enabled by default with -fsanitize=address and disabled + by default with -fsanitize=kernel-address. + Compared to the LLVM compiler, where the option already exists, + the implementation in the GCC compiler has couple of improvements and advantages: +
      +
    • A complex usage of gotos and case labels are properly handled and should not + report any false positive or false negatives. +
    • +
    • C++ temporaries are sanitized.
    • +
    • Sanitization can handle invalid memory stores that are optimized out + by the LLVM compiler when using an optimization level.
    • +
    + +
  • + +
  • The -fsanitize=signed-integer-overflow suboption of the + UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even on + arithmetic operations with generic vectors.
  • + +
  • Version 5 of the DWARF debugging + information standard is supported through the -gdwarf-5 + option. The DWARF version 4 debugging information remains the + default until debugging information consumers are adjusted.
  • + +
+ + +

New Languages and Language specific improvements

+ + OpenACC support in C, C++, and Fortran continues to be maintained and + improved. + See the OpenACC + and Offloading wiki pages + for further information. + + +

Ada

+
    +
  • On mainstream native platforms, Ada programs no longer require the stack + to be made executable in order to run properly.
  • +
+ +

BRIG (HSAIL)

+ +

Support for processing BRIG 1.0 files was added in this release. +BRIG is a binary format for HSAIL (Heterogeneous System Architecture +Intermediate Language). The BRIG frontend can be used for implementing +HSAIL "finalizers" (compilation of HSAIL to a native ISA) for gcc-supported +targets. An implementation of an HSAIL runtime library, libhsail-rt is +also included.

+ +

C family

+
    +
  • New command-line options have been added for the C and C++ compilers: +
      +
    • -Wimplicit-fallthrough warns when a switch case falls + through. This warning has five different levels. The compiler is + able to parse a wide range of fallthrough comments, depending on + the level. It also handles control-flow statements, such as ifs. + It's possible to suppres the warning by either adding a fallthrough + comment, or by using a null statement: __attribute__ + ((fallthrough)); (C, C++), or [[fallthrough]]; + (C++17), or [[gnu::fallthrough]]; (C++11/C++14). + This warning is enabled by -Wextra.
    • +
    • -Wpointer-compare warns when a pointer is compared with + a zero character constant. Such code is now invalid in C++11 and + GCC rejects it. This warning is enabled by default.
    • +
    • -Wduplicated-branches warns when an if-else has identical + branches.
    • +
    • -Wrestrict warns when an argument passed to a + restrict-qualified parameter aliases with another + argument.
    • +
    • -Wmemset-elt-size warns for memset calls, + when the first argument references an array, and the third argument is + a number equal to the number of elements of the array, but not the size + of the array. This warning is enabled by -Wall.
    • +
    • -Wint-in-bool-context warns about suspicious uses of + integer values where boolean values are expected. This warning is + enabled by -Wall.
    • +
    • -Wswitch-unreachable warns when a switch + statement has statements between the controlling expression and the + first case label which will never be executed. This warning is enabled + by default.
    • +
    • -Wexpansion-to-defined warns when defined is + used outside #if. This warning is enabled by + -Wextra or -Wpedantic.
    • +
    • -Wregister warns about uses of the register + storage specifier. In C++17 this keyword has been removed and for C++17 + this is a pedantic warning enabled by default. The warning is not + emitted for the GNU Explicit Register Variables extension.
    • +
    • -Wvla-larger-than=N warns about unbounded uses of + variable-length arrays, and about bounded uses of variable-length + arrays whose bound can be larger than N bytes.
    • +
    • -Wduplicate-decl-specifier warns when a declaration + has duplicate const, volatile, + restrict or _Atomic specifier. This warning + is enabled by -Wall.
    • +
    +
  • +
  • GCC 6's C and C++ frontends were able to offer suggestions for + misspelled field names: +
    +spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'?
    +   return ptr->colour;
    +               ^~~~~~
    +
    + GCC 7 greatly expands the scope of these suggestions. Firstly, it + adds fix-it hints to such suggestions: +
    +spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'?
    +   return ptr->colour;
    +               ^~~~~~
    +               color
    +
    + The suggestions now cover many other things, such as misspelled + function names: +
    +spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_widget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declaration]
    +   gtk_widget_showall (w);
    +   ^~~~~~~~~~~~~~~~~~
    +   gtk_widget_show_all
    +
    + misspelled macro names and enum values: +
    +spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a function); did you mean 'MAX_ITEMS'?
    + int array[MAX_ITEM];
    +           ^~~~~~~~
    +           MAX_ITEMS
    +
    + misspelled type names: +
    +spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'signed'?
    + void test (singed char e);
    +            ^~~~~~
    +            signed
    +
    + and, in the C frontend, named initializers: +
    +test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color'?
    + struct s test = { .colour = 3 };
    +                    ^~~~~~
    +                    color
    +
  • +
  • The preprocessor can now offer suggestions for misspelled + directives, e.g.: +
    +test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
    + #endfi
    +  ^~~~~
    +  endif
    +
  • +
  • Warnings about format strings now underline the pertinent part of + the string, and can offer suggested fixes. In some cases, the + pertinent argument is underlined. +
    +test.c:51:29: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat=]
    +   printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
    +                          ~^                ~~~~~
    +                          %d
    +
  • + +
  • The new -Wdangling-else command-line option has been split +out of -Wparentheses and warns about dangling else.
  • +
  • The -Wshadow warning has been split into three +variants. -Wshadow=global warns for any shadowing. This +is the default when using -Wshadow without any +argument. -Wshadow=local only warns for a local variable +shadowing another local variable or +parameter. -Wshadow=compatible-local only warns for a +local variable shadowing another local variable or parameter whose +type is compatible (in C++ compatible means that the type of the +shadowing variable can be converted to that of the shadowed variable).

    + +

    The following example shows the different kinds of shadow +warnings:

    + +
    +enum operation { add, count };
    +struct container { int nr; };
    +
    +int
    +container_count (struct container c, int count)
    +{
    +  int r = 0;
    +  for (int count = 0; count > 0; count--)
    +    {
    +      struct container count = c;
    +      r += count.nr;
    +    }
    +  return r;
    +}
    + +

    -Wshadow=compatible-local will warn for the parameter being +shadowed with the same type:

    + +
    +warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=compatible-local]
    +   for (int count = 0; count > 0; count--)
    +            ^~~~~
    +warn-test.c:5:42: note: shadowed declaration is here
    + container_count (struct container c, int count)
    +                                          ^~~~~
    + +

    -Wshadow=local will warn for the above and for the shadowed +declaration with incompatible type:

    + +
    +warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Wshadow=local]
    +       struct container count = c;
    +                        ^~~~~
    +warn-test.c:8:12: note: shadowed declaration is here
    +   for (int count = 0; count > 0; count--)
    +            ^~~~~
    + +

    -Wshadow=global will warn for all of the above and the shadowing +of the global declaration:

    + +
    +warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [-Wshadow]
    + container_count (struct container c, int count)
    +                                          ^~~~~
    +warn-test.c:1:23: note: shadowed declaration is here
    + enum operation { add, count };
    +                       ^~~~~
    +
  • +
  • GCC 7 contains a number of enhancements that help detect buffer overflow + and other forms of invalid memory accesses. +
      +
    • The -Walloc-size-larger-than=size option + detects calls to standard and user-defined memory allocation + functions decorated with attribute alloc_size whose + argument exceeds the specified size + (PTRDIFF_MAX by default). The option also detects + arithmetic overflow in the computation of the size in two-argument + allocation functions like calloc where the total size + is the product of the two arguments. Since calls with an excessive + size cannot succeed they are typically the result of programming + errors. Such bugs have been known to be the source of + security vulnerabilities and a target of exploits. + -Walloc-size-larger-than=PTRDIFF_MAX is included + in -Wall.

      +

      For example, the following call to malloc incorrectly + tries to avoid passing a negative argument to the function and + instead ends up unconditionally invoking it with an argument less + than or equal to zero. Since after conversion to the type of + the argument of the function (size_t) a negative + argument results in a value in excess of the maximum + PTRDIFF_MAX the call is diagnosed.

      +
      +void* f (int n)
      +{
      +  return malloc (n > 0 ? 0 : n);
      +}
      +
      +warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2147483647 [-Walloc-size-larger-than=]
    • +
    • The -Walloc-zero option detects calls to standard + and user-defined memory allocation functions decorated with attribute + alloc_size with a zero argument. -Walloc-zero + is not included in either -Wall or -Wextra + and must be explicitly enabled.
    • +
    • The -Walloca option detects all calls to the + alloca function in the program. -Walloca + is not included in either -Wall or -Wextra + and must be explicitly enabled.
    • +
    • The -Walloca-larger-than=size option detects + calls to the alloca function whose argument either may + exceed the specified size, or that is not known + to be sufficiently constrained to avoid exceeding it. + -Walloca-larger-than is not included in either + -Wall or -Wextra and must be explicitly + enabled.

      +

      For example, compiling the following snippet with + -Walloca-larger-than=1024 results in a warning because + even though the code appears to call alloca only with + sizes of 1kb and less, since n is signed, a negative + value would result in a call to the function well in excess of + the limit.

      +
      +void f (int n)
      +{
      +  char *d;
      +  if (n < 1025)
      +    d = alloca (n);
      +  else
      +    d = malloc (n);
      +  …
      +}
      +
      +warning: argument to 'alloca may be too large due to conversion from 'int' to 'long unsigned int' [-Walloca-larger-than=]
      +

      In contrast, a call to alloca that isn't bounded at all + such as in the following function will elicit the warning below + regardless of the size argument to the option.

      +
      +void f (size_t n)
      +{
      +  char *d = alloca (n);
      +  …
      +}
      +
      +warning: unbounded use of 'alloca' [-Walloca-larger-than=]
    • +
    • The -Wformat-overflow=level option detects + certain and likely buffer overflow in calls to the sprintf + family of formatted output functions. Although the option is enabled + even without optimization it works best with -O2 and + higher.

      +

      For example, in the following snippet the call to + sprintf is diagnosed because even though its + output has been constrained using the modulo operation it could + result in as many as three bytes if mday were negative. + The solution is to either allocate a larger buffer or make sure + the argument is not negative, for example by changing + mday's type to unsigned or by making + the type of the second operand of the modulo expression + unsigned: 100U.

      +
      +void* f (int mday)
      +{
      +  char *buf = malloc (3);
      +  sprintf (buf, "%02i", mday % 100);
      +  return buf;
      +}
      +
      +warning: 'sprintf may write a terminating nul past the end of the destination [-Wformat-overflow=]
      +note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
    • +
    • The -Wformat-truncation=level option detects + certain and likely output truncation in calls to the + snprintf family of formatted output functions. + -Wformat-truncation=1 is included in -Wall + and enabled without optimization but works best with -O2 + and higher.

      +

      For example, the following function attempts to format an integer + between 0 and 255 in hexadecimal, including the 0x + prefix, into a buffer of four charactars. But since the function + must always terminate output by the null character ('\0') + such a buffer is only big enough to fit just one digit plus the prefix. + Therefore the snprintf call is diagnosed. To avoid + the warning either use a bigger buffer or handle the function's + return value which indicates whether or not its output has + been truncated.

      +
      +void f (unsigned x)
      +{
      +  char d[4];
      +  snprintf (d, sizeof d, "%#02x", x & 0xff);
      +  …
      +}
      +
      +warning: 'snprintf' output may be truncated before the last format character [-Wformat-truncation=]
      +note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
    • +
    • The -Wnonnull option has been enhanced to detect + a broader set of cases of passing null pointers to functions that + expect a non-null argument (those decorated with attribute + nonnull). By taking advantage of optimizations the + option can detect many more cases of the problem than in prior GCC + versions.
    • +
    • The -Wstringop-overflow=type option detects + buffer overflow in calls to string handling functions like + memcpy and strcpy. The option relies on + + Object Size Checking and has an effect similar to defining + the _FORTIFY_SOURCE macro. + -Wstringop-overflow=2 is enabled by default.

      +

      For example, in the following snippet, because the call to + strncat specifies a maximum that allows the function to + write past the end of the destination, it is diagnosed. To correct + the problem and avoid the overflow the function should be called + with a size of at most sizeof d - strlen(d) - 1.

      +
      +void f (const char *fname)
      +{
      +  char d[8];
      +  strncpy (d, "/tmp/", sizeof d);
      +  strncat (d, fname, sizeof d);
      +  …
      +}
      +
      +warning: specified bound 8 equals the size of the destination [-Wstringop-overflow=]
      +
    • +
    +
  • +
  • The <limits.h> header provided by GCC defines + macros such as INT_WIDTH for the width in bits of + integer types, if __STDC_WANT_IEC_60559_BFP_EXT__ is + defined before the header is included. + The <stdint.h> header defines such macros + as SIZE_WIDTH and INTMAX_WIDTH for the + width of some standard typedef names for integer types, + again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined + before the header is included; note that GCC's implementation of + this header is only used for freestanding compilations, not hosted + compilations, on most systems. These macros come from ISO/IEC TS + 18661-1:2014.
  • +
  • The <float.h> header provided by GCC defines + the macro CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, + if __STDC_WANT_IEC_60559_BFP_EXT__ is defined before + the header is included. This represents the number of decimal + digits for which conversions between decimal character strings and + binary formats, in both directions, are correctly rounded, and + currently has the value of UINTMAX_MAX on all systems, + reflecting that GCC's compile-time conversions are correctly rounded + for any number of digits.
  • +
  • New __builtin_add_overflow_p, + __builtin_sub_overflow_p, + __builtin_mul_overflow_p built-in functions have been added. + These work similarly to their siblings without the + _p suffix, but do not actually store the result of the + arithmetics anywhere, just return whether the operation would overflow. + Calls to these built-ins with integer constant arguments evaluate to + integer constants expressions.

    +

    For example, in the following, c is assigned the result + of a * b only if the multiplication does not overflow, + otherwise it is assigned the value zero. The multiplication is + performed at compile-time and without triggering + a -Woverflow warning.

    +
    enum {
    +  a = 12345678,
    +  b = 87654321,
    +  c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
    +};
  • + +
+ +

C

+
    +
  • The C front end now supports type + names _FloatN for floating-point types with IEEE + interchange formats and _FloatNx for + floating-point types with IEEE extended formats. These type names + come from ISO/IEC TS 18661-3:2015.

    +

    The set of types supported depends on the target for which GCC is + configured. Most targets + support _Float32, _Float32x + and _Float64. _Float128 is supported on + targets where IEEE binary128 encoding was already supported + as long double + or __float128. _Float64x is supported on + targets where a type with either binary128 or Intel extended + precision format is available.

    +

    Constants with these types are supported using + suffixes fN, FN, + fNx and FNx + (e.g., 1.2f128 or 2.3F64x). Macros such + as FLT128_MAX are defined + in <float.h> + if __STDC_WANT_IEC_60559_TYPES_EXT__ is defined before + it is included.

    +

    These new types are always distinct from each other and + from float, double and long + double, even if they have the same encoding. Complex types + such as _Complex _Float128 are also supported.

    +

    Type-generic built-in functions such + as __builtin_isinf support the new types, and the + following type-specific built-in functions have versions + (suffixed fN or fNx) for the + new + types: __builtin_copysign, __builtin_fabs, __builtin_huge_val, __builtin_inf, __builtin_nan, __builtin_nans.

  • +
  • Compilation with -fopenmp is now compatible with the + C11 _Atomic keyword.
  • +
+ +

C++

+
    +
  • The C++ front end has experimental support for all of the current C++17 + draft with the -std=c++1z or -std=gnu++1z flags, + including if constexpr, class template argument + deduction, auto template parameters, and structured bindings. + For a full list of new features, + see the C++ + status page.
  • +
  • C++17 support for new of over-aligned types can be enabled + in other modes with the -faligned-new flag.
  • +
  • The C++17 evaluation order requirements can be selected in other modes + with the -fstrong-eval-order flag, or disabled in C++17 mode + with -fno-strong-eval-order.
  • +
  • The default semantics of inherited constructors has changed in all modes, + following P0136. Essentially, + overload resolution happens as if calling the inherited constructor + directly, and the compiler fills in construction of the other bases and + members as needed. Most uses should not need any changes. The old + behavior can be restored with -fno-new-inheriting-ctors, + or -fabi-version less than 11.
  • +
  • The resolution of DR 150 on matching of template template parameters, + allowing default template arguments to make a template match a parameter, + is currently enabled by default in C++17 mode only. The default can be + overridden with -f{no-,}new-ttp-matching.
  • +
  • The C++ front end will now provide fix-it hints for some missing + semicolons, allowing for automatic fixes by IDEs: +
    +test.cc:4:11: error: expected ';' after class definition
    + class a {} 
    +           ^
    +           ;
    +
  • +
  • -Waligned-new has been added to the C++ front end. It warns + about new of type with extended alignment without + -faligned-new.
  • +
+ +

Runtime Library (libstdc++)

+
    +
  • + The type of exception thrown by iostreams, + std::ios_base::failure, now uses the + cxx11 + ABI. +
  • +
  • Experimental support for C++17, including the following new features: +
      +
    • + std::string_view; +
    • +
    • + std::any, std::optional, + and std::variant; +
    • +
    • + std::invoke, std::is_invocable, + std::is_nothrow_invocable, and invoke_result; +
    • +
    • + std::is_swappable, + and std::is_nothrow_swappable; +
    • +
    • + std::apply, + and std::make_from_tuple; +
    • +
    • + std::void_t, std::bool_constant, + std::conjunction, std::disjunction, + and std::negation; +
    • +
    • Variable templates for type traits;
    • +
    • Mathematical Special Functions;
    • +
    • + std::chrono::floor, std::chrono::ceil, + std::chrono::round, and std::chrono::abs; +
    • +
    • + std::clamp, std::gcd, std::lcm, + 3-dimensional std::hypot; +
    • +
    • + std::scoped_lock, std::shared_mutex, + std::atomic<T>::is_always_lock_free; +
    • +
    • + std::sample, std::default_searcher, + std::boyer_moore_searcher and + std::boyer_moore_horspool_searcher; +
    • +
    • + Extraction and re-insertion of map and set nodes, try_emplace + members for maps, and functions for accessing containers + std::size, std::empty, and + std::data; +
    • +
    • + std::shared_ptr support for arrays, + std::shared_ptr<T>::weak_type, + std::enable_shared_from_this<T>::weak_from_this(), + and std::owner_less<void>; +
    • +
    • std::byte;
    • +
    • std::as_const, std::not_fn, + std::has_unique_object_representations, + constexpr std::addressof. +
    • +
    + Thanks to Daniel Krügler, Tim Shen, Edward Smith-Rowland, and Ville Voutilainen for + work on the C++17 support. +
  • +
  • + A new power-of-two rehashing policy for use with the + _Hashtable internals, thanks to François Dumont. +
  • +
+ +

Fortran

+
    + +
  • + Support for a number of extensions for compatibility with legacy code + with new flags: +
      +
    • + -fdec-structure + Support for DEC STRUCTURE and UNION +
    • +
    • + -fdec-intrinsic-ints + Support for new integer intrinsics with B/I/J/K prefixes such as + BABS, JIAND... +
    • +
    • + -fdec-math + Support for additional math intrinsics, including COTAN and + degree-valued trigonometric functions such as TAND, + ASIND... +
    • +
    • + -fdec + Enable the -fdec-* family of extensions. +
    • +
    +
  • + +
  • + New flag -finit-derived to allow default initialization of + derived-type variables. +
  • + +
  • + Improved DO loops with step equal to 1 or -1, generates faster + code without a loop preheader. A new warning, -Wundefined-do-loop, + warns when a loop iterates either to HUGE(i) (with step equal + to 1), or to -HUGE(i) (with step equal to -1). Invalid behavior + can be caught at run time with -fcheck=do enabled: +
    +program test
    +  implicit none
    +  integer(1) :: i
    +  do i = -HUGE(i)+10, -HUGE(i)-1, -1
    +    print *, i
    +  end do
    +end program test
    +
    +At line 8 of file do_check_12.f90
    +Fortran runtime error: Loop iterates infinitely
    +
  • +
  • Version 4.5 of the OpenMP specification is now partially supported also in the + Fortran compiler; the largest missing item is structure element + mapping.
  • + +
  • User-defined derived-type input/output (UDTIO) is added.
  • + +
  • Derived type coarrays with allocable and pointer components + is partially supported.
  • + +
  • Non-constant stop codes and error stop codes (Fortran 2015 feature).
  • + +
  • Derived types with allocatable components of recursive type.
  • + +
  • Intrinsic assignment to polymorphic variables.
  • + +
  • Improved submodule support.
  • + +
  • Improved diagnostics (polymorphic results in pure functions).
  • +
+ +

Go

+
    +
  • GCC 7 provides a complete implementation of the Go 1.8.1 + user packages.
  • + +
  • Compared to the Go 1.8.1 toolchain, the garbage collector is more + conservative and less concurrent.
  • + +
  • Escape analysis is available for experimental use via + the -fgo-optimize-allocs option. + The -fgo-debug-escape prints information useful for + debugging escape analysis choices.
  • + +
+ +

Java (GCJ)

+ +

The GCC Java frontend and associated libjava runtime library have been +removed from GCC.

+ + +

libgccjit

+ +

The libgccjit API gained support for marking calls as requiring +tail-call optimization via a new entrypoint: +gcc_jit_rvalue_set_bool_require_tail_call.

+ +

libgccjit performs numerous checks at the API boundary, but +if these succeed, it previously ignored errors and other diagnostics emitted +within the core of GCC, and treated the compile of a gcc_jit_context +as having succeeded. As of GCC 7 it now ensures that if any diagnostics are +emitted, they are visible from the libgccjit API, and that the the context is +flagged as having failed.

+ + +

New Targets and Target Specific Improvements

+ +

AArch64

+
    +
  • + The ARMv8.3-A architecture is now supported. It can be used by + specifying the -march=armv8.3-a option. +
  • +
  • + The option -msign-return-address= is supported to enable + return address protection using ARMv8.3-A Pointer Authentication + Extensions. For more information on the arguments accepted by this + option, please refer to + + AArch64-Options. +
  • +
  • + The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point + Extensions are now supported. They can be used by specifying the + -march=armv8.2-a or -march=armv8.2-a+fp16 + options. + The 16-bit Floating-Point Extensions introduce new half-precision data + processing floating-point instructions. +
  • +
  • + Support has been added for the following processors + (GCC identifiers in parentheses): + ARM Cortex-A73 (cortex-a73), + Broadcom Vulcan (vulcan), + Cavium ThunderX CN81xx (thunderxt81), + Cavium ThunderX CN83xx (thunderxt83), + Cavium ThunderX CN88xx (thunderxt88), + Cavium ThunderX CN88xx pass 1.x (thunderxt88p1), + Cavium ThunderX 2 CN99xx (thunderx2t99), + Qualcomm Falkor (falkor). + The GCC identifiers can be used + as arguments to the -mcpu or -mtune options, + for example: -mcpu=cortex-a73 or + -mtune=vulcan or as arguments to the equivalent target + attributes and pragmas. +
  • +
+ +

ARC

+
    +
  • + Add support for ARC HS and ARC EM processors. +
  • +
  • + Add support for ARC EM variation found in Intel QuarkSE SoCs. +
  • +
  • + Add support for NPS400 ARC700 based CPUs. +
  • +
  • + Thread Local Storage is now supported by ARC CPUs. +
  • +
  • + Fix errors for ARC600 when using 32x16 multiplier option. +
  • +
  • + Fix PIE for ARC CPUs. +
  • +
  • + New CPU templates are supported via multilib. +
  • +
+ +

ARM

+
    +
  • + Support for the ARMv5 and ARMv5E architectures has been deprecated + (which have no known implementations) and will be removed in a future + GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ architectures + remain supported. + The values armv5 and armv5e of + -march are thus deprecated. +
  • +
  • + The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point + Extensions are now supported. They can be used by specifying the + -march=armv8.2-a or -march=armv8.2-a+fp16 + options. + The 16-bit Floating-Point Extensions introduce new half-precision data + processing floating-point instructions. +
  • +
  • + The ARMv8-M architecture is now supported in its two architecture + profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and + Floating-Point Extensions. They can be used by specifying the + -march=armv8-m.base, armv8-m.main or + armv8-m.main+dsp options. +
  • +
  • + Support has been added for the following processors + (GCC identifiers in parentheses): ARM Cortex-A73 + (cortex-a73), ARM Cortex-M23 (cortex-m23) and + ARM Cortex-M33 (cortex-m33). + The GCC identifiers can be used + as arguments to the -mcpu or -mtune options, + for example: -mcpu=cortex-a73 or + -mtune=cortex-m33. +
  • +
  • + A new command-line option -mpure-code has been added. + It does not allow constant data to be placed in code sections. + This option is only available when generating non-pic code for ARMv7-M + targets. +
  • +
  • + Support for the ACLE Coprocessor Intrinsics has been added. This enables + the generation of coprocessor instructions through the use of intrinsics + such as cdp, ldc, and others. +
  • +
  • + The configure option --with-multilib-list now accepts the + value rmprofile to build multilib libraries for a range of + embedded targets. See our + installation + instructions for details. +
  • +
+ +

AVR

+
    +
  • On the reduced Tiny cores, the progmem + variable + attribute + is now properly supported. Respective read-only variables are located + in flash memory in section .progmem.data. No special + code is needed to access such variables; the compiler automatically + adds an offset of 0x4000 to all addresses, which is needed + to access variables in flash memory. As opposed to ordinary cores + where it is sufficient to specify the progmem attribute + with definitions, on the reduced Tiny cores the attribute also has to + be specified with (external) declarations: +
    +extern const int array[] __attribute__((__progmem__));
    +
    +int get_value2 (void)
    +{
    +  /* Access via addresses array + 0x4004 and array + 0x4005. */
    +  return array[2];
    +}
    +
    +const int* get_address (unsigned idx)
    +{
    +  /* Returns array + 0x4000 + 2 * idx. */
    +  return &array[idx];
    +}
  • +
  • A new command-line option -Wmisspelled-isr has been added. + It turns off — or turns into errors — + warnings that are reported for interrupt service routines (ISRs) + which don't follow AVR-LibC's naming convention of prefixing + ISR names with __vector.
  • +
  • __builtin_avr_nops(n) is a new + built-in + function + that inserts n NOP instructions into + the instruction stream. n must be a value known at + compile time.
  • +
+ + + +

IA-32/x86-64

+
    +
  • Support for the AVX-512 Fused Multiply Accumulation Packed Single precision + (4FMAPS), AVX-512 Vector Neural Network Instructions Word variable precision + (4VNNIW), AVX-512 Vector Population Count (VPOPCNTDQ) and Software + Guard Extensions (SGX) ISA extensions has been added.
  • +
+ + + + + + + + + +

NVPTX

+
    +
  • OpenMP target regions can now be offloaded to NVidia PTX GPGPUs. + See the Offloading Wiki + on how to configure it.
  • +
+ +

PowerPC / PowerPC64 / RS6000

+
    +
  • The PowerPC port now uses LRA by default.
  • +
  • GCC now diagnoses inline assembly that clobbers register r2. + This has always been invalid code, and is no longer quietly + tolerated.
  • +
  • The PowerPC port's support for ISA 3.0 (-mcpu=power9) + has been enhanced to generate more of the new instructions by default, and + to provide more built-in functions to generate code for other new + instructions.
  • +
  • The configuration option --enable-gnu-indirect-function + is now enabled by default on PowerPC GNU/Linux builds.
  • +
  • The PowerPC port will now allow 64-bit and 32-bit integer types to be + allocated to the VSX vector registers (ISA 2.06 and above). In addition, + on ISA 3.0, 16-bit and 8-bit integer types can be allocated in the vector + registers. Previously, only 64-bit integer types were allowed in the + traditional floating point registers.
  • +
  • New options -mstack-protector-guard=global, + -mstack-protector-guard=tls, + -mstack-protector-guard-reg=, and + -mstack-protector-guard-offset= change how the stack + protector gets the value to use as canary.
  • +
+ + + +

RISC-V

+
    +
  • Support for the RISC-V instruction set has been added.
  • +
+ + + + + +

SPARC

+
    +
  • The SPARC port now uses LRA by default.
  • +
  • Support for the new Subtract-Extended-with-Carry instruction + available in SPARC M7 (Niagara 7) has been added.
  • +
+ + +

Operating Systems

+ +

AIX

+
    +
  • Visibility support has been enabled for AIX 7.1 and above.
  • +
+ +

Fuchsia

+
    +
  • Support has been added for the + Fuchsia OS.
  • +
+ + + + + + + +

RTEMS

+
    +
  • The ABI changes on ARM so that no short enums are used by default.
  • +
+ + + + + + + + + + + +

Other significant improvements

+
    +
  • -fverbose-asm previously emitted information on the + meanings of assembly expressions. This has been extended so that + it now also prints comments showing the source lines that correspond + to the assembly, making it easier to read the generated assembly + (especially with larger functions). + For example, given this C source file: +
    +int test (int n)
    +{
    +  int i;
    +  int total = 0;
    +
    +  for (i = 0; i < n; i++)
    +    total += i * i;
    +  return total;
    +}
    +
    + -fverbose-asm now gives output similar to this for + the function body (when compiling for x86_64, with + -Os): +
    +       .text
    +       .globl  test
    +       .type   test, @@function
    +test:
    +.LFB0:
    +       .cfi_startproc
    +# example.c:4:   int total = 0;
    +       xorl    %eax, %eax      # <retval>
    +# example.c:6:   for (i = 0; i < n; i++)
    +       xorl    %edx, %edx      # i
    +.L2:
    +# example.c:6:   for (i = 0; i < n; i++)
    +       cmpl    %edi, %edx      # n, i
    +       jge     .L5     #,
    +# example.c:7:     total += i * i;
    +       movl    %edx, %ecx      # i, tmp92
    +       imull   %edx, %ecx      # i, tmp92
    +# example.c:6:   for (i = 0; i < n; i++)
    +       incl    %edx    # i
    +# example.c:7:     total += i * i;
    +       addl    %ecx, %eax      # tmp92, <retval>
    +       jmp     .L2     #
    +.L5:
    +# example.c:10: }
    +       ret
    +       .cfi_endproc
    +
  • +
  • Two new options have been added for + printing fix-it hints: +
      +
    • -fdiagnostics-parseable-fixits + allows for fix-it hints to be emitted in a machine-readable + form, suitable for consumption by IDEs. For example, given: +
      +spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'?
      +   return ptr->colour;
      +               ^~~~~~
      +               color
      +
      +it will emit: +
      +fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
      +
    • +
    • -fdiagnostics-generate-patch will print + a patch in "unified" format after any diagnostics are printed, + showing the result of applying all fix-it hints. For the above + example it would emit: +
      +--- spellcheck-fields.cc
      ++++ spellcheck-fields.cc
      +@@ -49,5 +49,5 @@
      +
      + color get_color(struct s *ptr)
      + {
      +-  return ptr->colour;
      ++  return ptr->color;
      + }
      +
  • +
  • The gcc and g++ driver programs will now + provide suggestions for misspelled arguments to command-line options. +
    +$ gcc -c test.c -ftls-model=global-dinamic
    +gcc: error: unknown TLS model 'global-dinamic'
    +gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec local-dynamic local-exec; did you mean 'global-dynamic'?
    +
  • +
  • The compiler will now provide suggestions for misspelled parameters. +
    +$ gcc -c test.c --param max-early-inliner-iteration=3 
    +cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'max-early-inliner-iterations'?
    +
  • + +
  • Profile-guided optimization (PGO) instrumentation, as well as test coverage (GCOV), + can newly instrument constructors (functions marks with __attribute__((constructor))), + destructors and C++ constructors (and destructors) of classes that are used + as a type of a global variable. +
  • +
  • A new option -fprofile-update=atomic prevents creation of corrupted + profiles created during instrumentation run (-fprofile=generate) + of an application. Downside of the option is a speed penalty. Providing + -pthread on command line would result in selection of atomic + profile updating (when supports by a target). +
  • +
  • +

    GCC's already extensive testsuite has gained some new + capabilities, to further improve the reliability of the compiler:

    +
      +
    • GCC now has has an internal unit testing API and a suite of tests + for programmatic self-testing of subsystems.
    • +
    • GCC's C frontend has been extended so that it can parse dumps of + GCC's internal representations, allowing for DejaGnu tests + that more directly exercise specific optimization passes. This + covers both the + + GIMPLE representation (for testing higher-level + optimizations) and the + + RTL representation, allowing for more direct testing of + lower-level details, such as register allocation and instruction + selection.
    • +
    +
  • +
+ + + + + + + + + + + + + + + + --- gcc-7-7.2.0.orig/debian/README.Bugs.m4 +++ gcc-7-7.2.0/debian/README.Bugs.m4 @@ -0,0 +1,333 @@ +Reporting Bugs in the GNU Compiler Collection for DIST +======================================================== + +Before reporting a bug, please +------------------------------ + +- Check that the behaviour really is a bug. Have a look into some + ANSI standards document. + +- Check the list of well known bugs: http://gcc.gnu.org/bugs.html#known + +- Try to reproduce the bug with a current GCC development snapshot. You + usually can get a recent development snapshot from the gcc-snapshot +ifelse(DIST,`Debian',`dnl + package in the unstable (or experimental) distribution. + + See: http://packages.debian.org/gcc-snapshot +', DIST, `Ubuntu',`dnl + package in the current development distribution. + + See: http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-snapshot/ +')dnl + +- Try to find out if the bug is a regression (an older GCC version does + not show the bug). + +- Check if the bug is already reported in the bug tracking systems. + +ifelse(DIST,`Debian',`dnl + Debian: http://bugs.debian.org/debian-gcc@lists.debian.org +', DIST, `Ubuntu',`dnl + Ubuntu: https://bugs.launchpad.net/~ubuntu-toolchain/+packagebugs + Debian: http://bugs.debian.org/debian-gcc@lists.debian.org +')dnl + Upstream: http://gcc.gnu.org/bugzilla/ + + +Where to report a bug +--------------------- + +ifelse(DIST,`Debian',`dnl +Please report bugs found in the packaging of GCC to the Debian bug tracking +system. See http://www.debian.org/Bugs/ for instructions (or use the +reportbug script). +', DIST, `Ubuntu',`dnl +Please report bugs found in the packaging of GCC to Launchpad. See below +how issues should be reported. +')dnl + +DIST's current policy is to closely follow the upstream development and +only apply a minimal set of patches (which are summarized in the README.Debian +document). + +ifelse(DIST,`Debian',`dnl +If you think you have found an upstream bug, you did check the section +above ("Before reporting a bug") and are able to provide a complete bug +report (see below "How to report a bug"), then you may help the Debian +GCC package maintainers, if you report the bug upstream and then submit +a bug report to the Debian BTS and tell us the upstream report number. +This way you are able to follow the upstream bug handling as well. If in +doubt, report the bug to the Debian BTS (but read "How to report a bug" +below). +', DIST, `Ubuntu',`dnl +If you think you have found an upstream bug, you did check the section +above ("Before reporting a bug") and are able to provide a complete bug +report (see below "How to report a bug"), then you may help the Ubuntu +GCC package maintainers, if you report the bug upstream and then submit +a bug report to Launchpad and tell us the upstream report number. +This way you are able to follow the upstream bug handling as well. If in +doubt, report the bug to Launchpad (but read "How to report a bug" below). + +Report the issue to https://bugs.launchpad.net/ubuntu/+source/SRCNAME. +')dnl + + +How to report a bug +------------------- + +There are complete instructions in the gcc info manual (found in the +gcc-doc package), section Bugs. + +The manual can be read using `M-x info' in Emacs, or if the GNU info +program is installed on your system by `info --node "(gcc)Bugs"'. Or see +the file BUGS included with the gcc source code. + +Online bug reporting instructions can be found at + + http://gcc.gnu.org/bugs.html + +[Some paragraphs taken from the above URL] + +The main purpose of a bug report is to enable us to fix the bug. The +most important prerequisite for this is that the report must be +complete and self-contained, which we explain in detail below. + +Before you report a bug, please check the list of well-known bugs and, +if possible in any way, try a current development snapshot. + +Summarized bug reporting instructions +------------------------------------- + +What we need + +Please include in your bug report all of the following items, the +first three of which can be obtained from the output of gcc -v: + + * the exact version of GCC; + * the system type; + * the options given when GCC was configured/built; + * the complete command line that triggers the bug; + * the compiler output (error messages, warnings, etc.); and + * the preprocessed file (*.i*) that triggers the bug, generated by + adding -save-temps to the complete compilation command, or, in + the case of a bug report for the GNAT front end, a complete set + of source files (see below). + +What we do not want + + * A source file that #includes header files that are left out + of the bug report (see above) + * That source file and a collection of header files. + * An attached archive (tar, zip, shar, whatever) containing all + (or some :-) of the above. + * A code snippet that won't cause the compiler to produce the + exact output mentioned in the bug report (e.g., a snippet with + just a few lines around the one that apparently triggers the + bug, with some pieces replaced with ellipses or comments for + extra obfuscation :-) + * The location (URL) of the package that failed to build (we won't + download it, anyway, since you've already given us what we need + to duplicate the bug, haven't you? :-) + * An error that occurs only some of the times a certain file is + compiled, such that retrying a sufficient number of times + results in a successful compilation; this is a symptom of a + hardware problem, not of a compiler bug (sorry) + * E-mail messages that complement previous, incomplete bug + reports. Post a new, self-contained, full bug report instead, if + possible as a follow-up to the original bug report + * Assembly files (*.s) produced by the compiler, or any binary files, + such as object files, executables, core files, or precompiled + header files + * Duplicate bug reports, or reports of bugs already fixed in the + development tree, especially those that have already been + reported as fixed last week :-) + * Bugs in the assembler, the linker or the C library. These are + separate projects, with separate mailing lists and different bug + reporting procedures + * Bugs in releases or snapshots of GCC not issued by the GNU + Project. Report them to whoever provided you with the release + * Questions about the correctness or the expected behavior of + certain constructs that are not GCC extensions. Ask them in + forums dedicated to the discussion of the programming language + + +Known Bugs and Non-Bugs +----------------------- + +[Please see /usr/share/doc/gcc/FAQ or http://gcc.gnu.org/faq.html first] + + +C++ exceptions don't work with C libraries +------------------------------------------ + +[Taken from the closed bug report #22769] C++ exceptions don't work +with C libraries, if the C code wasn't designed to be thrown through. +A solution could be to translate all C libraries with -fexceptions. +Mostly trying to throw an exception in a callback function (qsort, +Tcl command callbacks, etc ...). Example: + + #include + #include + + class A {}; + + static + int SortCondition(void const*, void const*) + { + printf("throwing 'sortcondition' exception\n"); + throw A(); + } + + int main(int argc, char *argv[]) + { + int list[2]; + + try { + SortCondition(NULL,NULL); + } catch (A) { + printf("caught test-sortcondition exception\n"); + } + try { + qsort(&list, sizeof(list)/sizeof(list[0]),sizeof(list[0]), + &SortCondition); + } catch (A) { + printf("caught real-sortcondition exception\n"); + } + return 0; +} + +Andrew Macleod responded: + +When compiled with the table driven exception handling, exception can only +be thrown through functions which have been compiled with the table driven EH. +If a function isn't compiled that way, then we do not have the frame +unwinding information required to restore the registers when unwinding. + +I believe the setjmp/longjmp mechanism will throw through things like this, +but its produces much messier code. (-fsjlj-exceptions) + +The C compiler does support exceptions, you just have to turn them on +with -fexceptions. + +Your main options are to: + a) Don't use callbacks, or at least don't throw through them. + b) Get the source and compile the library with -fexceptions (You have to + explicitly turn on exceptions in the C compiler) + c) always use -fsjlj-exceptions (boo, bad choice :-) + + +g++: "undefined reference" to static const array in class +--------------------------------------------------------- + +The following code compiles under GNU C++ 2.7.2 with correct results, +but produces the same linker error with GNU C++ 2.95.2. +Alexandre Oliva responded: + +All of them are correct. A static data member *must* be defined +outside the class body even if it is initialized within the class +body, but no diagnostic is required if the definition is missing. It +turns out that some releases do emit references to the missing symbol, +while others optimize it away. + +#include + +class Test +{ + public: + Test(const char *q); + protected: + static const unsigned char Jam_signature[4] = "JAM"; +}; + +Test::Test(const char *q) +{ + if (memcmp(q, Jam_signature, sizeof(Jam_signature)) != 0) + cerr << "Hello world!\n"; +} + +int main(void) +{ + Test::Test("JAM"); + return 0; +} + +g++: g++ causes passing non const ptr to ptr to a func with const arg + to cause an error (not a bug) +--------------------------------------------------------------------- + +Example: + +#include +void test(const char **b){ + printf ("%s\n",*b); +} +int main(void){ + char *test1="aoeu"; + test(&test1); +} + +make const +g++ const.cc -o const +const.cc: In function `int main()': +const.cc:7: passing `char **' as argument 1 of `test(const char **)' adds cv-quals without intervening `const' +make: *** [const] Error 1 + +Answer from "Martin v. Loewis" : + +> ok... maybe I missed something.. I haven't really kept up with the latest in +> C++ news. But I've never heard anything even remotly close to passing a non +> const var into a const arg being an error before. + +Thanks for your bug report. This is a not a bug in the compiler, but +in your code. The standard, in 4.4/4, puts it that way + +# A conversion can add cv-qualifiers at levels other than the first in +# multi-level pointers, subject to the following rules: +# Two pointer types T1 and T2 are similar if there exists a type T and +# integer n > 0 such that: +# T1 is cv(1,0) pointer to cv(1,1) pointer to ... cv(1,n-1) +# pointer to cv(1,n) T +# and +# T2 is cv(2,0) pointer to cv(2,1) pointer to ... cv(2,n-1) +# pointer to cv(2,n) T +# where each cv(i,j) is const, volatile, const volatile, or +# nothing. The n-tuple of cv-qualifiers after the first in a pointer +# type, e.g., cv(1,1) , cv(1,2) , ... , cv(1,n) in the pointer type +# T1, is called the cv-qualification signature of the pointer type. An +# expression of type T1 can be converted to type T2 if and only if the +# following conditions are satisfied: +# - the pointer types are similar. +# - for every j > 0, if const is in cv(1,j) then const is in cv(2,j) , +# and similarly for volatile. +# - if the cv(1,j) and cv(2,j) are different, then const is in every +# cv(2,k) for 0 < k < j. + +It is the last rule that your code violates. The standard gives then +the following example as a rationale: + +# [Note: if a program could assign a pointer of type T** to a pointer +# of type const T** (that is, if line //1 below was allowed), a +# program could inadvertently modify a const object (as it is done on +# line //2). For example, +# int main() { +# const char c = 'c'; +# char* pc; +# const char** pcc = &pc; //1: not allowed +# *pcc = &c; +# *pc = 'C'; //2: modifies a const object +# } +# - end note] + +If you question this line of reasoning, please discuss it in one of +the public C++ fora first, eg. comp.lang.c++.moderated, or +comp.std.c++. + + +cpp removes blank lines +----------------------- + +With the new cpp, you need to add -traditional to the "cpp -P" args, else +blank lines get removed. + +[EDIT ME: scan Debian bug reports and write some nice summaries ...] --- gcc-7-7.2.0.orig/debian/README.C++ +++ gcc-7-7.2.0/debian/README.C++ @@ -0,0 +1,35 @@ +libstdc++ is an implementation of the Standard C++ Library, including the +Standard Template Library (i.e. as specified by ANSI and ISO). + +Some notes on porting applications from libstdc++-2.90 (or earlier versions) +to libstdc++-v3 can be found in the libstdc++6-4.3-doc package. After the +installation of the package, look at: + + file:///usr/share/doc/gcc-4.3-base/libstdc++/html/17_intro/porting-howto.html + +On Debian GNU/Linux you find additional documentation in the +libstdc++6-4.3-doc package. After installing these packages, +point your browser to + + file:///usr/share/doc/libstdc++6-4.3-doc/libstdc++/html/index.html + +Other documentation can be found: + + http://www.sgi.com/tech/stl/ + +with a good, recent, book on C++. + +A great deal of useful C++ documentation can be found in the C++ FAQ-Lite, +maintained by Marshall Cline . It can be found at the +mirror sites linked from the following URL (this was last updated on +2010/09/11): + + http://www.parashift.com/c++-faq/ + +or use some search engin site to find it, e.g.: + + http://www.google.com/search?q=c%2B%2B+faq+lite + +Be careful not to use outdated mirors. + +Please send updates to this list as bug report for the g++ package. --- gcc-7-7.2.0.orig/debian/README.Debian +++ gcc-7-7.2.0/debian/README.Debian @@ -0,0 +1,45 @@ + The Debian GNU Compiler Collection setup + ======================================== + +Please see the README.Debian in /usr/share/doc/gcc, contained in the +gcc package for a description of the setup of the different compiler +versions. + +For general discussion about the Debian toolchain (GCC, glibc, binutils) +please use the mailing list debian-toolchain@lists.debian.org; for GCC +specific things, please use debian-gcc@lists.debian.org. When in doubt +use the debian-toolchain ML. + + +Maintainers of these packages +----------------------------- + +Matthias Klose +Ludovic Brenta (gnat) +Iain Buclaw (gdc) +Aurelien Jarno (mips*-linux) +Aurelien Jarno (s390X*-linux) + +The following ports lack maintenance in Debian: powerpc, ppc64, +sparc, sparc64 (unmentioned ports are usually handled by the Debian +porters). + +Former and/or inactive maintainers of these packages +---------------------------------------------------- + +Falk Hueffner (alpha-linux) +Ray Dassen +Jeff Bailey (hurd-i386) +Joel Baker (netbsd-i386) +Randolph Chung (ia64-linux) +Philip Blundell (arm-linux) +Ben Collins (sparc-linux) +Dan Jacobowitz (powerpc-linux) +Thiemo Seufer (mips*-linux) +Matt Taggart (hppa-linux) +Gerhard Tonn (s390-linux) +Roman Zippel (m68k-linux) +Arthur Loiret (gdc) + +=============================================================================== + --- gcc-7-7.2.0.orig/debian/README.cross +++ gcc-7-7.2.0/debian/README.cross @@ -0,0 +1,144 @@ +Building cross-compiler Debian packages +--------------------------------------- + +It is possible to build C and C++ cross compilers and support libraries +from gcc-4.0 source package. This document describes how to do so. +Cross-compiler build support is not perfect yet, please send fixes +and improvements to debian-gcc@lists.debian.org and +debian-embedded@lists.debian.org + +Before you start, you should probably check available pre-built +cross-toolchain debs. Available at http://www.emdebian.org + +Old patches could be reached at + http://zigzag.lvk.cs.msu.su/~nikita/debian/ + +If they are no longer there, you may check EmDebian web site at + http://www.emdebian.org/ +or ask debian-embedded@lists.debian.org for newer location. + +Please check http://bugs.debian.org/391445 if you are about building +gcc-4.3 or above. + +Most of them has been merged with gcc debian sources. + +0. What's wrong with toolchain-source approach + +Package toolchain-source contains sources for binutils and gcc, as well as +some support scripts to build cross-compiler packages. They seem to work. + +However, there is one fundamental problem with this approach. +Gcc package is actively maintained and frequently updated. These updates +do contain bug fixes and improvements, especially for non-x86 architectures. +Cross-compilers built using toolchain-source will not get those fixes unless +toolchain-source package is updated after each binutils and gcc update. +The later is not hapenning in real life. For example, toolchain-source +was upgraded from gcc-3.2 to gcc-3.3 half a year later than gcc-3.3 became +Debian default compiler. + +Keeping toolchain-source package up-to-date requires lots of work, and seems +to be a waste of time. It is much better to build cross-compilers directly +from gcc source package. + + +1. What is needed to build a cross-compiler from gcc-4.3 source + +1.1. dpkg-cross package + +Dpkg-cross package contains several tools to manage cross-compile environment. + +It can convert native debian library and lib-dev packages for the target +architecture to binary-all packages that keep libraries and headers under +/usr/$(TARGET)/. + +Also it contains helper tools for cross-compiling debian packages. Some of +these tools are used while building libgcc1 and libstdc++ library packages. +The resulting library packages follow the same convensions as library packages +converted by dpkg-cross. + +Currently, at least version 1.18 of dpkg-cross is needed for cross-gcc +package build. Version 1.32 of dpkg-cross is needed in order to build gcc-4.3. + +1.2. cross-binutils for the target + +You need cross-binutils for your target to build cross-compiler. +Binutils-multiarch package will not work because it does not provide cross- +assemblers. + +If you don't want to use pre-built cross-binutils packages, you may build +your own from binutils debian source package, using patches posted to +bug #231707. Please use the latest of patch versions available there. + +Alternatively, you may use toolchain-source package to build cross-binutils +(but in this case you will probably also want to use toolchain-source +to build cross-compiler itself). However, multilib'ed cross-compilers may +not build or work with these binutils. + +1.3. libc for target + +You also need libc library and development packages for the target +architecture installed. + +To get those, download linux-kernel-headers, libc6, and libc6-dev binary +debs for your target, convert those using dpkg-cross -b, and install +resulting -arch-cross debs. Consult dpkg-cross manual page for more +information. + +Building with/for alternative libc's is not supported yet (but this is in +TODO). + +Note that if you plan to use your cross-toolchain to develop kernel drivers +or similar low-level things, you will probably also need kernel headers +for the exact kernel version that your target hardware uses. + + +2. Building cross-compiler packages + +Get gcc-4.3 source package. + +Unpack it using dpkg-source -x, and cd to the package directory. + +Set GCC_TARGET environment variable to the target architectire name. Note +that currently you should use debian architecture name (i.e 'powerpc' or 'arm'), +not GNU system type (i.e. 'powerpc-linux' or 'arm-linux'). Setting GCC_TARGET +to GNU system type will cause cross-compiler build to fail. + +Instead of setting GCC_TARGET, target architecture name may be put into +debian/target file. If both GCC_TARGET is defined and debian/target file +exists, GCC_TARGET is used. + +Run debian/rules control. This will change debian/control file, +adjusting build-depends. By default, the packages will not depend on the +system -base package. A variable DEB_CROSS_INDEPENDENT has been merged with DEB_CROSS variable. + +You can then build with either + +$ GCC_TARGET=[arch] dpkg-buildpackage -rfakeroot + +3. Using crosshurd + +Jeff Bailey suggests alternate way to setup +environment to build cross-compiler, using 'crosshurd' package. +Crosshurd is like debootstrap but cross-arch, and works on the Hurd, +Linux and FreeBSD. (The name is historical). + +If you setup your environment with crosshurd, you will need to fix symlinks +in lib and usr/lib to be relative instead of absolute. For example: + +lrwxrwxrwx 1 root root 20 2004-05-06 23:02 libcom_err.so -> /lib/libcom_err.so.2 + +Needs to be changed to: + +lrwxrwxrwx 1 root root 20 2004-05-06 23:02 libcom_err.so -> ../../lib/libcom_err.so.2 + +Also, if you choose this method, set the environment variable 'with_sysroot' +to point to the ABSOLUTE PATH where the crosshurd was done. + +Note however that build-depends of cross-gcc and dependencies in generated +libgcc1 and libstdc++ packages assume that you use dpkg-cross to set up +your environment, and may be wrong or incomplete if you use alternate methods. +But probably you don't care. + +-- +Nikita V. Youshchenko - Jun 2004 +Hector Oron Martinez - Oct 2006 --- gcc-7-7.2.0.orig/debian/README.gnat +++ gcc-7-7.2.0/debian/README.gnat @@ -0,0 +1,35 @@ +If you want to develop Ada programs and libraries on Debian, please +read the Debian Policy for Ada: + +http://people.debian.org/~lbrenta/debian-ada-policy.html + +The default Ada compiler is and always will be the package `gnat'. +Debian contains many programs and libraries compiled with it, which +are all ABI-compatible. + +Starting with gnat-4.2, Debian provides both zero-cost and +setjump/longjump versions of the run-time library. The zero-cost +exception handling mechanism is the default as it provides the best +performance. The setjump/longjump exception handling mechanism is new +and only provided as a static library. It is necessary to use this +exception handling mechanism in distributed (annex E) programs. If +you wish to use the new sjlj library: + +1) call gnatmake with --RTS=sjlj +2) call gnatbind with -static + +Do NOT link your programs with libgnat-4.2.so, because it uses the ZCX +mechanism. + + +This package also includes small tools covering specific needs. + +* When linking objects compiled from both Ada and C sources, you need + to use compatible versions of the Ada and C compilers. The + /usr/bin/gnatgcc symbolic link targets a version of the C compiler + compatible with the default Ada compiler, and may differ from the + default C compiler /usr/bin/gcc. + +* When packaging Ada sources for Debian, you may want to read the + /usr/share/ada/debian_packaging.mk Makefile snippet and/or include + it from debian/rules in order to set sensible defaults. --- gcc-7-7.2.0.orig/debian/README.libstdc++-baseline.in +++ gcc-7-7.2.0/debian/README.libstdc++-baseline.in @@ -0,0 +1,2 @@ +The libstdc++ baseline file is a list of symbols exported by the +libstdc++ library. --- gcc-7-7.2.0.orig/debian/README.maintainers +++ gcc-7-7.2.0/debian/README.maintainers @@ -0,0 +1,190 @@ +-*- Outline -*- + +Read this file if you are a Debian Developer or would like to become +one, or if you would like to create your own binary packages of GCC. + +* Overview + +From the GCC sources, Debian currently builds 3 source packages and +almost 100 binary packages, using a single set of build scripts. The +3 source packages are: + +gcc-x.y: C, C++, Fortran, Objective-C and Objective-C++, plus many + common libraries like libssp and libgcc. +gnat-x.y: Ada. + +The way we do this is quite peculiar, so listen up :) + +When we build from the gcc-x.y source package, we produce, among many +others, a gcc-x.y-source binary package that contains the pristine +upstream tarball and some Debian-specific patches. Any user can then +install this package on their Debian system, and will have the full +souces in /usr/src/gcc-x.y/gcc-.tar.bz2, along with the +Makefile snippets that unpack and patch them. + +The intended use for this package is twofold: (a) allow users to build +their own cross-compilers, and (b) build the other packages like +gnat-x.y. + +- gcc-x.y requires only a C compiler to build and produces C, C++, + Fortran, Go and Objective-C compilers and libraries. It also + produces the binary package gcc-x.y-source containing all the + sources and patches in a tarball. + +- gnat-x.y build-depends on gcc-x.y-source and an Ada compiler. It + does not even have an .orig.tar.bz2 package; it is a Debian native + package. + +The benefits of this split are many: + +- bootstrapping a subset of languages is much faster than + bootstrapping all languages and libraries (which can take a full + week on slow architectures like mips or arm) + +- the language maintainers don't have to wait for each other + +- for new ports, the absence of a port of, say, gnat-x.y does not + block the porting of gcc-x.y. + +gcc-x.y-source is also intended for interested users to build +cross-compiler packages. Debian cannot provide all possible +cross-compiler packages (i.e. all possible host, target, language and +library combinations), so instead tries to facilitate building them. + +* The build sequence + +As for all other Debian packages, you build GCC by calling +debian/rules. + +The first thing debian/rules does it to look at the top-most entry in +debian/changelog: this tells it which source package it is building. +For example, if the first entry in debian/changelog reads: + +gnat-6 (6.2.0-1) unstable; urgency=low + + * Upload as gnat-6. + + -- Ludovic Brenta Tue, 26 Jun 2007 00:26:42 +0200 + +then, debian/rules will build only the gnat binary packages. + +The second step is to build debian/control from debian/control.m4 and +a complex set of rules specified in debian/rules.conf. The resulting +control file contains only the binary packages to be built. + +The third step is to select which patches to apply (this is done in +debian/rules.defs), and then to apply the selected patches (see +debian/rules.patch). The result of this step is a generated +debian/patches/series file for use by quilt. + +The fourth step is to unpack the GCC source tarball. This tarball is +either in the build directory (when building gcc-x.y), or in +/usr/src/gcc-x.y/gcc-x.y.z.tar.xz (when building the other source +packages). + +The fifth step is to apply all patches to the unpacked sources with +quilt. + +The sixth step is to create a "build" directory, cd into it, call +../src/configure, and bootstrap the compiler and libraries selected. +This is in debian/rules2. + +The seventh step is to call "make install" in the build directory: +this installs the compiler and libraries into debian/tmp +(i.e. debian/tmp/usr/bin/gcc, etc.) + +The eighth step is to run the GCC test suite. This actually takes at +least as much time as bootstrapping, and you can disable it by setting +WITHOUT_CHECK to "yes" in the environment. + +The ninth step is to build the binary packages, i.e. the .debs. This +is done by a set of language- and architecture-dependent Makefile +snippets in the debian/rules.d/ directory, which move files from the +debian/tmp tree to the debian/ trees. + +* Making your own packages + +In this example, we will build our own gnat-x.y package. + +1) Install gcc-x.y-source, which contains the real sources: + +# aptitude install gcc-x.y-source + +2) Create a build directory: + +$ mkdir gnat-x.y-x.y.z; cd gnat-x.y-x.y.z + +3) Checkout from Subversion: + +$ svn checkout svn://svn.debian.org/gcccvs/branches/sid/gcc-x.y/debian + +4) Edit the debian/changelog file, adding a new entry at the top that + starts with "gnat-x.y". + +5) Generate the debian/control file, adjusted for gnat: + +$ debian/rules control + +8) Build: + +$ dpkg-buildpackage + +* Hints + +You need a powerful machine to build GCC. The larger, the better. +The build scripts take advantage of as many CPU threads as are +available in your box (for example: 2 threads on a dual-core amd64; 4 +threads on a dual-core POWER5; 32 threads on an 8-core UltraSPARC T1, +etc.). + +If you have 2 GB or more of physical RAM, you can achieve maximum +performance by building in a tmpfs, like this: + +1) as root, create the new tmpfs: + +# mount -t tmpfs -o size=1280m none /home/lbrenta/src/debian/ram + +By default, the tmpfs will be limited to half your physical RAM. The +beauty of it is that it only consumes as much physical RAM as +necessary to hold the files in it; deleting files frees up RAM. + +2) As your regular user, create the working directory in the tmpfs + +$ cp --archive ~/src/debian/gcc-x.y-x.y.z ~/src/debian/ram + +3) Build in there. On my dual-core, 2 GHz amd64, it takes 34 minutes + to build gnat, and the tmpfs takes 992 MiB of physical RAM but + exceeds 1 GiB during the build. + +Note that the build process uses a lot of temporary files. Your $TEMP +directory should therefore also be in a ram disk. You can achieve +that either by mounting it as tmpfs, or by setting TEMP to point to +~/src/debian/ram. + +Also note that each thread in your processor(s) will run a compiler in +it and use up RAM. Therefore your physical memory should be: + +Physical_RAM >= 1.2 + 0.4 * Threads (in GiB) + +(this is an estimate; your mileage may vary). If you have less +physical RAM than recommended, reduce the number of threads allocated +to the build process, or do not use a tmpfs to build. + +* Patching GCC + +Debian applies a large number of patches to GCC as part of the build +process. It uses quilt but the necessary debian/patches/series is not +part of the packaging scripts; instead, "debian/rules patch" generates +this file by looking at debian/control (which is itself generated!), +debian/changelog and other files. Then it applies all the patches. +At this point, you can use quilt as usual: + +$ cd ~/src/debian/gcc-x.y +$ export QUILT_PATCHES=$PWD/debian/patches +$ quilt series + +If you add new patches, remember to add them to the version control +system too. + +-- +Ludovic Brenta, 2012-04-02. --- gcc-7-7.2.0.orig/debian/README.snapshot +++ gcc-7-7.2.0/debian/README.snapshot @@ -0,0 +1,36 @@ +Debian gcc-snapshot package +=========================== + +This package contains a recent development SNAPSHOT of all files +contained in the GNU Compiler Collection (GCC). + +DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES! + +This package will NEVER hit the testing distribution. It's used for +tracking gcc bugs submitted to the Debian BTS in recent development +versions of gcc. + +To use this snapshot, you should set the following environment variables: + + LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH + PATH=/usr/lib/gcc-snapshot/bin:$PATH + +You might also like to use a shell script to wrap up this +funcationality, e.g. + +place in /usr/local/bin/gcc-snapshot and chmod +x it + +----------- snip ---------- +#! /bin/sh +LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH +PATH=/usr/lib/gcc-snapshot/bin:$PATH +gcc "$@" +----------- snip ---------- + +Make the same for g++, g77, cpp, ... + +Don't forget the quotes around the $@ or gcc will not parse it's +command line correctly! + +Unset these variables before building Debian packages destined for an +upload to ftp-master.debian.org. --- gcc-7-7.2.0.orig/debian/README.source +++ gcc-7-7.2.0/debian/README.source @@ -0,0 +1,16 @@ +Patches applied to the Debian version of GCC +-------------------------------------------- + +Debian specific patches can be found in the debian/patches directory. +Quilt is used as the patch system. See /usr/share/doc/quilt/README.source +for details about quilt. + +Patches are applied by calling `debian/rules patch'. The `series' +file is constructed on the fly based on the files found in the to +debian/rules.patch "debian_patches" variable, configure scripts are +regenerated in the `patch' target. The gcc source is unpacked under +src/ this needs to be reflected in the patch header. + +The source packages gdc-x.y and gnat-x.y do not contain copies of the +source code but build-depend on the appropriate gcc-x.y-source package +instead. --- gcc-7-7.2.0.orig/debian/README.ssp +++ gcc-7-7.2.0/debian/README.ssp @@ -0,0 +1,28 @@ +Stack smashing protection is a feature of GCC that enables a program to +detect buffer overflows and immediately terminate execution, rather than +continuing execution with corrupt internal data structures. It uses +"canaries" and local variable reordering to reduce the likelihood of +stack corruption through buffer overflows. + +Options that affect stack smashing protection: + +-fstack-protector + Enables protection for functions that are vulnerable to stack + smashing, such as those that call alloca() or use pointers. + +-fstack-protector-all + Enables protection for all functions. + +-Wstack-protector + Warns about functions that will not be protected. Only active when + -fstack-protector has been used. + +Applications built with stack smashing protection should link with the +ssp library by using the option "-lssp" for systems with glibc-2.3.x or +older; glibc-2.4 and newer versions provide this functionality in libc. + +The Debian architectures alpha, hppa, ia64, m68k, mips, mipsel do not +have support for stack smashing protection. + +More documentation can be found at the project's website: +http://researchweb.watson.ibm.com/trl/projects/security/ssp/ --- gcc-7-7.2.0.orig/debian/TODO +++ gcc-7-7.2.0/debian/TODO @@ -0,0 +1,46 @@ +(It is recommended to edit this file with emacs' todoo mode) +Last updated: 2008-05-02 + +* General + +- Clean up the sprawl of debian/rules. I'm sure there are neater + ways to do some of it; perhaps split it up into some more files? + Partly done. + +- Make debian/rules control build the control file without unpacking + the sources or applying patches. Currently, it unpacks the sources, + patches them, creates the control file, and a subsequent + dpkg-buildpackage deletes the sources, re-unpacks them, and + re-patches them. + +- Reorganise debian/rules.defs to decide which packages to build in a + more straightforward and less error-prone fashion: (1) start with + all languages; override the list of languages depending on the name + of the source package (gcc-4.3, gnat-4.3, gdc-4.3). (2) + filter the list of languages depending on the target platform; (3) + depending on the languages to build, decide on which libraries to + build. + +o [Ludovic Brenta] Ada + +- Done: Link the gnat tools with libgnat.so, instead of statically. + +- Done: Build libgnatvsn containing parts of the compiler (version + string, etc.) under GNAT-Modified GPL. Link the gnat tools with it. + +- Done: Build libgnatprj containing parts of the compiler (the project + manager) under pure GPL. Link the gnat tools with it. + +- Done: Build both the zero-cost and setjump/longjump exceptions + versions of libgnat. In particular, gnat-glade (distributed systems) + works best with SJLJ. + +- Done: Re-enable running the test suite. + +- Add support for building cross-compilers. + +- Add support for multilib (not yet supported upstream). + +* Fortran + +- gfortran man page generation --- gcc-7-7.2.0.orig/debian/acats-killer.sh +++ gcc-7-7.2.0/debian/acats-killer.sh @@ -0,0 +1,62 @@ +#! /bin/sh + +# on ia64 systems, the acats hangs in unaligned memory accesses. +# kill these testcases. + +pidfile=acats-killer.pid + +usage() +{ + echo >&2 "usage: `basename $0` [-p ] " + exit 1 +} + +while [ $# -gt 0 ]; do + case $1 in + -p) + pidfile=$2 + shift + shift + ;; + -*) + usage + ;; + *) + break + esac +done + +[ $# -eq 2 ] || usage + +logfile=$1 +stopfile=$2 +interval=30 + +echo $$ > $pidfile + +while true; do + if [ -f "$stopfile" ]; then + echo "`basename $0`: finished." + rm -f $pidfile + exit 0 + fi + sleep $interval + if [ ! -f "$logfile" ]; then + continue + fi + pids=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }') + if [ -n "$pids" ]; then + sleep $interval + pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }') + if [ "$pids" = "$pids2" ]; then + #echo kill: $pids + kill $pids + sleep 1 + pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }') + if [ "$pids" = "$pids2" ]; then + #echo kill -9: $pids + kill -9 $pids + fi + fi + fi +done --- gcc-7-7.2.0.orig/debian/ada/confirm_debian_bugs.py +++ gcc-7-7.2.0/debian/ada/confirm_debian_bugs.py @@ -0,0 +1,980 @@ +#!/usr/bin/python2 + +# Helper when migrating bugs from a gnat version to another. + +from __future__ import print_function +import os.path +import re +import shutil +import subprocess +import tempfile + +os.environ ['LC_ALL'] = 'C' + +# If True, "reassign" -> "found" and "retitle" -> "fixed". +# Once the bug tracking system is informed, please update this boolean. +same_gcc_base_version = True + +# The current version. +new_version = "7" + +for line in subprocess.check_output (("dpkg", "--status", "gnat-" + new_version)).split ("\n"): + if line.startswith ("Version: "): + deb_version = line [len ("Version: "):] + break +# Will cause an error later if deb_version is not defined. + +# Each bug has its own subdirectory in WORKSPACE. +# Every bug subdir is removed if the bug is confirmed, +# and WORKSPACE is removed if empty. +workspace = tempfile.mkdtemp (suffix = "-gnat-" + deb_version + "-bugs") + +def attempt_to_reproduce (bug, make, sources): + tmp_dir = os.path.join (workspace, "bug{}".format (bug)) + os.mkdir (tmp_dir) + + for (name, contents) in sources: + with open (os.path.join (tmp_dir, name), "w") as f: + f.write (contents) + + path = os.path.join (tmp_dir, "stderr.log") + with open (path, "w") as e: + status = subprocess.call (make, stderr=e, cwd=tmp_dir) + with open (path, "r") as e: + stderr = e.read () + return tmp_dir, status, stderr + +def reassign_and_remove_dir (bug, tmp_dir): + if same_gcc_base_version: + print ("found {} {}".format (bug, deb_version)) + else: + print ("reassign {} {} {}".format (bug, "gnat-" + new_version, deb_version)) + shutil.rmtree (tmp_dir) + +def report (bug, message, output): + print ("# {}: {}.".format (bug, message)) + for line in output.split ("\n"): + print ("# " + line) + +def report_and_retitle (bug, message, output): + report (bug, message, output) + if same_gcc_base_version: + print ("fixed {} {}".format (bug, deb_version)) + else: + print ("retitle {} [Fixed in {}] ".format (bug, new_version)) + +def check_compiles_but_should_not (bug, make, sources): + tmp_dir, status, stderr = attempt_to_reproduce (bug, make, sources) + if status == 0: + reassign_and_remove_dir (bug, tmp_dir) + else: + report_and_retitle (bug, "now fails to compile (bug is fixed?)", stderr) + +def check_reports_an_error_but_should_not (bug, make, sources, regex): + tmp_dir, status, stderr = attempt_to_reproduce (bug, make, sources) + if status == 0: + report_and_retitle (bug, "now compiles (bug is fixed?)", stderr) + elif re.search (regex, stderr): + reassign_and_remove_dir (bug, tmp_dir) + else: + report (bug, "still fails to compile, but with a new stderr", stderr) + +def check_reports_error_but_forgets_one (bug, make, sources, regex): + tmp_dir, status, stderr = attempt_to_reproduce (bug, make, sources) + if status == 0: + report (bug, "now compiles (?)", stderr); + elif re.search (regex, stderr): + report_and_retitle (bug, "now reports the error (bug is fixed ?)", stderr) + else: + reassign_and_remove_dir (bug, tmp_dir) + +def check_produces_a_faulty_executable (bug, make, sources, regex, trigger): + tmp_dir, status, stderr = attempt_to_reproduce (bug, make, sources) + if status != 0: + report (bug, "cannot compile the trigger anymore", stderr) + else: + output = subprocess.check_output ((os.path.join (tmp_dir, trigger),), cwd=tmp_dir) + if re.search (regex, output): + reassign_and_remove_dir (bug, tmp_dir) + else: + report_and_retitle (bug, "output of the trigger changed (bug fixed?)", output) + +###################################################################### + +check_reports_an_error_but_should_not ( + bug = 244936, + make = ("gnatmake", "p"), + regex = 'p\.ads:3:25: "foo" is hidden within declaration of instance', + sources = ( + ("foo.ads", """generic +procedure foo; +"""), + ("foo.adb", """procedure foo is +begin + null; +end foo; +"""), ("p.ads", """with foo; +package p is + procedure FOO is new foo; -- OK +end p; +"""))) + +check_compiles_but_should_not ( + bug = 244970, + make = ("gnatmake", "pak5"), + sources = ( + ("pak1.ads", """generic +package pak1 is +end pak1; +"""), + ("pak1-pak2.ads", """generic +package pak1.pak2 is +end pak1.pak2; +"""), + ("pak5.ads", """with pak1.pak2; +generic + with package new_pak2 is new pak1.pak2; -- ERROR: illegal use of pak1 +package pak5 is +end pak5; +"""))) + +check_reports_an_error_but_should_not ( + bug = 246187, + make = ("gnatmake", "test_43"), + regex = "Error detected at system.ads:156:5", + sources = ( + ("test_43.ads", """package Test_43 is + type T1 is private; + +private + + type T2 is record + a: T1; + end record; + type T2_Ptr is access T2; + + type T1 is record + n: T2_Ptr := new T2; + end record; + +end Test_43; +"""),)) + +check_compiles_but_should_not ( + bug = 247013, + make = ("gnatmake", "test_53"), + sources = ( + ("test_53.ads", """generic + type T1 is private; +package Test_53 is + type T2 (x: integer) is new T1; -- ERROR: x not used +end Test_53; +"""),)) + +check_compiles_but_should_not ( + bug = 247017, + make = ("gnatmake", "test_59"), + sources = ( + ("test_59.adb", """procedure Test_59 is + + generic + type T1 (<>) is private; + procedure p1(x: out T1); + + procedure p1 (x: out T1) is + b: boolean := x'constrained; --ERROR: not a discriminated type + begin + null; + end p1; + +begin + null; +end Test_59; +"""),)) + +check_compiles_but_should_not ( + bug = 247018, + make = ("gnatmake", "test_60"), + sources = ( + ("pak1.ads", """package pak1 is + generic + package pak2 is + end pak2; +end pak1; +"""), + ("test_60.ads", """with pak1; +package Test_60 is + package PAK1 is new pak1.pak2; --ERROR: illegal reference to pak1 +end Test_60; +"""))) + +check_compiles_but_should_not ( + bug = 247019, + make = ("gnatmake", "test_61"), + sources = ( + ("test_61.adb", """procedure Test_61 is + procedure p1; + + generic + package pak1 is + procedure p2 renames p1; + end pak1; + + package new_pak1 is new pak1; + procedure p1 renames new_pak1.p2; --ERROR: circular renames +begin + p1; +end Test_61; +"""),)) + +check_produces_a_faulty_executable ( + bug = 247569, + make = ("gnatmake", "test_75"), + trigger = "test_75", + regex = "failed: wrong p1 called", + sources = ( + ("test_75.adb", """with text_io; +procedure Test_75 is + generic + package pak1 is + type T1 is null record; + end pak1; + + generic + with package A is new pak1(<>); + with package B is new pak1(<>); + package pak2 is + procedure p1(x: B.T1); + procedure p1(x: A.T1); + end pak2; + + package body pak2 is + + procedure p1(x: B.T1) is + begin + text_io.put_line("failed: wrong p1 called"); + end p1; + + procedure p1(x: A.T1) is + begin + text_io.put_line("passed"); + end p1; + + x: A.T1; + begin + p1(x); + end pak2; + + package new_pak1 is new pak1; + package new_pak2 is new pak2(new_pak1, new_pak1); -- (1) + +begin + null; +end Test_75; +"""),)) + +check_compiles_but_should_not ( + bug = 247570, + make = ("gnatmake", "test_76"), + sources = ( + ("test_76.adb", """procedure Test_76 is + + generic + procedure p1; + + pragma Convention (Ada, p1); + + procedure p1 is + begin + null; + end p1; + + procedure new_p1 is new p1; + pragma Convention (Ada, new_p1); --ERROR: new_p1 already frozen + +begin + null; +end Test_76; +"""),)) + +check_produces_a_faulty_executable ( + bug = 247571, + make = ("gnatmake", "test_77"), + trigger = "test_77", + regex = "failed: wrong p1 called", + sources = ( + ("pak.ads", """package pak is + procedure p1; + procedure p1(x: integer); + pragma export(ada, p1); +end pak; +"""), + ("pak.adb", """with text_io; use text_io; +package body pak is + procedure p1 is + begin + put_line("passed"); + end; + + procedure p1(x: integer) is + begin + put_line("failed: wrong p1 called"); + end; +end pak; +"""), + ("test_77.adb", """with pak; +procedure Test_77 is + procedure p1; + pragma import(ada, p1); +begin + p1; +end Test_77; +"""))) + +check_compiles_but_should_not ( + bug = 248166, + make = ("gnatmake", "test_82"), + sources = ( + ("test_82.adb", """procedure Test_82 is + package pak1 is + type T1 is tagged null record; + end pak1; + + package body pak1 is + -- type T1 is tagged null record; -- line 7 + + function "=" (x, y : T1'class) return boolean is -- line 9 + begin + return true; + end "="; + + procedure proc (x, y : T1'class) is + b : boolean; + begin + b := x = y; --ERROR: ambiguous "=" + end proc; + + end pak1; + +begin + null; +end Test_82; +"""),)) + +check_compiles_but_should_not ( + bug = 248168, + make = ("gnatmake", "test_84"), + sources = ( + ("test_84.adb", """procedure Test_84 is + package pak1 is + type T1 is abstract tagged null record; + procedure p1(x: in out T1) is abstract; + end pak1; + + type T2 is new pak1.T1 with null record; + + protected type T3 is + end T3; + + protected body T3 is + end T3; + + procedure p1(x: in out T2) is --ERROR: declared after body of T3 + begin + null; + end p1; + +begin + null; +end Test_84; +"""),)) + +check_compiles_but_should_not ( + bug = 248678, + make = ("gnatmake", "test_80"), + sources = ( + ("test_80.ads", """package Test_80 is + generic + type T1(<>) is private; + with function "=" (Left, Right : T1) return Boolean is <>; + package pak1 is + end pak1; + + package pak2 is + type T2 is abstract tagged null record; + package new_pak1 is new pak1 (T2'Class); --ERROR: no matching "=" + end pak2; +end Test_80; +"""),)) + +check_compiles_but_should_not ( + bug = 248680, + make = ("gnatmake", "test_90"), + sources = ( + ("test_90.adb", """procedure Test_90 is + type T1 is tagged null record; + + procedure p1 (x : access T1) is + b: boolean; + y: aliased T1; + begin + B := Y'Access = X; -- ERROR: no matching "=" +-- B := X = Y'Access; -- line 11: error detected + end p1; + +begin + null; +end Test_90; +"""),)) + +check_compiles_but_should_not ( + bug = 248681, + make = ("gnatmake", "test_91"), + sources = ( + ("test_91.adb", """-- RM 8.5.4(5) +-- ...the convention of the renamed subprogram shall not be +-- Intrinsic. +with unchecked_deallocation; +procedure Test_91 is + generic -- when non generic, we get the expected error + package pak1 is + type int_ptr is access integer; + procedure free(x: in out int_ptr); + end pak1; + + package body pak1 is + procedure deallocate is new + unchecked_deallocation(integer, int_ptr); + procedure free(x: in out int_ptr) renames + deallocate; --ERROR: renaming as body can't rename intrinsic + end pak1; +begin + null; +end Test_91; +"""),)) + +check_compiles_but_should_not ( + bug = 248682, + make = ("gnatmake", "main"), + sources = ( + ("main.adb", """-- RM 6.3.1(9) +-- The default calling convention is Intrinsic for ... an attribute +-- that is a subprogram; + +-- RM 8.5.4(5) +-- ...the convention of the renamed subprogram shall not be +-- Intrinsic. +procedure main is + package pak1 is + function f1(x: integer'base) return integer'base; + end pak1; + + package body pak1 is + function f1(x: integer'base) return integer'base renames + integer'succ; --ERROR: renaming as body can't rename intrinsic + end pak1; +begin + null; +end; +"""),)) + +check_reports_an_error_but_should_not ( + bug = 253737, + make = ("gnatmake", "test_4"), + regex = 'test_4.ads:.:01: "pak2" not declared in "pak1"', + sources = ( + ("parent.ads", """generic +package parent is +end parent; +"""), + ("parent-pak2.ads", """generic +package parent.pak2 is +end parent.pak2; +"""), + ("parent-pak2-pak3.ads", """generic +package parent.pak2.pak3 is +end parent.pak2.pak3; +"""), + ("parent-pak2-pak4.ads", """with parent.pak2.pak3; +generic +package parent.pak2.pak4 is + package pak3 is new parent.pak2.pak3; +end parent.pak2.pak4; +"""), + ("pak1.ads", """with parent; +package pak1 is new parent; +"""), + ("pak6.ads", """with parent.pak2; +with pak1; +package pak6 is new pak1.pak2; +"""), + ("test_4.ads", """with parent.pak2.pak4; +with pak6; +package Test_4 is new pak6.pak4; +"""))) + +check_compiles_but_should_not ( + bug = 269948, + make = ("gnatmake", "test_119"), + sources = ( + ("test_119.ads", """-- RM 3.9.3/11 A generic actual subprogram shall not be an abstract +-- subprogram. works OK if unrelated line (A) is commented out. +package Test_119 is + generic + with function "=" (X, Y : integer) return Boolean is <>; -- Removing this allows GCC to detect the problem. + package pak1 is + function "=" (X, Y: float) return Boolean is abstract; + generic + with function Equal (X, Y : float) return Boolean is "="; --ERROR: + package pak2 is + end pak2; + end pak1; + + package new_pak1 is new pak1; + package new_pak2 is new new_pak1.pak2; +end Test_119; +"""),)) + +check_compiles_but_should_not ( + bug = 269951, + make = ("gnatmake", "test_118"), + sources = ( + ("pak1.ads", """generic +package pak1 is +end pak1; +"""), + ("pak1-foo.ads", """generic +package pak1.foo is +end pak1.foo; +"""), + ("test_118.ads", """with pak1.foo; +package Test_118 is + package pak3 is + foo: integer; + end pak3; + use pak3; + + package new_pak1 is new pak1; + use new_pak1; + + x: integer := foo; -- ERROR: foo hidden by use clauses +end Test_118; +"""),)) + +# As long as 24:14 is detected, it inhibits detection of 25:21. +check_reports_error_but_forgets_one ( + bug = 276224, + make = ("gnatmake", "test_121"), + regex = "test_121\.adb:25:21: dynamically tagged expression not allowed", + sources = ( + ("test_121.adb", """-- If the expected type for an expression or name is some specific +-- tagged type, then the expression or name shall not be dynamically +-- tagged unless it is a controlling operand in a call on a +-- dispatching operation. +procedure Test_121 is + package pak1 is + type T1 is tagged null record; + function f1 (x1: T1) return T1; + end pak1; + + package body pak1 is + function f1 (x1: T1) return T1 is + begin + return x1; + end; + end pak1; + use pak1; + + type T2 is record + a1: T1; + end record; + + z0: T1'class := T1'(null record); + z1: T1 := f1(z0); -- ERROR: gnat correctly rejects + z2: T2 := (a1 => f1(z0)); -- ERROR: gnat mistakenly allows +begin + null; +end Test_121; +"""),)) + +check_reports_an_error_but_should_not ( + bug = 276227, + make = ("gnatmake", "test_124"), + regex = 'test_124\.ads:6:35: size for "T_arr_constrained" too small, minimum allowed is 256', + sources = ( + ("test_124.ads", """package Test_124 is + type T is range 1 .. 32; + type T_arr_unconstrained is array (T range <>) of boolean; + type T_arr_constrained is new T_arr_unconstrained (T); + pragma pack (T_arr_unconstrained); + for T_arr_constrained'size use 32; +end Test_124; +"""),)) + +check_reports_an_error_but_should_not ( + bug = 278687, + make = ("gnatmake", "test_127"), + regex = 'test_127\.adb:1.:21: expected type "T2" defined at line .', + sources = ( + ("test_127.ads", """-- The second parameter of T2'Class'Read is of type T2'Class, +-- which should match an object of type T3, which is derived +-- from T2. +package test_127 is + pragma elaborate_body; +end test_127; +"""), + ("test_127.adb", """with ada.streams; +package body test_127 is + type T1 is access all ada.streams.root_stream_type'class; + type T2 is tagged null record; + type T3 is new T2 with null record; + + x: T1; + y: T3; +begin + T2'class'read(x, y); +end test_127; +"""))) + +check_compiles_but_should_not ( + bug = 278831, + make = ("gnatmake", "test_128"), + sources = ( + ("test_128.ads", """package Test_128 is + package inner is + private + type T1; + end inner; + type T1_ptr is access inner.T1; -- line 9 ERROR: gnat mistakenly accepts +end Test_128; +"""), + ("test_128.adb", """package body test_128 is + package body inner is + type T1 is new Integer; + end inner; +end Test_128; +"""))) + +# Note that we also check the absence of the next inhibited message. +check_reports_an_error_but_should_not ( + bug = 279893, + make = ("gnatmake", "test_129"), + regex = """^gcc-[0-9.]+ -c test_129\.ads +test_129\.ads:1.:49: designated type of actual does not match that of formal "T2" +test_129\.ads:1.:49: instantiation abandoned +gnatmake: "test_129\.ads" compilation error$""", + sources = ( + ("pak1.ads", """-- legal instantiation rejected; illegal instantiation accepted +-- adapted from John Woodruff c.l.a. post + +generic + type T1 is private; +package pak1 is + subtype T3 is T1; +end pak1; +"""), + ("pak2.ads", """with pak1; +generic + type T2 is private; +package pak2 is + package the_pak1 is new pak1 (T1 => T2); +end pak2; +"""), + ("pak2-pak3.ads", """generic + type T2 is access the_pak1.T3; +package pak2.pak3 is +end pak2.pak3; +"""), + ("test_129.ads", """with pak1; +with pak2.pak3; +package Test_129 is + + type T4 is null record; + type T5 is null record; + subtype T3 is T5; -- line 9: triggers the bug at line 16 + + type T4_ptr is access T4; + type T5_ptr is access T5; + + package new_pak2 is new pak2 (T2 => T4); + package new_pak3a is new new_pak2.pak3(T2 => T4_ptr); -- line 15: Legal + package new_pak3b is new new_pak2.pak3(T2 => T5_ptr); -- line 16: Illegal +end Test_129; +"""))) + +print ("# Please ignore the gnatlink message.") +check_reports_an_error_but_should_not ( + bug = 280939, + make = ("gnatmake", "test_130"), + regex = "test_130\.adb:\(\.text\+0x5\): undefined reference to \`p2\'", + sources = ( + ("pak1.ads", """-- RM 10.1.5(4) "the pragma shall have an argument that is a name +-- denoting that declaration." +-- RM 8.1(16) "The children of a parent library unit are inside the +-- parent's declarative region." + +package pak1 is + pragma Pure; +end pak1; +"""), + ("pak1-p2.ads", """procedure pak1.p2; +pragma Pure (p2); -- ERROR: need expanded name +pragma Import (ada, p2); -- ERROR: need expanded name +pragma Inline (p2); -- ERROR: need expanded name +"""), + ("test_130.adb", """with Pak1.P2; +procedure Test_130 is +begin + Pak1.P2; +end Test_130; +"""))) + +check_compiles_but_should_not ( + bug = 283833, + make = ("gnatmake", "test_132"), + sources = ( + ("pak1.ads", """-- RM 8.5.4(5) the convention of the renamed subprogram shall not +-- be Intrinsic, if the renaming-as-body completes that declaration +-- after the subprogram it declares is frozen. + +-- RM 13.14(3) the end of the declaration of a library package +-- causes freezing of each entity declared within it. + +-- RM 6.3.1(7) the default calling convention is Intrinsic for +-- any other implicitly declared subprogram unless it is a +-- dispatching operation of a tagged type. + +package pak1 is + type T1 is null record; + procedure p1 (x1: T1); + type T2 is new T1; +end pak1; +"""), + ("pak1.adb", """package body Pak1 is + procedure P1 (X1 : T1) is begin null; end P1; +end Pak1; +"""), + ("test_132.ads", """with pak1; +package Test_132 is + procedure p2 (x2: pak1.T2); +end Test_132; +"""), + ("test_132.adb", """package body Test_132 is + procedure p2 (x2: pak1.T2) renames pak1.p1; --ERROR: can't rename intrinsic +end Test_132; +"""))) + +check_compiles_but_should_not ( + bug = 283835, + make = ("gnatmake", "test_133"), + sources = ( + ("test_133.ads", """package Test_133 is + package pak1 is + type T1 is null record; + end pak1; + + package pak2 is + subtype boolean is standard.boolean; + function "=" (x, y: pak1.T1) return boolean; + end pak2; + + use pak1, pak2; + + x1: pak1.T1; + b1: boolean := x1 /= x1; -- ERROR: ambigous (gnat misses) + -- b2: boolean := x1 = x1; -- ERROR: ambigous +end Test_133; +"""), + ("test_133.adb", """package body test_133 is + package body pak2 is + function "=" (x, y: pak1.T1) return boolean is + begin + return true; + end "="; + end pak2; +end test_133; +"""))) + +check_compiles_but_should_not ( + bug = 416979, + make = ("gnatmake", "pak1"), + sources = ( + ("pak1.ads", """package pak1 is + -- RM 7.3(13), 4.9.1(1) + -- check that discriminants statically match + type T1(x1: integer) is tagged null record; + x2: integer := 2; + x3: constant integer := x2; + type T2 is new T1 (x2) with private; + type T3 is new T1 (x3) with private; +private + type T2 is new T1 (x2) with null record; --ERROR: nonstatic discriminant + type T3 is new T1 (x3) with null record; --ERROR: nonstatic discriminant +end pak1; +"""),)) + +# Once the bug box disappears, check the executable. +# check_produces_a_faulty_executable ( +check_reports_an_error_but_should_not ( + bug = 427108, + make = ("gnatmake", "test1"), + regex = "Program_Error exp_disp.adb:7840 explicit raise", + sources = ( + ("test1.adb", """-- "For the execution of a call on an inherited subprogram, +-- a call on the corresponding primitive subprogram of the +-- parent or progenitor type is performed; the normal conversion +-- of each actual parameter to the subtype of the corresponding +-- formal parameter (see 6.4.1) performs any necessary type +-- conversion as well." + +with Text_IO; use Text_IO; +procedure Test1 is + package Pak1 is + type T1 is tagged null record; + function Eq(X, Y: T1) return Boolean renames "="; + end Pak1; + + package Pak2 is + type T2 is new Pak1.T1 with record + F1: Integer; + end record; + end Pak2; + + Z1: Pak2.T2 := (F1 => 1); + Z2: Pak2.T2 := (F1 => 2); +begin + if Pak2.Eq(Z1, Z2) = Pak1.Eq(Pak1.T1(Z1), Pak1.T1(Z2)) + then Put_Line("PASSED"); + else Put_Line("FAILED"); + end if; +end Test1; +"""),)) + +check_reports_an_error_but_should_not ( + bug = 660698, + make = ("gnatmake", "proc.adb"), + regex = 'proc\.adb:17:28: there is no applicable operator "And" for type "Standard\.Integer"', + sources = ( + ("proc.adb", """procedure Proc is + package P1 is + type T is new Integer; + function "and" (L, R : in Integer) return T; + end P1; + package body P1 is + function "and" (L, R : in Integer) return T is + pragma Unreferenced (L, R); + begin + return 0; + end "and"; + end P1; + use type P1.T; + package P2 is + use P1; + end P2; + G : P1.T := Integer'(1) and Integer'(2); +begin + null; +end Proc; +"""), )) + +check_produces_a_faulty_executable ( + bug = 737225, + make = ("gnatmake", "round_decimal"), + trigger = "round_decimal", + regex = "Bug reproduced.", + sources = ( + ("round_decimal.adb", """with Ada.Text_IO; + +procedure Round_Decimal is + + -- OJBECTIVE: + -- Check that 'Round of a decimal fixed point type does round + -- away from zero if the operand is of a decimal fixed point + -- type with a smaller delta. + + Unexpected_Compiler_Bug : exception; + + type Milli is delta 0.001 digits 9; + type Centi is delta 0.01 digits 9; + + function Rounded (Value : Milli) return Centi; + -- Value, rounded using Centi'Round + + function Rounded (Value : Milli) return Centi is + begin + return Centi'Round (Value); + end Rounded; + +begin + -- Operands used directly: + if not (Milli'Round (0.999) = Milli'(0.999) + and + Centi'Round (0.999) = Centi'(1.0) + and + Centi'Round (Milli'(0.999)) = Centi'(1.0)) + then + raise Unexpected_Compiler_Bug; + end if; + if Rounded (Milli'(0.999)) /= Centi'(1.0) then + Ada.Text_IO.Put_Line ("Bug reproduced."); + end if; +end Round_Decimal; +"""),)) + +# Even if an error is reported, the problem with the atomic variable +# should be checked. +check_reports_an_error_but_should_not ( + bug = 643663, + make = ("gnatmake", "test"), + regex = 'test\.adb:4:25: no value supplied for component "Reserved"', + sources = ( + ("pkg.ads", """package Pkg is + type Byte is mod 2**8; + type Reserved_24 is mod 2**24; + + type Data_Record is + record + Data : Byte; + Reserved : Reserved_24; + end record; + + for Data_Record use + record + Data at 0 range 0 .. 7; + Reserved at 0 range 8 .. 31; + end record; + + for Data_Record'Size use 32; + for Data_Record'Alignment use 4; + + Data_Register : Data_Record; + pragma Atomic (Data_Register); +end Pkg; +"""), ("test.adb", """with Pkg; +procedure Test is +begin + Pkg.Data_Register := ( + Data => 255, + others => <> -- expected error: no value supplied for component "Reserved" + ); +end Test; +"""))) + +check_produces_a_faulty_executable ( + bug = 864969, + make = ("gnatmake", "main"), + trigger = "main", + regex = "ZZund", + sources = ( + ("main.adb", """with Ada.Locales, Ada.Text_IO; +procedure Main is +begin + Ada.Text_IO.Put_Line (String (Ada.Locales.Country) + & String (Ada.Locales.Language)); +end Main; +"""),)) + +try: + os.rmdir (workspace) +except: + print ("Some unconfirmed, not removing directory {}.".format (workspace)) --- gcc-7-7.2.0.orig/debian/ada/debian_packaging.mk +++ gcc-7-7.2.0/debian/ada/debian_packaging.mk @@ -0,0 +1,91 @@ +# Common settings for Ada Debian packaging. +# +# Copyright (C) 2012-2014 Nicolas Boulenguez +# +# 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 . +# + +# dpkg-dev (>= 1.16.1) provides /usr/share/dpkg/default.mk (or the +# more specific buildflags.mk) to set standard variables like +# DEB_HOST_MULTIARCH, CFLAGS, LDFLAGS...) according to the build +# environment (DEB_BUILD_OPTIONS...) and the policy (hardening +# flags...). +# You must include it before this file. +ifeq (,$(findstring /usr/share/dpkg/buildflags.mk,$(MAKEFILE_LIST))) + $(error Please include /usr/share/dpkg/default.mk (or the more specific \ + buildflags.mk) before $(lastword $(MAKEFILE_LIST))) +endif + +# Ada is not in dpkg-dev flag list. We add a sensible default here. + +# Format checking is meaningless for Ada sources. +ADAFLAGS := $(filter-out -Wformat -Werror=format-security, $(CFLAGS)) + +ifdef DPKG_EXPORT_BUILDFLAGS + export ADAFLAGS +endif + +# Avoid dpkg-shlibdeps warning about depending on a library from which +# no symbol is used, see http://wiki.debian.org/ToolChain/DSOLinking. +# Gnatmake users must upgrade to >= 4.6.4-1 to circumvent #680292. +LDFLAGS += -Wl,--as-needed + +# Warn during build time if undefined symbols. +LDFLAGS += -Wl,-z,defs + +ifdef DPKG_EXPORT_BUILDFLAGS + export LDFLAGS +endif + +###################################################################### +# C compiler version + +# GCC binaries must be compatible with GNAT at the binary level, use +# the same version. This setting is mandatory for every upstream C +# compilation ("export CC" is enough for dh_auto_configure with a +# normal ./configure). + +CC := gnatgcc + +###################################################################### +# Options for gprbuild/gnatmake. + +# Let Make delegate parallelism to gnatmake/gprbuild. +.NOTPARALLEL: + +# Use all processors unless parallel=n is set in DEB_BUILD_OPTIONS. +# http://www.debian.org/doc/debian-policy/ch-source.html#s-debianrules-options +BUILDER_JOBS := $(filter parallel=%,$(DEB_BUILD_OPTIONS)) +ifneq (,$(BUILDER_JOBS)) + BUILDER_JOBS := $(subst parallel=,,$(BUILDER_JOBS)) +else + BUILDER_JOBS := $(shell getconf _NPROCESSORS_ONLN) +endif +BUILDER_OPTIONS += -j$(BUILDER_JOBS) + +BUILDER_OPTIONS += -R +# Avoid lintian warning about setting an explicit library runpath. +# http://wiki.debian.org/RpathIssue + +BUILDER_OPTIONS += -v +# Make exact command lines available for automatic log checkers. + +BUILDER_OPTIONS += -eS +# Tell gnatmake to echo commands to stdout instead of stderr, avoiding +# buildds thinking it is inactive and killing it. +# -eS is the default on gprbuild. + +# You may be interested in +# -s recompile if compilation switches have changed +# (bad default because of interactions between -amxs and standard library) +# -we handle warnings as errors +# -vP2 verbose when parsing projects. --- gcc-7-7.2.0.orig/debian/bin-wrapper.in +++ gcc-7-7.2.0/debian/bin-wrapper.in @@ -0,0 +1,11 @@ +#! /bin/sh + +# some build tools are linked with a new libstdc++ and fail to run +# when building libstdc++. + +if [ -n "$LD_LIBRARY_PATH" ]; then + ma=$(dpkg-architecture -qDEB_BUILD_MULTIARCH) + export LD_LIBRARY_PATH="/lib/$ma:/usr/lib/$ma:/lib:/usr/lib:$LD_LIBRARY_PATH" +fi + +exec /usr/bin/$(basename $0) "$@" --- gcc-7-7.2.0.orig/debian/changelog +++ gcc-7-7.2.0/debian/changelog @@ -0,0 +1,2853 @@ +gcc-7 (7.2.0-8ubuntu2) artful; urgency=medium + + * Dont't apply the PR 67165 backport on armhf. + + -- Matthias Klose Wed, 04 Oct 2017 05:55:11 +0200 + +gcc-7 (7.2.0-8ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sun, 01 Oct 2017 23:51:25 +0200 + +gcc-7 (7.2.0-8) unstable; urgency=medium + + * Update to SVN 20171001 (r253234) from the gcc-7-branch. + - Fix PR tree-optimization/82244, PR tree-optimization/82276, + PR tree-optimization/82264, PR tree-optimization/82285, PR c/82340, + PR tree-optimization/82291, PR c++/82159. + * Fix "privacy breeches" for NEWS.html file. + * Build lsan and tsan packages on arm64, ppc64 and ppc64el. + * Fix PR other/67165, libbacktrace support for compressed debug sections, + taken from the trunk. + + -- Matthias Klose Sun, 01 Oct 2017 23:35:36 +0200 + +gcc-7 (7.2.0-7ubuntu4) artful; urgency=medium + + * Fix lsan/tsan symbols files for arm64 and ppc64el. + + -- Matthias Klose Thu, 28 Sep 2017 02:56:39 +0200 + +gcc-7 (7.2.0-7ubuntu3) artful; urgency=medium + + * Update to SVN 20170927 (r253234) from the gcc-7-branch. + - Fix PR tree-optimization/82244, PR tree-optimization/82276, + PR tree-optimization/82264, PR tree-optimization/82285, + PR tree-optimization/82291. + * Fix "privacy breeches" for NEWS.html file. + * Build lsan and tsan packages on arm64, ppc64 and ppc64el. + + -- Matthias Klose Wed, 27 Sep 2017 18:16:17 +0200 + +gcc-7 (7.2.0-7ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 23 Sep 2017 11:42:38 +0200 + +gcc-7 (7.2.0-7) unstable; urgency=medium + + * Update to SVN 20170923 (r253114) from the gcc-7-branch. + - Fix PR libstdc++/79162, PR libstdc++/79162, PR libstdc++/82262, + PR libstdc++/82254, PR target/81996 (PPC), PR target/71951 (AArch64), + PR sanitizer/81929. + * Fix PR go/82284, taken from the trunk. Closes: #876353. + + -- Matthias Klose Sat, 23 Sep 2017 11:31:21 +0200 + +gcc-7 (7.2.0-6ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 20 Sep 2017 11:21:01 +0200 + +gcc-7 (7.2.0-6) unstable; urgency=medium + + * Update to SVN 20170920 (r253002) from the gcc-7-branch. + - Fix PR target/82112 (PPC), PR c++/81355, PR tree-optimization/82084, + PR tree-optimization/82108, PR target/81325 (PPC), PR c++/81236, + PR c++/80767, PR c++/82030, PR c++/80935, PR c++/81671, PR c++/81525, + PR c++/81314, PR libgfortran/78387. + * Fix fortran cross compiler build with debhelper 10.9. Closes: #876246. + * Strip the compiler binaries again. Closes: #872672. + * Bump binutils dependency to 2.29.1 for sid/buster. + + -- Matthias Klose Wed, 20 Sep 2017 11:13:31 +0200 + +gcc-7 (7.2.0-5ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 15 Sep 2017 12:19:48 +0200 + +gcc-7 (7.2.0-5) unstable; urgency=medium + + * Update to SVN 20170915 (r252791) from the gcc-7-branch. + - Fix PR c/81687, PR c/45784, PR c++/81852, PR target/82181 (xtensa), + PR target/80695 (PPC), PR target/81988 (SPARC), PR middle-end/81768, + PR sanitizer/81923, PR target/81621, PR driver/81650, + PR middle-end/81052, PR tree-optimization/81987, PR bootstrap/81926, + PR libstdc++/79162, PR libstdc++/81468, PR libstdc++/81835, + PR libstdc++/70483, PR libstdc++/70483, PR target/81833 (PPC), + PR other/39851, PR ipa/81128, PR inline-asm/82001, PR c++/81355, + PR tree-opt/81696. + * Enable libgo tests and rebuilds with make -C (Svante Signell). + Closes: #873929. + * Fix PR sanitizer/77631, support separate debug info in libbacktrace. + * Update the Linaro support to the 7-2017.09 snapshot. + + -- Matthias Klose Fri, 15 Sep 2017 12:15:21 +0200 + +gcc-7 (7.2.0-4ubuntu2) artful; urgency=medium + + * Update to SVN 20170912 (r251998) from the gcc-7-branch. + - Fix PR c/81687, PR c/45784, PR c++/81852, PR target/82181 (xtensa), + PR target/80695 (PPC), PR target/81988 (SPARC), PR middle-end/81768, + PR sanitizer/81923, PR target/81621, PR driver/81650, + PR middle-end/81052, PR tree-optimization/81987, PR bootstrap/81926. + + -- Matthias Klose Tue, 12 Sep 2017 11:38:01 +0200 + +gcc-7 (7.2.0-5) unstable; urgency=medium + + * Update to SVN 20170915 (r252791) from the gcc-7-branch. + - Fix PR c/81687, PR c/45784, PR c++/81852, PR target/82181 (xtensa), + PR target/80695 (PPC), PR target/81988 (SPARC), PR middle-end/81768, + PR sanitizer/81923, PR target/81621, PR driver/81650, + PR middle-end/81052, PR tree-optimization/81987, PR bootstrap/81926, + PR libstdc++/79162, PR libstdc++/81468, PR libstdc++/81835, + PR libstdc++/70483, PR libstdc++/70483, PR target/81833 (PPC), + PR other/39851, PR ipa/81128, PR inline-asm/82001, PR c++/81355, + PR tree-opt/81696. + * Enable libgo tests and rebuilds with make -C (Svante Signell). + Closes: #873929. + * Fix PR sanitizer/77631, support separate debug info in libbacktrace. + * Update the Linaro support to the 7-2017.09 snapshot. + + -- Matthias Klose Fri, 15 Sep 2017 12:15:21 +0200 + +gcc-7 (7.2.0-4ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 06 Sep 2017 11:07:43 +0200 + +gcc-7 (7.2.0-4) unstable; urgency=medium + + * Update to SVN 20170906 (r251753) from the gcc-7-branch. + - Fix PR c++/82039, PR libstdc++/81912, PR libstdc++/81891, + PR libstdc++/81599, PR libstdc++/81338, PR tree-optimization/81503, + PR ada/79542, PR ada/62235, PR fortran/81770. + * Fix PR target/81833 (PPC), taken from the trunk. Closes: #871565. + + -- Matthias Klose Wed, 06 Sep 2017 10:38:05 +0200 + +gcc-7 (7.2.0-3ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 02 Sep 2017 14:02:06 +0200 + +gcc-7 (7.2.0-3) unstable; urgency=high + + * Update to SVN 20170901 (r251583) from the gcc-7-branch. + - Fix PR target/81504 (PPC), PR c++/82040. + * Apply proposed patch for PR target/81803 (James Cowgill), conditionally + for mips* targets. Closes: #871514. + * Bump standards version. + + -- Matthias Klose Sat, 02 Sep 2017 13:55:18 +0200 + +gcc-7 (7.2.0-2ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 30 Aug 2017 12:23:25 +0200 + +gcc-7 (7.2.0-2) unstable; urgency=medium + + * Update to SVN 20170830 (r251446) from the gcc-7-branch. + - Fix PR target/72804 (PPC), PR target/80210 (PPC), PR target/81910 (AVR), + PR target/79883 (AVR), PR fortran/81296, PR fortran/80164, + PR target/81593 (PPC), PR target/81170 (PPC), PR target/81295 (PPC), + PR tree-optimization/81977, PR debug/81993 (closes: #873609), + PR middle-end/81088, PR middle-end/81065, PR sanitizer/80932, + PR middle-end/81884, PR tree-optimization/81181, + PR tree-optimization/81723, PR target/81921 (x86), PR c++/81607. + * Update the Linaro support to the 7-2017.08 snapshot. + * Restore configuring with --with-mode=thumb on armhf. Closes: #873584. + * Default to PIE on powerpc again, now that PR target/81170 and + PR target/81295 are fixed. Closes: #856224. + + -- Matthias Klose Wed, 30 Aug 2017 11:47:42 +0200 + +gcc-7 (7.2.0-1ubuntu2) artful; urgency=medium + + * Update to SVN 20170824 (r251336) from the gcc-7-branch. + - Fix PR target/72804 (PPC), PR target/80210 (PPC), PR target/81910 (AVR), + PR target/79883 (AVR), PR fortran/81296, PR fortran/80164. + * Update the Linaro support to the 7-2017.08 snapshot. + + -- Matthias Klose Thu, 24 Aug 2017 17:33:34 +0200 + +gcc-7 (7.2.0-1ubuntu1) artful; urgency=medium + + * Update to SVN 20170818 (r251184) from the gcc-7-branch. + + -- Matthias Klose Fri, 18 Aug 2017 18:54:43 +0200 + +gcc-7 (7.2.0-1) unstable; urgency=medium + + * GCC 7.2.0 release. + * Update libgcc1 symbols file for s390x. + * Apply proposed patch for PR driver/81829. Closes: #853537. + + -- Matthias Klose Fri, 18 Aug 2017 18:34:45 +0200 + +gcc-7 (7.1.0-13ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 08 Aug 2017 11:43:39 -0400 + +gcc-7 (7.1.0-13) unstable; urgency=medium + + * GCC 7.2 release candidate 2. + * Don't build the gc enabled libobjc for cross compilers. Closes: #870895. + * Configure cross-build-native builds with --program-prefix (Adrian + Glaubitz). Closes: #871034. + * Update build dependencies for powerpcspe. Closes: #868186. + * Fix PR tree-optimization/81723, taken from the trunk. Closes: #853345. + + -- Matthias Klose Tue, 08 Aug 2017 11:12:56 -0400 + +gcc-7 (7.1.0-12ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 03 Aug 2017 09:57:19 -0400 + +gcc-7 (7.1.0-12) unstable; urgency=medium + + * GCC 7.2 release candidate 1. + * Update to SVN 20170803 (r250853) from the gcc-7-branch. + + -- Matthias Klose Thu, 03 Aug 2017 09:20:48 -0400 + +gcc-7 (7.1.0-11ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 31 Jul 2017 23:34:35 +0200 + +gcc-7 (7.1.0-11) unstable; urgency=medium + + * Update to SVN 20170731 (r250749) from the gcc-7-branch. + + [ Matthias Klose ] + * Update sanitizer symbols for ppc64 and sparc64. + + [ Nicolas Boulenguez ] + * Only build gnatvsn as a native library. + + -- Matthias Klose Mon, 24 Jul 2017 13:41:34 +0200 + +gcc-7 (7.1.0-10ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 24 Jul 2017 10:55:47 +0200 + +gcc-7 (7.1.0-10) unstable; urgency=medium + + * Update to SVN 20170722 (r250453) from the gcc-7-branch. + + [ Nicolas Boulenguez ] + * libgnatvsn: embed xutil rident for version 2017 of asis package. + + [ Matthias Klose ] + * Fix gnat cross build on m68k (Adrian Glaubitz). Closes: #862927. + * Enable gnat cross build on m68k. Closes: #868365. + * Update the Linaro support to the 7-2017.07 snapshot. + * Stop ignoring symbol mismatches for runtime libraries. + + [ Aurelien Jarno ] + * libgo-s390x-default-isa.diff: do not build libgo with -march=z196, + use the default ISA instead. + + -- Matthias Klose Sat, 22 Jul 2017 15:06:36 +0200 + +gcc-7 (7.1.0-9ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 05 Jul 2017 19:28:21 +0200 + +gcc-7 (7.1.0-9) unstable; urgency=medium + + * Update to SVN 20170705 (r250006) from the gcc-7-branch. + + [ Matthias Klose ] + * gcc-linaro-revert-r49596.diff: fix build for the linaro branch. + * Don't configure powerpc with --enable-default-pie, fails to build. + See #856224, PR target/81295. + + [ Nicolas Boulenguez ] + * ada-gcc-name.diff: unpatch gnatchop. Addresses: #856274. + * Link libgnat with libatomic on armel. Closes: #861734. + * libgnat-dev: use multiarch paths in project and to install .ali files. + * Build Ada on armel, kfreebsd-*, hurd-i386; #86173[457] are closed. + + -- Matthias Klose Wed, 05 Jul 2017 19:21:55 +0200 + +gcc-7 (7.1.0-8ubuntu2) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 29 Jun 2017 17:42:16 +0200 + +gcc-7 (7.1.0-8) unstable; urgency=medium + + * Update to SVN 20170629 (r249793) from the gcc-7-branch. + + [ Matthias Klose ] + * Move the liblto_plugin from the cpp to the gcc package. + * libstdc++6: Add more Breaks to smoothen upgrades from jessie to stretch. + Addresses: #863845, #863745. + * Don't provide libobjc_gc symlinks for the libobjc multilib packages. + * Configure with --enable-default-pie on ppc64 (Adrian Glaubitz) and + powerpc (Mathieu Malaterre). Addresses: #856224. + + [ Nicolas Boulenguez ] + * Update ada/confirm_debian_bugs.py for gcc-7. + * Drop ada-driver-check.diff, the problem is unreproducible. + * Stop symlinking gcc-7-7 -> gcc-7. See #856274 and #814977. + * gnatmake: compile once even with SOURCE_DATE_EPOCH. Closes: #866029. + + -- Matthias Klose Thu, 29 Jun 2017 17:36:03 +0200 + +gcc-7 (7.1.0-7ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 20 Jun 2017 14:19:39 +0200 + +gcc-7 (7.1.0-7) unstable; urgency=medium + + * Update to SVN 20170618 (r249347) from the gcc-7-branch. + + [ Matthias Klose ] + * Update to SVN 20170524 (r248432) from the gcc-7-branch. + * Don't build libada with -O3 (ftbfs on ppc64el). + * Update sanitizer symbol files (Helmut Grohne). Closes: #864835. + + [ Aurelien Jarno ] + * Remove proposed patch for PR65618, the issue has been fixed upstream + another way. + + [ Nicolas Boulenguez ] + * Ada: link system.ads to system-freebsd.ads on hurd and *freebsd + system-freebsd-x86.ads does not exist anymore. Closes: #861735, #861737. + * Ada: prevent parallel gnatmake invokations for gnattools. Closes: #857831. + * Drop generated and obsolete debian/source.lintian-overrides. + * Drop debian/relink, never executed and redundant with ada patches. + * Ada: Drop dpkg-buildflags usage in patches. Closes: #863289. + * ada: Drop references to obsolete termio-h.diff. Closes: #845159. + * ada-749574.diff: replace work-around with fix and forward it. + * ada-kfreebsd.diff: reduce a lot thanks to Ada2012 syntax. + * ada-link-lib.diff: remove dubious parts. + + -- Matthias Klose Sun, 18 Jun 2017 15:31:39 +0200 + +gcc-7 (7.1.0-6ubuntu2) artful; urgency=medium + + * Update to SVN 20170524 (r248432) from the gcc-7-branch. + * Don't build libada with -O3 (ftbfs on ppc64el). + * Restore building gnattools sequentially. Reopens #857831. + + -- Matthias Klose Wed, 24 May 2017 15:18:49 -0700 + +gcc-7 (7.1.0-6ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 22 May 2017 16:38:40 -0700 + +gcc-7 (7.1.0-6) experimental; urgency=medium + + * Update to SVN 20170522 (r248347) from the gcc-7-branch. + - Fix PR libstdc++/80796, PR libstdc++/80478, PR libstdc++/80761, + PR target/80799 (x86), PR ada/80784, PR fortran/78659, PR fortran/80752, + PR libgfortran/80727. + + [ Matthias Klose ] + * Re-add unwind support on kfreebsd-amd64 (James Clarke). + * Work around #814977 (gnat calling gcc-7-7) by providing a gcc-7-7 + symlink. + * Fix gnat build dependencies on x32. + * Build gnat on mips64 and powerpcspe. + * Update the Linaro support to the 7-2017.05 snapshot. + * Fix libmpx dependency generation for cross builds. + * Build again gnat cross compilers on 32bit archs targeting 64bit targets. + + [ Nicolas Boulenguez ] + * Remove ada-gnattools-noparallel patch, apparently fixed. Closes: #857831. + * Reduce diff with upstream in ada-gnattools-cross patch. + * debian/rules2: Simplify build flags transmission. + * Append build flags from dpkg during Ada target builds. + + -- Matthias Klose Mon, 22 May 2017 12:43:09 -0700 + +gcc-7 (7.1.0-5ubuntu2) artful; urgency=medium + + * Update to SVN 20170519 (r248295) from the gcc-7-branch. + - Fix PR libstdc++/80796, PR libstdc++/80478, PR libstdc++/80761, + PR target/80799 (x86), PR ada/80784, PR fortran/78659, PR fortran/80752, + PR libgfortran/80727. + * Starting with 17.10, enable PIE on armhf, arm64 and i386. + * Build from the Linaro gcc-7 branch on armhf and arm64. + * Re-add unwind support on kfreebsd-amd64 (James Clarke). + * Work around #814977 (gnat calling gcc-7-7) by providing a gcc-7-7 + symlink. + * Fix gnat build dependencies on x32. + * Build gnat on mips64 and powerpcspe. + * Update the Linaro support to the 7-2017.05 snapshot. + + -- Matthias Klose Fri, 19 May 2017 12:07:42 -0700 + +gcc-7 (7.1.0-5ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sun, 14 May 2017 09:15:57 -0700 + +gcc-7 (7.1.0-5) experimental; urgency=medium + + * Update to SVN 20170514 (r248033) from the gcc-7-branch. + * Disable offload compilers for snapshot builds. + * Build libgo when not building common libs. + * Fix building libgfortran and libgphobos when building without common libs. + * Build gnat on x32. + + -- Matthias Klose Sun, 14 May 2017 08:50:34 -0700 + +gcc-7 (7.1.0-4ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 05 May 2017 11:57:06 +0200 + +gcc-7 (7.1.0-4) experimental; urgency=medium + + * Update to SVN 20170505 (r247630) from the gcc-7-branch. + * Add sh3 support to gcc-multiarch patch. Closes: #861760. + * Remove libquadmath/gdtoa license from debian/copyright (files removed). + * Fix gdc build on sh4 (sh5 support was removed upstream). + * Disable gnat on KFreeBSD (see #861737) and the Hurd (see #861735) for now. + * Disable running the testsuite on KFreeBSD and the Hurd, hanging on + the buildds. + + -- Matthias Klose Fri, 05 May 2017 11:27:27 +0200 + +gcc-7 (7.1.0-3ubuntu1) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 04 May 2017 00:02:42 +0200 + +gcc-7 (7.1.0-3) experimental; urgency=medium + + * Update to SVN 20170503 (r247549) from the gcc-7-branch. + * Fix gdc build on sparc. + * Update the gdc-cross-install-location patch for GCC 7. + * Bump libgphobos soname. + * dpkg-buildflags stopped fiddling around with spec files; remove + the code removing and warning about dpkg's specs. + * Don't build the native gnat on armel. See issue #861734. + + -- Matthias Klose Wed, 03 May 2017 16:51:15 +0200 + +gcc-7 (7.1.0-2) experimental; urgency=medium + + * Update the disable-gdc-tests patch for GCC 7.1. + + -- Matthias Klose Tue, 02 May 2017 18:35:14 +0200 + +gcc-7 (7.1.0-1ubuntu2) artful; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 02 May 2017 18:13:00 +0200 + +gcc-7 (7.1.0-1) experimental; urgency=medium + + * GCC 7.1.0 release. + * Update NEWS.html and NEWS.gcc. + * Update gdc to the gdc-7 branch 20170502. + * Add multiarch bits for non-glibc architectures (musl, uclibc) (Helmut + Grohne). Closes: #861588. + * Fix dependency on gcc-base package for rtlibs stage build (Helmut Grohne). + Closes: #859938. + + -- Matthias Klose Tue, 02 May 2017 18:07:07 +0200 + +gcc-7 (7-20170407-0ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170407. + + -- Matthias Klose Fri, 07 Apr 2017 13:40:05 +0200 + +gcc-7 (7-20170322-0ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170322. + + -- Matthias Klose Wed, 22 Mar 2017 09:08:47 +0100 + +gcc-7 (7-20170316-1ubuntu3) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170316. + + -- Matthias Klose Thu, 16 Mar 2017 22:18:58 +0100 + +gcc-7 (7-20170316-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170316. + * Install the gcov-dump utility. + * Allow to use lld with -fuse-ld=ld.lld. + * Build gnattools sequentially (fails with parallel build). See #857831. + * Add profile to the autogen build dependency. + * Re-add the generated Makefile.in changes to the gdc-libphobos-build patch. + + -- Matthias Klose Thu, 16 Mar 2017 12:34:18 +0100 + +gcc-7 (7-20170314-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170314. + + [ Matthias Klose ] + * Bump binutils version requirement to 2.28. + * Fix libcc1.so symlink for cross compilers. Addresses: #856875. + * Fix base package name for rtlibs stage build (Helmut Grohne). + Closes: #857074. + * Update the cross-install-location patch (Helmut Grohne). Closes: #855565. + * Fix symlinks to man pages in the hppa64 package. Addresses: #857583. + * Don't ship the gnatgcc manpage symlink when building GFDL packages. + Addresses: #857384. + * Allow bootstrapping with libc headers installed in multiarch location. + (Helmut Grohne). Closes: #857535 + * gccbrig: Depend on hsail-tools. + + [ Nicolas Boulenguez ] + * Create the libgnatsvn packages again. Closes: #857606. + * Replace libgnat-BV.overrides with a fixed command. + * Install gnatvsn.gpr project into /u/s/gpr instead of + /u/s/ada/adainclude. Debian is migrating to GPRbuild's upstream layout. + * Avoid hardcoding the version in the ada-gcc-name patch. + * Reorganize Ada patches. See #857606 for details. + + -- Matthias Klose Tue, 14 Mar 2017 10:42:24 +0100 + +gcc-7 (7-20170303-0ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170303. + + -- Matthias Klose Fri, 03 Mar 2017 10:27:49 +0100 + +gcc-7 (7-20170302-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170302. + + [ Matthias Klose ] + * Update gdc to trunk 20170227. + * Update libcc1 symbols file. + * Bump binutils version requirement. + * Allow to disable brig in DEB_BUILD_OPTIONS. Closes: #856452. + * Build the nvptx offload compilers. + * Add the newlib copyright, used for the gcc-7-offload-nvptx package. + * Install the libcp1plugin. + * Fix the installation directory of the ada-sjlj includes and libraries. + + [ Nicolas Boulenguez ] + * Use SOURCE_DATE_EPOCH for reproducible ALI timestamps. Closes: #856042. + * Remove obsolete references to libgnatprj, but keep existing + references to libgnatvsn as it will be restored. Closes: #844367. + * Drop obsolete and unapplied ada-default-project-path.diff. + + -- Matthias Klose Thu, 02 Mar 2017 10:12:34 +0100 + +gcc-7 (7-20170226-1ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170121. + + -- Matthias Klose Sun, 26 Feb 2017 17:21:13 +0100 + +gcc-7 (7-20170226-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170226. + + -- Matthias Klose Sun, 26 Feb 2017 17:00:48 +0100 + +gcc-7 (7-20170221-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170221. + * Update gdc to trunk 20170221. + + [ Matthias Klose ] + * Fix some hppa64 related build issues. Addresses: #853023. + * Allow setting offload targets by OFFLOAD_TARGET_DEFAULT. + * Again, disable go on m68k. Closes: #853906. + * Configure with --enable-default-pie on sparc and sparc64 (James Clark). + Addresses: #854090. + * Configure with --enable-default-pie on kfreebsd-* (Steven Chamberlain). + * Build gccbrig and the libhsail-rt library for i386. + * Configure staged builds with --disable-libmpx and --disable-libhsail-rt. + * Fix target architecture for sparc non-multilib builds (Adrian Glaubitz). + Addresses: #855197. + * Bump binutils version requirement. + + [ Aurelien Jarno ] + * Disable lxc1/sxc1 instruction on mips and mipsel. + * Disable madd4 instructions on mipsel, mips64el and mipsn32el. + + -- Matthias Klose Tue, 21 Feb 2017 14:54:12 +0100 + +gcc-7 (7-20170129-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170129. + * Fix removing the RUNPATH from the asan, tsan, ubsan, cilkrts, gfortran + and gphobos runtime libraries. + * Let the gnatgcc symlinks point to the versioned names. Addresses: #839209. + * Build the BRIG frontend on amd64. + * Install new intrinsics headers. Closes: #852551. + * libgo version bumped to 11. + * Package gccbrig and the libhsail-rt library. + + -- Matthias Klose Sun, 29 Jan 2017 13:51:35 +0100 + +gcc-7 (7-20170121-1ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170121. + + -- Matthias Klose Sat, 21 Jan 2017 21:03:01 +0100 + +gcc-7 (7-20170121-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170121. + * Configure --with-gcc-major-version-only, drop the gcc-base-version, + gccgo-version and gdc-base-version patches. + * Adjust the g++-multiarch-incdir patch for reverted upstream patch, + causing bootstrap regression (PR 78880). Closes: #852104. + + -- Matthias Klose Sat, 21 Jan 2017 20:34:04 +0100 + +gcc-7 (7-20170118-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170118. + * Always configure sparc builds --with-cpu-32=ultrasparc (James Clark). + * Enable gccgo on m68k (John Paul Adrian Glaubitz). Addresses: #850749. + * Install the unprefixed man pages for gcc-ar, -nm and ranlib. + Closes: #851698. + + -- Matthias Klose Wed, 18 Jan 2017 22:41:11 +0100 + +gcc-7 (7-20170105-1ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170105. + + -- Matthias Klose Thu, 05 Jan 2017 14:41:15 +0100 + +gcc-7 (7-20170105-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20170105. + * Update zlib to 1.2.10. + * Always configure sparc builds --with-cpu-32=ultrasparc (James Clark). + + -- Matthias Klose Thu, 05 Jan 2017 14:19:02 +0100 + +gcc-7 (7-20161229-1ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161229. + + -- Matthias Klose Thu, 29 Dec 2016 07:57:28 +0100 + +gcc-7 (7-20161229-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161229. + * Update gdc to trunk 20161229. + * Build the cilk runtime on armel, armhf, sparc and sparc64. + * Use --push-state/--pop-state for gold as well when linking libtsan. + * In GCC ICE dumps, prefix each line with the PID of the driver. + * Apply proposed patch for PR target/78748. + * Apply proposed patch for PR libstdc++/64735. + * Don't mark libphobos multilib packages as M-A: same. + * Configure libphobos builds with --with-target-system-zlib. + * Ignore dpkg's pie specs when pie is not enabled. Addresses: #848129. + + -- Matthias Klose Thu, 29 Dec 2016 07:38:54 +0100 + +gcc-7 (7-20161217-0ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161217. + + -- Matthias Klose Sat, 17 Dec 2016 14:09:52 +0100 + +gcc-7 (7-20161212-0ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161212. + * Apply proposed patch for PR target/78748. + + -- Matthias Klose Mon, 12 Dec 2016 17:08:48 +0100 + +gcc-7 (7-20161208-0ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161208. + - Revert r243346, breaking bootstrap on AArch64. + * Build the cilk runtime on armel, armhf, sparc and sparc64. + * Use --push-state/--pop-state for gold as well when linking libtsan. + * In GCC ICE dumps, prefix each line with the PID of the driver. + + -- Matthias Klose Thu, 08 Dec 2016 12:08:40 +0100 + +gcc-7 (7-20161203-0ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161203. + + -- Matthias Klose Sat, 03 Dec 2016 12:00:35 +0100 + +gcc-7 (7-20161201-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161201. + + * Install missing vecintrin.h header on s390x. + * Install missing avx512 intrinsics headers on x86*. Closes: #846075. + + -- Matthias Klose Thu, 01 Dec 2016 14:38:26 +0100 + +gcc-7 (7-20161125-1ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161125. + + [ Matthias Klose ] + + [ Svante Signell ] + * GNU/Hurd port for gccgo. + + -- Matthias Klose Fri, 25 Nov 2016 13:30:48 +0100 + +gcc-7 (7-20161125-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161125. + + [ Matthias Klose ] + * Update libgphobos symbol files. + * libphobos: Fix ARM32 multilib detection for system zlib. + * Update libgphobos symbols files for ARM32 targets. + * Build the GC enabled libobjc using the system libgc when available + * Mark libgphobos symbols changing with the file location (sic!) as optional. + * Add pkg-config to the build dependencies. + * Drop the work around for PR libstdc++/65913. + * gdc: Link with the shared libgphobos runtime by default. + * Fix PR middle-end/78501, proposed patch. + * Fix dependency generation for libgphobos multilib builds. + * Drop the ada-revert-pr63225 patch, only needed for libgnatvsn. + * Always apply the ada patches. + + [ YunQiang Su ] + * Update gnat patches for GCC 7, stop building libgnatvsn and libgnatprj. + Addresses: #844367. + + -- Matthias Klose Fri, 25 Nov 2016 12:41:07 +0100 + +gcc-7 (7-20161123-0ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161117. + * Disable x32 multilib builds (broken in libgo). + * Disable go on powerpc and s390x (broken in libgo). + + -- Matthias Klose Tue, 22 Nov 2016 16:51:14 +0100 + +gcc-7 (7-20161117-0ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161117. + + -- Matthias Klose Thu, 17 Nov 2016 14:18:21 +0100 + +gcc-7 (7-20161116-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161116. + * Build shared phobos runtime libraries (not yet enabled by default). + * Add symbols for libobjc_gc library. + + -- Matthias Klose Wed, 16 Nov 2016 19:16:39 +0100 + +gcc-7 (7-20161115-1ubuntu1) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161115. + + -- Matthias Klose Tue, 15 Nov 2016 15:23:57 +0100 + +gcc-7 (7-20161115-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161115. + * More symbol files updates. + * Update gdc to the trunk 20161113. + * Update conflicts with GCC 6 packages. Closes: #844296. + + -- Matthias Klose Tue, 15 Nov 2016 13:02:02 +0100 + +gcc-7 (7-20161112-1ubuntu2) zesty; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161112. + + -- Matthias Klose Sat, 12 Nov 2016 13:21:36 +0100 + +gcc-7 (7-20161112-1) experimental; urgency=medium + + * GCC 7 snapshot build, taken from the trunk 20161112. + * Remove gij/gcj packages, removed upstream. + * Don't build gdc and gnat for now. + + -- Matthias Klose Sat, 12 Nov 2016 11:17:17 +0100 + +gcc-6 (6.2.0-13ubuntu1) zesty; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 09 Nov 2016 21:04:13 +0100 + +gcc-6 (6.2.0-13) unstable; urgency=medium + + * Update to SVN 20161109 (r241998, 6.2.1) from the gcc-6-branch. + - Fix PR c/71115, PR target/78229 (closes: #843379), + PR tree-optimization/77768, PR c++/78039 (closes: #841316), + PR libgcc/78064, PR driver/78206. + * Fix using the gcc-6-source package (Stephen Kitt). Closes: #843476. + * Fix PR target/77822 (AArch64), taken from the trunk. Closes: #839249. + * Fix PR target/77822 (s390x), proposed patch. + * Update libiberty to the trunk 20161108. Addresses security issues: + CVE-2016-6131, CVE-2016-4493, CVE-2016-4492, CVE-2016-4490, + CVE-2016-4489, CVE-2016-4488, CVE-2016-4487, CVE-2016-2226. + + -- Matthias Klose Wed, 09 Nov 2016 20:42:53 +0100 + +gcc-6 (6.2.0-11ubuntu1) zesty; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 03 Nov 2016 15:27:16 +0100 + +gcc-6 (6.2.0-11) unstable; urgency=medium + + * Update to SVN 20161103 (r241817, 6.2.1) from the gcc-6-branch. + - Fix PR debug/77773, PR middle-end/72747, PR tree-optimization/78047, + PR tree-optimization/77879, PR tree-optimization/77839, + PR tree-optimization/77745, PR tree-optimization/77648, + PR target/78166 (PA), PR rtl-optimization/78038, PR middle-end/78128, + PR middle-end/71002, PR fortran/69544, PR fortran/78178, + PR fortran/71902, PR fortran/67219, PR fortran/71891, PR lto/78129, + PR libgfortran/78123. + * Fix symlinks for gcj manual pages. Closes: #842407. + * Fix ICE in tree_to_shwi, Linaro issue #2575. + + -- Matthias Klose Thu, 03 Nov 2016 14:10:24 +0100 + +gcc-6 (6.2.0-10ubuntu1) zesty; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 27 Oct 2016 22:12:20 +0200 + +gcc-6 (6.2.0-10) unstable; urgency=medium + + * Update to SVN 20161027 (r241619, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/77288, PR libstdc++/77727, PR libstdc++/78052, + PR tree-optimization/77550, PR tree-optimization/77916, + PR fortran/71895, PR fortran/77763, PR fortran/61420, PR fortran/78013, + PR fortran/78021, PR fortran/72832, PR fortran/78092, PR fortran/78108, + PR target/78057 (x86), PR target/78037 (x86). + * Include go-relocation-test-gcc620-sparc64.obj.uue to fix libgo's + debug/elf TestDWARFRelocations test case (James Clark). + * Reapply fix for PR c++/71912, apply proposed fix for PR c++/78039. + Closes: #841292. + * Don't install alternatives for go and gofmt. The preferred way to do that + is to install the golang-any package. + * For Debian builds, don't enable bind now by default when linking with pie + by default. + + -- Matthias Klose Thu, 27 Oct 2016 15:27:07 +0200 + +gcc-6 (6.2.0-9) unstable; urgency=medium + + * Regenerate the control file. + + -- Matthias Klose Thu, 20 Oct 2016 10:46:44 +0200 + +gcc-6 (6.2.0-8ubuntu1) zesty; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 19 Oct 2016 18:47:57 +0200 + +gcc-6 (6.2.0-8) unstable; urgency=medium + + * Update to SVN 20161019 (r241346, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/77990, PR target/77991 (x86). + * Install arm_fp16.h header on arm* architectures for Linaro builds. + * Backport upstream revisions from trunk (James Clark). Closes: #840574. + - r240457 (add getrandom for MIPS/SPARC) + - r241051 (fix getrandom on sparc64 and clone on sparc*) + - r241072 (make rawClone no_split_stack) + - r241084 (don't use pt_regs; unnecessary, and seemingly not defined by + the included headers on arm64) + - r241171 (sparc64 relocations, e1fc2925 in go master, now also in + gofrontend/gccgo) + * Revert fix for PR c++/71912, causing PR c++/78039. Addresses: #841292. + + -- Matthias Klose Wed, 19 Oct 2016 08:57:23 +0200 + +gcc-6 (6.2.0-7ubuntu11) zesty; urgency=medium + + * Build using the Linaro branch on armhf and arm64. + + -- Matthias Klose Tue, 18 Oct 2016 09:09:47 +0200 + +gcc-6 (6.2.0-7) unstable; urgency=medium + + * Update to SVN 20161018 (r241301, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/77987, PR libstdc++/77322, PR libstdc++/72820, + PR libstdc++/77994, PR tree-optimization/77937, PR c++/71912, + PR tree-optimization/77937, PR tree-optimization/77943, + PR bootstrap/77995, PR fortran/77978, PR fortran/77915, PR fortran/77942. + + [ Matthias Klose ] + * Backport Mips go closure support, taken from libffi. Closes: #839132. + * Configure with --enable-default-pie and pass -z now when pie is enabled; + on amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el s390x. + Closes: #835148. + * Update the Linaro support to the 6-2016.10 snapshot. + + [ Aurelien Jarno ] + * Enable logwatch on mips64el. + + -- Matthias Klose Tue, 18 Oct 2016 13:53:00 +0200 + +gcc-6 (6.2.0-6) unstable; urgency=medium + + * Update to SVN 20161010 (r240906, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/68323, PR libstdc++/77794, PR libstdc++/77795, + PR libstdc++/77801, PR libgcc/77519, PR target/77756 (x86), + PR target/77670 (PPC), PR rtl-optimization/71709, PR c++/77804, + PR fortran/41922, PR fortran/60774, PR fortran/61318, PR fortran/68566, + PR fortran/69514, PR fortran/69867, PR fortran/69962, PR fortran/70006, + PR fortran/71067, PR fortran/71730, PR fortran/71799, PR fortran/71859, + PR fortran/71862, PR fortran/77260, PR fortran/77351, PR fortran/77372, + PR fortran/77380, PR fortran/77391, PR fortran/77420, PR fortran/77429, + PR fortran/77460, PR fortran/77506, PR fortran/77507, PR fortran/77612, + PR fortran/77694, PR libgfortran/77707, PR libstdc++/70101, + PR libstdc++/77864, PR libstdc++/70564, PR target/77874 (x86), + PR target/77759 (sparc), PR fortran/77406, PR fortran/58991, + PR fortran/58992. + * Really fix gij installation on hppa. Closes: #838111. + * Install alternatives for go and gofmt. Closes: #840190. + + -- Matthias Klose Mon, 10 Oct 2016 05:20:07 +0200 + +gcc-6 (6.2.0-5ubuntu12) yakkety; urgency=medium + + * Update to SVN 20161005 (r240765, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/68323, PR libstdc++/77794, PR libstdc++/77795, + PR libstdc++/77801, PR libgcc/77519, PR target/77756 (x86), + PR target/77670 (PPC), PR rtl-optimization/71709, PR c++/77804, + PR fortran/41922, PR fortran/60774, PR fortran/61318, PR fortran/68566, + PR fortran/69514, PR fortran/69867, PR fortran/69962, PR fortran/70006, + PR fortran/71067, PR fortran/71730, PR fortran/71799, PR fortran/71859, + PR fortran/71862, PR fortran/77260, PR fortran/77351, PR fortran/77372, + PR fortran/77380, PR fortran/77391, PR fortran/77420, PR fortran/77429, + PR fortran/77460, PR fortran/77506, PR fortran/77507, PR fortran/77612, + PR fortran/77694, PR libgfortran/77707. + * Really fix gij installation on hppa. Closes: #838111. + * Strip again the compiler binaries. + + -- Matthias Klose Wed, 05 Oct 2016 09:01:56 +0200 + +gcc-6 (6.2.0-5ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 28 Sep 2016 15:58:48 +0200 + +gcc-6 (6.2.0-5) unstable; urgency=medium + + * Update to SVN 20160927 (r240553, 6.2.1) from the gcc-6-branch. + - Fix PR sanitizer/77396, PR libstdc++/77645, PR libstdc++/77645, + PR target/77326 (AVR), PR target/77349 (PPC), PR middle-end/77594, + PR sanitizer/68260, PR fortran/77516, PR target/69255 (x86), + PR c++/77553, PR c++/77539, PR fortran/77500, PR c/77450, + PR middle-end/77436, PR tree-optimization/77514, PR middle-end/77544, + PR tree-optimization/77514, PR middle-end/77605, PR middle-end/77679, + PR tree-optimization/77621, PR target/77621 (x86), PR c++/71979. + * Fix gij installation on hppa. Closes: #838111. + * Fix PR rtl-optimization/71709, taken from the trunk. LP: #1628207. + * Apply workaround for PR libstdc++/77686. Addresses: #838438. + + -- Matthias Klose Wed, 28 Sep 2016 15:53:28 +0200 + +gcc-6 (6.2.0-4) unstable; urgency=medium + + * Update to SVN 20160914 (r240133, 6.2.1) from the gcc-6-branch. + - Fix PR rtl-optimization/77452, PR c++/77427. + * gcj: Depend on the ecj1 standalone binary. + * Configure native builds using --with-program-prefix. + * Fix ICE in gdc symbol mangling (Iain Buclaw). LP: #1620681. + * Backport from libffi trunk (Stefan Bühler): + - Always check for PaX MPROTECT on linux, make EMUTRAMP experimental. + - dlmmap_locked always needs locking as it always modifies execsize. + + -- Matthias Klose Thu, 15 Sep 2016 19:22:35 +0200 + +gcc-6 (6.2.0-3ubuntu15) yakkety; urgency=medium + + * Update to SVN 20160914 (r240133, 6.2.1) from the gcc-6-branch. + - PR c++/77427. + * Fix updating gcj-6-jdk. LP: #1623337. + + -- Matthias Klose Wed, 14 Sep 2016 13:33:20 +0200 + +gcc-6 (6.2.0-3ubuntu14) yakkety; urgency=medium + + * Update to SVN 20160910 (r240069, 6.2.1) from the gcc-6-branch. + - Fix PR rtl-optimization/77452. + * gcj: Depend on the ecj1 standalone binary. + * Configure native builds using --with-program-prefix. + * Fix ICE in gdc symbol mangling (Iain Buclaw). LP: #1620681. + * Restore the AArch64 vulcan support for non Linaro builds. + + -- Matthias Klose Sun, 11 Sep 2016 12:50:59 +0200 + +gcc-6 (6.2.0-3ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sun, 04 Sep 2016 13:28:31 +0200 + +gcc-6 (6.2.0-3) unstable; urgency=medium + + * Update to SVN 20160901 (r239944, 6.2.1) from the gcc-6-branch. + - Fix PR fortran/71014, PR libstdc++/77395, PR tree-optimization/72866, + PR debug/77363, PR middle-end/77377, PR middle-end/77259, + PR target/71910 (cygwin), PR target/77281 (ARM), + PR tree-optimization/71077, PR tree-optimization/68542, PR fortran/77352, + PR fortran/77374, PR fortran/71014, PR fortran/69281. + * Fix setting the stage1 C++ compiler. + * gdc: Always link with -ldl when linking with -lgphobos. + Closes: #835255, #835757. + * Fix building D code with external C++ references. + + -- Matthias Klose Sun, 04 Sep 2016 12:38:47 +0200 + +gcc-6 (6.2.0-2ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 31 Aug 2016 12:38:54 +0200 + +gcc-6 (6.2.0-2) unstable; urgency=medium + + * Update to SVN 20160830 (r239868, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/77334, PR tree-optimization/76783, + PR tree-optimization/72851, PR target/72867 (x86), PR middle-end/71700, + PR target/77403 (x86), PR target/77270 (x86), PR target/77270 (x86), + PR lto/70955, PR target/72863 (PPC), PR tree-optimization/76490, + PR fortran/77358. + * Call default_file_start from s390_asm_file_start, taken from the trunk. + * Update multiarch patches for mips* r6 (YunQiang Su). + * Fix install location of D header files for cross builds (YunQiang Su). + Closes: #835847. + * Fix PR c++/77379, taken from the trunk. + * Update the Linaro support to the 6-2016.08 snapshot. + + -- Matthias Klose Wed, 31 Aug 2016 12:28:38 +0200 + +gcc-6 (6.2.0-1ubuntu12) yakkety; urgency=medium + + * Update to SVN 20160824 (r239726, 6.2.1) from the gcc-6-branch. + - Fix PR libstdc++/77334, PR tree-optimization/76783, + PR tree-optimization/72851, PR target/72867 (x86), PR middle-end/71700, + * Call default_file_start from s390_asm_file_start, taken from the trunk. + + -- Matthias Klose Wed, 24 Aug 2016 08:12:10 +0200 + +gcc-6 (6.2.0-1ubuntu11) yakkety; urgency=medium + + * GCC 6.2 release. + + -- Matthias Klose Mon, 22 Aug 2016 15:23:46 +0200 + +gcc-6 (6.2.0-1) unstable; urgency=medium + + * GCC 6.2 release. + * Update gdc to the gdc-6 branch 20160822. + + -- Matthias Klose Mon, 22 Aug 2016 14:15:21 +0200 + +gcc-6 (6.1.1-12ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 15 Aug 2016 17:56:19 +0200 + +gcc-6 (6.1.1-12) unstable; urgency=medium + + * GCC 6.2 release candidate 1. + * Update to SVN 20160815 (r239482, 6.1.1) from the gcc-6-branch. + Fix PR target/71869 (PPC), PR target/72805 (x86), PR target/70677 (AVR), + PR c++/72415, PR sanitizer/71042, PR libstdc++/71964, PR libstdc++/70940, + PR c/67410, PR c/72816, PR driver/72765, PR debug/71906, + PR tree-optimization/73434, PR tree-optimization/72824, PR target/76342, + PR target/72843, PR c/71512, PR tree-optimization/71083, PR target/72819, + PR target/72853, PR tree-optimization/72824, PR ipa/71981, PR ipa/68273, + PR tree-optimization/71881, PR target/72802, PR target/72802, + PR rtl-optimization/71976, PR c++/71972, PR c++/72868, PR c++/73456, + PR c++/72800, PR c++/68724, PR debug/71906, PR fortran/71936, + PR fortran/72698, PR fortran/70524, PR fortran/71795, PR libgfortran/71123, + PR libgfortran/73142. + + [ Matthias Klose ] + * Fix running the libjava testsuite. + * Revert fix for PR target/55947, causing PR libstdc++/72813. LP: #1610220. + * Update the Linaro support to the 6-2016.07 snapshot. + + [ Aurelien Jarno ] + * Replace proposed fix for PR ipa/68273 by the corresponding patch taken + from trunk. + + -- Matthias Klose Mon, 15 Aug 2016 17:51:10 +0200 + +gcc-6 (6.1.1-11ubuntu12) yakkety; urgency=medium + + * Update to SVN 20160805 (r239167, 6.1.1) from the gcc-6-branch. + Fix PR target/71869 (PPC), PR target/72805 (x86), PR target/70677 (AVR), + PR c++/72415. + + * Fix running the libjava testsuite. + * Revert fix for PR target/55947, causing PR libstdc++/72813. LP: #1610220. + + -- Matthias Klose Fri, 05 Aug 2016 15:09:39 +0200 + +gcc-6 (6.1.1-11ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 03 Aug 2016 21:55:46 +0200 + +gcc-6 (6.1.1-11) unstable; urgency=medium + + * Update to SVN 20160802 (r238981, 6.1.1) from the gcc-6-branch. + - Fix PR target/72767 (AVR), PR target/71151 (AVR), PR c/7652, + PR target/71216 (PPC), PR target/72103 (PPC), PR c++/72457, PR c++/71576, + PR c++/71833, PR fortran/71883. + + [ Nicolas Boulenguez ] + * debian/ada/confirm_debian_bugs.py: Update for GCC 6. Closes: #832799. + + [ Matthias Klose ] + * Backport AArch64 Vulcan cost models (Dann Frazier). LP: #1603587. + + -- Matthias Klose Wed, 03 Aug 2016 21:53:37 +0200 + +gcc-6 (6.1.1-10ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sun, 24 Jul 2016 20:28:46 +0200 + +gcc-6 (6.1.1-10) unstable; urgency=medium + + * Update to SVN 20160724 (r238695, 6.1.1) from the gcc-6-branch. + - Fix PR libstdc++/71856, PR libstdc++/71320, PR c++/71214, + PR sanitizer/71953, PR fortran/71688, PR rtl-optimization/71916, + PR debug/71855, PR middle-end/71874, PR target/71493 (PPC), + PR rtl-optimization/71634, PR target/71733 (PPC), PR ipa/71624, + PR target/71805 (PPC), PR target/70098 (PPC), PR target/71763 (PPC), + PR middle-end/71758, PR tree-optimization/71823, PR middle-end/71606, + PR tree-optimization/71518, PR target/71806 (PPC), PR target/71720 (PPC), + PR middle-end/64516, PR tree-optimization/71264, PR middle-end/71423, + PR tree-optimization/71521, PR tree-optimization/71452, PR target/50739, + PR tree-optimization/71522, PR c++/55922, PR c++/63151, PR c++/70709, + PR c++/70778, PR c++/71738, PR c++/71350, PR c++/71748, PR c++/52746, + PR c++/69223, PR c++/71630, PR c++/71913, PR c++/71728, PR c++/71941, + PR c++/70822, PR c++/70106, PR c++/67565, PR c++/67579, PR c++/71843, + PR c++/70781, PR c++/71896, PR c++/71092, PR c++/71117, PR c++/71495, + PR c++/71511, PR c++/71513, PR c++/71604, PR c++/54430, PR c++/71711, + PR c++/71814, PR c++/71718, PR c++/70824, PR c++/71909, PR c++/71835, + PR c++/71828, PR c++/71822, PR c++/71871, PR c++/70869, PR c++/71054, + PR fortran/71807, PR fortran/70842, PR fortran/71764, PR fortran/71623, + PR fortran/71783. + + [ Matthias Klose ] + * Build-depend on gnat-6 instead of gnat-5 on development distros. + + [ Aurelien Jarno ] + * Replace libjava-mips64el-proposed.diff by the corresponding patch + taken from trunk. + + -- Matthias Klose Sun, 24 Jul 2016 19:42:10 +0200 + +gcc-6 (6.1.1-9ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 05 Jul 2016 15:15:56 +0200 + +gcc-6 (6.1.1-9) unstable; urgency=medium + + * Update to SVN 20160705 (r237999, 6.1.1) from the gcc-6-branch. + - Fix PR fortran/71717, PR libstdc++/71313, PR c/71685, PR c++/71739, + PR target/71670 (PPC), PR middle-end/71626, PR target/71559 (x86), + PR target/71656 (PPC), PR target/71698 (PPC), PR driver/71651, + PR fortran/71687, PR fortran/71704, PR fortran/71705. + * Mark cross compilers as M-A: foreign. Addresses: #827136. + * On sparc64, configure with --with-cpu-32=ultrasparc, drop the + sparc-force-cpu patch. Closes: #809509. + + -- Matthias Klose Tue, 05 Jul 2016 11:19:50 +0200 + +gcc-6 (6.1.1-8ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 30 Jun 2016 15:41:06 +0200 + +gcc-6 (6.1.1-8) unstable; urgency=medium + + * Update to SVN 20160630 (r237878, 6.1.1) from the gcc-6-branch. + - Fix PR tree-optimization/71647, PR target/30417 (AVR), + PR target/71103 (AVR), PR tree-optimization/71588, PR middle-end/71581, + PR c++/71528, PR fortran/70673, PR middle-end/71693. + + [ Aurelien Jarno ] + * Apply proposed patch from Matthew Fortune to fix libjava on mips64el. + + [ Matthias Klose ] + * Add AArch64 Vulcan cpu support (Dann Frazier). LP: #1594452. + * gfortran: Suggest libcoarrays-dev. Closes: #827995. + * cpp: Breaks libmagics++-dev (<< 2.28.0-4). Closes: #825278. + * Optimize for mips32r2 for o32 (YunQiang Su). Closes: #827801. + + -- Matthias Klose Thu, 30 Jun 2016 14:12:55 +0200 + +gcc-6 (6.1.1-7ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 20 Jun 2016 20:27:58 +0200 + +gcc-6 (6.1.1-7) unstable; urgency=medium + + * Update to SVN 20160620 (r237590, 6.1.1) from the gcc-6-branch. + - Fix PR middle-end/71373, PR c/71381, PR libstdc++/71545, PR c/68657, + PR sanitizer/71498, PR middle-end/71529, PR target/71103 (AVR), + PR target/71554 (x86), PR middle-end/71494, PR c++/71448, + PR tree-optimization/71405, PR tree-optimization/71505, + PR target/71379 (s390), PR target/71186 (PPC), PR target/70915 (PPC), + PR c++/70572, PR c++/71516, PR c/71381. + * Fix libgnatprj build to avoid undefined symbols (YunQiang Su). + Closes: #826503. + * Add build support for tilegx (Helmut Grohne). Closes: #827578. + * Drop support for loongson 2f (YunQiang Su). Closes: #827554. + + -- Matthias Klose Mon, 20 Jun 2016 13:41:44 +0200 + +gcc-6 (6.1.1-6ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 09 Jun 2016 19:27:27 +0200 + +gcc-6 (6.1.1-6) unstable; urgency=medium + + * Update to SVN 20160609 (r237267, 6.1.1) from the gcc-6-branch. + - Fix PR target/71389 (x86), PR tree-optimization/71259, + PR target/70830 (ARM), PR target/67310 (x86), PR c++/71442, + PR c++/70847, PR c++/71330, PR c++/71393, PR fortran/69659. + * gdc: Fix linking the runtime library. Addresses: #826645. + * Fix building libgnatprj on powerpc, and on PIE enabled builds (YunQiang Su). + Closes: #826365. + + -- Matthias Klose Thu, 09 Jun 2016 18:19:42 +0200 + +gcc-6 (6.1.1-5ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 03 Jun 2016 19:46:59 +0200 + +gcc-6 (6.1.1-5) unstable; urgency=medium + + * Update to SVN 20160603 (r237075, 6.1.1) from the gcc-6-branch. + - Fix PR libstdc++/70762, PR libstdc++/69703, PR libstdc++/69703, + PR libstdc++/71038, PR libstdc++/71036, PR libstdc++/71037, + PR libstdc++/71005, PR libstdc++/71004, PR libstdc++/70609, PR c/71171, + PR middle-end/71279, PR c++/71147, PR c++/71257, + PR tree-optimization/70884, PR c++/71210, PR tree-optimization/71031, + PR c++/69872, PR c++/71257, PR c++/70344, PR c++/71184, PR fortran/66461, + PR fortran/71204, PR libffi/65567, PR c++/71349, PR target/71201, + PR middle-end/71371, PR debug/71057, PR target/71056 (ARM32), + PR tree-optimization/69068, PR middle-end/71002, PR bootstrap/71071, + PR c++/71372, PR c++/70972, PR c++/71166, PR c++/71227, PR c++/60095, + PR c++/69515, PR c++/69009, PR c++/71173, PR c++/70522, PR c++/70584, + PR c++/70735, PR c++/71306, PR c++/71349, PR c++/71105, PR c++/71147, + PR ada/71358, PR ada/71317, PR fortran/71156, PR middle-end/71387. + * Fix cross building libgnatprj on i386 targeting 64bit archs (YunQiang Su). + Closes: #823126. + * Detect hard float for non-linux or non-glibc arm-*-*eabihf builds (Helmut + Grohne). Closes: #823894. + * Update embedded timestamp setting patch, backported from the trunk. + * gccgo: Combine combine gccgo's ld() and ldShared() methods + in cmd/go (Michael Hudson-Doyle). LP: #1586872. + + -- Matthias Klose Fri, 03 Jun 2016 18:58:40 +0200 + +gcc-6 (6.1.1-4ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 19 May 2016 17:24:36 +0200 + +gcc-6 (6.1.1-4) unstable; urgency=medium + + * Update to SVN 20160519 (r236478, 6.1.1) from the gcc-6-branch. + - Fix PR sanitizer/71160, PR c++/70498, PR target/71161 (x86), + PR fortran/70856, PR c++/71100, PR target/71145 (alpha), PR c++/70466, + PR target/70860 (nvptx), PR target/70809 (AArch64), PR hsa/70857, + PR driver/68463, PR target/70947 (PPC), PR ipa/70760, PR middle-end/70931, + PR middle-end/70941, PR tree-optimization/71006, PR target/70830 (ARM), + PR fortran/69603, PR fortran/71047, PR fortran/56226, PR ipa/70646. + * libgnat{prj,svn}-dev: Don't recommend gnat when building cross compiler + packages. + + -- Matthias Klose Thu, 19 May 2016 18:40:49 +0200 + +gcc-6 (6.1.1-3ubuntu11) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 12 May 2016 02:33:19 +0200 + +gcc-6 (6.1.1-3) unstable; urgency=medium + + * Update to SVN 20160511 (r236071, 6.1.1) from the gcc-6-branch. + - Fix PR libstdc++/71049, PR middle-end/70877, PR tree-optimization/70876, + PR target/70963, PR tree-optimization/70916, PR debug/70935. + * Enable gdc for sh4. + + -- Matthias Klose Wed, 11 May 2016 22:35:33 +0200 + +gcc-6 (6.1.1-2ubuntu12) yakkety; urgency=medium + + * Fix package replacements with gccgo-6 packages. LP: #1578247, #1578250. + + -- Matthias Klose Tue, 10 May 2016 14:31:52 +0200 + +gcc-6 (6.1.1-2) unstable; urgency=medium + + * Update to SVN 20160510 (r236071, 6.1.1) from the gcc-6-branch. + - Fix PR tree-optimization/70956, PR sanitizer/70875, PR sanitizer/70342, + PR ada/70969, PR ada/70900. + + [ Matthias Klose ] + * Call dh_makeshlibs with the --noscripts option when building a + cross compiler. + * Fix building cross gnat libs when not building the common libs. + * Fix building cross mips* multilibs when not building the common libs. + * Re-enable gnat build on some architectures for snapshot builds. + * Don't build gnat cross compilers on 32bit archs targeting 64bit targets. + Addresses: #823126. + * Avoid empty architecture lists in build dependencies. Closes: #823280. + * Tighten debhelper build dependency for cross build dependencies. + * Allow build dependencies for musl configurations (Helmut Grohne). + Closes: #823769. + * Fix dependency resolution for libraries not built anymore from + this source package. + + [ Samuel Thibault ] + * patches/ada-hurd.diff: Fix Get_Page_Size type. + + -- Matthias Klose Tue, 10 May 2016 13:34:49 +0200 + +gcc-6 (6.1.1-1) unstable; urgency=medium + + * GCC 6.1.0 release. + - Fix PR bootstrap/70704, PR tree-optimization/70780, PR libgfortran/70684, + PR middle-end/70626, PR java/70839, PR target/70858, PR ada/70759, + PR ada/70786, PR c++/70540, PR middle-end/70626. + * Update to SVN 20160430 (r235678, 6.1.1) from the gcc-6-branch. + - Fix PR middle-end/70680, PR target/70750 (x86), PR ipa/70785, + PR sanitizer/70712, PR target/70728 (x86). + - Don't encode the minor version in the gcj abi version. + + [ Aurelien Jarno ] + * Apply proposed patch for PR target/68273 (Wrong code on mips/mipsel due to + (invalid?) peeking at alignments in function_arg) on mips and mipsel. + + [ Matthias Klose ] + * Always configure with --enable-targets=powerpcle-linux on ppc64el. + * Stop building libcc1 and libgccjit0, when not building common libs. + * Rename libgccjit-5-dbg to libgccjit0-dbg. + * Fix libjava testsuite with dejagnu 1.6, taken from the trunk. + * Allow embedded timestamps by C/C++ macros to be set externally (Eduard + Sanou). + * Add missing libstdc++ symbol to symbols file. + * libstdc++-doc: Ignore warnings about formulas and long identifiers in + man pages. + * Default the 32bit x86 architectures to i686, keep i585 symlinks. + See https://lists.debian.org/debian-devel/2015/09/msg00589.html + * Build-depend on debhelper (>= 9) and dpkg-dev (>= 1.17.14). + * Update gdc to the gdc-6 branch 20160430. + + -- Matthias Klose Sat, 30 Apr 2016 13:31:12 +0200 + +gcc-6 (6.1.1-0ubuntu12) yakkety; urgency=medium + + * GCC 6.1.0 release. + - Fix PR bootstrap/70704, PR tree-optimization/70780, PR libgfortran/70684. + * Update to SVN 20160428 (r235548, 6.1.1) from the gcc-6-branch. + - Fix PR middle-end/70680, PR target/70750 (x86), PR ipa/70785, + PR sanitizer/70712, PR target/70728 (x86). + - Don't encode the minor version in the gcj abi version. + * Always configure with --enable-targets=powerpcle-linux on ppc64el. + * Stop building libcc1 and libgccjit0, when not building common libs. + * Rename libgccjit-5-dbg to libgccjit0-dbg. + * Fix libjava testsuite with dejagnu 1.6, taken from the trunk. + * Re-enable running the tests. + + -- Matthias Klose Thu, 28 Apr 2016 10:33:38 +0200 + +gcc-6 (6.0.1-2ubuntu12) yakkety; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 23 Apr 2016 18:24:49 +0200 + +gcc-6 (6.0.1-2) unstable; urgency=medium + + * GCC 6.1 release candidate 2. + * Update gdc to the trunk 20160423. + + -- Matthias Klose Sat, 23 Apr 2016 17:56:52 +0200 + +gcc-6 (6.0.1-1ubuntu11) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 15 Apr 2016 18:38:06 +0200 + +gcc-6 (6.0.1-1) experimental; urgency=medium + + * GCC 6 release candidate 1. + + [ Michael Hudson-Doyle ] + * cmd/go: deduplicate gccgo afiles by package path, not *Package. LP: #1566552. + + -- Matthias Klose Fri, 15 Apr 2016 18:32:25 +0200 + +gcc-6 (6-20160405-0ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160405. + + -- Matthias Klose Tue, 05 Apr 2016 17:10:35 +0200 + +gcc-6 (6-20160319-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160319. + + -- Matthias Klose Sat, 19 Mar 2016 12:17:24 +0100 + +gcc-6 (6-20160313-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160313. + + -- Matthias Klose Sun, 13 Mar 2016 10:19:12 +0100 + +gcc-6 (6-20160227-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160227. + + -- Matthias Klose Sat, 27 Feb 2016 11:02:40 +0100 + +gcc-6 (6-20160225-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160225. + + -- Matthias Klose Thu, 25 Feb 2016 02:09:51 +0100 + +gcc-6 (6-20160225-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160225. + * Update gdc to the trunk 20160224. + * Install missing architecture specific plugin header files. + * Fix PR target/69885, bootstrap error on m68k. + + -- Matthias Klose Thu, 25 Feb 2016 02:00:57 +0100 + +gcc-6 (6-20160220-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160220. + + -- Matthias Klose Sat, 20 Feb 2016 04:38:26 +0100 + +gcc-6 (6-20160206-0ubuntu11) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160206. + + -- Matthias Klose Sat, 06 Feb 2016 12:07:51 +0100 + +gcc-6 (6-20160205-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160205. + - Fix PR tree-optimization/69320. Closes: #811921. + - Fix PR c++/68782. Closes: #812287. + - Fix PR tree-optimization/69328. Closes: #812247. + - Fix PR target/69421. Closes: #812246. + - Fix PR c++/69379. Closes: #812068. + - Fix PR lto/69393. Closes: #812062. + - Fix PR tree-optimization/69166. Closes: #812061. + * Update gdc to the trunk 20160205. + - Fix data corruption bug when passing around longdoubles. + Closes: #812080. + * Add more conflicts to GCC 5's debug and doc packages. Closes: #813081. + * Fix dependency generation for armel/armhf multilib cross targets. + * Fix libc dependency generation for multilib cross targets. + * Build libitm on alpha, s390x, sh4, sparc64. + + -- Matthias Klose Fri, 05 Feb 2016 18:08:37 +0100 + +gcc-6 (6-20160122-1) experimental; urgency=medium + + * Fix gnat build failure on KFreeBSD (Steven Chamberlain). Closes: #811372. + * Fix dependencies on target libraries which are not built anymore + from this source. + * Bump libmpx soname. Closes: #812084. + * Apply proposed patch for PR target/69129. Closes: #810081. + * Apply proposed patch for PR go/66904, pass linker flags from + "#cgo pkg-config:" directives (Michael Hudson). + * Configure with --enable-fix-cortex-a53-843419 on AArch64. + + -- Matthias Klose Fri, 22 Jan 2016 13:33:19 +0100 + +gcc-6 (6-20160117-1ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160117. + + -- Matthias Klose Sun, 17 Jan 2016 12:34:33 +0100 + +gcc-6 (6-20160117-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160117. + * Update gdc to the trunk 20160115. + * Update libgnatvsn/libgnatprj conflicts. Closes: #810809. + * Fix gnat build failures on the Hurd and KFreeBSD (Svante Signell). + Closes: #811063. + * Build libstdc++-6-doc with a fixed doxygen. Closes: #810717. + + -- Matthias Klose Sun, 17 Jan 2016 12:14:39 +0100 + +gcc-6 (6-20160109-1ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160109. + + -- Matthias Klose Sat, 09 Jan 2016 12:03:28 +0100 + +gcc-6 (6-20160109-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160109. + * Install new header file pkuintrin.h. Closes: #809807. + * Fix libcc1-0 dependency for cross compilers. + + -- Matthias Klose Sat, 09 Jan 2016 11:49:50 +0100 + +gcc-6 (6-20160105-0ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160105. + * Install new header file pkuintrin.h. Closes: #809807. + * Fix libgcc1-0 dependency for cross compilers. + + -- Matthias Klose Sat, 02 Jan 2016 15:55:27 +0100 + +gcc-6 (6-20160103-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160101. + + -- Matthias Klose Sun, 03 Jan 2016 12:47:13 +0100 + +gcc-6 (6-20160101-0ubuntu2) xenial; urgency=medium + + * Bump the libgcj version. + + -- Matthias Klose Sat, 02 Jan 2016 15:55:27 +0100 + +gcc-6 (6-20160101-0ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20160101. + + -- Matthias Klose Fri, 01 Jan 2016 21:40:43 +0100 + +gcc-6 (6-20151221-0ubuntu1) xenial; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20151220. + + -- Matthias Klose Mon, 21 Dec 2015 15:56:05 +0100 + +gcc-6 (6-20151220-1ubuntu1) xenial; urgency=medium + + * Test build for xenial. + + -- Matthias Klose Sun, 20 Dec 2015 14:11:14 +0100 + +gcc-6 (6-20151220-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20151220. + * Update libstdc++-dbg conflicts. Closes: #807885. + * Set target tools and build dependencies for cross builds. + * Relax gcj-6-{jre,jre-headless,jdk} dependencies on libgcj16. + * Fix cross build issues. + + -- Matthias Klose Sun, 20 Dec 2015 13:46:12 +0100 + +gcc-6 (6-20151219-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20151219. + * Update libstdc++-dbg conflicts. Closes: #807885. + * Set target tools and build dependencies for cross builds. + + -- Matthias Klose Sat, 19 Dec 2015 10:17:25 +0100 + +gcc-6 (6-20151213-1ubuntu2) xenial; urgency=medium + + * Test build for xenial. + + -- Matthias Klose Sun, 13 Dec 2015 15:04:49 +0100 + +gcc-6 (6-20151213-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20151213. + * Update the ada-kfreebsd and ada-m68k patches. + * Fix cross-building without having the common cross libraries installed. + * Allow unstripped, non-optimized debug builds with setting DEB_BUILD_OPTIONS + including gccdebug. + * Remove obsolete libgccmath packaging support. + * Define SONAME macros whether the libraries are built or not. + + -- Matthias Klose Sun, 13 Dec 2015 13:24:55 +0100 + +gcc-6 (6-20151211-1ubuntu3) xenial; urgency=medium + + * Test build for xenial. + + -- Matthias Klose Fri, 11 Dec 2015 17:42:35 +0100 + +gcc-6 (6-20151211-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from the trunk 20151211. + * Update gnat and gdc patches, re-enable gnat and gdc. + + -- Matthias Klose Fri, 11 Dec 2015 12:35:03 +0100 + +gcc-6 (6-20151210-1) experimental; urgency=medium + + * GCC 6 snapshot build, taken from 20151210. + + -- Matthias Klose Thu, 10 Dec 2015 22:09:13 +0100 + +gcc-5 (5.3.1-3ubuntu1) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + - Build using GCC Linaro on armhf and arm64. + + -- Matthias Klose Tue, 08 Dec 2015 02:21:55 +0100 + +gcc-5 (5.3.1-3) unstable; urgency=medium + + * Update to SVN 20151207 (r231361, 5.3.1) from the gcc-5-branch. + * Remove upstreamed chunks from the ada-kfreebsd patch. + + -- Matthias Klose Tue, 08 Dec 2015 02:10:51 +0100 + +gcc-5 (5.3.1-2ubuntu2) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + - Build using GCC Linaro on armhf and arm64. + + -- Matthias Klose Mon, 07 Dec 2015 00:00:19 +0100 + +gcc-5 (5.3.1-2) unstable; urgency=medium + + * Update to SVN 20151206 (r231339, 5.3.1) from the gcc-5-branch. + * Re-enable building gdc/libphobos, fixing the profiled build. + * Fix PR sanitizer/67899, build failure on sparc/sparc64. + + -- Matthias Klose Sun, 06 Dec 2015 19:15:46 +0100 + +gcc-5 (5.3.1-1ubuntu1) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + - Build using GCC Linaro on armhf and arm64. + + -- Matthias Klose Sat, 05 Dec 2015 11:40:27 +0100 + +gcc-5 (5.3.1-1) unstable; urgency=medium + + * Update to SVN 20151205 (r231314, 5.3.1) from the gcc-5-branch. + + -- Matthias Klose Sat, 05 Dec 2015 11:36:26 +0100 + +gcc-5 (5.3.1-0ubuntu2) xenial; urgency=medium + + * Update libgcc symbols file. + + -- Matthias Klose Fri, 04 Dec 2015 18:52:20 +0100 + +gcc-5 (5.3.1-0ubuntu1) xenial; urgency=medium + + * Update to SVN 20151204 (r231267, 5.3.1) from the gcc-5-branch. + * Build using GCC Linaro on armhf and arm64. + + -- Matthias Klose Fri, 04 Dec 2015 15:04:01 +0100 + +gcc-5 (5.3.0-3) unstable; urgency=medium + + * Update libgcc symbols file. + * Restore libgcc.symbols.aebi. + * Disabled profiled bootstraps for backports. + + -- Matthias Klose Sat, 05 Dec 2015 07:50:48 +0100 + +gcc-5 (5.3.0-1) experimental; urgency=medium + + * GCC 5.3 release. + - Fix PR libstdc++/65142 (CVE-2015-5276). + * Update gdc to the gcc-5 branch 20151130. + * Enable the profiled bootstrap on amd64, arm64, armel armhf, i386, powerpc, + ppc64, ppc64el, s390x, x32 (excluding builds from the Linaro branch). + * Move test summary into the gcc-test-results package. + * Simplify libatomic, libcilkrts, libgcc, libgfortran, libgomp, libitm, + libmpx, libquadmath symbols files using versioned symbol references. + Closes: #806784. + * Only build the hppa64 cross compiler when either building the native compiler, + or when cross building the native compiler. Closes: #806479. + * Configure staged build with --enable-linker-build-id. + + -- Matthias Klose Fri, 04 Dec 2015 12:01:04 +0100 + +gcc-5 (5.2.1-27ubuntu1) xenial; urgency=medium + + * Configure with --enable-default-pie on s390x. + + -- Matthias Klose Mon, 30 Nov 2015 00:49:40 +0100 + +gcc-5 (5.2.1-27) unstable; urgency=medium + + * Update to SVN 20151129 (r231053, 5.2.1) from the gcc-5-branch. + * Don't strip cc1plus when shipping with unstripped frontends. + * Relax libgnatvsn5-dev-*-cross and libgnatprj5-dev-*-cross dependencies + on gnat-5-*-linux-gnu. + * Fix setting the explicit libc dependency for cross builds. + * Don't build m4-nofpu multilibs on sh4, install the default multilib + into the standard location. + * Stop building gnat on mips64, see https://gcc.gnu.org/PR65337 (#806370). + * Update the patch for PR go/67508 and re-enable Go on sparc and sparc64. + * Fix gnat sparc/sparc64 architecture detection. + * Update libgcc and libstdc++ symbols files. + * Don't ship the gcov tools in the gcc-hppa64-linux-gnu package. + * Run the autoconf generation in parallel. + * Add --enable-default-pie option to GCC configure, taken from the trunk. + * Enable gnat for m68k cross builds. + * Link gnat tools, gnat libs and libgccjit with the defaults LDFLAGS. + * Skip non-default multilib and libstdc++-v3 debug builds in bootstrap builds. + * Ship an empty debian/rules.parameters in the gcc-5-source package. + + -- Matthias Klose Sun, 29 Nov 2015 23:48:58 +0100 + +gcc-5 (5.2.1-26ubuntu1) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 25 Nov 2015 17:29:15 +0100 + +gcc-5 (5.2.1-26) unstable; urgency=medium + + * Update to SVN 20151125 (r230897, 5.2.1) from the gcc-5-branch. + * Fix the rtlibs stage build. Closes: #806186. + * Fix packaging the cross libphobos package. + * Build the hppa64 cross compiler on x86 architectures. + * gcc-5-hppa64-linux-gnu: Stop providing unversioned tools using + alternatives. Build a gcc-hppa64-linux-gnu package instead. + * Split out a gcc-5-test-results package from g++-5, allowing a post + build analysis, and reducing the size of the g++-5 package. + + -- Matthias Klose Wed, 25 Nov 2015 20:33:08 +0100 + +gcc-5 (5.2.1-25ubuntu1) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Mon, 23 Nov 2015 06:06:11 +0100 + +gcc-5 (5.2.1-25) unstable; urgency=medium + + * Update to SVN 20151123 (r230734, 5.2.1) from the gcc-5-branch. + * Fix libgcc4-dbg dependency on libgcc4. Closes: #805839. + * Fix building epoch prefixed cross packages. + + -- Matthias Klose Mon, 23 Nov 2015 05:48:00 +0100 + +gcc-5 (5.2.1-24ubuntu3) xenial; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 21 Nov 2015 12:21:06 +0100 + +gcc-5 (5.2.1-24) unstable; urgency=medium + + * Update to SVN 20151121 (r230703, 5.2.1) from the gcc-5-branch. + * Fix PR libstdc++/56158, taken from the trunk. Closes: #804521. LP: #1514309. + * Don't try to build a gnat cross compiler when there is no gnat compiler + for the build architecture. + * Update gnat build dependencies for backports. + * Parallelize building documentation and parallelize the packaging step. + * Update the Linaro support to the 5-2015.11 snapshot. + + -- Matthias Klose Sat, 21 Nov 2015 11:22:16 +0100 + +gcc-5 (5.2.1-23ubuntu1) xenial; urgency=medium + + * Again, configure with --enable-targets=powerpcle-linux on ppc64el. + + -- Matthias Klose Wed, 28 Oct 2015 12:18:49 +0100 + +gcc-5 (5.2.1-23) unstable; urgency=medium + + * Update to SVN 20151028 (r229478, 5.2.1) from the gcc-5-branch. + + [ Matthias Klose ] + * Update the Linaro support to the 5-2015.10 snapshot. + * gcj: On ppc64el, use the same jvm archdir name as for openjdk (ppc64le). + * gcj: Fix priority of java alternatives. Closes: #803055. + * gnat-5: Reintroduce the unversioned gnatgcc name. Closes: #802838. + + [ Aurelien Jarno ] + * Replace proposed patch for PR rtl-optimization/67736 by the one + committed on trunk. + + -- Matthias Klose Wed, 28 Oct 2015 10:36:54 +0100 + +gcc-5 (5.2.1-22ubuntu5) xenial; urgency=medium + + * Revert the fix for PR ipa/67056, causing an ICE. + + -- Matthias Klose Fri, 23 Oct 2015 19:13:51 +0200 + +gcc-5 (5.2.1-22ubuntu4) xenial; urgency=medium + + * Update to SVN 20151022 (r229176, 5.2.1) from the gcc-5-branch. + * Fix PR ipa/67056, taken from the trunk. Closes: #788299. + * Target POWER8 on ppc64el. + * Again, don't strip the compiler binaries for more verbose ICEs. + + -- Matthias Klose Thu, 22 Oct 2015 17:32:47 +0200 + +gcc-5 (5.2.1-22ubuntu2) wily; urgency=medium + + * Strip the compiler binaries for the release. + + -- Matthias Klose Fri, 16 Oct 2015 12:17:17 +0200 + +gcc-5 (5.2.1-22ubuntu1) wily; urgency=medium + + * gcj: On ppc64el, use the same jvm archdir name as for openjdk (ppc64le). + + -- Matthias Klose Sun, 11 Oct 2015 10:13:52 +0200 + +gcc-5 (5.2.1-22) unstable; urgency=medium + + * Update to SVN 20151010 (r228681, 5.2.1) from the gcc-5-branch. + - Fix PR libstdc++/65913, PR libstdc++/67173, PR libstdc++/67747, + PR c/67730, PR middle-end/67563, PR lto/67699, PR tree-optimization/67821, + PR debug/58315. + + [ Matthias Klose ] + * Restore the work around for PR libstdc++/65913, still needed at least + for powerpc. + * Rename gcc-5-hppa64 to gcc-5-hppa64-linux-gnu, update (build) dependency + on binutils. Closes: #800563. + * Adjust setting DH_COMPAT for dh_movefiles with updated debhelper supporting + globbing of arguments. Closes: #800250. + * Build-depend on gnat-5 instead of gnat-4.9. + + [ Aurelien Jarno ] + * Do not Use --with-mips-plt on mips and mipsel. Closes: #799811. + + -- Matthias Klose Sat, 10 Oct 2015 22:17:09 +0200 + +gcc-5 (5.2.1-21ubuntu2) wily; urgency=medium + + * Restore the work around for PR libstdc++/65913, still needed at least + for powerpc. + + -- Matthias Klose Sun, 04 Oct 2015 02:21:30 +0200 + +gcc-5 (5.2.1-21ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 03 Oct 2015 21:30:44 +0200 + +gcc-5 (5.2.1-21) unstable; urgency=medium + + * Update to SVN 20151003 (r228449, 5.2.1) from the gcc-5-branch. + * Fix building gnat. Closes: #800781. + + -- Matthias Klose Sat, 03 Oct 2015 17:28:45 +0200 + +gcc-5 (5.2.1-20ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 02 Oct 2015 11:35:22 +0200 + +gcc-5 (5.2.1-20) unstable; urgency=medium + + * Update to SVN 20151002 (r228373, 5.2.1) from the gcc-5-branch. + * Fix packaging the ada cross library packages. + + -- Matthias Klose Fri, 02 Oct 2015 10:24:38 +0200 + +gcc-5 (5.2.1-19ubuntu1) wily; urgency=medium + + * Configure --with-arch=zEC12 on s390x Ubuntu. + + -- Matthias Klose Wed, 30 Sep 2015 22:55:14 +0200 + +gcc-5 (5.2.1-19) unstable; urgency=medium + + * Update to SVN 20150930 (r228302, 5.2.1) from the gcc-5-branch. + - Fix PR ipa/66424. Closes: #800318. + + [ Matthias Klose ] + * Update the Linaro support to the 5-2015.09 snapshot. + * Fix PR libstdc++/67707, taken from the trunk. LP: #1499564. + * Ship libgcj.spec in gcj-5 instead of gcj-5-jdk. Closes: #800010. + * gcj-5: Suggest gcj-5-jdk. + * Fix base dependency for ada cross library packages. + * Add ${shlibs:Depends} for libgnatvsn and libgnatprj. + * Link lrealpath.o into libgnatprj. Closes: #800045. + * libgnat{svn,prj}-dev: For cross builds, move adainclude and adalib files + into the gcc libdir. + * Default to POWER8 on ppc64el. + * armv8: Fix slt lda missing conditional code (taken from the trunk). + * Fix lintian pre-depends-directly-on-multiarch-support warnings. + + [ Aurelien Jarno ] + * Apply proposed patch for PR rtl-optimization/67736 when building for + mips64 or mips64el. Closes: #800321. + + -- Matthias Klose Wed, 30 Sep 2015 20:36:50 +0200 + +gcc-5 (5.2.1-18ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 23 Sep 2015 03:10:37 +0200 + +gcc-5 (5.2.1-18) unstable; urgency=medium + + * Update to SVN 20150922 (r228023, 5.2.1) from the gcc-5-branch. + + [ Matthias Klose ] + * gcc-5-plugin-dev: Depend on libmpc-dev. Closes: #798997. + * Fix PR libstdc++/65913, taken from the trunk. Closes: #797577. + + [ YunQiang Su ] + * Build again the gnat-5-sjlj package. Closes: #798782. + * Fix gnat cross builds, and cross building gnat. + + -- Matthias Klose Tue, 22 Sep 2015 23:15:17 +0200 + +gcc-5 (5.2.1-17ubuntu5) wily; urgency=medium + + * Don't assume --push-state/--pop-state being available for every linker. + LP: #1496743. + + -- Matthias Klose Tue, 22 Sep 2015 20:54:29 +0200 + +gcc-5 (5.2.1-17ubuntu4) wily; urgency=medium + + * gcc-5-plugin-dev: Depend on libmpc-dev. Closes: #798997. + * Work around PR c++/65913, link with -latomic when linking with -lstdc++. + Closes: #797577. + + -- Matthias Klose Tue, 15 Sep 2015 17:57:31 +0200 + +gcc-5 (5.2.1-17ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Fri, 11 Sep 2015 03:24:48 +0200 + +gcc-5 (5.2.1-17) unstable; urgency=medium + + * Update to SVN 20150911 (r227671, 5.2.1) from the gcc-5-branch. + - Fix PR c++/67369, ICE on valid code. LP: #1489173. + + [ Matthias Klose ] + * Build-depend on linux-libc-dev [m68k] for gcc and gcc-snapshot builds. + Closes: #796906. + * Don't ignore anymore bootstrap comparison failures on sh4. Closes: #796939. + * Fix stage1 cross build for KFreeBSD. Closes: #796901. + * libgo: Fix PR go/67508, rewrite lfstack packing/unpacking to look more + like that in Go (Michael Hudson). LP: #1472650. + * Fix PR target/67143 (AArch64), ICE on valid code. LP: #1481333. + + [ Aurelien Jarno ] + * Use --with-mips-plt on mips*. + * Build for R2 ISA on mips, mips64 and mips64el. + * Optimize for R2 ISA on mipsel. + * Only apply mips-fix-loongson2f-nop on mipsel. + + [ YunQiang Su ] + * Fix running the acats tests. Closes: #798531. + + -- Matthias Klose Fri, 11 Sep 2015 03:17:20 +0200 + +gcc-5 (5.2.1-16ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 03 Sep 2015 16:00:26 +0200 + +gcc-5 (5.2.1-16) unstable; urgency=medium + + * Update to SVN 20150903 (r227431, 5.2.1) from the gcc-5-branch. + - Backport the filesystem TS library. + * libstdc++-dev: Install libstdc++fs.a. + * Again, configure with --enable-targets=powerpcle-linux on ppc64el. + * Apply proposed patch for PR target/67211 (ppc64el). + * libgo-dev: Install libgolibbegin.a. + * Apply proposed patch for PR target/67280 (ARM). LP: #1482320. + + -- Matthias Klose Thu, 03 Sep 2015 12:16:15 +0200 + +gcc-5 (5.2.1-15ubuntu5) wily; urgency=medium + + * Fix libstdc++-breaks (add version for the clustalx breaks). + + -- Matthias Klose Tue, 25 Aug 2015 17:56:26 +0200 + +gcc-5 (5.2.1-15ubuntu3) wily; urgency=medium + + * Update to SVN 20150825 (r227166, 5.2.1) from the gcc-5-branch. + - Backport the filesystem TS library. + * libstdc++-dev: Install libstdc++fs.a. + * Again, configure with --enable-targets=powerpcle-linux on ppc64el. + * Apply proposed patch for PR target/67211 (ppc64el). + * libgo-dev: Install libgolibbegin.a. + * Add the PR libstdc++/66145 breaks for wily. + + -- Matthias Klose Tue, 25 Aug 2015 15:56:11 +0200 + +gcc-5 (5.2.1-15ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sun, 09 Aug 2015 13:20:15 +0200 + +gcc-5 (5.2.1-15) unstable; urgency=medium + + * Update to SVN 20150808 (r226731, 5.2.1) from the gcc-5-branch. + * Adjust libstdc++-breaks: Break libantlr-dev instead of antlr; + adjust libreoffice version (closes: #794203), drop xxsd break (see + #793289), remove cython breaks (closes: #794511), add breaks for + packages built using cython (chemps2, fiona, guiqwt, htseq, imposm, + pysph, pytaglib, python-scipy, python-sfml, rasterio). + * Ignore missing libstdc++ symbols on sparc64 (work around #792204). + + -- Matthias Klose Sat, 08 Aug 2015 11:18:24 +0200 + +gcc-5 (5.2.1-14) unstable; urgency=high + + * Fix libstdc++6 breaks. + + -- Matthias Klose Fri, 31 Jul 2015 04:12:08 +0200 + +gcc-5 (5.2.1-13) unstable; urgency=high + + * Upload to unstable (https://wiki.debian.org/GCC5). See also + https://lists.debian.org/debian-devel-announce/2015/07/msg00000.html + * Update to SVN 20150730 (r226411, 5.2.1) from the gcc-5-branch. + - Fix PR libstdc++/67015. Closes: #793784. + * Fix version macros in the plugin-header.h header. Closes: #793478. + * libstdc++6: Add breaks for issues tagged with gcc-pr66145. + * Add libcpprest2.4 to libstdc++6 breaks. Closes: #784655. + * Fix PR c++/66857, taken from the trunk. + * Ignore differences in gcc/real.o in the bootstrap build for + sh*-*linux-gnu targets. According to PR 67002, "A rare indeterminacy + of the register choice. Both codes are valid. It seems very hard to + find where has this indeterminacy come from". Suggested by Adrian + Glaubitz. + + -- Matthias Klose Thu, 30 Jul 2015 21:51:25 +0200 + +gcc-5 (5.2.1-12ubuntu2) wily; urgency=medium + + * Update to SVN 20150729 (r226354, 5.2.1) from the gcc-5-branch. + - Fix PR libstdc++/67015. Closes: #793784. + + -- Matthias Klose Wed, 29 Jul 2015 17:59:18 +0200 + +gcc-5 (5.2.1-12ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 22 Jul 2015 21:17:54 +0200 + +gcc-5 (5.2.1-12) experimental; urgency=medium + + * Update to SVN 20150723 (r226105, 5.2.1) from the gcc-5-branch. + * Fix PR libstdc++/66145, std::ios_base::failure objects thrown from + libstdc++.so using the gcc4-compatible ABI. + Just build src/c++11/functexcept.cc using the new ABI. It will break + code, which will be handled in the archive by adding Breaks for the + affected packages. Third party code using such code will need a rebuild. + * Remove the work around to build with -O1 on sh4. + + -- Matthias Klose Thu, 23 Jul 2015 14:18:44 +0200 + +gcc-5 (5.2.1-11ubuntu1) wily; urgency=medium + + * Configure without --disable-libstdcxx-dual-abi. + * Configure with --with-default-libstdcxx-abi=new. + + -- Matthias Klose Fri, 17 Jul 2015 08:14:56 +0200 + +gcc-5 (5.2.1-1ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 16 Jul 2015 16:58:50 +0200 + +gcc-5 (5.2.1-1) experimental; urgency=medium + + * GCC 5.2 release. + * Update to SVN 20150716 (r225880, 5.2.1) from the gcc-5-branch. + * Require version 5.2 for the libstdc++6 cxx symbols. + * Ignore missing libstdc++ symbols on sparc64 (work around #792204). + * Go escape analysis: analyze multiple result type assertions (taken + from the trunk). + + -- Matthias Klose Thu, 16 Jul 2015 15:35:44 +0200 + +gcc-5 (5.1.1-14ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Sat, 11 Jul 2015 13:00:26 +0200 + +gcc-5 (5.1.1-14) unstable; urgency=medium + + * Update to SVN 20150711 (r225710, 5.1.1) from the gcc-5-branch. + + -- Matthias Klose Sat, 11 Jul 2015 11:57:19 +0200 + +gcc-5 (5.1.1-13ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 07 Jul 2015 14:29:11 +0200 + +gcc-5 (5.1.1-13) unstable; urgency=medium + + * Update to SVN 20150706 (r225471, 5.1.1) from the gcc-5-branch. + * Update libasan symbol files. + * Configure --with-fp-32=xx on all mips targets, setting MIPS O32 default + to FPXX (YunQiang Su). Closes: #789612. + * Update libgccjit symbol file. + * Add x32 symbols files for libgcc1 and libstdc++6. + * libgccjit0: Add breaks for python-gccjit and python3-gccjit. + + -- Matthias Klose Mon, 06 Jul 2015 19:55:08 +0200 + +gcc-5 (5.1.1-12ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 23 Jun 2015 12:53:45 +0200 + +gcc-5 (5.1.1-12) unstable; urgency=medium + + * Update to SVN 20150622 (r224724, 5.1.1) from the gcc-5-branch. + * Update symbols files for mips64 libatomic and libstdc++ (YunQiang Su). + Closes: #788990. + * Fix "empty-binary-package" lintian warnings. + + -- Matthias Klose Mon, 22 Jun 2015 14:37:49 +0200 + +gcc-5 (5.1.1-11ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 17 Jun 2015 14:38:38 +0200 + +gcc-5 (5.1.1-11) unstable; urgency=medium + + * Update to SVN 20150616 (r224519, 5.1.1) from the gcc-5-branch. + * gccgo: escape: Analyze binary expressions (taken from the trunk). + * Explicitly build with -Wl,--no-relax on alpha again. + * Build with -O1 on sh4 (try to work around PR target/66358). + + -- Matthias Klose Tue, 16 Jun 2015 16:11:59 +0200 + +gcc-5 (5.1.1-10) unstable; urgency=medium + + * Update to SVN 20150613 (r224454, 5.1.1) from the gcc-5-branch. + * Make removal of byte-compiled libstdc++ pretty printer files more + robust. Closes: #787630. + * Fix mips 32bit (o32) multilib builds (YunQiang Su). + * Build target libraries with -Wl,-z,relro. + * Build libstdc++6 when building the common libraries. + * Fix a bunch of lintian warnings. + + -- Matthias Klose Sat, 13 Jun 2015 12:59:17 +0200 + +gcc-5 (5.1.1-9ubuntu2) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 03 Jun 2015 01:02:23 +0200 + +gcc-5 (5.1.1-9) unstable; urgency=medium + + * Update to SVN 20150602 (r224029, 5.1.1) from the gcc-5-branch. + * Remove byte-compiled libstdc++ pretty printer files on upgrade. + Closes: #785939. + * Fix dangling libgccjit.so symlink. + * Fix base dependency for rtlibs stage builds. + * Fix build failure of the hppa64 cross compiler, introduced by the + gnat cross patches. Closes: #786692. + * Update README.source (Michael Vogt). + * libgo: syscall.Sendfile(): Apply proposed patch for PR go/66378. + (Michael Vogt). LP: #1460530. + * Set CC and CXX matching the same GCC version for the stage1 build. + * Work around PR go/66368, build libgo with -fno-stack-protector. + LP: #1454183. + + -- Matthias Klose Wed, 03 Jun 2015 00:49:41 +0200 + +gcc-5 (5.1.1-8ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Thu, 28 May 2015 12:51:48 +0200 + +gcc-5 (5.1.1-8) unstable; urgency=medium + + * Update to SVN 20150528 (r223816, 5.1.1) from the gcc-5-branch. + * Set the priorities of the *-dev-*-cross packages to extra. + * Prepare to change the base dependency for *-cross packages. + * Fix dependencies for stage1 and stage2 builds. + * Relax dependencies on binary indep *-dev-*-cross packages. + * Disable building gdc on sh4 (bootstrap comparison failure). + + -- Matthias Klose Thu, 28 May 2015 15:51:00 +0200 + +gcc-5 (5.1.1-7) unstable; urgency=medium + + * Update to SVN 20150522 (r223579, 5.1.1) from the gcc-5-branch. + * Add description for the ada-gnattools-cross patch (YunQiang Su). + * Provide a rtlibs stage to build a subset of target library packages. + * Make symbols file symlinking for cross builds more robust. + * Prefer gnatgcc-5 over gnatgcc when building native packages. + * Various fixes to build a gnat cross compiler: + - Fix dependencies of packages. + - Fix building libgnatprj and libgnatvsn (still needed to figure + out if these are target or host libraries). + * Fix building cross compilers with dpkg 1.18. + + -- Matthias Klose Fri, 22 May 2015 18:20:01 +0200 + +gcc-5 (5.1.1-6ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + * Fix dependencies for stage1 and stage2 builds. + * Disable building gdc on sh4. + + -- Matthias Klose Tue, 19 May 2015 18:29:02 +0200 + +gcc-5 (5.1.1-6) unstable; urgency=medium + + * Update to SVN 20150519 (r223346, 5.1.1) from the gcc-5-branch. + * Don't build gdc-multilib on armel. + * Remove old CFLAGS/LDFLAGS settings to build gdc. + * Remove reference to .ico file in NEWS.html. + * Fix gcc's dependency on libcc1-0 for native builds. + * Fix stripping the rpath when cross-building cross compilers. + * Remove work arounds to build 64bit multilibs on 32bit targets, + now properly fixed upstream. + * Partially apply patches to build a gnat cross compiler (submitted + by YunQiang Su). + - gnatmake: Call the versioned gnatbind and gnatlink commands. + Closes: #782257. + - Allow libgnatprj and libgnatvsn to cross build. Addresses: #783372. + - New patch ada-gnattools-cross.diff (no documentation). + * Backport patch for gccgo: + - gccgo: If unary & does not escape, the var does not escape. + * Apply the backported patches for the go escape analysis. Need to + be enabled with -fgo-optimize-alloc (this option may go away again). + * Re-enable running the tests. + + -- Matthias Klose Tue, 19 May 2015 10:33:40 +0200 + +gcc-5 (5.1.1-5ubuntu4) wily; urgency=medium + + * Update to SVN 20150513 (r223155, 5.1.1) from the gcc-5-branch. + * Don't build gdc-multilib on armel. + + -- Matthias Klose Wed, 13 May 2015 14:36:20 +0200 + +gcc-5 (5.1.1-5ubuntu3) wily; urgency=medium + + * Fix gnat build dependencies. + + -- Matthias Klose Sun, 10 May 2015 02:46:32 +0200 + +gcc-5 (5.1.1-5ubuntu2) wily; urgency=medium + + * Update to SVN 20150509 (r222970, 5.1.1) from the gcc-5-branch. + * Fix gotools configury. + * Configure with + --disable-libstdcxx-dual-abi --with-default-libstdcxx-abi=c++98 + While libstdc++ provides a dual ABI to support both the c++98 and c++11 + ABI, there is no committment on compatibility of the old experimental + c++11 ABI from GCC 4.9 and the stable c++11 ABI in GCC 5. + Closes: #784655. + + -- Matthias Klose Sat, 09 May 2015 19:24:57 +0200 + +gcc-5 (5.1.1-5ubuntu1) wily; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 05 May 2015 17:52:14 +0200 + +gcc-5 (5.1.1-5) unstable; urgency=medium + + * Update to SVN 20150507 (r222873, 5.1.1) from the gcc-5-branch. + * Fix 32bit libstdc++ symbols files for kfreebsd-amd64. + * libx32phobos-dev: Don't depend on libx32z-dev, when not available. + * Fix gotools configury. + * Configure with + --disable-libstdcxx-dual-abi --with-default-libstdcxx-abi=c++98 + While libstdc++ provides a dual ABI to support both the c++98 and c++11 + ABI, there is no committment on compatibility of the old experimental + c++11 ABI from GCC 4.9 and the stable c++11 ABI in GCC 5. + Closes: #784655. + + -- Matthias Klose Fri, 08 May 2015 18:48:49 +0200 + +gcc-5 (5.1.1-4) unstable; urgency=medium + + * Update to SVN 20150503 (r222751, 5.1.1) from the gcc-5-branch. + - Fix build failure on alpha. + * Fix applying the cross-biarch patch for stage1 builds. + * Fix libstdc++ symbols files for kfreebsd-amd64. + * Remove libn32phobos-5-dev from the control file. + * Really disable gnat on x32. + + -- Matthias Klose Sat, 02 May 2015 19:18:57 +0200 + +gcc-5 (5.1.1-3) unstable; urgency=high + + * Update to SVN 20150430 (r222660, 5.1.1) from the gcc-5-branch. + * Fix libstdc++ symbols files for kfreebsd-i386. + * PR libstdc++/62258, fix for std::uncaught_exception, taken from the trunk. + LP: #1439451. + * Backport patches for gccgo (not yet applied): + - Consider multi-result calls in escape analysis. + - Propagate escape info from closures to enclosed variables. + - Analyze function values and conversions. + - Use backend interface for stack allocation. + * More libstdc++ symbols updates for the Hurd and KFreeBSD. + * config-ml.in: Add D support. + * Update cross-biarch.diff to support D and Go. + * Apply the cross-biarch patch for every cross build. + + -- Matthias Klose Thu, 30 Apr 2015 15:42:05 +0200 + +gcc-5 (5.1.1-2) unstable; urgency=medium + + * Update to SVN 20150428 (r222550, 5.1.1) from the gcc-5-branch. + * Fix the gnat build dependency. + * Don't build go and gofmt for cross compilers. + + -- Matthias Klose Tue, 28 Apr 2015 23:57:14 +0200 + +gcc-5 (5.1.1-1) unstable; urgency=medium + + * GCC 5.1.0 release. + * Update to SVN 20150424 (r222416, 5.1.1) from the gcc-5-branch. + * Update NEWS files. + * Apply the ada-bootstrap-compare patch for snapshot builds as well. + * Update libasan, libgomp and libstdc++ symbols files. + * Don't ignore errors in dh_makeshlibs and dh_shlibdeps anymore, symbols + files should be uptodate now. + * Split out the sjlj build related things from the ada-acats patch into + a new ada-acats-sjlj patch. + * Don't build libx32phobos-5-dev when not building x32 multilibs. + * Fix standard C++ include directory for cross builds. Closes: #783241. + * Ignore bootstrap comparison failure on ia64. Filed upstream as + PR middle-end/65874. + * gccgo: Add (don't yet apply) a patch to implement escape analysis (taken + from the trunk). Turned off by default, enable with -fgo-optimize-alloc. + + -- Matthias Klose Fri, 24 Apr 2015 18:42:39 +0200 + +gcc-5 (5.1.0-0ubuntu11) vivid; urgency=medium + + * GCC 5.1.0 release. + * Update NEWS files. + * gccgo: Implement escape analysis (taken from the trunk). Turned off + by default, enable with -fgo-optimize-alloc. + + -- Matthias Klose Wed, 22 Apr 2015 14:54:11 +0200 + +gcc-5 (5.1~rc2-0ubuntu12) vivid; urgency=medium + + * Fix libasan symbols. + + -- Matthias Klose Wed, 22 Apr 2015 00:12:03 +0200 + +gcc-5 (5.1~rc2-0ubuntu11) vivid; urgency=medium + + * GCC 5.1 release candidate 2. + * Update to SVN 20150421 (r222253) from the gcc-5-branch. + + -- Matthias Klose Tue, 21 Apr 2015 18:53:06 +0200 + +gcc-5 (5.1~rc1-0ubuntu12) vivid; urgency=medium + + * Update to SVN 20150419 (r222218) from the gcc-5-branch. + * Apply the ada-bootstrap-compare patch for snapshot builds as well. + * Update libasan, libgomp and libstdc++ symbols files. + * Don't ignore errors in dh_makeshlibs and dh_shlibdeps anymore, symbols + files should be uptodate now. + * Split out the sjlj build related things from the ada-acats patch into + a new ada-acats-sjlj patch. + * Ignore bootstrap comparison failure on ia64. Filed upstream as + PR middle-end/65874. + + -- Matthias Klose Sun, 19 Apr 2015 15:57:49 +0200 + +gcc-5 (5.1~rc1-0ubuntu11) vivid; urgency=medium + + * GCC 5.1 release candidate 1. + * Update to SVN 20150414 (r222066) from the gcc-5-branch. + * Update GDC to the gcc-5 branch, 20140414. + * Don't build libobjc, when not building the common libraries. + * Don't run the gccjit tests on KFreeBSD. Works around #782444:. + * Fix not building libs built by the next GCC version. + + -- Matthias Klose Tue, 14 Apr 2015 03:01:02 +0200 + +gcc-5 (5-20150410-0ubuntu11) vivid; urgency=medium + + * Update to SVN 20150410. + * Fix /usr/include/c++/5.0.0 symlink. + * Re-enable building the D frontend. Closes: #782254. + * gccgo: Install libnetgo. + + -- Matthias Klose Sat, 11 Apr 2015 02:21:24 +0200 + +gcc-5 (5-20150404-0ubuntu11) vivid; urgency=medium + + * Update to SVN 20150404. + * Don't explicitly configure --with-gxx-include-dir and an absolute path, + so the toolchain remains relocatible. Instead, canonicalize the include + path names at runtime. + + -- Matthias Klose Sat, 04 Apr 2015 23:34:58 +0200 + +gcc-5 (5-20150401-0ubuntu12) vivid; urgency=medium + + * Update to SVN 20150401. + * Don't link libgnatprj using --no-allow-shlib-undefined on older releases. + * Don't build libmpx on older releases. + * Remove the work around to build libgccjit on arm64. + * Fix the libgccjit build using the just built compiler. + * Don't break other gcc, gcj, gnat -base packages for backports, only + needed for dist-upgrades. + * Don't add -gtoggle to STAGE3_CFLAGS (disabling the bootstrap comparison). + Instead, ignore the one differing file (gcc/ada/a-except.o) for now. + See #781457, PR ada/65618. + * Update libasan, libtsan, libgfortran and libstdc++ symbols files. + * Add symbols files for libmpx, libgccjit and libcc1. + + -- Matthias Klose Wed, 01 Apr 2015 11:27:39 +0200 + +gcc-5 (5-20150329-1ubuntu11) vivid; urgency=medium + + * Update to SVN 20150329. + + -- Matthias Klose Sun, 29 Mar 2015 19:13:54 +0200 + +gcc-5 (5-20150329-1) experimental; urgency=medium + + * Update to SVN 20150329. + * Fix building the gnat-5-doc package. + * Fix gnat build dependencies. + * Fix installation of the gnat upstream ChangeLog. Closes: #781451. + * Restore the bootstrap-debug.mk patch to the ada-mips patch + for debugging purposes. See #781457. + + -- Matthias Klose Sun, 29 Mar 2015 18:53:29 +0200 + +gcc-5 (5-20150328-0ubuntu11) vivid; urgency=medium + + * Update to SVN 20150328. + * Fix building the gnat-5-doc package. + * Fix installation of the gnat upstream ChangeLog. Closes: #781451. + * Restore the bootstrap-debug.mk patch to the ada-mips patch + for debugging purposes. See #781457. + + -- Matthias Klose Sat, 28 Mar 2015 15:08:55 +0100 + +gcc-5 (5-20150327-1) experimental; urgency=medium + + * Update to SVN 20150327. + * Update libcc1 build support. + * Fix syntax in libstdc++ symbols file. Closes: #780991. + * Fix PR go/65417: Add support for PPC32 relocs to debug/elf. LP: #1431388. + * Fix PR go/65462: Fix go get dependencies. LP: #1432497. + * Limit the omp.h multilib fix to Linux. Closes: #778440. + * For ICEs, dump the preprocessed source file to stderr when in a + distro build environment. + * Remove the bootstrap-debug.mk patch from the ada-mips patch. + * gnat related work (partly based on #780640): + - Update patches for GCC 5. + - Build the gnat packages from the gcc-5 source package. + - Don't build a gnat-base package from the gcc-5 source. + - Stop building the gnat-5-sjlj package for now, patch needs an update. + - Fix the packaging when not building the gnat-5-sjlj package. + - Don't apply the ada-symbolic-tracebacks, patch needs an update. + - Fix the libgnatprj build, build with -DIN_GCC. + * Replace cloog/ppl build bits with isl build bits. + + -- Matthias Klose Fri, 27 Mar 2015 21:05:16 +0100 + +gcc-5 (5-20150321-1ubuntu12) vivid; urgency=medium + + * Update to SVN 20150321. + * Move the libcc1plugin from the gcc-5-plugin-dev package into the + gcc-5 package. + * Configure with --enable-checking=yes (instead of =release). + + -- Matthias Klose Sat, 21 Mar 2015 15:28:30 +0100 + +gcc-5 (5-20150316-1ubuntu11) vivid; urgency=medium + + * Update to SVN 20150316. + + -- Matthias Klose Mon, 16 Mar 2015 11:56:03 +0100 + +gcc-5 (5-20150314-1ubuntu11) vivid; urgency=medium + + * Update to SVN 20150314. + + -- Matthias Klose Sat, 14 Mar 2015 14:29:28 +0100 + +gcc-5 (5-20150312-1ubuntu11) vivid; urgency=medium + + * Update to SVN 20150312. + - PR go/65404, enable cgo on arm64 and powerpc. LP: #1431032. + * Fix libmpx multilib builds. + + -- Matthias Klose Thu, 12 Mar 2015 23:11:21 +0100 + +gcc-5 (5-20150311-1ubuntu12) vivid; urgency=medium + + * Update to SVN 20150311. + - libgo: Add arm64 to the pointer size map (Michael Hudson). + - libgo: Add ppc to the pointer size map. + * Enable libmpx builds on amd64 and i386. + * Update the gcc-multiarch patch for mips64 (YunQiang Su). + Closes: #776402, #780271. + + -- Matthias Klose Wed, 11 Mar 2015 19:56:38 +0100 + +gcc-5 (5-20150307-1ubuntu11) vivid; urgency=medium + + * Update to SVN 20150307. + - Update gccgo to Go 1.4.2. + * Enable libsanitizer for AArch64 and POWERPC LE (asan, ubsan). + * Remove the support to build empty libsanitizer packages on powerpc + and ppc64; libsanitizer should be stable on these architectures. + * Fix libcc1.so symlink. Closes: #779341. + * Revert the fix for PR65150 on armel and armhf to restore bootstrap. + * Don't strip the libgo library, or some things won't work as documented, + like runtime.Callers. Still keep the -dbg packages and check if some + debug information can be stripped. + * gccgo-5: Install alternatives for go and gofmt. + + -- Matthias Klose Sat, 07 Mar 2015 12:36:40 +0100 + +gcc-5 (5-20150226-1) experimental; urgency=medium + + * Update to SVN 20150226. + - Fix PR c/65040 (closes: #778514), PR tree-optimization/65053 + (closes: #778070, #778071), PR c++/64898 (closes: #778472). + * Allow not to strip the compiler executables to be able to print backtraces + for ICEs. + * Fix gnat build on mips64el (James Cowgill). Addresses: #779191. + * Fix the hppa64 cross build (John David Anglin). Closes: #778658. + * Fix libstdc++ pretty printers for Python3. Closes: #778436. + + -- Matthias Klose Thu, 26 Feb 2015 08:18:23 +0100 + +gcc-5 (5-20150205-0ubuntu11) vivid; urgency=medium + + * Update to SVN 20150205. + + -- Matthias Klose Thu, 05 Feb 2015 01:57:43 +0100 + +gcc-5 (5-20150203-0ubuntu12) vivid; urgency=medium + + * Don't disable bootstrap mode for the jit build on arm64, gets + miscompiled. + + -- Matthias Klose Tue, 03 Feb 2015 13:39:02 +0100 + +gcc-5 (5-20150203-0ubuntu11) vivid; urgency=medium + + * Update to SVN 20150203. + + -- Matthias Klose Tue, 03 Feb 2015 13:39:02 +0100 + +gcc-5 (5-20150129-0ubuntu2) vivid; urgency=medium + + * Fix the libstdc++ build. + + -- Matthias Klose Thu, 29 Jan 2015 19:09:16 +0100 + +gcc-5 (5-20150129-0ubuntu1) vivid; urgency=medium + + * Update to SVN 20150129. + * Configure --with-default-libstdcxx-abi=c++11 for development, + --with-default-libstdcxx-abi=c++98 for backports. + + -- Matthias Klose Thu, 29 Jan 2015 17:47:03 +0100 + +gcc-5 (5-20150128-0ubuntu1) vivid; urgency=medium + + * Update to SVN 20150128. + * Update GDC for GCC 5. + * Build GDC multilib packages. + * Update cross-install-location.diff for gcc-5. Closes: #776100. + * Re-enable libgccjit on AArch64. + + -- Matthias Klose Wed, 28 Jan 2015 23:30:09 +0100 + +gcc-5 (5-20150127-0ubuntu2) vivid; urgency=medium + + * Disable libgccjit on AArch64, compiler issue + + -- Matthias Klose Tue, 27 Jan 2015 18:05:12 +0100 + +gcc-5 (5-20150127-0ubuntu1) vivid; urgency=medium + + * Update to SVN 20150127. + * Disable libgccjit on AArch64. + + -- Matthias Klose Tue, 27 Jan 2015 14:39:03 +0100 + +gcc-5 (5-20150126-0ubuntu3) vivid; urgency=medium + + * Update to SVN 20150126. + * More symbol file updates. + * Fix libbacktrace and libsanitizer multilib builds. + * Fix libssp builds on 64bit architectures. + + -- Matthias Klose Mon, 26 Jan 2015 18:22:53 +0100 + +gcc-5 (5-20150121-0ubuntu2) vivid; urgency=medium + + * GCC 5. + * Build new binary packages libcc1-0, libgccjit0, libgccjit-5-dev, + libgccjit-5-dbg, libgccjit-5-doc. + * Update symbols files (still incomplete). + + -- Matthias Klose Tue, 20 Jan 2015 12:45:13 +0100 + +gcc-4.9 (4.9.2-10ubuntu2) vivid; urgency=medium + + * Update to SVN 20150116 (r219730) from the gcc-4_9-branch. + - Fix PR libstdc++/64476, PR libstdc++/60966, PR libstdc++/64239, + PR middle-end/63704 (ice on valid), PR target/64513 (x86), + PR rtl-optimization/64286 (wrong code), PR tree-optimization/64563 (ice), + PR middle-end/64391 (ice on valid), PR c++/54442 (ice on valid), + PR target/64358 (rs6000, wrong code), PR target/63424 (AArch64, ice on + valid), PR target/64479 (SH), PR rtl-optimization/64536, PR target/64505 + (rs6000), PR target/61413 (ARM, wrong code), PR target/64507 (SH), + PR target/64409 (x32, ice on valid), PR c++/64487 (ice on valid), + PR c++/64352, PR c++/64251 (rejects valid), PR c++/64297 (ice on valid), + PR c++/64029 (ice on valid), PR c++/63657 (diagnostic), PR c++/38958 + (diagnostic), PR c++/63658 (rejects valid), PR ada/64492 (build), + PR fortran/64528 (ice on valid), PR fortran/63733 (wrong code), + PR fortran/56867 (wrong code), PR fortran/64244 (ice on valid). + * Update the Linaro support to the 4.9-2015.01 release. + + -- Matthias Klose Fri, 16 Jan 2015 14:28:09 +0100 + +gcc-4.9 (4.9.2-10ubuntu1) vivid; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 31 Dec 2014 04:54:06 +0100 + +gcc-4.9 (4.9.2-10) unstable; urgency=medium + + * Really add x32 multilib packages for i386 cross builds to the control file. + Closes: #773265. + * Use the final binutils 2.25 release. + * Tighten the gcc-4.9 dependency on libgcc-4.9-dev (YunQiang Su). + + -- Matthias Klose Thu, 25 Dec 2014 18:10:51 +0100 + +gcc-4.9 (4.9.2-9) unstable; urgency=medium + + * Update to SVN 20141220 (r218987) from the gcc-4_9-branch. + - Fix PR libstdc++/64302, PR libstdc++/64303, PR c++/60955, + PR rtl-optimization/64010 (wrong code), PR sanitizer/64265 (wrong code). + * Add x32 multilib packages for i386 cross builds to the control file. + Closes: #773265. + * Fix mips64el multilib cross builds. Closes: #772665. + * libphobos-4.x-dev: Stop providing libphobos-dev, now a real package. + + -- Matthias Klose Sat, 20 Dec 2014 07:47:15 +0100 + +gcc-4.9 (4.9.2-8) unstable; urgency=medium + + * Update to SVN 20141214 (r218721) from the gcc-4_9-branch. + - Fix PR tree-optimization/62021 (ice), PR middle-end/64225 (missed + optimization), PR libstdc++/64239, PR rtl-optimization/64037 (wrong + code), PR target/64200 (x86, ice), PR tree-optimization/64269 (ice). + * Don't build libphobos multilibs, there is no gdc-multilib build. + * Really disable the sanitizer libs on powerpc, ppc64 and ppc64el. + * Paste config.log files to stdout in case of build errors. + + -- Matthias Klose Sun, 14 Dec 2014 18:43:49 +0100 + +gcc-4.9 (4.9.2-7ubuntu3) vivid; urgency=medium + + * Fix the powerpc build. + + -- Matthias Klose Thu, 11 Dec 2014 15:52:15 +0100 + +gcc-4.9 (4.9.2-7ubuntu2) vivid; urgency=medium + + * Update to SVN 20141211 (r218620) from the gcc-4_9-branch. + - Fix PR tree-optimization/62021 (ice), PR middle-end/64225 (missed + optimization). + * Don't build libphobos multilibs, there is no gdc-multilib built. + * Really disable the sanitizer libs on powerpc, ppc64 and ppc64el. + * Paste config.log files to stdout in case of build errors. + + -- Matthias Klose Thu, 11 Dec 2014 12:04:13 +0100 + +gcc-4.9 (4.9.2-7ubuntu1) vivid; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Wed, 10 Dec 2014 15:27:33 +0100 + +gcc-4.9 (4.9.2-7) unstable; urgency=medium + + * Update to SVN 20141210 (r218575) from the gcc-4_9-branch. + - Fix PR libstdc++/64203, PR target/55351 (SH), PR tree-optimization/61686, + PR bootstrap/64213. + - libgcc hppa backports. + * Fix cross builds with dpkg-architecture unconditionally exporting + target variables. For now specify the target architecture + in debian/target. This still needs to work with older dpkg versions, + so don't "simplify" the packaging. Closes: #768167. + + -- Matthias Klose Wed, 10 Dec 2014 13:32:42 +0100 + +gcc-4.9 (4.9.2-6ubuntu1) vivid; urgency=medium + + * Merge with Debian; remaining changes: + - Build from upstream sources. + + -- Matthias Klose Tue, 09 Dec 2014 13:47:24 +0100 + +# For older changelog entries, run 'apt-get changelog gcc-4.9-base' --- gcc-7-7.2.0.orig/debian/compat +++ gcc-7-7.2.0/debian/compat @@ -0,0 +1 @@ +9 --- gcc-7-7.2.0.orig/debian/control +++ gcc-7-7.2.0/debian/control @@ -0,0 +1,3103 @@ +Source: gcc-7 +Section: devel +Priority: optional +Maintainer: Ubuntu Core developers +XSBC-Original-Maintainer: Debian GCC Maintainers +Uploaders: Matthias Klose +Standards-Version: 4.1.0 +Build-Depends: debhelper (>= 9.20141010), dpkg-dev (>= 1.17.14), + g++-multilib [amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32] , + libc6.1-dev (>= 2.13-0ubuntu6) [alpha ia64] | libc0.3-dev (>= 2.13-0ubuntu6) [hurd-i386] | libc0.1-dev (>= 2.13-0ubuntu6) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= 2.13-0ubuntu6), libc6-dev (>= 2.13-31) [armel armhf], libc6-dev-amd64 [i386 x32], libc6-dev-sparc64 [sparc], libc6-dev-sparc [sparc64], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64 x32], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 mipsn32 mipsn32el mips64 mips64el s390x sparc64 x32], libn32gcc1 [mips mipsel mips64 mips64el], lib64gcc1 [i386 mips mipsel mipsn32 mipsn32el powerpc sparc s390 x32], libc6-dev-mips64 [mips mipsel mipsn32 mipsn32el], libc6-dev-mipsn32 [mips mipsel mips64 mips64el], libc6-dev-mips32 [mipsn32 mipsn32el mips64 mips64el], libc6-dev-x32 [amd64 i386], libx32gcc1 [amd64 i386], libc6-dev-armhf [armel], libhfgcc1 [armel], libc6-dev-armel [armhf], libsfgcc1 [armhf], libc6.1-dbg [alpha ia64] | libc0.3-dbg [hurd-i386] | libc0.1-dbg [kfreebsd-i386 kfreebsd-amd64] | libc6-dbg, + kfreebsd-kernel-headers (>= 0.84) [kfreebsd-any], linux-libc-dev [m68k], + m4, libtool, autoconf2.64, + libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], + autogen , gawk, lzma, xz-utils, patchutils, + zlib1g-dev, systemtap-sdt-dev [linux-any kfreebsd-any hurd-any], + binutils:native (>= 2.29.1) | binutils-multiarch:native (>= 2.29.1), binutils-hppa64-linux-gnu:native (>= 2.29.1) [hppa amd64 i386 x32], + gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, + gdb:native, nvptx-tools [amd64], + texinfo (>= 4.3), locales, sharutils, + procps, gnat-7:native [!m32r !sh3 !sh3eb !sh4eb !m68k], g++-7:native, netbase, + libisl-dev, libmpc-dev (>= 1.0), libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~), lib32z1-dev [amd64 kfreebsd-amd64], lib64z1-dev [i386], libx32z1-dev [amd64 kfreebsd-amd64 i386], + dejagnu [!m68k !hurd-amd64 !hurd-i386 !hurd-alpha !kfreebsd-amd64 !kfreebsd-i386 !kfreebsd-alpha], realpath (>= 1.9.12), chrpath, lsb-release, quilt, + pkg-config, libgc-dev, + g++-7-alpha-linux-gnu [alpha] , gobjc-7-alpha-linux-gnu [alpha] , gfortran-7-alpha-linux-gnu [alpha] , gdc-7-alpha-linux-gnu [alpha] , gccgo-7-alpha-linux-gnu [alpha] , gnat-7-alpha-linux-gnu [alpha] , g++-7-x86-64-linux-gnu [amd64] , gobjc-7-x86-64-linux-gnu [amd64] , gfortran-7-x86-64-linux-gnu [amd64] , gdc-7-x86-64-linux-gnu [amd64] , gccgo-7-x86-64-linux-gnu [amd64] , gnat-7-x86-64-linux-gnu [amd64] , g++-7-arm-linux-gnueabi [armel] , gobjc-7-arm-linux-gnueabi [armel] , gfortran-7-arm-linux-gnueabi [armel] , gdc-7-arm-linux-gnueabi [armel] , gccgo-7-arm-linux-gnueabi [armel] , gnat-7-arm-linux-gnueabi [armel] , g++-7-arm-linux-gnueabihf [armhf] , gobjc-7-arm-linux-gnueabihf [armhf] , gfortran-7-arm-linux-gnueabihf [armhf] , gdc-7-arm-linux-gnueabihf [armhf] , gccgo-7-arm-linux-gnueabihf [armhf] , gnat-7-arm-linux-gnueabihf [armhf] , g++-7-aarch64-linux-gnu [arm64] , gobjc-7-aarch64-linux-gnu [arm64] , gfortran-7-aarch64-linux-gnu [arm64] , gdc-7-aarch64-linux-gnu [arm64] , gccgo-7-aarch64-linux-gnu [arm64] , gnat-7-aarch64-linux-gnu [arm64] , g++-7-i686-linux-gnu [i386] , gobjc-7-i686-linux-gnu [i386] , gfortran-7-i686-linux-gnu [i386] , gdc-7-i686-linux-gnu [i386] , gccgo-7-i686-linux-gnu [i386] , gnat-7-i686-linux-gnu [i386] , g++-7-mips-linux-gnu [mips] , gobjc-7-mips-linux-gnu [mips] , gfortran-7-mips-linux-gnu [mips] , gdc-7-mips-linux-gnu [mips] , gccgo-7-mips-linux-gnu [mips] , gnat-7-mips-linux-gnu [mips] , g++-7-mipsel-linux-gnu [mipsel] , gobjc-7-mipsel-linux-gnu [mipsel] , gfortran-7-mipsel-linux-gnu [mipsel] , gdc-7-mipsel-linux-gnu [mipsel] , gccgo-7-mipsel-linux-gnu [mipsel] , gnat-7-mipsel-linux-gnu [mipsel] , g++-7-mips64-linux-gnuabi64 [mips64] , gobjc-7-mips64-linux-gnuabi64 [mips64] , gfortran-7-mips64-linux-gnuabi64 [mips64] , gdc-7-mips64-linux-gnuabi64 [mips64] , gccgo-7-mips64-linux-gnuabi64 [mips64] , gnat-7-mips64-linux-gnuabi64 [mips64] , g++-7-mips64el-linux-gnuabi64 [mips64el] , gobjc-7-mips64el-linux-gnuabi64 [mips64el] , gfortran-7-mips64el-linux-gnuabi64 [mips64el] , gdc-7-mips64el-linux-gnuabi64 [mips64el] , gccgo-7-mips64el-linux-gnuabi64 [mips64el] , gnat-7-mips64el-linux-gnuabi64 [mips64el] , g++-7-powerpc-linux-gnu [powerpc] , gobjc-7-powerpc-linux-gnu [powerpc] , gfortran-7-powerpc-linux-gnu [powerpc] , gdc-7-powerpc-linux-gnu [powerpc] , gccgo-7-powerpc-linux-gnu [powerpc] , gnat-7-powerpc-linux-gnu [powerpc] , g++-7-powerpc-linux-gnuspe [powerpcspe] , gobjc-7-powerpc-linux-gnuspe [powerpcspe] , gfortran-7-powerpc-linux-gnuspe [powerpcspe] , gdc-7-powerpc-linux-gnuspe [powerpcspe] , gccgo-7-powerpc-linux-gnuspe [powerpcspe] , gnat-7-powerpc-linux-gnuspe [powerpcspe] , g++-7-powerpc64-linux-gnu [ppc64] , gobjc-7-powerpc64-linux-gnu [ppc64] , gfortran-7-powerpc64-linux-gnu [ppc64] , gdc-7-powerpc64-linux-gnu [ppc64] , gccgo-7-powerpc64-linux-gnu [ppc64] , gnat-7-powerpc64-linux-gnu [ppc64] , g++-7-powerpc64le-linux-gnu [ppc64el] , gobjc-7-powerpc64le-linux-gnu [ppc64el] , gfortran-7-powerpc64le-linux-gnu [ppc64el] , gdc-7-powerpc64le-linux-gnu [ppc64el] , gccgo-7-powerpc64le-linux-gnu [ppc64el] , gnat-7-powerpc64le-linux-gnu [ppc64el] , g++-7-m68k-linux-gnu [m68k] , gobjc-7-m68k-linux-gnu [m68k] , gfortran-7-m68k-linux-gnu [m68k] , gdc-7-m68k-linux-gnu [m68k] , g++-7-sh4-linux-gnu [sh4] , gobjc-7-sh4-linux-gnu [sh4] , gfortran-7-sh4-linux-gnu [sh4] , gnat-7-sh4-linux-gnu [sh4] , g++-7-sparc64-linux-gnu [sparc64] , gobjc-7-sparc64-linux-gnu [sparc64] , gfortran-7-sparc64-linux-gnu [sparc64] , gdc-7-sparc64-linux-gnu [sparc64] , gccgo-7-sparc64-linux-gnu [sparc64] , gnat-7-sparc64-linux-gnu [sparc64] , g++-7-s390x-linux-gnu [s390x] , gobjc-7-s390x-linux-gnu [s390x] , gfortran-7-s390x-linux-gnu [s390x] , gdc-7-s390x-linux-gnu [s390x] , gccgo-7-s390x-linux-gnu [s390x] , gnat-7-s390x-linux-gnu [s390x] , g++-7-x86-64-linux-gnux32 [x32] , gobjc-7-x86-64-linux-gnux32 [x32] , gfortran-7-x86-64-linux-gnux32 [x32] , gdc-7-x86-64-linux-gnux32 [x32] , gccgo-7-x86-64-linux-gnux32 [x32] , gnat-7-x86-64-linux-gnux32 [x32] , +Build-Depends-Indep: doxygen (>= 1.7.2), graphviz (>= 2.2), ghostscript, texlive-latex-base, xsltproc, libxml2-utils, docbook-xsl-ns +Homepage: http://gcc.gnu.org/ +Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc-7/ +Vcs-Svn: svn://anonscm.debian.org/gcccvs/branches/sid/gcc-7 + +Package: gcc-7-base +Architecture: any +Multi-Arch: same +Section: libs +Priority: required +Depends: ${misc:Depends} +Replaces: ${base:Replaces} +Breaks: ${base:Breaks} +Description: GCC, the GNU Compiler Collection (base package) + This package contains files common to all languages and libraries + contained in the GNU Compiler Collection (GCC). + +Package: libgcc1 +Architecture: any +Section: libs +Priority: required +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: libgcc1-armel [armel], libgcc1-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +Description: GCC support library + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libgcc1-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Provides: libgcc1-dbg-armel [armel], libgcc1-dbg-armhf [armhf] +Multi-Arch: same +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libgcc2 +Architecture: m68k +Section: libs +Priority: required +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +Description: GCC support library + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libgcc2-dbg +Architecture: m68k +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgcc2 (= ${gcc:EpochVersion}), ${misc:Depends} +Multi-Arch: same +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libgcc-7-dev +Architecture: any +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libgomp}, ${dep:libitm}, + ${dep:libatomic}, ${dep:libbtrace}, ${dep:libasan}, ${dep:liblsan}, + ${dep:libtsan}, ${dep:libubsan}, ${dep:libcilkrts}, ${dep:libvtv}, + ${dep:libmpx}, + ${dep:libqmath}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Replaces: gccgo-7 (<< ${gcc:Version}) +Description: GCC support library (development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: libgcc4 +Architecture: hppa +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +Section: libs +Priority: required +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GCC support library + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libgcc4-dbg +Architecture: hppa +Multi-Arch: same +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgcc4 (= ${gcc:EpochVersion}), ${misc:Depends} +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: lib64gcc1 +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Conflicts: libgcc1 (<= 1:3.3-0pre9) +Description: GCC support library (64bit) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: lib64gcc1-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64gcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: lib64gcc-7-dev +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (64bit development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: lib32gcc1 +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: GCC support library (32 bit Version) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: lib32gcc1-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: lib32gcc-7-dev +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (32 bit development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: libhfgcc1 +Architecture: armel +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Conflicts: libgcc1-armhf [armel] +Description: GCC support library (hard float ABI) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libhfgcc1-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfgcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Conflicts: libgcc1-dbg-armhf [armel] +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libhfgcc-7-dev +Architecture: armel +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (hard float ABI development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: libsfgcc1 +Architecture: armhf +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Conflicts: libgcc1-armel [armhf] +Description: GCC support library (soft float ABI) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libsfgcc1-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfgcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Conflicts: libgcc1-dbg-armel [armhf] +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libsfgcc-7-dev +Architecture: armhf +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (soft float ABI development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: libn32gcc1 +Architecture: mips mipsel mips64 mips64el +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Conflicts: libgcc1 (<= 1:3.3-0pre9) +Description: GCC support library (n32) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libn32gcc1-dbg +Architecture: mips mipsel mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libn32gcc-7-dev +Architecture: mips mipsel mips64 mips64el +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (n32 development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: libx32gcc1 +Architecture: amd64 i386 +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends} +Description: GCC support library (x32) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + +Package: libx32gcc1-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends} +Description: GCC support library (debug symbols) + Debug symbols for the GCC support library. + +Package: libx32gcc-7-dev +Architecture: amd64 i386 +Section: libdevel +Priority: optional +Recommends: ${dep:libcdev} +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +Description: GCC support library (x32 development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. + +Package: gcc-7 +Architecture: any +Section: devel +Priority: optional +Depends: cpp-7 (= ${gcc:Version}), gcc-7-base (= ${gcc:Version}), + ${dep:libcc1}, + binutils (>= ${binutils:Version}), + ${dep:libgccdev}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dep:libcdev} +Replaces: gccgo-7 (<< ${gcc:Version}), cpp-7 (<< 7.1.1-8) +Suggests: ${gcc:multilib}, gcc-7-doc (>= ${gcc:SoftVersion}), + gcc-7-locales (>= ${gcc:SoftVersion}), + libgcc1-dbg (>= ${libgcc:Version}), + libgomp1-dbg (>= ${gcc:Version}), + libitm1-dbg (>= ${gcc:Version}), + libatomic1-dbg (>= ${gcc:Version}), + libasan4-dbg (>= ${gcc:Version}), + liblsan0-dbg (>= ${gcc:Version}), + libtsan0-dbg (>= ${gcc:Version}), + libubsan0-dbg (>= ${gcc:Version}), + libcilkrts5-dbg (>= ${gcc:Version}), + libmpx2-dbg (>= ${gcc:Version}), + libquadmath0-dbg (>= ${gcc:Version}) +Provides: c-compiler +Description: GNU C compiler + This is the GNU C compiler, a fairly portable optimizing compiler for C. + +Package: gcc-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU C compiler (multilib support) + This is the GNU C compiler, a fairly portable optimizing compiler for C. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: gcc-7-test-results +Architecture: any +Section: devel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), ${misc:Depends} +Replaces: g++-5 (<< 5.2.1-28) +Description: Test results for the GCC test suite + This package contains the test results for running the GCC test suite + for a post build analysis. + +Package: gcc-7-plugin-dev +Architecture: any +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), libgmp-dev (>= 2:5.0.1~), libmpc-dev (>= 1.0), ${shlibs:Depends}, ${misc:Depends} +Description: Files for GNU GCC plugin development. + This package contains (header) files for GNU GCC plugin development. It + is only used for the development of GCC plugins, but not needed to run + plugins. + +Package: gcc-7-hppa64-linux-gnu +Architecture: hppa amd64 i386 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), + binutils-hppa64-linux-gnu | binutils-hppa64, + ${shlibs:Depends}, ${misc:Depends} +Description: GNU C compiler (cross compiler for hppa64) + This is the GNU C compiler, a fairly portable optimizing compiler for C. + +Package: cpp-7 +Architecture: any +Section: interpreters +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Suggests: gcc-7-locales (>= ${gcc:SoftVersion}) +Replaces: gccgo-7 (<< ${gcc:Version}) +Breaks: libmagics++-dev (<< 2.28.0-4), hardening-wrapper (<< 2.8+nmu3) +Description: GNU C preprocessor + A macro processor that is used automatically by the GNU C compiler + to transform programs before actual compilation. + . + This package has been separated from gcc for the benefit of those who + require the preprocessor but not the compiler. + +Package: cpp-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Description: Documentation for the GNU C preprocessor (cpp) + Documentation for the GNU C preprocessor in info format. + +Package: gcc-7-locales +Architecture: all +Section: devel +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), cpp-7 (>= ${gcc:SoftVersion}), ${misc:Depends} +Recommends: gcc-7 (>= ${gcc:SoftVersion}) +Description: GCC, the GNU compiler collection (native language support files) + Native language support for GCC. Lets GCC speak your language, + if translations are available. + . + Please do NOT submit bug reports in other languages than "C". + Always reset your language settings to use the "C" locales. + +Package: g++-7 +Architecture: any +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: c++-compiler, c++abi2-dev +Suggests: ${gxx:multilib}, gcc-7-doc (>= ${gcc:SoftVersion}), libstdc++6-7-dbg (>= ${gcc:Version}) +Description: GNU C++ compiler + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. + +Package: g++-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), g++-7 (= ${gcc:Version}), gcc-7-multilib (= ${gcc:Version}), ${dep:libcxxbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${dep:libcxxbiarchdbg} +Description: GNU C++ compiler (multilib support) + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: libgomp1 +Section: libs +Architecture: any +Provides: libgomp1-armel [armel], libgomp1-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GCC OpenMP (GOMP) support library + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libgomp1-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgomp1 (= ${gcc:Version}), ${misc:Depends} +Provides: libgomp1-dbg-armel [armel], libgomp1-dbg-armhf [armhf] +Multi-Arch: same +Description: GCC OpenMP (GOMP) support library (debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib32gomp1 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: GCC OpenMP (GOMP) support library (32bit) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib32gomp1-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32gomp1 (= ${gcc:Version}), ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (32 bit debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib64gomp1 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (64bit) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib64gomp1-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64gomp1 (= ${gcc:Version}), ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (64bit debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libn32gomp1 +Section: libs +Architecture: mips mipsel mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (n32) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libn32gomp1-dbg +Architecture: mips mipsel mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32gomp1 (= ${gcc:Version}), ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (n32 debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + +Package: libx32gomp1 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (x32) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libx32gomp1-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32gomp1 (= ${gcc:Version}), ${misc:Depends} +Description: GCC OpenMP (GOMP) support library (x32 debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + +Package: libhfgomp1 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libgomp1-armhf [armel] +Description: GCC OpenMP (GOMP) support library (hard float ABI) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libhfgomp1-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfgomp1 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libgomp1-dbg-armhf [armel] +Description: GCC OpenMP (GOMP) support library (hard float ABI debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + +Package: libsfgomp1 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libgomp1-armel [armhf] +Description: GCC OpenMP (GOMP) support library (soft float ABI) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libsfgomp1-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfgomp1 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libgomp1-dbg-armel [armhf] +Description: GCC OpenMP (GOMP) support library (soft float ABI debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + +Package: libitm1 +Section: libs +Architecture: any +Provides: libitm1-armel [armel], libitm1-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GNU Transactional Memory Library + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libitm1-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libitm1 (= ${gcc:Version}), ${misc:Depends} +Provides: libitm1-dbg-armel [armel], libitm1-dbg-armhf [armhf] +Multi-Arch: same +Description: GNU Transactional Memory Library (debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib32itm1 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: GNU Transactional Memory Library (32bit) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib32itm1-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32itm1 (= ${gcc:Version}), ${misc:Depends} +Description: GNU Transactional Memory Library (32 bit debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib64itm1 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU Transactional Memory Library (64bit) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib64itm1-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64itm1 (= ${gcc:Version}), ${misc:Depends} +Description: GNU Transactional Memory Library (64bit debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +#Package: libn32itm`'ITM_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: GNU Transactional Memory Library (n32) +# GNU Transactional Memory Library (libitm) provides transaction support for +# accesses to the memory of a process, enabling easy-to-use synchronization of +# accesses to shared memory by several threads. + +#Package: libn32itm`'ITM_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(itm`'ITM_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: GNU Transactional Memory Library (n32 debug symbols) +# GNU Transactional Memory Library (libitm) provides transaction support for +# accesses to the memory of a process, enabling easy-to-use synchronization of +# accesses to shared memory by several threads. + +Package: libx32itm1 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU Transactional Memory Library (x32) + This manual documents the usage and internals of libitm. It provides + transaction support for accesses to the memory of a process, enabling + easy-to-use synchronization of accesses to shared memory by several threads. + +Package: libx32itm1-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32itm1 (= ${gcc:Version}), ${misc:Depends} +Description: GNU Transactional Memory Library (x32 debug symbols) + This manual documents the usage and internals of libitm. It provides + transaction support for accesses to the memory of a process, enabling + easy-to-use synchronization of accesses to shared memory by several threads. + +Package: libhfitm1 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libitm1-armhf [armel] +Description: GNU Transactional Memory Library (hard float ABI) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libhfitm1-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfitm1 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libitm1-armel [armhf] +Description: GNU Transactional Memory Library (hard float ABI debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libsfitm1 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU Transactional Memory Library (soft float ABI) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libsfitm1-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfitm1 (= ${gcc:Version}), ${misc:Depends} +Description: GNU Transactional Memory Library (soft float ABI debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libatomic1 +Section: libs +Architecture: any +Provides: libatomic1-armel [armel], libatomic1-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: support library providing __atomic built-in functions + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libatomic1-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libatomic1 (= ${gcc:Version}), ${misc:Depends} +Provides: libatomic1-dbg-armel [armel], libatomic1-dbg-armhf [armhf] +Multi-Arch: same +Description: support library providing __atomic built-in functions (debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib32atomic1 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: support library providing __atomic built-in functions (32bit) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib32atomic1-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32atomic1 (= ${gcc:Version}), ${misc:Depends} +Description: support library providing __atomic built-in functions (32 bit debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib64atomic1 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: support library providing __atomic built-in functions (64bit) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib64atomic1-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64atomic1 (= ${gcc:Version}), ${misc:Depends} +Description: support library providing __atomic built-in functions (64bit debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libn32atomic1 +Section: libs +Architecture: mips mipsel mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: support library providing __atomic built-in functions (n32) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libn32atomic1-dbg +Architecture: mips mipsel mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32atomic1 (= ${gcc:Version}), ${misc:Depends} +Description: support library providing __atomic built-in functions (n32 debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libx32atomic1 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: support library providing __atomic built-in functions (x32) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libx32atomic1-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32atomic1 (= ${gcc:Version}), ${misc:Depends} +Description: support library providing __atomic built-in functions (x32 debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libhfatomic1 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libatomic1-armhf [armel] +Description: support library providing __atomic built-in functions (hard float ABI) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libhfatomic1-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfatomic1 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libatomic1-armel [armhf] +Description: support library providing __atomic built-in functions (hard float ABI debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libsfatomic1 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: support library providing __atomic built-in functions (soft float ABI) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libsfatomic1-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfatomic1 (= ${gcc:Version}), ${misc:Depends} +Description: support library providing __atomic built-in functions (soft float ABI debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libasan4 +Section: libs +Architecture: any +Provides: libasan4-armel [armel], libasan4-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libasan4-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libasan4 (= ${gcc:Version}), ${misc:Depends} +Provides: libasan4-dbg-armel [armel], libasan4-dbg-armhf [armhf] +Multi-Arch: same +Description: AddressSanitizer -- a fast memory error detector (debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib32asan4 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: AddressSanitizer -- a fast memory error detector (32bit) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib32asan4-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32asan4 (= ${gcc:Version}), ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (32 bit debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib64asan4 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (64bit) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib64asan4-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64asan4 (= ${gcc:Version}), ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (64bit debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +#Package: libn32asan`'ASAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(extra)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: AddressSanitizer -- a fast memory error detector (n32) +# AddressSanitizer (ASan) is a fast memory error detector. It finds +# use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +#Package: libn32asan`'ASAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(asan`'ASAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: AddressSanitizer -- a fast memory error detector (n32 debug symbols) +# AddressSanitizer (ASan) is a fast memory error detector. It finds +# use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libx32asan4 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (x32) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libx32asan4-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32asan4 (= ${gcc:Version}), ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (x32 debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libhfasan4 +Section: libs +Architecture: armel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libasan4-armhf [armel] +Description: AddressSanitizer -- a fast memory error detector (hard float ABI) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libhfasan4-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfasan4 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libasan4-armel [armhf] +Description: AddressSanitizer -- a fast memory error detector (hard float ABI debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libsfasan4 +Section: libs +Architecture: armhf +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (soft float ABI) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libsfasan4-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfasan4 (= ${gcc:Version}), ${misc:Depends} +Description: AddressSanitizer -- a fast memory error detector (soft float ABI debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: liblsan0 +Section: libs +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: LeakSanitizer -- a memory leak detector (runtime) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +Package: liblsan0-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), liblsan0 (= ${gcc:Version}), ${misc:Depends} +Multi-Arch: same +Description: LeakSanitizer -- a memory leak detector (debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +Package: lib32lsan0 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: LeakSanitizer -- a memory leak detector (32bit) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +Package: lib32lsan0-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32lsan0 (= ${gcc:Version}), ${misc:Depends} +Description: LeakSanitizer -- a memory leak detector (32 bit debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +#Package: lib64lsan`'LSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (64bit) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +#Package: lib64lsan`'LSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(lsan`'LSAN_SO,64,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (64bit debug symbols) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +#Package: libn32lsan`'LSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (n32) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +#Package: libn32lsan`'LSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(lsan`'LSAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (n32 debug symbols) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +Package: libx32lsan0 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: LeakSanitizer -- a memory leak detector (x32) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +Package: libx32lsan0-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32lsan0 (= ${gcc:Version}), ${misc:Depends} +Description: LeakSanitizer -- a memory leak detector (x32 debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +Package: libtsan0 +Section: libs +Architecture: any +Provides: libtsan0-armel [armel], libtsan0-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: ThreadSanitizer -- a Valgrind-based detector of data races (runtime) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libtsan0-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libtsan0 (= ${gcc:Version}), ${misc:Depends} +Provides: libtsan0-dbg-armel [armel], libtsan0-dbg-armhf [armhf] +Multi-Arch: same +Description: ThreadSanitizer -- a Valgrind-based detector of data races (debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libubsan0 +Section: libs +Architecture: any +Provides: libubsan0-armel [armel], libubsan0-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (runtime) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libubsan0-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libubsan0 (= ${gcc:Version}), ${misc:Depends} +Provides: libubsan0-dbg-armel [armel], libubsan0-dbg-armhf [armhf] +Multi-Arch: same +Description: UBSan -- undefined behaviour sanitizer (debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib32ubsan0 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: UBSan -- undefined behaviour sanitizer (32bit) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib32ubsan0-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32ubsan0 (= ${gcc:Version}), ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (32 bit debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib64ubsan0 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (64bit) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib64ubsan0-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64ubsan0 (= ${gcc:Version}), ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (64bit debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +#Package: libn32ubsan`'UBSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: UBSan -- undefined behaviour sanitizer (n32) +# UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. +# Various computations will be instrumented to detect undefined behavior +# at runtime. Available for C and C++. + +#Package: libn32ubsan`'UBSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: UBSan -- undefined behaviour sanitizer (n32 debug symbols) +# UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. +# Various computations will be instrumented to detect undefined behavior +# at runtime. Available for C and C++. + +Package: libx32ubsan0 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (x32) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libx32ubsan0-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32ubsan0 (= ${gcc:Version}), ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (x32 debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libhfubsan0 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libubsan0-armhf [armel] +Description: UBSan -- undefined behaviour sanitizer (hard float ABI) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libhfubsan0-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfubsan0 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libubsan0-armel [armhf] +Description: UBSan -- undefined behaviour sanitizer (hard float ABI debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libsfubsan0 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (soft float ABI) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libsfubsan0-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfubsan0 (= ${gcc:Version}), ${misc:Depends} +Description: UBSan -- undefined behaviour sanitizer (soft float ABI debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libcilkrts5 +Section: libs +Architecture: any +Provides: libcilkrts5-armel [armel], libcilkrts5-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Intel Cilk Plus language extensions (runtime) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libcilkrts5-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libcilkrts5 (= ${gcc:Version}), ${misc:Depends} +Provides: libcilkrts5-dbg-armel [armel], libcilkrts5-dbg-armhf [armhf] +Multi-Arch: same +Description: Intel Cilk Plus language extensions (debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib32cilkrts5 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: Intel Cilk Plus language extensions (32bit) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib32cilkrts5-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32cilkrts5 (= ${gcc:Version}), ${misc:Depends} +Description: Intel Cilk Plus language extensions (32 bit debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib64cilkrts5 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Intel Cilk Plus language extensions (64bit) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib64cilkrts5-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64cilkrts5 (= ${gcc:Version}), ${misc:Depends} +Description: Intel Cilk Plus language extensions (64bit debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libx32cilkrts5 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Intel Cilk Plus language extensions (x32) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libx32cilkrts5-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32cilkrts5 (= ${gcc:Version}), ${misc:Depends} +Description: Intel Cilk Plus language extensions (x32 debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libhfcilkrts5 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libcilkrts5-armhf [armel] +Description: Intel Cilk Plus language extensions (hard float ABI) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libhfcilkrts5-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfcilkrts5 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libcilkrts5-armel [armhf] +Description: Intel Cilk Plus language extensions (hard float ABI debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libsfcilkrts5 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Intel Cilk Plus language extensions (soft float ABI) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libsfcilkrts5-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfcilkrts5 (= ${gcc:Version}), ${misc:Depends} +Description: Intel Cilk Plus language extensions (soft float ABI debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libmpx2 +Section: libs +Architecture: any +Provides: libmpx2-armel [armel], libmpx2-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libmpx0 (<< 6-20160120-1) +Description: Intel memory protection extensions (runtime) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libmpx2-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libmpx2 (= ${gcc:Version}), ${misc:Depends} +Provides: libmpx2-dbg-armel [armel], libmpx2-dbg-armhf [armhf] +Multi-Arch: same +Description: Intel memory protection extensions (debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib32mpx2 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Replaces: lib32mpx0 (<< 6-20160120-1) +Description: Intel memory protection extensions (32bit) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib32mpx2-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32mpx2 (= ${gcc:Version}), ${misc:Depends} +Description: Intel memory protection extensions (32 bit debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib64mpx2 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64mpx0 (<< 6-20160120-1) +Description: Intel memory protection extensions (64bit) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib64mpx2-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64mpx2 (= ${gcc:Version}), ${misc:Depends} +Description: Intel memory protection extensions (64bit debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libquadmath0 +Section: libs +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GCC Quad-Precision Math Library + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libquadmath0-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libquadmath0 (= ${gcc:Version}), ${misc:Depends} +Multi-Arch: same +Description: GCC Quad-Precision Math Library (debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: lib32quadmath0 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: GCC Quad-Precision Math Library (32bit) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: lib32quadmath0-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32quadmath0 (= ${gcc:Version}), ${misc:Depends} +Description: GCC Quad-Precision Math Library (32 bit debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: lib64quadmath0 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC Quad-Precision Math Library (64bit) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: lib64quadmath0-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64quadmath0 (= ${gcc:Version}), ${misc:Depends} +Description: GCC Quad-Precision Math Library (64bit debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +#Package: libn32quadmath`'QMATH_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: GCC Quad-Precision Math Library (n32) +# A library, which provides quad-precision mathematical functions on targets +# supporting the __float128 datatype. The library is used to provide on such +# targets the REAL(16) type in the GNU Fortran compiler. + +#Package: libn32quadmath`'QMATH_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(quadmath`'QMATH_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: GCC Quad-Precision Math Library (n32 debug symbols) +# A library, which provides quad-precision mathematical functions on targets +# supporting the __float128 datatype. + +Package: libx32quadmath0 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC Quad-Precision Math Library (x32) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libx32quadmath0-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32quadmath0 (= ${gcc:Version}), ${misc:Depends} +Description: GCC Quad-Precision Math Library (x32 debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: libhfquadmath0 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC Quad-Precision Math Library (hard float ABI) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libhfquadmath0-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfquadmath0 (= ${gcc:Version}), ${misc:Depends} +Description: GCC Quad-Precision Math Library (hard float ABI debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: libsfquadmath0 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: GCC Quad-Precision Math Library (soft float ABI) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libsfquadmath0-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfquadmath0 (= ${gcc:Version}), ${misc:Depends} +Description: GCC Quad-Precision Math Library (hard float ABI debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: libcc1-0 +Section: libs +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GCC cc1 plugin for GDB + libcc1 is a plugin for GDB. + +Package: libgccjit0 +Section: libs +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Breaks: python-gccjit (<< 0.4-4), python3-gccjit (<< 0.4-4) +Description: GCC just-in-time compilation (shared library) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: libgccjit0-dbg +Section: debug +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgccjit0 (= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +Breaks: libgccjit-5-dbg, libgccjit-6-dbg +Replaces: libgccjit-5-dbg, libgccjit-6-dbg +Description: GCC just-in-time compilation (debug information) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: libgccjit-7-doc +Section: doc +Architecture: all +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), ${misc:Depends} +Conflicts: libgccjit-5-doc, libgccjit-6-doc +Description: GCC just-in-time compilation (documentation) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: libgccjit-7-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgccjit0 (>= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +Suggests: libgccjit-7-dbg +Description: GCC just-in-time compilation (development files) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: gobjc++-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gobjc-7 (= ${gcc:Version}), g++-7 (= ${gcc:Version}), ${shlibs:Depends}, libobjc-7-dev (= ${gcc:Version}), ${misc:Depends} +Suggests: ${gobjcxx:multilib}, gcc-7-doc (>= ${gcc:SoftVersion}) +Provides: objc++-compiler +Description: GNU Objective-C++ compiler + This is the GNU Objective-C++ compiler, which compiles + Objective-C++ on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +Package: gobjc++-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gobjc++-7 (= ${gcc:Version}), g++-7-multilib (= ${gcc:Version}), gobjc-7-multilib (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GNU Objective-C++ compiler (multilib support) + This is the GNU Objective-C++ compiler, which compiles Objective-C++ on + platforms supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: gobjc-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc-7-dev (= ${gcc:Version}), ${misc:Depends} +Suggests: ${gobjc:multilib}, gcc-7-doc (>= ${gcc:SoftVersion}), libobjc4-dbg (>= ${gcc:Version}) +Provides: objc-compiler +Description: GNU Objective-C compiler + This is the GNU Objective-C compiler, which compiles + Objective-C on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +Package: gobjc-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gobjc-7 (= ${gcc:Version}), gcc-7-multilib (= ${gcc:Version}), ${dep:libobjcbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU Objective-C compiler (multilib support) + This is the GNU Objective-C compiler, which compiles Objective-C on platforms + supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: libobjc-7-dev +Architecture: any +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgcc-7-dev (= ${gcc:Version}), libobjc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Description: Runtime library for GNU Objective-C applications (development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: lib64objc-7-dev +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib64gcc-7-dev (= ${gcc:Version}), lib64objc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (64bit development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: lib32objc-7-dev +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib32gcc-7-dev (= ${gcc:Version}), lib32objc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (32bit development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libn32objc-7-dev +Architecture: mips mipsel mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libn32gcc-7-dev (= ${gcc:Version}), libn32objc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (n32 development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libx32objc-7-dev +Architecture: amd64 i386 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libx32gcc-7-dev (= ${gcc:Version}), libx32objc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (x32 development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libhfobjc-7-dev +Architecture: armel +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libhfgcc-7-dev (= ${gcc:Version}), libhfobjc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (hard float ABI development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libsfobjc-7-dev +Architecture: armhf +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libsfgcc-7-dev (= ${gcc:Version}), libsfobjc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (soft float development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libobjc4 +Section: libs +Architecture: any +Provides: libobjc4-armel [armel], libobjc4-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications + Library needed for GNU ObjC applications linked against the shared library. + +Package: libobjc4-dbg +Section: debug +Architecture: any +Provides: libobjc4-dbg-armel [armel], libobjc4-dbg-armhf [armhf] +Multi-Arch: same +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libobjc4 (= ${gcc:Version}), libgcc1-dbg (>= ${libgcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib64objc4 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (64bit) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib64objc4-dbg +Section: debug +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64objc4 (= ${gcc:Version}), lib64gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (64 bit debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib32objc4 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: Runtime library for GNU Objective-C applications (32bit) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib32objc4-dbg +Section: debug +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32objc4 (= ${gcc:Version}), lib32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (32 bit debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libn32objc4 +Section: libs +Architecture: mips mipsel mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (n32) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libn32objc4-dbg +Section: debug +Architecture: mips mipsel mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32objc4 (= ${gcc:Version}), libn32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (n32 debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libx32objc4 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (x32) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libx32objc4-dbg +Section: debug +Architecture: amd64 i386 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32objc4 (= ${gcc:Version}), libx32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (x32 debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libhfobjc4 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libobjc4-armhf [armel] +Description: Runtime library for GNU Objective-C applications (hard float ABI) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libhfobjc4-dbg +Section: debug +Architecture: armel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfobjc4 (= ${gcc:Version}), libhfgcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Conflicts: libobjc4-dbg-armhf [armel] +Description: Runtime library for GNU Objective-C applications (hard float ABI debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libsfobjc4 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libobjc4-armel [armhf] +Description: Runtime library for GNU Objective-C applications (soft float ABI) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libsfobjc4-dbg +Section: debug +Architecture: armhf +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfobjc4 (= ${gcc:Version}), libsfgcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends} +Conflicts: libobjc4-dbg-armel [armhf] +Description: Runtime library for GNU Objective-C applications (soft float ABI debug symbols) + Library needed for GNU ObjC applications linked against the shared library. + +Package: gfortran-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), libgfortran-7-dev (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: fortran95-compiler, ${fortran:mod-version} +Suggests: ${gfortran:multilib}, gfortran-7-doc, + libgfortran4-dbg (>= ${gcc:Version}), + libcoarrays-dev +Description: GNU Fortran compiler + This is the GNU Fortran compiler, which compiles + Fortran on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +Package: gfortran-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gfortran-7 (= ${gcc:Version}), gcc-7-multilib (= ${gcc:Version}), ${dep:libgfortranbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +Description: GNU Fortran compiler (multilib support) + This is the GNU Fortran compiler, which compiles Fortran on platforms + supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: gfortran-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Description: Documentation for the GNU Fortran compiler (gfortran) + Documentation for the GNU Fortran compiler in info format. + +Package: libgfortran-7-dev +Architecture: any +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgcc-7-dev (= ${gcc:Version}), libgfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Description: Runtime library for GNU Fortran applications (development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: lib64gfortran-7-dev +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib64gcc-7-dev (= ${gcc:Version}), lib64gfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (64bit development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: lib32gfortran-7-dev +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib32gcc-7-dev (= ${gcc:Version}), lib32gfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (32bit development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libn32gfortran-7-dev +Architecture: mips mipsel mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libn32gcc-7-dev (= ${gcc:Version}), libn32gfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (n32 development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libx32gfortran-7-dev +Architecture: amd64 i386 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libx32gcc-7-dev (= ${gcc:Version}), libx32gfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (x32 development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libhfgfortran-7-dev +Architecture: armel +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libhfgcc-7-dev (= ${gcc:Version}), libhfgfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (hard float ABI development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libsfgfortran-7-dev +Architecture: armhf +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libsfgcc-7-dev (= ${gcc:Version}), libsfgfortran4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (soft float ABI development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libgfortran4 +Section: libs +Architecture: any +Provides: libgfortran4-armel [armel], libgfortran4-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libgfortran4-dbg +Section: debug +Architecture: any +Provides: libgfortran4-dbg-armel [armel], libgfortran4-dbg-armhf [armhf] +Multi-Arch: same +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgfortran4 (= ${gcc:Version}), libgcc1-dbg (>= ${libgcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Fortran applications (debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib64gfortran4 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (64bit) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib64gfortran4-dbg +Section: debug +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64gfortran4 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Fortran applications (64bit debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib32gfortran4 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: Runtime library for GNU Fortran applications (32bit) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib32gfortran4-dbg +Section: debug +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32gfortran4 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Fortran applications (32 bit debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libn32gfortran4 +Section: libs +Architecture: mips mipsel mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (n32) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libn32gfortran4-dbg +Section: debug +Architecture: mips mipsel mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32gfortran4 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Fortran applications (n32 debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libx32gfortran4 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (x32) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libx32gfortran4-dbg +Section: debug +Architecture: amd64 i386 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32gfortran4 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Fortran applications (x32 debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libhfgfortran4 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libgfortran4-armhf [armel] +Description: Runtime library for GNU Fortran applications (hard float ABI) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libhfgfortran4-dbg +Section: debug +Architecture: armel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfgfortran4 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libgfortran4-dbg-armhf [armel] +Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libsfgfortran4 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: libgfortran4-armel [armhf] +Description: Runtime library for GNU Fortran applications (soft float ABI) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libsfgfortran4-dbg +Section: debug +Architecture: armhf +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfgfortran4 (= ${gcc:Version}), ${misc:Depends} +Conflicts: libgfortran4-dbg-armel [armhf] +Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: gccgo-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), libgo11 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: go-compiler +Suggests: ${go:multilib}, gccgo-7-doc, libgo11-dbg (>= ${gcc:Version}) +Conflicts: ${golang:Conflicts} +Description: GNU Go compiler + This is the GNU Go compiler, which compiles Go on platforms supported + by the gcc compiler. It uses the gcc backend to generate optimized code. + +Package: gccgo-7-multilib +Architecture: amd64 armel armhf i386 kfreebsd-amd64 mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc ppc64 s390 s390x sparc sparc64 x32 +Section: devel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gccgo-7 (= ${gcc:Version}), gcc-7-multilib (= ${gcc:Version}), ${dep:libgobiarch}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${dep:libgobiarchdbg} +Description: GNU Go compiler (multilib support) + This is the GNU Go compiler, which compiles Go on platforms supported + by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: gccgo-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Description: Documentation for the GNU Go compiler (gccgo) + Documentation for the GNU Go compiler in info format. + +Package: libgo11 +Section: libs +Architecture: any +Provides: libgo11-armel [armel], libgo11-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libgo3, libgo8 +Description: Runtime library for GNU Go applications + Library needed for GNU Go applications linked against the + shared library. + +Package: libgo11-dbg +Section: debug +Architecture: any +Provides: libgo11-dbg-armel [armel], libgo11-dbg-armhf [armhf] +Multi-Arch: same +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgo11 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Go applications (debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. + +Package: lib64go11 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64go3, lib64go8 +Description: Runtime library for GNU Go applications (64bit) + Library needed for GNU Go applications linked against the + shared library. + +Package: lib64go11-dbg +Section: debug +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64go11 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Go applications (64bit debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. + +Package: lib32go11 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Replaces: lib32go3, lib32go8 +Description: Runtime library for GNU Go applications (32bit) + Library needed for GNU Go applications linked against the + shared library. + +Package: lib32go11-dbg +Section: debug +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32go11 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Go applications (32 bit debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. + +Package: libn32go11 +Section: libs +Architecture: mips mipsel mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libn32go3, libn32go8 +Description: Runtime library for GNU Go applications (n32) + Library needed for GNU Go applications linked against the + shared library. + +Package: libn32go11-dbg +Section: debug +Architecture: mips mipsel mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32go11 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Go applications (n32 debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. + +Package: libx32go11 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libx32go3, libx32go8 +Description: Runtime library for GNU Go applications (x32) + Library needed for GNU Go applications linked against the + shared library. + +Package: libx32go11-dbg +Section: debug +Architecture: amd64 i386 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32go11 (= ${gcc:Version}), ${misc:Depends} +Description: Runtime library for GNU Go applications (x32 debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. + +Package: libstdc++6 +Architecture: any +Section: libs +Priority: important +Depends: gcc-7-base (= ${gcc:Version}), ${dep:libc}, ${shlibs:Depends}, ${misc:Depends} +Provides: libstdc++6-armel [armel], libstdc++6-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks}, libantlr-dev (<= 2.7.7+dfsg-6), libaqsis1 (<= 1.8.2-1), libassimp3 (<= 3.0~dfsg-4), blockattack (<= 1.4.1+ds1-2.1build2), boo (<= 0.9.5~git20110729.r1.202a430-2), libboost-date-time1.55.0, libcpprest2.2 (<= 2.2.0-1), printer-driver-brlaser (<= 3-3), c++-annotations (<= 10.2.0-1), chromium-browser (<= 43.0.2357.130-0ubuntu2), clustalx (<= 2.1+lgpl-2), libdavix0 (<= 0.4.0-1build1), libdballe6 (<= 6.8-1), dff (<= 1.3.0+dfsg.1-4.1build2), libdiet-sed2.8 (<= 2.8.0-1build3), libdiet-client2.8 (<= 2.8.0-1build3), libdiet-admin2.8 (<= 2.8.0-1build3), libkgeomap2 (<= 4:15.04.2-0ubuntu1), libmediawiki1 (<= 1.0~digikam4.10.0-0ubuntu2), libkvkontakte1 (<= 1.0~digikam4.10.0-0ubuntu2), emscripten (<= 1.22.1-1), ergo (<= 3.4.0-1), fceux (<= 2.2.2+dfsg0-1), flush (<= 0.9.12-3.1ubuntu1), libfreefem++ (<= 3.37.1-1), freeorion (<= 0.4.4+git20150327-2), fslview (<= 4.0.1-4), fwbuilder (<= 5.1.0-4), libgazebo5 (<= 5.0.1+dfsg-2.1), libgetfem4++ (<= 4.2.1~beta1~svn4482~dfsg-3ubuntu3), libgmsh2 (<= 2.8.5+dfsg-1.1ubuntu1), gnote (<= 3.16.2-1), gnudatalanguage (<= 0.9.5-2build1), python-healpy (<= 1.8.1-1), innoextract (<= 1.4-1build1), libinsighttoolkit4.6 (<= 4.6.0-3ubuntu3), libdap17 (<= 3.14.0-2), libdapclient6 (<= 3.14.0-2), libdapserver7 (<= 3.14.0-2), libkolabxml1 (<= 1.1.0-3), libpqxx-4.0 (<= 4.0.1+dfsg-3ubuntu1), libreoffice-core (<= 1:4.4.4~rc3-0ubuntu1), librime1 (<= 1.2+dfsg-2), libwibble-dev (<= 1.1-1), lightspark (<= 0.7.2+git20150512-2), libmarisa0 (<= 0.2.4-8build1), mira-assembler (<= 4.9.5-1), mongodb (<= 1:2.6.3-0ubuntu7), mongodb-server (<= 1:2.6.3-0ubuntu7), ncbi-blast+ (<= 2.2.30-4), libogre-1.8.0 (<= 1.8.1+dfsg-0ubuntu5), libogre-1.9.0 (<= 1.9.0+dfsg1-4), openscad (<= 2014.03+dfsg-1build1), libopenwalnut1 (<= 1.4.0~rc1+hg3a3147463ee2-1ubuntu2), passepartout (<= 0.7.1-1.1), pdf2djvu (<= 0.7.19-1ubuntu2), photoprint (<= 0.4.2~pre2-2.3), plastimatch (<= 1.6.2+dfsg-1), plee-the-bear (<= 0.6.0-3.1), povray (<= 1:3.7.0.0-8), powertop (<= 2.6.1-1), psi4 (<= 4.0~beta5+dfsg-2build1), python3-taglib (<= 0.3.6+dfsg-2build2), realtimebattle (<= 1.0.8-14), ruby-passenger (<= 4.0.53-1), libapache2-mod-passenger (<= 4.0.53-1), sqlitebrowser (<= 3.5.1-3), tecnoballz (<= 0.93.1-6), wesnoth-1.12-core (<= 1:1.12.4-1), widelands (<= 1:18-3build1), libwreport2 (<= 2.14-1), xflr5 (<= 6.09.06-2), libxmltooling6 (<= 1.5.3-2.1), +Conflicts: scim (<< 1.4.2-1) +Replaces: libstdc++6-7-dbg (<< 4.9.0-3) +Description: GNU Standard C++ Library v3 + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: lib32stdc++6 +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Description: GNU Standard C++ Library v3 (32 bit Version) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + +Package: lib64stdc++6 +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib64gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GNU Standard C++ Library v3 (64bit) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libn32stdc++6 +Architecture: mips mipsel mips64 mips64el +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libn32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GNU Standard C++ Library v3 (n32) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libx32stdc++6 +Architecture: amd64 i386 +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libx32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: GNU Standard C++ Library v3 (x32) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libhfstdc++6 +Architecture: armel +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libhfgcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: libstdc++6-armhf [armel] +Description: GNU Standard C++ Library v3 (hard float ABI) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libsfstdc++6 +Architecture: armhf +Section: libs +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libsfgcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: libstdc++6-armel [armhf] +Description: GNU Standard C++ Library v3 (soft float ABI) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libstdc++-7-dev +Architecture: any +Multi-Arch: same +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgcc-7-dev (= ${gcc:Version}), + libstdc++6 (>= ${gcc:Version}), ${dep:libcdev}, ${misc:Depends} +Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, + libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, + libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev +Suggests: libstdc++-7-doc +Provides: libstdc++-dev +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libstdc++-7-pic +Architecture: any +Multi-Arch: same +Section: libdevel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (shared library subset kit) + This is used to develop subsets of the libstdc++ shared libraries for + use on custom installation floppies and in embedded systems. + . + Unless you are making one of those, you will not need this package. + +Package: libstdc++6-7-dbg +Architecture: any +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), + libgcc1-dbg (>= ${libgcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: libstdc++6-7-dbg-armel [armel], libstdc++6-7-dbg-armhf [armhf] +Multi-Arch: same +Recommends: libstdc++-7-dev (= ${gcc:Version}) +Conflicts: libstdc++5-dbg, libstdc++5-3.3-dbg, libstdc++6-dbg, + libstdc++6-4.0-dbg, libstdc++6-4.1-dbg, libstdc++6-4.2-dbg, + libstdc++6-4.3-dbg, libstdc++6-4.4-dbg, libstdc++6-4.5-dbg, + libstdc++6-4.6-dbg, libstdc++6-4.7-dbg, libstdc++6-4.8-dbg, + libstdc++6-4.9-dbg, libstdc++6-5-dbg, libstdc++6-6-dbg +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: lib32stdc++-7-dev +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib32gcc-7-dev (= ${gcc:Version}), + lib32stdc++6 (>= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: lib32stdc++6-7-dbg +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32stdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), lib32gcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: lib32stdc++6-dbg, lib32stdc++6-4.0-dbg, + lib32stdc++6-4.1-dbg, lib32stdc++6-4.2-dbg, lib32stdc++6-4.3-dbg, + lib32stdc++6-4.4-dbg, lib32stdc++6-4.5-dbg, lib32stdc++6-4.6-dbg, + lib32stdc++6-4.7-dbg, lib32stdc++6-4.8-dbg, lib32stdc++6-4.9-dbg, + lib32stdc++6-5-dbg, lib32stdc++6-6-dbg +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: lib64stdc++-7-dev +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib64gcc-7-dev (= ${gcc:Version}), + lib64stdc++6 (>= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: lib64stdc++6-7-dbg +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64stdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), lib64gcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: lib64stdc++6-dbg, lib64stdc++6-4.0-dbg, + lib64stdc++6-4.1-dbg, lib64stdc++6-4.2-dbg, lib64stdc++6-4.3-dbg, + lib64stdc++6-4.4-dbg, lib64stdc++6-4.5-dbg, lib64stdc++6-4.6-dbg, + lib64stdc++6-4.7-dbg, lib64stdc++6-4.8-dbg, lib64stdc++6-4.9-dbg, + lib64stdc++6-5-dbg, lib64stdc++6-6-dbg +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: libn32stdc++-7-dev +Architecture: mips mipsel mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libn32gcc-7-dev (= ${gcc:Version}), + libn32stdc++6 (>= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libn32stdc++6-7-dbg +Architecture: mips mipsel mips64 mips64el +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libn32stdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), libn32gcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: libn32stdc++6-dbg, libn32stdc++6-4.0-dbg, + libn32stdc++6-4.1-dbg, libn32stdc++6-4.2-dbg, libn32stdc++6-4.3-dbg, + libn32stdc++6-4.4-dbg, libn32stdc++6-4.5-dbg, libn32stdc++6-4.6-dbg, + libn32stdc++6-4.7-dbg, libn32stdc++6-4.8-dbg, libn32stdc++6-4.9-dbg, + libn32stdc++6-5-dbg, libn32stdc++6-6-dbg +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: libx32stdc++-7-dev +Architecture: amd64 i386 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libx32gcc-7-dev (= ${gcc:Version}), libx32stdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libx32stdc++6-7-dbg +Architecture: amd64 i386 +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32stdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), libx32gcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: libx32stdc++6-dbg, libx32stdc++6-4.6-dbg, + libx32stdc++6-4.7-dbg, libx32stdc++6-4.8-dbg, libx32stdc++6-4.9-dbg, + libx32stdc++6-5-dbg, libx32stdc++6-6-dbg +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: libhfstdc++-7-dev +Architecture: armel +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libhfgcc-7-dev (= ${gcc:Version}), + libhfstdc++6 (>= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libhfstdc++6-7-dbg +Architecture: armel +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfstdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), libhfgcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: libhfstdc++6-dbg, libhfstdc++6-4.3-dbg, libhfstdc++6-4.4-dbg, libhfstdc++6-4.5-dbg, libhfstdc++6-4.6-dbg, libhfstdc++6-4.7-dbg, libhfstdc++6-4.8-dbg, libhfstdc++6-4.9-dbg, libhfstdc++6-5-dbg, libhfstdc++6-6-dbg, libstdc++6-armhf [armel] +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: libsfstdc++-7-dev +Architecture: armhf +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libsfgcc-7-dev (= ${gcc:Version}), + libsfstdc++6 (>= ${gcc:Version}), libstdc++-7-dev (= ${gcc:Version}), ${misc:Depends} +Description: GNU Standard C++ Library v3 (development files) + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. + +Package: libsfstdc++6-7-dbg +Architecture: armhf +Section: debug +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfstdc++6 (>= ${gcc:Version}), + libstdc++-7-dev (= ${gcc:Version}), libsfgcc1-dbg (>= ${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +Conflicts: libsfstdc++6-dbg, libsfstdc++6-4.3-dbg, libsfstdc++6-4.4-dbg, libsfstdc++6-4.5-dbg, libsfstdc++6-4.6-dbg, libsfstdc++6-4.7-dbg, libsfstdc++6-4.8-dbg, libsfstdc++6-4.9-dbg, libsfstdc++6-5-dbg, libhfstdc++6-6-dbg, libstdc++6-armel [armhf] +Description: GNU Standard C++ Library v3 (debugging files) + This package contains the shared library of libstdc++ compiled with + debugging symbols. + +Package: libstdc++-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, + libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc, + libstdc++6-4.4-doc, libstdc++6-4.5-doc, libstdc++6-4.6-doc, libstdc++6-4.7-doc, + libstdc++-4.8-doc, libstdc++-4.9-doc, libstdc++-5-doc, libstdc++-6-doc +Description: GNU Standard C++ Library v3 (documentation files) + This package contains documentation files for the GNU stdc++ library. + . + One set is the distribution documentation, the other set is the + source documentation including a namespace list, class hierarchy, + alphabetical list, compound list, file list, namespace members, + compound members and file members. + +Package: gnat-7 +Architecture: any +Priority: optional +Pre-Depends: ${misc:Pre-Depends} +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (>= ${gcc:SoftVersion}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: gnat-7-doc, ada-reference-manual-2012, gnat-7-sjlj +Breaks: gnat (<< 4.6.1), dh-ada-library (<< 6.0), gnat-4.6-base (= 4.6.4-2), + gnat-4.9-base (= 4.9-20140330-1) +Replaces: gnat (<< 4.6.1), dh-ada-library (<< 6.0), gnat-4.6-base (= 4.6.4-2), + gnat-4.9-base (= 4.9-20140330-1) +# Takes over symlink from gnat (<< 4.6.1): /usr/bin/gnatgcc. +# Takes over file from dh-ada-library (<< 6.0): debian_packaging.mk. +# g-base 4.6.4-2, 4.9-20140330-1 contain debian_packaging.mk by mistake. +# Newer versions of gnat and dh-ada-library will not provide these files. +Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-3.5, + gnat-4.0, gnat-4.1, gnat-4.2, gnat-4.3, gnat-4.4, gnat-4.6, gnat-4.7, gnat-4.8, + gnat-4.9, gnat-5, gnat-6 +# These other packages will continue to provide /usr/bin/gnatmake and +# other files. +Description: GNU Ada compiler + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + This package provides the compiler, tools and runtime library that handles + exceptions using the default zero-cost mechanism. + +Package: gnat-7-sjlj +Architecture: any +Priority: extra +Pre-Depends: ${misc:Pre-Depends} +Depends: gcc-7-base (= ${gcc:Version}), gnat-7 (= ${gnat:Version}), ${misc:Depends} +Description: GNU Ada compiler (setjump/longjump runtime library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + This package provides an alternative runtime library that handles + exceptions using the setjump/longjump mechanism (as a static library + only). You can install it to supplement the normal compiler. + +Package: libgnat-7 +Section: libs +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: runtime for applications compiled with GNAT (shared library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the runtime shared library. + +Package: libgnat-7-dbg +Section: debug +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgnat-7 (= ${gnat:Version}), ${misc:Depends} +Description: runtime for applications compiled with GNAT (debugging symbols) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the debugging symbols. + +Package: libgnatvsn7-dev +Section: libdevel +Architecture: any +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), gnat-7 (= ${gnat:Version}), + libgnatvsn7 (= ${gnat:Version}), ${misc:Depends} +Conflicts: libgnatvsn-dev (<< 7), + libgnatvsn4.1-dev, libgnatvsn4.3-dev, libgnatvsn4.4-dev, + libgnatvsn4.5-dev, libgnatvsn4.6-dev, libgnatvsn4.9-dev, + libgnatvsn5-dev, libgnatvsn6-dev, +Description: GNU Ada compiler selected components (development files) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the development files and static library. + +Package: libgnatvsn7 +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Section: libs +Depends: gcc-7-base (= ${gcc:Version}), libgnat-7 (= ${gnat:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: GNU Ada compiler selected components (shared library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the runtime shared library. + +Package: libgnatvsn7-dbg +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: extra +Section: debug +Depends: gcc-7-base (= ${gcc:Version}), libgnatvsn7 (= ${gnat:Version}), ${misc:Depends} +Suggests: gnat +Description: GNU Ada compiler selected components (debugging symbols) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the debugging symbols. + +Package: gnat-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Suggests: gnat-7 +Conflicts: gnat-4.1-doc, gnat-4.2-doc, + gnat-4.3-doc, gnat-4.4-doc, + gnat-4.6-doc, gnat-4.9-doc, + gnat-5-doc, gnat-6-doc, +Description: GNU Ada compiler (documentation) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the documentation in info format. + +Package: gdc-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), g++-7 (>= ${gcc:SoftVersion}), ${dep:gdccross}, ${dep:phobosdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: gdc, d-compiler, d-v2-compiler +Replaces: gdc (<< 4.4.6-5) +Description: GNU D compiler (version 2) + This is the GNU D compiler, which compiles D on platforms supported by gcc. + It uses the gcc backend to generate optimised code. + . + This compiler supports D language version 2. + +Package: gdc-7-multilib +Architecture: any +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), gdc-7 (= ${gcc:Version}), gcc-7-multilib (= ${gcc:Version}), ${dep:libphobosbiarchdev}${shlibs:Depends}, ${misc:Depends} +Description: GNU D compiler (version 2, multilib support) + This is the GNU D compiler, which compiles D on platforms supported by gcc. + It uses the gcc backend to generate optimised code. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). + +Package: libgphobos-7-dev +Architecture: amd64 armel armhf i386 x32 kfreebsd-amd64 kfreebsd-i386 +Multi-Arch: same +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgphobos71 (>= ${gdc:Version}), + zlib1g-dev, ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libgphobos71 +Section: libs +Architecture: amd64 armel armhf i386 x32 kfreebsd-amd64 kfreebsd-i386 +Multi-Arch: same +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libgphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libgphobos71-dbg +Section: debug +Architecture: amd64 armel armhf i386 x32 kfreebsd-amd64 kfreebsd-i386 +Multi-Arch: same +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libgphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: libgphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos-7-dev +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib64gphobos71 (>= ${gdc:Version}), + lib64gcc-7-dev (= ${gcc:Version}), lib64z1-dev, ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library (64bit development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos71 +Section: libs +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64gphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos71-dbg +Section: debug +Architecture: i386 powerpc sparc s390 mips mipsel mipsn32 mipsn32el x32 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib64gphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: lib64gphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos-7-dev +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), lib32gphobos71 (>= ${gdc:Version}), + lib32gcc-7-dev (= ${gcc:Version}), lib32z1-dev, ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library (32bit development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos71 +Section: libs +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: lib32gphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos71-dbg +Section: debug +Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32 mipsn32 mipsn32el mips64 mips64el +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), lib32gphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: lib32gphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libx32gphobos-7-dev +Architecture: amd64 i386 +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libx32gphobos71 (>= ${gdc:Version}), + libx32gcc-7-dev (= ${gcc:Version}), ${dep:libx32z}, ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library (x32 development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libx32gphobos71 +Section: libs +Architecture: amd64 i386 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libx32gphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libx32gphobos71-dbg +Section: debug +Architecture: amd64 i386 +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libx32gphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: libx32gphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libhfgphobos-7-dev +Architecture: armel +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libhfgphobos71 (>= ${gdc:Version}), + libhfgcc-7-dev (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library (hard float ABI development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libhfgphobos71 +Section: libs +Architecture: armel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libhfgphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libhfgphobos71-dbg +Section: debug +Architecture: armel +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhfgphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: libhfgphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos-7-dev +Architecture: armhf +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libsfgphobos71 (>= ${gdc:Version}), + libsfgcc-7-dev (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Phobos D standard library (soft float ABI development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos71 +Section: libs +Architecture: armhf +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: libsfgphobos68 +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos71-dbg +Section: debug +Architecture: armhf +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libsfgphobos71 (= ${gdc:Version}), ${misc:Depends} +Replaces: libsfgphobos68-dbg +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: gccbrig-7 +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), ${dep:libcdev}, + hsail-tools, + ${shlibs:Depends}, libhsail-rt-7-dev (= ${gcc:Version}), ${misc:Depends} +Suggests: ${gccbrig:multilib}, + libhsail-rt0-dbg (>= ${gcc:Version}) +Provides: brig-compiler +Description: GNU BRIG (HSA IL) frontend + This is the GNU BRIG (HSA IL) frontend. + The consumed format is a binary representation. The textual HSAIL + can be compiled to it with a separate assembler. + +Package: libhsail-rt-7-dev +Architecture: any +Section: libdevel +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), libgcc-7-dev (= ${gcc:Version}), libhsail-rt0 (>= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Description: HSAIL runtime library (development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libhsail-rt0 +Section: libs +Architecture: any +Provides: libhsail-rt0-armel [armel], libhsail-rt0-armhf [armhf] +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: HSAIL runtime library + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libhsail-rt0-dbg +Section: debug +Architecture: any +Provides: libhsail-rt0-dbg-armel [armel], libhsail-rt0-dbg-armhf [armhf] +Multi-Arch: same +Priority: extra +Depends: gcc-7-base (= ${gcc:Version}), libhsail-rt0 (= ${gcc:Version}), libgcc1-dbg (>= ${libgcc:Version}), ${misc:Depends} +Description: HSAIL runtime library (debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +#Package: gcc`'PV-soft-float +#Architecture: arm armel armhf +#Priority: PRI(optional) +#Depends: BASEDEP, depifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}, ${misc:Depends} +#Conflicts: gcc-4.4-soft-float, gcc-4.5-soft-float, gcc-4.6-soft-float +#BUILT_USING`'dnl +#Description: GCC soft-floating-point gcc libraries (ARM) +# These are versions of basic static libraries such as libgcc.a compiled +# with the -msoft-float option, for CPUs without a floating-point unit. + +Package: fixincludes +Architecture: any +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Fix non-ANSI header files + FixIncludes was created to fix non-ANSI system header files. Many + system manufacturers supply proprietary headers that are not ANSI compliant. + The GNU compilers cannot compile non-ANSI headers. Consequently, the + FixIncludes shell script was written to fix the header files. + . + Not all packages with header files are installed on the system, when the + package is built, so we make fixincludes available at build time of other + packages, such that checking tools like lintian can make use of it. + +Package: gcc-7-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Conflicts: gcc-docs (<< 2.95.2) +Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2) +Description: Documentation for the GNU compilers (gcc, gobjc, g++) + Documentation for the GNU compilers in info format. + +Package: gcc-7-offload-nvptx +Architecture: amd64 +Priority: optional +Depends: gcc-7-base (= ${gcc:Version}), gcc-7 (= ${gcc:Version}), ${dep:libcdev}, + nvptx-tools, libgomp-plugin-nvptx1 (>= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: GCC offloading compiler to NVPTX + The package provides offloading support for NVidia PTX. OpenMP and OpenACC + programs linked with -fopenmp will by default add PTX code into the binaries, + which can be offloaded to NVidia PTX capable devices if available. + +Package: libgomp-plugin-nvptx1 +Architecture: amd64 +Multi-Arch: same +Section: libs +Depends: gcc-7-base (= ${gcc:Version}), libgomp1, ${shlibs:Depends}, ${misc:Depends} +Suggests: libcuda1 +Description: GCC OpenMP v4.5 plugin for offloading to NVPTX + This package contains libgomp plugin for offloading to NVidia + PTX. The plugin needs libcuda.so.1 shared library that has to be + installed separately. + +Package: gcc-7-source +Architecture: all +Priority: optional +Depends: make, autoconf2.64, quilt, patchutils, sharutils, gawk, ${misc:Depends} +Description: Source of the GNU Compiler Collection + This package contains the sources and patches which are needed to + build the GNU Compiler Collection (GCC). --- gcc-7-7.2.0.orig/debian/control.m4 +++ gcc-7-7.2.0/debian/control.m4 @@ -0,0 +1,5520 @@ +divert(-1) + +define(`checkdef',`ifdef($1, , `errprint(`error: undefined macro $1 +')m4exit(1)')') +define(`errexit',`errprint(`error: undefined macro `$1' +')m4exit(1)') + +dnl The following macros must be defined, when called: +dnl ifdef(`SRCNAME', , errexit(`SRCNAME')) +dnl ifdef(`PV', , errexit(`PV')) +dnl ifdef(`ARCH', , errexit(`ARCH')) + +dnl The architecture will also be defined (-D__i386__, -D__powerpc__, etc.) + +define(`PN', `$1') +ifdef(`PRI', `', ` + define(`PRI', `$1') +') +define(`MAINTAINER', `Debian GCC Maintainers ') + +define(`depifenabled', `ifelse(index(enabled_languages, `$1'), -1, `', `$2')') +define(`ifenabled', `ifelse(index(enabled_languages, `$1'), -1, `dnl', `$2')') + +ifdef(`TARGET',`ifdef(`CROSS_ARCH',`',`undefine(`MULTIARCH')')') +define(`CROSS_ARCH', ifdef(`CROSS_ARCH', CROSS_ARCH, `all')) +define(`libdep', `lib$2$1`'LS`'AQ (ifelse(`$3',`',`>=',`$3') ifelse(`$4',`',`${gcc:Version}',`$4'))') +define(`libdevdep', `lib$2$1`'LS`'AQ (ifelse(`$3',`',`=',`$3') ifelse(`$4',`',`${gcc:Version}',`$4'))') +define(`libidevdep', `lib$2$1`'LS`'AQ (ifelse(`$3',`',`=',`$3') ifelse(`$4',`',`${gcc:Version}',`$4'))') +ifdef(`TARGET',`ifelse(CROSS_ARCH,`all',` +define(`libidevdep', `lib$2$1`'LS`'AQ (>= ifelse(`$4',`',`${gcc:SoftVersion}',`$4'))') +')') +define(`libdbgdep', `lib$2$1`'LS`'AQ (ifelse(`$3',`',`>=',`$3') ifelse(`$4',`',`${gcc:Version}',`$4'))') + +define(`BUILT_USING', ifelse(add_built_using,yes,`Built-Using: ${Built-Using} +')) + +divert`'dnl +dnl -------------------------------------------------------------------------- +Source: SRCNAME +Section: devel +Priority: PRI(optional) +ifelse(DIST,`Ubuntu',`dnl +ifelse(regexp(SRCNAME, `gnat\|gdc-'),0,`dnl +Maintainer: Ubuntu MOTU Developers +', `dnl +Maintainer: Ubuntu Core developers +')dnl SRCNAME +XSBC-Original-Maintainer: MAINTAINER +', `dnl +Maintainer: MAINTAINER +')dnl DIST +ifelse(regexp(SRCNAME, `gnat'),0,`dnl +Uploaders: Ludovic Brenta +', regexp(SRCNAME, `gdc'),0,`dnl +Uploaders: Iain Buclaw , Matthias Klose +', `dnl +Uploaders: Matthias Klose +')dnl SRCNAME +Standards-Version: 4.1.0 +ifdef(`TARGET',`dnl cross +Build-Depends: DEBHELPER_BUILD_DEP DPKG_BUILD_DEP + LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP + kfreebsd-kernel-headers (>= 0.84) [kfreebsd-any], linux-libc-dev [m68k], + LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTO_BUILD_DEP + SOURCE_BUILD_DEP CROSS_BUILD_DEP + ISL_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP, + autogen , zlib1g-dev, gawk, lzma, xz-utils, patchutils, + pkg-config, libgc-dev, + zlib1g-dev, SDT_BUILD_DEP + bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, quilt +',`dnl native +Build-Depends: DEBHELPER_BUILD_DEP DPKG_BUILD_DEP + GCC_MULTILIB_BUILD_DEP + LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBC_DBG_DEP + kfreebsd-kernel-headers (>= 0.84) [kfreebsd-any], linux-libc-dev [m68k], + AUTO_BUILD_DEP BASE_BUILD_DEP + libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], + autogen , gawk, lzma, xz-utils, patchutils, + zlib1g-dev, SDT_BUILD_DEP + BINUTILS_BUILD_DEP, + gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, + gdb`'NT, OFFLOAD_BUILD_DEP + texinfo (>= 4.3), locales, sharutils, + procps, FORTRAN_BUILD_DEP GNAT_BUILD_DEP GO_BUILD_DEP GDC_BUILD_DEP + ISL_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP PHOBOS_BUILD_DEP + CHECK_BUILD_DEP realpath (>= 1.9.12), chrpath, lsb-release, quilt, + pkg-config, libgc-dev, + TARGET_TOOL_BUILD_DEP +Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP +')dnl +ifelse(regexp(SRCNAME, `gnat'),0,`dnl +Homepage: http://gcc.gnu.org/ +', regexp(SRCNAME, `gdc'),0,`dnl +Homepage: http://gdcproject.org/ +', `dnl +Homepage: http://gcc.gnu.org/ +')dnl SRCNAME +Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc`'PV/ +Vcs-Svn: svn://anonscm.debian.org/gcccvs/branches/sid/gcc`'PV + +ifelse(regexp(SRCNAME, `gcc-snapshot'),0,`dnl +Package: gcc-snapshot`'TS +Architecture: any +Section: devel +Priority: extra +Depends: binutils`'TS (>= ${binutils:Version}), ${dep:libcbiarchdev}, ${dep:libcdev}, ${dep:libunwinddev}, ${snap:depends}, ${shlibs:Depends}, ${dep:ecj}, python, ${misc:Depends} +Recommends: ${snap:recommends} +Suggests: ${dep:gold} +Provides: c++-compiler`'TS`'ifdef(`TARGET',`',`, c++abi2-dev') +BUILT_USING`'dnl +Description: SNAPSHOT of the GNU Compiler Collection + This package contains a recent development SNAPSHOT of all files + contained in the GNU Compiler Collection (GCC). + . + The source code for this package has been exported from SVN trunk. + . + DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES! + . + This package will NEVER hit the testing distribution. It is used for + tracking gcc bugs submitted to the Debian BTS in recent development + versions of gcc. +',`dnl gcc-X.Y + +dnl default base package dependencies +define(`BASEDEP', `gcc`'PV`'TS-base (= ${gcc:Version})') +define(`SOFTBASEDEP', `gcc`'PV`'TS-base (>= ${gcc:SoftVersion})') + +ifdef(`TARGET',` +define(`BASELDEP', `gcc`'PV`'ifelse(CROSS_ARCH,`all',`-cross')-base`'GCC_PORTS_BUILD (= ${gcc:Version})') +define(`SOFTBASELDEP', `gcc`'PV`'ifelse(CROSS_ARCH, `all',`-cross')-base`'GCC_PORTS_BUILD (>= ${gcc:SoftVersion})') +',`dnl +define(`BASELDEP', `BASEDEP') +define(`SOFTBASELDEP', `SOFTBASEDEP') +') + +ifelse(index(SRCNAME, `gnat'), 0, ` +define(`BASEDEP', `gnat`'PV-base (= ${gnat:Version})') +define(`SOFTBASEDEP', `gnat`'PV-base (>= ${gnat:SoftVersion})') +') + +ifenabled(`gccbase',` +Package: gcc`'PV`'TS-base +Architecture: any +Multi-Arch: same +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',`PRI(required)') +Depends: ${misc:Depends} +Replaces: ${base:Replaces} +Breaks: ${base:Breaks} +BUILT_USING`'dnl +Description: GCC, the GNU Compiler Collection (base package) + This package contains files common to all languages and libraries + contained in the GNU Compiler Collection (GCC). +ifdef(`BASE_ONLY', `dnl + . + This version of GCC is not yet available for this architecture. + Please use the compilers from the gcc-snapshot package for testing. +')`'dnl +')`'dnl gccbase + +ifenabled(`gcclbase',` +Package: gcc`'PV-cross-base`'GCC_PORTS_BUILD +Architecture: all +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',`PRI(required)') +Depends: ${misc:Depends} +BUILT_USING`'dnl +Description: GCC, the GNU Compiler Collection (library base package) + This empty package contains changelog and copyright files common to + all libraries contained in the GNU Compiler Collection (GCC). +ifdef(`BASE_ONLY', `dnl + . + This version of GCC is not yet available for this architecture. + Please use the compilers from the gcc-snapshot package for testing. +')`'dnl +')`'dnl gcclbase + +ifenabled(`gnatbase',` +Package: gnat`'PV-base`'TS +Architecture: any +# "all" causes build instabilities for "any" dependencies (see #748388). +Section: libs +Priority: PRI(optional) +Depends: ${misc:Depends} +Breaks: gcc-4.6 (<< 4.6.1-8~) +BUILT_USING`'dnl +Description: GNU Ada compiler (common files) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + This package contains files common to all GNAT related packages. +')`'dnl gnatbase + +ifenabled(`libgcc',` +Package: libgcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Provides: ifdef(`TARGET',`libgcc1-TARGET-dcv1',`libgcc1-armel [armel], libgcc1-armhf [armhf]') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libgcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,,=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libgcc1-dbg-armel [armel], libgcc1-dbg-armhf [armhf] +')dnl +ifdef(`MULTIARCH',`Multi-Arch: same +')dnl +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libgcc2`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`m68k') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libgcc2-TARGET-dcv1 +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libgcc2-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`m68k') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc2,,=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libgcc + +ifenabled(`cdev',` +Package: libgcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgcc}, ${dep:libssp}, ${dep:libgomp}, ${dep:libitm}, + ${dep:libatomic}, ${dep:libbtrace}, ${dep:libasan}, ${dep:liblsan}, + ${dep:libtsan}, ${dep:libubsan}, ${dep:libcilkrts}, ${dep:libvtv}, + ${dep:libmpx}, + ${dep:libqmath}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Replaces: gccgo-7 (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl libgcc + +Package: libgcc4`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`hppa') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libgcc4-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`hppa') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc4,,=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +ifenabled(`lib64gcc',` +Package: lib64gcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64gcc1-TARGET-dcv1 +',`')`'dnl +Conflicts: libdep(gcc`'GCC_SO,,<=,1:3.3-0pre9) +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (64bit) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib64gcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,64,=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib64gcc + +ifenabled(`cdev',` +Package: lib64gcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (64bit development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl cdev + +ifenabled(`lib32gcc',` +Package: lib32gcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +Conflicts: ${confl:lib32} +ifdef(`TARGET',`Provides: lib32gcc1-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GCC support library (32 bit Version) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib32gcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,32,=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib32gcc1 + +ifenabled(`cdev',` +Package: lib32gcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (32 bit development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl cdev + +ifenabled(`libneongcc',` +Package: libgcc1-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library [neon optimized] + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneongcc1 + +ifenabled(`libhfgcc',` +Package: libhfgcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: libhfgcc1-TARGET-dcv1 +',`Conflicts: libgcc1-armhf [biarchhf_archs] +')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (hard float ABI) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libhfgcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,hf,=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgcc1-dbg-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libhfgcc + +ifenabled(`cdev',` +ifenabled(`armml',` +Package: libhfgcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (hard float ABI development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl armml +')`'dnl cdev + +ifenabled(`libsfgcc',` +Package: libsfgcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: libsfgcc1-TARGET-dcv1 +',`Conflicts: libgcc1-armel [biarchsf_archs] +')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (soft float ABI) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libsfgcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,sf,=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgcc1-dbg-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libsfgcc + +ifenabled(`cdev',` +ifenabled(`armml',` +Package: libsfgcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (soft float ABI development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl armml +')`'dnl cdev + +ifenabled(`libn32gcc',` +Package: libn32gcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +Conflicts: libdep(gcc`'GCC_SO,,<=,1:3.3-0pre9) +ifdef(`TARGET',`Provides: libn32gcc1-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (n32) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libn32gcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,n32,=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libn32gcc + +ifenabled(`cdev',` +Package: libn32gcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (n32 development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl cdev + +ifenabled(`libx32gcc',` +Package: libx32gcc1`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: libx32gcc1-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (x32) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libx32gcc1-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gcc1,x32,=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `') + Debug symbols for the GCC support library. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libx32gcc + +ifenabled(`cdev',` +ifenabled(`x32dev',` +Package: libx32gcc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Recommends: ${dep:libcdev} +Depends: BASELDEP, ${dep:libgccbiarch}, ${dep:libsspbiarch}, + ${dep:libgompbiarch}, ${dep:libitmbiarch}, ${dep:libatomicbiarch}, + ${dep:libbtracebiarch}, ${dep:libasanbiarch}, ${dep:liblsanbiarch}, + ${dep:libtsanbiarch}, ${dep:libubsanbiarch}, + ${dep:libvtvbiarch}, ${dep:libcilkrtsbiarch}, ${dep:libmpxbiarch}, + ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gccgo-7-multilib (<< ${gcc:Version}) +BUILT_USING`'dnl +Description: GCC support library (x32 development files) + This package contains the headers and static library files necessary for + building C programs which use libgcc, libgomp, libquadmath, libssp or libitm. +')`'dnl x32dev +')`'dnl cdev + +ifenabled(`cdev',` +Package: gcc`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: cpp`'PV`'TS (= ${gcc:Version}),ifenabled(`gccbase',` BASEDEP,') + ifenabled(`gccxbase',` BASEDEP,') + ${dep:libcc1}, + binutils`'TS (>= ${binutils:Version}), + ${dep:libgccdev}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dep:libcdev} +Replaces: gccgo-7 (<< ${gcc:Version}), cpp`'PV`'TS (<< 7.1.1-8) +Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), + gcc`'PV-locales (>= ${gcc:SoftVersion}), + libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), + libdbgdep(gomp`'GOMP_SO-dbg,), + libdbgdep(itm`'ITM_SO-dbg,), + libdbgdep(atomic`'ATOMIC_SO-dbg,), + libdbgdep(asan`'ASAN_SO-dbg,), + libdbgdep(lsan`'LSAN_SO-dbg,), + libdbgdep(tsan`'TSAN_SO-dbg,), + libdbgdep(ubsan`'UBSAN_SO-dbg,), +ifenabled(`libvtv',`',` + libdbgdep(vtv`'VTV_SO-dbg,), +')`'dnl + libdbgdep(cilkrts`'CILKRTS_SO-dbg,), + libdbgdep(mpx`'MPX_SO-dbg,), + libdbgdep(quadmath`'QMATH_SO-dbg,) +Provides: c-compiler`'TS +ifdef(`TARGET',`Conflicts: gcc-multilib +')`'dnl +BUILT_USING`'dnl +Description: GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C compiler, a fairly portable optimizing compiler for C. +ifdef(`TARGET', `dnl + . + This package contains C cross-compiler for TARGET architecture. +')`'dnl + +ifenabled(`multilib',` +Package: gcc`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU C compiler (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C compiler, a fairly portable optimizing compiler for C. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +ifenabled(`testresults',` +Package: gcc`'PV-test-results +Architecture: any +Section: devel +Priority: extra +Depends: BASEDEP, ${misc:Depends} +Replaces: g++-5 (<< 5.2.1-28) +BUILT_USING`'dnl +Description: Test results for the GCC test suite + This package contains the test results for running the GCC test suite + for a post build analysis. +')`'dnl testresults + +ifenabled(`plugindev',` +Package: gcc`'PV-plugin-dev`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), GMP_BUILD_DEP MPC_BUILD_DEP ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Files for GNU GCC plugin development. + This package contains (header) files for GNU GCC plugin development. It + is only used for the development of GCC plugins, but not needed to run + plugins. +')`'dnl plugindev +')`'dnl cdev + +ifenabled(`cdev',` +Package: gcc`'PV-hppa64-linux-gnu +Architecture: ifdef(`TARGET',`any',hppa amd64 i386 x32) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: PRI(optional) +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), + binutils-hppa64-linux-gnu | binutils-hppa64, + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU C compiler (cross compiler for hppa64) + This is the GNU C compiler, a fairly portable optimizing compiler for C. +')`'dnl cdev + +ifenabled(`cdev',` +Package: cpp`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: ifdef(`TARGET',`devel',`interpreters') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion}) +Replaces: gccgo-7 (<< ${gcc:Version}) +Breaks: libmagics++-dev (<< 2.28.0-4)ifdef(`TARGET',`',`, hardening-wrapper (<< 2.8+nmu3)') +BUILT_USING`'dnl +Description: GNU C preprocessor + A macro processor that is used automatically by the GNU C compiler + to transform programs before actual compilation. + . + This package has been separated from gcc for the benefit of those who + require the preprocessor but not the compiler. +ifdef(`TARGET', `dnl + . + This package contains preprocessor configured for TARGET architecture. +')`'dnl + +ifdef(`TARGET', `', ` +ifenabled(`gfdldoc',` +Package: cpp`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Description: Documentation for the GNU C preprocessor (cpp) + Documentation for the GNU C preprocessor in info `format'. +')`'dnl gfdldoc +')`'dnl native + +ifdef(`TARGET', `', ` +Package: gcc`'PV-locales +Architecture: all +Section: devel +Priority: PRI(optional) +Depends: SOFTBASEDEP, cpp`'PV (>= ${gcc:SoftVersion}), ${misc:Depends} +Recommends: gcc`'PV (>= ${gcc:SoftVersion}) +Description: GCC, the GNU compiler collection (native language support files) + Native language support for GCC. Lets GCC speak your language, + if translations are available. + . + Please do NOT submit bug reports in other languages than "C". + Always reset your language settings to use the "C" locales. +')`'dnl native +')`'dnl cdev + +ifenabled(`c++',` +ifenabled(`c++dev',` +Package: g++`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libidevdep(stdc++`'PV-dev,,=), ${shlibs:Depends}, ${misc:Depends} +Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev') +Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libdbgdep(stdc++CXX_SO`'PV-dbg,) +BUILT_USING`'dnl +Description: GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. +ifdef(`TARGET', `dnl + . + This package contains C++ cross-compiler for TARGET architecture. +')`'dnl + +ifenabled(`multilib',` +Package: g++`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libcxxbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${dep:libcxxbiarchdbg} +BUILT_USING`'dnl +Description: GNU C++ compiler (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl c++dev +')`'dnl c++ + +ifdef(`TARGET', `', ` +ifenabled(`ssp',` +Package: libssp`'SSP_SO`'LS +Architecture: any +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC stack smashing protection library + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: lib32ssp`'SSP_SO`'LS +Architecture: biarch32_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: GCC stack smashing protection library (32bit) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: lib64ssp`'SSP_SO`'LS +Architecture: biarch64_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +BUILT_USING`'dnl +Description: GCC stack smashing protection library (64bit) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: libn32ssp`'SSP_SO`'LS +Architecture: biarchn32_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +BUILT_USING`'dnl +Description: GCC stack smashing protection library (n32) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: libx32ssp`'SSP_SO`'LS +Architecture: biarchx32_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +BUILT_USING`'dnl +Description: GCC stack smashing protection library (x32) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: libhfssp`'SSP_SO`'LS +Architecture: biarchhf_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC stack smashing protection library (hard float ABI) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: libsfssp`'SSP_SO`'LS +Architecture: biarchsf_archs +Section: libs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC stack smashing protection library (soft float ABI) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. +')`'dnl +')`'dnl native + +ifenabled(`libgomp',` +Package: libgomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libgomp'GOMP_SO`-armel [armel], libgomp'GOMP_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libgomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libgomp'GOMP_SO`-dbg-armel [armel], libgomp'GOMP_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib32gomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (32bit) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib32gomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (32 bit debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib64gomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (64bit) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: lib64gomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (64bit debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libn32gomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (n32) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libn32gomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (n32 debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + +ifenabled(`libx32gomp',` +Package: libx32gomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (x32) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libx32gomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (x32 debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers +')`'dnl libx32gomp + +ifenabled(`libhfgomp',` +Package: libhfgomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgomp'GOMP_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (hard float ABI) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libhfgomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgomp'GOMP_SO`-dbg-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (hard float ABI debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers +')`'dnl libhfgomp + +ifenabled(`libsfgomp',` +Package: libsfgomp`'GOMP_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgomp'GOMP_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (soft float ABI) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + +Package: libsfgomp`'GOMP_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(gomp`'GOMP_SO,sf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgomp'GOMP_SO`-dbg-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library (soft float ABI debug symbols) + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers +')`'dnl libsfgomp + +ifenabled(`libneongomp',` +Package: libgomp`'GOMP_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC OpenMP (GOMP) support library [neon optimized] + GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers + in the GNU Compiler Collection. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneongomp +')`'dnl libgomp + +ifenabled(`libitm',` +Package: libitm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libitm'ITM_SO`-armel [armel], libitm'ITM_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libitm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libitm'ITM_SO`-dbg-armel [armel], libitm'ITM_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib32itm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (32bit) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib32itm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (32 bit debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib64itm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (64bit) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: lib64itm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (64bit debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +#Package: libn32itm`'ITM_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: GNU Transactional Memory Library (n32) +# GNU Transactional Memory Library (libitm) provides transaction support for +# accesses to the memory of a process, enabling easy-to-use synchronization of +# accesses to shared memory by several threads. + +#Package: libn32itm`'ITM_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(itm`'ITM_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: GNU Transactional Memory Library (n32 debug symbols) +# GNU Transactional Memory Library (libitm) provides transaction support for +# accesses to the memory of a process, enabling easy-to-use synchronization of +# accesses to shared memory by several threads. + +ifenabled(`libx32itm',` +Package: libx32itm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (x32) + This manual documents the usage and internals of libitm. It provides + transaction support for accesses to the memory of a process, enabling + easy-to-use synchronization of accesses to shared memory by several threads. + +Package: libx32itm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (x32 debug symbols) + This manual documents the usage and internals of libitm. It provides + transaction support for accesses to the memory of a process, enabling + easy-to-use synchronization of accesses to shared memory by several threads. +')`'dnl libx32itm + +ifenabled(`libhfitm',` +Package: libhfitm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libitm'ITM_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (hard float ABI) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libhfitm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libitm'ITM_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (hard float ABI debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. +')`'dnl libhfitm + +ifenabled(`libsfitm',` +Package: libsfitm`'ITM_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (soft float ABI) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + +Package: libsfitm`'ITM_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(itm`'ITM_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library (soft float ABI debug symbols) + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. +')`'dnl libsfitm + +ifenabled(`libneonitm',` +Package: libitm`'ITM_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Transactional Memory Library [neon optimized] + GNU Transactional Memory Library (libitm) provides transaction support for + accesses to the memory of a process, enabling easy-to-use synchronization of + accesses to shared memory by several threads. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonitm +')`'dnl libitm + +ifenabled(`libatomic',` +Package: libatomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libatomic'ATOMIC_SO`-armel [armel], libatomic'ATOMIC_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libatomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libatomic'ATOMIC_SO`-dbg-armel [armel], libatomic'ATOMIC_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib32atomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (32bit) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib32atomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (32 bit debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib64atomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (64bit) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: lib64atomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (64bit debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libn32atomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (n32) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libn32atomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (n32 debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +ifenabled(`libx32atomic',` +Package: libx32atomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (x32) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libx32atomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (x32 debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. +')`'dnl libx32atomic + +ifenabled(`libhfatomic',` +Package: libhfatomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libatomic'ATOMIC_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (hard float ABI) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libhfatomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libatomic'ATOMIC_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (hard float ABI debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. +')`'dnl libhfatomic + +ifenabled(`libsfatomic',` +Package: libsfatomic`'ATOMIC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (soft float ABI) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + +Package: libsfatomic`'ATOMIC_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(atomic`'ATOMIC_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions (soft float ABI debug symbols) + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. +')`'dnl libsfatomic + +ifenabled(`libneonatomic',` +Package: libatomic`'ATOMIC_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: support library providing __atomic built-in functions [neon optimized] + library providing __atomic built-in functions. When an atomic call cannot + be turned into lock-free instructions, GCC will make calls into this library. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonatomic +')`'dnl libatomic + +ifenabled(`libasan',` +Package: libasan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libasan'ASAN_SO`-armel [armel], libasan'ASAN_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libasan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libasan'ASAN_SO`-dbg-armel [armel], libasan'ASAN_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib32asan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (32bit) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib32asan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (32 bit debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib64asan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (64bit) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: lib64asan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (64bit debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +#Package: libn32asan`'ASAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(extra)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: AddressSanitizer -- a fast memory error detector (n32) +# AddressSanitizer (ASan) is a fast memory error detector. It finds +# use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +#Package: libn32asan`'ASAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(asan`'ASAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: AddressSanitizer -- a fast memory error detector (n32 debug symbols) +# AddressSanitizer (ASan) is a fast memory error detector. It finds +# use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +ifenabled(`libx32asan',` +Package: libx32asan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (x32) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libx32asan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (x32 debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. +')`'dnl libx32asan + +ifenabled(`libhfasan',` +Package: libhfasan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(extra)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libasan'ASAN_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (hard float ABI) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libhfasan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libasan'ASAN_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (hard float ABI debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. +')`'dnl libhfasan + +ifenabled(`libsfasan',` +Package: libsfasan`'ASAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(extra)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (soft float ABI) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + +Package: libsfasan`'ASAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(asan`'ASAN_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector (soft float ABI debug symbols) + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. +')`'dnl libsfasan + +ifenabled(`libneonasan',` +Package: libasan`'ASAN_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: AddressSanitizer -- a fast memory error detector [neon optimized] + AddressSanitizer (ASan) is a fast memory error detector. It finds + use-after-free and {heap,stack,global}-buffer overflow bugs in C/C++ programs. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonasan +')`'dnl libasan + +ifenabled(`liblsan',` +Package: liblsan`'LSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (runtime) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +Package: liblsan`'LSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(lsan`'LSAN_SO,,=), ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +ifenabled(`lib32lsan',` +Package: lib32lsan`'LSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (32bit) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +Package: lib32lsan`'LSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(lsan`'LSAN_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (32 bit debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). +')`'dnl lib32lsan + +ifenabled(`lib64lsan',` +#Package: lib64lsan`'LSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (64bit) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +#Package: lib64lsan`'LSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(lsan`'LSAN_SO,64,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (64bit debug symbols) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. +')`'dnl lib64lsan + +ifenabled(`libn32lsan',` +#Package: libn32lsan`'LSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (n32) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. + +#Package: libn32lsan`'LSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(lsan`'LSAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: LeakSanitizer -- a memory leak detector (n32 debug symbols) +# LeakSanitizer (Lsan) is a memory leak detector which is integrated +# into AddressSanitizer. +')`'dnl libn32lsan + +ifenabled(`libx32lsan',` +Package: libx32lsan`'LSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (x32) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). + +Package: libx32lsan`'LSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(lsan`'LSAN_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (x32 debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer (empty package). +')`'dnl libx32lsan + +ifenabled(`libhflsan',` +Package: libhflsan`'LSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: liblsan'LSAN_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (hard float ABI) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +Package: libhflsan`'LSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(lsan`'LSAN_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: liblsan'LSAN_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (hard float ABI debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. +')`'dnl libhflsan + +ifenabled(`libsflsan',` +Package: libsflsan`'LSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (soft float ABI) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + +Package: libsflsan`'LSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(lsan`'LSAN_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector (soft float ABI debug symbols) + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. +')`'dnl libsflsan + +ifenabled(`libneonlsan',` +Package: liblsan`'LSAN_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: LeakSanitizer -- a memory leak detector [neon optimized] + LeakSanitizer (Lsan) is a memory leak detector which is integrated + into AddressSanitizer. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonlsan +')`'dnl liblsan + +ifenabled(`libtsan',` +Package: libtsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libtsan'TSAN_SO`-armel [armel], libtsan'TSAN_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (runtime) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libtsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libtsan'TSAN_SO`-dbg-armel [armel], libtsan'TSAN_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +ifenabled(`lib32tsan',` +Package: lib32tsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (32bit) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: lib32tsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (32 bit debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. +')`'dnl lib32tsan + +ifenabled(`lib64tsan',` +Package: lib64tsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (64bit) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: lib64tsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (64bit debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. +')`'dnl lib64tsan + +ifenabled(`libn32tsan',` +Package: libn32tsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (n32) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libn32tsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (n32 debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. +')`'dnl libn32tsan + +ifenabled(`libx32tsan',` +Package: libx32tsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (x32) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libx32tsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (x32 debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. +')`'dnl libx32tsan + +ifenabled(`libhftsan',` +Package: libhftsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libtsan'TSAN_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (hard float ABI) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libhftsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libtsan'TSAN_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (hard float ABI debug symbols) +')`'dnl libhftsan + +ifenabled(`libsftsan',` +Package: libsftsan`'TSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (soft float ABI) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + +Package: libsftsan`'TSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(tsan`'TSAN_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races (soft float ABI debug symbols) + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. +')`'dnl libsftsan + +ifenabled(`libneontsan',` +Package: libtsan`'TSAN_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: ThreadSanitizer -- a Valgrind-based detector of data races [neon optimized] + ThreadSanitizer (Tsan) is a data race detector for C/C++ programs. + The Linux and Mac versions are based on Valgrind. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneontsan +')`'dnl libtsan + +ifenabled(`libubsan',` +Package: libubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libubsan'UBSAN_SO`-armel [armel], libubsan'UBSAN_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (runtime) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libubsan'UBSAN_SO`-dbg-armel [armel], libubsan'UBSAN_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +ifenabled(`lib32ubsan',` +Package: lib32ubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (32bit) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib32ubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (32 bit debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. +')`'dnl lib32ubsan + +ifenabled(`lib64ubsan',` +Package: lib64ubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (64bit) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: lib64ubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (64bit debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. +')`'dnl lib64ubsan + +ifenabled(`libn32ubsan',` +#Package: libn32ubsan`'UBSAN_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: UBSan -- undefined behaviour sanitizer (n32) +# UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. +# Various computations will be instrumented to detect undefined behavior +# at runtime. Available for C and C++. + +#Package: libn32ubsan`'UBSAN_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: UBSan -- undefined behaviour sanitizer (n32 debug symbols) +# UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. +# Various computations will be instrumented to detect undefined behavior +# at runtime. Available for C and C++. +')`'dnl libn32ubsan + +ifenabled(`libx32ubsan',` +Package: libx32ubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (x32) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libx32ubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (x32 debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. +')`'dnl libx32ubsan + +ifenabled(`libhfubsan',` +Package: libhfubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libubsan'UBSAN_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (hard float ABI) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libhfubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libubsan'UBSAN_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (hard float ABI debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. +')`'dnl libhfubsan + +ifenabled(`libsfubsan',` +Package: libsfubsan`'UBSAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (soft float ABI) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + +Package: libsfubsan`'UBSAN_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(ubsan`'UBSAN_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer (soft float ABI debug symbols) + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. +')`'dnl libsfubsan + +ifenabled(`libneonubsan',` +Package: libubsan`'UBSAN_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: UBSan -- undefined behaviour sanitizer [neon optimized] + UndefinedBehaviorSanitizer can be enabled via -fsanitize=undefined. + Various computations will be instrumented to detect undefined behavior + at runtime. Available for C and C++. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonubsan +')`'dnl libubsan + +ifenabled(`libvtv',` +Package: libvtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (runtime) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: libvtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,,=), ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: GNU vtable verification library (debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +ifenabled(`lib32vtv',` +Package: lib32vtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: GNU vtable verification library (32bit) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: lib32vtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (32 bit debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl lib32vtv + +ifenabled(`lib64vtv',` +Package: lib64vtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (64bit) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: lib64vtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (64bit debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl lib64vtv + +ifenabled(`libn32vtv',` +Package: libn32vtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (n32) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: libn32vtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (n32 debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl libn32vtv + +ifenabled(`libx32vtv',` +Package: libx32vtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (x32) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: libx32vtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (x32 debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl libx32vtv + +ifenabled(`libhfvtv',` +Package: libhfvtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libvtv'VTV_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GNU vtable verification library (hard float ABI) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: libhfvtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libvtv'VTV_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GNU vtable verification library (hard float ABI debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl libhfvtv + +ifenabled(`libsfvtv',` +Package: libsfvtv`'VTV_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (soft float ABI) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + +Package: libsfvtv`'VTV_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(vtv`'VTV_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library (soft float ABI debug symbols) + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. +')`'dnl libsfvtv + +ifenabled(`libneonvtv',` +Package: libvtv`'VTV_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU vtable verification library [neon optimized] + Vtable verification is a new security hardening feature for GCC that + is designed to detect and handle (during program execution) when a + vtable pointer that is about to be used for a virtual function call is + not a valid vtable pointer for that call. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonvtv +')`'dnl libvtv + +ifenabled(`libcilkrts',` +Package: libcilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libcilkrts'CILKRTS_SO`-armel [armel], libcilkrts'CILKRTS_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (runtime) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libcilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libcilkrts'CILKRTS_SO`-dbg-armel [armel], libcilkrts'CILKRTS_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +ifenabled(`lib32cilkrts',` +Package: lib32cilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (32bit) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib32cilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (32 bit debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl lib32cilkrts + +ifenabled(`lib64cilkrts',` +Package: lib64cilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (64bit) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: lib64cilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (64bit debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl lib64cilkrts + +ifenabled(`libn32cilkrts',` +Package: libn32cilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (n32) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libn32cilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (n32 debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl libn32cilkrts + +ifenabled(`libx32cilkrts',` +Package: libx32cilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (x32) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libx32cilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (x32 debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl libx32cilkrts + +ifenabled(`libhfcilkrts',` +Package: libhfcilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libcilkrts'CILKRTS_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (hard float ABI) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libhfcilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libcilkrts'CILKRTS_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (hard float ABI debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl libhfcilkrts + +ifenabled(`libsfcilkrts',` +Package: libsfcilkrts`'CILKRTS_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (soft float ABI) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + +Package: libsfcilkrts`'CILKRTS_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(cilkrts`'CILKRTS_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions (soft float ABI debug symbols) + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. +')`'dnl libsfcilkrts + +ifenabled(`libneoncilkrts',` +Package: libcilkrts`'CILKRTS_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel Cilk Plus language extensions [neon optimized] + Intel Cilk Plus is an extension to the C and C++ languages to support + data and task parallelism. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneoncilkrts +')`'dnl libcilkrts + +ifenabled(`libmpx',` +Package: libmpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libmpx'MPX_SO`-armel [armel], libmpx'MPX_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libmpx0 (<< 6-20160120-1) +BUILT_USING`'dnl +Description: Intel memory protection extensions (runtime) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libmpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libmpx'MPX_SO`-dbg-armel [armel], libmpx'MPX_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: Intel memory protection extensions (debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +ifenabled(`lib32mpx',` +Package: lib32mpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Replaces: lib32mpx0 (<< 6-20160120-1) +BUILT_USING`'dnl +Description: Intel memory protection extensions (32bit) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib32mpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (32 bit debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl lib32mpx + +ifenabled(`lib64mpx',` +Package: lib64mpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64mpx0 (<< 6-20160120-1) +BUILT_USING`'dnl +Description: Intel memory protection extensions (64bit) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: lib64mpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (64bit debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl lib64mpx + +ifenabled(`libn32mpx',` +Package: libn32mpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (n32) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libn32mpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (n32 debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl libn32mpx + +ifenabled(`libx32mpx',` +Package: libx32mpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (x32) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libx32mpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (x32 debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl libx32mpx + +ifenabled(`libhfmpx',` +Package: libhfmpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libmpx'MPX_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Intel memory protection extensions (hard float ABI) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libhfmpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libmpx'MPX_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Intel memory protection extensions (hard float ABI debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl libhfmpx + +ifenabled(`libsfmpx',` +Package: libsfmpx`'MPX_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (soft float ABI) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. + +Package: libsfmpx`'MPX_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(mpx`'MPX_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Intel memory protection extensions (soft float ABI debug symbols) + Intel MPX is a set of processor features which, with compiler, + runtime library and OS support, brings increased robustness to + software by checking pointer references whose compile time normal + intentions are usurped at runtime due to buffer overflow. +')`'dnl libsfmpx +')`'dnl libmpx + +ifenabled(`libbacktrace',` +Package: libbacktrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libbacktrace'BTRACE_SO`-armel [armel], libbacktrace'BTRACE_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libbacktrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,,=), ${misc:Depends} +ifdef(`TARGET',`',`Provides: libbacktrace'BTRACE_SO`-dbg-armel [armel], libbacktrace'BTRACE_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: stack backtrace library (debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: lib32backtrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: stack backtrace library (32bit) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: lib32backtrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (32 bit debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: lib64backtrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (64bit) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: lib64backtrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (64bit debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libn32backtrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (n32) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libn32backtrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (n32 debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +ifenabled(`libx32backtrace',` +Package: libx32backtrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (x32) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libx32backtrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (x32 debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. +')`'dnl libx32backtrace + +ifenabled(`libhfbacktrace',` +Package: libhfbacktrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libbacktrace'BTRACE_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: stack backtrace library (hard float ABI) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libhfbacktrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,hf,=), ${misc:Depends} +wifdef(`TARGET',`dnl',`Conflicts: libbacktrace'BTRACE_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: stack backtrace library (hard float ABI debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. +')`'dnl libhfbacktrace + +ifenabled(`libsfbacktrace',` +Package: libsfbacktrace`'BTRACE_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (soft float ABI) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + +Package: libsfbacktrace`'BTRACE_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(backtrace`'BTRACE_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library (soft float ABI debug symbols) + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. +')`'dnl libsfbacktrace + +ifenabled(`libneonbacktrace',` +Package: libbacktrace`'BTRACE_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: stack backtrace library [neon optimized] + libbacktrace uses the GCC unwind interface to collect a stack trace, + and parses DWARF debug info to get file/line/function information. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonbacktrace +')`'dnl libbacktrace + + +ifenabled(`libqmath',` +Package: libquadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libquadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,,=), ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: lib32quadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (32bit) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: lib32quadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (32 bit debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +Package: lib64quadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (64bit) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: lib64quadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (64bit debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. + +#Package: libn32quadmath`'QMATH_SO`'LS +#Section: ifdef(`TARGET',`devel',`libs') +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Priority: ifdef(`TARGET',`extra',`PRI(optional)') +#Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +#BUILT_USING`'dnl +#Description: GCC Quad-Precision Math Library (n32) +# A library, which provides quad-precision mathematical functions on targets +# supporting the __float128 datatype. The library is used to provide on such +# targets the REAL(16) type in the GNU Fortran compiler. + +#Package: libn32quadmath`'QMATH_SO-dbg`'LS +#Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +#Section: debug +#Priority: extra +#Depends: BASELDEP, libdep(quadmath`'QMATH_SO,n32,=), ${misc:Depends} +#BUILT_USING`'dnl +#Description: GCC Quad-Precision Math Library (n32 debug symbols) +# A library, which provides quad-precision mathematical functions on targets +# supporting the __float128 datatype. + +ifenabled(`libx32qmath',` +Package: libx32quadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (x32) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libx32quadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (x32 debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. +')`'dnl libx32qmath + +ifenabled(`libhfqmath',` +Package: libhfquadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (hard float ABI) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libhfquadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,hf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (hard float ABI debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. +')`'dnl libhfqmath + +ifenabled(`libsfqmath',` +Package: libsfquadmath`'QMATH_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (soft float ABI) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. The library is used to provide on such + targets the REAL(16) type in the GNU Fortran compiler. + +Package: libsfquadmath`'QMATH_SO-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(quadmath`'QMATH_SO,sf,=), ${misc:Depends} +BUILT_USING`'dnl +Description: GCC Quad-Precision Math Library (hard float ABI debug symbols) + A library, which provides quad-precision mathematical functions on targets + supporting the __float128 datatype. +')`'dnl libsfqmath +')`'dnl libqmath + +ifenabled(`libcc1',` +Package: libcc1-`'CC1_SO +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC cc1 plugin for GDB + libcc1 is a plugin for GDB. +')`'dnl libcc1 + +ifenabled(`libjit',` +Package: libgccjit`'GCCJIT_SO +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Breaks: python-gccjit (<< 0.4-4), python3-gccjit (<< 0.4-4) +BUILT_USING`'dnl +Description: GCC just-in-time compilation (shared library) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: libgccjit`'GCCJIT_SO-dbg +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: extra +Depends: BASEDEP, libgccjit`'GCCJIT_SO (= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +Breaks: libgccjit-5-dbg, libgccjit-6-dbg +Replaces: libgccjit-5-dbg, libgccjit-6-dbg +BUILT_USING`'dnl +Description: GCC just-in-time compilation (debug information) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. +')`'dnl libjit + +ifenabled(`jit',` +Package: libgccjit`'PV-doc +Section: doc +Architecture: all +Priority: extra +Depends: BASEDEP, ${misc:Depends} +Conflicts: libgccjit-5-doc, libgccjit-6-doc +Description: GCC just-in-time compilation (documentation) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. + +Package: libgccjit`'PV-dev +Section: ifdef(`TARGET',`devel',`libdevel') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, libgccjit`'GCCJIT_SO (>= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Suggests: libgccjit`'PV-dbg +Description: GCC just-in-time compilation (development files) + libgccjit provides an embeddable shared library with an API for adding + compilation to existing programs using GCC. +')`'dnl jit + +ifenabled(`objpp',` +ifenabled(`objppdev',` +Package: gobjc++`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), g++`'PV`'TS (= ${gcc:Version}), ${shlibs:Depends}, libidevdep(objc`'PV-dev,,=), ${misc:Depends} +Suggests: ${gobjcxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}) +Provides: objc++-compiler`'TS +BUILT_USING`'dnl +Description: GNU Objective-C++ compiler + This is the GNU Objective-C++ compiler, which compiles + Objective-C++ on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. +')`'dnl obcppdev + +ifenabled(`multilib',` +Package: gobjc++`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc++`'PV`'TS (= ${gcc:Version}), g++`'PV-multilib`'TS (= ${gcc:Version}), gobjc`'PV-multilib`'TS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Objective-C++ compiler (multilib support) + This is the GNU Objective-C++ compiler, which compiles Objective-C++ on + platforms supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl obcpp + +ifenabled(`objc',` +ifenabled(`objcdev',` +Package: gobjc`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libidevdep(objc`'PV-dev,,=), ${misc:Depends} +Suggests: ${gobjc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libdbgdep(objc`'OBJC_SO-dbg,) +Provides: objc-compiler`'TS +ifdef(`__sparc__',`Conflicts: gcc`'PV-sparc64', `dnl') +BUILT_USING`'dnl +Description: GNU Objective-C compiler + This is the GNU Objective-C compiler, which compiles + Objective-C on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +ifenabled(`multilib',` +Package: gobjc`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libobjcbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Objective-C compiler (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU Objective-C compiler, which compiles Objective-C on platforms + supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +Package: libobjc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,), libdep(objc`'OBJC_SO,), ${shlibs:Depends}, ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: lib64objc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,64), libdep(objc`'OBJC_SO,64), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (64bit development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: lib32objc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,32), libdep(objc`'OBJC_SO,32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (32bit development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +Package: libn32objc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,n32), libdep(objc`'OBJC_SO,n32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (n32 development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. + +ifenabled(`x32dev',` +Package: libx32objc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,x32), libdep(objc`'OBJC_SO,x32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (x32 development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. +')`'dnl libx32objc + +ifenabled(`armml',` +Package: libhfobjc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,hf), libdep(objc`'OBJC_SO,hf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (hard float ABI development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. +')`'dnl armml + +ifenabled(`armml',` +Package: libsfobjc`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,sf), libdep(objc`'OBJC_SO,sf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (soft float development files) + This package contains the headers and static library files needed to build + GNU ObjC applications. +')`'dnl armml +')`'dnl objcdev + +ifenabled(`libobjc',` +Package: libobjc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libobjc'OBJC_SO`-armel [armel], libobjc'OBJC_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +ifelse(OBJC_SO,`2',`Breaks: ${multiarch:breaks} +',`')')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications + Library needed for GNU ObjC applications linked against the shared library. + +Package: libobjc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libobjc'OBJC_SO`-dbg-armel [armel], libobjc'OBJC_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,,=), libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libobjc + +ifenabled(`lib64objc',` +Package: lib64objc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (64bit) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib64objc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,64,=), libdbgdep(gcc`'GCC_SO-dbg,64,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (64 bit debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl lib64objc + +ifenabled(`lib32objc',` +Package: lib32objc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (32bit) + Library needed for GNU ObjC applications linked against the shared library. + +Package: lib32objc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,32,=), libdbgdep(gcc`'GCC_SO-dbg,32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (32 bit debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl lib32objc + +ifenabled(`libn32objc',` +Package: libn32objc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (n32) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libn32objc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,n32,=), libdbgdep(gcc`'GCC_SO-dbg,n32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (n32 debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libn32objc + +ifenabled(`libx32objc',` +Package: libx32objc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (x32) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libx32objc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,x32,=), libdbgdep(gcc`'GCC_SO-dbg,x32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (x32 debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libx32objc + +ifenabled(`libhfobjc',` +Package: libhfobjc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libobjc'OBJC_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (hard float ABI) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libhfobjc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,hf,=), libdbgdep(gcc`'GCC_SO-dbg,hf,>=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libobjc'OBJC_SO`-dbg-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (hard float ABI debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libhfobjc + +ifenabled(`libsfobjc',` +Package: libsfobjc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libobjc'OBJC_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (soft float ABI) + Library needed for GNU ObjC applications linked against the shared library. + +Package: libsfobjc`'OBJC_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: extra +Depends: BASELDEP, libdep(objc`'OBJC_SO,sf,=), libdbgdep(gcc`'GCC_SO-dbg,sf,>=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libobjc'OBJC_SO`-dbg-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications (soft float ABI debug symbols) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libsfobjc + +ifenabled(`libneonobjc',` +Package: libobjc`'OBJC_SO-neon`'LS +Section: libs +Architecture: NEON_ARCHS +Priority: PRI(optional) +Depends: BASELDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Objective-C applications [NEON version] + Library needed for GNU ObjC applications linked against the shared library. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneonobjc +')`'dnl objc + +ifenabled(`fortran',` +ifenabled(`fdev',` +Package: gfortran`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libidevdep(gfortran`'PV-dev,,=), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: fortran95-compiler, ${fortran:mod-version} +Suggests: ${gfortran:multilib}, gfortran`'PV-doc, + libdbgdep(gfortran`'FORTRAN_SO-dbg,), + libcoarrays-dev +BUILT_USING`'dnl +Description: GNU Fortran compiler + This is the GNU Fortran compiler, which compiles + Fortran on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +ifenabled(`multilib',` +Package: gfortran`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gfortran`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libgfortranbiarchdev}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Fortran compiler (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU Fortran compiler, which compiles Fortran on platforms + supported by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +ifenabled(`gfdldoc',` +Package: gfortran`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Description: Documentation for the GNU Fortran compiler (gfortran) + Documentation for the GNU Fortran compiler in info `format'. +')`'dnl gfdldoc + +Package: libgfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',), libdep(gfortran`'FORTRAN_SO,), ${shlibs:Depends}, ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: lib64gfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',64), libdep(gfortran`'FORTRAN_SO,64), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (64bit development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: lib32gfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',32), libdep(gfortran`'FORTRAN_SO,32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (32bit development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +Package: libn32gfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',n32), libdep(gfortran`'FORTRAN_SO,n32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (n32 development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. + +ifenabled(`x32dev',` +Package: libx32gfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',x32), libdep(gfortran`'FORTRAN_SO,x32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (x32 development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. +')`'dnl libx32gfortran + +ifenabled(`armml',` +Package: libhfgfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',hf), libdep(gfortran`'FORTRAN_SO,hf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (hard float ABI development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. +')`'dnl armml + +ifenabled(`armml',` +Package: libsfgfortran`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev`',sf), libdep(gfortran`'FORTRAN_SO,sf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (soft float ABI development files) + This package contains the headers and static library files needed to build + GNU Fortran applications. +')`'dnl armml +')`'dnl fdev + +ifenabled(`libgfortran',` +Package: libgfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libgfortran'FORTRAN_SO`-armel [armel], libgfortran'FORTRAN_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libgfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libgfortran'FORTRAN_SO`-dbg-armel [armel], libgfortran'FORTRAN_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,,=), libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libgfortran + +ifenabled(`lib64gfortran',` +Package: lib64gfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (64bit) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib64gfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (64bit debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl lib64gfortran + +ifenabled(`lib32gfortran',` +Package: lib32gfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (32bit) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: lib32gfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (32 bit debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl lib32gfortran + +ifenabled(`libn32gfortran',` +Package: libn32gfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (n32) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libn32gfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (n32 debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libn32gfortran + +ifenabled(`libx32gfortran',` +Package: libx32gfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (x32) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libx32gfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (x32 debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libx32gfortran + +ifenabled(`libhfgfortran',` +Package: libhfgfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgfortran'FORTRAN_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (hard float ABI) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libhfgfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,hf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgfortran'FORTRAN_SO`-dbg-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libhfgfortran + +ifenabled(`libsfgfortran',` +Package: libsfgfortran`'FORTRAN_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgfortran'FORTRAN_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (soft float ABI) + Library needed for GNU Fortran applications linked against the + shared library. + +Package: libsfgfortran`'FORTRAN_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: extra +Depends: BASELDEP, libdep(gfortran`'FORTRAN_SO,sf,=), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libgfortran'FORTRAN_SO`-dbg-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libsfgfortran + +ifenabled(`libneongfortran',` +Package: libgfortran`'FORTRAN_SO-neon`'LS +Section: libs +Architecture: NEON_ARCHS +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks} +')`'dnl +Priority: extra +Depends: BASELDEP, libgcc1-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Fortran applications [NEON version] + Library needed for GNU Fortran applications linked against the + shared library. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl libneongfortran +')`'dnl fortran + +ifenabled(`ggo',` +ifenabled(`godev',` +Package: gccgo`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ifdef(`STANDALONEGO',`${dep:libcc1}, ',`gcc`'PV`'TS (= ${gcc:Version}), ')libidevdep(go`'GO_SO,,>=), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: go-compiler +Suggests: ${go:multilib}, gccgo`'PV-doc, libdbgdep(go`'GO_SO-dbg,) +Conflicts: ${golang:Conflicts} +BUILT_USING`'dnl +Description: GNU Go compiler + This is the GNU Go compiler, which compiles Go on platforms supported + by the gcc compiler. It uses the gcc backend to generate optimized code. + +ifenabled(`multilib',` +Package: gccgo`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gccgo`'PV`'TS (= ${gcc:Version}), ifdef(`STANDALONEGO',,`gcc`'PV-multilib`'TS (= ${gcc:Version}), ')${dep:libgobiarch}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${dep:libgobiarchdbg} +BUILT_USING`'dnl +Description: GNU Go compiler (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU Go compiler, which compiles Go on platforms supported + by the gcc compiler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +ifenabled(`gfdldoc',` +Package: gccgo`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +BUILT_USING`'dnl +Description: Documentation for the GNU Go compiler (gccgo) + Documentation for the GNU Go compiler in info `format'. +')`'dnl gfdldoc +')`'dnl fdev + +ifenabled(`libggo',` +Package: libgo`'GO_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libgo'GO_SO`-armel [armel], libgo'GO_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libgo3`'LS, libgo8`'LS +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications + Library needed for GNU Go applications linked against the + shared library. + +Package: libgo`'GO_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libgo'GO_SO`-dbg-armel [armel], libgo'GO_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: extra +Depends: BASELDEP, libdep(go`'GO_SO,,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. +')`'dnl libgo + +ifenabled(`lib64ggo',` +Package: lib64go`'GO_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64go3`'LS, lib64go8`'LS +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (64bit) + Library needed for GNU Go applications linked against the + shared library. + +Package: lib64go`'GO_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: extra +Depends: BASELDEP, libdep(go`'GO_SO,64,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (64bit debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. +')`'dnl lib64go + +ifenabled(`lib32ggo',` +Package: lib32go`'GO_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +Replaces: lib32go3`'LS, lib32go8`'LS +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (32bit) + Library needed for GNU Go applications linked against the + shared library. + +Package: lib32go`'GO_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: extra +Depends: BASELDEP, libdep(go`'GO_SO,32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (32 bit debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. +')`'dnl lib32go + +ifenabled(`libn32ggo',` +Package: libn32go`'GO_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libn32go3`'LS, libn32go8`'LS +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (n32) + Library needed for GNU Go applications linked against the + shared library. + +Package: libn32go`'GO_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: extra +Depends: BASELDEP, libdep(go`'GO_SO,n32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (n32 debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. +')`'dnl libn32go + +ifenabled(`libx32ggo',` +Package: libx32go`'GO_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libx32go3`'LS, libx32go8`'LS +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (x32) + Library needed for GNU Go applications linked against the + shared library. + +Package: libx32go`'GO_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: extra +Depends: BASELDEP, libdep(go`'GO_SO,x32,=), ${misc:Depends} +BUILT_USING`'dnl +Description: Runtime library for GNU Go applications (x32 debug symbols) + Library needed for GNU Go applications linked against the + shared library. This currently is an empty package, because the + library is completely unstripped. +')`'dnl libx32go +')`'dnl ggo + +ifenabled(`c++',` +ifenabled(`libcxx',` +Package: libstdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(important)) +Depends: BASELDEP, ${dep:libc}, ${shlibs:Depends}, ${misc:Depends} +Provides: ifdef(`TARGET',`libstdc++CXX_SO-TARGET-dcv1',`libstdc++'CXX_SO`-armel [armel], libstdc++'CXX_SO`-armhf [armhf]') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Breaks: ${multiarch:breaks}, PR66145BREAKS +')`'dnl +Conflicts: scim (<< 1.4.2-1) +Replaces: libstdc++CXX_SO`'PV-dbg`'LS (<< 4.9.0-3) +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libcxx + +ifenabled(`lib32cxx',` +Package: lib32stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,32), ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (32 bit Version) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib32cxx + +ifenabled(`lib64cxx',` +Package: lib64stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,64), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (64bit) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib64cxx + +ifenabled(`libn32cxx',` +Package: libn32stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,n32), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (n32) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libn32cxx + +ifenabled(`libx32cxx',` +Package: libx32stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,x32), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libx32stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (x32) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libx32cxx + +ifenabled(`libhfcxx',` +Package: libhfstdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,hf), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libhfstdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +ifdef(`TARGET',`dnl',`Conflicts: libstdc++'CXX_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (hard float ABI) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libhfcxx + +ifenabled(`libsfcxx',` +Package: libsfstdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdep(gcc1,sf), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libsfstdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +ifdef(`TARGET',`dnl',`Conflicts: libstdc++'CXX_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (soft float ABI) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libsfcxx + +ifenabled(`libneoncxx',` +Package: libstdc++CXX_SO-neon`'LS +Architecture: NEON_ARCHS +Section: libs +Priority: extra +Depends: BASELDEP, libc6-neon`'LS, libgcc1-neon`'LS, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 [NEON version] + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + This set of libraries is optimized to use a NEON coprocessor, and will + be selected instead when running under systems which have one. +')`'dnl + +ifenabled(`c++dev',` +Package: libstdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,,=), + libdep(stdc++CXX_SO,,>=), ${dep:libcdev}, ${misc:Depends} +ifdef(`TARGET',`',`dnl native +Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, + libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, + libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev +Suggests: libstdc++`'PV-doc +')`'dnl native +Provides: libstdc++-dev`'LS`'ifdef(`TARGET',`, libstdc++-dev-TARGET-dcv1') +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libstdc++`'PV-pic`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,), + libdevdep(stdc++`'PV-dev,), ${misc:Depends} +ifdef(`TARGET',`Provides: libstdc++-pic-TARGET-dcv1 +',`')`'dnl +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (shared library subset kit)`'ifdef(`TARGET)',` (TARGET)', `') + This is used to develop subsets of the libstdc++ shared libraries for + use on custom installation floppies and in embedded systems. + . + Unless you are making one of those, you will not need this package. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libstdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,), + libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: ifdef(`TARGET',`libstdc++CXX_SO-dbg-TARGET-dcv1',`libstdc++'CXX_SO`'PV`-dbg-armel [armel], libstdc++'CXX_SO`'PV`-dbg-armhf [armhf]') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Recommends: libdevdep(stdc++`'PV-dev,) +Conflicts: libstdc++5-dbg`'LS, libstdc++5-3.3-dbg`'LS, libstdc++6-dbg`'LS, + libstdc++6-4.0-dbg`'LS, libstdc++6-4.1-dbg`'LS, libstdc++6-4.2-dbg`'LS, + libstdc++6-4.3-dbg`'LS, libstdc++6-4.4-dbg`'LS, libstdc++6-4.5-dbg`'LS, + libstdc++6-4.6-dbg`'LS, libstdc++6-4.7-dbg`'LS, libstdc++6-4.8-dbg`'LS, + libstdc++6-4.9-dbg`'LS, libstdc++6-5-dbg`'LS, libstdc++6-6-dbg`'LS +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib32stdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,32), + libdep(stdc++CXX_SO,32), libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib32stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,32), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,32,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: lib32stdc++6-dbg`'LS, lib32stdc++6-4.0-dbg`'LS, + lib32stdc++6-4.1-dbg`'LS, lib32stdc++6-4.2-dbg`'LS, lib32stdc++6-4.3-dbg`'LS, + lib32stdc++6-4.4-dbg`'LS, lib32stdc++6-4.5-dbg`'LS, lib32stdc++6-4.6-dbg`'LS, + lib32stdc++6-4.7-dbg`'LS, lib32stdc++6-4.8-dbg`'LS, lib32stdc++6-4.9-dbg`'LS, + lib32stdc++6-5-dbg`'LS, lib32stdc++6-6-dbg`'LS +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib64stdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,64), + libdep(stdc++CXX_SO,64), libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib64stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,64), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,64,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: lib64stdc++6-dbg`'LS, lib64stdc++6-4.0-dbg`'LS, + lib64stdc++6-4.1-dbg`'LS, lib64stdc++6-4.2-dbg`'LS, lib64stdc++6-4.3-dbg`'LS, + lib64stdc++6-4.4-dbg`'LS, lib64stdc++6-4.5-dbg`'LS, lib64stdc++6-4.6-dbg`'LS, + lib64stdc++6-4.7-dbg`'LS, lib64stdc++6-4.8-dbg`'LS, lib64stdc++6-4.9-dbg`'LS, + lib64stdc++6-5-dbg`'LS, lib64stdc++6-6-dbg`'LS +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libn32stdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,n32), + libdep(stdc++CXX_SO,n32), libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libn32stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,n32), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,n32,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: libn32stdc++6-dbg`'LS, libn32stdc++6-4.0-dbg`'LS, + libn32stdc++6-4.1-dbg`'LS, libn32stdc++6-4.2-dbg`'LS, libn32stdc++6-4.3-dbg`'LS, + libn32stdc++6-4.4-dbg`'LS, libn32stdc++6-4.5-dbg`'LS, libn32stdc++6-4.6-dbg`'LS, + libn32stdc++6-4.7-dbg`'LS, libn32stdc++6-4.8-dbg`'LS, libn32stdc++6-4.9-dbg`'LS, + libn32stdc++6-5-dbg`'LS, libn32stdc++6-6-dbg`'LS +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +ifenabled(`x32dev',` +Package: libx32stdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,x32), libdep(stdc++CXX_SO,x32), + libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl x32dev + +ifenabled(`libx32dbgcxx',` +Package: libx32stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,x32), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,x32,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libx32stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: libx32stdc++6-dbg`'LS, libx32stdc++6-4.6-dbg`'LS, + libx32stdc++6-4.7-dbg`'LS, libx32stdc++6-4.8-dbg`'LS, libx32stdc++6-4.9-dbg`'LS, + libx32stdc++6-5-dbg`'LS, libx32stdc++6-6-dbg`'LS +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libx32dbgcxx + +ifenabled(`libhfdbgcxx',` +Package: libhfstdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,hf), + libdep(stdc++CXX_SO,hf), libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libhfstdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,hf), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,hf,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libhfstdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +ifdef(`TARGET',`dnl',`Conflicts: libhfstdc++6-dbg`'LS, libhfstdc++6-4.3-dbg`'LS, libhfstdc++6-4.4-dbg`'LS, libhfstdc++6-4.5-dbg`'LS, libhfstdc++6-4.6-dbg`'LS, libhfstdc++6-4.7-dbg`'LS, libhfstdc++6-4.8-dbg`'LS, libhfstdc++6-4.9-dbg`'LS, libhfstdc++6-5-dbg`'LS, libhfstdc++6-6-dbg`'LS, libstdc++'CXX_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libhfdbgcxx + +ifenabled(`libsfdbgcxx',` +Package: libsfstdc++`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,sf), + libdep(stdc++CXX_SO,sf), libdevdep(stdc++`'PV-dev,), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libsfstdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: debug +Priority: extra +Depends: BASELDEP, libdep(stdc++CXX_SO,sf), + libdevdep(stdc++`'PV-dev,), libdbgdep(gcc`'GCC_SO-dbg,sf,>=,${gcc:EpochVersion}), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libsfstdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +ifdef(`TARGET',`dnl',`Conflicts: libsfstdc++6-dbg`'LS, libsfstdc++6-4.3-dbg`'LS, libsfstdc++6-4.4-dbg`'LS, libsfstdc++6-4.5-dbg`'LS, libsfstdc++6-4.6-dbg`'LS, libsfstdc++6-4.7-dbg`'LS, libsfstdc++6-4.8-dbg`'LS, libsfstdc++6-4.9-dbg`'LS, libsfstdc++6-5-dbg`'LS, libhfstdc++6-6-dbg`'LS, libstdc++'CXX_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libsfdbgcxx + +ifdef(`TARGET', `', ` +Package: libstdc++`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, + libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc, + libstdc++6-4.4-doc, libstdc++6-4.5-doc, libstdc++6-4.6-doc, libstdc++6-4.7-doc, + libstdc++-4.8-doc, libstdc++-4.9-doc, libstdc++-5-doc, libstdc++-6-doc +Description: GNU Standard C++ Library v3 (documentation files) + This package contains documentation files for the GNU stdc++ library. + . + One set is the distribution documentation, the other set is the + source documentation including a namespace list, class hierarchy, + alphabetical list, compound list, file list, namespace members, + compound members and file members. +')`'dnl native +')`'dnl c++dev +')`'dnl c++ + +ifenabled(`ada',` +Package: gnat`'-GNAT_V`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +ifdef(`MULTIARCH', `Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Depends: BASEDEP, gcc`'PV`'TS (>= ${gcc:SoftVersion}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: gnat`'PV-doc, ada-reference-manual-2012, gnat`'-GNAT_V-sjlj +Breaks: gnat (<< 4.6.1), dh-ada-library (<< 6.0), gnat-4.6-base (= 4.6.4-2), + gnat-4.9-base (= 4.9-20140330-1) +Replaces: gnat (<< 4.6.1), dh-ada-library (<< 6.0), gnat-4.6-base (= 4.6.4-2), + gnat-4.9-base (= 4.9-20140330-1) +# Takes over symlink from gnat (<< 4.6.1): /usr/bin/gnatgcc. +# Takes over file from dh-ada-library (<< 6.0): debian_packaging.mk. +# g-base 4.6.4-2, 4.9-20140330-1 contain debian_packaging.mk by mistake. +# Newer versions of gnat and dh-ada-library will not provide these files. +Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-3.5, + gnat-4.0, gnat-4.1, gnat-4.2, gnat-4.3, gnat-4.4, gnat-4.6, gnat-4.7, gnat-4.8, + gnat-4.9, gnat-5`'TS, gnat-6`'TS +# These other packages will continue to provide /usr/bin/gnatmake and +# other files. +BUILT_USING`'dnl +Description: GNU Ada compiler + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + This package provides the compiler, tools and runtime library that handles + exceptions using the default zero-cost mechanism. + +ifenabled(`adasjlj',` +Package: gnat`'-GNAT_V-sjlj`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: extra +ifdef(`MULTIARCH', `Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Depends: BASEDEP, gnat`'-GNAT_V`'TS (= ${gnat:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Ada compiler (setjump/longjump runtime library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + This package provides an alternative runtime library that handles + exceptions using the setjump/longjump mechanism (as a static library + only). You can install it to supplement the normal compiler. +')`'dnl adasjlj + +ifenabled(`libgnat',` +Package: libgnat`'-GNAT_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: runtime for applications compiled with GNAT (shared library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the runtime shared library. + +Package: libgnat`'-GNAT_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: extra +Depends: BASELDEP, libgnat`'-GNAT_V`'LS (= ${gnat:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: runtime for applications compiled with GNAT (debugging symbols) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the debugging symbols. + +ifdef(`TARGET',`',` +Package: libgnatvsn`'GNAT_V-dev`'LS +Section: libdevel +Architecture: any +Priority: extra +Depends: BASELDEP, gnat`'PV`'TS (= ${gnat:Version}), + libgnatvsn`'GNAT_V`'LS (= ${gnat:Version}), ${misc:Depends} +Conflicts: libgnatvsn-dev (<< `'GNAT_V), + libgnatvsn4.1-dev, libgnatvsn4.3-dev, libgnatvsn4.4-dev, + libgnatvsn4.5-dev, libgnatvsn4.6-dev, libgnatvsn4.9-dev, + libgnatvsn5-dev`'LS, libgnatvsn6-dev`'LS, +BUILT_USING`'dnl +Description: GNU Ada compiler selected components (development files) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the development files and static library. + +Package: libgnatvsn`'GNAT_V`'LS +Architecture: any +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: PRI(optional) +Section: libs +Depends: BASELDEP, libgnat`'-GNAT_V`'LS (= ${gnat:Version}), + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU Ada compiler selected components (shared library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the runtime shared library. + +Package: libgnatvsn`'GNAT_V-dbg`'LS +Architecture: any +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +')`'dnl +Priority: extra +Section: debug +Depends: BASELDEP, libgnatvsn`'GNAT_V`'LS (= ${gnat:Version}), ${misc:Depends} +Suggests: gnat +BUILT_USING`'dnl +Description: GNU Ada compiler selected components (debugging symbols) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnatvsn library exports selected GNAT components for use in other + packages, most notably ASIS tools. It is licensed under the GNAT-Modified + GPL, allowing to link proprietary programs with it. + . + This package contains the debugging symbols. +')`'dnl native +')`'dnl libgnat + +ifenabled(`lib64gnat',` +Package: lib64gnat`'-GNAT_V +Section: libs +Architecture: biarch64_archs +Priority: PRI(optional) +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: runtime for applications compiled with GNAT (64 bits shared library) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the runtime shared library for 64 bits architectures. +')`'dnl libgnat + +ifenabled(`gfdldoc',` +Package: gnat`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Suggests: gnat`'PV +Conflicts: gnat-4.1-doc, gnat-4.2-doc, + gnat-4.3-doc, gnat-4.4-doc, + gnat-4.6-doc, gnat-4.9-doc, + gnat-5-doc, gnat-6-doc, +BUILT_USING`'dnl +Description: GNU Ada compiler (documentation) + GNAT is a compiler for the Ada programming language. It produces optimized + code on platforms supported by the GNU Compiler Collection (GCC). + . + The libgnat library provides runtime components needed by most + applications produced with GNAT. + . + This package contains the documentation in info `format'. +')`'dnl gfdldoc +')`'dnl ada + +ifenabled(`d ',` +Package: gdc`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: SOFTBASEDEP, g++`'PV`'TS (>= ${gcc:SoftVersion}), ${dep:gdccross}, ${dep:phobosdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: gdc, d-compiler, d-v2-compiler +Replaces: gdc (<< 4.4.6-5) +BUILT_USING`'dnl +Description: GNU D compiler (version 2)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU D compiler, which compiles D on platforms supported by gcc. + It uses the gcc backend to generate optimised code. + . + This compiler supports D language version 2. + +ifenabled(`multilib',` +Package: gdc`'PV-multilib`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: SOFTBASEDEP, gdc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libphobosbiarchdev}${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU D compiler (version 2, multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU D compiler, which compiles D on platforms supported by gcc. + It uses the gcc backend to generate optimised code. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +ifenabled(`libphobos',` +Package: libgphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`libphobos_archs') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libgphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + zlib1g-dev, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libgphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`libphobos_archs') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libgphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libgphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`libphobos_archs') +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: extra +Depends: BASELDEP, libgphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: libgphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, lib64gphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,64), lib64z1-dev, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (64bit development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib64gphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib64gphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: extra +Depends: BASELDEP, lib64gphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: lib64gphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, lib32gphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,32), lib32z1-dev, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (32bit development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: lib32gphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: lib32gphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: extra +Depends: BASELDEP, lib32gphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: lib32gphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +ifenabled(`libn32phobos',` +Package: libn32gphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libn32gphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,n32), libn32z1-dev, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (n32 development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libn32gphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libn32gphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: extra +Depends: BASELDEP, libn32gphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ +')`'dnl libn32phobos + +ifenabled(`libx32phobos',` +Package: libx32gphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libx32gphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,x32), ${dep:libx32z}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (x32 development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libx32gphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libx32gphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libx32gphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: extra +Depends: BASELDEP, libx32gphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: libx32gphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ +')`'dnl libx32phobos + +ifenabled(`armml',` +Package: libhfgphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libhfgphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,hf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (hard float ABI development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libhfgphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libhfgphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libhfgphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: extra +Depends: BASELDEP, libhfgphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: libhfgphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libsfgphobos`'PHOBOS_V`'LS (>= ${gdc:Version}), + libdevdep(gcc`'PV-dev,sf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Phobos D standard library (soft float ABI development files) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos`'PHOBOS_V`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +Replaces: libsfgphobos68`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (runtime library) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ + +Package: libsfgphobos`'PHOBOS_V-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: extra +Depends: BASELDEP, libsfgphobos`'PHOBOS_V`'LS (= ${gdc:Version}), ${misc:Depends} +Replaces: libsfgphobos68-dbg`'LS +BUILT_USING`'dnl +Description: Phobos D standard library (debug symbols) + This is the Phobos standard library that comes with the D2 compiler. + . + For more information check http://www.dlang.org/phobos/ +')`'dnl armml +')`'dnl libphobos +')`'dnl d + +ifenabled(`brig',` +ifenabled(`brigdev',` +Package: gccbrig`'PV`'TS +Architecture: any +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, + hsail-tools, + ${shlibs:Depends}, libidevdep(hsail-rt`'PV-dev,,=), ${misc:Depends} +Suggests: ${gccbrig:multilib}, + libdbgdep(hsail-rt`'HSAIL_SO-dbg,) +Provides: brig-compiler`'TS +BUILT_USING`'dnl +Description: GNU BRIG (HSA IL) frontend + This is the GNU BRIG (HSA IL) frontend. + The consumed format is a binary representation. The textual HSAIL + can be compiled to it with a separate assembler. + +ifenabled(`multiXXXlib',` +Package: gccbrig`'PV-multilib`'TS +Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS) +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gccbrig`'PV`'TS (= ${gcc:Version}), + gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libhsailrtbiarchdev}, + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GNU BRIG (HSA IL) frontend (multilib support)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU BRIG (HSA IL) frontend. + The consumed format is a binary representation. The textual HSAIL + can be compiled to it with a separate assembler. + . + This is a dependency package, depending on development packages + for the non-default multilib architecture(s). +')`'dnl multilib + +Package: libhsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,), libdep(hsail-rt`'HSAIL_SO,), + ${shlibs:Depends}, ${misc:Depends} +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +BUILT_USING`'dnl +Description: HSAIL runtime library (development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +ifenabled(`lib64hsail',` +Package: lib64hsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,64), libdep(hsail-rt`'HSAIL_SO,64), + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (64bit development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl lib64hsail + +ifenabled(`lib32hsail',` +Package: lib32hsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,32), libdep(hsail-rt`'HSAIL_SO,32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (32bit development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl lib32hsail + +ifenabled(`libn32hsail',` +Package: libn32hsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,n32), libdep(hsail-rt`'HSAIL_SO,n32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (n32 development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libn32hsail + +ifenabled(`x32dev',` +ifenabled(`libx32hsail',` +Package: libx32hsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,x32), libdep(hsail-rt`'HSAIL_SO,x32), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (x32 development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libx32hsail +')`'dnl x32dev + +ifenabled(`armml',` +ifenabled(`libhfhsail',` +Package: libhfhsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,hf), libdep(hsail-rt`'HSAIL_SO,hf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (hard float ABI development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libhfhsail +')`'dnl armml + +ifenabled(`armml',` +ifenabled(`libsfhsail',` +Package: libsfhsail-rt`'PV-dev`'LS +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Section: libdevel +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASELDEP, libdevdep(gcc`'PV-dev,sf), libdep(hsail-rt`'HSAIL_SO,sf), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (soft float development files) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libsfhsail +')`'dnl armml +')`'dnl hsailrtdev + +ifenabled(`libhsail',` +Package: libhsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libhsail-rt'HSAIL_SO`-armel [armel], libhsail-rt'HSAIL_SO`-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +ifelse(HSAIL_SO,`2',`Breaks: ${multiarch:breaks} +',`')')`'dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libhsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`any') +ifdef(`TARGET',`',`Provides: libhsail-rt'HSAIL_SO`-dbg-armel [armel], libhsail-rt'HSAIL_SO`-dbg-armhf [armhf] +')`'dnl +ifdef(`MULTIARCH', `Multi-Arch: same +')`'dnl +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,,=), libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libhsail + +ifenabled(`lib64hsail',` +Package: lib64hsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (64bit) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: lib64hsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch64_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,64,=), libdbgdep(gcc`'GCC_SO-dbg,64,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (64 bit debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl lib64hsail + +ifenabled(`lib32hsail',` +Package: lib32hsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Conflicts: ${confl:lib32} +BUILT_USING`'dnl +Description: HSAIL runtime library (32bit) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: lib32hsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarch32_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,32,=), libdbgdep(gcc`'GCC_SO-dbg,32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (32 bit debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl lib32hsail + +ifenabled(`libn32hsail',` +Package: libn32hsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (n32) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libn32hsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchn32_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,n32,=), libdbgdep(gcc`'GCC_SO-dbg,n32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (n32 debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libn32hsail + +ifenabled(`libx32hsail',` +Package: libx32hsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (x32) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libx32hsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchx32_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,x32,=), libdbgdep(gcc`'GCC_SO-dbg,x32,>=,${gcc:EpochVersion}), ${misc:Depends} +BUILT_USING`'dnl +Description: HSAIL runtime library (x32 debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libx32hsail + +ifenabled(`libhfhsail',` +Package: libhfhsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libhsail-rt'HSAIL_SO`-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: HSAIL runtime library (hard float ABI) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libhfhsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchhf_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,hf,=), libdbgdep(gcc`'GCC_SO-dbg,hf,>=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libhsail-rt'HSAIL_SO`-dbg-armhf [biarchhf_archs]') +BUILT_USING`'dnl +Description: HSAIL runtime library (hard float ABI debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libhfhsailrt + +ifenabled(`libsfhsail',` +Package: libsfhsail-rt`'HSAIL_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASELDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libhsail-rt'HSAIL_SO`-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: HSAIL runtime library (soft float ABI) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. + +Package: libsfhsail-rt`'HSAIL_SO-dbg`'LS +Section: debug +Architecture: ifdef(`TARGET',`CROSS_ARCH',`biarchsf_archs') +Priority: extra +Depends: BASELDEP, libdep(hsail-rt`'HSAIL_SO,sf,=), libdbgdep(gcc`'GCC_SO-dbg,sf,>=,${gcc:EpochVersion}), ${misc:Depends} +ifdef(`TARGET',`dnl',`Conflicts: libhsail-rt'HSAIL_SO`-dbg-armel [biarchsf_archs]') +BUILT_USING`'dnl +Description: HSAIL runtime library (soft float ABI debug symbols) + This library implements the agent-side runtime functionality required + to run HSA finalized programs produced by the BRIG frontend. + . + The library contains both the code required to run kernels on the agent + and also functions implementing more complex HSAIL instructions. +')`'dnl libsfhsailrt +')`'dnl brig + +ifdef(`TARGET',`',`dnl +ifenabled(`libs',` +#Package: gcc`'PV-soft-float +#Architecture: arm armel armhf +#Priority: PRI(optional) +#Depends: BASEDEP, depifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}, ${misc:Depends} +#Conflicts: gcc-4.4-soft-float, gcc-4.5-soft-float, gcc-4.6-soft-float +#BUILT_USING`'dnl +#Description: GCC soft-floating-point gcc libraries (ARM) +# These are versions of basic static libraries such as libgcc.a compiled +# with the -msoft-float option, for CPUs without a floating-point unit. +')`'dnl commonlibs +')`'dnl + +ifenabled(`fixincl',` +Package: fixincludes +Architecture: any +Priority: PRI(optional) +Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: Fix non-ANSI header files + FixIncludes was created to fix non-ANSI system header files. Many + system manufacturers supply proprietary headers that are not ANSI compliant. + The GNU compilers cannot compile non-ANSI headers. Consequently, the + FixIncludes shell script was written to fix the header files. + . + Not all packages with header files are installed on the system, when the + package is built, so we make fixincludes available at build time of other + packages, such that checking tools like lintian can make use of it. +')`'dnl fixincl + +ifenabled(`cdev',` +ifdef(`TARGET', `', ` +ifenabled(`gfdldoc',` +Package: gcc`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Conflicts: gcc-docs (<< 2.95.2) +Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2) +Description: Documentation for the GNU compilers (gcc, gobjc, g++) + Documentation for the GNU compilers in info `format'. +')`'dnl gfdldoc +')`'dnl native +')`'dnl cdev + +ifenabled(`olnvptx',` +Package: gcc`'PV-offload-nvptx +Architecture: amd64 +ifdef(`TARGET',`Multi-Arch: foreign +')dnl +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${dep:libcdev}, + nvptx-tools, libgomp-plugin-nvptx`'GOMP_SO (>= ${gcc:Version}), + ${shlibs:Depends}, ${misc:Depends} +BUILT_USING`'dnl +Description: GCC offloading compiler to NVPTX + The package provides offloading support for NVidia PTX. OpenMP and OpenACC + programs linked with -fopenmp will by default add PTX code into the binaries, + which can be offloaded to NVidia PTX capable devices if available. + +ifenabled(`libgompnvptx',` +Package: libgomp-plugin-nvptx`'GOMP_SO +Architecture: amd64 +Multi-Arch: same +Section: libs +Depends: BASEDEP, libgomp`'GOMP_SO`'LS, ${shlibs:Depends}, ${misc:Depends} +Suggests: libcuda1 +BUILT_USING`'dnl +Description: GCC OpenMP v4.5 plugin for offloading to NVPTX + This package contains libgomp plugin for offloading to NVidia + PTX. The plugin needs libcuda.so.1 shared library that has to be + installed separately. +')`'dnl libgompnvptx +')`'dnl olnvptx + +ifdef(`TARGET',`',`dnl +ifenabled(`libnof',` +#Package: gcc`'PV-nof +#Architecture: powerpc +#Priority: PRI(optional) +#Depends: BASEDEP, ${shlibs:Depends}ifenabled(`cdev',`, gcc`'PV (= ${gcc:Version})'), ${misc:Depends} +#Conflicts: gcc-3.2-nof +#BUILT_USING`'dnl +#Description: GCC no-floating-point gcc libraries (powerpc) +# These are versions of basic static libraries such as libgcc.a compiled +# with the -msoft-float option, for CPUs without a floating-point unit. +')`'dnl libnof +')`'dnl + +ifenabled(`source',` +Package: gcc`'PV-source +Architecture: all +Priority: PRI(optional) +Depends: make, autoconf2.64, quilt, patchutils, sharutils, gawk, ${misc:Depends} +Description: Source of the GNU Compiler Collection + This package contains the sources and patches which are needed to + build the GNU Compiler Collection (GCC). +')`'dnl source +dnl +')`'dnl gcc-X.Y +dnl last line in file --- gcc-7-7.2.0.orig/debian/copyright +++ gcc-7-7.2.0/debian/copyright @@ -0,0 +1,1404 @@ +This is the Debian GNU/Linux prepackaged version of the GNU compiler +collection, containing Ada, C, C++, Fortran 95, Objective-C, +Objective-C++, and Treelang compilers, documentation, and support +libraries. In addition, Debian provides the gdc compiler, either in +the same source package, or built from a separate same source package. +Packaging is done by the Debian GCC Maintainers +, with sources obtained from: + + ftp://gcc.gnu.org/pub/gcc/releases/ (for full releases) + svn://gcc.gnu.org/svn/gcc/ (for prereleases) + http://bitbucket.org/goshawk/gdc (for D) + https://github.com/MentorEmbedded/nvptx-newlib/ (for newlib-nvptx) + +The current gcc-7 source package is taken from the SVN gcc-7-branch. + +Changes: See changelog.Debian.gz + +Debian splits the GNU Compiler Collection into packages for each language, +library, and documentation as follows: + +Language Compiler package Library package Documentation +--------------------------------------------------------------------------- +Ada gnat-7 libgnat-7 gnat-7-doc +BRIG gccbrig-7 libhsail-rt0 +C gcc-7 gcc-7-doc +C++ g++-7 libstdc++6 libstdc++6-7-doc +D gdc-7 +Fortran 95 gfortran-7 libgfortran3 gfortran-7-doc +Go gccgo-7 libgo0 +Objective C gobjc-7 libobjc2 +Objective C++ gobjc++-7 + +For some language run-time libraries, Debian provides source files, +development files, debugging symbols and libraries containing position- +independent code in separate packages: + +Language Sources Development Debugging Position-Independent +------------------------------------------------------------------------------ +C++ libstdc++6-7-dbg libstdc++6-7-pic +D libphobos-7-dev + +Additional packages include: + +All languages: +libgcc1, libgcc2, libgcc4 GCC intrinsics (platform-dependent) +gcc-7-base Base files common to all compilers +gcc-7-soft-float Software floating point (ARM only) +gcc-7-source The sources with patches + +Ada: +libgnatvsn-dev, libgnatvsn7 GNAT version library + +C: +cpp-7, cpp-7-doc GNU C Preprocessor +libssp0-dev, libssp0 GCC stack smashing protection library +libquadmath0 Math routines for the __float128 type +fixincludes Fix non-ANSI header files + +C, C++ and Fortran 95: +libgomp1-dev, libgomp1 GCC OpenMP (GOMP) support library +libitm1-dev, libitm1 GNU Transactional Memory Library + +Biarch support: On some 64-bit platforms which can also run 32-bit code, +Debian provides additional packages containing 32-bit versions of some +libraries. These packages have names beginning with 'lib32' instead of +'lib', for example lib32stdc++6. Similarly, on some 32-bit platforms which +can also run 64-bit code, Debian provides additional packages with names +beginning with 'lib64' instead of 'lib'. These packages contain 64-bit +versions of the libraries. (At this time, not all platforms and not all +libraries support biarch.) The license terms for these lib32 or lib64 +packages are identical to the ones for the lib packages. + + +COPYRIGHT STATEMENTS AND LICENSING TERMS + + +GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, +1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. + +GCC 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. + +GCC 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. + +Files that have exception clauses are licensed under the terms of the +GNU General Public License; either version 3, or (at your option) any +later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 3 of this +license in `/usr/share/common-licenses/GPL-3'. + +The following runtime libraries are licensed under the terms of the +GNU General Public License (v3 or later) with version 3.1 of the GCC +Runtime Library Exception (included in this file): + + - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*, + gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h, + gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c, + gcc/tsystem.h, gcc/typeclass.h). + - libatomic + - libdecnumber + - libgomp + - libitm + - libssp + - libstdc++-v3 + - libobjc + - libgfortran + - The libgnat-7 Ada support library and libgnatvsn library. + - Various config files in gcc/config/ used in runtime libraries. + - libvtv + +The libbacktrace library is licensed under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3) The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +The libsanitizer libraries (libasan, liblsan, libtsan, libubsan) are +licensed under the following terms: + +Copyright (c) 2009-2014 by the LLVM contributors. + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +The libffi library is licensed under the following terms: + + libffi - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +The documentation is licensed under the GNU Free Documentation License (v1.2). +On Debian GNU/Linux systems, the complete text of this license is in +`/usr/share/common-licenses/GFDL-1.2'. + + +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + + +libquadmath/*.[hc]: + + Copyright (C) 2010 Free Software Foundation, Inc. + Written by Francois-Xavier Coudert + Written by Tobias Burnus + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +libquadmath/math: + +atanq.c, expm1q.c, j0q.c, j1q.c, log1pq.c, logq.c: + Copyright 2001 by Stephen L. Moshier + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +coshq.c, erfq.c, jnq.c, lgammaq.c, powq.c, roundq.c: + Changes for 128-bit __float128 are + Copyright (C) 2001 Stephen L. Moshier + and are incorporated herein by permission of the author. The author + reserves the right to distribute this material elsewhere under different + copying permissions. These modifications are distributed here under + the following terms: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +ldexpq.c: + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + +cosq_kernel.c, expq.c, sincos_table.c, sincosq.c, sincosq_kernel.c, +sinq_kernel.c, truncq.c: + Copyright (C) 1997, 1999 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + +isinfq.c: + * Written by J.T. Conklin . + * Change for long double by Jakub Jelinek + * Public domain. + +llroundq.c, lroundq.c, tgammaq.c: + Copyright (C) 1997, 1999, 2002, 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1997 and + Jakub Jelinek , 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + +log10q.c: + Cephes Math Library Release 2.2: January, 1991 + Copyright 1984, 1991 by Stephen L. Moshier + Adapted for glibc November, 2001 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +remaining files: + + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + + +gcc/go/gofrontend, libgo: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +libcilkrts, libmpx: + Copyright (C) 2009-2014, Intel Corporation + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + +D: +gdc-7 GNU D Compiler +libphobos-7-dev D standard runtime library + +The D source package is made up of the following components. + +The D front-end for GCC: + - d/* + +Copyright (C) 2004-2007 David Friedman +Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010 + +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 2 of the License, or +(at your option) any later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 2 of this +license in `/usr/share/common-licenses/GPL-2'. + + +The DMD Compiler implementation of the D programming language: + - d/dmd/* + +Copyright (c) 1999-2010 by Digital Mars +All Rights Reserved +written by Walter Bright +http://www.digitalmars.com +License for redistribution is by either the Artistic License or +the GNU General Public License (v1). + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', the Artistic +license in `/usr/share/common-licenses/Artistic'. + + +The Zlib data compression library: + - d/phobos/etc/c/zlib/* + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +The Phobos standard runtime library: + - d/phobos/* + +Unless otherwise marked within the file, each file in the source +is under the following licenses: + +Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com +Written by Walter Bright + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, in both source and binary form, subject to the following +restrictions: + + o The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + o Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + o This notice may not be removed or altered from any source + distribution. + +By plainly marking modifications, something along the lines of adding to each +file that has been changed a "Modified by Foo Bar" line +underneath the "Written by" line would be adequate. + +The libhsail-rt library is licensed under the following terms: + + Copyright (C) 2015-2017 Free Software Foundation, Inc. + Contributed by Pekka Jaaskelainen + for General Processor Tech. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. + +libhsail-rt/rt/fp16.c is licensed under the following terms: + + Copyright (C) 2008-2017 Free Software Foundation, Inc. + Contributed by CodeSourcery. + + This file 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 file 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. + + 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 + . + +newlib-nvptx-20yymmdd/: + +Upstream Authors: +newlib@sources.redhat.com +Jeff Johnston +Tom Fitzsimmons + +The newlib subdirectory is a collection of software from several sources. +Each file may have its own copyright/license that is embedded in the source +file. + +This list documents those licenses which are more restrictive than +a BSD-like license or require the copyright notice +to be duplicated in documentation and/or other materials associated with +the distribution. Certain licenses documented here only apply to +specific targets. Certain clauses only apply if you are building the +code as part of your binary. + +Note that this list may omit certain licenses that +only pertain to the copying/modifying of the individual source code. +If you are distributing the source code, then you do not need to +worry about these omitted licenses, so long as you do not modify the +copyright information already in place. + +Parts of this work are licensed under the terms of the GNU General +Public License. On Debian systems, the complete text of this license +can be found in /usr/share/common-licenses/GPL. + +Parts of this work are licensed under the terms of the GNU Library +General Public License. On Debian systems, the complete text of this +license be found in /usr/share/common-licenses/LGPL. + +(1) University of California, Berkeley + +[1a] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +and other materials related to such distribution and use +acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1b] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1c] + +Copyright (c) 1981, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 +The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1d] + +Copyright (c) 1988, 1990, 1993 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1e] + +Copyright (c) 1982, 1986, 1989, 1991, 1993, 1994 +The Regents of the University of California. All rights reserved. +(c) UNIX System Laboratories, Inc. +All or some portions of this file are derived from material licensed +to the University of California by American Telephone and Telegraph +Co. or Unix System Laboratories, Inc. and are reproduced herein with +the permission of UNIX System Laboratories, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1f] + +Copyright (c) 1987, 1988, 2000 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that: (1) source distributions retain this entire copyright +notice and comment, and (2) distributions including binaries display +the following acknowledgement: ``This product includes software +developed by the University of California, Berkeley and its contributors'' +in the documentation or other materials provided with the distribution +and in all advertising materials mentioning features or use of this +software. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +------------------------------------------------------------- + Please note that in some of the above alternate licenses, there is a + statement regarding that acknowledgement must be made in any + advertising materials for products using the code. This restriction + no longer applies due to the following license change: + + ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + + In some cases the defunct clause has been removed in modified newlib code and + in some cases, the clause has been left as-is. +------------------------------------------------------------- + +(2) Cygwin (cygwin targets only) + +Copyright 2001 Red Hat, Inc. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. + +(3) David M. Gay at AT&T + +The author of this software is David M. Gay. + +Copyright (c) 1991 by AT&T. + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(4) Advanced Micro Devices + +Copyright 1989, 1990 Advanced Micro Devices, Inc. + +This software is the property of Advanced Micro Devices, Inc (AMD) which +specifically grants the user the right to modify, use and distribute this +software provided this notice is not removed or altered. All other rights +are reserved by AMD. + +AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS +SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL +DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR +USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the 29K Technical Support Center at +800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or +0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118. + +Advanced Micro Devices, Inc. +29K Support Products +Mail Stop 573 +5900 E. Ben White Blvd. +Austin, TX 78741 +800-292-9263 + +(5) C.W. Sandmann + +Copyright (C) 1993 C.W. Sandmann + +This file may be freely distributed as long as the author's name remains. + +(6) Eric Backus + +(C) Copyright 1992 Eric Backus + +This software may be used freely so long as this copyright notice is +left intact. There is no warrantee on this software. + +(7) Sun Microsystems + +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + +Developed at SunPro, a Sun Microsystems, Inc. business. +Permission to use, copy, modify, and distribute this +software is freely granted, provided that this notice +is preserved. + +(8) Hewlett Packard + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(9) Hans-Peter Nilsson + +Copyright (C) 2001 Hans-Peter Nilsson + +Permission to use, copy, modify, and distribute this software is +freely granted, provided that the above copyright notice, this notice +and the following disclaimer are preserved with no changes. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only) + +Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr) + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +(11) Christopher G. Demetriou + +Copyright (c) 2001 Christopher G. Demetriou +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(12) SuperH, Inc. + +Copyright 2002 SuperH, Inc. All rights reserved + +This software is the property of SuperH, Inc (SuperH) which specifically +grants the user the right to modify, use and distribute this software +provided this notice is not removed or altered. All other rights are +reserved by SuperH. + +SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO +THIS SOFTWARE. IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM +THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the SuperH Support Center via +e-mail at softwaresupport@superh.com . + +SuperH, Inc. +405 River Oaks Parkway +San Jose +CA 95134 +USA + +(13) Royal Institute of Technology + +Copyright (c) 1999 Kungliga Tekniska Hgskolan +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of KTH nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(14) Alexey Zelkin + +Copyright (c) 2000, 2001 Alexey Zelkin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(15) Andrey A. Chernov + +Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(16) FreeBSD + +Copyright (c) 1997-2002 FreeBSD Project. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(17) S. L. Moshier + +Author: S. L. Moshier. + +Copyright (c) 1984,2000 S.L. Moshier + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION +OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS +SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(18) Citrus Project + +Copyright (c)1999 Citrus Project, +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(19) Todd C. Miller + +Copyright (c) 1998 Todd C. Miller +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(20) DJ Delorie (i386) + +Copyright (C) 1991 DJ Delorie +All rights reserved. + +Redistribution and use in source and binary forms is permitted +provided that the above copyright notice and following paragraph are +duplicated in all such forms. + +This file is distributed WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +(21) Free Software Foundation LGPL License (*-linux* targets only) + + Copyright (C) 1990-1999, 2000, 2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Mark Kettenis , 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA + +(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only) + +Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License +as published by the Free Software Foundation; either version 2 +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 Library General Public License for more details. + +(23) Intel (i960) + +Copyright (c) 1993 Intel Corporation + +Intel hereby grants you permission to copy, modify, and distribute this +software and its documentation. Intel grants this permission provided +that the above copyright notice appears in all copies and that both the +copyright notice and this permission notice appear in supporting +documentation. In addition, Intel grants this permission provided that +you prominently mark as "not part of the original" any modifications +made to this software or documentation, and that the name of Intel +Corporation not be used in advertising or publicity pertaining to +distribution of the software or the documentation without specific, +written prior permission. + +Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR +IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY +OR FITNESS FOR A PARTICULAR PURPOSE. Intel makes no guarantee or +representations regarding the use of, or the results of the use of, +the software and documentation in terms of correctness, accuracy, +reliability, currentness, or otherwise; and you rely on the software, +documentation and results solely at your own risk. + +IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS, +LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES +OF ANY KIND. IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM +PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER. + +(24) Hewlett-Packard (hppa targets only) + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(25) Henry Spencer (only *-linux targets) + +Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. +This software is not subject to any license of the American Telephone +and Telegraph Company or of the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it, subject +to the following restrictions: + +1. The author is not responsible for the consequences of use of this + software, no matter how awful, even if they arise from flaws in it. + +2. The origin of this software must not be misrepresented, either by + explicit claim or by omission. Since few users ever read sources, + credits must appear in the documentation. + +3. Altered versions must be plainly marked as such, and must not be + misrepresented as being the original software. Since few users + ever read sources, credits must appear in the documentation. + +4. This notice may not be removed or altered. + +(26) Mike Barcroft + +Copyright (c) 2001 Mike Barcroft +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(27) Konstantin Chuguev (--enable-newlib-iconv) + +Copyright (c) 1999, 2000 + Konstantin Chuguev. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + iconv (Charset Conversion Library) v2.0 + +(27) Artem Bityuckiy (--enable-newlib-iconv) + +Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation. +Rights transferred to Franklin Electronic Publishers. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(28) Red Hat Incorporated + +Unless otherwise stated in each remaining newlib file, the remaining +files in the newlib subdirectory default to the following copyright. +It should be noted that Red Hat Incorporated now owns copyrights +belonging to Cygnus Solutions and Cygnus Support. + +Copyright (c) 1994, 1997, 2001, 2002, 2003, 2004 Red Hat Incorporated. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- gcc-7-7.2.0.orig/debian/copyright.in +++ gcc-7-7.2.0/debian/copyright.in @@ -0,0 +1,1404 @@ +This is the Debian GNU/Linux prepackaged version of the GNU compiler +collection, containing Ada, C, C++, Fortran 95, Objective-C, +Objective-C++, and Treelang compilers, documentation, and support +libraries. In addition, Debian provides the gdc compiler, either in +the same source package, or built from a separate same source package. +Packaging is done by the Debian GCC Maintainers +, with sources obtained from: + + ftp://gcc.gnu.org/pub/gcc/releases/ (for full releases) + svn://gcc.gnu.org/svn/gcc/ (for prereleases) + http://bitbucket.org/goshawk/gdc (for D) + https://github.com/MentorEmbedded/nvptx-newlib/ (for newlib-nvptx) + +The current gcc-@BV@ source package is taken from the SVN @SVN_BRANCH@. + +Changes: See changelog.Debian.gz + +Debian splits the GNU Compiler Collection into packages for each language, +library, and documentation as follows: + +Language Compiler package Library package Documentation +--------------------------------------------------------------------------- +Ada gnat-@BV@ libgnat-@BV@ gnat-@BV@-doc +BRIG gccbrig-@BV@ libhsail-rt0 +C gcc-@BV@ gcc-@BV@-doc +C++ g++-@BV@ libstdc++6 libstdc++6-@BV@-doc +D gdc-@BV@ +Fortran 95 gfortran-@BV@ libgfortran3 gfortran-@BV@-doc +Go gccgo-@BV@ libgo0 +Objective C gobjc-@BV@ libobjc2 +Objective C++ gobjc++-@BV@ + +For some language run-time libraries, Debian provides source files, +development files, debugging symbols and libraries containing position- +independent code in separate packages: + +Language Sources Development Debugging Position-Independent +------------------------------------------------------------------------------ +C++ libstdc++6-@BV@-dbg libstdc++6-@BV@-pic +D libphobos-@BV@-dev + +Additional packages include: + +All languages: +libgcc1, libgcc2, libgcc4 GCC intrinsics (platform-dependent) +gcc-@BV@-base Base files common to all compilers +gcc-@BV@-soft-float Software floating point (ARM only) +gcc-@BV@-source The sources with patches + +Ada: +libgnatvsn-dev, libgnatvsn@BV@ GNAT version library + +C: +cpp-@BV@, cpp-@BV@-doc GNU C Preprocessor +libssp0-dev, libssp0 GCC stack smashing protection library +libquadmath0 Math routines for the __float128 type +fixincludes Fix non-ANSI header files + +C, C++ and Fortran 95: +libgomp1-dev, libgomp1 GCC OpenMP (GOMP) support library +libitm1-dev, libitm1 GNU Transactional Memory Library + +Biarch support: On some 64-bit platforms which can also run 32-bit code, +Debian provides additional packages containing 32-bit versions of some +libraries. These packages have names beginning with 'lib32' instead of +'lib', for example lib32stdc++6. Similarly, on some 32-bit platforms which +can also run 64-bit code, Debian provides additional packages with names +beginning with 'lib64' instead of 'lib'. These packages contain 64-bit +versions of the libraries. (At this time, not all platforms and not all +libraries support biarch.) The license terms for these lib32 or lib64 +packages are identical to the ones for the lib packages. + + +COPYRIGHT STATEMENTS AND LICENSING TERMS + + +GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, +1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. + +GCC 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. + +GCC 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. + +Files that have exception clauses are licensed under the terms of the +GNU General Public License; either version 3, or (at your option) any +later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 3 of this +license in `/usr/share/common-licenses/GPL-3'. + +The following runtime libraries are licensed under the terms of the +GNU General Public License (v3 or later) with version 3.1 of the GCC +Runtime Library Exception (included in this file): + + - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*, + gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h, + gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c, + gcc/tsystem.h, gcc/typeclass.h). + - libatomic + - libdecnumber + - libgomp + - libitm + - libssp + - libstdc++-v3 + - libobjc + - libgfortran + - The libgnat-@BV@ Ada support library and libgnatvsn library. + - Various config files in gcc/config/ used in runtime libraries. + - libvtv + +The libbacktrace library is licensed under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3) The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +The libsanitizer libraries (libasan, liblsan, libtsan, libubsan) are +licensed under the following terms: + +Copyright (c) 2009-2014 by the LLVM contributors. + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +The libffi library is licensed under the following terms: + + libffi - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +The documentation is licensed under the GNU Free Documentation License (v1.2). +On Debian GNU/Linux systems, the complete text of this license is in +`/usr/share/common-licenses/GFDL-1.2'. + + +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + + +libquadmath/*.[hc]: + + Copyright (C) 2010 Free Software Foundation, Inc. + Written by Francois-Xavier Coudert + Written by Tobias Burnus + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +libquadmath/math: + +atanq.c, expm1q.c, j0q.c, j1q.c, log1pq.c, logq.c: + Copyright 2001 by Stephen L. Moshier + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +coshq.c, erfq.c, jnq.c, lgammaq.c, powq.c, roundq.c: + Changes for 128-bit __float128 are + Copyright (C) 2001 Stephen L. Moshier + and are incorporated herein by permission of the author. The author + reserves the right to distribute this material elsewhere under different + copying permissions. These modifications are distributed here under + the following terms: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +ldexpq.c: + * Conversion to long double by Ulrich Drepper, + * Cygnus Support, drepper@cygnus.com. + +cosq_kernel.c, expq.c, sincos_table.c, sincosq.c, sincosq_kernel.c, +sinq_kernel.c, truncq.c: + Copyright (C) 1997, 1999 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + +isinfq.c: + * Written by J.T. Conklin . + * Change for long double by Jakub Jelinek + * Public domain. + +llroundq.c, lroundq.c, tgammaq.c: + Copyright (C) 1997, 1999, 2002, 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1997 and + Jakub Jelinek , 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + +log10q.c: + Cephes Math Library Release 2.2: January, 1991 + Copyright 1984, 1991 by Stephen L. Moshier + Adapted for glibc November, 2001 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, 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 + Lesser General Public License for more details. + +remaining files: + + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + + +gcc/go/gofrontend, libgo: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +libcilkrts, libmpx: + Copyright (C) 2009-2014, Intel Corporation + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + +D: +gdc-@BV@ GNU D Compiler +libphobos-@BV@-dev D standard runtime library + +The D source package is made up of the following components. + +The D front-end for GCC: + - d/* + +Copyright (C) 2004-2007 David Friedman +Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010 + +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 2 of the License, or +(at your option) any later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 2 of this +license in `/usr/share/common-licenses/GPL-2'. + + +The DMD Compiler implementation of the D programming language: + - d/dmd/* + +Copyright (c) 1999-2010 by Digital Mars +All Rights Reserved +written by Walter Bright +http://www.digitalmars.com +License for redistribution is by either the Artistic License or +the GNU General Public License (v1). + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', the Artistic +license in `/usr/share/common-licenses/Artistic'. + + +The Zlib data compression library: + - d/phobos/etc/c/zlib/* + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +The Phobos standard runtime library: + - d/phobos/* + +Unless otherwise marked within the file, each file in the source +is under the following licenses: + +Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com +Written by Walter Bright + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, in both source and binary form, subject to the following +restrictions: + + o The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + o Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + o This notice may not be removed or altered from any source + distribution. + +By plainly marking modifications, something along the lines of adding to each +file that has been changed a "Modified by Foo Bar" line +underneath the "Written by" line would be adequate. + +The libhsail-rt library is licensed under the following terms: + + Copyright (C) 2015-2017 Free Software Foundation, Inc. + Contributed by Pekka Jaaskelainen + for General Processor Tech. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. + +libhsail-rt/rt/fp16.c is licensed under the following terms: + + Copyright (C) 2008-2017 Free Software Foundation, Inc. + Contributed by CodeSourcery. + + This file 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 file 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. + + 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 + . + +newlib-nvptx-20yymmdd/: + +Upstream Authors: +newlib@sources.redhat.com +Jeff Johnston +Tom Fitzsimmons + +The newlib subdirectory is a collection of software from several sources. +Each file may have its own copyright/license that is embedded in the source +file. + +This list documents those licenses which are more restrictive than +a BSD-like license or require the copyright notice +to be duplicated in documentation and/or other materials associated with +the distribution. Certain licenses documented here only apply to +specific targets. Certain clauses only apply if you are building the +code as part of your binary. + +Note that this list may omit certain licenses that +only pertain to the copying/modifying of the individual source code. +If you are distributing the source code, then you do not need to +worry about these omitted licenses, so long as you do not modify the +copyright information already in place. + +Parts of this work are licensed under the terms of the GNU General +Public License. On Debian systems, the complete text of this license +can be found in /usr/share/common-licenses/GPL. + +Parts of this work are licensed under the terms of the GNU Library +General Public License. On Debian systems, the complete text of this +license be found in /usr/share/common-licenses/LGPL. + +(1) University of California, Berkeley + +[1a] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +and other materials related to such distribution and use +acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1b] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1c] + +Copyright (c) 1981, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 +The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1d] + +Copyright (c) 1988, 1990, 1993 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1e] + +Copyright (c) 1982, 1986, 1989, 1991, 1993, 1994 +The Regents of the University of California. All rights reserved. +(c) UNIX System Laboratories, Inc. +All or some portions of this file are derived from material licensed +to the University of California by American Telephone and Telegraph +Co. or Unix System Laboratories, Inc. and are reproduced herein with +the permission of UNIX System Laboratories, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1f] + +Copyright (c) 1987, 1988, 2000 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that: (1) source distributions retain this entire copyright +notice and comment, and (2) distributions including binaries display +the following acknowledgement: ``This product includes software +developed by the University of California, Berkeley and its contributors'' +in the documentation or other materials provided with the distribution +and in all advertising materials mentioning features or use of this +software. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +------------------------------------------------------------- + Please note that in some of the above alternate licenses, there is a + statement regarding that acknowledgement must be made in any + advertising materials for products using the code. This restriction + no longer applies due to the following license change: + + ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + + In some cases the defunct clause has been removed in modified newlib code and + in some cases, the clause has been left as-is. +------------------------------------------------------------- + +(2) Cygwin (cygwin targets only) + +Copyright 2001 Red Hat, Inc. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. + +(3) David M. Gay at AT&T + +The author of this software is David M. Gay. + +Copyright (c) 1991 by AT&T. + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(4) Advanced Micro Devices + +Copyright 1989, 1990 Advanced Micro Devices, Inc. + +This software is the property of Advanced Micro Devices, Inc (AMD) which +specifically grants the user the right to modify, use and distribute this +software provided this notice is not removed or altered. All other rights +are reserved by AMD. + +AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS +SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL +DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR +USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the 29K Technical Support Center at +800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or +0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118. + +Advanced Micro Devices, Inc. +29K Support Products +Mail Stop 573 +5900 E. Ben White Blvd. +Austin, TX 78741 +800-292-9263 + +(5) C.W. Sandmann + +Copyright (C) 1993 C.W. Sandmann + +This file may be freely distributed as long as the author's name remains. + +(6) Eric Backus + +(C) Copyright 1992 Eric Backus + +This software may be used freely so long as this copyright notice is +left intact. There is no warrantee on this software. + +(7) Sun Microsystems + +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + +Developed at SunPro, a Sun Microsystems, Inc. business. +Permission to use, copy, modify, and distribute this +software is freely granted, provided that this notice +is preserved. + +(8) Hewlett Packard + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(9) Hans-Peter Nilsson + +Copyright (C) 2001 Hans-Peter Nilsson + +Permission to use, copy, modify, and distribute this software is +freely granted, provided that the above copyright notice, this notice +and the following disclaimer are preserved with no changes. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only) + +Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr) + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +(11) Christopher G. Demetriou + +Copyright (c) 2001 Christopher G. Demetriou +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(12) SuperH, Inc. + +Copyright 2002 SuperH, Inc. All rights reserved + +This software is the property of SuperH, Inc (SuperH) which specifically +grants the user the right to modify, use and distribute this software +provided this notice is not removed or altered. All other rights are +reserved by SuperH. + +SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO +THIS SOFTWARE. IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM +THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the SuperH Support Center via +e-mail at softwaresupport@superh.com . + +SuperH, Inc. +405 River Oaks Parkway +San Jose +CA 95134 +USA + +(13) Royal Institute of Technology + +Copyright (c) 1999 Kungliga Tekniska Hgskolan +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of KTH nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(14) Alexey Zelkin + +Copyright (c) 2000, 2001 Alexey Zelkin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(15) Andrey A. Chernov + +Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(16) FreeBSD + +Copyright (c) 1997-2002 FreeBSD Project. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(17) S. L. Moshier + +Author: S. L. Moshier. + +Copyright (c) 1984,2000 S.L. Moshier + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION +OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS +SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(18) Citrus Project + +Copyright (c)1999 Citrus Project, +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(19) Todd C. Miller + +Copyright (c) 1998 Todd C. Miller +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(20) DJ Delorie (i386) + +Copyright (C) 1991 DJ Delorie +All rights reserved. + +Redistribution and use in source and binary forms is permitted +provided that the above copyright notice and following paragraph are +duplicated in all such forms. + +This file is distributed WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +(21) Free Software Foundation LGPL License (*-linux* targets only) + + Copyright (C) 1990-1999, 2000, 2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Mark Kettenis , 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA + +(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only) + +Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License +as published by the Free Software Foundation; either version 2 +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 Library General Public License for more details. + +(23) Intel (i960) + +Copyright (c) 1993 Intel Corporation + +Intel hereby grants you permission to copy, modify, and distribute this +software and its documentation. Intel grants this permission provided +that the above copyright notice appears in all copies and that both the +copyright notice and this permission notice appear in supporting +documentation. In addition, Intel grants this permission provided that +you prominently mark as "not part of the original" any modifications +made to this software or documentation, and that the name of Intel +Corporation not be used in advertising or publicity pertaining to +distribution of the software or the documentation without specific, +written prior permission. + +Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR +IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY +OR FITNESS FOR A PARTICULAR PURPOSE. Intel makes no guarantee or +representations regarding the use of, or the results of the use of, +the software and documentation in terms of correctness, accuracy, +reliability, currentness, or otherwise; and you rely on the software, +documentation and results solely at your own risk. + +IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS, +LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES +OF ANY KIND. IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM +PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER. + +(24) Hewlett-Packard (hppa targets only) + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(25) Henry Spencer (only *-linux targets) + +Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. +This software is not subject to any license of the American Telephone +and Telegraph Company or of the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it, subject +to the following restrictions: + +1. The author is not responsible for the consequences of use of this + software, no matter how awful, even if they arise from flaws in it. + +2. The origin of this software must not be misrepresented, either by + explicit claim or by omission. Since few users ever read sources, + credits must appear in the documentation. + +3. Altered versions must be plainly marked as such, and must not be + misrepresented as being the original software. Since few users + ever read sources, credits must appear in the documentation. + +4. This notice may not be removed or altered. + +(26) Mike Barcroft + +Copyright (c) 2001 Mike Barcroft +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(27) Konstantin Chuguev (--enable-newlib-iconv) + +Copyright (c) 1999, 2000 + Konstantin Chuguev. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + iconv (Charset Conversion Library) v2.0 + +(27) Artem Bityuckiy (--enable-newlib-iconv) + +Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation. +Rights transferred to Franklin Electronic Publishers. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(28) Red Hat Incorporated + +Unless otherwise stated in each remaining newlib file, the remaining +files in the newlib subdirectory default to the following copyright. +It should be noted that Red Hat Incorporated now owns copyrights +belonging to Cygnus Solutions and Cygnus Support. + +Copyright (c) 1994, 1997, 2001, 2002, 2003, 2004 Red Hat Incorporated. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- gcc-7-7.2.0.orig/debian/cpp-BV-CRB.preinst.in +++ gcc-7-7.2.0/debian/cpp-BV-CRB.preinst.in @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then + update-alternatives --quiet --remove @TARGET@-cpp /usr/bin/@TARGET@-cpp-@BV@ +fi + +#DEBHELPER# + +exit 0 --- gcc-7-7.2.0.orig/debian/cpp-BV-doc.doc-base.cpp +++ gcc-7-7.2.0/debian/cpp-BV-doc.doc-base.cpp @@ -0,0 +1,16 @@ +Document: cpp-@BV@ +Title: The GNU C preprocessor +Author: Various +Abstract: The C preprocessor is a "macro processor" that is used automatically + by the C compiler to transform your program before actual compilation. + It is called a macro processor because it allows you to define "macros", + which are brief abbreviations for longer constructs. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/cpp.html +Files: /usr/share/doc/gcc-@BV@-base/cpp.html + +Format: info +Index: /usr/share/info/cpp-@BV@.info.gz +Files: /usr/share/info/cpp-@BV@* --- gcc-7-7.2.0.orig/debian/cpp-BV-doc.doc-base.cppint +++ gcc-7-7.2.0/debian/cpp-BV-doc.doc-base.cppint @@ -0,0 +1,17 @@ +Document: cppinternals-@BV@ +Title: The GNU C preprocessor (internals) +Author: Various +Abstract: This brief manual documents the internals of cpplib, and + explains some of the tricky issues. It is intended that, along with + the comments in the source code, a reasonably competent C programmer + should be able to figure out what the code is doing, and why things + have been implemented the way they have. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/cppinternals.html +Files: /usr/share/doc/gcc-@BV@-base/cppinternals.html + +Format: info +Index: /usr/share/info/cppinternals-@BV@.info.gz +Files: /usr/share/info/cppinternals-@BV@* --- gcc-7-7.2.0.orig/debian/dh_doclink +++ gcc-7-7.2.0/debian/dh_doclink @@ -0,0 +1,12 @@ +#! /bin/sh + +pkg=`echo $1 | sed 's/^-p//'` +target=$2 + +[ -d debian/$pkg/usr/share/doc ] || mkdir -p debian/$pkg/usr/share/doc +if [ -d debian/$pkg/usr/share/doc/$p -a ! -h debian/$pkg/usr/share/doc/$p ] +then + echo "WARNING: removing doc directory $pkg" + rm -rf debian/$pkg/usr/share/doc/$pkg +fi +ln -sf $target debian/$pkg/usr/share/doc/$pkg --- gcc-7-7.2.0.orig/debian/dh_rmemptydirs +++ gcc-7-7.2.0/debian/dh_rmemptydirs @@ -0,0 +1,10 @@ +#! /bin/sh -e + +pkg=`echo $1 | sed 's/^-p//'` + +: # remove empty directories, when all components are in place +for d in `find debian/$pkg -depth -type d -empty 2> /dev/null`; do \ + while rmdir $d 2> /dev/null; do d=`dirname $d`; done; \ +done + +exit 0 --- gcc-7-7.2.0.orig/debian/dummy-man.1 +++ gcc-7-7.2.0/debian/dummy-man.1 @@ -0,0 +1,29 @@ +.TH @NAME@ 1 "May 24, 2003" @name@ "Debian Free Documentation" +.SH NAME +@name@ \- A program with a man page covered by the GFDL with invariant sections +.SH SYNOPSIS +@name@ [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...] + +.SH DESCRIPTION + +\fB@name@\fR is documented by a man page, which is covered by the "GNU +Free Documentation License" (GFDL) containing invariant sections. +.P +In November 2002, version 1.2 of the GNU Free Documentation License (GNU +FDL) was released by the Free Software Foundation after a long period +of consultation. Unfortunately, some concerns raised by members of the +Debian Project were not addressed, and as such the GNU FDL can apply +to works that do not pass the Debian Free Software Guidelines (DFSG), +and may thus only be included in the non-free component of the Debian +archive, not the Debian distribution itself. + +.SH "SEE ALSO" +.BR http://gcc.gnu.org/onlinedocs/ +for the complete documentation, +.BR http://lists.debian.org/debian-legal/2003/debian-legal-200304/msg00307.html +for a proposed statement of Debian with respect to the GFDL, +.BR gfdl(7) + +.SH AUTHOR +This manual page was written by the Debian GCC maintainers, +for the Debian GNU/Linux system. --- gcc-7-7.2.0.orig/debian/dummy.texi +++ gcc-7-7.2.0/debian/dummy.texi @@ -0,0 +1 @@ +@c This file is empty because the original one has a non DFSG free license (GFDL) --- gcc-7-7.2.0.orig/debian/fixincludes.in +++ gcc-7-7.2.0/debian/fixincludes.in @@ -0,0 +1,8 @@ +#! /bin/sh + +PATH="/@LIBEXECDIR@/install-tools:$PATH" + +TARGET_MACHINE=`dpkg-architecture -qDEB_HOST_GNU_TYPE` +export TARGET_MACHINE + +exec fixinc.sh "$@" --- gcc-7-7.2.0.orig/debian/g++-BV-CRB.preinst.in +++ gcc-7-7.2.0/debian/g++-BV-CRB.preinst.in @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then + update-alternatives --quiet --remove @TARGET@-g++ /usr/bin/@TARGET@-g++-@BV@ +fi + +#DEBHELPER# + +exit 0 --- gcc-7-7.2.0.orig/debian/gcc-BV-CRB.preinst.in +++ gcc-7-7.2.0/debian/gcc-BV-CRB.preinst.in @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then + update-alternatives --quiet --remove @TARGET@-gcc /usr/bin/@TARGET@-gcc-@BV@ + update-alternatives --quiet --remove @TARGET@-gcov /usr/bin/@TARGET@-gcov-@BV@ +fi + +#DEBHELPER# + +exit 0 --- gcc-7-7.2.0.orig/debian/gcc-BV-doc.doc-base.gcc +++ gcc-7-7.2.0/debian/gcc-BV-doc.doc-base.gcc @@ -0,0 +1,14 @@ +Document: gcc-@BV@ +Title: The GNU C and C++ compiler +Author: Various +Abstract: This manual documents how to run, install and port the GNU compiler, + as well as its new features and incompatibilities, and how to report bugs. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/gcc.html +Files: /usr/share/doc/gcc-@BV@-base/gcc.html + +Format: info +Index: /usr/share/info/gcc-@BV@.info.gz +Files: /usr/share/info/gcc-@BV@* --- gcc-7-7.2.0.orig/debian/gcc-BV-doc.doc-base.gccint +++ gcc-7-7.2.0/debian/gcc-BV-doc.doc-base.gccint @@ -0,0 +1,17 @@ +Document: gccint-@BV@ +Title: Internals of the GNU C and C++ compiler +Author: Various +Abstract: This manual documents the internals of the GNU compilers, + including how to port them to new targets and some information about + how to write front ends for new languages. It corresponds to GCC + version @BV@.x. The use of the GNU compilers is documented in a + separate manual. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/gccint.html +Files: /usr/share/doc/gcc-@BV@-base/gccint.html + +Format: info +Index: /usr/share/info/gccint-@BV@.info.gz +Files: /usr/share/info/gccint-@BV@* --- gcc-7-7.2.0.orig/debian/gcc-BV-doc.doc-base.gomp +++ gcc-7-7.2.0/debian/gcc-BV-doc.doc-base.gomp @@ -0,0 +1,15 @@ +Document: gcc-@BV@-gomp +Title: The GNU OpenMP Implementation (for GCC @BV@) +Author: Various +Abstract: This manual documents the usage of libgomp, the GNU implementation + of the OpenMP Application Programming Interface (API) for multi-platform + shared-memory parallel programming in C/C++ and Fortran. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/libgomp.html +Files: /usr/share/doc/gcc-@BV@-base/libgomp.html + +Format: info +Index: /usr/share/info/libgomp-@BV@.info.gz +Files: /usr/share/info/libgomp-@BV@* --- gcc-7-7.2.0.orig/debian/gcc-BV-doc.doc-base.itm +++ gcc-7-7.2.0/debian/gcc-BV-doc.doc-base.itm @@ -0,0 +1,16 @@ +Document: gcc-@BV@-itm +Title: The GNU Transactional Memory Library (for GCC @BV@) +Author: Various +Abstract: This manual documents the usage and internals of libitm, + the GNU Transactional Memory Library. It provides transaction support + for accesses to a process' memory, enabling easy-to-use synchronization + of accesses to shared memory by several threads. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/libitm.html +Files: /usr/share/doc/gcc-@BV@-base/libitm.html + +Format: info +Index: /usr/share/info/libitm-@BV@.info.gz +Files: /usr/share/info/libitm-@BV@* --- gcc-7-7.2.0.orig/debian/gcc-BV-doc.doc-base.qmath +++ gcc-7-7.2.0/debian/gcc-BV-doc.doc-base.qmath @@ -0,0 +1,14 @@ +Document: gcc-@BV@-qmath +Title: The GCC Quad-Precision Math Library (for GCC @BV@) +Author: Various +Abstract: This manual documents the usage of libquadmath, the GCC + Quad-Precision Math Library Application Programming Interface (API). +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/libquadmath.html +Files: /usr/share/doc/gcc-@BV@-base/libquadmath.html + +Format: info +Index: /usr/share/info/libquadmath-@BV@.info.gz +Files: /usr/share/info/libquadmath-@BV@* --- gcc-7-7.2.0.orig/debian/gcc-BV-hppa64-linux-gnu.overrides +++ gcc-7-7.2.0/debian/gcc-BV-hppa64-linux-gnu.overrides @@ -0,0 +1,2 @@ +gcc-@BV@-hppa64-linux-gnu binary: binary-from-other-architecture +gcc-@BV@-hppa64-linux-gnu binary: binary-without-manpage --- gcc-7-7.2.0.orig/debian/gcc-BV-multilib.overrides +++ gcc-7-7.2.0/debian/gcc-BV-multilib.overrides @@ -0,0 +1 @@ +gcc-@BV@-multilib binary: binary-from-other-architecture --- gcc-7-7.2.0.orig/debian/gcc-BV-source.overrides +++ gcc-7-7.2.0/debian/gcc-BV-source.overrides @@ -0,0 +1,5 @@ +gcc-@BV@-source: changelog-file-not-compressed + +# these are patches taken over unmodified from 4.3 +gcc-@BV@-source: script-not-executable +gcc-@BV@-source: shell-script-fails-syntax-check --- gcc-7-7.2.0.orig/debian/gcc-XX-BV.1 +++ gcc-7-7.2.0/debian/gcc-XX-BV.1 @@ -0,0 +1,17 @@ +.TH GCC-@TOOL@-@BV@ 1 "May 8, 2012" gcc-@TOOL@-@BV@ "" +.SH NAME +gcc-@TOOL@ \- a wrapper around @TOOL@ adding the --plugin option + +.SH SYNOPSIS +gcc-@TOOL@ [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...] + +.SH DESCRIPTION + +\fBgcc-@TOOL@\fR is a wrapper around @TOOL@(1) adding the appropriate +\fB\-\-plugin\fR option for the GCC @BV@ compiler. + +.SH OPTIONS +See @TOOL@(1) for a list of options that @TOOL@ understands. + +.SH "SEE ALSO" +.BR @TOOL@(1) --- gcc-7-7.2.0.orig/debian/gcc-dummy.texi +++ gcc-7-7.2.0/debian/gcc-dummy.texi @@ -0,0 +1,41 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header + +@settitle The GNU Compiler Collection (GCC) + +@c Create a separate index for command line options. +@defcodeindex op +@c Merge the standard indexes into a single one. +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@syncodeindex pg cp +@syncodeindex tp cp + +@paragraphindent 1 + +@c %**end of header + +@copying +The current documentation is licensed under the same terms as the Debian packaging. +@end copying +@ifnottex +@dircategory Programming +@direntry +* @name@: (@name@). The GNU Compiler Collection (@name@). +@end direntry +@sp 1 +@end ifnottex + +@summarycontents +@contents +@page + +@node Top +@top Introduction +@cindex introduction +The official GNU compilers' documentation is released under the terms +of the GNU Free Documentation License with cover texts. This has been +considered non free by the Debian Project. Thus you will find it in the +non-free section of the Debian archive. +@bye --- gcc-7-7.2.0.orig/debian/gcc-snapshot.overrides +++ gcc-7-7.2.0/debian/gcc-snapshot.overrides @@ -0,0 +1,10 @@ +gcc-snapshot binary: bad-permissions-for-ali-file + +# keep patched ltdl copy +gcc-snapshot binary: embedded-library + +gcc-snapshot binary: binary-from-other-architecture +gcc-snapshot binary: extra-license-file +gcc-snapshot binary: jar-not-in-usr-share +gcc-snapshot binary: triplet-dir-and-architecture-mismatch +gcc-snapshot binary: unstripped-binary-or-object --- gcc-7-7.2.0.orig/debian/gcc-snapshot.prerm +++ gcc-7-7.2.0/debian/gcc-snapshot.prerm @@ -0,0 +1,5 @@ +#! /bin/sh -e + +rm -f /usr/lib/gcc-snapshot/share/python/*.py[co] + +#DEBHELPER# --- gcc-7-7.2.0.orig/debian/gcc.css +++ gcc-7-7.2.0/debian/gcc.css @@ -0,0 +1,106 @@ +/* CSS for the GCC web site. + + Gerald Pfeifer + */ + +body { background-color: white; color: black; } + +a:link { color: #0066bb; text-decoration: none; } +a:visited { color: #003399; text-decoration: none; } +a:hover { color: darkorange; text-decoration: none; } + +h1 { color: darkslategray; text-align:center; } +h2 { color: darkslategray; } + +.highlight{ color: darkslategray; font-weight:bold; } +.smaller { font-size: 80%; } + +.no-margin-top { margin-top:0; } +.twocolumns { column-counts:2; -moz-column-count:2; } +.imgleft { margin: 5px 20px; float: left; } + +td.news { width: 50%; padding-right: 8px; } +td.news h2 { font-size: 1.2em; margin-top: 0; margin-bottom: 2%; } +td.news dl { margin-top:0; } +td.news dt { color:darkslategrey; font-weight:bold; margin-top:0.3em; } +td.news dd { margin-left:3ex; margin-top:0.1em; margin-bottom:0.1em; } +td.news .date { color:darkslategrey; font-size:90%; margin-left:0.1ex; } + +td.status { width: 50%; padding-left: 12px; border-left: #3366cc thin solid; } +td.status h2 { font-size: 1.2em; margin-top:0; margin-bottom: 1%; } +td.status dl { margin-top:0; } +td.status .version { font-weight:bold; } +td.status .regress { font-size: 80%; } +td.status dd { margin-left:3ex; } + +table.nav { + padding-left: 32px; + border-spacing: 0pt; +} + +table.navitem { + border-spacing: 0pt; +} + +table.navitem tr:nth-child(1) { + border-color: #3366cc; + border-style: solid; + border-width: thin; + color: #f2f2f9; + background-color: #0066dd; + font-weight: bold; +} +table.navitem tr:nth-child(2) { + padding-top: 3px; + padding-left: 8px; + padding-bottom: 3px; + background-color: #f2f2f9; + font-size: smaller; +} + +div.copyright { + font-size: smaller; + background: #f2f2f9; + border: 2px solid #3366cc; + border-style: solid; + border-width: thin; + padding: 4px; +} +div.copyright p:nth-child(3) { margin-bottom: 0; } + +.boldcyan { font-weight:bold; color:cyan; } +.boldlime { font-weight:bold; color:lime; } +.boldmagenta { font-weight:bold; color:magenta; } +.boldred { font-weight:bold; color:red; } +.boldblue { font-weight:bold; color:blue; } +.green { color:green; } + +/* Quote an e-mail. The first
has the sender, the second the quote. */ +blockquote.mail div:nth-child(2) { border-left: solid blue; padding-left: 4pt; } + +/* C++ status tables. */ +table.cxxstatus th, table.cxxstatus td { border: 1px solid gray; } +table.cxxstatus td:nth-child(3) { text-align:center; } +table.cxxstatus tr.separator { background: #f2f2f9; } + +.supported { background-color: lightgreen; } +.unsupported { background-color: lightsalmon; } + +/* Online documentation. */ + +pre.smallexample { + font-size: medium; + background: #f2f2f9; + padding: 4px; +} + +/* Classpath versus libgcj merge status page. */ + +.classpath-only { background-color: #FFFFAA; } +.libgcj-only { background-color: #FFFFAA; } +.VM-specific { background-color: #CCCCFF; } +.GCJ-specific { background-color: #CCCCFF; } +.needsmerge { background-color: #FF9090; } +.merged { background-color: #22FF22; } +.merged-expected-diff { background-color: #22FF22; } +.merged-unexpected-diff { background-color: #FF4444; } --- gcc-7-7.2.0.orig/debian/gccgo-BV-doc.doc-base +++ gcc-7-7.2.0/debian/gccgo-BV-doc.doc-base @@ -0,0 +1,17 @@ +Document: gccgo-@BV@ +Title: The GNU Go compiler (version @BV@) +Author: Various +Abstract: This manual describes how to use gccgo, the GNU compiler for + the Go programming language. This manual is specifically about + gccgo. For more information about the Go programming + language in general, including language specifications and standard + package documentation, see http://golang.org/. +Section: Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/gccgo.html +Files: /usr/share/doc/gcc-@BV@-base/gccgo.html + +Format: info +Index: /usr/share/info/gccgo-@BV@.info.gz +Files: /usr/share/info/gccgo-@BV@* --- gcc-7-7.2.0.orig/debian/gen-libstdc-breaks.sh +++ gcc-7-7.2.0/debian/gen-libstdc-breaks.sh @@ -0,0 +1,178 @@ +#! /bin/sh + +# https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=gcc-pr66145;users=debian-gcc@lists.debian.org + +vendor=Debian +if dpkg-vendor --derives-from Ubuntu; then + vendor=Ubuntu +fi + +if [ "$vendor" = Debian ]; then + : + pkgs=$(echo ' +antlr +libaqsis1 +libassimp3 +blockattack +boo +libboost-date-time1.54.0 +libboost-date-time1.55.0 +libcpprest2.4 +printer-driver-brlaser +c++-annotations +clustalx +libdavix0 +libdballe6 +dff +libdiet-sed2.8 +libdiet-client2.8 +libdiet-admin2.8 +digikam-private-libs +emscripten +ergo +fceux +flush +libfreefem++ +freeorion +fslview +fwbuilder +libgazebo5 +libgetfem4++ +libgmsh2 +gnote +gnudatalanguage +python-healpy +innoextract +libinsighttoolkit4.7 +libdap17 +libdapclient6 +libdapserver7 +libkolabxml1 +libpqxx-4.0 +libreoffice-core +librime1 +libwibble-dev +lightspark +libmarisa0 +mira-assembler +mongodb +mongodb-server +ncbi-blast+ +libogre-1.8.0 +libogre-1.9.0 +openscad +libopenwalnut1 +passepartout +pdf2djvu +photoprint +plastimatch +plee-the-bear +povray +powertop +psi4 +python3-taglib +realtimebattle +ruby-passenger +libapache2-mod-passenger +schroot +sqlitebrowser +tecnoballz +wesnoth-1.12-core +widelands +libwreport2 +xflr5 +libxmltooling6') +else + pkgs=$(echo ' +antlr +libaqsis1 +libassimp3 +blockattack +boo +libboost-date-time1.55.0 +libcpprest2.2 +printer-driver-brlaser +c++-annotations +chromium-browser +clustalx +libdavix0 +libdballe6 +dff +libdiet-sed2.8 +libdiet-client2.8 +libdiet-admin2.8 +libkgeomap2 +libmediawiki1 +libkvkontakte1 +emscripten +ergo +fceux +flush +libfreefem++ +freeorion +fslview +fwbuilder +libgazebo5 +libgetfem4++ +libgmsh2 +gnote +gnudatalanguage +python-healpy +innoextract +libinsighttoolkit4.6 +libdap17 +libdapclient6 +libdapserver7 +libkolabxml1 +libpqxx-4.0 +libreoffice-core +librime1 +libwibble-dev +lightspark +libmarisa0 +mira-assembler +mongodb +mongodb-server +ncbi-blast+ +libogre-1.8.0 +libogre-1.9.0 +openscad +libopenwalnut1 +passepartout +pdf2djvu +photoprint +plastimatch +plee-the-bear +povray +powertop +psi4 +python3-taglib +realtimebattle +ruby-passenger +libapache2-mod-passenger +sqlitebrowser +tecnoballz +wesnoth-1.12-core +widelands +libwreport2 +xflr5 +libxmltooling6') +fi + +fn=debian/libstdc++-breaks.$vendor +rm -f $fn +echo $pkgs +for p in $pkgs; do + #echo $p + if ! apt-cache show --no-all-versions $p >/dev/null; then + echo "not found: $p" + fi + v=$(apt-cache show --no-all-versions $p | awk '/^Version/ {print $2}') + case "$p" in + libboost-date-time*) + echo "$p," >> $fn + ;; + *) + echo "$p (<= $v)," >> $fn + esac +done --- gcc-7-7.2.0.orig/debian/gfortran-BV-CRB.preinst.in +++ gcc-7-7.2.0/debian/gfortran-BV-CRB.preinst.in @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then + update-alternatives --quiet --remove @TARGET@-gfortran /usr/bin/@TARGET@-gfortran-@BV@ +fi + +#DEBHELPER# + +exit 0 --- gcc-7-7.2.0.orig/debian/gfortran-BV-doc.doc-base +++ gcc-7-7.2.0/debian/gfortran-BV-doc.doc-base @@ -0,0 +1,14 @@ +Document: gfortran-@BV@ +Title: The GNU Fortran Compiler +Author: Various +Abstract: This manual documents how to run, install and port `gfortran', + as well as its new features and incompatibilities, and how to report bugs. +Section: Programming/Fortran + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html +Files: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html + +Format: info +Index: /usr/share/info/gfortran-@BV@.info.gz +Files: /usr/share/info/gfortran-@BV@* --- gcc-7-7.2.0.orig/debian/gnat-BV-doc.doc-base.rm +++ gcc-7-7.2.0/debian/gnat-BV-doc.doc-base.rm @@ -0,0 +1,16 @@ +Document: gnat-rm-@BV@ +Title: GNAT (GNU Ada) Reference Manual +Author: Various +Abstract: This manual contains useful information in writing programs + using the GNAT compiler. It includes information on implementation + dependent characteristics of GNAT, including all the information + required by Annex M of the standard. +Section: Programming/Ada + +Format: html +Index: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html +Files: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html + +Format: info +Index: /usr/share/info/gnat_rm-@BV@.info.gz +Files: /usr/share/info/gnat_rm-@BV@* --- gcc-7-7.2.0.orig/debian/gnat-BV-doc.doc-base.style +++ gcc-7-7.2.0/debian/gnat-BV-doc.doc-base.style @@ -0,0 +1,16 @@ +Document: gnat-style-@BV@ +Title: GNAT Coding Style +Author: Various +Abstract: Most of GNAT is written in Ada using a consistent style to + ensure readability of the code. This document has been written to + help maintain this consistent style, while having a large group of + developers work on the compiler. +Section: Programming/Ada + +Format: html +Index: /usr/share/doc/gnat-@BV@-doc/gnat-style.html +Files: /usr/share/doc/gnat-@BV@-doc/gnat-style.html + +Format: info +Index: /usr/share/info/gnat-style-@BV@.info.gz +Files: /usr/share/info/gnat-style-@BV@* --- gcc-7-7.2.0.orig/debian/gnat-BV-doc.doc-base.ug +++ gcc-7-7.2.0/debian/gnat-BV-doc.doc-base.ug @@ -0,0 +1,16 @@ +Document: gnat-ugn-@BV@ +Title: GNAT User's Guide for Unix Platforms +Author: Various +Abstract: This guide describes the use of GNAT, a compiler and + software development toolset for the full Ada 95 programming language. + It describes the features of the compiler and tools, and details how + to use them to build Ada 95 applications. +Section: Programming/Ada + +Format: html +Index: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html +Files: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html + +Format: info +Index: /usr/share/info/gnat_ugn-@BV@.info.gz +Files: /usr/share/info/gnat_ugn-@BV@* --- gcc-7-7.2.0.orig/debian/gnat.1 +++ gcc-7-7.2.0/debian/gnat.1 @@ -0,0 +1,43 @@ +.\" Hey, Emacs! This is an -*- nroff -*- source file. +.\" +.\" Copyright (C) 1996 Erick Branderhorst +.\" Copyright (C) 2011 Nicolas Boulenguez +.\" +.\" This 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 2, or (at your option) any later +.\" version. +.\" +.\" This 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 with +.\" your Debian GNU/Linux system, in /usr/doc/copyright/GPL, or with the +.\" dpkg source package as the file COPYING. If not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +.\" +.\" +.TH "GNAT TOOLBOX" 1 "Jun 2002" "Debian Project" "Debian Linux" +.SH NAME +gnat, gnatbind, gnatbl, gnatchop, gnatfind, gnathtml, gnatkr, gnatlink, +gnatls, gnatmake, gnatprep, gnatpsta, gnatpsys, gnatxref \- +GNAT toolbox +.SH DESCRIPTION +Those programs are part of GNU GNAT, a freely available Ada 95 compiler. +.PP +For accessing the full GNAT manuals, use +.B info gnat-ug-4.8 +and +.B info gnat-rm-4.8 +for the sections related to the reference manual. +If those sections cannot be found, you will have to install the +gnat-4.4-doc package as well (since these manuals contain invariant parts, +the package is located in the non-free part of the Debian archive). +You may also browse +.B http://gcc.gnu.org/onlinedocs +which provides the GCC online documentation. +.SH AUTHOR +This manpage has been written by Samuel Tardieu , for the +Debian GNU/Linux project. --- gcc-7-7.2.0.orig/debian/go-relocation-test-gcc620-sparc64.obj.uue +++ gcc-7-7.2.0/debian/go-relocation-test-gcc620-sparc64.obj.uue @@ -0,0 +1,136 @@ +begin 644 src/libgo/go/debug/elf/testdata/go-relocation-test-gcc620-sparc64.obj +M?T5,1@("`0`````````````!`"L````!```````````````````````````` +M`!(``````@!```````!``!4`$IWCOU""$``8\G>HA\(GJ'\#````D!!@`$`` +M```!`````0```('/X`@!`````````&AE;&QO+"!W;W)L9`````-"``0````` +M"`$`````#```````````````````````````````+``````"``````+8```` +M.`,(!P`````#`0@``````P('``````,$!P`````#`08``````P(%``````0$ +M!6EN=``#"`4``````@`````#@P```&D"``````.$````:0,(!P`````%"`8( +M````E0,!!@`````'````E0@`````V`3Q```"'@D`````!/(```!B``D````` +M!/<```"/"`D`````!/@```"/$`D`````!/D```"/&`D`````!/H```"/(`D` +M````!/L```"/*`D`````!/P```"/,`D`````!/T```"/.`D`````!/X```"/ +M0`H`````!`$`````CT@*``````0!`0```(]0"@`````$`0(```"/6`H````` +M!`$$```"5F`*``````0!!@```EQH"@`````$`0@```!B<`H`````!`$,```` +M8G0*``````0!#@```'!X"@`````$`1(```!&@`H`````!`$3````5((*```` +M``0!%````F*#"@`````$`1@```)RB`H`````!`$A````>Y`*``````0!*0`` +M`(V8"@`````$`2H```"-H`H`````!`$K````C:@*``````0!+````(VP"@`` +M```$`2X````MN`H`````!`$O````8L`*``````0!,0```GC$``L`````!)8( +M`````!@$G````E8)``````2=```"5@`)``````2>```"7`@)``````2B```` +M8A``!@@```(E!@@```"A#````)4```)R#0```(8```8(```"'@P```"5```" +MB`T```"&$P`.``````\`````!`$[```"B`\`````!`$\```"B`\`````!`$] +M```"B`8(````G`<```*Q$``````%J@```EP0``````6K```"7!``````!:P` +M``)<$``````&&@```&(,```"MP```O,1``<```+H$``````&&P```O,2```` +M``$$````````````````````+`&<```#/Q,``````00```!B`Y&``1,````` +M`00```,_`Y&(`0`&"````(\``1$!)0X3"P,.&PX1`1('$!<```(6``,..@L[ +M"TD3```#)``+"SX+`PX```0D``L+/@L#"```!0\`"PL```8/``L+21,```7-?;F5R<@!?24]?F5?=`!S:7IE +M='EP90!?;V9F7-?97)R;&ES=`!?9FEL96YO`&AE;&QO+F,` +MH````````!`@````H````7`````````&4````````! +M#@````H````7```````````````````!&@````H````7`````````F(````` +M```!)P````H````7`````````B$````````!-`````H````7`````````"$` +M```````!00````H````7`````````'(````````!3@````H````7```````` +M`AH````````!6P````H````7`````````GP````````!:`````H````7```` +M`````C<````````!=0````H````7``````````P````````!@@````H````7 +M`````````-H````````!CP````H````7`````````E,````````!G`````H` +M```7`````````6,````````!J0````H````7`````````(\````````!M@`` +M``H````7`````````$@````````!PP````H````7`````````;4````````! +MT`````H````7`````````;P````````!W0````H````7`````````<,````` +M```!Z@````H````7`````````/dev/null || true + fi +esac + +#DEBHELPER# --- gcc-7-7.2.0.orig/debian/libstdc++CXX.prerm +++ gcc-7-7.2.0/debian/libstdc++CXX.prerm @@ -0,0 +1,13 @@ +#! /bin/sh + +set -e + +case "$1" in + remove|upgrade) + files=$(dpkg -L libstdc++@CXX@@TARGET_QUAL@ | awk -F/ 'BEGIN {OFS="/"} /\.py$/ {$NF=sprintf("__pycache__/%s.*.py[co]", substr($NF,1,length($NF)-3)); print}') + rm -f $files + dirs=$(dpkg -L libstdc++@CXX@@TARGET_QUAL@ | awk -F/ 'BEGIN {OFS="/"} /\.py$/ {NF--; print}' | sort -u) + find $dirs -mindepth 1 -maxdepth 1 -name __pycache__ -type d -empty | xargs -r rmdir +esac + +#DEBHELPER# --- gcc-7-7.2.0.orig/debian/libtsan0.symbols +++ gcc-7-7.2.0/debian/libtsan0.symbols @@ -0,0 +1,1806 @@ +libtsan.so.0 libtsan0 #MINVER# + AnnotateBenignRace@Base 4.9 + AnnotateBenignRaceSized@Base 4.9 + AnnotateCondVarSignal@Base 4.9 + AnnotateCondVarSignalAll@Base 4.9 + AnnotateCondVarWait@Base 4.9 + AnnotateEnableRaceDetection@Base 4.9 + AnnotateExpectRace@Base 4.9 + AnnotateFlushExpectedRaces@Base 4.9 + AnnotateFlushState@Base 4.9 + AnnotateHappensAfter@Base 4.9 + AnnotateHappensBefore@Base 4.9 + AnnotateIgnoreReadsBegin@Base 4.9 + AnnotateIgnoreReadsEnd@Base 4.9 + AnnotateIgnoreSyncBegin@Base 4.9 + AnnotateIgnoreSyncEnd@Base 4.9 + AnnotateIgnoreWritesBegin@Base 4.9 + AnnotateIgnoreWritesEnd@Base 4.9 + AnnotateMemoryIsInitialized@Base 4.9 + AnnotateMemoryIsUninitialized@Base 5 + AnnotateMutexIsNotPHB@Base 4.9 + AnnotateMutexIsUsedAsCondVar@Base 4.9 + AnnotateNewMemory@Base 4.9 + AnnotateNoOp@Base 4.9 + AnnotatePCQCreate@Base 4.9 + AnnotatePCQDestroy@Base 4.9 + AnnotatePCQGet@Base 4.9 + AnnotatePCQPut@Base 4.9 + AnnotatePublishMemoryRange@Base 4.9 + AnnotateRWLockAcquired@Base 4.9 + AnnotateRWLockCreate@Base 4.9 + AnnotateRWLockCreateStatic@Base 4.9 + AnnotateRWLockDestroy@Base 4.9 + AnnotateRWLockReleased@Base 4.9 + AnnotateThreadName@Base 4.9 + AnnotateTraceMemory@Base 4.9 + AnnotateUnpublishMemoryRange@Base 4.9 + RunningOnValgrind@Base 4.9 + ThreadSanitizerQuery@Base 4.9 + ValgrindSlowdown@Base 4.9 + WTFAnnotateBenignRaceSized@Base 4.9 + WTFAnnotateHappensAfter@Base 4.9 + WTFAnnotateHappensBefore@Base 4.9 + _ZN11__sanitizer11CheckFailedEPKciS1_yy@Base 4.9 + _ZN11__sanitizer7OnPrintEPKc@Base 4.9 + _ZN6__tsan10OnFinalizeEb@Base 4.9 + _ZN6__tsan12OnInitializeEv@Base 5 + _ZN6__tsan8OnReportEPKNS_10ReportDescEb@Base 4.9 + _ZdaPv@Base 4.9 + _ZdaPvRKSt9nothrow_t@Base 4.9 + _ZdlPv@Base 4.9 + _ZdlPvRKSt9nothrow_t@Base 4.9 + _Znam@Base 4.9 + _ZnamRKSt9nothrow_t@Base 4.9 + _Znwm@Base 4.9 + _ZnwmRKSt9nothrow_t@Base 4.9 + __asan_backtrace_alloc@Base 4.9 + __asan_backtrace_close@Base 4.9 + __asan_backtrace_create_state@Base 4.9 + __asan_backtrace_dwarf_add@Base 4.9 + __asan_backtrace_free@Base 4.9 + __asan_backtrace_get_view@Base 4.9 + __asan_backtrace_initialize@Base 4.9 + __asan_backtrace_open@Base 4.9 + __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 + __asan_backtrace_release_view@Base 4.9 + __asan_backtrace_syminfo@Base 4.9 + __asan_backtrace_vector_finish@Base 4.9 + __asan_backtrace_vector_grow@Base 4.9 + __asan_backtrace_vector_release@Base 4.9 + __asan_cplus_demangle_builtin_types@Base 4.9 + __asan_cplus_demangle_fill_ctor@Base 4.9 + __asan_cplus_demangle_fill_dtor@Base 4.9 + __asan_cplus_demangle_fill_extended_operator@Base 4.9 + __asan_cplus_demangle_fill_name@Base 4.9 + __asan_cplus_demangle_init_info@Base 4.9 + __asan_cplus_demangle_mangled_name@Base 4.9 + __asan_cplus_demangle_operators@Base 4.9 + __asan_cplus_demangle_print@Base 4.9 + __asan_cplus_demangle_print_callback@Base 4.9 + __asan_cplus_demangle_type@Base 4.9 + __asan_cplus_demangle_v3@Base 4.9 + __asan_cplus_demangle_v3_callback@Base 4.9 + __asan_internal_memcmp@Base 4.9 + __asan_internal_memcpy@Base 4.9 + __asan_internal_memset@Base 4.9 + __asan_internal_strcmp@Base 4.9 + __asan_internal_strlen@Base 4.9 + __asan_internal_strncmp@Base 4.9 + __asan_internal_strnlen@Base 4.9 + __asan_is_gnu_v3_mangled_ctor@Base 4.9 + __asan_is_gnu_v3_mangled_dtor@Base 4.9 + __asan_java_demangle_v3@Base 4.9 + __asan_java_demangle_v3_callback@Base 4.9 + __close@Base 4.9 + __cxa_atexit@Base 4.9 + __cxa_guard_abort@Base 4.9 + __cxa_guard_acquire@Base 4.9 + __cxa_guard_release@Base 4.9 + __fxstat64@Base 4.9 + __fxstat@Base 4.9 + __getdelim@Base 5 + __interceptor___close@Base 4.9 + __interceptor___cxa_atexit@Base 4.9 + __interceptor___fxstat64@Base 4.9 + __interceptor___fxstat@Base 4.9 + __interceptor___getdelim@Base 5 + __interceptor___isoc99_fprintf@Base 5 + __interceptor___isoc99_fscanf@Base 4.9 + __interceptor___isoc99_printf@Base 5 + __interceptor___isoc99_scanf@Base 4.9 + __interceptor___isoc99_snprintf@Base 5 + __interceptor___isoc99_sprintf@Base 5 + __interceptor___isoc99_sscanf@Base 4.9 + __interceptor___isoc99_vfprintf@Base 5 + __interceptor___isoc99_vfscanf@Base 4.9 + __interceptor___isoc99_vprintf@Base 5 + __interceptor___isoc99_vscanf@Base 4.9 + __interceptor___isoc99_vsnprintf@Base 5 + __interceptor___isoc99_vsprintf@Base 5 + __interceptor___isoc99_vsscanf@Base 4.9 + __interceptor___libc_memalign@Base 4.9 + __interceptor___lxstat64@Base 4.9 + __interceptor___lxstat@Base 4.9 + __interceptor___overflow@Base 5 + __interceptor___res_iclose@Base 4.9 + __interceptor___sigsetjmp@Base 4.9 + __interceptor___tls_get_addr@Base 6 + __interceptor___uflow@Base 5 + __interceptor___underflow@Base 5 + __interceptor___woverflow@Base 5 + __interceptor___wuflow@Base 5 + __interceptor___wunderflow@Base 5 + __interceptor___xpg_strerror_r@Base 4.9 + __interceptor___xstat64@Base 4.9 + __interceptor___xstat@Base 4.9 + __interceptor__exit@Base 4.9 + __interceptor__obstack_begin@Base 5 + __interceptor__obstack_begin_1@Base 5 + __interceptor__obstack_newchunk@Base 5 + __interceptor__setjmp@Base 4.9 + __interceptor_abort@Base 4.9 + __interceptor_accept4@Base 4.9 + __interceptor_accept@Base 4.9 + __interceptor_aligned_alloc@Base 5 + __interceptor_asctime@Base 4.9 + __interceptor_asctime_r@Base 4.9 + __interceptor_asprintf@Base 5 + __interceptor_atexit@Base 4.9 + __interceptor_backtrace@Base 4.9 + __interceptor_backtrace_symbols@Base 4.9 + __interceptor_bind@Base 4.9 + __interceptor_calloc@Base 4.9 + __interceptor_canonicalize_file_name@Base 4.9 + __interceptor_capget@Base 5 + __interceptor_capset@Base 5 + __interceptor_cfree@Base 4.9 + __interceptor_clock_getres@Base 4.9 + __interceptor_clock_gettime@Base 4.9 + __interceptor_clock_settime@Base 4.9 + __interceptor_close@Base 4.9 + __interceptor_closedir@Base 6 + __interceptor_confstr@Base 4.9 + __interceptor_connect@Base 4.9 + __interceptor_creat64@Base 4.9 + __interceptor_creat@Base 4.9 + __interceptor_ctermid@Base 7 + __interceptor_ctime@Base 4.9 + __interceptor_ctime_r@Base 4.9 + __interceptor_dl_iterate_phdr@Base 6 + __interceptor_dlclose@Base 4.9 + __interceptor_dlopen@Base 4.9 + __interceptor_drand48_r@Base 4.9 + __interceptor_dup2@Base 4.9 + __interceptor_dup3@Base 4.9 + __interceptor_dup@Base 4.9 + __interceptor_endgrent@Base 5 + __interceptor_endpwent@Base 5 + __interceptor_epoll_create1@Base 4.9 + __interceptor_epoll_create@Base 4.9 + __interceptor_epoll_ctl@Base 4.9 + __interceptor_epoll_pwait@Base 7 + __interceptor_epoll_wait@Base 4.9 + __interceptor_ether_aton@Base 4.9 + __interceptor_ether_aton_r@Base 4.9 + __interceptor_ether_hostton@Base 4.9 + __interceptor_ether_line@Base 4.9 + __interceptor_ether_ntoa@Base 4.9 + __interceptor_ether_ntoa_r@Base 4.9 + __interceptor_ether_ntohost@Base 4.9 + __interceptor_eventfd@Base 4.9 + __interceptor_eventfd_read@Base 7 + __interceptor_eventfd_write@Base 7 + __interceptor_fclose@Base 4.9 + __interceptor_fdopen@Base 5 + __interceptor_fflush@Base 4.9 + __interceptor_fgetxattr@Base 5 + __interceptor_flistxattr@Base 5 + __interceptor_fmemopen@Base 5 + __interceptor_fopen64@Base 5 + __interceptor_fopen@Base 4.9 + __interceptor_fopencookie@Base 6 + __interceptor_fork@Base 4.9 + __interceptor_fprintf@Base 5 + __interceptor_fread@Base 4.9 + __interceptor_free@Base 4.9 + __interceptor_freopen64@Base 5 + __interceptor_freopen@Base 4.9 + __interceptor_frexp@Base 4.9 + __interceptor_frexpf@Base 4.9 + __interceptor_frexpl@Base 4.9 + __interceptor_fscanf@Base 4.9 + __interceptor_fstat64@Base 4.9 + __interceptor_fstat@Base 4.9 + __interceptor_fstatfs64@Base 4.9 + __interceptor_fstatfs@Base 4.9 + __interceptor_fstatvfs64@Base 4.9 + __interceptor_fstatvfs@Base 4.9 + __interceptor_ftime@Base 5 + __interceptor_fwrite@Base 4.9 + __interceptor_get_current_dir_name@Base 4.9 + __interceptor_getaddrinfo@Base 4.9 + __interceptor_getcwd@Base 4.9 + __interceptor_getdelim@Base 4.9 + __interceptor_getgroups@Base 4.9 + __interceptor_gethostbyaddr@Base 4.9 + __interceptor_gethostbyaddr_r@Base 4.9 + __interceptor_gethostbyname2@Base 4.9 + __interceptor_gethostbyname2_r@Base 4.9 + __interceptor_gethostbyname@Base 4.9 + __interceptor_gethostbyname_r@Base 4.9 + __interceptor_gethostent@Base 4.9 + __interceptor_gethostent_r@Base 4.9 + __interceptor_getifaddrs@Base 5 + __interceptor_getitimer@Base 4.9 + __interceptor_getline@Base 4.9 + __interceptor_getmntent@Base 4.9 + __interceptor_getmntent_r@Base 4.9 + __interceptor_getnameinfo@Base 5 + __interceptor_getpass@Base 5 + __interceptor_getpeername@Base 4.9 + __interceptor_getresgid@Base 5 + __interceptor_getresuid@Base 5 + __interceptor_getsockname@Base 4.9 + __interceptor_getsockopt@Base 4.9 + __interceptor_gettimeofday@Base 4.9 + __interceptor_getxattr@Base 5 + __interceptor_glob64@Base 5 + __interceptor_glob@Base 5 + __interceptor_gmtime@Base 4.9 + __interceptor_gmtime_r@Base 4.9 + __interceptor_iconv@Base 4.9 + __interceptor_if_indextoname@Base 5 + __interceptor_if_nametoindex@Base 5 + __interceptor_inet_aton@Base 4.9 + __interceptor_inet_ntop@Base 4.9 + __interceptor_inet_pton@Base 4.9 + __interceptor_initgroups@Base 4.9 + __interceptor_inotify_init1@Base 4.9 + __interceptor_inotify_init@Base 4.9 + __interceptor_ioctl@Base 4.9 + __interceptor_kill@Base 4.9 + __interceptor_lgamma@Base 4.9 + __interceptor_lgamma_r@Base 4.9 + __interceptor_lgammaf@Base 4.9 + __interceptor_lgammaf_r@Base 4.9 + __interceptor_lgammal@Base 4.9 + __interceptor_lgammal_r@Base 4.9 + __interceptor_lgetxattr@Base 5 + __interceptor_listen@Base 4.9 + __interceptor_listxattr@Base 5 + __interceptor_llistxattr@Base 5 + __interceptor_localtime@Base 4.9 + __interceptor_localtime_r@Base 4.9 + __interceptor_longjmp@Base 4.9 + __interceptor_lrand48_r@Base 4.9 + __interceptor_malloc@Base 4.9 + __interceptor_malloc_usable_size@Base 4.9 + __interceptor_mbsnrtowcs@Base 4.9 + __interceptor_mbsrtowcs@Base 4.9 + __interceptor_mbstowcs@Base 4.9 + __interceptor_memalign@Base 4.9 + __interceptor_memchr@Base 4.9 + __interceptor_memcmp@Base 4.9 + __interceptor_memcpy@Base 4.9 + __interceptor_memmem@Base 7 + __interceptor_memmove@Base 4.9 + __interceptor_memrchr@Base 4.9 + __interceptor_memset@Base 4.9 + __interceptor_mincore@Base 6 + __interceptor_mktime@Base 5 + __interceptor_mlock@Base 4.9 + __interceptor_mlockall@Base 4.9 + __interceptor_mmap64@Base 4.9 + __interceptor_mmap@Base 4.9 + __interceptor_modf@Base 4.9 + __interceptor_modff@Base 4.9 + __interceptor_modfl@Base 4.9 + __interceptor_munlock@Base 4.9 + __interceptor_munlockall@Base 4.9 + __interceptor_munmap@Base 4.9 + __interceptor_nanosleep@Base 4.9 + __interceptor_on_exit@Base 4.9 + __interceptor_open64@Base 4.9 + __interceptor_open@Base 4.9 + __interceptor_open_memstream@Base 5 + __interceptor_open_wmemstream@Base 5 + __interceptor_opendir@Base 4.9 + __interceptor_pipe2@Base 4.9 + __interceptor_pipe@Base 4.9 + __interceptor_poll@Base 4.9 + __interceptor_posix_memalign@Base 4.9 + __interceptor_ppoll@Base 4.9 + __interceptor_prctl@Base 4.9 + __interceptor_pread64@Base 4.9 + __interceptor_pread@Base 4.9 + __interceptor_preadv64@Base 4.9 + __interceptor_preadv@Base 4.9 + __interceptor_printf@Base 5 + __interceptor_process_vm_readv@Base 6 + __interceptor_process_vm_writev@Base 6 + __interceptor_pthread_attr_getaffinity_np@Base 4.9 + __interceptor_pthread_attr_getdetachstate@Base 4.9 + __interceptor_pthread_attr_getguardsize@Base 4.9 + __interceptor_pthread_attr_getinheritsched@Base 4.9 + __interceptor_pthread_attr_getschedparam@Base 4.9 + __interceptor_pthread_attr_getschedpolicy@Base 4.9 + __interceptor_pthread_attr_getscope@Base 4.9 + __interceptor_pthread_attr_getstack@Base 4.9 + __interceptor_pthread_attr_getstacksize@Base 4.9 + __interceptor_pthread_barrier_destroy@Base 4.9 + __interceptor_pthread_barrier_init@Base 4.9 + __interceptor_pthread_barrier_wait@Base 4.9 + __interceptor_pthread_barrierattr_getpshared@Base 5 + __interceptor_pthread_cond_broadcast@Base 4.9 + __interceptor_pthread_cond_destroy@Base 4.9 + __interceptor_pthread_cond_init@Base 4.9 + __interceptor_pthread_cond_signal@Base 4.9 + __interceptor_pthread_cond_timedwait@Base 4.9 + __interceptor_pthread_cond_wait@Base 4.9 + __interceptor_pthread_condattr_getclock@Base 5 + __interceptor_pthread_condattr_getpshared@Base 5 + __interceptor_pthread_create@Base 4.9 + __interceptor_pthread_detach@Base 4.9 + __interceptor_pthread_getschedparam@Base 4.9 + __interceptor_pthread_join@Base 4.9 + __interceptor_pthread_kill@Base 4.9 + __interceptor_pthread_mutex_destroy@Base 4.9 + __interceptor_pthread_mutex_init@Base 4.9 + __interceptor_pthread_mutex_lock@Base 4.9 + __interceptor_pthread_mutex_timedlock@Base 4.9 + __interceptor_pthread_mutex_trylock@Base 4.9 + __interceptor_pthread_mutex_unlock@Base 4.9 + __interceptor_pthread_mutexattr_getprioceiling@Base 5 + __interceptor_pthread_mutexattr_getprotocol@Base 5 + __interceptor_pthread_mutexattr_getpshared@Base 5 + __interceptor_pthread_mutexattr_getrobust@Base 5 + __interceptor_pthread_mutexattr_getrobust_np@Base 5 + __interceptor_pthread_mutexattr_gettype@Base 5 + __interceptor_pthread_once@Base 4.9 + __interceptor_pthread_rwlock_destroy@Base 4.9 + __interceptor_pthread_rwlock_init@Base 4.9 + __interceptor_pthread_rwlock_rdlock@Base 4.9 + __interceptor_pthread_rwlock_timedrdlock@Base 4.9 + __interceptor_pthread_rwlock_timedwrlock@Base 4.9 + __interceptor_pthread_rwlock_tryrdlock@Base 4.9 + __interceptor_pthread_rwlock_trywrlock@Base 4.9 + __interceptor_pthread_rwlock_unlock@Base 4.9 + __interceptor_pthread_rwlock_wrlock@Base 4.9 + __interceptor_pthread_rwlockattr_getkind_np@Base 5 + __interceptor_pthread_rwlockattr_getpshared@Base 5 + __interceptor_pthread_setcancelstate@Base 6 + __interceptor_pthread_setcanceltype@Base 6 + __interceptor_pthread_setname_np@Base 4.9 + __interceptor_pthread_sigmask@Base 7 + __interceptor_pthread_spin_destroy@Base 4.9 + __interceptor_pthread_spin_init@Base 4.9 + __interceptor_pthread_spin_lock@Base 4.9 + __interceptor_pthread_spin_trylock@Base 4.9 + __interceptor_pthread_spin_unlock@Base 4.9 + __interceptor_ptrace@Base 4.9 + __interceptor_puts@Base 4.9 + __interceptor_pvalloc@Base 4.9 + __interceptor_pwrite64@Base 4.9 + __interceptor_pwrite@Base 4.9 + __interceptor_pwritev64@Base 4.9 + __interceptor_pwritev@Base 4.9 + __interceptor_raise@Base 4.9 + __interceptor_rand_r@Base 5 + __interceptor_random_r@Base 4.9 + __interceptor_read@Base 4.9 + __interceptor_readdir64@Base 4.9 + __interceptor_readdir64_r@Base 4.9 + __interceptor_readdir@Base 4.9 + __interceptor_readdir_r@Base 4.9 + __interceptor_readv@Base 4.9 + __interceptor_realloc@Base 4.9 + __interceptor_realpath@Base 4.9 + __interceptor_recv@Base 4.9 + __interceptor_recvfrom@Base 7 + __interceptor_recvmsg@Base 4.9 + __interceptor_remquo@Base 4.9 + __interceptor_remquof@Base 4.9 + __interceptor_remquol@Base 4.9 + __interceptor_rmdir@Base 4.9 + __interceptor_scandir64@Base 4.9 + __interceptor_scandir@Base 4.9 + __interceptor_scanf@Base 4.9 + __interceptor_sched_getaffinity@Base 4.9 + __interceptor_sched_getparam@Base 6 + __interceptor_sem_destroy@Base 4.9 + __interceptor_sem_getvalue@Base 4.9 + __interceptor_sem_init@Base 4.9 + __interceptor_sem_post@Base 4.9 + __interceptor_sem_timedwait@Base 4.9 + __interceptor_sem_trywait@Base 4.9 + __interceptor_sem_wait@Base 4.9 + __interceptor_send@Base 4.9 + __interceptor_sendmsg@Base 4.9 + __interceptor_sendto@Base 7 + __interceptor_setgrent@Base 5 + __interceptor_setitimer@Base 4.9 + __interceptor_setjmp@Base 4.9 + __interceptor_setlocale@Base 4.9 + __interceptor_setpwent@Base 5 + __interceptor_shmctl@Base 4.9 + __interceptor_sigaction@Base 4.9 + __interceptor_sigblock@Base 7 + __interceptor_sigemptyset@Base 4.9 + __interceptor_sigfillset@Base 4.9 + __interceptor_siglongjmp@Base 4.9 + __interceptor_signal@Base 4.9 + __interceptor_signalfd@Base 4.9 + __interceptor_sigpending@Base 4.9 + __interceptor_sigprocmask@Base 4.9 + __interceptor_sigsetjmp@Base 4.9 + __interceptor_sigsetmask@Base 7 + __interceptor_sigsuspend@Base 4.9 + __interceptor_sigtimedwait@Base 4.9 + __interceptor_sigwait@Base 4.9 + __interceptor_sigwaitinfo@Base 4.9 + __interceptor_sincos@Base 4.9 + __interceptor_sincosf@Base 4.9 + __interceptor_sincosl@Base 4.9 + __interceptor_sleep@Base 4.9 + __interceptor_snprintf@Base 5 + __interceptor_socket@Base 4.9 + __interceptor_socketpair@Base 4.9 + __interceptor_sprintf@Base 5 + __interceptor_sscanf@Base 4.9 + __interceptor_statfs64@Base 4.9 + __interceptor_statfs@Base 4.9 + __interceptor_statvfs64@Base 4.9 + __interceptor_statvfs@Base 4.9 + __interceptor_strcasecmp@Base 4.9 + __interceptor_strcasestr@Base 6 + __interceptor_strchr@Base 4.9 + __interceptor_strchrnul@Base 4.9 + __interceptor_strcmp@Base 4.9 + __interceptor_strcpy@Base 4.9 + __interceptor_strcspn@Base 6 + __interceptor_strdup@Base 4.9 + __interceptor_strerror@Base 4.9 + __interceptor_strerror_r@Base 4.9 + __interceptor_strlen@Base 4.9 + __interceptor_strncasecmp@Base 4.9 + __interceptor_strncmp@Base 4.9 + __interceptor_strncpy@Base 4.9 + __interceptor_strnlen@Base 7 + __interceptor_strpbrk@Base 6 + __interceptor_strptime@Base 4.9 + __interceptor_strrchr@Base 4.9 + __interceptor_strspn@Base 6 + __interceptor_strstr@Base 4.9 + __interceptor_strtoimax@Base 4.9 + __interceptor_strtoumax@Base 4.9 + __interceptor_sysinfo@Base 4.9 + __interceptor_tcgetattr@Base 4.9 + __interceptor_tempnam@Base 4.9 + __interceptor_textdomain@Base 4.9 + __interceptor_time@Base 4.9 + __interceptor_timerfd_gettime@Base 5 + __interceptor_timerfd_settime@Base 5 + __interceptor_times@Base 4.9 + __interceptor_tmpfile64@Base 5 + __interceptor_tmpfile@Base 5 + __interceptor_tmpnam@Base 4.9 + __interceptor_tmpnam_r@Base 4.9 + __interceptor_tsearch@Base 5 + __interceptor_ttyname_r@Base 7 + __interceptor_unlink@Base 4.9 + __interceptor_usleep@Base 4.9 + __interceptor_valloc@Base 4.9 + __interceptor_vasprintf@Base 5 + __interceptor_vfork@Base 5 + __interceptor_vfprintf@Base 5 + __interceptor_vfscanf@Base 4.9 + __interceptor_vprintf@Base 5 + __interceptor_vscanf@Base 4.9 + __interceptor_vsnprintf@Base 5 + __interceptor_vsprintf@Base 5 + __interceptor_vsscanf@Base 4.9 + __interceptor_wait3@Base 4.9 + __interceptor_wait4@Base 4.9 + __interceptor_wait@Base 4.9 + __interceptor_waitid@Base 4.9 + __interceptor_waitpid@Base 4.9 + __interceptor_wcrtomb@Base 6 + __interceptor_wcsnrtombs@Base 4.9 + __interceptor_wcsrtombs@Base 4.9 + __interceptor_wcstombs@Base 4.9 + __interceptor_wordexp@Base 4.9 + __interceptor_write@Base 4.9 + __interceptor_writev@Base 4.9 + __interceptor_xdr_bool@Base 5 + __interceptor_xdr_bytes@Base 5 + __interceptor_xdr_char@Base 5 + __interceptor_xdr_double@Base 5 + __interceptor_xdr_enum@Base 5 + __interceptor_xdr_float@Base 5 + __interceptor_xdr_hyper@Base 5 + __interceptor_xdr_int16_t@Base 5 + __interceptor_xdr_int32_t@Base 5 + __interceptor_xdr_int64_t@Base 5 + __interceptor_xdr_int8_t@Base 5 + __interceptor_xdr_int@Base 5 + __interceptor_xdr_long@Base 5 + __interceptor_xdr_longlong_t@Base 5 + __interceptor_xdr_quad_t@Base 5 + __interceptor_xdr_short@Base 5 + __interceptor_xdr_string@Base 5 + __interceptor_xdr_u_char@Base 5 + __interceptor_xdr_u_hyper@Base 5 + __interceptor_xdr_u_int@Base 5 + __interceptor_xdr_u_long@Base 5 + __interceptor_xdr_u_longlong_t@Base 5 + __interceptor_xdr_u_quad_t@Base 5 + __interceptor_xdr_u_short@Base 5 + __interceptor_xdr_uint16_t@Base 5 + __interceptor_xdr_uint32_t@Base 5 + __interceptor_xdr_uint64_t@Base 5 + __interceptor_xdr_uint8_t@Base 5 + __interceptor_xdrmem_create@Base 5 + __interceptor_xdrstdio_create@Base 5 + __isoc99_fprintf@Base 5 + __isoc99_fscanf@Base 4.9 + __isoc99_printf@Base 5 + __isoc99_scanf@Base 4.9 + __isoc99_snprintf@Base 5 + __isoc99_sprintf@Base 5 + __isoc99_sscanf@Base 4.9 + __isoc99_vfprintf@Base 5 + __isoc99_vfscanf@Base 4.9 + __isoc99_vprintf@Base 5 + __isoc99_vscanf@Base 4.9 + __isoc99_vsnprintf@Base 5 + __isoc99_vsprintf@Base 5 + __isoc99_vsscanf@Base 4.9 + __libc_memalign@Base 4.9 + __lxstat64@Base 4.9 + __lxstat@Base 4.9 + __overflow@Base 5 + __res_iclose@Base 4.9 + __sanitizer_cov@Base 4.9 + __sanitizer_cov_dump@Base 4.9 + __sanitizer_cov_indir_call16@Base 5 + __sanitizer_cov_init@Base 5 + __sanitizer_cov_module_init@Base 5 + __sanitizer_cov_trace_basic_block@Base 6 + __sanitizer_cov_trace_cmp1@Base 7 + __sanitizer_cov_trace_cmp2@Base 7 + __sanitizer_cov_trace_cmp4@Base 7 + __sanitizer_cov_trace_cmp8@Base 7 + __sanitizer_cov_trace_cmp@Base 6 + __sanitizer_cov_trace_div4@Base 7 + __sanitizer_cov_trace_div8@Base 7 + __sanitizer_cov_trace_func_enter@Base 6 + __sanitizer_cov_trace_gep@Base 7 + __sanitizer_cov_trace_pc_guard@Base 7 + __sanitizer_cov_trace_pc_guard_init@Base 7 + __sanitizer_cov_trace_pc_indir@Base 7 + __sanitizer_cov_trace_switch@Base 6 + __sanitizer_cov_with_check@Base 6 + __sanitizer_free_hook@Base 5 + __sanitizer_get_allocated_size@Base 5 + __sanitizer_get_coverage_guards@Base 6 + __sanitizer_get_current_allocated_bytes@Base 5 + __sanitizer_get_estimated_allocated_size@Base 5 + __sanitizer_get_free_bytes@Base 5 + __sanitizer_get_heap_size@Base 5 + __sanitizer_get_number_of_counters@Base 6 + __sanitizer_get_ownership@Base 5 + __sanitizer_get_total_unique_caller_callee_pairs@Base 6 + __sanitizer_get_total_unique_coverage@Base 6 + __sanitizer_get_unmapped_bytes@Base 5 + __sanitizer_install_malloc_and_free_hooks@Base 7 + __sanitizer_malloc_hook@Base 5 + __sanitizer_maybe_open_cov_file@Base 5 + __sanitizer_print_stack_trace@Base 5 + __sanitizer_report_error_summary@Base 4.9 + __sanitizer_reset_coverage@Base 6 + __sanitizer_sandbox_on_notify@Base 4.9 + __sanitizer_set_death_callback@Base 6 + __sanitizer_set_report_fd@Base 7 + __sanitizer_set_report_path@Base 4.9 + __sanitizer_symbolize_global@Base 7 + __sanitizer_symbolize_pc@Base 7 + __sanitizer_syscall_post_impl_accept4@Base 4.9 + __sanitizer_syscall_post_impl_accept@Base 4.9 + __sanitizer_syscall_post_impl_access@Base 4.9 + __sanitizer_syscall_post_impl_acct@Base 4.9 + __sanitizer_syscall_post_impl_add_key@Base 4.9 + __sanitizer_syscall_post_impl_adjtimex@Base 4.9 + __sanitizer_syscall_post_impl_alarm@Base 4.9 + __sanitizer_syscall_post_impl_bdflush@Base 4.9 + __sanitizer_syscall_post_impl_bind@Base 4.9 + __sanitizer_syscall_post_impl_brk@Base 4.9 + __sanitizer_syscall_post_impl_capget@Base 4.9 + __sanitizer_syscall_post_impl_capset@Base 4.9 + __sanitizer_syscall_post_impl_chdir@Base 4.9 + __sanitizer_syscall_post_impl_chmod@Base 4.9 + __sanitizer_syscall_post_impl_chown@Base 4.9 + __sanitizer_syscall_post_impl_chroot@Base 4.9 + __sanitizer_syscall_post_impl_clock_adjtime@Base 4.9 + __sanitizer_syscall_post_impl_clock_getres@Base 4.9 + __sanitizer_syscall_post_impl_clock_gettime@Base 4.9 + __sanitizer_syscall_post_impl_clock_nanosleep@Base 4.9 + __sanitizer_syscall_post_impl_clock_settime@Base 4.9 + __sanitizer_syscall_post_impl_close@Base 4.9 + __sanitizer_syscall_post_impl_connect@Base 4.9 + __sanitizer_syscall_post_impl_creat@Base 4.9 + __sanitizer_syscall_post_impl_delete_module@Base 4.9 + __sanitizer_syscall_post_impl_dup2@Base 4.9 + __sanitizer_syscall_post_impl_dup3@Base 4.9 + __sanitizer_syscall_post_impl_dup@Base 4.9 + __sanitizer_syscall_post_impl_epoll_create1@Base 4.9 + __sanitizer_syscall_post_impl_epoll_create@Base 4.9 + __sanitizer_syscall_post_impl_epoll_ctl@Base 4.9 + __sanitizer_syscall_post_impl_epoll_pwait@Base 4.9 + __sanitizer_syscall_post_impl_epoll_wait@Base 4.9 + __sanitizer_syscall_post_impl_eventfd2@Base 4.9 + __sanitizer_syscall_post_impl_eventfd@Base 4.9 + __sanitizer_syscall_post_impl_exit@Base 4.9 + __sanitizer_syscall_post_impl_exit_group@Base 4.9 + __sanitizer_syscall_post_impl_faccessat@Base 4.9 + __sanitizer_syscall_post_impl_fchdir@Base 4.9 + __sanitizer_syscall_post_impl_fchmod@Base 4.9 + __sanitizer_syscall_post_impl_fchmodat@Base 4.9 + __sanitizer_syscall_post_impl_fchown@Base 4.9 + __sanitizer_syscall_post_impl_fchownat@Base 4.9 + __sanitizer_syscall_post_impl_fcntl64@Base 4.9 + __sanitizer_syscall_post_impl_fcntl@Base 4.9 + __sanitizer_syscall_post_impl_fdatasync@Base 4.9 + __sanitizer_syscall_post_impl_fgetxattr@Base 4.9 + __sanitizer_syscall_post_impl_flistxattr@Base 4.9 + __sanitizer_syscall_post_impl_flock@Base 4.9 + __sanitizer_syscall_post_impl_fork@Base 4.9 + __sanitizer_syscall_post_impl_fremovexattr@Base 4.9 + __sanitizer_syscall_post_impl_fsetxattr@Base 4.9 + __sanitizer_syscall_post_impl_fstat64@Base 4.9 + __sanitizer_syscall_post_impl_fstat@Base 4.9 + __sanitizer_syscall_post_impl_fstatat64@Base 4.9 + __sanitizer_syscall_post_impl_fstatfs64@Base 4.9 + __sanitizer_syscall_post_impl_fstatfs@Base 4.9 + __sanitizer_syscall_post_impl_fsync@Base 4.9 + __sanitizer_syscall_post_impl_ftruncate@Base 4.9 + __sanitizer_syscall_post_impl_futimesat@Base 4.9 + __sanitizer_syscall_post_impl_get_mempolicy@Base 4.9 + __sanitizer_syscall_post_impl_get_robust_list@Base 4.9 + __sanitizer_syscall_post_impl_getcpu@Base 4.9 + __sanitizer_syscall_post_impl_getcwd@Base 4.9 + __sanitizer_syscall_post_impl_getdents64@Base 4.9 + __sanitizer_syscall_post_impl_getdents@Base 4.9 + __sanitizer_syscall_post_impl_getegid@Base 4.9 + __sanitizer_syscall_post_impl_geteuid@Base 4.9 + __sanitizer_syscall_post_impl_getgid@Base 4.9 + __sanitizer_syscall_post_impl_getgroups@Base 4.9 + __sanitizer_syscall_post_impl_gethostname@Base 4.9 + __sanitizer_syscall_post_impl_getitimer@Base 4.9 + __sanitizer_syscall_post_impl_getpeername@Base 4.9 + __sanitizer_syscall_post_impl_getpgid@Base 4.9 + __sanitizer_syscall_post_impl_getpgrp@Base 4.9 + __sanitizer_syscall_post_impl_getpid@Base 4.9 + __sanitizer_syscall_post_impl_getppid@Base 4.9 + __sanitizer_syscall_post_impl_getpriority@Base 4.9 + __sanitizer_syscall_post_impl_getresgid@Base 4.9 + __sanitizer_syscall_post_impl_getresuid@Base 4.9 + __sanitizer_syscall_post_impl_getrlimit@Base 4.9 + __sanitizer_syscall_post_impl_getrusage@Base 4.9 + __sanitizer_syscall_post_impl_getsid@Base 4.9 + __sanitizer_syscall_post_impl_getsockname@Base 4.9 + __sanitizer_syscall_post_impl_getsockopt@Base 4.9 + __sanitizer_syscall_post_impl_gettid@Base 4.9 + __sanitizer_syscall_post_impl_gettimeofday@Base 4.9 + __sanitizer_syscall_post_impl_getuid@Base 4.9 + __sanitizer_syscall_post_impl_getxattr@Base 4.9 + __sanitizer_syscall_post_impl_init_module@Base 4.9 + __sanitizer_syscall_post_impl_inotify_add_watch@Base 4.9 + __sanitizer_syscall_post_impl_inotify_init1@Base 4.9 + __sanitizer_syscall_post_impl_inotify_init@Base 4.9 + __sanitizer_syscall_post_impl_inotify_rm_watch@Base 4.9 + __sanitizer_syscall_post_impl_io_cancel@Base 4.9 + __sanitizer_syscall_post_impl_io_destroy@Base 4.9 + __sanitizer_syscall_post_impl_io_getevents@Base 4.9 + __sanitizer_syscall_post_impl_io_setup@Base 4.9 + __sanitizer_syscall_post_impl_io_submit@Base 4.9 + __sanitizer_syscall_post_impl_ioctl@Base 4.9 + __sanitizer_syscall_post_impl_ioperm@Base 4.9 + __sanitizer_syscall_post_impl_ioprio_get@Base 4.9 + __sanitizer_syscall_post_impl_ioprio_set@Base 4.9 + __sanitizer_syscall_post_impl_ipc@Base 4.9 + __sanitizer_syscall_post_impl_kexec_load@Base 4.9 + __sanitizer_syscall_post_impl_keyctl@Base 4.9 + __sanitizer_syscall_post_impl_kill@Base 4.9 + __sanitizer_syscall_post_impl_lchown@Base 4.9 + __sanitizer_syscall_post_impl_lgetxattr@Base 4.9 + __sanitizer_syscall_post_impl_link@Base 4.9 + __sanitizer_syscall_post_impl_linkat@Base 4.9 + __sanitizer_syscall_post_impl_listen@Base 4.9 + __sanitizer_syscall_post_impl_listxattr@Base 4.9 + __sanitizer_syscall_post_impl_llistxattr@Base 4.9 + __sanitizer_syscall_post_impl_llseek@Base 4.9 + __sanitizer_syscall_post_impl_lookup_dcookie@Base 4.9 + __sanitizer_syscall_post_impl_lremovexattr@Base 4.9 + __sanitizer_syscall_post_impl_lseek@Base 4.9 + __sanitizer_syscall_post_impl_lsetxattr@Base 4.9 + __sanitizer_syscall_post_impl_lstat64@Base 4.9 + __sanitizer_syscall_post_impl_lstat@Base 4.9 + __sanitizer_syscall_post_impl_madvise@Base 4.9 + __sanitizer_syscall_post_impl_mbind@Base 4.9 + __sanitizer_syscall_post_impl_migrate_pages@Base 4.9 + __sanitizer_syscall_post_impl_mincore@Base 4.9 + __sanitizer_syscall_post_impl_mkdir@Base 4.9 + __sanitizer_syscall_post_impl_mkdirat@Base 4.9 + __sanitizer_syscall_post_impl_mknod@Base 4.9 + __sanitizer_syscall_post_impl_mknodat@Base 4.9 + __sanitizer_syscall_post_impl_mlock@Base 4.9 + __sanitizer_syscall_post_impl_mlockall@Base 4.9 + __sanitizer_syscall_post_impl_mmap_pgoff@Base 4.9 + __sanitizer_syscall_post_impl_mount@Base 4.9 + __sanitizer_syscall_post_impl_move_pages@Base 4.9 + __sanitizer_syscall_post_impl_mprotect@Base 4.9 + __sanitizer_syscall_post_impl_mq_getsetattr@Base 4.9 + __sanitizer_syscall_post_impl_mq_notify@Base 4.9 + __sanitizer_syscall_post_impl_mq_open@Base 4.9 + __sanitizer_syscall_post_impl_mq_timedreceive@Base 4.9 + __sanitizer_syscall_post_impl_mq_timedsend@Base 4.9 + __sanitizer_syscall_post_impl_mq_unlink@Base 4.9 + __sanitizer_syscall_post_impl_mremap@Base 4.9 + __sanitizer_syscall_post_impl_msgctl@Base 4.9 + __sanitizer_syscall_post_impl_msgget@Base 4.9 + __sanitizer_syscall_post_impl_msgrcv@Base 4.9 + __sanitizer_syscall_post_impl_msgsnd@Base 4.9 + __sanitizer_syscall_post_impl_msync@Base 4.9 + __sanitizer_syscall_post_impl_munlock@Base 4.9 + __sanitizer_syscall_post_impl_munlockall@Base 4.9 + __sanitizer_syscall_post_impl_munmap@Base 4.9 + __sanitizer_syscall_post_impl_name_to_handle_at@Base 4.9 + __sanitizer_syscall_post_impl_nanosleep@Base 4.9 + __sanitizer_syscall_post_impl_newfstat@Base 4.9 + __sanitizer_syscall_post_impl_newfstatat@Base 4.9 + __sanitizer_syscall_post_impl_newlstat@Base 4.9 + __sanitizer_syscall_post_impl_newstat@Base 4.9 + __sanitizer_syscall_post_impl_newuname@Base 4.9 + __sanitizer_syscall_post_impl_ni_syscall@Base 4.9 + __sanitizer_syscall_post_impl_nice@Base 4.9 + __sanitizer_syscall_post_impl_old_getrlimit@Base 4.9 + __sanitizer_syscall_post_impl_old_mmap@Base 4.9 + __sanitizer_syscall_post_impl_old_readdir@Base 4.9 + __sanitizer_syscall_post_impl_old_select@Base 4.9 + __sanitizer_syscall_post_impl_oldumount@Base 4.9 + __sanitizer_syscall_post_impl_olduname@Base 4.9 + __sanitizer_syscall_post_impl_open@Base 4.9 + __sanitizer_syscall_post_impl_open_by_handle_at@Base 4.9 + __sanitizer_syscall_post_impl_openat@Base 4.9 + __sanitizer_syscall_post_impl_pause@Base 4.9 + __sanitizer_syscall_post_impl_pciconfig_iobase@Base 4.9 + __sanitizer_syscall_post_impl_pciconfig_read@Base 4.9 + __sanitizer_syscall_post_impl_pciconfig_write@Base 4.9 + __sanitizer_syscall_post_impl_perf_event_open@Base 4.9 + __sanitizer_syscall_post_impl_personality@Base 4.9 + __sanitizer_syscall_post_impl_pipe2@Base 4.9 + __sanitizer_syscall_post_impl_pipe@Base 4.9 + __sanitizer_syscall_post_impl_pivot_root@Base 4.9 + __sanitizer_syscall_post_impl_poll@Base 4.9 + __sanitizer_syscall_post_impl_ppoll@Base 4.9 + __sanitizer_syscall_post_impl_pread64@Base 4.9 + __sanitizer_syscall_post_impl_preadv@Base 4.9 + __sanitizer_syscall_post_impl_prlimit64@Base 4.9 + __sanitizer_syscall_post_impl_process_vm_readv@Base 4.9 + __sanitizer_syscall_post_impl_process_vm_writev@Base 4.9 + __sanitizer_syscall_post_impl_pselect6@Base 4.9 + __sanitizer_syscall_post_impl_ptrace@Base 4.9 + __sanitizer_syscall_post_impl_pwrite64@Base 4.9 + __sanitizer_syscall_post_impl_pwritev@Base 4.9 + __sanitizer_syscall_post_impl_quotactl@Base 4.9 + __sanitizer_syscall_post_impl_read@Base 4.9 + __sanitizer_syscall_post_impl_readlink@Base 4.9 + __sanitizer_syscall_post_impl_readlinkat@Base 4.9 + __sanitizer_syscall_post_impl_readv@Base 4.9 + __sanitizer_syscall_post_impl_reboot@Base 4.9 + __sanitizer_syscall_post_impl_recv@Base 4.9 + __sanitizer_syscall_post_impl_recvfrom@Base 4.9 + __sanitizer_syscall_post_impl_recvmmsg@Base 4.9 + __sanitizer_syscall_post_impl_recvmsg@Base 4.9 + __sanitizer_syscall_post_impl_remap_file_pages@Base 4.9 + __sanitizer_syscall_post_impl_removexattr@Base 4.9 + __sanitizer_syscall_post_impl_rename@Base 4.9 + __sanitizer_syscall_post_impl_renameat@Base 4.9 + __sanitizer_syscall_post_impl_request_key@Base 4.9 + __sanitizer_syscall_post_impl_restart_syscall@Base 4.9 + __sanitizer_syscall_post_impl_rmdir@Base 4.9 + __sanitizer_syscall_post_impl_rt_sigaction@Base 7 + __sanitizer_syscall_post_impl_rt_sigpending@Base 4.9 + __sanitizer_syscall_post_impl_rt_sigprocmask@Base 4.9 + __sanitizer_syscall_post_impl_rt_sigqueueinfo@Base 4.9 + __sanitizer_syscall_post_impl_rt_sigtimedwait@Base 4.9 + __sanitizer_syscall_post_impl_rt_tgsigqueueinfo@Base 4.9 + __sanitizer_syscall_post_impl_sched_get_priority_max@Base 4.9 + __sanitizer_syscall_post_impl_sched_get_priority_min@Base 4.9 + __sanitizer_syscall_post_impl_sched_getaffinity@Base 4.9 + __sanitizer_syscall_post_impl_sched_getparam@Base 4.9 + __sanitizer_syscall_post_impl_sched_getscheduler@Base 4.9 + __sanitizer_syscall_post_impl_sched_rr_get_interval@Base 4.9 + __sanitizer_syscall_post_impl_sched_setaffinity@Base 4.9 + __sanitizer_syscall_post_impl_sched_setparam@Base 4.9 + __sanitizer_syscall_post_impl_sched_setscheduler@Base 4.9 + __sanitizer_syscall_post_impl_sched_yield@Base 4.9 + __sanitizer_syscall_post_impl_select@Base 4.9 + __sanitizer_syscall_post_impl_semctl@Base 4.9 + __sanitizer_syscall_post_impl_semget@Base 4.9 + __sanitizer_syscall_post_impl_semop@Base 4.9 + __sanitizer_syscall_post_impl_semtimedop@Base 4.9 + __sanitizer_syscall_post_impl_send@Base 4.9 + __sanitizer_syscall_post_impl_sendfile64@Base 4.9 + __sanitizer_syscall_post_impl_sendfile@Base 4.9 + __sanitizer_syscall_post_impl_sendmmsg@Base 4.9 + __sanitizer_syscall_post_impl_sendmsg@Base 4.9 + __sanitizer_syscall_post_impl_sendto@Base 4.9 + __sanitizer_syscall_post_impl_set_mempolicy@Base 4.9 + __sanitizer_syscall_post_impl_set_robust_list@Base 4.9 + __sanitizer_syscall_post_impl_set_tid_address@Base 4.9 + __sanitizer_syscall_post_impl_setdomainname@Base 4.9 + __sanitizer_syscall_post_impl_setfsgid@Base 4.9 + __sanitizer_syscall_post_impl_setfsuid@Base 4.9 + __sanitizer_syscall_post_impl_setgid@Base 4.9 + __sanitizer_syscall_post_impl_setgroups@Base 4.9 + __sanitizer_syscall_post_impl_sethostname@Base 4.9 + __sanitizer_syscall_post_impl_setitimer@Base 4.9 + __sanitizer_syscall_post_impl_setns@Base 4.9 + __sanitizer_syscall_post_impl_setpgid@Base 4.9 + __sanitizer_syscall_post_impl_setpriority@Base 4.9 + __sanitizer_syscall_post_impl_setregid@Base 4.9 + __sanitizer_syscall_post_impl_setresgid@Base 4.9 + __sanitizer_syscall_post_impl_setresuid@Base 4.9 + __sanitizer_syscall_post_impl_setreuid@Base 4.9 + __sanitizer_syscall_post_impl_setrlimit@Base 4.9 + __sanitizer_syscall_post_impl_setsid@Base 4.9 + __sanitizer_syscall_post_impl_setsockopt@Base 4.9 + __sanitizer_syscall_post_impl_settimeofday@Base 4.9 + __sanitizer_syscall_post_impl_setuid@Base 4.9 + __sanitizer_syscall_post_impl_setxattr@Base 4.9 + __sanitizer_syscall_post_impl_sgetmask@Base 4.9 + __sanitizer_syscall_post_impl_shmat@Base 4.9 + __sanitizer_syscall_post_impl_shmctl@Base 4.9 + __sanitizer_syscall_post_impl_shmdt@Base 4.9 + __sanitizer_syscall_post_impl_shmget@Base 4.9 + __sanitizer_syscall_post_impl_shutdown@Base 4.9 + __sanitizer_syscall_post_impl_sigaction@Base 7 + __sanitizer_syscall_post_impl_signal@Base 4.9 + __sanitizer_syscall_post_impl_signalfd4@Base 4.9 + __sanitizer_syscall_post_impl_signalfd@Base 4.9 + __sanitizer_syscall_post_impl_sigpending@Base 4.9 + __sanitizer_syscall_post_impl_sigprocmask@Base 4.9 + __sanitizer_syscall_post_impl_socket@Base 4.9 + __sanitizer_syscall_post_impl_socketcall@Base 4.9 + __sanitizer_syscall_post_impl_socketpair@Base 4.9 + __sanitizer_syscall_post_impl_splice@Base 4.9 + __sanitizer_syscall_post_impl_spu_create@Base 4.9 + __sanitizer_syscall_post_impl_spu_run@Base 4.9 + __sanitizer_syscall_post_impl_ssetmask@Base 4.9 + __sanitizer_syscall_post_impl_stat64@Base 4.9 + __sanitizer_syscall_post_impl_stat@Base 4.9 + __sanitizer_syscall_post_impl_statfs64@Base 4.9 + __sanitizer_syscall_post_impl_statfs@Base 4.9 + __sanitizer_syscall_post_impl_stime@Base 4.9 + __sanitizer_syscall_post_impl_swapoff@Base 4.9 + __sanitizer_syscall_post_impl_swapon@Base 4.9 + __sanitizer_syscall_post_impl_symlink@Base 4.9 + __sanitizer_syscall_post_impl_symlinkat@Base 4.9 + __sanitizer_syscall_post_impl_sync@Base 4.9 + __sanitizer_syscall_post_impl_syncfs@Base 4.9 + __sanitizer_syscall_post_impl_sysctl@Base 4.9 + __sanitizer_syscall_post_impl_sysfs@Base 4.9 + __sanitizer_syscall_post_impl_sysinfo@Base 4.9 + __sanitizer_syscall_post_impl_syslog@Base 4.9 + __sanitizer_syscall_post_impl_tee@Base 4.9 + __sanitizer_syscall_post_impl_tgkill@Base 4.9 + __sanitizer_syscall_post_impl_time@Base 4.9 + __sanitizer_syscall_post_impl_timer_create@Base 4.9 + __sanitizer_syscall_post_impl_timer_delete@Base 4.9 + __sanitizer_syscall_post_impl_timer_getoverrun@Base 4.9 + __sanitizer_syscall_post_impl_timer_gettime@Base 4.9 + __sanitizer_syscall_post_impl_timer_settime@Base 4.9 + __sanitizer_syscall_post_impl_timerfd_create@Base 4.9 + __sanitizer_syscall_post_impl_timerfd_gettime@Base 4.9 + __sanitizer_syscall_post_impl_timerfd_settime@Base 4.9 + __sanitizer_syscall_post_impl_times@Base 4.9 + __sanitizer_syscall_post_impl_tkill@Base 4.9 + __sanitizer_syscall_post_impl_truncate@Base 4.9 + __sanitizer_syscall_post_impl_umask@Base 4.9 + __sanitizer_syscall_post_impl_umount@Base 4.9 + __sanitizer_syscall_post_impl_uname@Base 4.9 + __sanitizer_syscall_post_impl_unlink@Base 4.9 + __sanitizer_syscall_post_impl_unlinkat@Base 4.9 + __sanitizer_syscall_post_impl_unshare@Base 4.9 + __sanitizer_syscall_post_impl_uselib@Base 4.9 + __sanitizer_syscall_post_impl_ustat@Base 4.9 + __sanitizer_syscall_post_impl_utime@Base 4.9 + __sanitizer_syscall_post_impl_utimensat@Base 4.9 + __sanitizer_syscall_post_impl_utimes@Base 4.9 + __sanitizer_syscall_post_impl_vfork@Base 4.9 + __sanitizer_syscall_post_impl_vhangup@Base 4.9 + __sanitizer_syscall_post_impl_vmsplice@Base 4.9 + __sanitizer_syscall_post_impl_wait4@Base 4.9 + __sanitizer_syscall_post_impl_waitid@Base 4.9 + __sanitizer_syscall_post_impl_waitpid@Base 4.9 + __sanitizer_syscall_post_impl_write@Base 4.9 + __sanitizer_syscall_post_impl_writev@Base 4.9 + __sanitizer_syscall_pre_impl_accept4@Base 4.9 + __sanitizer_syscall_pre_impl_accept@Base 4.9 + __sanitizer_syscall_pre_impl_access@Base 4.9 + __sanitizer_syscall_pre_impl_acct@Base 4.9 + __sanitizer_syscall_pre_impl_add_key@Base 4.9 + __sanitizer_syscall_pre_impl_adjtimex@Base 4.9 + __sanitizer_syscall_pre_impl_alarm@Base 4.9 + __sanitizer_syscall_pre_impl_bdflush@Base 4.9 + __sanitizer_syscall_pre_impl_bind@Base 4.9 + __sanitizer_syscall_pre_impl_brk@Base 4.9 + __sanitizer_syscall_pre_impl_capget@Base 4.9 + __sanitizer_syscall_pre_impl_capset@Base 4.9 + __sanitizer_syscall_pre_impl_chdir@Base 4.9 + __sanitizer_syscall_pre_impl_chmod@Base 4.9 + __sanitizer_syscall_pre_impl_chown@Base 4.9 + __sanitizer_syscall_pre_impl_chroot@Base 4.9 + __sanitizer_syscall_pre_impl_clock_adjtime@Base 4.9 + __sanitizer_syscall_pre_impl_clock_getres@Base 4.9 + __sanitizer_syscall_pre_impl_clock_gettime@Base 4.9 + __sanitizer_syscall_pre_impl_clock_nanosleep@Base 4.9 + __sanitizer_syscall_pre_impl_clock_settime@Base 4.9 + __sanitizer_syscall_pre_impl_close@Base 4.9 + __sanitizer_syscall_pre_impl_connect@Base 4.9 + __sanitizer_syscall_pre_impl_creat@Base 4.9 + __sanitizer_syscall_pre_impl_delete_module@Base 4.9 + __sanitizer_syscall_pre_impl_dup2@Base 4.9 + __sanitizer_syscall_pre_impl_dup3@Base 4.9 + __sanitizer_syscall_pre_impl_dup@Base 4.9 + __sanitizer_syscall_pre_impl_epoll_create1@Base 4.9 + __sanitizer_syscall_pre_impl_epoll_create@Base 4.9 + __sanitizer_syscall_pre_impl_epoll_ctl@Base 4.9 + __sanitizer_syscall_pre_impl_epoll_pwait@Base 4.9 + __sanitizer_syscall_pre_impl_epoll_wait@Base 4.9 + __sanitizer_syscall_pre_impl_eventfd2@Base 4.9 + __sanitizer_syscall_pre_impl_eventfd@Base 4.9 + __sanitizer_syscall_pre_impl_exit@Base 4.9 + __sanitizer_syscall_pre_impl_exit_group@Base 4.9 + __sanitizer_syscall_pre_impl_faccessat@Base 4.9 + __sanitizer_syscall_pre_impl_fchdir@Base 4.9 + __sanitizer_syscall_pre_impl_fchmod@Base 4.9 + __sanitizer_syscall_pre_impl_fchmodat@Base 4.9 + __sanitizer_syscall_pre_impl_fchown@Base 4.9 + __sanitizer_syscall_pre_impl_fchownat@Base 4.9 + __sanitizer_syscall_pre_impl_fcntl64@Base 4.9 + __sanitizer_syscall_pre_impl_fcntl@Base 4.9 + __sanitizer_syscall_pre_impl_fdatasync@Base 4.9 + __sanitizer_syscall_pre_impl_fgetxattr@Base 4.9 + __sanitizer_syscall_pre_impl_flistxattr@Base 4.9 + __sanitizer_syscall_pre_impl_flock@Base 4.9 + __sanitizer_syscall_pre_impl_fork@Base 4.9 + __sanitizer_syscall_pre_impl_fremovexattr@Base 4.9 + __sanitizer_syscall_pre_impl_fsetxattr@Base 4.9 + __sanitizer_syscall_pre_impl_fstat64@Base 4.9 + __sanitizer_syscall_pre_impl_fstat@Base 4.9 + __sanitizer_syscall_pre_impl_fstatat64@Base 4.9 + __sanitizer_syscall_pre_impl_fstatfs64@Base 4.9 + __sanitizer_syscall_pre_impl_fstatfs@Base 4.9 + __sanitizer_syscall_pre_impl_fsync@Base 4.9 + __sanitizer_syscall_pre_impl_ftruncate@Base 4.9 + __sanitizer_syscall_pre_impl_futimesat@Base 4.9 + __sanitizer_syscall_pre_impl_get_mempolicy@Base 4.9 + __sanitizer_syscall_pre_impl_get_robust_list@Base 4.9 + __sanitizer_syscall_pre_impl_getcpu@Base 4.9 + __sanitizer_syscall_pre_impl_getcwd@Base 4.9 + __sanitizer_syscall_pre_impl_getdents64@Base 4.9 + __sanitizer_syscall_pre_impl_getdents@Base 4.9 + __sanitizer_syscall_pre_impl_getegid@Base 4.9 + __sanitizer_syscall_pre_impl_geteuid@Base 4.9 + __sanitizer_syscall_pre_impl_getgid@Base 4.9 + __sanitizer_syscall_pre_impl_getgroups@Base 4.9 + __sanitizer_syscall_pre_impl_gethostname@Base 4.9 + __sanitizer_syscall_pre_impl_getitimer@Base 4.9 + __sanitizer_syscall_pre_impl_getpeername@Base 4.9 + __sanitizer_syscall_pre_impl_getpgid@Base 4.9 + __sanitizer_syscall_pre_impl_getpgrp@Base 4.9 + __sanitizer_syscall_pre_impl_getpid@Base 4.9 + __sanitizer_syscall_pre_impl_getppid@Base 4.9 + __sanitizer_syscall_pre_impl_getpriority@Base 4.9 + __sanitizer_syscall_pre_impl_getresgid@Base 4.9 + __sanitizer_syscall_pre_impl_getresuid@Base 4.9 + __sanitizer_syscall_pre_impl_getrlimit@Base 4.9 + __sanitizer_syscall_pre_impl_getrusage@Base 4.9 + __sanitizer_syscall_pre_impl_getsid@Base 4.9 + __sanitizer_syscall_pre_impl_getsockname@Base 4.9 + __sanitizer_syscall_pre_impl_getsockopt@Base 4.9 + __sanitizer_syscall_pre_impl_gettid@Base 4.9 + __sanitizer_syscall_pre_impl_gettimeofday@Base 4.9 + __sanitizer_syscall_pre_impl_getuid@Base 4.9 + __sanitizer_syscall_pre_impl_getxattr@Base 4.9 + __sanitizer_syscall_pre_impl_init_module@Base 4.9 + __sanitizer_syscall_pre_impl_inotify_add_watch@Base 4.9 + __sanitizer_syscall_pre_impl_inotify_init1@Base 4.9 + __sanitizer_syscall_pre_impl_inotify_init@Base 4.9 + __sanitizer_syscall_pre_impl_inotify_rm_watch@Base 4.9 + __sanitizer_syscall_pre_impl_io_cancel@Base 4.9 + __sanitizer_syscall_pre_impl_io_destroy@Base 4.9 + __sanitizer_syscall_pre_impl_io_getevents@Base 4.9 + __sanitizer_syscall_pre_impl_io_setup@Base 4.9 + __sanitizer_syscall_pre_impl_io_submit@Base 4.9 + __sanitizer_syscall_pre_impl_ioctl@Base 4.9 + __sanitizer_syscall_pre_impl_ioperm@Base 4.9 + __sanitizer_syscall_pre_impl_ioprio_get@Base 4.9 + __sanitizer_syscall_pre_impl_ioprio_set@Base 4.9 + __sanitizer_syscall_pre_impl_ipc@Base 4.9 + __sanitizer_syscall_pre_impl_kexec_load@Base 4.9 + __sanitizer_syscall_pre_impl_keyctl@Base 4.9 + __sanitizer_syscall_pre_impl_kill@Base 4.9 + __sanitizer_syscall_pre_impl_lchown@Base 4.9 + __sanitizer_syscall_pre_impl_lgetxattr@Base 4.9 + __sanitizer_syscall_pre_impl_link@Base 4.9 + __sanitizer_syscall_pre_impl_linkat@Base 4.9 + __sanitizer_syscall_pre_impl_listen@Base 4.9 + __sanitizer_syscall_pre_impl_listxattr@Base 4.9 + __sanitizer_syscall_pre_impl_llistxattr@Base 4.9 + __sanitizer_syscall_pre_impl_llseek@Base 4.9 + __sanitizer_syscall_pre_impl_lookup_dcookie@Base 4.9 + __sanitizer_syscall_pre_impl_lremovexattr@Base 4.9 + __sanitizer_syscall_pre_impl_lseek@Base 4.9 + __sanitizer_syscall_pre_impl_lsetxattr@Base 4.9 + __sanitizer_syscall_pre_impl_lstat64@Base 4.9 + __sanitizer_syscall_pre_impl_lstat@Base 4.9 + __sanitizer_syscall_pre_impl_madvise@Base 4.9 + __sanitizer_syscall_pre_impl_mbind@Base 4.9 + __sanitizer_syscall_pre_impl_migrate_pages@Base 4.9 + __sanitizer_syscall_pre_impl_mincore@Base 4.9 + __sanitizer_syscall_pre_impl_mkdir@Base 4.9 + __sanitizer_syscall_pre_impl_mkdirat@Base 4.9 + __sanitizer_syscall_pre_impl_mknod@Base 4.9 + __sanitizer_syscall_pre_impl_mknodat@Base 4.9 + __sanitizer_syscall_pre_impl_mlock@Base 4.9 + __sanitizer_syscall_pre_impl_mlockall@Base 4.9 + __sanitizer_syscall_pre_impl_mmap_pgoff@Base 4.9 + __sanitizer_syscall_pre_impl_mount@Base 4.9 + __sanitizer_syscall_pre_impl_move_pages@Base 4.9 + __sanitizer_syscall_pre_impl_mprotect@Base 4.9 + __sanitizer_syscall_pre_impl_mq_getsetattr@Base 4.9 + __sanitizer_syscall_pre_impl_mq_notify@Base 4.9 + __sanitizer_syscall_pre_impl_mq_open@Base 4.9 + __sanitizer_syscall_pre_impl_mq_timedreceive@Base 4.9 + __sanitizer_syscall_pre_impl_mq_timedsend@Base 4.9 + __sanitizer_syscall_pre_impl_mq_unlink@Base 4.9 + __sanitizer_syscall_pre_impl_mremap@Base 4.9 + __sanitizer_syscall_pre_impl_msgctl@Base 4.9 + __sanitizer_syscall_pre_impl_msgget@Base 4.9 + __sanitizer_syscall_pre_impl_msgrcv@Base 4.9 + __sanitizer_syscall_pre_impl_msgsnd@Base 4.9 + __sanitizer_syscall_pre_impl_msync@Base 4.9 + __sanitizer_syscall_pre_impl_munlock@Base 4.9 + __sanitizer_syscall_pre_impl_munlockall@Base 4.9 + __sanitizer_syscall_pre_impl_munmap@Base 4.9 + __sanitizer_syscall_pre_impl_name_to_handle_at@Base 4.9 + __sanitizer_syscall_pre_impl_nanosleep@Base 4.9 + __sanitizer_syscall_pre_impl_newfstat@Base 4.9 + __sanitizer_syscall_pre_impl_newfstatat@Base 4.9 + __sanitizer_syscall_pre_impl_newlstat@Base 4.9 + __sanitizer_syscall_pre_impl_newstat@Base 4.9 + __sanitizer_syscall_pre_impl_newuname@Base 4.9 + __sanitizer_syscall_pre_impl_ni_syscall@Base 4.9 + __sanitizer_syscall_pre_impl_nice@Base 4.9 + __sanitizer_syscall_pre_impl_old_getrlimit@Base 4.9 + __sanitizer_syscall_pre_impl_old_mmap@Base 4.9 + __sanitizer_syscall_pre_impl_old_readdir@Base 4.9 + __sanitizer_syscall_pre_impl_old_select@Base 4.9 + __sanitizer_syscall_pre_impl_oldumount@Base 4.9 + __sanitizer_syscall_pre_impl_olduname@Base 4.9 + __sanitizer_syscall_pre_impl_open@Base 4.9 + __sanitizer_syscall_pre_impl_open_by_handle_at@Base 4.9 + __sanitizer_syscall_pre_impl_openat@Base 4.9 + __sanitizer_syscall_pre_impl_pause@Base 4.9 + __sanitizer_syscall_pre_impl_pciconfig_iobase@Base 4.9 + __sanitizer_syscall_pre_impl_pciconfig_read@Base 4.9 + __sanitizer_syscall_pre_impl_pciconfig_write@Base 4.9 + __sanitizer_syscall_pre_impl_perf_event_open@Base 4.9 + __sanitizer_syscall_pre_impl_personality@Base 4.9 + __sanitizer_syscall_pre_impl_pipe2@Base 4.9 + __sanitizer_syscall_pre_impl_pipe@Base 4.9 + __sanitizer_syscall_pre_impl_pivot_root@Base 4.9 + __sanitizer_syscall_pre_impl_poll@Base 4.9 + __sanitizer_syscall_pre_impl_ppoll@Base 4.9 + __sanitizer_syscall_pre_impl_pread64@Base 4.9 + __sanitizer_syscall_pre_impl_preadv@Base 4.9 + __sanitizer_syscall_pre_impl_prlimit64@Base 4.9 + __sanitizer_syscall_pre_impl_process_vm_readv@Base 4.9 + __sanitizer_syscall_pre_impl_process_vm_writev@Base 4.9 + __sanitizer_syscall_pre_impl_pselect6@Base 4.9 + __sanitizer_syscall_pre_impl_ptrace@Base 4.9 + __sanitizer_syscall_pre_impl_pwrite64@Base 4.9 + __sanitizer_syscall_pre_impl_pwritev@Base 4.9 + __sanitizer_syscall_pre_impl_quotactl@Base 4.9 + __sanitizer_syscall_pre_impl_read@Base 4.9 + __sanitizer_syscall_pre_impl_readlink@Base 4.9 + __sanitizer_syscall_pre_impl_readlinkat@Base 4.9 + __sanitizer_syscall_pre_impl_readv@Base 4.9 + __sanitizer_syscall_pre_impl_reboot@Base 4.9 + __sanitizer_syscall_pre_impl_recv@Base 4.9 + __sanitizer_syscall_pre_impl_recvfrom@Base 4.9 + __sanitizer_syscall_pre_impl_recvmmsg@Base 4.9 + __sanitizer_syscall_pre_impl_recvmsg@Base 4.9 + __sanitizer_syscall_pre_impl_remap_file_pages@Base 4.9 + __sanitizer_syscall_pre_impl_removexattr@Base 4.9 + __sanitizer_syscall_pre_impl_rename@Base 4.9 + __sanitizer_syscall_pre_impl_renameat@Base 4.9 + __sanitizer_syscall_pre_impl_request_key@Base 4.9 + __sanitizer_syscall_pre_impl_restart_syscall@Base 4.9 + __sanitizer_syscall_pre_impl_rmdir@Base 4.9 + __sanitizer_syscall_pre_impl_rt_sigaction@Base 7 + __sanitizer_syscall_pre_impl_rt_sigpending@Base 4.9 + __sanitizer_syscall_pre_impl_rt_sigprocmask@Base 4.9 + __sanitizer_syscall_pre_impl_rt_sigqueueinfo@Base 4.9 + __sanitizer_syscall_pre_impl_rt_sigtimedwait@Base 4.9 + __sanitizer_syscall_pre_impl_rt_tgsigqueueinfo@Base 4.9 + __sanitizer_syscall_pre_impl_sched_get_priority_max@Base 4.9 + __sanitizer_syscall_pre_impl_sched_get_priority_min@Base 4.9 + __sanitizer_syscall_pre_impl_sched_getaffinity@Base 4.9 + __sanitizer_syscall_pre_impl_sched_getparam@Base 4.9 + __sanitizer_syscall_pre_impl_sched_getscheduler@Base 4.9 + __sanitizer_syscall_pre_impl_sched_rr_get_interval@Base 4.9 + __sanitizer_syscall_pre_impl_sched_setaffinity@Base 4.9 + __sanitizer_syscall_pre_impl_sched_setparam@Base 4.9 + __sanitizer_syscall_pre_impl_sched_setscheduler@Base 4.9 + __sanitizer_syscall_pre_impl_sched_yield@Base 4.9 + __sanitizer_syscall_pre_impl_select@Base 4.9 + __sanitizer_syscall_pre_impl_semctl@Base 4.9 + __sanitizer_syscall_pre_impl_semget@Base 4.9 + __sanitizer_syscall_pre_impl_semop@Base 4.9 + __sanitizer_syscall_pre_impl_semtimedop@Base 4.9 + __sanitizer_syscall_pre_impl_send@Base 4.9 + __sanitizer_syscall_pre_impl_sendfile64@Base 4.9 + __sanitizer_syscall_pre_impl_sendfile@Base 4.9 + __sanitizer_syscall_pre_impl_sendmmsg@Base 4.9 + __sanitizer_syscall_pre_impl_sendmsg@Base 4.9 + __sanitizer_syscall_pre_impl_sendto@Base 4.9 + __sanitizer_syscall_pre_impl_set_mempolicy@Base 4.9 + __sanitizer_syscall_pre_impl_set_robust_list@Base 4.9 + __sanitizer_syscall_pre_impl_set_tid_address@Base 4.9 + __sanitizer_syscall_pre_impl_setdomainname@Base 4.9 + __sanitizer_syscall_pre_impl_setfsgid@Base 4.9 + __sanitizer_syscall_pre_impl_setfsuid@Base 4.9 + __sanitizer_syscall_pre_impl_setgid@Base 4.9 + __sanitizer_syscall_pre_impl_setgroups@Base 4.9 + __sanitizer_syscall_pre_impl_sethostname@Base 4.9 + __sanitizer_syscall_pre_impl_setitimer@Base 4.9 + __sanitizer_syscall_pre_impl_setns@Base 4.9 + __sanitizer_syscall_pre_impl_setpgid@Base 4.9 + __sanitizer_syscall_pre_impl_setpriority@Base 4.9 + __sanitizer_syscall_pre_impl_setregid@Base 4.9 + __sanitizer_syscall_pre_impl_setresgid@Base 4.9 + __sanitizer_syscall_pre_impl_setresuid@Base 4.9 + __sanitizer_syscall_pre_impl_setreuid@Base 4.9 + __sanitizer_syscall_pre_impl_setrlimit@Base 4.9 + __sanitizer_syscall_pre_impl_setsid@Base 4.9 + __sanitizer_syscall_pre_impl_setsockopt@Base 4.9 + __sanitizer_syscall_pre_impl_settimeofday@Base 4.9 + __sanitizer_syscall_pre_impl_setuid@Base 4.9 + __sanitizer_syscall_pre_impl_setxattr@Base 4.9 + __sanitizer_syscall_pre_impl_sgetmask@Base 4.9 + __sanitizer_syscall_pre_impl_shmat@Base 4.9 + __sanitizer_syscall_pre_impl_shmctl@Base 4.9 + __sanitizer_syscall_pre_impl_shmdt@Base 4.9 + __sanitizer_syscall_pre_impl_shmget@Base 4.9 + __sanitizer_syscall_pre_impl_shutdown@Base 4.9 + __sanitizer_syscall_pre_impl_sigaction@Base 7 + __sanitizer_syscall_pre_impl_signal@Base 4.9 + __sanitizer_syscall_pre_impl_signalfd4@Base 4.9 + __sanitizer_syscall_pre_impl_signalfd@Base 4.9 + __sanitizer_syscall_pre_impl_sigpending@Base 4.9 + __sanitizer_syscall_pre_impl_sigprocmask@Base 4.9 + __sanitizer_syscall_pre_impl_socket@Base 4.9 + __sanitizer_syscall_pre_impl_socketcall@Base 4.9 + __sanitizer_syscall_pre_impl_socketpair@Base 4.9 + __sanitizer_syscall_pre_impl_splice@Base 4.9 + __sanitizer_syscall_pre_impl_spu_create@Base 4.9 + __sanitizer_syscall_pre_impl_spu_run@Base 4.9 + __sanitizer_syscall_pre_impl_ssetmask@Base 4.9 + __sanitizer_syscall_pre_impl_stat64@Base 4.9 + __sanitizer_syscall_pre_impl_stat@Base 4.9 + __sanitizer_syscall_pre_impl_statfs64@Base 4.9 + __sanitizer_syscall_pre_impl_statfs@Base 4.9 + __sanitizer_syscall_pre_impl_stime@Base 4.9 + __sanitizer_syscall_pre_impl_swapoff@Base 4.9 + __sanitizer_syscall_pre_impl_swapon@Base 4.9 + __sanitizer_syscall_pre_impl_symlink@Base 4.9 + __sanitizer_syscall_pre_impl_symlinkat@Base 4.9 + __sanitizer_syscall_pre_impl_sync@Base 4.9 + __sanitizer_syscall_pre_impl_syncfs@Base 4.9 + __sanitizer_syscall_pre_impl_sysctl@Base 4.9 + __sanitizer_syscall_pre_impl_sysfs@Base 4.9 + __sanitizer_syscall_pre_impl_sysinfo@Base 4.9 + __sanitizer_syscall_pre_impl_syslog@Base 4.9 + __sanitizer_syscall_pre_impl_tee@Base 4.9 + __sanitizer_syscall_pre_impl_tgkill@Base 4.9 + __sanitizer_syscall_pre_impl_time@Base 4.9 + __sanitizer_syscall_pre_impl_timer_create@Base 4.9 + __sanitizer_syscall_pre_impl_timer_delete@Base 4.9 + __sanitizer_syscall_pre_impl_timer_getoverrun@Base 4.9 + __sanitizer_syscall_pre_impl_timer_gettime@Base 4.9 + __sanitizer_syscall_pre_impl_timer_settime@Base 4.9 + __sanitizer_syscall_pre_impl_timerfd_create@Base 4.9 + __sanitizer_syscall_pre_impl_timerfd_gettime@Base 4.9 + __sanitizer_syscall_pre_impl_timerfd_settime@Base 4.9 + __sanitizer_syscall_pre_impl_times@Base 4.9 + __sanitizer_syscall_pre_impl_tkill@Base 4.9 + __sanitizer_syscall_pre_impl_truncate@Base 4.9 + __sanitizer_syscall_pre_impl_umask@Base 4.9 + __sanitizer_syscall_pre_impl_umount@Base 4.9 + __sanitizer_syscall_pre_impl_uname@Base 4.9 + __sanitizer_syscall_pre_impl_unlink@Base 4.9 + __sanitizer_syscall_pre_impl_unlinkat@Base 4.9 + __sanitizer_syscall_pre_impl_unshare@Base 4.9 + __sanitizer_syscall_pre_impl_uselib@Base 4.9 + __sanitizer_syscall_pre_impl_ustat@Base 4.9 + __sanitizer_syscall_pre_impl_utime@Base 4.9 + __sanitizer_syscall_pre_impl_utimensat@Base 4.9 + __sanitizer_syscall_pre_impl_utimes@Base 4.9 + __sanitizer_syscall_pre_impl_vfork@Base 4.9 + __sanitizer_syscall_pre_impl_vhangup@Base 4.9 + __sanitizer_syscall_pre_impl_vmsplice@Base 4.9 + __sanitizer_syscall_pre_impl_wait4@Base 4.9 + __sanitizer_syscall_pre_impl_waitid@Base 4.9 + __sanitizer_syscall_pre_impl_waitpid@Base 4.9 + __sanitizer_syscall_pre_impl_write@Base 4.9 + __sanitizer_syscall_pre_impl_writev@Base 4.9 + __sanitizer_unaligned_load16@Base 4.9 + __sanitizer_unaligned_load32@Base 4.9 + __sanitizer_unaligned_load64@Base 4.9 + __sanitizer_unaligned_store16@Base 4.9 + __sanitizer_unaligned_store32@Base 4.9 + __sanitizer_unaligned_store64@Base 4.9 + __sanitizer_update_counter_bitset_and_clear_counters@Base 6 + __sigsetjmp@Base 4.9 + __tls_get_addr@Base 6 + __tsan_acquire@Base 4.9 + __tsan_atomic128_compare_exchange_strong@Base 4.9 + __tsan_atomic128_compare_exchange_val@Base 4.9 + __tsan_atomic128_compare_exchange_weak@Base 4.9 + __tsan_atomic128_exchange@Base 4.9 + __tsan_atomic128_fetch_add@Base 4.9 + __tsan_atomic128_fetch_and@Base 4.9 + __tsan_atomic128_fetch_nand@Base 4.9 + __tsan_atomic128_fetch_or@Base 4.9 + __tsan_atomic128_fetch_sub@Base 4.9 + __tsan_atomic128_fetch_xor@Base 4.9 + __tsan_atomic128_load@Base 4.9 + __tsan_atomic128_store@Base 4.9 + __tsan_atomic16_compare_exchange_strong@Base 4.9 + __tsan_atomic16_compare_exchange_val@Base 4.9 + __tsan_atomic16_compare_exchange_weak@Base 4.9 + __tsan_atomic16_exchange@Base 4.9 + __tsan_atomic16_fetch_add@Base 4.9 + __tsan_atomic16_fetch_and@Base 4.9 + __tsan_atomic16_fetch_nand@Base 4.9 + __tsan_atomic16_fetch_or@Base 4.9 + __tsan_atomic16_fetch_sub@Base 4.9 + __tsan_atomic16_fetch_xor@Base 4.9 + __tsan_atomic16_load@Base 4.9 + __tsan_atomic16_store@Base 4.9 + __tsan_atomic32_compare_exchange_strong@Base 4.9 + __tsan_atomic32_compare_exchange_val@Base 4.9 + __tsan_atomic32_compare_exchange_weak@Base 4.9 + __tsan_atomic32_exchange@Base 4.9 + __tsan_atomic32_fetch_add@Base 4.9 + __tsan_atomic32_fetch_and@Base 4.9 + __tsan_atomic32_fetch_nand@Base 4.9 + __tsan_atomic32_fetch_or@Base 4.9 + __tsan_atomic32_fetch_sub@Base 4.9 + __tsan_atomic32_fetch_xor@Base 4.9 + __tsan_atomic32_load@Base 4.9 + __tsan_atomic32_store@Base 4.9 + __tsan_atomic64_compare_exchange_strong@Base 4.9 + __tsan_atomic64_compare_exchange_val@Base 4.9 + __tsan_atomic64_compare_exchange_weak@Base 4.9 + __tsan_atomic64_exchange@Base 4.9 + __tsan_atomic64_fetch_add@Base 4.9 + __tsan_atomic64_fetch_and@Base 4.9 + __tsan_atomic64_fetch_nand@Base 4.9 + __tsan_atomic64_fetch_or@Base 4.9 + __tsan_atomic64_fetch_sub@Base 4.9 + __tsan_atomic64_fetch_xor@Base 4.9 + __tsan_atomic64_load@Base 4.9 + __tsan_atomic64_store@Base 4.9 + __tsan_atomic8_compare_exchange_strong@Base 4.9 + __tsan_atomic8_compare_exchange_val@Base 4.9 + __tsan_atomic8_compare_exchange_weak@Base 4.9 + __tsan_atomic8_exchange@Base 4.9 + __tsan_atomic8_fetch_add@Base 4.9 + __tsan_atomic8_fetch_and@Base 4.9 + __tsan_atomic8_fetch_nand@Base 4.9 + __tsan_atomic8_fetch_or@Base 4.9 + __tsan_atomic8_fetch_sub@Base 4.9 + __tsan_atomic8_fetch_xor@Base 4.9 + __tsan_atomic8_load@Base 4.9 + __tsan_atomic8_store@Base 4.9 + __tsan_atomic_signal_fence@Base 4.9 + __tsan_atomic_thread_fence@Base 4.9 + __tsan_default_options@Base 4.9 + __tsan_default_suppressions@Base 7 + __tsan_func_entry@Base 4.9 + __tsan_func_exit@Base 4.9 + __tsan_get_current_report@Base 7 + __tsan_get_report_data@Base 7 + __tsan_get_report_loc@Base 7 + __tsan_get_report_mop@Base 7 + __tsan_get_report_mutex@Base 7 + __tsan_get_report_stack@Base 7 + __tsan_get_report_thread@Base 7 + __tsan_get_report_unique_tid@Base 7 + __tsan_init@Base 4.9 + __tsan_java_acquire@Base 6 + __tsan_java_alloc@Base 4.9 + __tsan_java_finalize@Base 5 + __tsan_java_fini@Base 4.9 + __tsan_java_free@Base 4.9 + __tsan_java_init@Base 4.9 + __tsan_java_move@Base 4.9 + __tsan_java_mutex_lock@Base 4.9 + __tsan_java_mutex_lock_rec@Base 4.9 + __tsan_java_mutex_read_lock@Base 4.9 + __tsan_java_mutex_read_unlock@Base 4.9 + __tsan_java_mutex_unlock@Base 4.9 + __tsan_java_mutex_unlock_rec@Base 4.9 + __tsan_java_release@Base 6 + __tsan_java_release_store@Base 6 + __tsan_on_report@Base 7 + __tsan_read16@Base 4.9 + __tsan_read16_pc@Base 6 + __tsan_read1@Base 4.9 + __tsan_read1_pc@Base 6 + __tsan_read2@Base 4.9 + __tsan_read2_pc@Base 6 + __tsan_read4@Base 4.9 + __tsan_read4_pc@Base 6 + __tsan_read8@Base 4.9 + __tsan_read8_pc@Base 6 + __tsan_read_range@Base 4.9 + __tsan_release@Base 4.9 + __tsan_symbolize_external@Base 7 + __tsan_testonly_barrier_init@Base 7 + __tsan_testonly_barrier_wait@Base 7 + __tsan_unaligned_read16@Base 6 + __tsan_unaligned_read2@Base 4.9 + __tsan_unaligned_read4@Base 4.9 + __tsan_unaligned_read8@Base 4.9 + __tsan_unaligned_write16@Base 6 + __tsan_unaligned_write2@Base 4.9 + __tsan_unaligned_write4@Base 4.9 + __tsan_unaligned_write8@Base 4.9 + __tsan_vptr_read@Base 4.9 + __tsan_vptr_update@Base 4.9 + __tsan_write16@Base 4.9 + __tsan_write16_pc@Base 6 + __tsan_write1@Base 4.9 + __tsan_write1_pc@Base 6 + __tsan_write2@Base 4.9 + __tsan_write2_pc@Base 6 + __tsan_write4@Base 4.9 + __tsan_write4_pc@Base 6 + __tsan_write8@Base 4.9 + __tsan_write8_pc@Base 6 + __tsan_write_range@Base 4.9 + __uflow@Base 5 + __underflow@Base 5 + __woverflow@Base 5 + __wuflow@Base 5 + __wunderflow@Base 5 + __xpg_strerror_r@Base 4.9 + __xstat64@Base 4.9 + __xstat@Base 4.9 + _exit@Base 4.9 + _obstack_begin@Base 5 + _obstack_begin_1@Base 5 + _obstack_newchunk@Base 5 + _setjmp@Base 4.9 + abort@Base 4.9 + accept4@Base 4.9 + accept@Base 4.9 + aligned_alloc@Base 5 + asctime@Base 4.9 + asctime_r@Base 4.9 + asprintf@Base 5 + atexit@Base 4.9 + backtrace@Base 4.9 + backtrace_symbols@Base 4.9 + bind@Base 4.9 + calloc@Base 4.9 + canonicalize_file_name@Base 4.9 + capget@Base 5 + capset@Base 5 + cfree@Base 4.9 + clock_getres@Base 4.9 + clock_gettime@Base 4.9 + clock_settime@Base 4.9 + close@Base 4.9 + closedir@Base 6 + confstr@Base 4.9 + connect@Base 4.9 + creat64@Base 4.9 + creat@Base 4.9 + ctermid@Base 7 + ctime@Base 4.9 + ctime_r@Base 4.9 + dl_iterate_phdr@Base 6 + dlclose@Base 4.9 + dlopen@Base 4.9 + drand48_r@Base 4.9 + dup2@Base 4.9 + dup3@Base 4.9 + dup@Base 4.9 + endgrent@Base 5 + endpwent@Base 5 + epoll_create1@Base 4.9 + epoll_create@Base 4.9 + epoll_ctl@Base 4.9 + epoll_pwait@Base 7 + epoll_wait@Base 4.9 + ether_aton@Base 4.9 + ether_aton_r@Base 4.9 + ether_hostton@Base 4.9 + ether_line@Base 4.9 + ether_ntoa@Base 4.9 + ether_ntoa_r@Base 4.9 + ether_ntohost@Base 4.9 + eventfd@Base 4.9 + eventfd_read@Base 7 + eventfd_write@Base 7 + fclose@Base 4.9 + fdopen@Base 5 + fflush@Base 4.9 + fgetxattr@Base 5 + flistxattr@Base 5 + fmemopen@Base 5 + fopen64@Base 5 + fopen@Base 4.9 + fopencookie@Base 6 + fork@Base 4.9 + fprintf@Base 5 + fread@Base 4.9 + free@Base 4.9 + freopen64@Base 5 + freopen@Base 4.9 + frexp@Base 4.9 + frexpf@Base 4.9 + frexpl@Base 4.9 + fscanf@Base 4.9 + fstat64@Base 4.9 + fstat@Base 4.9 + fstatfs64@Base 4.9 + fstatfs@Base 4.9 + fstatvfs64@Base 4.9 + fstatvfs@Base 4.9 + ftime@Base 5 + fwrite@Base 4.9 + get_current_dir_name@Base 4.9 + getaddrinfo@Base 4.9 + getcwd@Base 4.9 + getdelim@Base 4.9 + getgroups@Base 4.9 + gethostbyaddr@Base 4.9 + gethostbyaddr_r@Base 4.9 + gethostbyname2@Base 4.9 + gethostbyname2_r@Base 4.9 + gethostbyname@Base 4.9 + gethostbyname_r@Base 4.9 + gethostent@Base 4.9 + gethostent_r@Base 4.9 + getifaddrs@Base 5 + getitimer@Base 4.9 + getline@Base 4.9 + getmntent@Base 4.9 + getmntent_r@Base 4.9 + getnameinfo@Base 5 + getpass@Base 5 + getpeername@Base 4.9 + getresgid@Base 5 + getresuid@Base 5 + getsockname@Base 4.9 + getsockopt@Base 4.9 + gettimeofday@Base 4.9 + getxattr@Base 5 + glob64@Base 5 + glob@Base 5 + gmtime@Base 4.9 + gmtime_r@Base 4.9 + iconv@Base 4.9 + if_indextoname@Base 5 + if_nametoindex@Base 5 + inet_aton@Base 4.9 + inet_ntop@Base 4.9 + inet_pton@Base 4.9 + initgroups@Base 4.9 + inotify_init1@Base 4.9 + inotify_init@Base 4.9 + (arch=base-any-any-amd64 any-mips any-mipsel)internal_sigreturn@Base 7 + ioctl@Base 4.9 + kill@Base 4.9 + lgamma@Base 4.9 + lgamma_r@Base 4.9 + lgammaf@Base 4.9 + lgammaf_r@Base 4.9 + lgammal@Base 4.9 + lgammal_r@Base 4.9 + lgetxattr@Base 5 + listen@Base 4.9 + listxattr@Base 5 + llistxattr@Base 5 + localtime@Base 4.9 + localtime_r@Base 4.9 + longjmp@Base 4.9 + lrand48_r@Base 4.9 + malloc@Base 4.9 + malloc_usable_size@Base 4.9 + mbsnrtowcs@Base 4.9 + mbsrtowcs@Base 4.9 + mbstowcs@Base 4.9 + memalign@Base 4.9 + memchr@Base 4.9 + memcmp@Base 4.9 + memcpy@Base 4.9 + memmem@Base 7 + memmove@Base 4.9 + memrchr@Base 4.9 + memset@Base 4.9 + mincore@Base 6 + mktime@Base 5 + mlock@Base 4.9 + mlockall@Base 4.9 + mmap64@Base 4.9 + mmap@Base 4.9 + modf@Base 4.9 + modff@Base 4.9 + modfl@Base 4.9 + munlock@Base 4.9 + munlockall@Base 4.9 + munmap@Base 4.9 + nanosleep@Base 4.9 + on_exit@Base 4.9 + open64@Base 4.9 + open@Base 4.9 + open_memstream@Base 5 + open_wmemstream@Base 5 + opendir@Base 4.9 + pipe2@Base 4.9 + pipe@Base 4.9 + poll@Base 4.9 + posix_memalign@Base 4.9 + ppoll@Base 4.9 + prctl@Base 4.9 + pread64@Base 4.9 + pread@Base 4.9 + preadv64@Base 4.9 + preadv@Base 4.9 + printf@Base 5 + process_vm_readv@Base 6 + process_vm_writev@Base 6 + pthread_attr_getaffinity_np@Base 4.9 + pthread_attr_getdetachstate@Base 4.9 + pthread_attr_getguardsize@Base 4.9 + pthread_attr_getinheritsched@Base 4.9 + pthread_attr_getschedparam@Base 4.9 + pthread_attr_getschedpolicy@Base 4.9 + pthread_attr_getscope@Base 4.9 + pthread_attr_getstack@Base 4.9 + pthread_attr_getstacksize@Base 4.9 + pthread_barrier_destroy@Base 4.9 + pthread_barrier_init@Base 4.9 + pthread_barrier_wait@Base 4.9 + pthread_barrierattr_getpshared@Base 5 + pthread_cond_broadcast@Base 4.9 + pthread_cond_destroy@Base 4.9 + pthread_cond_init@Base 4.9 + pthread_cond_signal@Base 4.9 + pthread_cond_timedwait@Base 4.9 + pthread_cond_wait@Base 4.9 + pthread_condattr_getclock@Base 5 + pthread_condattr_getpshared@Base 5 + pthread_create@Base 4.9 + pthread_detach@Base 4.9 + pthread_getschedparam@Base 4.9 + pthread_join@Base 4.9 + pthread_kill@Base 4.9 + pthread_mutex_destroy@Base 4.9 + pthread_mutex_init@Base 4.9 + pthread_mutex_lock@Base 4.9 + pthread_mutex_timedlock@Base 4.9 + pthread_mutex_trylock@Base 4.9 + pthread_mutex_unlock@Base 4.9 + pthread_mutexattr_getprioceiling@Base 5 + pthread_mutexattr_getprotocol@Base 5 + pthread_mutexattr_getpshared@Base 5 + pthread_mutexattr_getrobust@Base 5 + pthread_mutexattr_getrobust_np@Base 5 + pthread_mutexattr_gettype@Base 5 + pthread_once@Base 4.9 + pthread_rwlock_destroy@Base 4.9 + pthread_rwlock_init@Base 4.9 + pthread_rwlock_rdlock@Base 4.9 + pthread_rwlock_timedrdlock@Base 4.9 + pthread_rwlock_timedwrlock@Base 4.9 + pthread_rwlock_tryrdlock@Base 4.9 + pthread_rwlock_trywrlock@Base 4.9 + pthread_rwlock_unlock@Base 4.9 + pthread_rwlock_wrlock@Base 4.9 + pthread_rwlockattr_getkind_np@Base 5 + pthread_rwlockattr_getpshared@Base 5 + pthread_setcancelstate@Base 6 + pthread_setcanceltype@Base 6 + pthread_setname_np@Base 4.9 + pthread_sigmask@Base 7 + pthread_spin_destroy@Base 4.9 + pthread_spin_init@Base 4.9 + pthread_spin_lock@Base 4.9 + pthread_spin_trylock@Base 4.9 + pthread_spin_unlock@Base 4.9 + ptrace@Base 4.9 + puts@Base 4.9 + pvalloc@Base 4.9 + pwrite64@Base 4.9 + pwrite@Base 4.9 + pwritev64@Base 4.9 + pwritev@Base 4.9 + raise@Base 4.9 + rand_r@Base 5 + random_r@Base 4.9 + read@Base 4.9 + readdir64@Base 4.9 + readdir64_r@Base 4.9 + readdir@Base 4.9 + readdir_r@Base 4.9 + readv@Base 4.9 + realloc@Base 4.9 + realpath@Base 4.9 + recv@Base 4.9 + recvfrom@Base 7 + recvmsg@Base 4.9 + remquo@Base 4.9 + remquof@Base 4.9 + remquol@Base 4.9 + rmdir@Base 4.9 + scandir64@Base 4.9 + scandir@Base 4.9 + scanf@Base 4.9 + sched_getaffinity@Base 4.9 + sched_getparam@Base 6 + sem_destroy@Base 4.9 + sem_getvalue@Base 4.9 + sem_init@Base 4.9 + sem_post@Base 4.9 + sem_timedwait@Base 4.9 + sem_trywait@Base 4.9 + sem_wait@Base 4.9 + send@Base 4.9 + sendmsg@Base 4.9 + sendto@Base 7 + setgrent@Base 5 + setitimer@Base 4.9 + (arch=!arm64)setjmp@Base 4.9 + setlocale@Base 4.9 + setpwent@Base 5 + shmctl@Base 4.9 + sigaction@Base 4.9 + sigblock@Base 7 + sigemptyset@Base 4.9 + sigfillset@Base 4.9 + siglongjmp@Base 4.9 + signal@Base 4.9 + signalfd@Base 4.9 + sigpending@Base 4.9 + sigprocmask@Base 4.9 + sigsetjmp@Base 4.9 + sigsetmask@Base 7 + sigsuspend@Base 4.9 + sigtimedwait@Base 4.9 + sigwait@Base 4.9 + sigwaitinfo@Base 4.9 + sincos@Base 4.9 + sincosf@Base 4.9 + sincosl@Base 4.9 + sleep@Base 4.9 + snprintf@Base 5 + socket@Base 4.9 + socketpair@Base 4.9 + sprintf@Base 5 + sscanf@Base 4.9 + statfs64@Base 4.9 + statfs@Base 4.9 + statvfs64@Base 4.9 + statvfs@Base 4.9 + strcasecmp@Base 4.9 + strcasestr@Base 6 + strchr@Base 4.9 + strchrnul@Base 4.9 + strcmp@Base 4.9 + strcpy@Base 4.9 + strcspn@Base 6 + strdup@Base 4.9 + strerror@Base 4.9 + strerror_r@Base 4.9 + strlen@Base 4.9 + strncasecmp@Base 4.9 + strncmp@Base 4.9 + strncpy@Base 4.9 + strnlen@Base 7 + strpbrk@Base 6 + strptime@Base 4.9 + strrchr@Base 4.9 + strspn@Base 6 + strstr@Base 4.9 + strtoimax@Base 4.9 + strtoumax@Base 4.9 + sysinfo@Base 4.9 + tcgetattr@Base 4.9 + tempnam@Base 4.9 + textdomain@Base 4.9 + time@Base 4.9 + timerfd_gettime@Base 5 + timerfd_settime@Base 5 + times@Base 4.9 + tmpfile64@Base 5 + tmpfile@Base 5 + tmpnam@Base 4.9 + tmpnam_r@Base 4.9 + tsearch@Base 5 + ttyname_r@Base 7 + unlink@Base 4.9 + usleep@Base 4.9 + valloc@Base 4.9 + vasprintf@Base 5 + vfork@Base 5 + vfprintf@Base 5 + vfscanf@Base 4.9 + vprintf@Base 5 + vscanf@Base 4.9 + vsnprintf@Base 5 + vsprintf@Base 5 + vsscanf@Base 4.9 + wait3@Base 4.9 + wait4@Base 4.9 + wait@Base 4.9 + waitid@Base 4.9 + waitpid@Base 4.9 + wcrtomb@Base 6 + wcsnrtombs@Base 4.9 + wcsrtombs@Base 4.9 + wcstombs@Base 4.9 + wordexp@Base 4.9 + write@Base 4.9 + writev@Base 4.9 + xdr_bool@Base 5 + xdr_bytes@Base 5 + xdr_char@Base 5 + xdr_double@Base 5 + xdr_enum@Base 5 + xdr_float@Base 5 + xdr_hyper@Base 5 + xdr_int16_t@Base 5 + xdr_int32_t@Base 5 + xdr_int64_t@Base 5 + xdr_int8_t@Base 5 + xdr_int@Base 5 + xdr_long@Base 5 + xdr_longlong_t@Base 5 + xdr_quad_t@Base 5 + xdr_short@Base 5 + xdr_string@Base 5 + xdr_u_char@Base 5 + xdr_u_hyper@Base 5 + xdr_u_int@Base 5 + xdr_u_long@Base 5 + xdr_u_longlong_t@Base 5 + xdr_u_quad_t@Base 5 + xdr_u_short@Base 5 + xdr_uint16_t@Base 5 + xdr_uint32_t@Base 5 + xdr_uint64_t@Base 5 + xdr_uint8_t@Base 5 + xdrmem_create@Base 5 + xdrstdio_create@Base 5 --- gcc-7-7.2.0.orig/debian/libubsan0.symbols +++ gcc-7-7.2.0/debian/libubsan0.symbols @@ -0,0 +1,117 @@ +libubsan.so.0 libubsan0 #MINVER# + _ZN11__sanitizer11CheckFailedEPKciS1_yy@Base 4.9 + _ZN11__sanitizer7OnPrintEPKc@Base 4.9 + __asan_backtrace_alloc@Base 4.9 + __asan_backtrace_close@Base 4.9 + __asan_backtrace_create_state@Base 4.9 + __asan_backtrace_dwarf_add@Base 4.9 + __asan_backtrace_free@Base 4.9 + __asan_backtrace_get_view@Base 4.9 + __asan_backtrace_initialize@Base 4.9 + __asan_backtrace_open@Base 4.9 + __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 + __asan_backtrace_release_view@Base 4.9 + __asan_backtrace_syminfo@Base 4.9 + __asan_backtrace_vector_finish@Base 4.9 + __asan_backtrace_vector_grow@Base 4.9 + __asan_backtrace_vector_release@Base 4.9 + __asan_cplus_demangle_builtin_types@Base 4.9 + __asan_cplus_demangle_fill_ctor@Base 4.9 + __asan_cplus_demangle_fill_dtor@Base 4.9 + __asan_cplus_demangle_fill_extended_operator@Base 4.9 + __asan_cplus_demangle_fill_name@Base 4.9 + __asan_cplus_demangle_init_info@Base 4.9 + __asan_cplus_demangle_mangled_name@Base 4.9 + __asan_cplus_demangle_operators@Base 4.9 + __asan_cplus_demangle_print@Base 4.9 + __asan_cplus_demangle_print_callback@Base 4.9 + __asan_cplus_demangle_type@Base 4.9 + __asan_cplus_demangle_v3@Base 4.9 + __asan_cplus_demangle_v3_callback@Base 4.9 + __asan_internal_memcmp@Base 4.9 + __asan_internal_memcpy@Base 4.9 + __asan_internal_memset@Base 4.9 + __asan_internal_strcmp@Base 4.9 + __asan_internal_strlen@Base 4.9 + __asan_internal_strncmp@Base 4.9 + __asan_internal_strnlen@Base 4.9 + __asan_is_gnu_v3_mangled_ctor@Base 4.9 + __asan_is_gnu_v3_mangled_dtor@Base 4.9 + __asan_java_demangle_v3@Base 4.9 + __asan_java_demangle_v3_callback@Base 4.9 + __sanitizer_cov@Base 4.9 + __sanitizer_cov_dump@Base 4.9 + __sanitizer_cov_indir_call16@Base 5 + __sanitizer_cov_init@Base 5 + __sanitizer_cov_module_init@Base 5 + __sanitizer_cov_trace_basic_block@Base 6 + __sanitizer_cov_trace_cmp1@Base 7 + __sanitizer_cov_trace_cmp2@Base 7 + __sanitizer_cov_trace_cmp4@Base 7 + __sanitizer_cov_trace_cmp8@Base 7 + __sanitizer_cov_trace_cmp@Base 6 + __sanitizer_cov_trace_div4@Base 7 + __sanitizer_cov_trace_div8@Base 7 + __sanitizer_cov_trace_func_enter@Base 6 + __sanitizer_cov_trace_gep@Base 7 + __sanitizer_cov_trace_pc_guard@Base 7 + __sanitizer_cov_trace_pc_guard_init@Base 7 + __sanitizer_cov_trace_pc_indir@Base 7 + __sanitizer_cov_trace_switch@Base 6 + __sanitizer_cov_with_check@Base 6 + __sanitizer_get_coverage_guards@Base 6 + __sanitizer_get_number_of_counters@Base 6 + __sanitizer_get_total_unique_caller_callee_pairs@Base 6 + __sanitizer_get_total_unique_coverage@Base 6 + __sanitizer_install_malloc_and_free_hooks@Base 7 + __sanitizer_maybe_open_cov_file@Base 5 + __sanitizer_report_error_summary@Base 4.9 + __sanitizer_reset_coverage@Base 6 + __sanitizer_sandbox_on_notify@Base 4.9 + __sanitizer_set_death_callback@Base 6 + __sanitizer_set_report_fd@Base 7 + __sanitizer_set_report_path@Base 4.9 + __sanitizer_symbolize_global@Base 7 + __sanitizer_symbolize_pc@Base 7 + __sanitizer_update_counter_bitset_and_clear_counters@Base 6 + __ubsan_handle_add_overflow@Base 4.9 + __ubsan_handle_add_overflow_abort@Base 4.9 + __ubsan_handle_builtin_unreachable@Base 4.9 + __ubsan_handle_cfi_bad_icall@Base 7 + __ubsan_handle_cfi_bad_icall_abort@Base 7 + __ubsan_handle_cfi_bad_type@Base 7 + __ubsan_handle_cfi_bad_type_abort@Base 7 + __ubsan_handle_cfi_check_fail@Base 7 + __ubsan_handle_cfi_check_fail_abort@Base 7 + __ubsan_handle_divrem_overflow@Base 4.9 + __ubsan_handle_divrem_overflow_abort@Base 4.9 + __ubsan_handle_dynamic_type_cache_miss@Base 4.9 + __ubsan_handle_dynamic_type_cache_miss_abort@Base 4.9 + __ubsan_handle_float_cast_overflow@Base 4.9 + __ubsan_handle_float_cast_overflow_abort@Base 4.9 + __ubsan_handle_function_type_mismatch@Base 4.9 + __ubsan_handle_function_type_mismatch_abort@Base 4.9 + __ubsan_handle_load_invalid_value@Base 4.9 + __ubsan_handle_load_invalid_value_abort@Base 4.9 + __ubsan_handle_missing_return@Base 4.9 + __ubsan_handle_mul_overflow@Base 4.9 + __ubsan_handle_mul_overflow_abort@Base 4.9 + __ubsan_handle_negate_overflow@Base 4.9 + __ubsan_handle_negate_overflow_abort@Base 4.9 + __ubsan_handle_nonnull_arg@Base 5 + __ubsan_handle_nonnull_arg_abort@Base 5 + __ubsan_handle_nonnull_return@Base 5 + __ubsan_handle_nonnull_return_abort@Base 5 + __ubsan_handle_out_of_bounds@Base 4.9 + __ubsan_handle_out_of_bounds_abort@Base 4.9 + __ubsan_handle_shift_out_of_bounds@Base 4.9 + __ubsan_handle_shift_out_of_bounds_abort@Base 4.9 + __ubsan_handle_sub_overflow@Base 4.9 + __ubsan_handle_sub_overflow_abort@Base 4.9 + __ubsan_handle_type_mismatch@Base 4.9 + __ubsan_handle_type_mismatch_abort@Base 4.9 + __ubsan_handle_vla_bound_not_positive@Base 4.9 + __ubsan_handle_vla_bound_not_positive_abort@Base 4.9 + __ubsan_vptr_type_cache@Base 4.9 + (arch=base-any-any-amd64 any-mips any-mipsel)internal_sigreturn@Base 7 --- gcc-7-7.2.0.orig/debian/libvtv0.symbols +++ gcc-7-7.2.0/debian/libvtv0.symbols @@ -0,0 +1,68 @@ +libvtv.so.0 libvtv0 #MINVER# + _Z10__vtv_freePv@Base 4.9.0 + (arch=amd64)_Z12__vtv_mallocm@Base 4.9.0 + (arch=i386)_Z12__vtv_mallocj@Base 4.9.0 + _Z14__VLTDumpStatsv@Base 4.9.0 + _Z14__vtv_open_logPKc@Base 4.9.0 + (arch=amd64)_Z16__VLTRegisterSetPPvPKvmmS0_@Base 4.9.0 + (arch=i386)_Z16__VLTRegisterSetPPvPKvjjS0_@Base 4.9.0 + _Z16__vtv_add_to_logiPKcz@Base 4.9.0 + (arch=amd64)_Z17__VLTRegisterPairPPvPKvmS2_@Base 4.9.0 + (arch=i386)_Z17__VLTRegisterPairPPvPKvjS2_@Base 4.9.0 + _Z17__vtv_malloc_initv@Base 4.9.0 + _Z17__vtv_really_failPKc@Base 4.9.0 + _Z17__vtv_verify_failPPvPKv@Base 4.9.0 + _Z18__vtv_malloc_statsv@Base 4.9.0 + _Z20__vtv_malloc_protectv@Base 4.9.0 + (arch=amd64)_Z21__VLTRegisterSetDebugPPvPKvmmS0_@Base 4.9.0 + (arch=i386)_Z21__VLTRegisterSetDebugPPvPKvjjS0_@Base 4.9.0 + (arch=amd64)_Z22__VLTRegisterPairDebugPPvPKvmS2_PKcS4_@Base 4.9.0 + (arch=i386)_Z22__VLTRegisterPairDebugPPvPKvjS2_PKcS4_@Base 4.9.0 + _Z22__vtv_malloc_unprotectv@Base 4.9.0 + _Z23__vtv_malloc_dump_statsv@Base 4.9.0 + _Z23__vtv_verify_fail_debugPPvPKvPKc@Base 4.9.0 + (arch=amd64)_Z23search_cached_file_datam@Base 4.9.0 + (arch=i386)_Z23search_cached_file_dataj@Base 4.9.0 + _Z24__VLTVerifyVtablePointerPPvPKv@Base 4.9.0 + _Z25__vtv_count_mmapped_pagesv@Base 4.9.0 + _Z29__VLTVerifyVtablePointerDebugPPvPKvPKcS4_@Base 4.9.0 + _Z30__vtv_log_verification_failurePKcb@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE12put_internalEPKNS8_8key_typeERKS6_b@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE15find_or_add_keyEPKNS8_8key_typeEPPS6_@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE16destructive_copyEv@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE3putEPKNS8_8key_typeERKS6_@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE6createEm@Base 4.9.0 + (arch=amd64)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE7destroyEPS8_@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE11is_too_fullEm@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE12bucket_countEv@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE3getEPKNS8_8key_typeE@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE4sizeEv@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE5emptyEv@Base 4.9.0 + (arch=amd64)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIm9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE8key_type6equalsEPKS9_@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE12put_internalEPKNS8_8key_typeERKS6_b@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE15find_or_add_keyEPKNS8_8key_typeEPPS6_@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE16destructive_copyEv@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE3putEPKNS8_8key_typeERKS6_@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE6createEj@Base 4.9.0 + (arch=i386)_ZN20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE7destroyEPS8_@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE11is_too_fullEj@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE12bucket_countEv@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE3getEPKNS8_8key_typeE@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE4sizeEv@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE5emptyEv@Base 4.9.0 + (arch=i386)_ZNK20insert_only_hash_mapIPPN21insert_only_hash_setsIj9vptr_hash14vptr_set_allocE20insert_only_hash_setE30insert_only_hash_map_allocatorE8key_type6equalsEPKS9_@Base 4.9.0 + __VLTChangePermission@Base 4.9.0 + __VLTprotect@Base 4.9.0 + __VLTunprotect@Base 4.9.0 + _vtable_map_vars_end@Base 4.9.0 + _vtable_map_vars_start@Base 4.9.0 + mprotect_cycles@Base 4.9.0 + num_cache_entries@Base 4.9.0 + num_calls_to_mprotect@Base 4.9.0 + num_calls_to_regpair@Base 4.9.0 + num_calls_to_regset@Base 4.9.0 + num_calls_to_verify_vtable@Base 4.9.0 + num_pages_protected@Base 4.9.0 + regpair_cycles@Base 4.9.0 + regset_cycles@Base 4.9.0 + verify_vtable_cycles@Base 4.9.0 --- gcc-7-7.2.0.orig/debian/libx32asan4.overrides +++ gcc-7-7.2.0/debian/libx32asan4.overrides @@ -0,0 +1,2 @@ +# automake gets it wrong for the multilib build +libx32asan4 binary: binary-or-shlib-defines-rpath --- gcc-7-7.2.0.orig/debian/libx32asan4.symbols +++ gcc-7-7.2.0/debian/libx32asan4.symbols @@ -0,0 +1,4 @@ +libasan.so.4 libx32asan4 #MINVER# +#include "libasan.symbols.common" +#include "libasan.symbols.32" +#include "libasan.symbols.16" --- gcc-7-7.2.0.orig/debian/libx32gphobos71.lintian-overrides +++ gcc-7-7.2.0/debian/libx32gphobos71.lintian-overrides @@ -0,0 +1,2 @@ +# no multilib zlib for x32 +libx32gphobos71 binary: embedded-library --- gcc-7-7.2.0.orig/debian/libx32stdc++6.symbols +++ gcc-7-7.2.0/debian/libx32stdc++6.symbols @@ -0,0 +1,27 @@ +libstdc++.so.6 libx32stdc++6 #MINVER# +#include "libstdc++6.symbols.32bit" +#include "libstdc++6.symbols.128bit" +#include "libstdc++6.symbols.excprop" +#include "libstdc++6.symbols.money.ldbl" + __gxx_personality_v0@CXXABI_1.3 4.1.1 + _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3 + _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3 +#(optional)_Z16__VLTRegisterSetPPvPKvjjS0_@CXXABI_1.3.8 4.9.0 +#(optional)_Z17__VLTRegisterPairPPvPKvjS2_@CXXABI_1.3.8 4.9.0 +#(optional)_Z21__VLTRegisterSetDebugPPvPKvjjS0_@CXXABI_1.3.8 4.9.0 +#(optional)_Z22__VLTRegisterPairDebugPPvPKvjS2_PKcS4_@CXXABI_1.3.8 4.9.0 +#(optional)_Z24__VLTVerifyVtablePointerPPvPKv@CXXABI_1.3.8 4.9.0 +#(optional)_Z29__VLTVerifyVtablePointerDebugPPvPKvPKcS4_@CXXABI_1.3.8 4.9.0 +#(optional)__VLTChangePermission@CXXABI_1.3.8 4.9.0 + _ZTIPKn@CXXABI_1.3.5 4.9.0 + _ZTIPKo@CXXABI_1.3.5 4.9.0 + _ZTIPn@CXXABI_1.3.5 4.9.0 + _ZTIPo@CXXABI_1.3.5 4.9.0 + _ZTIn@CXXABI_1.3.5 4.9.0 + _ZTIo@CXXABI_1.3.5 4.9.0 + _ZTSPKn@CXXABI_1.3.9 4.9.0 + _ZTSPKo@CXXABI_1.3.9 4.9.0 + _ZTSPn@CXXABI_1.3.9 4.9.0 + _ZTSPo@CXXABI_1.3.9 4.9.0 + _ZTSn@CXXABI_1.3.9 4.9.0 + _ZTSo@CXXABI_1.3.9 4.9.0 --- gcc-7-7.2.0.orig/debian/locale-gen +++ gcc-7-7.2.0/debian/locale-gen @@ -0,0 +1,50 @@ +#!/bin/sh + +# generate locales that the libstdc++ testsuite depends on + +LOCPATH=`pwd`/locales +export LOCPATH + +[ -d $LOCPATH ] || mkdir -p $LOCPATH + +[ -n "$USE_CPUS" ] || USE_CPUS=1 + +umask 022 + +echo "Generating locales..." +xargs -L 1 -P $USE_CPUS -I{} \ + sh -c ' + set {}; locale=$1; charset=$2 + case $locale in \#*) exit;; esac + [ -n "$locale" -a -n "$charset" ] || exit + echo " `echo $locale | sed \"s/\([^.\@]*\).*/\1/\"`.$charset`echo $locale | sed \"s/\([^\@]*\)\(\@.*\)*/\2/\"`..." + if [ -f $LOCPATH/$locale ]; then + input=$locale + else + input=`echo $locale | sed "s/\([^.]*\)[^@]*\(.*\)/\1\2/"` + fi + localedef -i $input -c -f $charset $LOCPATH/$locale #-A /etc/locale.alias + ' <&2 "usage: `basename $0` [-p ] [-t ] [-m ]" + echo >&2 " [ ...]" + exit 1 +} + +while [ $# -gt 0 ]; do + case $1 in + -p) + pidfile=$2 + shift + shift + ;; + -t) + timeout=$2 + shift + shift + ;; + -m) + message="$2" + shift + shift + ;; + -*) + usage + ;; + *) + break + esac +done + +[ $# -gt 0 ] || usage + +logfile="$1" +shift +otherlogs="$@" + +cleanup() +{ + rm -f $pidfile + exit 0 +} + +#trap cleanup 0 1 3 15 + +echo $$ > $pidfile + +update() +{ + _logvar=$1 + _othervar=$2 + + # logfile may not exist yet + if [ -r $logfile ]; then + _logtail="`tail -10 $logfile | md5sum` $f" + else + _logtail="does not exist: $logfile" + fi + eval $_logvar="'$_logtail'" + + _othertails='' + for f in $otherlogs; do + if [ -r $f ]; then + _othertails="$_othertails `tail -10 $f | md5sum` $f" + else + _othertails="$_othertails does not exist: $f" + fi + done + eval $_othervar="'$_othertails'" +} + +update logtail othertails +while true; do + sleep $timeout + update newlogtail newothertails + if [ "$logtail" != "$newlogtail" ]; then + # there is still action in the primary logfile. do nothing. + logtail="$newlogtail" + elif [ "$othertails" != "$newothertails" ]; then + # there is still action in the other log files, so print the message + /bin/echo -e $message + othertails="$newothertails" + else + # nothing changed in the other log files. maybe a timeout ... + : + fi +done --- gcc-7-7.2.0.orig/debian/patches/PR55947-revert.diff +++ gcc-7-7.2.0/debian/patches/PR55947-revert.diff @@ -0,0 +1,350 @@ +# DP: Revert fix for PR target/55947, causing PR libstdc++/72813 + +libstdc++-v3/ + +2013-05-08 Andi Kleen + + PR target/55947 + * libstdc++-v3/include/bits/atomic_base.h + (_GLIBCXX_ALWAYS_INLINE): Add new macro. + (atomic_thread_fence, atomic_signal_fence, test_and_set, + clear, store, load, exchange, compare_exchange_weak) + compare_exchange_strong, fetch_add, fetch_sub, fetch_and, + fetch_or, fetch_xor): Mark _GLIBCXX_ALWAYS_INLINE. + +Index: b/src/libstdc++-v3/include/bits/atomic_base.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/atomic_base.h ++++ b/src/libstdc++-v3/include/bits/atomic_base.h +@@ -97,11 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + | (__m & __memory_order_modifier_mask)); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ inline void + atomic_thread_fence(memory_order __m) noexcept + { __atomic_thread_fence(__m); } + +- _GLIBCXX_ALWAYS_INLINE void ++ inline void + atomic_signal_fence(memory_order __m) noexcept + { __atomic_signal_fence(__m); } + +@@ -170,19 +170,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + : __atomic_flag_base{ _S_init(__i) } + { } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + test_and_set(memory_order __m = memory_order_seq_cst) noexcept + { + return __atomic_test_and_set (&_M_i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_test_and_set (&_M_i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + clear(memory_order __m = memory_order_seq_cst) noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -193,7 +193,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __atomic_clear (&_M_i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + clear(memory_order __m = memory_order_seq_cst) volatile noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -363,7 +363,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + reinterpret_cast(-__alignof(_M_i))); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -374,7 +374,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __atomic_store_n(&_M_i, __i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + store(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { +@@ -386,7 +386,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __atomic_store_n(&_M_i, __i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + load(memory_order __m = memory_order_seq_cst) const noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -396,7 +396,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_load_n(&_M_i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + load(memory_order __m = memory_order_seq_cst) const volatile noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -406,7 +406,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_load_n(&_M_i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + exchange(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { +@@ -414,14 +414,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + } + + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + exchange(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_exchange_n(&_M_i, __i, __m); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m1, memory_order __m2) noexcept + { +@@ -434,7 +434,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m1, + memory_order __m2) volatile noexcept +@@ -448,7 +448,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) noexcept + { +@@ -456,7 +456,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __cmpexch_failure_order(__m)); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_weak(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) volatile noexcept + { +@@ -464,7 +464,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __cmpexch_failure_order(__m)); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m1, memory_order __m2) noexcept + { +@@ -477,7 +477,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m1, + memory_order __m2) volatile noexcept +@@ -492,7 +492,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) noexcept + { +@@ -500,7 +500,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __cmpexch_failure_order(__m)); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__int_type& __i1, __int_type __i2, + memory_order __m = memory_order_seq_cst) volatile noexcept + { +@@ -508,52 +508,52 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __cmpexch_failure_order(__m)); + } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_add(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_add(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_add(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_add(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_sub(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_sub(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_sub(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_sub(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_and(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_and(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_and(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_and(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_or(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_or(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_or(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_or(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_xor(__int_type __i, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_xor(&_M_i, __i, __m); } + +- _GLIBCXX_ALWAYS_INLINE __int_type ++ __int_type + fetch_xor(__int_type __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_xor(&_M_i, __i, __m); } +@@ -678,7 +678,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + reinterpret_cast(-__alignof(_M_p))); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + store(__pointer_type __p, + memory_order __m = memory_order_seq_cst) noexcept + { +@@ -691,7 +691,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __atomic_store_n(&_M_p, __p, __m); + } + +- _GLIBCXX_ALWAYS_INLINE void ++ void + store(__pointer_type __p, + memory_order __m = memory_order_seq_cst) volatile noexcept + { +@@ -703,7 +703,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __atomic_store_n(&_M_p, __p, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + load(memory_order __m = memory_order_seq_cst) const noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -713,7 +713,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_load_n(&_M_p, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + load(memory_order __m = memory_order_seq_cst) const volatile noexcept + { + memory_order __b = __m & __memory_order_mask; +@@ -723,7 +723,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_load_n(&_M_p, __m); + } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + exchange(__pointer_type __p, + memory_order __m = memory_order_seq_cst) noexcept + { +@@ -731,14 +731,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + } + + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + exchange(__pointer_type __p, + memory_order __m = memory_order_seq_cst) volatile noexcept + { + return __atomic_exchange_n(&_M_p, __p, __m); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, + memory_order __m1, + memory_order __m2) noexcept +@@ -752,7 +752,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE bool ++ bool + compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, + memory_order __m1, + memory_order __m2) volatile noexcept +@@ -767,22 +767,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2); + } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + fetch_add(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + fetch_add(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + fetch_sub(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) noexcept + { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); } + +- _GLIBCXX_ALWAYS_INLINE __pointer_type ++ __pointer_type + fetch_sub(ptrdiff_t __d, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); } --- gcc-7-7.2.0.orig/debian/patches/ada-749574.diff +++ gcc-7-7.2.0/debian/patches/ada-749574.diff @@ -0,0 +1,116 @@ +From: Ludovic Brenta +From: Nicolas Boulenguez +Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81087 +Bug-Debian: http://bugs.debian.org/749574 +Description: array index out of range in gnatlink + The procedure gnatlink assumes that the Linker_Options.Table contains access + values to strings whose 'First index is always 1. This assumption is wrong + for the string returned by function Base_Name. + . + The wrong indices are not detected because gnatlink is compiled with + -gnatp, but the test result is wrong. + . + The following program normally raises Constraint_Error, prints FALSE + if compiled with -gnatn, while the expected result is TRUE. + . + procedure A is + G : constant String (3 .. 5) := "abc"; + begin + Ada.Text_IO.Put_Line (Boolean'Image (G (1 .. 2) = "ab")); + end A; + +Index: b/src/gcc/ada/gnatlink.adb +=================================================================== +--- a/src/gcc/ada/gnatlink.adb ++++ b/src/gcc/ada/gnatlink.adb +@@ -239,6 +239,9 @@ procedure Gnatlink is + procedure Write_Usage; + -- Show user the program options + ++ function Starts_With (Source, Pattern : String) return Boolean; ++ pragma Inline (Starts_With); ++ + --------------- + -- Base_Name -- + --------------- +@@ -525,7 +528,7 @@ procedure Gnatlink is + Binder_Options.Table (Binder_Options.Last) := + Linker_Options.Table (Linker_Options.Last); + +- elsif Arg'Length >= 7 and then Arg (1 .. 7) = "--LINK=" then ++ elsif Starts_With (Arg, "--LINK=") then + if Arg'Length = 7 then + Exit_With_Error ("Missing argument for --LINK="); + end if; +@@ -538,7 +541,7 @@ procedure Gnatlink is + ("Could not locate linker: " & Arg (8 .. Arg'Last)); + end if; + +- elsif Arg'Length > 6 and then Arg (1 .. 6) = "--GCC=" then ++ elsif Starts_With (Arg, "--GCC=") then + declare + Program_Args : constant Argument_List_Access := + Argument_String_To_List +@@ -1259,13 +1262,9 @@ procedure Gnatlink is + 1 .. Linker_Options.Last + loop + if Linker_Options.Table (J) /= null +- and then +- Linker_Options.Table (J)'Length +- > Run_Path_Opt'Length +- and then +- Linker_Options.Table (J) +- (1 .. Run_Path_Opt'Length) = +- Run_Path_Opt ++ and then Starts_With ++ (Linker_Options.Table (J).all, ++ Run_Path_Opt) + then + -- We have found an already + -- specified run_path_option: +@@ -1382,6 +1381,17 @@ procedure Gnatlink is + Status := fclose (Fd); + end Process_Binder_File; + ++ ---------------- ++ -- StartsWith -- ++ ---------------- ++ ++ function Starts_With (Source, Pattern : String) return Boolean is ++ Last : constant Natural := Source'First + Pattern'Length - 1; ++ begin ++ return Last <= Source'Last ++ and then Pattern = Source (Source'First .. Last); ++ end Starts_With; ++ + ----------- + -- Usage -- + ----------- +@@ -1896,8 +1906,8 @@ begin + while J <= Linker_Options.Last loop + if Linker_Options.Table (J).all = "-Xlinker" + and then J < Linker_Options.Last +- and then Linker_Options.Table (J + 1)'Length > 8 +- and then Linker_Options.Table (J + 1) (1 .. 8) = "--stack=" ++ and then Starts_With (Linker_Options.Table (J + 1).all, ++ "--stack=") + then + if Stack_Op then + Linker_Options.Table (J .. Linker_Options.Last - 2) := +@@ -1928,13 +1938,9 @@ begin + -- Here we just check for a canonical form that matches the + -- pragma Linker_Options set in the NT runtime. + +- if (Linker_Options.Table (J)'Length > 17 +- and then Linker_Options.Table (J) (1 .. 17) = +- "-Xlinker --stack=") +- or else +- (Linker_Options.Table (J)'Length > 12 +- and then Linker_Options.Table (J) (1 .. 12) = +- "-Wl,--stack=") ++ if Starts_With (Linker_Options.Table (J).all, "-Xlinker --stack=") ++ or else Starts_With (Linker_Options.Table (J).all, ++ "-Wl,--stack=") + then + if Stack_Op then + Linker_Options.Table (J .. Linker_Options.Last - 1) := --- gcc-7-7.2.0.orig/debian/patches/ada-acats.diff +++ gcc-7-7.2.0/debian/patches/ada-acats.diff @@ -0,0 +1,175 @@ +# DP: - When running the ACATS, look for the gnat tools in their new +# DP: directory (build/gnattools), and for the shared libraries in +# DP: build/gcc/ada/rts and build/libgnatvsn. + +--- a/src/gcc/testsuite/ada/acats/run_acats.sh ++++ b/src/gcc/testsuite/ada/acats/run_acats.sh +@@ -22,45 +22,25 @@ + + # Set up environment to use the Ada compiler from the object tree + +-host_gnatchop=`which gnatchop` +-host_gnatmake=`which gnatmake` + ROOT=`${PWDCMD-pwd}` + BASE=`cd $ROOT/../../..; ${PWDCMD-pwd}` + + PATH=$BASE:$ROOT:$PATH +-ADA_INCLUDE_PATH=$BASE/ada/rts +-LD_LIBRARY_PATH=$ADA_INCLUDE_PATH:$BASE:$LD_LIBRARY_PATH +-ADA_OBJECTS_PATH=$ADA_INCLUDE_PATH + +-if [ ! -d $ADA_INCLUDE_PATH ]; then +- echo gnatlib missing, exiting. +- exit 1 +-fi ++TARGET=`${GCC_DRIVER} -v 2>&1 |grep '^Target:' | cut -d' ' -f2` ++GNATTOOLS=`cd $BASE/../gnattools; ${PWDCMD-pwd}` ++LIBGNATVSN=`cd $BASE/../${TARGET}/libgnatvsn; ${PWDCMD-pwd}` + +-if [ ! -f $BASE/gnatchop ]; then +- echo gnattools missing, exiting. +- exit 1 +-fi +- +-if [ ! -f $BASE/gnatmake ]; then +- echo gnattools missing, exiting. +- exit 1 +-fi ++export GNATTOOLS LIBGNATVSN LIBGNATPRJ + + export PATH ADA_INCLUDE_PATH ADA_OBJECTS_PATH BASE LD_LIBRARY_PATH + + echo '#!/bin/sh' > host_gnatchop +-echo PATH=`dirname $host_gnatchop`:'$PATH' >> host_gnatchop +-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatchop +-echo export PATH >> host_gnatchop + echo exec gnatchop '"$@"' >> host_gnatchop + + chmod +x host_gnatchop + + echo '#!/bin/sh' > host_gnatmake +-echo PATH=`dirname $host_gnatmake`:'$PATH' >> host_gnatmake +-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatmake +-echo export PATH >> host_gnatmake + echo exec gnatmake '"$@"' >> host_gnatmake + + chmod +x host_gnatmake +--- a/src/gcc/testsuite/ada/acats/run_all.sh ++++ b/src/gcc/testsuite/ada/acats/run_all.sh +@@ -14,6 +14,10 @@ + + # End of customization section. + ++RTS=`cd $GNATTOOLS/../gcc/ada/rts; ${PWDCMD-pwd}` ++LD_LIBRARY_PATH=$RTS:$LIBGNATVSN ++export LD_LIBRARY_PATH ++ + # Perform arithmetic evaluation on the ARGs, and store the result in the + # global $as_val. Take advantage of shells that can avoid forks. The arguments + # must be portable across $(()) and expr. +@@ -56,12 +60,16 @@ + GCC="$BASE/xgcc -B$BASE/" + + target_gnatchop () { +- $BASE/gnatchop --GCC="$BASE/xgcc" $* ++ ADA_INCLUDE_PATH=$GNATTOOLS/../../src/gcc/ada \ ++ $GNATTOOLS/gnatchop --GCC="$BASE/xgcc" $* + } + + target_gnatmake () { +- echo $BASE/gnatmake --GNATBIND=$BASE/gnatbind --GNATLINK=$BASE/gnatlink --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" +- $BASE/gnatmake --GNATBIND=$BASE/gnatbind --GNATLINK=$BASE/gnatlink --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" ++ EXTERNAL_OBJECTS="$EXTERNAL_OBJECTS $RTS/adaint.o $RTS/sysdep.o $RTS/init.o $RTS/raise-gcc.o" ++ $GNATTOOLS/gnatmake -I- -I$RTS -I. \ ++ --GCC="$GCC" --GNATBIND="$GNATTOOLS/gnatbind" \ ++ --GNATLINK="$GNATTOOLS/gnatlink" $gnatflags $gccflags $* \ ++ -bargs -static -largs $EXTERNAL_OBJECTS --GCC="$GCC -I- -I$RTS -I." + } + + target_gcc () { +@@ -98,8 +106,8 @@ + display `$GCC -v 2>&1` + display host=`gcc -dumpmachine` + display target=$target +-display `type gnatmake` +-gnatls -v >> $dir/acats.log ++display `type $GNATTOOLS/gnatmake` ++$GNATTOOLS/gnatls -I- -I$RTS -v >> $dir/acats.log + display "" + + if [ -n "$GCC_RUNTEST_PARALLELIZE_DIR" ]; then +@@ -130,7 +138,7 @@ + exit 1 + fi + target_run $dir/support/impbit > $dir/support/impbit.out 2>&1 +-target_bit=`cat $dir/support/impbit.out` ++target_bit=`cat $dir/support/impbit.out | sed -e 's/ //g' -e 's/\r//g'` + echo target_bit="$target_bit" >> $dir/acats.log + + # Find out a suitable asm statement +--- a/src/gcc/testsuite/lib/gnat.exp ++++ b/src/gcc/testsuite/lib/gnat.exp +@@ -88,18 +88,24 @@ + global GNAT_UNDER_TEST + global TOOL_EXECUTABLE + global gnat_target_current ++ global ld_library_path + + set gnat_target_current "" + + if { $gnat_initialized == 1 } { return } + +- if ![info exists GNAT_UNDER_TEST] then { +- if [info exists TOOL_EXECUTABLE] { +- set GNAT_UNDER_TEST "$TOOL_EXECUTABLE" +- } else { +- set GNAT_UNDER_TEST "[local_find_gnatmake]" +- } +- } ++ set target [target_info name] ++ set GNAT_UNDER_TEST "$rootme/../gnattools/gnatmake -I$rootme/ada/rts --GCC=$rootme/xgcc --GNATBIND=$rootme/../gnattools/gnatbind --GNATLINK=$rootme/../gnattools/gnatlink -cargs -B$rootme -largs --GCC=$rootme/xgcc -B$rootme -margs" ++ append ld_library_path ":$rootme/ada/rts" ++ append ld_library_path ":$rootme/../$target/libgnatvsn" ++ set_ld_library_path_env_vars ++ ++ # gnatlink looks for system.ads itself and has no --RTS option, so ++ # specify via environment ++ verbose -log "ADA_INCLUDE_PATH=$rootme/ada/rts" ++ verbose -log "ADA_OBJECTS_PATH=$rootme/ada/rts" ++ setenv ADA_INCLUDE_PATH "$rootme/ada/rts" ++ setenv ADA_OBJECTS_PATH "$rootme/ada/rts" + + if ![info exists tmpdir] then { + set tmpdir /tmp +@@ -121,31 +127,6 @@ + return [gcc_target_compile $source $dest $type $options] + } + +- # If we detect a change of target, we need to recompute both +- # GNAT_UNDER_TEST and the appropriate RTS. +- if { $gnat_target_current!="[current_target_name]" } { +- set gnat_target_current "[current_target_name]" +- if [info exists TOOL_OPTIONS] { +- set rtsdir "[get_multilibs ${TOOL_OPTIONS}]/libada" +- } else { +- set rtsdir "[get_multilibs]/libada" +- } +- if [info exists TOOL_EXECUTABLE] { +- set GNAT_UNDER_TEST "$TOOL_EXECUTABLE" +- } else { +- set GNAT_UNDER_TEST "[local_find_gnatmake]" +- } +- set GNAT_UNDER_TEST "$GNAT_UNDER_TEST --RTS=$rtsdir" +- +- # gnatlink looks for system.ads itself and has no --RTS option, so +- # specify via environment +- setenv ADA_INCLUDE_PATH "$rtsdir/adainclude" +- setenv ADA_OBJECTS_PATH "$rtsdir/adainclude" +- # Always log so compilations can be repeated manually. +- verbose -log "ADA_INCLUDE_PATH=$rtsdir/adainclude" +- verbose -log "ADA_OBJECTS_PATH=$rtsdir/adainclude" +- } +- + lappend options "compiler=$GNAT_UNDER_TEST -q -f" + lappend options "timeout=[timeout_value]" + --- gcc-7-7.2.0.orig/debian/patches/ada-arm.diff +++ gcc-7-7.2.0/debian/patches/ada-arm.diff @@ -0,0 +1,18 @@ +DP: Improve support for ZCX on arm. + +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -1957,7 +1957,10 @@ ifeq ($(strip $(filter-out arm% linux-gn + ifeq ($(strip $(filter-out arm%b,$(target_cpu))),) + EH_MECHANISM= + else +- EH_MECHANISM=-arm ++ # Special case; the GCC exception mechanism is supported under ++ # another name and with different files than for other ++ # target_cpus. ++ override EH_MECHANISM=-arm + endif + + TOOLS_TARGET_PAIRS = \ --- gcc-7-7.2.0.orig/debian/patches/ada-armel-libatomic.diff +++ gcc-7-7.2.0/debian/patches/ada-armel-libatomic.diff @@ -0,0 +1,37 @@ +Description: link libgnat with libatomic on armel + On other architectures, the link step does not change because we link + with --as-needed (ada-link-lib.diff). + . + Libatomic becomes an artificial dependency for Ada in Makefile.def, + so a better solution is welcome. + . + Please read ada-changes-in-autogen-output.diff about src/Makefile.def. +Bug-Debian: https://bugs.debian.org/861734 +Author: Matthias Klose +Author: Nicolas Boulenguez + +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -1942,6 +1942,7 @@ endif + + # ARM linux, GNU eabi + ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) ++ MISCLIB = -L../../../$(target_alias)/libatomic/.libs -latomic + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp 2> /dev/null; \ ++ if test -r $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \ ++ if cmp -s $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \ ++ rm -f $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp; \ ++ else \ ++ rm -f $(TARGET_SUBDIR)/libgnatvsn/Makefile; \ ++ mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \ ++ fi; \ ++ else \ ++ mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \ ++ fi; \ ++ test ! -f $(TARGET_SUBDIR)/libgnatvsn/Makefile || exit 0; \ ++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatvsn; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo Configuring in $(TARGET_SUBDIR)/libgnatvsn; \ ++ cd "$(TARGET_SUBDIR)/libgnatvsn" || exit 1; \ ++ case $(srcdir) in \ ++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ ++ *) topdir=`echo $(TARGET_SUBDIR)/libgnatvsn/ | \ ++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ ++ esac; \ ++ module_srcdir=libgnatvsn; \ ++ rm -f no-such-file || : ; \ ++ CONFIG_SITE=no-such-file $(SHELL) \ ++ $$s/$$module_srcdir/configure \ ++ --srcdir=$${topdir}/$$module_srcdir \ ++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ ++ --target=${target_alias} \ ++ || exit 1 ++@endif target-libgnatvsn ++ ++ ++ ++ ++ ++.PHONY: all-target-libgnatvsn maybe-all-target-libgnatvsn ++maybe-all-target-libgnatvsn: ++@if gcc-bootstrap ++all-target-libgnatvsn: stage_current ++@endif gcc-bootstrap ++@if target-libgnatvsn ++TARGET-target-libgnatvsn=all ++maybe-all-target-libgnatvsn: all-target-libgnatvsn ++all-target-libgnatvsn: configure-target-libgnatvsn ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ ++ $(TARGET-target-libgnatvsn)) ++@endif target-libgnatvsn ++ ++ ++ ++ ++ ++.PHONY: check-target-libgnatvsn maybe-check-target-libgnatvsn ++maybe-check-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-check-target-libgnatvsn: check-target-libgnatvsn ++ ++# Dummy target for uncheckable module. ++check-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: install-target-libgnatvsn maybe-install-target-libgnatvsn ++maybe-install-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-install-target-libgnatvsn: install-target-libgnatvsn ++ ++install-target-libgnatvsn: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install) ++ ++@endif target-libgnatvsn ++ ++.PHONY: install-strip-target-libgnatvsn maybe-install-strip-target-libgnatvsn ++maybe-install-strip-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-install-strip-target-libgnatvsn: install-strip-target-libgnatvsn ++ ++install-strip-target-libgnatvsn: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) ++ ++@endif target-libgnatvsn ++ ++# Other targets (info, dvi, pdf, etc.) ++ ++.PHONY: maybe-info-target-libgnatvsn info-target-libgnatvsn ++maybe-info-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-info-target-libgnatvsn: info-target-libgnatvsn ++ ++# libgnatvsn doesn't support info. ++info-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-dvi-target-libgnatvsn dvi-target-libgnatvsn ++maybe-dvi-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-dvi-target-libgnatvsn: dvi-target-libgnatvsn ++ ++# libgnatvsn doesn't support dvi. ++dvi-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-pdf-target-libgnatvsn pdf-target-libgnatvsn ++maybe-pdf-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-pdf-target-libgnatvsn: pdf-target-libgnatvsn ++ ++# libgnatvsn doesn't support pdf. ++pdf-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-html-target-libgnatvsn html-target-libgnatvsn ++maybe-html-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-html-target-libgnatvsn: html-target-libgnatvsn ++ ++# libgnatvsn doesn't support html. ++html-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-TAGS-target-libgnatvsn TAGS-target-libgnatvsn ++maybe-TAGS-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-TAGS-target-libgnatvsn: TAGS-target-libgnatvsn ++ ++# libgnatvsn doesn't support TAGS. ++TAGS-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-install-info-target-libgnatvsn install-info-target-libgnatvsn ++maybe-install-info-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-install-info-target-libgnatvsn: install-info-target-libgnatvsn ++ ++# libgnatvsn doesn't support install-info. ++install-info-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-install-pdf-target-libgnatvsn install-pdf-target-libgnatvsn ++maybe-install-pdf-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-install-pdf-target-libgnatvsn: install-pdf-target-libgnatvsn ++ ++# libgnatvsn doesn't support install-pdf. ++install-pdf-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-install-html-target-libgnatvsn install-html-target-libgnatvsn ++maybe-install-html-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-install-html-target-libgnatvsn: install-html-target-libgnatvsn ++ ++# libgnatvsn doesn't support install-html. ++install-html-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-installcheck-target-libgnatvsn installcheck-target-libgnatvsn ++maybe-installcheck-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-installcheck-target-libgnatvsn: installcheck-target-libgnatvsn ++ ++# libgnatvsn doesn't support installcheck. ++installcheck-target-libgnatvsn: ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-mostlyclean-target-libgnatvsn mostlyclean-target-libgnatvsn ++maybe-mostlyclean-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-mostlyclean-target-libgnatvsn: mostlyclean-target-libgnatvsn ++ ++mostlyclean-target-libgnatvsn: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing TAGS in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatvsn"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ mostlyclean) \ ++ || exit 1 ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-clean-target-libgnatvsn clean-target-libgnatvsn ++maybe-clean-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-clean-target-libgnatvsn: clean-target-libgnatvsn ++ ++clean-target-libgnatvsn: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing clean in $(TARGET_SUBDIR)/libgnatvsn"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ clean) \ ++ || exit 1 ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-distclean-target-libgnatvsn distclean-target-libgnatvsn ++maybe-distclean-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-distclean-target-libgnatvsn: distclean-target-libgnatvsn ++ ++distclean-target-libgnatvsn: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing distclean in $(TARGET_SUBDIR)/libgnatvsn"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ distclean) \ ++ || exit 1 ++ ++@endif target-libgnatvsn ++ ++.PHONY: maybe-maintainer-clean-target-libgnatvsn maintainer-clean-target-libgnatvsn ++maybe-maintainer-clean-target-libgnatvsn: ++@if target-libgnatvsn ++maybe-maintainer-clean-target-libgnatvsn: maintainer-clean-target-libgnatvsn ++ ++maintainer-clean-target-libgnatvsn: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatvsn"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libgnatvsn && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ maintainer-clean) \ ++ || exit 1 ++ ++@endif target-libgnatvsn ++ ++ ++ ++ ++ ++.PHONY: configure-target-libada-sjlj maybe-configure-target-libada-sjlj ++maybe-configure-target-libada-sjlj: ++@if gcc-bootstrap ++configure-target-libada-sjlj: stage_current ++@endif gcc-bootstrap ++@if target-libada-sjlj ++maybe-configure-target-libada-sjlj: configure-target-libada-sjlj ++configure-target-libada-sjlj: ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ echo "Checking multilib configuration for libada-sjlj..."; \ ++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libada-sjlj; \ ++ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libada-sjlj/multilib.tmp 2> /dev/null; \ ++ if test -r $(TARGET_SUBDIR)/libada-sjlj/multilib.out; then \ ++ if cmp -s $(TARGET_SUBDIR)/libada-sjlj/multilib.tmp $(TARGET_SUBDIR)/libada-sjlj/multilib.out; then \ ++ rm -f $(TARGET_SUBDIR)/libada-sjlj/multilib.tmp; \ ++ else \ ++ rm -f $(TARGET_SUBDIR)/libada-sjlj/Makefile; \ ++ mv $(TARGET_SUBDIR)/libada-sjlj/multilib.tmp $(TARGET_SUBDIR)/libada-sjlj/multilib.out; \ ++ fi; \ ++ else \ ++ mv $(TARGET_SUBDIR)/libada-sjlj/multilib.tmp $(TARGET_SUBDIR)/libada-sjlj/multilib.out; \ ++ fi; \ ++ test ! -f $(TARGET_SUBDIR)/libada-sjlj/Makefile || exit 0; \ ++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libada-sjlj; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo Configuring in $(TARGET_SUBDIR)/libada-sjlj; \ ++ cd "$(TARGET_SUBDIR)/libada-sjlj" || exit 1; \ ++ case $(srcdir) in \ ++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ ++ *) topdir=`echo $(TARGET_SUBDIR)/libada-sjlj/ | \ ++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ ++ esac; \ ++ module_srcdir=libada-sjlj; \ ++ rm -f no-such-file || : ; \ ++ CONFIG_SITE=no-such-file $(SHELL) \ ++ $$s/$$module_srcdir/configure \ ++ --srcdir=$${topdir}/$$module_srcdir \ ++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ ++ --target=${target_alias} \ ++ || exit 1 ++@endif target-libada-sjlj ++ ++ ++ ++ ++ ++.PHONY: all-target-libada-sjlj maybe-all-target-libada-sjlj ++maybe-all-target-libada-sjlj: ++@if gcc-bootstrap ++all-target-libada-sjlj: stage_current ++@endif gcc-bootstrap ++@if target-libada-sjlj ++TARGET-target-libada-sjlj=all ++maybe-all-target-libada-sjlj: all-target-libada-sjlj ++all-target-libada-sjlj: configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ ++ $(TARGET-target-libada-sjlj)) ++@endif target-libada-sjlj ++ ++ ++ ++ ++ ++.PHONY: check-target-libada-sjlj maybe-check-target-libada-sjlj ++maybe-check-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-check-target-libada-sjlj: check-target-libada-sjlj ++ ++check-target-libada-sjlj: ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) check) ++ ++@endif target-libada-sjlj ++ ++.PHONY: install-target-libada-sjlj maybe-install-target-libada-sjlj ++maybe-install-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-install-target-libada-sjlj: install-target-libada-sjlj ++ ++install-target-libada-sjlj: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install) ++ ++@endif target-libada-sjlj ++ ++.PHONY: install-strip-target-libada-sjlj maybe-install-strip-target-libada-sjlj ++maybe-install-strip-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-install-strip-target-libada-sjlj: install-strip-target-libada-sjlj ++ ++install-strip-target-libada-sjlj: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) ++ ++@endif target-libada-sjlj ++ ++# Other targets (info, dvi, pdf, etc.) ++ ++.PHONY: maybe-info-target-libada-sjlj info-target-libada-sjlj ++maybe-info-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-info-target-libada-sjlj: info-target-libada-sjlj ++ ++info-target-libada-sjlj: \ ++ configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing info in $(TARGET_SUBDIR)/libada-sjlj"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ info) \ ++ || exit 1 ++ ++@endif target-libada-sjlj ++ ++.PHONY: maybe-dvi-target-libada-sjlj dvi-target-libada-sjlj ++maybe-dvi-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-dvi-target-libada-sjlj: dvi-target-libada-sjlj ++ ++dvi-target-libada-sjlj: \ ++ configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing dvi in $(TARGET_SUBDIR)/libada-sjlj"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ dvi) \ ++ || exit 1 ++ ++@endif target-libada-sjlj ++ ++.PHONY: maybe-pdf-target-libada-sjlj pdf-target-libada-sjlj ++maybe-pdf-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-pdf-target-libada-sjlj: pdf-target-libada-sjlj ++ ++pdf-target-libada-sjlj: \ ++ configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing pdf in $(TARGET_SUBDIR)/libada-sjlj"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ pdf) \ ++ || exit 1 ++ ++@endif target-libada-sjlj ++ ++.PHONY: maybe-html-target-libada-sjlj html-target-libada-sjlj ++maybe-html-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-html-target-libada-sjlj: html-target-libada-sjlj ++ ++html-target-libada-sjlj: \ ++ configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing html in $(TARGET_SUBDIR)/libada-sjlj"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ html) \ ++ || exit 1 ++ ++@endif target-libada-sjlj ++ ++.PHONY: maybe-TAGS-target-libada-sjlj TAGS-target-libada-sjlj ++maybe-TAGS-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-TAGS-target-libada-sjlj: TAGS-target-libada-sjlj ++ ++TAGS-target-libada-sjlj: \ ++ configure-target-libada-sjlj ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing TAGS in $(TARGET_SUBDIR)/libada-sjlj"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -49967,26 +50452,26 @@ TAGS-target-libada: \ + TAGS) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-install-info-target-libada install-info-target-libada +-maybe-install-info-target-libada: +-@if target-libada +-maybe-install-info-target-libada: install-info-target-libada ++.PHONY: maybe-install-info-target-libada-sjlj install-info-target-libada-sjlj ++maybe-install-info-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-install-info-target-libada-sjlj: install-info-target-libada-sjlj + +-install-info-target-libada: \ +- configure-target-libada \ +- info-target-libada ++install-info-target-libada-sjlj: \ ++ configure-target-libada-sjlj \ ++ info-target-libada-sjlj + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing install-info in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing install-info in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -49994,26 +50479,26 @@ install-info-target-libada: \ + install-info) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-install-pdf-target-libada install-pdf-target-libada +-maybe-install-pdf-target-libada: +-@if target-libada +-maybe-install-pdf-target-libada: install-pdf-target-libada ++.PHONY: maybe-install-pdf-target-libada-sjlj install-pdf-target-libada-sjlj ++maybe-install-pdf-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-install-pdf-target-libada-sjlj: install-pdf-target-libada-sjlj + +-install-pdf-target-libada: \ +- configure-target-libada \ +- pdf-target-libada ++install-pdf-target-libada-sjlj: \ ++ configure-target-libada-sjlj \ ++ pdf-target-libada-sjlj + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing install-pdf in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing install-pdf in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50021,26 +50506,26 @@ install-pdf-target-libada: \ + install-pdf) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-install-html-target-libada install-html-target-libada +-maybe-install-html-target-libada: +-@if target-libada +-maybe-install-html-target-libada: install-html-target-libada ++.PHONY: maybe-install-html-target-libada-sjlj install-html-target-libada-sjlj ++maybe-install-html-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-install-html-target-libada-sjlj: install-html-target-libada-sjlj + +-install-html-target-libada: \ +- configure-target-libada \ +- html-target-libada ++install-html-target-libada-sjlj: \ ++ configure-target-libada-sjlj \ ++ html-target-libada-sjlj + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing install-html in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing install-html in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50048,25 +50533,25 @@ install-html-target-libada: \ + install-html) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-installcheck-target-libada installcheck-target-libada +-maybe-installcheck-target-libada: +-@if target-libada +-maybe-installcheck-target-libada: installcheck-target-libada ++.PHONY: maybe-installcheck-target-libada-sjlj installcheck-target-libada-sjlj ++maybe-installcheck-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-installcheck-target-libada-sjlj: installcheck-target-libada-sjlj + +-installcheck-target-libada: \ +- configure-target-libada ++installcheck-target-libada-sjlj: \ ++ configure-target-libada-sjlj + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing installcheck in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing installcheck in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50074,24 +50559,24 @@ installcheck-target-libada: \ + installcheck) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-mostlyclean-target-libada mostlyclean-target-libada +-maybe-mostlyclean-target-libada: +-@if target-libada +-maybe-mostlyclean-target-libada: mostlyclean-target-libada ++.PHONY: maybe-mostlyclean-target-libada-sjlj mostlyclean-target-libada-sjlj ++maybe-mostlyclean-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-mostlyclean-target-libada-sjlj: mostlyclean-target-libada-sjlj + +-mostlyclean-target-libada: ++mostlyclean-target-libada-sjlj: + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing mostlyclean in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50099,24 +50584,24 @@ mostlyclean-target-libada: + mostlyclean) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-clean-target-libada clean-target-libada +-maybe-clean-target-libada: +-@if target-libada +-maybe-clean-target-libada: clean-target-libada ++.PHONY: maybe-clean-target-libada-sjlj clean-target-libada-sjlj ++maybe-clean-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-clean-target-libada-sjlj: clean-target-libada-sjlj + +-clean-target-libada: ++clean-target-libada-sjlj: + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing clean in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing clean in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50124,24 +50609,24 @@ clean-target-libada: + clean) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-distclean-target-libada distclean-target-libada +-maybe-distclean-target-libada: +-@if target-libada +-maybe-distclean-target-libada: distclean-target-libada ++.PHONY: maybe-distclean-target-libada-sjlj distclean-target-libada-sjlj ++maybe-distclean-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-distclean-target-libada-sjlj: distclean-target-libada-sjlj + +-distclean-target-libada: ++distclean-target-libada-sjlj: + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing distclean in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing distclean in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50149,24 +50634,24 @@ distclean-target-libada: + distclean) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + +-.PHONY: maybe-maintainer-clean-target-libada maintainer-clean-target-libada +-maybe-maintainer-clean-target-libada: +-@if target-libada +-maybe-maintainer-clean-target-libada: maintainer-clean-target-libada ++.PHONY: maybe-maintainer-clean-target-libada-sjlj maintainer-clean-target-libada-sjlj ++maybe-maintainer-clean-target-libada-sjlj: ++@if target-libada-sjlj ++maybe-maintainer-clean-target-libada-sjlj: maintainer-clean-target-libada-sjlj + +-maintainer-clean-target-libada: ++maintainer-clean-target-libada-sjlj: + @: $(MAKE); $(unstage) +- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \ ++ @[ -f $(TARGET_SUBDIR)/libada-sjlj/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ +- echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libada"; \ ++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libada-sjlj"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ +- (cd $(TARGET_SUBDIR)/libada && \ ++ (cd $(TARGET_SUBDIR)/libada-sjlj && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ +@@ -50174,7 +50659,7 @@ maintainer-clean-target-libada: + maintainer-clean) \ + || exit 1 + +-@endif target-libada ++@endif target-libada-sjlj + + + +@@ -55242,6 +55727,8 @@ configure-target-libffi: stage_last + configure-target-zlib: stage_last + configure-target-rda: stage_last + configure-target-libada: stage_last ++configure-target-libgnatvsn: stage_last ++configure-target-libada-sjlj: stage_last + configure-stage1-target-libgomp: maybe-all-stage1-gcc + configure-stage2-target-libgomp: maybe-all-stage2-gcc + configure-stage3-target-libgomp: maybe-all-stage3-gcc +@@ -55278,6 +55765,8 @@ configure-target-libffi: maybe-all-gcc + configure-target-zlib: maybe-all-gcc + configure-target-rda: maybe-all-gcc + configure-target-libada: maybe-all-gcc ++configure-target-libgnatvsn: maybe-all-gcc ++configure-target-libada-sjlj: maybe-all-gcc + configure-target-libgomp: maybe-all-gcc + configure-target-libitm: maybe-all-gcc + configure-target-libatomic: maybe-all-gcc +@@ -55733,8 +56222,12 @@ all-stageprofile-fixincludes: maybe-all- + all-stagefeedback-fixincludes: maybe-all-stagefeedback-libiberty + all-stageautoprofile-fixincludes: maybe-all-stageautoprofile-libiberty + all-stageautofeedback-fixincludes: maybe-all-stageautofeedback-libiberty ++all-target-libada: maybe-all-gcc ++all-target-libada-sjlj: maybe-all-target-libada + all-gnattools: maybe-all-target-libada + all-gnattools: maybe-all-target-libstdc++-v3 ++all-gnattools: maybe-all-target-libgnatvsn ++all-target-libgnatvsn: maybe-all-target-libada + all-lto-plugin: maybe-all-libiberty + + all-stage1-lto-plugin: maybe-all-stage1-libiberty +@@ -56434,6 +56927,8 @@ configure-target-libffi: maybe-all-targe + configure-target-zlib: maybe-all-target-libgcc + configure-target-rda: maybe-all-target-libgcc + configure-target-libada: maybe-all-target-libgcc ++configure-target-libgnatvsn: maybe-all-target-libgcc ++configure-target-libada-sjlj: maybe-all-target-libgcc + configure-target-libgomp: maybe-all-target-libgcc + configure-target-libitm: maybe-all-target-libgcc + configure-target-libatomic: maybe-all-target-libgcc +@@ -56486,6 +56981,10 @@ configure-target-rda: maybe-all-target-n + + configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss + ++configure-target-libgnatvsn: maybe-all-target-newlib maybe-all-target-libgloss ++ ++configure-target-libada-sjlj: maybe-all-target-newlib maybe-all-target-libgloss ++ + configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss + + configure-target-libitm: maybe-all-target-newlib maybe-all-target-libgloss --- gcc-7-7.2.0.orig/debian/patches/ada-drop-termio-h.diff +++ gcc-7-7.2.0/debian/patches/ada-drop-termio-h.diff @@ -0,0 +1,40 @@ +Description: ada/terminals.c: remove obsolete termio.h + On all architectures, the terminals.c source file #includes + and declares variables with type struct termios. + . + Some platforms provide a compatibility termio.h, which only defines + the termio structure. + . + terminals.c also #includes , probably for historical + reasons since no termio structure is ever used. + . + Drop the #include instead of maintaining a list of architectures. +Author: Nicolas Boulenguez +Bug-Debian: https://bugs.debian.org/845159 +Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81103 + +--- a/src/gcc/ada/terminals.c ++++ b/src/gcc/ada/terminals.c +@@ -1060,14 +1060,6 @@ + #include + #include + #include +- +-/* On some system termio is either absent or including it will disable termios +- (HP-UX) */ +-#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ +- && !defined (__rtems__) +-# include +-#endif +- + #include + #include + #include +@@ -1083,7 +1075,6 @@ + # include + #endif + #if defined (__hpux__) +-# include + # include + #endif + --- gcc-7-7.2.0.orig/debian/patches/ada-gcc-name.diff +++ gcc-7-7.2.0/debian/patches/ada-gcc-name.diff @@ -0,0 +1,117 @@ +Description: ensure that gnat tools execute the same GCC version + The "gcc" default compiler may differ from "gcc-BV", where BV is the + GCC base version of the tools. + . + Gnatchop already handles this issue by extracting parts of the resolved path + to its command name at run time. +Forwarded: not-needed +Author: Ludovic Brenta +Author: Nicolas Boulenguez + +--- a/src/gcc/ada/gnatlink.adb ++++ b/src/gcc/ada/gnatlink.adb +@@ -136,7 +136,8 @@ + -- This table collects the arguments to be passed to compile the binder + -- generated file. + +- Gcc : String_Access := Program_Name ("gcc", "gnatlink"); ++ Gcc : String_Access ++ := Program_Name ("gcc-" & Gnatvsn.Library_Version, "gnatlink"); + + Read_Mode : constant String := "r" & ASCII.NUL; + +@@ -1414,7 +1415,8 @@ + end if; + + Write_Line (" --GCC=comp Use comp as the compiler"); +- Write_Line (" --LINK=nam Use 'nam' for the linking rather than 'gcc'"); ++ Write_Line (" --LINK=nam Use 'nam' for the linking rather than 'gcc-" ++ & Gnatvsn.Library_Version & "'"); + Write_Eol; + Write_Line (" [non-Ada-objects] list of non Ada object files"); + Write_Line (" [linker-options] other options for the linker"); +--- a/src/gcc/ada/make.adb ++++ b/src/gcc/ada/make.adb +@@ -670,9 +670,12 @@ + -- Compiler, Binder & Linker Data and Subprograms -- + ---------------------------------------------------- + +- Gcc : String_Access := Program_Name ("gcc", "gnatmake"); +- Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake"); +- Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake"); ++ Gcc : String_Access := Program_Name ++ ("gcc-" & Gnatvsn.Library_Version, "gnatmake"); ++ Gnatbind : String_Access := Program_Name ++ ("gnatbind-" & Gnatvsn.Library_Version, "gnatmake"); ++ Gnatlink : String_Access := Program_Name ++ ("gnatlink-" & Gnatvsn.Library_Version, "gnatmake"); + -- Default compiler, binder, linker programs + + Saved_Gcc : String_Access := null; +--- a/src/gcc/ada/mdll-utl.adb ++++ b/src/gcc/ada/mdll-utl.adb +@@ -29,6 +29,7 @@ + with Ada.Exceptions; + + with GNAT.Directory_Operations; ++with Gnatvsn; + with Osint; + + package body MDLL.Utl is +@@ -39,7 +40,7 @@ + Dlltool_Name : constant String := "dlltool"; + Dlltool_Exec : OS_Lib.String_Access; + +- Gcc_Name : constant String := "gcc"; ++ Gcc_Name : constant String := "gcc-" & Gnatvsn.Library_Version; + Gcc_Exec : OS_Lib.String_Access; + + Gnatbind_Name : constant String := "gnatbind"; +@@ -212,7 +213,7 @@ + end; + end if; + +- Print_Command ("gcc", Arguments (1 .. A)); ++ Print_Command (Gcc_Name, Arguments (1 .. A)); + + OS_Lib.Spawn (Gcc_Exec.all, Arguments (1 .. A), Success); + +--- a/src/gcc/ada/mlib-utl.adb ++++ b/src/gcc/ada/mlib-utl.adb +@@ -23,6 +23,7 @@ + -- -- + ------------------------------------------------------------------------------ + ++with Gnatvsn; + with MLib.Fil; use MLib.Fil; + with MLib.Tgt; use MLib.Tgt; + with Opt; +@@ -446,7 +447,8 @@ + if Driver_Name = No_Name then + if Gcc_Exec = null then + if Gcc_Name = null then +- Gcc_Name := Osint.Program_Name ("gcc", "gnatmake"); ++ Gcc_Name := Osint.Program_Name ++ ("gcc-" & Gnatvsn.Library_Version, "gnatmake"); + end if; + + Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all); +--- a/src/gcc/ada/prj-makr.adb ++++ b/src/gcc/ada/prj-makr.adb +@@ -24,6 +24,7 @@ + ------------------------------------------------------------------------------ + + with Csets; ++with Gnatvsn; + with Makeutl; use Makeutl; + with Opt; + with Output; +@@ -115,7 +116,7 @@ + + procedure Dup2 (Old_Fd, New_Fd : File_Descriptor); + +- Gcc : constant String := "gcc"; ++ Gcc : constant String := "gcc-" & Gnatvsn.Library_Version; + Gcc_Path : String_Access := null; + + Non_Empty_Node : constant Project_Node_Id := 1; --- gcc-7-7.2.0.orig/debian/patches/ada-gnattools-cross.diff +++ gcc-7-7.2.0/debian/patches/ada-gnattools-cross.diff @@ -0,0 +1,274 @@ +* Link tools dynamically. +* Prevent direct embedding of libada objects: + Mark ALI files as read-only, remove objects after the build. + A solution keeping the objects would be more intrusive. +* Rebuild gnatbind/make/link with themselves. + This removes unneeded objects inherited from the hardcoded bootstrap list. + The same thing would be useful for gnat1drv, but is less easy. +* TOOLS_ALREADY_COMPILED lists LIBGNAT objects that + gcc/ada/gcc-interface/Makefile should not rebuild. +* Install the shared Ada libraries as '.so.1', not '.so' to conform + to the Debian policy. +* Link libgnat/gnarl with LDFLAGS. +* Create libgnat-BV.so symbolic link, use it and -L to link libgnarl. + This prevents undefined symbols or unwanted usage of host libgnat. +* Compile with -gnatn, link with --as-needed -z defs. +* set LD_LIBRARY_PATH so that rebuilt tools can be executed. + +This patch depends on ada-libgnatvsn.diff. + +# DP: - When building a cross gnat, link against the libgnatvsnBV-dev +# DP: package. +# DP: This link will be done by /usr/bin/$(host_alias)-gnat*, thus +# DP: the native gnat with the same major version will be required. + +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -1641,6 +1641,11 @@ ifeq ($(strip $(filter-out s390% linux%, + LIBRARY_VERSION := $(LIB_VERSION) + endif + ++ifeq ($(strip $(filter-out hppa% unknown linux gnu,$(targ))),) ++ GNATLIB_SHARED = gnatlib-shared-dual ++ LIBRARY_VERSION := $(LIB_VERSION) ++endif ++ + # HP/PA HP-UX 10 + ifeq ($(strip $(filter-out hppa% hp hpux10%,$(target_cpu) $(target_vendor) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ +@@ -2644,6 +2649,20 @@ gnatlink-re: ../stamp-tools gnatmake-re + --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + $(MV) ../../gnatlinknew$(exeext) ../../gnatlink$(exeext) + ++gnatbind-re: ../stamp-tools gnatmake-re gnatlink-re ++ $(GNATMAKE) -j0 -c $(ADA_INCLUDES) gnatbind --GCC="$(CC) $(ALL_ADAFLAGS)" ++ $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatbind ++ $(GNATLINK) -v gnatbind -o ../../gnatbind$(exeext) \ ++ --GCC="$(GCC_LINK)" $(TOOLS_LIBS) ++ ++# When driven by gnattools/Makefile for a native build, ++# TOOLS_ALREADY_COMPILED will list objects in the target standard Ada ++# libraries, that Make should avoid rebuilding. ++# We cannot use recursive variables to avoid an infinite loop, ++# so we must put this after definition of EXTRA_GNATMAKE_OBJS. ++GNATLINK_OBJS := $(filter-out $(TOOLS_ALREADY_COMPILED),$(GNATLINK_OBJS)) ++GNATMAKE_OBJS := $(filter-out $(TOOLS_ALREADY_COMPILED),$(GNATMAKE_OBJS)) ++ + # Needs to be built with CC=gcc + # Since the RTL should be built with the latest compiler, remove the + # stamp target in the parent directory whenever gnat1 is rebuilt +@@ -2693,14 +2712,10 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD + # Also install the .dSYM directories if they exist (these directories + # contain the debug information for the shared libraries on darwin) + for file in gnat gnarl; do \ +- if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \ +- $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ ++ if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 ]; then \ ++ $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \ + $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ + fi; \ +- if [ -f $(RTSDIR)/lib$${file}$(soext) ]; then \ +- $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ +- $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \ +- fi; \ + if [ -d $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM ]; then \ + $(CP) -r $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM \ + $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ +@@ -2725,8 +2740,7 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD + touch ../stamp-gnatlib2-$(RTSDIR) + $(RM) ../stamp-gnatlib-$(RTSDIR) + +-../stamp-gnatlib1-$(RTSDIR): Makefile ../stamp-gnatlib2-$(RTSDIR) +- $(RMDIR) $(RTSDIR) ++../stamp-gnatlib1-$(RTSDIR): Makefile + $(MKDIR) $(RTSDIR) + $(CHMOD) u+w $(RTSDIR) + # Copy target independent sources +@@ -2790,7 +2804,7 @@ $(RTSDIR)/s-oscons.ads: ../stamp-gnatlib + $(OSCONS_EXTRACT) ; \ + ../bldtools/oscons/xoscons s-oscons) + +-gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads ++gnatlib: ../stamp-gnatlib1-$(RTSDIR) $(RTSDIR)/s-oscons.ads + test -f $(RTSDIR)/s-oscons.ads || exit 1 + # C files + $(MAKE) -C $(RTSDIR) \ +@@ -2824,36 +2838,51 @@ gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../ + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext) + endif + $(CHMOD) a-wx $(RTSDIR)/*.ali ++# Provide .ads .adb (read-only).ali .so .a, but prevent direct use of .o. ++ $(RM) $(RTSDIR)/*.o + touch ../stamp-gnatlib-$(RTSDIR) + + # Warning: this target assumes that LIBRARY_VERSION has been set correctly. + gnatlib-shared-default: +- $(MAKE) $(FLAGS_TO_PASS) \ +- GNATLIBFLAGS="$(GNATLIBFLAGS)" \ +- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \ +- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET)" \ +- MULTISUBDIR="$(MULTISUBDIR)" \ +- THREAD_KIND="$(THREAD_KIND)" \ +- gnatlib +- $(RM) $(RTSDIR)/libgna*$(soext) ++ $(MAKE) -C $(RTSDIR) \ ++ CC="`echo \"$(GCC_FOR_TARGET)\" \ ++ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \ ++ INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \ ++ CFLAGS="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET)" \ ++ FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ ++ srcdir=$(fsrcdir) \ ++ -f ../Makefile $(LIBGNAT_OBJS) ++ $(MAKE) -C $(RTSDIR) \ ++ CC="`echo \"$(GCC_FOR_TARGET)\" \ ++ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \ ++ ADA_INCLUDES="" \ ++ CFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \ ++ ADAFLAGS="$(GNATLIBFLAGS) $(PICFLAG_FOR_TARGET)" \ ++ FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ ++ srcdir=$(fsrcdir) \ ++ -f ../Makefile \ ++ $(GNATRTL_OBJS) ++ $(RM) $(RTSDIR)/libgna*$(soext) $(RTSDIR)/libgna*$(soext).1 + cd $(RTSDIR); `echo "$(GCC_FOR_TARGET)" \ + | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'` -shared $(GNATLIBCFLAGS) \ + $(PICFLAG_FOR_TARGET) \ +- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ ++ -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 $(LDFLAGS) \ + $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ +- $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ ++ $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \ + $(MISCLIB) -lm ++ cd $(RTSDIR) && $(LN_S) -f libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \ ++ libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) + cd $(RTSDIR); `echo "$(GCC_FOR_TARGET)" \ + | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'` -shared $(GNATLIBCFLAGS) \ + $(PICFLAG_FOR_TARGET) \ +- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ ++ -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 $(LDFLAGS) \ + $(GNATRTL_TASKING_OBJS) \ +- $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ ++ $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \ ++ -L. -lgnat$(hyphen)$(LIBRARY_VERSION) \ + $(THREADSLIB) +- cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ +- libgnat$(soext) +- cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ +- libgnarl$(soext) ++ cd $(RTSDIR) && $(LN_S) -f libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \ ++ libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) ++ $(CHMOD) a-wx $(RTSDIR)/*.ali + + # Create static libgnat and libgnarl compiled with -fPIC + $(RM) $(RTSDIR)/libgnat_pic$(arext) $(RTSDIR)/libgnarl_pic$(arext) +@@ -2864,6 +2893,8 @@ gnatlib-shared-default: + $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS)) + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnarl_pic$(arext) + ++# Provide .ads .adb (read-only).ali .so .a, but prevent direct use of .o. ++ $(RM) $(RTSDIR)/*.o + + gnatlib-shared-dual: + $(MAKE) $(FLAGS_TO_PASS) \ +@@ -2872,21 +2903,15 @@ gnatlib-shared-dual: + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ +- gnatlib-shared-default +- $(MV) $(RTSDIR)/libgna*$(soext) . +- $(MV) $(RTSDIR)/libgnat_pic$(arext) . +- $(MV) $(RTSDIR)/libgnarl_pic$(arext) . +- $(RM) ../stamp-gnatlib2-$(RTSDIR) ++ gnatlib ++ $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ +- gnatlib +- $(MV) libgna*$(soext) $(RTSDIR) +- $(MV) libgnat_pic$(arext) $(RTSDIR) +- $(MV) libgnarl_pic$(arext) $(RTSDIR) ++ gnatlib-shared-default + + gnatlib-shared-dual-win32: + $(MAKE) $(FLAGS_TO_PASS) \ +@@ -2896,17 +2921,15 @@ gnatlib-shared-dual-win32: + PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ +- gnatlib-shared-win32 +- $(MV) $(RTSDIR)/libgna*$(soext) . +- $(RM) ../stamp-gnatlib2-$(RTSDIR) ++ gnatlib ++ $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ +- gnatlib +- $(MV) libgna*$(soext) $(RTSDIR) ++ gnatlib-shared-win32 + + # ??? we need to add the option to support auto-import of arrays/records to + # the GNATLIBFLAGS when this will be supported by GNAT. At this point we will +Index: b/src/gnattools/Makefile.in +=================================================================== +--- a/src/gnattools/Makefile.in ++++ b/src/gnattools/Makefile.in +@@ -76,15 +76,21 @@ CXX_LFLAGS = \ + -L../../../$(target_noncanonical)/libstdc++-v3/libsupc++/.libs + + # Variables for gnattools, native ++rtsdir := $(abspath ../gcc/ada/rts) ++vsndir := $(abspath ../$(target_noncanonical)/libgnatvsn) + TOOLS_FLAGS_TO_PASS_NATIVE= \ + "CC=../../xgcc -B../../" \ + "CXX=../../xg++ -B../../ $(CXX_LFLAGS)" \ + "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \ +- "LDFLAGS=$(LDFLAGS)" \ +- "ADAFLAGS=$(ADAFLAGS)" \ ++ "LDFLAGS=$(LDFLAGS) -Wl,--as-needed -Wl,-z,defs" \ ++ "ADAFLAGS=$(ADAFLAGS) -gnatn" \ + "ADA_CFLAGS=$(ADA_CFLAGS)" \ + "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \ +- "ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\ ++ "ADA_INCLUDES=-I- -nostdinc -I$(vsndir) -I$(rtsdir) $(ADA_INCLUDES_FOR_SUBDIR)" \ ++ "TOOLS_ALREADY_COMPILED=$(foreach d, $(vsndir) $(rtsdir), \ ++ $(patsubst $(d)/%.ali,%.o, $(wildcard $(d)/*.ali)))" \ ++ 'LIBGNAT=-L$(vsndir) -lgnatvsn -L$(rtsdir) -lgnat-$$(LIB_VERSION)' \ ++ "GNATBIND_FLAGS=-nostdlib -x" \ + "exeext=$(exeext)" \ + "fsrcdir=$(fsrcdir)" \ + "srcdir=$(fsrcdir)" \ +@@ -190,6 +196,10 @@ $(GCC_DIR)/stamp-tools: + # to be able to build gnatmake without a version of gnatmake around. Once + # everything has been compiled once, gnatmake can be recompiled with itself + # (see target regnattools) ++gnattools-native: export LD_LIBRARY_PATH := \ ++ $(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)$(vsndir):$(rtsdir) ++# Useful even for 1st pass, as ../../gnatmake may already be ++# dynamically linked in case this target has already been invokated. + gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts + # gnattools1 + $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \ +@@ -198,6 +208,13 @@ gnattools-native: $(GCC_DIR)/stamp-tools + # gnattools2 + $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \ + $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools ++# The hard-coded object lists for gnatbind/make/link contain unneeded ++# objects. Use the fresh tools to recompute dependencies. ++# A separate Make run avoids race conditions between gnatmakes ++# building the same object for common-tools and gnat*-re. ++# (parallelism is already forbidden between gnat*-re targets) ++ $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \ ++ $(TOOLS_FLAGS_TO_PASS_NATIVE) gnatbind-re gnatmake-re gnatlink-re + + # gnatmake/link can be built with recent gnatmake/link if they are available. + # This is especially convenient for building cross tools or for rebuilding --- gcc-7-7.2.0.orig/debian/patches/ada-kfreebsd.diff +++ gcc-7-7.2.0/debian/patches/ada-kfreebsd.diff @@ -0,0 +1,100 @@ +Description: add support for GNU/kFreeBSD. + GNU/kFreeBSD does not support Thread Priority Protection or Thread + Priority Inheritance and lacks some pthread_mutexattr_* functions. + Replace them with dummy versions. +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642128 +Author: Ludovic Brenta +Author: Nicolas Boulenguez + +--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads ++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads +@@ -45,6 +45,7 @@ + pragma Preelaborate; + + pragma Linker_Options ("-lpthread"); ++ pragma Linker_Options ("-lrt"); + + subtype int is Interfaces.C.int; + subtype char is Interfaces.C.char; +@@ -206,9 +207,7 @@ + function nanosleep (rqtp, rmtp : access timespec) return int; + pragma Import (C, nanosleep, "nanosleep"); + +- type clockid_t is private; +- +- CLOCK_REALTIME : constant clockid_t; ++ type clockid_t is new int; + + function clock_gettime + (clock_id : clockid_t; +@@ -441,31 +440,25 @@ + PTHREAD_PRIO_PROTECT : constant := 2; + PTHREAD_PRIO_INHERIT : constant := 1; + ++ -- GNU/kFreeBSD does not support Thread Priority Protection or Thread ++ -- Priority Inheritance and lacks some pthread_mutexattr_* functions. ++ -- Replace them with dummy versions. ++ + function pthread_mutexattr_setprotocol + (attr : access pthread_mutexattr_t; +- protocol : int) return int; +- pragma Import +- (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol"); ++ protocol : int) return int is (0); + + function pthread_mutexattr_getprotocol + (attr : access pthread_mutexattr_t; +- protocol : access int) return int; +- pragma Import +- (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol"); ++ protocol : access int) return int is (0); + + function pthread_mutexattr_setprioceiling + (attr : access pthread_mutexattr_t; +- prioceiling : int) return int; +- pragma Import +- (C, pthread_mutexattr_setprioceiling, +- "pthread_mutexattr_setprioceiling"); ++ prioceiling : int) return int is (0); + + function pthread_mutexattr_getprioceiling + (attr : access pthread_mutexattr_t; +- prioceiling : access int) return int; +- pragma Import +- (C, pthread_mutexattr_getprioceiling, +- "pthread_mutexattr_getprioceiling"); ++ prioceiling : access int) return int is (0); + + type struct_sched_param is record + sched_priority : int; -- scheduling priority +@@ -610,9 +603,6 @@ + end record; + pragma Convention (C, timespec); + +- type clockid_t is new int; +- CLOCK_REALTIME : constant clockid_t := 0; +- + type pthread_attr_t is record + detachstate : int; + schedpolicy : int; +--- a/src/gcc/ada/gsocket.h ++++ b/src/gcc/ada/gsocket.h +@@ -244,6 +244,7 @@ + #endif + + #if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__) \ ++ || defined (__FreeBSD_kernel__) || defined(__GNU__) \ + || defined (__DragonFly__) || defined (__NetBSD__) || defined (__OpenBSD__) + # define Has_Sockaddr_Len 1 + #else +--- a/src/gcc/ada/s-oscons-tmplt.c ++++ b/src/gcc/ada/s-oscons-tmplt.c +@@ -1441,7 +1441,7 @@ + CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock") + + #if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530)) \ +- || defined(__DragonFly__) ++ || defined(__DragonFly__) || defined(__FreeBSD_kernel__) + /** On these platforms use system provided monotonic clock instead of + ** the default CLOCK_REALTIME. We then need to set up cond var attributes + ** appropriately (see thread.c). --- gcc-7-7.2.0.orig/debian/patches/ada-lib-info-source-date-epoch.diff +++ gcc-7-7.2.0/debian/patches/ada-lib-info-source-date-epoch.diff @@ -0,0 +1,144 @@ +Description: set ALI timestamps from SOURCE_DATE_EPOCH if available. + When the SOURCE_DATE_EPOCH environment variable is set, + replace timestamps more recent than its value with its value + when writing Ada Library Information (ALI) files. + This allow reproducible builds from generated or patched Ada sources. + https://reproducible-builds.org/specs/source-date-epoch/ +Author: Nicolas Boulenguez + +--- a/src/gcc/ada/ali-util.adb ++++ b/src/gcc/ada/ali-util.adb +@@ -484,8 +484,10 @@ + for D in ALIs.Table (A).First_Sdep .. ALIs.Table (A).Last_Sdep loop + Src := Source_Id (Get_Name_Table_Int (Sdep.Table (D).Sfile)); + +- if Opt.Minimal_Recompilation +- and then Sdep.Table (D).Stamp /= Source.Table (Src).Stamp ++ if (Opt.Minimal_Recompilation ++ and then Sdep.Table (D).Stamp /= Source.Table (Src).Stamp) ++ or else (Sdep.Table (D).Stamp = Source_Date_Epoch ++ and then Source_Date_Epoch < Source.Table (Src).Stamp) + then + -- If minimal recompilation is in action, replace the stamp + -- of the source file in the table if checksums match. +--- a/src/gcc/ada/lib-writ.adb ++++ b/src/gcc/ada/lib-writ.adb +@@ -1471,7 +1471,14 @@ + + Write_Info_Name_May_Be_Quoted (Fname); + Write_Info_Tab (25); +- Write_Info_Str (String (Time_Stamp (Sind))); ++ declare ++ T : Time_Stamp_Type := Time_Stamp (Sind); ++ begin ++ if Source_Date_Epoch < T then ++ T := Source_Date_Epoch; ++ end if; ++ Write_Info_Str (String (T)); ++ end; + Write_Info_Char (' '); + Write_Info_Str (Get_Hex_String (Source_Checksum (Sind))); + +--- a/src/gcc/ada/osint.adb ++++ b/src/gcc/ada/osint.adb +@@ -1674,6 +1674,20 @@ + + Lib_Search_Directories.Set_Last (Primary_Directory); + Lib_Search_Directories.Table (Primary_Directory) := new String'(""); ++ ++ -- Look for Source_Date_Epoch in the environment. ++ declare ++ Env_Var : String_Access; ++ Get_OK : Boolean; ++ Epoch : OS_Time; ++ begin ++ Env_Var := Getenv ("SOURCE_DATE_EPOCH"); ++ Get_OS_Time_From_String (Env_Var.all, Get_OK, Epoch); ++ Free (Env_Var); ++ if Get_OK then ++ Source_Date_Epoch := OS_Time_To_GNAT_Time (Epoch); ++ end if; ++ end; + end Initialize; + + ------------------ +--- a/src/gcc/ada/osint.ads ++++ b/src/gcc/ada/osint.ads +@@ -685,6 +685,17 @@ + function Prep_Suffix return String; + -- The suffix used for pre-processed files + ++ Source_Date_Epoch : Time_Stamp_Type := Time_Stamp_Type'("99991231235959"); ++ -- * gnat1 truncates to this date time stamps written to ALI files, making ++ -- their contents deterministic even for patched or generated sources. ++ -- See https://reproducible-builds.org/specs/source-date-epoch. ++ -- * When gnatmake reads this date from an ALI file, and the source file is ++ -- more recent, it ignores the dates and only considers checksums as if ++ -- Minimal_Recompilation was selected. Else, the source would always ++ -- be detected as requiring a recompilation. ++ -- The default value has no effect, but Initialize will assign it if ++ -- SOURCE_DATE_EPOCH in the environment represents a valid epoch. ++ + private + + Current_Main : File_Name_Type := No_File; +--- a/src/gcc/ada/s-os_lib.adb ++++ b/src/gcc/ada/s-os_lib.adb +@@ -1153,6 +1153,41 @@ + return Result; + end Get_Object_Suffix; + ++ ----------------------------- ++ -- Get_OS_Time_From_String -- ++ ----------------------------- ++ ++ procedure Get_OS_Time_From_String (Arg : String; ++ Success : out Boolean; ++ Result : out OS_Time) is ++ -- Calling System.Val_LLI breaks the bootstrap sequence. ++ Digit : OS_Time; ++ begin ++ Result := 0; ++ if Arg'Length = 0 then ++ Success := False; ++ return; ++ end if; ++ for I in Arg'Range loop ++ if Arg (I) not in '0' .. '9' then ++ Success := False; ++ return; ++ end if; ++ Digit := OS_Time (Character'Pos (Arg (I)) - Character'Pos ('0')); ++ if OS_Time'Last / 10 < Result then ++ Success := False; ++ return; ++ end if; ++ Result := Result * 10; ++ if OS_Time'Last - Digit < Result then ++ Success := False; ++ return; ++ end if; ++ Result := Result + Digit; ++ end loop; ++ Success := True; ++ end Get_OS_Time_From_String; ++ + ---------------------------------- + -- Get_Target_Debuggable_Suffix -- + ---------------------------------- +--- a/src/gcc/ada/s-os_lib.ads ++++ b/src/gcc/ada/s-os_lib.ads +@@ -164,6 +164,13 @@ + -- component parts to be interpreted in the local time zone, and returns + -- an OS_Time. Returns Invalid_Time if the creation fails. + ++ procedure Get_OS_Time_From_String (Arg : String; ++ Success : out Boolean; ++ Result : out OS_Time); ++ -- Success is set if Arg is not empty, only contains decimal ++ -- digits and represents an integer within OS_Time range. Result ++ -- is then affected with the represented value. ++ + ---------------- + -- File Stuff -- + ---------------- --- gcc-7-7.2.0.orig/debian/patches/ada-libgnatvsn.diff +++ gcc-7-7.2.0/debian/patches/ada-libgnatvsn.diff @@ -0,0 +1,279 @@ +# DP: - Introduce a new shared library named libgnatvsn, containing +# DP: common components of GNAT under the GNAT-Modified GPL, for +# DP: use in GNAT tools, ASIS, GLADE and GPS. Link the gnat tools +# DP: against this new library. + +# Please read ada-changes-in-autogen-output.diff about src/Makefile.def. + +# !!! Must be applied after ada-link-lib.diff + +--- /dev/null ++++ b/src/libgnatvsn/configure +@@ -0,0 +1,34 @@ ++#!/bin/sh ++ ++# Minimal configure script for libgnatvsn. We're only interested in ++# a few parameters. ++ ++{ ++ ++for arg in $*; do ++ case ${arg} in ++ --prefix=*) ++ prefix=`expr ${arg} : '--prefix=\(.\+\)'`;; ++ --srcdir=*) ++ srcdir=`expr ${arg} : '--srcdir=\(.\+\)'`;; ++ --libdir=*) ++ libdir=`expr ${arg} : '--libdir=\(.\+\)'`;; ++ --with-pkgversion=*) ++ pkgversion=`expr ${arg} : '--with-pkgversion=\(.\+\)'`;; ++ --with-bugurl=*) ++ bugurl=`expr ${arg} : '--with-bugurl=\(.\+\)'`;; ++ *) ++ echo "Warning: ignoring option: ${arg}" ++ esac ++done ++ ++sed_script= ++for name in prefix srcdir libdir pkgversion bugurl; do ++ eval value=\$$name ++ echo "$name: $value" ++ sed_script="$sed_script;s,@$name@,$value," ++done ++echo "Creating Makefile..." ++sed "$sed_script" "$srcdir/Makefile.in" > Makefile ++ ++} | tee -a config.log +--- /dev/null ++++ b/src/libgnatvsn/gnatvsn.gpr.sed +@@ -0,0 +1,8 @@ ++library project Gnatvsn is ++ for Library_Name use "gnatvsn"; ++ for Library_Kind use "dynamic"; ++ for Library_Dir use "lib_inst_dir"; ++ for Source_Dirs use ("src_inst_dir"); ++ for Library_ALI_Dir use "ali_inst_dir"; ++ for Externally_Built use "true"; ++end Gnatvsn; +--- /dev/null ++++ b/src/libgnatvsn/Makefile.in +@@ -0,0 +1,161 @@ ++# Makefile for libgnatvsn. ++# Copyright (c) 2006 Ludovic Brenta ++# Copyright (c) 2017 Nicolas Boulenguez ++# ++# This file 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 2 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, write to the Free Software ++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++# Parameters substituted by configure during Makefile generation ++prefix := @prefix@ ++srcdir := @srcdir@ ++libdir := @libdir@ ++pkgversion := @pkgversion@ ++bugurl := @bugurl@ ++ ++# Parameters expected in environment or command line ++$(foreach v, \ ++ ADA_CFLAGS ADAFLAGS CC CFLAGS CPPFLAGS DESTDIR INSTALL INSTALL_DATA LDFLAGS \ ++ ,$(info $(v) ($(origin $(v))) = $($(v)))) ++# It seems that both CFLAGS/ADA_CFLAGS should affect both Ada/C. ++ ++# Parameters read from external files ++BASEVER := $(shell cat $(srcdir)/../gcc/BASE-VER) ++DEVPHASE := $(shell cat $(srcdir)/../gcc/DEV-PHASE) ++DATESTAMP := $(shell cat $(srcdir)/../gcc/DATESTAMP) ++ ++# Public and default targets ++.PHONY: all install clean ++all: ++ ++###################################################################### ++ ++LIB_VERSION := $(shell expr '$(BASEVER)' : '\([0-9]\+\)') ++ ++src_inst_dir := $(prefix)/share/ada/adainclude/gnatvsn ++gpr_inst_dir := $(prefix)/share/gpr ++ali_inst_dir := $(libdir)/ada/adalib/gnatvsn ++lib_inst_dir := $(libdir) ++ ++# Initial value of variables accumulationg build flags. ++adaflags := -gnatn ++cflags := ++cppflags := ++ldflags := -Wl,--as-needed -Wl,-z,defs ++ldlibs := ++ ++# For use in version.c - double quoted strings, with appropriate ++# surrounding punctuation and spaces, and with the datestamp and ++# development phase collapsed to the empty string in release mode ++# (i.e. if DEVPHASE_c is empty). The space immediately after the ++# comma in the $(if ...) constructs is significant - do not remove it. ++cppflags += \ ++ -DBASEVER="\"$(BASEVER)\"" \ ++ -DDATESTAMP="\"$(if $(DEVPHASE), $(DATESTAMP))\"" \ ++ -DDEVPHASE="\"$(if $(DEVPHASE), ($(DEVPHASE)))\"" \ ++ -DPKGVERSION="\"$(pkgversion)\"" \ ++ -DBUGURL="\"$(bugurl)\"" \ ++ -DREVISION= ++ ++# Include and link freshly built target RTL instead of the default. ++RTL_DIR := ../libada ++adaflags += -nostdinc -I$(RTL_DIR)/adainclude ++ldlibs += -L$(RTL_DIR)/adalib -lgnat-$(LIB_VERSION) ++ ++# Append user settings last, allowing them to take precedence. ++adaflags += $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) ++cflags += $(CFLAGS) $(ADA_CFLAGS) ++cppflags += $(CPPFLAGS) ++ldflags += $(LDFLAGS) ++ ++# Link wanted Ada sources from source tree, so that gnat fails when new ++# dependencies are missing in the current directory, instead of silently ++# using the ones in the distant directory. ++# Let Make create all symlinks before first ada compilation, ++# because they depend on each other. ++# snames.ad[bs] is generated in the build tree. ++ ++UNITS_BOTH := aspects atree casing csets debug einfo elists fname \ ++ gnatvsn krunch lib namet nlists opt output repinfo scans sem_aux \ ++ sinfo sinput stand stringt table tree_in tree_io types uintp \ ++ uname urealp widechar xutil ++UNITS_SPEC := alloc hostparm rident ++SEPARATES := lib-list lib-sort ++ADA_SRC := $(addsuffix .ads, $(UNITS_BOTH) $(UNITS_SPEC)) \ ++ $(addsuffix .adb, $(UNITS_BOTH) $(SEPARATES)) ++OBJECTS := $(addsuffix .o, $(UNITS_BOTH) snames $(UNITS_SPEC) version) ++ ++all: libgnatvsn.a libgnatvsn.so.$(LIB_VERSION) gnatvsn.gpr ++ ++libgnatvsn.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS)) ++ $(CC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ $(ldflags) $(ldlibs) ++ ln -fs libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so ++ chmod a=r obj-shared/*.ali ++# Make the .ali files, but not the .o files, visible to the gnat tools. ++ cp -lp obj-shared/*.ali . ++ ++$(foreach u, $(UNITS_BOTH) snames, obj-shared/$(u).o): \ ++obj-shared/%.o: %.adb $(ADA_SRC) snames.adb snames.ads | obj-shared ++ $(CC) -c -fPIC $(adaflags) $< -o $@ ++ ++$(foreach u, $(UNITS_SPEC), obj-shared/$(u).o): \ ++obj-shared/%.o: %.ads $(ADA_SRC) snames.adb snames.ads | obj-shared ++ $(CC) -c -fPIC $(adaflags) $< -o $@ ++ ++obj-shared/version.o: version.c version.h | obj-shared ++ $(CC) -c -fPIC $(cflags) $(cppflags) $< -o $@ ++ ++libgnatvsn.a: $(addprefix obj-static/,$(OBJECTS)) ++ ar rc $@ $^ ++ ranlib $@ ++ ++$(foreach u, $(UNITS_BOTH) snames, obj-static/$(u).o): \ ++obj-static/%.o: %.adb $(ADA_SRC) snames.adb snames.ads | obj-static ++ $(CC) -c $(adaflags) $< -o $@ ++ ++$(foreach u, $(UNITS_SPEC), obj-static/$(u).o): \ ++obj-static/%.o: %.ads $(ADA_SRC) snames.adb snames.ads | obj-static ++ $(CC) -c $(adaflags) $< -o $@ ++ ++obj-static/version.o: version.c version.h | obj-static ++ $(CC) -c $(cflags) $(cppflags) $< -o $@ ++ ++obj-shared obj-static: ++ mkdir $@ ++ ++$(ADA_SRC): ++ ln -s $(srcdir)/../gcc/ada/$@ ++version.c version.h: ++ ln -s $(srcdir)/../gcc/$@ ++snames.adb snames.ads: ++ ln -s ../../gcc/ada/$@ ++ ++gnatvsn.gpr: $(srcdir)/gnatvsn.gpr.sed ++ sed '$(foreach v,src ali lib,s|$(v)_inst_dir|$($(v)_inst_dir)|;)' \ ++ $< > $@ ++ ++install: all ++ mkdir -p $(DESTDIR)$(gpr_inst_dir) ++ $(INSTALL_DATA) gnatvsn.gpr $(DESTDIR)$(gpr_inst_dir) ++ mkdir -p $(DESTDIR)$(lib_inst_dir) ++ $(INSTALL_DATA) libgnatvsn.a libgnatvsn.so.* $(DESTDIR)$(lib_inst_dir) ++ cd $(DESTDIR)$(lib_inst_dir) && ln -sf libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so ++ mkdir -p $(DESTDIR)$(src_inst_dir) ++ $(INSTALL_DATA) *.adb *.ads *.c *.h $(DESTDIR)$(src_inst_dir) ++ mkdir -p $(DESTDIR)$(ali_inst_dir) ++ $(INSTALL) -m 0444 *.ali $(DESTDIR)$(ali_inst_dir) ++ ++clean: ++ rm -fr obj-static obj-shared ++ rm -f *.ali libgnatvsn* *.adb *.ads *.c *.h gnatvsn.gpr ++ rm -f Makefile config.log +--- a/src/Makefile.def ++++ b/src/Makefile.def +@@ -187,6 +187,16 @@ + missing= TAGS; + missing= install-info; + missing= installcheck; }; ++target_modules = { module= libgnatvsn; no_check=true; ++ missing= info; ++ missing= dvi; ++ missing= html; ++ missing= pdf; ++ missing= install-html; ++ missing= install-pdf; ++ missing= TAGS; ++ missing= install-info; ++ missing= installcheck; }; + target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; }; + target_modules = { module= libitm; lib_path=.libs; }; + target_modules = { module= libatomic; lib_path=.libs; }; +@@ -385,6 +395,8 @@ + dependencies = { module=all-target-libada; on=all-gcc; }; + dependencies = { module=all-gnattools; on=all-target-libada; }; + dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; }; ++dependencies = { module=all-gnattools; on=all-target-libgnatvsn; }; ++dependencies = { module=all-target-libgnatvsn; on=all-target-libada; }; + + // Depending on the specific configuration, the LTO plugin will either use the + // generic libiberty build or the specific build for linker plugins. +--- a/src/configure.ac ++++ b/src/configure.ac +@@ -171,6 +171,7 @@ + target-libobjc \ + target-libada \ + ${target_libiberty} \ ++ target-libgnatvsn \ + target-libgo" + + # these tools are built using the target libraries, and are intended to +@@ -455,7 +456,7 @@ + ENABLE_LIBADA=$enableval, + ENABLE_LIBADA=yes) + if test "${ENABLE_LIBADA}" != "yes" ; then +- noconfigdirs="$noconfigdirs gnattools" ++ noconfigdirs="$noconfigdirs target-libgnatvsn gnattools" + fi + + AC_ARG_ENABLE(libssp, +--- a/src/gcc/ada/gcc-interface/config-lang.in ++++ b/src/gcc/ada/gcc-interface/config-lang.in +@@ -34,7 +34,7 @@ + + outputs="ada/gcc-interface/Makefile ada/Makefile" + +-target_libs="target-libada" ++target_libs="target-libada target-libgnatvsn" + lang_dirs="libada gnattools" + + # Ada is not enabled by default for the time being. --- gcc-7-7.2.0.orig/debian/patches/ada-library-project-files-soname.diff +++ gcc-7-7.2.0/debian/patches/ada-library-project-files-soname.diff @@ -0,0 +1,88 @@ +Description: when linking an Ada shared library, avoid modifying user soname + In project files, use the exact Library_Version provided, if any, as + the soname of libraries; do not strip minor version numbers + . + GNAT has been announcing the removal of support for GPR projects + since gcc-6. + Gnatlink will then stop being able to link shared libraries. + This probably explains why upstream is not interested in this patch. +Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40025 +Author: Ludovic Brenta + +Index: b/src/gcc/ada/mlib-tgt-specific-linux.adb +=================================================================== +--- a/src/gcc/ada/mlib-tgt-specific-linux.adb ++++ b/src/gcc/ada/mlib-tgt-specific-linux.adb +@@ -50,6 +50,8 @@ package body MLib.Tgt.Specific is + + function Is_Archive_Ext (Ext : String) return Boolean; + ++ function Library_Major_Minor_Id_Supported return Boolean; ++ + --------------------------- + -- Build_Dynamic_Library -- + --------------------------- +@@ -142,7 +144,18 @@ package body MLib.Tgt.Specific is + return Ext = ".a" or else Ext = ".so"; + end Is_Archive_Ext; + ++ -------------------------------------- ++ -- Library_Major_Minor_Id_Supported -- ++ -------------------------------------- ++ ++ function Library_Major_Minor_Id_Supported return Boolean is ++ begin ++ return False; ++ end Library_Major_Minor_Id_Supported; ++ + begin + Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access; + Is_Archive_Ext_Ptr := Is_Archive_Ext'Access; ++ Library_Major_Minor_Id_Supported_Ptr := ++ Library_Major_Minor_Id_Supported'Access; + end MLib.Tgt.Specific; +Index: b/src/gcc/ada/mlib.adb +=================================================================== +--- a/src/gcc/ada/mlib.adb ++++ b/src/gcc/ada/mlib.adb +@@ -30,6 +30,7 @@ with System; + with Opt; + with Output; use Output; + ++with MLib.Tgt; + with MLib.Utl; use MLib.Utl; + + with Prj.Com; +@@ -393,7 +394,11 @@ package body MLib is + -- Major_Id_Name -- + ------------------- + +- function Major_Id_Name ++ function Major_Id_Name_If_Supported ++ (Lib_Filename : String; ++ Lib_Version : String) ++ return String; ++ function Major_Id_Name_If_Supported + (Lib_Filename : String; + Lib_Version : String) + return String +@@ -447,6 +452,19 @@ package body MLib is + else + return ""; + end if; ++ end Major_Id_Name_If_Supported; ++ ++ function Major_Id_Name ++ (Lib_Filename : String; ++ Lib_Version : String) ++ return String ++ is ++ begin ++ if MLib.Tgt.Library_Major_Minor_Id_Supported then ++ return Major_Id_Name_If_Supported (Lib_Filename, Lib_Version); ++ else ++ return ""; ++ end if; + end Major_Id_Name; + + ------------------------------- --- gcc-7-7.2.0.orig/debian/patches/ada-link-lib.diff +++ gcc-7-7.2.0/debian/patches/ada-link-lib.diff @@ -0,0 +1,161 @@ +Description: adapt libgnat build for Debian + Don't include a runtime link path (-rpath), when linking binaries. + . + Build the shared libraries on hppa-linux (see #786692 below). + TODO: ask the reporter (no porterbox) to attempt a rebuild without this + chunk, now that we diverge less from upstream. + . + Instead of building libada as a target library only, build it as + both a host and, if different, target library. + . + Compile with -gnatn, link with --as-needed -z defs. + . + Please read ada-changes-in-autogen-output.diff about src/Makefile.def. +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786692 +Forwarded: not-needed +Author: Ludovic Brenta +Author: Nicolas Boulenguez +Author: Matthias Klose + +--- a/src/gcc/ada/gcc-interface/config-lang.in ++++ b/src/gcc/ada/gcc-interface/config-lang.in +@@ -35,7 +35,7 @@ + outputs="ada/gcc-interface/Makefile ada/Makefile" + + target_libs="target-libada" +-lang_dirs="gnattools" ++lang_dirs="libada gnattools" + + # Ada is not enabled by default for the time being. + build_by_default=no +--- a/src/gcc/ada/link.c ++++ b/src/gcc/ada/link.c +@@ -106,9 +106,9 @@ + #elif defined (__FreeBSD__) || defined (__DragonFly__) \ + || defined (__NetBSD__) || defined (__OpenBSD__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; +@@ -128,9 +128,9 @@ + + #elif defined (__linux__) || defined (__GLIBC__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; +--- a/src/libada/Makefile.in ++++ b/src/libada/Makefile.in +@@ -78,10 +78,10 @@ + # by recursive make invocations in gcc/ada/Makefile.in + LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ +- "LDFLAGS=$(LDFLAGS)" \ ++ "LDFLAGS=$(LDFLAGS) -Wl,--as-needed -Wl,-z,defs" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ +- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ ++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) -gnatn" \ + "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ + "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG)" \ +--- a/src/Makefile.def ++++ b/src/Makefile.def +@@ -122,7 +122,16 @@ + missing=distclean; + missing=maintainer-clean; }; + host_modules= { module= utils; no_check=true; }; +-host_modules= { module= gnattools; }; ++host_modules= { module= gnattools; no_check=true; ++ missing= info; ++ missing= dvi; ++ missing= html; ++ missing= pdf; ++ missing= install-pdf; ++ missing= install-html; ++ missing= TAGS; ++ missing= install-info; ++ missing= installcheck; }; + host_modules= { module= lto-plugin; bootstrap=true; + extra_configure_flags='--enable-shared @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@'; + extra_make_flags='@extra_linker_plugin_flags@'; }; +@@ -168,7 +177,16 @@ + target_modules = { module= libffi; no_install=true; }; + target_modules = { module= zlib; }; + target_modules = { module= rda; }; +-target_modules = { module= libada; }; ++target_modules = { module= libada; no_install=true; no_check=true; ++ missing= info; ++ missing= dvi; ++ missing= html; ++ missing= pdf; ++ missing= install-html; ++ missing= install-pdf; ++ missing= TAGS; ++ missing= install-info; ++ missing= installcheck; }; + target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; }; + target_modules = { module= libitm; lib_path=.libs; }; + target_modules = { module= libatomic; lib_path=.libs; }; +@@ -364,6 +382,7 @@ + + dependencies = { module=all-fixincludes; on=all-libiberty; }; + ++dependencies = { module=all-target-libada; on=all-gcc; }; + dependencies = { module=all-gnattools; on=all-target-libada; }; + dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; }; + +--- a/src/configure.ac ++++ b/src/configure.ac +@@ -142,6 +142,11 @@ + # If --enable-gold is used, "gold" may replace "ld". + host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools" + ++case "${target}" in ++ hppa64-*linux*) ;; ++ *) target_libiberty="target-libiberty";; ++esac ++ + # these libraries are built for the target environment, and are built after + # the host libraries and the host tools (which may be a cross compiler) + # Note that libiberty is not a target library. +@@ -165,6 +170,7 @@ + target-libffi \ + target-libobjc \ + target-libada \ ++ ${target_libiberty} \ + target-libgo" + + # these tools are built using the target libraries, and are intended to +--- a/src/gcc/ada/gcc-interface/Make-lang.in ++++ b/src/gcc/ada/gcc-interface/Make-lang.in +@@ -45,7 +45,7 @@ + + + # Extra flags to pass to recursive makes. +-COMMON_ADAFLAGS= -gnatpg ++COMMON_ADAFLAGS= -gnatpgn + ifeq ($(TREECHECKING),) + CHECKING_ADAFLAGS= + else +@@ -211,7 +211,7 @@ + endif + + # Strip -Werror during linking for the LTO bootstrap +-GCC_LINKERFLAGS = $(filter-out -Werror, $(ALL_LINKERFLAGS)) ++GCC_LINKERFLAGS = $(filter-out -Werror, $(ALL_LINKERFLAGS)) -Wl,--as-needed -Wl,-z,defs + + GCC_LINK=$(LINKER) $(GCC_LINKERFLAGS) $(LDFLAGS) + GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS) $(LDFLAGS) --- gcc-7-7.2.0.orig/debian/patches/ada-link-shlib.diff +++ gcc-7-7.2.0/debian/patches/ada-link-shlib.diff @@ -0,0 +1,97 @@ +Description: when linking Ada shared libraries, list dependencies after objects + In gnatlink, pass the options and libraries after objects to the + linker to avoid link failures with --as-needed. + This option is activated by default on the GNU gold linker. + . + GNAT has been announcing the removal of support for GPR projects + since gcc-6. + Gnatlink will then stop being able to link shared libraries. + This probably explains why upstream is not interested in this patch. +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680292 +Author: Matthias Klose +Forwarded: http://gcc.gnu.org/ml/gcc-patches/2013-04/msg01132.html + +--- a/src/gcc/ada/mlib-tgt-specific-linux.adb ++++ b/src/gcc/ada/mlib-tgt-specific-linux.adb +@@ -81,19 +81,54 @@ + Version_Arg : String_Access; + Symbolic_Link_Needed : Boolean := False; + ++ N_Options : Argument_List := Options; ++ Options_Last : Natural := N_Options'Last; ++ -- After moving -lxxx to Options_2, N_Options up to index Options_Last ++ -- will contain the Options to pass to MLib.Utl.Gcc. ++ ++ Real_Options_2 : Argument_List (1 .. Options'Length); ++ Real_Options_2_Last : Natural := 0; ++ -- Real_Options_2 up to index Real_Options_2_Last will contain the ++ -- Options_2 to pass to MLib.Utl.Gcc. ++ + begin + if Opt.Verbose_Mode then + Write_Str ("building relocatable shared library "); + Write_Line (Lib_Path); + end if; + ++ -- Move all -lxxx to Options_2 ++ ++ declare ++ Index : Natural := N_Options'First; ++ Arg : String_Access; ++ ++ begin ++ while Index <= Options_Last loop ++ Arg := N_Options (Index); ++ ++ if Arg'Length > 2 ++ and then Arg (Arg'First .. Arg'First + 1) = "-l" ++ then ++ Real_Options_2_Last := Real_Options_2_Last + 1; ++ Real_Options_2 (Real_Options_2_Last) := Arg; ++ N_Options (Index .. Options_Last - 1) := ++ N_Options (Index + 1 .. Options_Last); ++ Options_Last := Options_Last - 1; ++ ++ else ++ Index := Index + 1; ++ end if; ++ end loop; ++ end; ++ + if Lib_Version = "" then + Utl.Gcc + (Output_File => Lib_Path, + Objects => Ofiles, +- Options => Options, ++ Options => N_Options (N_Options'First .. Options_Last), + Driver_Name => Driver_Name, +- Options_2 => No_Argument_List); ++ Options_2 => Real_Options_2 (1 .. Real_Options_2_Last)); + + else + declare +@@ -111,18 +146,20 @@ + Utl.Gcc + (Output_File => Lib_Version, + Objects => Ofiles, +- Options => Options & Version_Arg, ++ Options => N_Options (N_Options'First .. Options_Last) ++ & Version_Arg, + Driver_Name => Driver_Name, +- Options_2 => No_Argument_List); ++ Options_2 => Real_Options_2 (1 .. Real_Options_2_Last)); + Symbolic_Link_Needed := Lib_Version /= Lib_Path; + + else + Utl.Gcc + (Output_File => Lib_Dir & Directory_Separator & Lib_Version, + Objects => Ofiles, +- Options => Options & Version_Arg, ++ Options => N_Options (N_Options'First .. Options_Last) ++ & Version_Arg, + Driver_Name => Driver_Name, +- Options_2 => No_Argument_List); ++ Options_2 => Real_Options_2 (1 .. Real_Options_2_Last)); + Symbolic_Link_Needed := + Lib_Dir & Directory_Separator & Lib_Version /= Lib_Path; + end if; --- gcc-7-7.2.0.orig/debian/patches/ada-nobiarch-check.diff +++ gcc-7-7.2.0/debian/patches/ada-nobiarch-check.diff @@ -0,0 +1,21 @@ +Description: For biarch builds, disable the gnat testsuite for the non-default + architecture (no biarch support in gnat yet). +Author: Matthias Klose + +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -4510,7 +4510,11 @@ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; fi ; \ +- $(RUNTEST) --tool $* $(RUNTESTFLAGS)) ++ if [ "$*" = gnat ]; then \ ++ runtestflags="`echo '$(RUNTESTFLAGS)' | sed -r 's/,-m(32|64|x32)//g;s/,-mabi=(n32|64)//g'`"; \ ++ case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \ ++ fi; \ ++ $(RUNTEST) --tool $* $$runtestflags) + + $(patsubst %,%-subtargets,$(filter-out $(lang_checks_parallelized),$(lang_checks))): check-%-subtargets: + @echo check-$* --- gcc-7-7.2.0.orig/debian/patches/ada-sjlj.diff +++ gcc-7-7.2.0/debian/patches/ada-sjlj.diff @@ -0,0 +1,501 @@ +# Please read ada-changes-in-autogen-output.diff about src/Makefile.def. + +# !!! Must be applied after ada-libgnatvsn.diff + +Index: b/src/libada-sjlj/Makefile.in +=================================================================== +--- /dev/null ++++ b/src/libada-sjlj/Makefile.in +@@ -0,0 +1,201 @@ ++# Makefile for libada. ++# Copyright (C) 2003-2015 Free Software Foundation, Inc. ++# ++# This file 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; see the file COPYING3. If not see ++# . ++ ++# Default target; must be first. ++all: gnatlib ++ $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) ++ ++.PHONY: all ++ ++## Multilib support variables. ++MULTISRCTOP = ++MULTIBUILDTOP = ++MULTIDIRS = ++MULTISUBDIR = ++MULTIDO = true ++MULTICLEAN = true ++ ++# Standard autoconf-set variables. ++SHELL = @SHELL@ ++srcdir = @srcdir@ ++libdir = @libdir@ ++build = @build@ ++target = @target@ ++prefix = @prefix@ ++ ++# Nonstandard autoconf-set variables. ++enable_shared = @enable_shared@ ++ ++LN_S=@LN_S@ ++AWK=@AWK@ ++ ++ifeq (cp -p,$(LN_S)) ++LN_S_RECURSIVE = cp -pR ++else ++LN_S_RECURSIVE = $(LN_S) ++endif ++ ++# Variables for the user (or the top level) to override. ++objext=.o ++THREAD_KIND=native ++TRACE=no ++LDFLAGS= ++ ++# The tedious process of getting CFLAGS right. ++CFLAGS=-g ++PICFLAG = @PICFLAG@ ++GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc ++GNATLIBCFLAGS= -g -O2 ++GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) \ ++ -fexceptions -DIN_RTS @have_getipinfo@ ++ ++host_subdir = @host_subdir@ ++GCC_DIR=$(MULTIBUILDTOP)../../$(host_subdir)/gcc ++ ++target_noncanonical:=@target_noncanonical@ ++gcc_version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) ++libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)$(MULTISUBDIR) ++ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) ++ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR)) ++ ++# exeext should not be used because it's the *host* exeext. We're building ++# a *target* library, aren't we?!? Likewise for CC. Still, provide bogus ++# definitions just in case something slips through the safety net provided ++# by recursive make invocations in gcc/ada/Makefile.in ++LIBADA_FLAGS_TO_PASS = \ ++ "MAKEOVERRIDES=" \ ++ "LDFLAGS=$(LDFLAGS)" \ ++ "LN_S=$(LN_S)" \ ++ "SHELL=$(SHELL)" \ ++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ ++ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ ++ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ ++ "PICFLAG_FOR_TARGET=$(PICFLAG)" \ ++ "THREAD_KIND=$(THREAD_KIND)" \ ++ "TRACE=$(TRACE)" \ ++ "MULTISUBDIR=$(MULTISUBDIR)" \ ++ "libsubdir=$(libsubdir)" \ ++ "objext=$(objext)" \ ++ "prefix=$(prefix)" \ ++ "exeext=.exeext.should.not.be.used " \ ++ 'CC=the.host.compiler.should.not.be.needed' \ ++ "GCC_FOR_TARGET=$(CC)" \ ++ "CFLAGS=$(CFLAGS)" \ ++ "RTSDIR=rts-sjlj" ++ ++# Rules to build gnatlib. ++.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool ++gnatlib: gnatlib-sjlj ++ ++gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile ++ test -f stamp-libada || \ ++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \ ++ && touch stamp-libada ++ -rm -rf adainclude ++ -rm -rf adalib ++ $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude ++ $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib ++ ++gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile ++ test -f stamp-libada || \ ++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \ ++ && touch stamp-libada-sjlj ++ -rm -rf adainclude ++ -rm -rf adalib ++ $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude ++ $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib ++ ++osconstool: ++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons ++ ++install-gnatlib: $(GCC_DIR)/ada/Makefile ++ $(MAKE) -C $(GCC_DIR)/ada $(AM_MAKEFLAGS) $(LIBADA_FLAGS_TO_PASS) install-gnatlib-sjlj ++ ++# Check uninstalled version. ++check: ++ ++# Check installed version. ++installcheck: ++ ++# Build info (none here). ++info: ++ ++# Build DVI (none here). ++dvi: ++ ++# Build PDF (none here). ++pdf: ++ ++# Build html (none here). ++html: ++ ++# Build TAGS (none here). ++TAGS: ++ ++.PHONY: check installcheck info dvi pdf html ++ ++# Installation rules. ++install: install-gnatlib ++ $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) ++ ++install-strip: install ++ ++install-info: ++ ++install-pdf: ++ ++install-html: ++ ++.PHONY: install install-strip install-info install-pdf install-html ++ ++# Cleaning rules. ++mostlyclean: ++ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE) ++ ++clean: ++ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE) ++ ++distclean: ++ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE) ++ $(RM) Makefile config.status config.log ++ ++maintainer-clean: ++ ++.PHONY: mostlyclean clean distclean maintainer-clean ++ ++# Rules for rebuilding this Makefile. ++Makefile: $(srcdir)/Makefile.in config.status ++ CONFIG_FILES=$@ ; \ ++ CONFIG_HEADERS= ; \ ++ $(SHELL) ./config.status ++ ++config.status: $(srcdir)/configure ++ $(SHELL) ./config.status --recheck ++ ++AUTOCONF = autoconf ++configure_deps = \ ++ $(srcdir)/configure.ac \ ++ $(srcdir)/../config/acx.m4 \ ++ $(srcdir)/../config/override.m4 \ ++ $(srcdir)/../config/multi.m4 ++ ++$(srcdir)/configure: @MAINT@ $(configure_deps) ++ cd $(srcdir) && $(AUTOCONF) ++ ++# Don't export variables to the environment, in order to not confuse ++# configure. ++.NOEXPORT: +Index: b/src/libada-sjlj/configure.ac +=================================================================== +--- /dev/null ++++ b/src/libada-sjlj/configure.ac +@@ -0,0 +1,152 @@ ++# Configure script for libada. ++# Copyright (C) 2003-2016 Free Software Foundation, Inc. ++# ++# This file 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; see the file COPYING3. If not see ++# . ++ ++sinclude(../config/acx.m4) ++sinclude(../config/multi.m4) ++sinclude(../config/override.m4) ++sinclude(../config/picflag.m4) ++sinclude(../config/unwind_ipinfo.m4) ++ ++AC_INIT ++AC_PREREQ([2.64]) ++ ++AC_CONFIG_SRCDIR([Makefile.in]) ++ ++# Determine the host, build, and target systems ++AC_CANONICAL_BUILD ++AC_CANONICAL_HOST ++AC_CANONICAL_TARGET ++target_alias=${target_alias-$host_alias} ++ ++# Determine the noncanonical target name, for directory use. ++ACX_NONCANONICAL_TARGET ++ ++# Determine the target- and build-specific subdirectories ++GCC_TOPLEV_SUBDIRS ++ ++# Command-line options. ++# Very limited version of AC_MAINTAINER_MODE. ++AC_ARG_ENABLE([maintainer-mode], ++ [AC_HELP_STRING([--enable-maintainer-mode], ++ [enable make rules and dependencies not useful (and ++ sometimes confusing) to the casual installer])], ++ [case ${enable_maintainer_mode} in ++ yes) MAINT='' ;; ++ no) MAINT='#' ;; ++ *) AC_MSG_ERROR([--enable-maintainer-mode must be yes or no]) ;; ++ esac ++ maintainer_mode=${enableval}], ++ [MAINT='#']) ++AC_SUBST([MAINT])dnl ++ ++AM_ENABLE_MULTILIB(, ..) ++# Calculate toolexeclibdir ++# Also toolexecdir, though it's only used in toolexeclibdir ++case ${enable_version_specific_runtime_libs} in ++ yes) ++ # Need the gcc compiler version to know where to install libraries ++ # and header files if --enable-version-specific-runtime-libs option ++ # is selected. ++ toolexecdir='$(libdir)/gcc/$(target_alias)' ++ toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' ++ ;; ++ no) ++ if test -n "$with_cross_host" && ++ test x"$with_cross_host" != x"no"; then ++ # Install a library built with a cross compiler in tooldir, not libdir. ++ toolexecdir='$(exec_prefix)/$(target_alias)' ++ toolexeclibdir='$(toolexecdir)/lib' ++ else ++ toolexecdir='$(libdir)/gcc-lib/$(target_alias)' ++ toolexeclibdir='$(libdir)' ++ fi ++ multi_os_directory=`$CC -print-multi-os-directory` ++ case $multi_os_directory in ++ .) ;; # Avoid trailing /. ++ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; ++ esac ++ ;; ++esac ++AC_SUBST(toolexecdir) ++AC_SUBST(toolexeclibdir) ++#TODO: toolexeclibdir is currently disregarded ++ ++# Check the compiler. ++# The same as in boehm-gc and libstdc++. Have to borrow it from there. ++# We must force CC to /not/ be precious variables; otherwise ++# the wrong, non-multilib-adjusted value will be used in multilibs. ++# As a side effect, we have to subst CFLAGS ourselves. ++ ++m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) ++m4_define([_AC_ARG_VAR_PRECIOUS],[]) ++AC_PROG_CC ++m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) ++ ++AC_SUBST(CFLAGS) ++ ++AC_ARG_ENABLE([shared], ++[AC_HELP_STRING([--disable-shared], ++ [don't provide a shared libgnat])], ++[ ++case $enable_shared in ++ yes | no) ;; ++ *) ++ enable_shared=no ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," ++ for pkg in $enableval; do ++ case $pkg in ++ ada | libada) ++ enable_shared=yes ;; ++ esac ++ done ++ IFS="$ac_save_ifs" ++ ;; ++esac ++], [enable_shared=yes]) ++AC_SUBST([enable_shared]) ++ ++GCC_PICFLAG ++AC_SUBST([PICFLAG]) ++ ++# These must be passed down, or are needed by gcc/libgcc.mvars ++AC_PROG_AWK ++AC_PROG_LN_S ++ ++# Determine what GCC version number to use in filesystem paths. ++GCC_BASE_VER ++ ++# Determine what to build for 'gnatlib' ++if test ${enable_shared} = yes ; then ++ # Note that build=target is almost certainly the wrong test; FIXME ++ default_gnatlib_target="gnatlib-shared" ++else ++ default_gnatlib_target="gnatlib-plain" ++fi ++AC_SUBST([default_gnatlib_target]) ++ ++# Check for _Unwind_GetIPInfo ++GCC_CHECK_UNWIND_GETIPINFO ++have_getipinfo= ++if test x$have_unwind_getipinfo = xyes; then ++ have_getipinfo=-DHAVE_GETIPINFO ++fi ++AC_SUBST(have_getipinfo) ++ ++# Output: create a Makefile. ++AC_CONFIG_FILES([Makefile]) ++ ++AC_OUTPUT +Index: b/src/Makefile.def +=================================================================== +--- a/src/Makefile.def ++++ b/src/Makefile.def +@@ -197,6 +197,7 @@ target_modules = { module= libgnatvsn; n + missing= TAGS; + missing= install-info; + missing= installcheck; }; ++target_modules = { module= libada-sjlj; }; + target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; }; + target_modules = { module= libitm; lib_path=.libs; }; + target_modules = { module= libatomic; lib_path=.libs; }; +@@ -393,6 +394,7 @@ dependencies = { module=all-libcpp; on=a + dependencies = { module=all-fixincludes; on=all-libiberty; }; + + dependencies = { module=all-target-libada; on=all-gcc; }; ++dependencies = { module=all-target-libada-sjlj; on=all-target-libada; }; + dependencies = { module=all-gnattools; on=all-target-libada; }; + dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; }; + dependencies = { module=all-gnattools; on=all-target-libgnatvsn; }; +Index: b/src/configure.ac +=================================================================== +--- a/src/configure.ac ++++ b/src/configure.ac +@@ -170,6 +170,7 @@ target_libraries="target-libgcc \ + target-libffi \ + target-libobjc \ + target-libada \ ++ target-libada-sjlj \ + ${target_libiberty} \ + target-libgnatvsn \ + target-libgo" +@@ -456,7 +457,7 @@ AC_ARG_ENABLE(libada, + ENABLE_LIBADA=$enableval, + ENABLE_LIBADA=yes) + if test "${ENABLE_LIBADA}" != "yes" ; then +- noconfigdirs="$noconfigdirs target-libgnatvsn gnattools" ++ noconfigdirs="$noconfigdirs target-libgnatvsn gnattools target-libada-sjlj" + fi + + AC_ARG_ENABLE(libssp, +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -190,7 +190,7 @@ TOOLSCASE = + + # Multilib handling + MULTISUBDIR = +-RTSDIR = rts$(subst /,_,$(MULTISUBDIR)) ++RTSDIR := rts$(subst /,_,$(MULTISUBDIR)) + + # Link flags used to build gnat tools. By default we prefer to statically + # link with libgcc to avoid a dependency on shared libgcc (which is tricky +@@ -2728,6 +2728,26 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD + cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb + cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads + ++install-gnatlib-sjlj: ../stamp-gnatlib-$(RTSDIR) ++# Create the directory before deleting it, in case the directory is ++# a list of directories (as it may be on VMS). This ensures we are ++# deleting the right one. ++ -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) ++ -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) ++ $(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) ++ $(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) ++ -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) ++ -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) ++ for file in $(RTSDIR)/*.ali; do \ ++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ); \ ++ done ++ # This copy must be done preserving the date on the original file. ++ for file in $(RTSDIR)/*.ad?; do \ ++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); \ ++ done ++ cd $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); $(CHMOD) a-wx *.adb ++ cd $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); $(CHMOD) a-wx *.ads ++ + ../stamp-gnatlib2-$(RTSDIR): + $(RM) $(RTSDIR)/s-*.ali + $(RM) $(RTSDIR)/s-*$(objext) +@@ -3009,7 +3029,7 @@ gnatlib-shared: + # commenting the pragma instead of deleting the line, as the latter might + # result in getting multiple blank lines, hence possible style check errors. + gnatlib-sjlj: +- $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" \ ++ $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" RTSDIR="$(RTSDIR)" \ + THREAD_KIND="$(THREAD_KIND)" ../stamp-gnatlib1-$(RTSDIR) + sed \ + -e 's/Frontend_Exceptions.*/Frontend_Exceptions : constant Boolean := True;/' \ +@@ -3018,6 +3038,7 @@ gnatlib-sjlj: + $(RTSDIR)/system.ads > $(RTSDIR)/s.ads + $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads + $(MAKE) $(FLAGS_TO_PASS) \ ++ RTSDIR="$(RTSDIR)" \ + EH_MECHANISM="" \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ +@@ -3069,6 +3090,8 @@ b_gnatm.o : b_gnatm.adb + + ADA_INCLUDE_DIR = $(libsubdir)/adainclude + ADA_RTL_OBJ_DIR = $(libsubdir)/adalib ++ADA_INCLUDE_DIR_SJLJ = $(libsubdir)/rts-sjlj/adainclude ++ADA_RTL_OBJ_DIR_SJLJ = $(libsubdir)/rts-sjlj/adalib + + # Special flags + +Index: b/src/gcc/ada/gcc-interface/config-lang.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/config-lang.in ++++ b/src/gcc/ada/gcc-interface/config-lang.in +@@ -34,8 +34,8 @@ gtfiles="\$(srcdir)/ada/gcc-interface/ad + + outputs="ada/gcc-interface/Makefile ada/Makefile" + +-target_libs="target-libada target-libgnatvsn" +-lang_dirs="libada gnattools" ++target_libs="target-libada target-libgnatvsn target-libada-sjlj" ++lang_dirs="libada gnattools libada-sjlj" + + # Ada is not enabled by default for the time being. + build_by_default=no +Index: b/src/gcc/ada/gcc-interface/Make-lang.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Make-lang.in ++++ b/src/gcc/ada/gcc-interface/Make-lang.in +@@ -788,6 +788,7 @@ ada.install-common: + + install-gnatlib: + $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib$(LIBGNAT_TARGET) ++ $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) RTSDIR="rts-sjlj" install-gnatlib-sjlj$(LIBGNAT_TARGET) + + install-gnatlib-obj: + $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib-obj --- gcc-7-7.2.0.orig/debian/patches/ada-symbolic-tracebacks.diff +++ gcc-7-7.2.0/debian/patches/ada-symbolic-tracebacks.diff @@ -0,0 +1,401 @@ +# DP: - Enable support for symbolic tracebacks in exceptions (delete the dummy +# DP: convert_addresses from adaint.c, and provide a real one separately.) + +Ported Jürgen Pfeifer's patch to enable symbolic tracebacks on Debian +GNU/Linux. + +The binary distribution of GNAT 3.15p comes with an old version of +binutils that includes a library, libaddr2line.a. This library does +not exist in recent versions of binutils. The patch works around this +by calling /usr/bin/addr2line (still part of binutils) and parsing the +output. See debian/convert_addresses.c for the gory details. + +I have modified convert_addresses.c to not use a shell script anymore; +Debian controls the version of binutils which is installed. Also, I +use execve instead of execle. + +-- +Ludovic Brenta. + +# ' make emacs highlighting happy + +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -270,7 +270,8 @@ + # Both . and srcdir are used, in that order, + # so that tm.h and config.h will be found in the compilation + # subdirectory rather than in the source directory. +-INCLUDES = -I- -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(ftop_srcdir)/include $(GMPINC) ++INCLUDES = -iquote . -iquote .. -iquote $(srcdir)/ada -iquote $(srcdir) \ ++ -iquote $(ftop_srcdir)/include $(GMPINC) + + ADA_INCLUDES = -I- -I. -I$(srcdir)/ada + +@@ -2426,7 +2427,7 @@ + # library. LIBGNAT_OBJS is the list of object files for libgnat. + # thread.c is special as put into GNATRTL_TASKING_OBJS by Makefile.rtl + LIBGNAT_OBJS = adadecode.o adaint.o argv.o aux-io.o \ +- cal.o cio.o cstreams.o ctrl_c.o \ ++ cal.o cio.o convert_addresses.o cstreams.o ctrl_c.o \ + env.o errno.o exit.o expect.o final.o \ + init.o initialize.o locales.o mkdir.o \ + raise.o seh_init.o socket.o sysdep.o \ +@@ -3104,6 +3105,7 @@ + socket.o : socket.c gsocket.h + sysdep.o : sysdep.c + raise.o : raise.c raise.h ++convert_addresses.o : convert_addresses.c + sigtramp-armdroid.o : sigtramp-armdroid.c sigtramp.h + sigtramp-armvxw.o : sigtramp-armvxw.c sigtramp.h + sigtramp-ppcvxw.o : sigtramp-ppcvxw.c sigtramp.h +Index: b/src/gcc/ada/adaint.c +=================================================================== +--- a/src/gcc/ada/adaint.c ++++ b/src/gcc/ada/adaint.c +@@ -3608,35 +3608,6 @@ + } + #endif + +-#if defined (IS_CROSS) \ +- || (! ((defined (sparc) || defined (i386)) && defined (sun) \ +- && defined (__SVR4)) \ +- && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \ +- && ! (defined (linux) && defined (__ia64__)) \ +- && ! (defined (linux) && defined (powerpc)) \ +- && ! defined (__FreeBSD__) \ +- && ! defined (__Lynx__) \ +- && ! defined (__hpux__) \ +- && ! defined (__APPLE__) \ +- && ! defined (_AIX) \ +- && ! defined (VMS) \ +- && ! defined (__MINGW32__)) +- +-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional +- just above for a list of native platforms that provide a non-dummy +- version of this procedure in libaddr2line.a. */ +- +-void +-convert_addresses (const char *file_name ATTRIBUTE_UNUSED, +- void *addrs ATTRIBUTE_UNUSED, +- int n_addr ATTRIBUTE_UNUSED, +- void *buf ATTRIBUTE_UNUSED, +- int *len ATTRIBUTE_UNUSED) +-{ +- *len = 0; +-} +-#endif +- + #if defined (_WIN32) + int __gnat_argument_needs_quote = 1; + #else +Index: b/src/gcc/ada/convert_addresses.c +=================================================================== +--- /dev/null ++++ b/src/gcc/ada/convert_addresses.c +@@ -0,0 +1,159 @@ ++/* ++ Copyright (C) 1999 by Juergen Pfeifer ++ Ada for Linux Team (ALT) ++ ++ Permission is hereby granted, free of charge, to any person obtaining a ++ copy of this software and associated documentation files (the ++ "Software"), to deal in the Software without restriction, including ++ without limitation the rights to use, copy, modify, merge, publish, ++ distribute, distribute with modifications, sublicense, and/or sell ++ copies of the Software, and to permit persons to whom the Software is ++ furnished to do so, subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, ++ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR ++ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR ++ THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++ Except as contained in this notice, the name(s) of the above copyright ++ holders shall not be used in advertising or otherwise to promote the ++ sale, use or other dealings in this Software without prior written ++ authorization. ++*/ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define STDIN_FILENO 0 ++#define STDOUT_FILENO 1 ++#define MAX_LINE 1024 ++ ++#define CLOSE1 close(fd1[0]); close(fd1[1]) ++#define CLOSE2 close(fd2[0]); close(fd2[1]) ++#define RESTSIG sigaction(SIGPIPE,&oact,NULL) ++ ++void convert_addresses ++(const char const *file_name, ++ void* addrs[], ++ int n_addr, ++ char* buf, ++ int* len) ++{ ++ int max_len = *len; ++ pid_t child; ++ ++ struct sigaction act, oact; ++ ++ int fd1[2], fd2[2]; ++ ++ if (!file_name) { ++ return; ++ } ++ ++ *buf = 0; *len = 0; ++ act.sa_handler = SIG_IGN; ++ sigemptyset(&act.sa_mask); ++ act.sa_flags = 0; ++ if (sigaction(SIGPIPE,&act,&oact) < 0) ++ return; ++ ++ if (pipe(fd1) >= 0) { ++ if (pipe(fd2)>=0) { ++ if ((child = fork()) < 0) { ++ CLOSE1; CLOSE2; RESTSIG; ++ return; ++ } ++ else { ++ if (0==child) { ++ close(fd1[1]); ++ close(fd2[0]); ++ if (fd1[0] != STDIN_FILENO) { ++ if (dup2(fd1[0],STDIN_FILENO) != STDIN_FILENO) { ++ CLOSE1; CLOSE2; ++ } ++ close(fd1[0]); ++ } ++ if (fd2[1] != STDOUT_FILENO) { ++ if (dup2(fd2[1],STDOUT_FILENO) != STDOUT_FILENO) { ++ CLOSE1; CLOSE2; ++ } ++ close(fd2[1]); ++ } ++ { ++ /* As pointed out by Florian Weimer to me, it is a ++ security threat to call the script with a user defined ++ environment and using the path. That would be Trojans ++ pleasure. Therefore we use the absolute path to ++ addr2line and an empty environment. That should be ++ safe. ++ */ ++ char *file_name_for_execve = strdup (file_name); /* non-const */ ++ char *const argv[] = { "addr2line", ++ "-e", ++ file_name_for_execve, ++ "--demangle=gnat", ++ "--functions", ++ "--basenames", ++ NULL }; ++ char *const envp[] = { NULL }; ++ if (execve("/usr/bin/addr2line", argv, envp) < 0) { ++ CLOSE1; CLOSE2; ++ } ++ if (file_name_for_execve) { free (file_name_for_execve); } ++ } ++ } ++ else { ++ int i, n; ++ char hex[16]; ++ char line[MAX_LINE + 1]; ++ char *p; ++ char *s = buf; ++ ++ /* Parent context */ ++ close(fd1[0]); ++ close(fd2[1]); ++ ++ for(i=0; i < n_addr; i++) { ++ snprintf(hex,sizeof(hex),"%p\n",addrs[i]); ++ write(fd1[1],hex,strlen(hex)); ++ n = read(fd2[0],line,MAX_LINE); ++ if (n<=0) ++ break; ++ line[n]=0; ++ /* We have approx. 16 additional chars for "%p in " clause. ++ We use this info to prevent a buffer overrun. ++ */ ++ if (n + 16 + (*len) > max_len) ++ break; ++ p = strchr(line,'\n'); ++ if (p) { ++ if (*(p+1)) { ++ *p = 0; ++ *len += snprintf(s, (max_len - (*len)), "%p in %s at %s",addrs[i], line, p+1); ++ } ++ else { ++ *len += snprintf(s, (max_len - (*len)), "%p at %s",addrs[i], line); ++ } ++ s = buf + (*len); ++ } ++ } ++ close(fd1[1]); ++ close(fd2[0]); ++ } ++ } ++ } ++ else { ++ CLOSE1; ++ } ++ } ++ RESTSIG; ++} +Index: b/src/gcc/ada/g-trasym.adb +=================================================================== +--- a/src/gcc/ada/g-trasym.adb ++++ b/src/gcc/ada/g-trasym.adb +@@ -33,40 +33,110 @@ + -- is not supported. It returns tracebacks as lists of LF separated strings of + -- the form "0x..." corresponding to the addresses. + ++with System.Soft_Links; + with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback; +-with System.Address_Image; + + package body GNAT.Traceback.Symbolic is + ++ package TSL renames System.Soft_Links; ++ ++ -- To perform the raw addresses to symbolic form translation we rely on a ++ -- libaddr2line symbolizer which examines debug info from a provided ++ -- executable file name, and an absolute path is needed to ensure the file ++ -- is always found. This is "__gnat_locate_exec_on_path (gnat_argv [0])" ++ -- for our executable file, a fairly heavy operation so we cache the ++ -- result. ++ ++ Exename : System.Address; ++ -- Pointer to the name of the executable file to be used on all ++ -- invocations of the libaddr2line symbolization service. ++ ++ Exename_Resolved : Boolean := False; ++ -- Flag to indicate whether we have performed the executable file name ++ -- resolution already. Relying on a not null Exename for this purpose ++ -- would be potentially inefficient as this is what we will get if the ++ -- resolution attempt fails. ++ + ------------------------ + -- Symbolic_Traceback -- + ------------------------ + + function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is ++ ++ procedure convert_addresses ++ (filename : System.Address; ++ addrs : System.Address; ++ n_addrs : Integer; ++ buf : System.Address; ++ len : System.Address); ++ pragma Import (C, convert_addresses, "convert_addresses"); ++ -- This is the procedure version of the Ada-aware addr2line. It places ++ -- in BUF a string representing the symbolic translation of the N_ADDRS ++ -- raw addresses provided in ADDRS, looked up in debug information from ++ -- FILENAME. LEN points to an integer which contains the size of the ++ -- BUF buffer at input and the result length at output. ++ -- ++ -- Note that this procedure is *not* thread-safe. ++ ++ type Argv_Array is array (0 .. 0) of System.Address; ++ gnat_argv : access Argv_Array; ++ pragma Import (C, gnat_argv, "gnat_argv"); ++ ++ function locate_exec_on_path ++ (c_exename : System.Address) return System.Address; ++ pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path"); ++ ++ B_Size : constant Integer := 256 * Traceback'Length; ++ Len : Integer := B_Size; ++ Res : String (1 .. B_Size); ++ ++ use type System.Address; ++ + begin ++ -- The symbolic translation of an empty set of addresses is an empty ++ -- string. ++ + if Traceback'Length = 0 then + return ""; ++ end if; + +- else +- declare +- Img : String := System.Address_Image (Traceback (Traceback'First)); ++ -- If our input set of raw addresses is not empty, resort to the ++ -- libaddr2line service to symbolize it all. + +- Result : String (1 .. (Img'Length + 3) * Traceback'Length); +- Last : Natural := 0; ++ -- Compute, cache and provide the absolute path to our executable file ++ -- name as the binary file where the relevant debug information is to be ++ -- found. If the executable file name resolution fails, we have no ++ -- sensible basis to invoke the symbolizer at all. ++ ++ -- Protect all this against concurrent accesses explicitly, as the ++ -- underlying services are potentially thread unsafe. ++ ++ TSL.Lock_Task.all; ++ ++ if not Exename_Resolved then ++ Exename := locate_exec_on_path (gnat_argv (0)); ++ Exename_Resolved := True; ++ end if; ++ ++ if Exename /= System.Null_Address then ++ Len := Res'Length; ++ convert_addresses ++ (Exename, Traceback'Address, Traceback'Length, ++ Res (1)'Address, Len'Address); ++ end if; ++ ++ TSL.Unlock_Task.all; + +- begin +- for J in Traceback'Range loop +- Img := System.Address_Image (Traceback (J)); +- Result (Last + 1 .. Last + 2) := "0x"; +- Last := Last + 2; +- Result (Last + 1 .. Last + Img'Length) := Img; +- Last := Last + Img'Length + 1; +- Result (Last) := ASCII.LF; +- end loop; ++ -- Return what the addr2line symbolizer has produced if we have called ++ -- it (the executable name resolution succeeded), or an empty string ++ -- otherwise. + +- return Result (1 .. Last); +- end; ++ if Exename /= System.Null_Address then ++ return Res (1 .. Len); ++ else ++ return ""; + end if; ++ + end Symbolic_Traceback; + + function Symbolic_Traceback (E : Exception_Occurrence) return String is +Index: b/src/gcc/ada/tracebak.c +=================================================================== +--- a/src/gcc/ada/tracebak.c ++++ b/src/gcc/ada/tracebak.c +@@ -425,7 +425,7 @@ + /* Starting with GCC 4.6, -fomit-frame-pointer is turned on by default for + 32-bit x86/Linux as well and DWARF 2 unwind tables are emitted instead. + See the x86-64 case below for the drawbacks with this approach. */ +-#if defined (linux) && (__GNUC__ * 10 + __GNUC_MINOR__ > 45) ++#if (defined (linux) || defined(__GNU__)) && (__GNUC__ * 10 + __GNUC_MINOR__ > 45) + #define USE_GCC_UNWINDER + #else + #define USE_GENERIC_UNWINDER --- gcc-7-7.2.0.orig/debian/patches/ada-tools-move-ldflags.diff +++ gcc-7-7.2.0/debian/patches/ada-tools-move-ldflags.diff @@ -0,0 +1,42 @@ +Description: For Ada tools, move LDFLAGS from GCC_LINK to TOOLS_LIBS. + Gnatlink moves GCC_LINK linker options after other options, + probably so that standard libraries come after user libraries + in case --as-needed is activated. + However, if --as-needed is activated via LDFLAGS, it is appended via + GCC_LINK and comes too late on the eventual command line. + All GCC_LINKS expansions but one are followed by an expansion of + TOOLS_LIBS, so TOOLS_LIBS seems to be the right place for LDFLAGS. +Author: Nicolas Boulenguez +Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81104 + +Index: b/src/gcc/ada/gcc-interface/Makefile.in +=================================================================== +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -247,7 +247,7 @@ LIBS = $(LIBINTL) $(LIBICONV) $(LIBBACKT + LIBDEPS = $(LIBINTL_DEP) $(LIBICONV_DEP) $(LIBBACKTRACE) $(LIBIBERTY) + # Default is no TGT_LIB; one might be passed down or something + TGT_LIB = +-TOOLS_LIBS = ../link.o ../targext.o ../../ggc-none.o ../../libcommon-target.a \ ++TOOLS_LIBS = $(LDFLAGS) ../link.o ../targext.o ../../ggc-none.o ../../libcommon-target.a \ + ../../libcommon.a ../../../libcpp/libcpp.a $(LIBGNAT) $(LIBINTL) $(LIBICONV) \ + ../$(LIBBACKTRACE) ../$(LIBIBERTY) $(SYSLIBS) $(TGT_LIB) + +@@ -2531,7 +2531,7 @@ TOOLS_FLAGS_TO_PASS= \ + "GNATLINK=$(GNATLINK)" \ + "GNATBIND=$(GNATBIND)" + +-GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS) ++GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) + + # Build directory for the tools. Let's copy the target-dependent + # sources using the same mechanism as for gnatlib. The other sources are +@@ -2629,7 +2629,7 @@ common-tools: ../stamp-tools + ../../vxaddr2line$(exeext): ../stamp-tools + $(GNATMAKE) -c $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)" + $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line +- $(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" ../targext.o $(CLIB) ++ $(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" ../targext.o $(CLIB) $(LDFLAGS) + + gnatmake-re: ../stamp-tools + $(GNATMAKE) -j0 $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)" --- gcc-7-7.2.0.orig/debian/patches/alpha-ieee-doc.diff +++ gcc-7-7.2.0/debian/patches/alpha-ieee-doc.diff @@ -0,0 +1,24 @@ +# DP: #212912 +# DP: on alpha-linux, make -mieee default and add -mieee-disable switch +# DP: to turn default off (doc patch) + +--- + gcc/doc/invoke.texi | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -9980,6 +9980,13 @@ able to correctly support denormalized numbers and exceptional IEEE + values such as not-a-number and plus/minus infinity. Other Alpha + compilers call this option @option{-ieee_with_no_inexact}. + ++DEBIAN SPECIFIC: This option is on by default for alpha-linux-gnu, unless ++@option{-ffinite-math-only} (which is part of the @option{-ffast-math} ++set) is specified, because the software functions in the GNU libc math ++libraries generate denormalized numbers, NaNs, and infs (all of which ++will cause a programs to SIGFPE when it attempts to use the results without ++@option{-mieee}). ++ + @item -mieee-with-inexact + @opindex mieee-with-inexact + This is like @option{-mieee} except the generated code also maintains --- gcc-7-7.2.0.orig/debian/patches/alpha-ieee.diff +++ gcc-7-7.2.0/debian/patches/alpha-ieee.diff @@ -0,0 +1,21 @@ +# DP: #212912 +# DP: on alpha-linux, make -mieee default and add -mieee-disable switch +# DP: to turn default off + +--- + gcc/config/alpha/alpha.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +--- a/src/gcc/config/alpha/alpha.c ++++ b/src/gcc/config/alpha/alpha.c +@@ -259,6 +259,10 @@ + int line_size = 0, l1_size = 0, l2_size = 0; + int i; + ++ /* If not -ffinite-math-only, enable -mieee*/ ++ if (!flag_finite_math_only) ++ target_flags |= MASK_IEEE|MASK_IEEE_CONFORMANT; ++ + #ifdef SUBTARGET_OVERRIDE_OPTIONS + SUBTARGET_OVERRIDE_OPTIONS; + #endif --- gcc-7-7.2.0.orig/debian/patches/alpha-no-ev4-directive.diff +++ gcc-7-7.2.0/debian/patches/alpha-no-ev4-directive.diff @@ -0,0 +1,32 @@ +# DP: never emit .ev4 directive. + +--- + gcc/config/alpha/alpha.c | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +Index: b/src/gcc/config/alpha/alpha.c +=================================================================== +--- a/src/gcc/config/alpha/alpha.c ++++ b/src/gcc/config/alpha/alpha.c +@@ -9471,7 +9471,7 @@ alpha_file_start (void) + fputs ("\t.set nomacro\n", asm_out_file); + if (TARGET_SUPPORT_ARCH | TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) + { +- const char *arch; ++ const char *arch = NULL; + + if (alpha_cpu == PROCESSOR_EV6 || TARGET_FIX || TARGET_CIX) + arch = "ev6"; +@@ -9481,10 +9481,9 @@ alpha_file_start (void) + arch = "ev56"; + else if (alpha_cpu == PROCESSOR_EV5) + arch = "ev5"; +- else +- arch = "ev4"; + +- fprintf (asm_out_file, "\t.arch %s\n", arch); ++ if (arch) ++ fprintf (asm_out_file, "\t.arch %s\n", arch); + } + } + --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-defaults.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-defaults.diff @@ -0,0 +1,92 @@ +# DP: Set MULTILIB_DEFAULTS for ARM multilib builds + +Index: b/src/gcc/config.gcc +=================================================================== +--- a/src/gcc/config.gcc ++++ b/src/gcc/config.gcc +@@ -3728,10 +3728,18 @@ case "${target}" in + done + + case "$with_float" in +- "" \ +- | soft | hard | softfp) ++ "") + # OK + ;; ++ soft) ++ tm_defines="${tm_defines} TARGET_CONFIGURED_FLOAT_ABI=0" ++ ;; ++ softfp) ++ tm_defines="${tm_defines} TARGET_CONFIGURED_FLOAT_ABI=1" ++ ;; ++ hard) ++ tm_defines="${tm_defines} TARGET_CONFIGURED_FLOAT_ABI=2" ++ ;; + *) + echo "Unknown floating point type used in --with-float=$with_float" 1>&2 + exit 1 +@@ -3765,6 +3773,9 @@ case "${target}" in + "" \ + | arm | thumb ) + #OK ++ if test "$with_mode" = thumb; then ++ tm_defines="${tm_defines} TARGET_CONFIGURED_THUMB_MODE=1" ++ fi + ;; + *) + echo "Unknown mode used in --with-mode=$with_mode" +Index: b/src/gcc/config/arm/linux-eabi.h +=================================================================== +--- a/src/gcc/config/arm/linux-eabi.h ++++ b/src/gcc/config/arm/linux-eabi.h +@@ -43,7 +43,21 @@ + target hardware. If you override this to use the hard-float ABI then + change the setting of GLIBC_DYNAMIC_LINKER_DEFAULT as well. */ + #undef TARGET_DEFAULT_FLOAT_ABI ++#ifdef TARGET_CONFIGURED_FLOAT_ABI ++#if TARGET_CONFIGURED_FLOAT_ABI == 2 ++#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD ++#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=hard" ++#elif TARGET_CONFIGURED_FLOAT_ABI == 1 ++#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFTFP ++#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=softfp" ++#else ++#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT ++#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=soft" ++#endif ++#else + #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT ++#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=soft" ++#endif + + /* We default to the "aapcs-linux" ABI so that enums are int-sized by + default. */ +@@ -97,6 +111,28 @@ + #define MUSL_DYNAMIC_LINKER \ + "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1" + ++/* Set the multilib defaults according the configuration, needed to ++ let gcc -print-multi-dir do the right thing. */ ++ ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define MULTILIB_DEFAULT_ENDIAN "mbig-endian" ++#else ++#define MULTILIB_DEFAULT_ENDIAN "mlittle-endian" ++#endif ++ ++#ifndef TARGET_CONFIGURED_THUMB_MODE ++#define MULTILIB_DEFAULT_MODE "marm" ++#elif TARGET_CONFIGURED_THUMB_MODE == 1 ++#define MULTILIB_DEFAULT_MODE "mthumb" ++#else ++#define MULTILIB_DEFAULT_MODE "marm" ++#endif ++ ++#undef MULTILIB_DEFAULTS ++#define MULTILIB_DEFAULTS \ ++ { MULTILIB_DEFAULT_MODE, MULTILIB_DEFAULT_ENDIAN, \ ++ MULTILIB_DEFAULT_FLOAT_ABI, "mno-thumb-interwork" } ++ + /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to + use the GNU/Linux version, not the generic BPABI version. */ + #undef LINK_SPEC --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-soft-cross.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-soft-cross.diff @@ -0,0 +1,27 @@ +# DP: ARM hard/soft float multilib support + +Index: b/src/gcc/config/arm/t-linux-eabi +=================================================================== +--- a/src/gcc/config/arm/t-linux-eabi ++++ b/src/gcc/config/arm/t-linux-eabi +@@ -21,6 +21,20 @@ + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++ifeq ($(with_float),hard) ++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp ++MULTILIB_OSDIRNAMES = ../libsf:arm-linux-gnueabi ../lib:arm-linux-gnueabihf ++else ++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp ++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi ../libhf:arm-linux-gnueabihf ++endif ++ + #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te + #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te + #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te* --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-soft-float.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-soft-float.diff @@ -0,0 +1,26 @@ +--- a/src/gcc/config/arm/t-linux-eabi ++++ b/src/gcc/config/arm/t-linux-eabi +@@ -24,6 +24,23 @@ + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++ifneq (,$(findstring MULTIARCH_DEFAULTS,$(tm_defines))) ++ifneq (,$(findstring __arm_linux_gnueabi__,$(tm_defines))) ++ MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard/mfloat-abi=soft ++ MULTILIB_DIRNAMES = . hf soft-float ++ MULTILIB_EXCEPTIONS = ++ MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float ++ MULTILIB_OSDIRNAMES = ../../lib/arm-linux-gnueabi ../../lib/arm-linux-gnueabihf soft-float ++endif ++ifneq (,$(findstring __arm_linux_gnueabihf__,$(tm_defines))) ++ MULTILIB_OPTIONS = mfloat-abi=hard/mfloat-abi=softfp/mfloat-abi=soft ++ MULTILIB_DIRNAMES = . sf soft-float ++ MULTILIB_EXCEPTIONS = ++ MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float ++ MULTILIB_OSDIRNAMES = ../../lib/arm-linux-gnueabihf ../../lib/arm-linux-gnueabi soft-float ++endif ++endif ++ + #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te + #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te + #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te* --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-soft.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-soft.diff @@ -0,0 +1,27 @@ +# DP: ARM hard/soft float multilib support + +Index: b/src/gcc/config/arm/t-linux-eabi +=================================================================== +--- a/src/gcc/config/arm/t-linux-eabi ++++ b/src/gcc/config/arm/t-linux-eabi +@@ -23,6 +23,20 @@ + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++ifeq ($(with_float),hard) ++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp ++MULTILIB_OSDIRNAMES = arm-linux-gnueabi:arm-linux-gnueabi ../lib:arm-linux-gnueabihf ++else ++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp ++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi arm-linux-gnueabihf:arm-linux-gnueabihf ++endif ++ + #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te + #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te + #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te* --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-softfp-cross.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-softfp-cross.diff @@ -0,0 +1,27 @@ +# DP: ARM hard/softfp float multilib support + +Index: b/src/gcc/config/arm/t-linux-eabi +=================================================================== +--- a/src/gcc/config/arm/t-linux-eabi 2011-01-03 20:52:22.000000000 +0000 ++++ b/src/gcc/config/arm/t-linux-eabi 2011-08-21 21:08:47.583351817 +0000 +@@ -24,6 +24,20 @@ + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++ifeq ($(with_float),hard) ++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft ++MULTILIB_OSDIRNAMES = ../libsf:arm-linux-gnueabi ../lib:arm-linux-gnueabihf ++else ++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft ++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi ../libhf:arm-linux-gnueabihf ++endif ++ + #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te + #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te + #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te* --- gcc-7-7.2.0.orig/debian/patches/arm-multilib-softfp.diff +++ gcc-7-7.2.0/debian/patches/arm-multilib-softfp.diff @@ -0,0 +1,27 @@ +# DP: ARM hard/softfp float multilib support + +Index: b/src/gcc/config/arm/t-linux-eabi +=================================================================== +--- a/src/gcc/config/arm/t-linux-eabi 2011-01-03 20:52:22.000000000 +0000 ++++ b/src/gcc/config/arm/t-linux-eabi 2011-08-21 21:08:47.583351817 +0000 +@@ -24,6 +24,20 @@ + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++ifeq ($(with_float),hard) ++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft ++MULTILIB_OSDIRNAMES = arm-linux-gnueabi:arm-linux-gnueabi ../lib:arm-linux-gnueabihf ++else ++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard ++MULTILIB_DIRNAMES = sf hf ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft ++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi arm-linux-gnueabihf:arm-linux-gnueabihf ++endif ++ + #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te + #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te + #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te* --- gcc-7-7.2.0.orig/debian/patches/bind_now_when_pie.diff +++ gcc-7-7.2.0/debian/patches/bind_now_when_pie.diff @@ -0,0 +1,23 @@ +Author: Steve Beattie +Description: enable bind now by default when linking with pie by default + +--- + src/gcc/gcc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -936,7 +936,11 @@ proper position among the other output f + #ifndef LINK_PIE_SPEC + #ifdef HAVE_LD_PIE + #ifndef LD_PIE_SPEC ++#ifdef ACCEL_COMPILER + #define LD_PIE_SPEC "-pie" ++#else ++#define LD_PIE_SPEC "-pie -z now" ++#endif + #endif + #else + #define LD_PIE_SPEC "" --- gcc-7-7.2.0.orig/debian/patches/bootstrap-no-unneeded-libs.diff +++ gcc-7-7.2.0/debian/patches/bootstrap-no-unneeded-libs.diff @@ -0,0 +1,30 @@ +# DP: For bootstrap builds, don't build unneeded libstdc++ things +# DP: (debug library, PCH headers). + +# Please read ada-changes-in-autogen-output.diff about src/Makefile.[def|tpl]. + +--- a/src/Makefile.tpl ++++ b/src/Makefile.tpl +@@ -1060,7 +1060,9 @@ + --target=[+target_alias+] $${srcdiroption} [+ IF prev +]\ + --with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +]\ + $(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \ +- [+extra_configure_flags+][+ ENDIF extra_configure_flags +] ++ [+extra_configure_flags+][+ ENDIF extra_configure_flags +] \ ++ [+ IF bootstrap_configure_flags +][+bootstrap_configure_flags+] \ ++ [+ ENDIF bootstrap_configure_flags +] + @endif [+prefix+][+module+]-bootstrap + [+ ENDFOR bootstrap_stage +] + [+ ENDIF bootstrap +] +--- a/src/Makefile.def ++++ b/src/Makefile.def +@@ -117,7 +117,8 @@ + target_modules = { module= libstdc++-v3; + bootstrap=true; + lib_path=src/.libs; +- raw_cxx=true; }; ++ raw_cxx=true; ++ bootstrap_configure_flags='--disable-libstdcxx-debug --disable-libstdcxx-pch'; }; + target_modules = { module= libmudflap; lib_path=.libs; }; + target_modules = { module= libsanitizer; lib_path=.libs; }; + target_modules = { module= libssp; lib_path=.libs; }; --- gcc-7-7.2.0.orig/debian/patches/canonical-cpppath.diff +++ gcc-7-7.2.0/debian/patches/canonical-cpppath.diff @@ -0,0 +1,36 @@ +# DP: Don't use any relative path names for the standard include paths. + +Index: b/src/gcc/incpath.c +=================================================================== +--- a/src/gcc/incpath.c ++++ b/src/gcc/incpath.c +@@ -171,6 +171,14 @@ add_standard_paths (const char *sysroot, + str = reconcat (str, str, dir_separator_str, + imultiarch, NULL); + } ++ { ++ char *rp = lrealpath (str); ++ if (rp) ++ { ++ free (str); ++ str = rp; ++ } ++ } + add_path (str, SYSTEM, p->cxx_aware, false); + } + } +@@ -245,6 +253,14 @@ add_standard_paths (const char *sysroot, + else + str = reconcat (str, str, dir_separator_str, imultiarch, NULL); + } ++ { ++ char *rp = lrealpath (str); ++ if (rp) ++ { ++ free (str); ++ str = rp; ++ } ++ } + + add_path (str, SYSTEM, p->cxx_aware, false); + } --- gcc-7-7.2.0.orig/debian/patches/config-ml.diff +++ gcc-7-7.2.0/debian/patches/config-ml.diff @@ -0,0 +1,54 @@ +# DP: - Disable some biarch libraries for biarch builds. +# DP: - Fix multilib builds on kernels which don't support all multilibs. + +Index: b/src/config-ml.in +=================================================================== +--- a/src/config-ml.in ++++ b/src/config-ml.in +@@ -475,6 +475,25 @@ powerpc*-*-* | rs6000*-*-*) + ;; + esac + ++if [ -z "$biarch_multidir_names" ]; then ++ biarch_multidir_names="libiberty libstdc++-v3 libgfortran libmudflap libssp libffi libobjc libgomp" ++ echo "WARNING: biarch_multidir_names is unset. Use default value:" ++ echo " $biarch_multidir_names" ++fi ++ml_srcbase=`basename $ml_realsrcdir` ++old_multidirs="${multidirs}" ++multidirs="" ++for x in ${old_multidirs}; do ++ case " $x " in ++ " 32 "|" n32 "|" x32 "|" 64 "|" hf "|" sf "|" m4-nofpu ") ++ case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ++ ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++done ++ + # Remove extraneous blanks from multidirs. + # Tests like `if [ -n "$multidirs" ]' require it. + multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'` +@@ -878,9 +897,19 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + fi + fi + ++ ml_configure_args= ++ for arg in ${ac_configure_args} ++ do ++ case $arg in ++ *CC=*) ml_configure_args=${ml_config_env} ;; ++ *CXX=*) ml_configure_args=${ml_config_env} ;; ++ *) ;; ++ esac ++ done ++ + if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \ + --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \ +- "${ac_configure_args}" ${ml_config_env} ${ml_srcdiroption} ; then ++ "${ac_configure_args}" ${ml_configure_args} ${ml_config_env} ${ml_srcdiroption} ; then + true + else + exit 1 --- gcc-7-7.2.0.orig/debian/patches/cross-biarch.diff +++ gcc-7-7.2.0/debian/patches/cross-biarch.diff @@ -0,0 +1,82 @@ +# DP: Fix the location of target's libs in cross-build for biarch + +Index: b/src/config-ml.in +=================================================================== +--- a/src/config-ml.in ++++ b/src/config-ml.in +@@ -533,7 +533,13 @@ multi-do: + else \ + if [ -d ../$${dir}/$${lib} ]; then \ + flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ +- if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \ ++ libsuffix_="$${dir}"; \ ++ if [ "$${dir}" = "n32" ]; then libsuffix_=32; fi; \ ++ if [ -n "$$($${compiler} -v 2>&1 |grep '^Target: mips')" ] && [ "$${dir}" = "32" ]; then libsuffix_=o32; fi; \ ++ if (cd ../$${dir}/$${lib}; $(MAKE) $(subst \ ++ -B$(build_tooldir)/lib/, \ ++ -B$(build_tooldir)/lib$${libsuffix_}/, \ ++ $(FLAGS_TO_PASS)) \ + CFLAGS="$(CFLAGS) $${flags}" \ + CCASFLAGS="$(CCASFLAGS) $${flags}" \ + FCFLAGS="$(FCFLAGS) $${flags}" \ +@@ -786,6 +792,15 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + GFORTRAN_=$GFORTRAN' ' + GOC_=$GOC' ' + else ++ if [ "${ml_dir}" = "." ]; then ++ FILTER_="s!X\\(.*\\)!\\1!p" ++ elif [ "${ml_dir}" = "n32" ]; then # mips n32 -> lib32 ++ FILTER_="s!X\\(.*\\)/!\\132/!p" ++ elif [ "${ml_dir}" = "32" ] && [ "$(echo ${host} |grep '^mips')" ]; then # mips o32 -> libo32 ++ FILTER_="s!X\\(.*\\)/!\\1o32/!p" ++ else ++ FILTER_="s!X\\(.*\\)/!\\1${ml_dir}/!p" ++ fi + # Create a regular expression that matches any string as long + # as ML_POPDIR. + popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'` +@@ -794,6 +809,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + case $arg in + -[BIL]"${ML_POPDIR}"/*) + CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\1/p"`' ' ;; ++ -B*/lib/) ++ CC_="${CC_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) +@@ -806,6 +823,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + case $arg in + -[BIL]"${ML_POPDIR}"/*) + CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ -B*/lib/) ++ CXX_="${CXX_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) +@@ -818,6 +837,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + case $arg in + -[BIL]"${ML_POPDIR}"/*) + F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ -B*/lib/) ++ F77_="${F77_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) +@@ -842,6 +865,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + case $arg in + -[BIL]"${ML_POPDIR}"/*) + GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ -B*/lib/) ++ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) +@@ -854,6 +879,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + case $arg in + -[BIL]"${ML_POPDIR}"/*) + GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ -B*/lib/) ++ GOC_="${GOC_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) --- gcc-7-7.2.0.orig/debian/patches/cross-fixes.diff +++ gcc-7-7.2.0/debian/patches/cross-fixes.diff @@ -0,0 +1,81 @@ +# DP: Fix the linker error when creating an xcc for ia64 + +--- + gcc/config/ia64/fde-glibc.c | 3 +++ + gcc/config/ia64/unwind-ia64.c | 3 ++- + gcc/unwind-compat.c | 2 ++ + gcc/unwind-generic.h | 2 ++ + 6 files changed, 14 insertions(+), 1 deletions(-) + +Index: b/src/libgcc/config/ia64/fde-glibc.c +=================================================================== +--- a/src/libgcc/config/ia64/fde-glibc.c ++++ b/src/libgcc/config/ia64/fde-glibc.c +@@ -28,6 +28,7 @@ + #ifndef _GNU_SOURCE + #define _GNU_SOURCE 1 + #endif ++#ifndef inhibit_libc + #include "config.h" + #include + #include +@@ -159,3 +160,5 @@ _Unwind_FindTableEntry (void *pc, unw_wo + + return data.ret; + } ++ ++#endif +Index: b/src/libgcc/config/ia64/unwind-ia64.c +=================================================================== +--- a/src/libgcc/config/ia64/unwind-ia64.c ++++ b/src/libgcc/config/ia64/unwind-ia64.c +@@ -26,6 +26,7 @@ + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + ++#ifndef inhibit_libc + #include "tconfig.h" + #include "tsystem.h" + #include "coretypes.h" +@@ -2466,3 +2467,4 @@ alias (_Unwind_SetIP); + #endif + + #endif ++#endif +Index: b/src/libgcc/unwind-compat.c +=================================================================== +--- a/src/libgcc/unwind-compat.c ++++ b/src/libgcc/unwind-compat.c +@@ -23,6 +23,7 @@ + . */ + + #if defined (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS) ++#ifndef inhibit_libc + #include "tconfig.h" + #include "tsystem.h" + #include "unwind.h" +@@ -207,3 +208,4 @@ _Unwind_SetIP (struct _Unwind_Context *c + } + symver (_Unwind_SetIP, GCC_3.0); + #endif ++#endif +Index: b/src/libgcc/unwind-generic.h +=================================================================== +--- a/src/libgcc/unwind-generic.h ++++ b/src/libgcc/unwind-generic.h +@@ -221,6 +221,7 @@ _Unwind_SjLj_Resume_or_Rethrow (struct _ + compatible with the standard ABI for IA-64, we inline these. */ + + #ifdef __ia64__ ++#ifndef inhibit_libc + static inline _Unwind_Ptr + _Unwind_GetDataRelBase (struct _Unwind_Context *_C) + { +@@ -237,6 +238,7 @@ _Unwind_GetTextRelBase (struct _Unwind_C + + /* @@@ Retrieve the Backing Store Pointer of the given context. */ + extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *); ++#endif /* inhibit_libc */ + #else + extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *); + extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *); --- gcc-7-7.2.0.orig/debian/patches/cross-install-location.diff +++ gcc-7-7.2.0/debian/patches/cross-install-location.diff @@ -0,0 +1,378 @@ +Index: b/src/fixincludes/Makefile.in +=================================================================== +--- a/src/fixincludes/Makefile.in ++++ b/src/fixincludes/Makefile.in +@@ -52,9 +52,9 @@ target_noncanonical:=@target_noncanonica + gcc_version := $(shell cat $(srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + # Directory in which the compiler finds executables +-libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libexecsubdir = $(libexecdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + # Where our executable files go + itoolsdir = $(libexecsubdir)/install-tools + # Where our data files go +Index: b/src/libgfortran/Makefile.in +=================================================================== +--- a/src/libgfortran/Makefile.in ++++ b/src/libgfortran/Makefile.in +@@ -604,12 +604,12 @@ libgfortran_la_LDFLAGS = -version-info ` + + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + cafexeclib_LTLIBRARIES = libcaf_single.la +-cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) ++cafexeclibdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR) + libcaf_single_la_SOURCES = caf/single.c + libcaf_single_la_LDFLAGS = -static + libcaf_single_la_DEPENDENCIES = caf/libcaf.h + libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS) +-@IEEE_SUPPORT_TRUE@fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++@IEEE_SUPPORT_TRUE@fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude + @IEEE_SUPPORT_TRUE@nodist_finclude_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod + AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \ + -I$(srcdir)/$(MULTISRCTOP)../gcc/config $(LIBQUADINCLUDE) \ +Index: b/src/libgfortran/Makefile.am +=================================================================== +--- a/src/libgfortran/Makefile.am ++++ b/src/libgfortran/Makefile.am +@@ -43,14 +43,14 @@ libgfortran_la_LDFLAGS = -version-info ` + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + + cafexeclib_LTLIBRARIES = libcaf_single.la +-cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) ++cafexeclibdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR) + libcaf_single_la_SOURCES = caf/single.c + libcaf_single_la_LDFLAGS = -static + libcaf_single_la_DEPENDENCIES = caf/libcaf.h + libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS) + + if IEEE_SUPPORT +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude + nodist_finclude_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod + endif + +Index: b/src/lto-plugin/Makefile.in +=================================================================== +--- a/src/lto-plugin/Makefile.in ++++ b/src/lto-plugin/Makefile.in +@@ -255,7 +255,7 @@ with_libiberty = @with_libiberty@ + ACLOCAL_AMFLAGS = -I .. -I ../config + AUTOMAKE_OPTIONS = no-dependencies + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) ++libexecsubdir := $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) + AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS) + AM_CFLAGS = @ac_lto_plugin_warn_cflags@ + AM_LDFLAGS = @ac_lto_plugin_ldflags@ +Index: b/src/lto-plugin/Makefile.am +=================================================================== +--- a/src/lto-plugin/Makefile.am ++++ b/src/lto-plugin/Makefile.am +@@ -5,7 +5,7 @@ AUTOMAKE_OPTIONS = no-dependencies + + gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + target_noncanonical := @target_noncanonical@ +-libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) ++libexecsubdir := $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) + + AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS) + AM_CFLAGS = @ac_lto_plugin_warn_cflags@ +Index: b/src/libitm/Makefile.in +=================================================================== +--- a/src/libitm/Makefile.in ++++ b/src/libitm/Makefile.in +@@ -334,8 +334,8 @@ SUBDIRS = testsuite + gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + abi_version = -fabi-version=4 + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + AM_CPPFLAGS = $(addprefix -I, $(search_path)) + AM_CFLAGS = $(XCFLAGS) + AM_CXXFLAGS = $(XCFLAGS) -std=gnu++0x -funwind-tables -fno-exceptions \ +Index: b/src/libitm/Makefile.am +=================================================================== +--- a/src/libitm/Makefile.am ++++ b/src/libitm/Makefile.am +@@ -11,8 +11,8 @@ abi_version = -fabi-version=4 + config_path = @config_path@ + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) + +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + vpath % $(strip $(search_path)) + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -4179,7 +4179,7 @@ process_command (unsigned int decoded_op + GCC_EXEC_PREFIX is typically a directory name with a trailing + / (which is ignored by make_relative_prefix), so append a + program name. */ +- char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL); ++ char *tmp_prefix = concat (gcc_exec_prefix, "gcc-cross", NULL); + gcc_libexec_prefix = get_relative_prefix (tmp_prefix, + standard_exec_prefix, + standard_libexec_prefix); +@@ -4205,15 +4205,15 @@ process_command (unsigned int decoded_op + { + int len = strlen (gcc_exec_prefix); + +- if (len > (int) sizeof ("/lib/gcc/") - 1 ++ if (len > (int) sizeof ("/lib/gcc-cross/") - 1 + && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1]))) + { +- temp = gcc_exec_prefix + len - sizeof ("/lib/gcc/") + 1; ++ temp = gcc_exec_prefix + len - sizeof ("/lib/gcc-cross/") + 1; + if (IS_DIR_SEPARATOR (*temp) + && filename_ncmp (temp + 1, "lib", 3) == 0 + && IS_DIR_SEPARATOR (temp[4]) +- && filename_ncmp (temp + 5, "gcc", 3) == 0) +- len -= sizeof ("/lib/gcc/") - 1; ++ && filename_ncmp (temp + 5, "gcc-cross", 3) == 0) ++ len -= sizeof ("/lib/gcc-cross/") - 1; + } + + set_std_prefix (gcc_exec_prefix, len); +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -592,9 +592,9 @@ libexecdir = @libexecdir@ + # -------- + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) ++libsubdir = $(libdir)/gcc-cross/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) + # Directory in which the compiler finds executables +-libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) ++libexecsubdir = $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) + # Directory in which all plugin resources are installed + plugin_resourcesdir = $(libsubdir)/plugin + # Directory in which plugin headers are installed +@@ -2017,8 +2017,8 @@ prefix.o: $(FULLVER) + + DRIVER_DEFINES = \ + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \ +- -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ +- -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \ ++ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-cross/\" \ ++ -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc-cross/\" \ + -DDEFAULT_TARGET_VERSION=\"$(version)\" \ + -DDEFAULT_REAL_TARGET_MACHINE=\"$(real_target_noncanonical)\" \ + -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \ +@@ -2671,7 +2671,7 @@ PREPROCESSOR_DEFINES = \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" \ + -DPREFIX=\"$(prefix)/\" \ +- -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ ++ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-cross/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + + CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(FULLVER_s) +Index: b/src/libssp/Makefile.in +=================================================================== +--- a/src/libssp/Makefile.in ++++ b/src/libssp/Makefile.in +@@ -287,7 +287,7 @@ gcc_version := $(shell cat $(top_srcdir) + @LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_dep = ssp.map-sun + AM_CFLAGS = -Wall + toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la +-libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + libssp_la_SOURCES = \ + ssp.c gets-chk.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ +Index: b/src/libssp/Makefile.am +=================================================================== +--- a/src/libssp/Makefile.am ++++ b/src/libssp/Makefile.am +@@ -39,7 +39,7 @@ AM_CFLAGS = -Wall + toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la + + target_noncanonical = @target_noncanonical@ +-libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + + libssp_la_SOURCES = \ +Index: b/src/libquadmath/Makefile.in +=================================================================== +--- a/src/libquadmath/Makefile.in ++++ b/src/libquadmath/Makefile.in +@@ -354,7 +354,7 @@ AUTOMAKE_OPTIONS = 1.8 foreign + + @BUILD_LIBQUADMATH_TRUE@libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD) + @BUILD_LIBQUADMATH_TRUE@nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h +-@BUILD_LIBQUADMATH_TRUE@libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++@BUILD_LIBQUADMATH_TRUE@libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + @BUILD_LIBQUADMATH_TRUE@libquadmath_la_SOURCES = \ + @BUILD_LIBQUADMATH_TRUE@ math/x2y2m1q.c math/isinf_nsq.c math/acoshq.c math/fmodq.c \ + @BUILD_LIBQUADMATH_TRUE@ math/acosq.c math/frexpq.c \ +Index: b/src/libquadmath/Makefile.am +=================================================================== +--- a/src/libquadmath/Makefile.am ++++ b/src/libquadmath/Makefile.am +@@ -41,7 +41,7 @@ libquadmath_la_LDFLAGS = -version-info ` + libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD) + + nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + libquadmath_la_SOURCES = \ + math/x2y2m1q.c math/isinf_nsq.c math/acoshq.c math/fmodq.c \ +Index: b/src/libobjc/Makefile.in +=================================================================== +--- a/src/libobjc/Makefile.in ++++ b/src/libobjc/Makefile.in +@@ -50,7 +50,7 @@ top_builddir = . + -include ../boehm-gc/threads.mk + + libdir = $(exec_prefix)/lib +-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + + # Multilib support variables. + MULTISRCTOP = +Index: b/src/libada/Makefile.in +=================================================================== +--- a/src/libada/Makefile.in ++++ b/src/libada/Makefile.in +@@ -68,7 +68,7 @@ GCC_DIR=$(MULTIBUILDTOP)../../$(host_sub + + target_noncanonical:=@target_noncanonical@ + version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) +-libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) ++libsubdir := $(libdir)/gcc-cross/$(target_noncanonical)/$(version)$(MULTISUBDIR) + ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) + ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR)) + +Index: b/src/libgomp/Makefile.in +=================================================================== +--- a/src/libgomp/Makefile.in ++++ b/src/libgomp/Makefile.in +@@ -386,8 +386,8 @@ gcc_version := $(shell cat $(top_srcdir) + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) \ + $(top_srcdir)/../include + +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + AM_CPPFLAGS = $(addprefix -I, $(search_path)) + AM_CFLAGS = $(XCFLAGS) + AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS) +Index: b/src/libgomp/Makefile.am +=================================================================== +--- a/src/libgomp/Makefile.am ++++ b/src/libgomp/Makefile.am +@@ -10,8 +10,8 @@ config_path = @config_path@ + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) \ + $(top_srcdir)/../include + +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + vpath % $(strip $(search_path)) + +Index: b/src/libgcc/Makefile.in +=================================================================== +--- a/src/libgcc/Makefile.in ++++ b/src/libgcc/Makefile.in +@@ -186,7 +186,7 @@ STRIP = @STRIP@ + STRIP_FOR_TARGET = $(STRIP) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(real_host_noncanonical)/$(version)@accel_dir_suffix@ ++libsubdir = $(libdir)/gcc-cross/$(real_host_noncanonical)/$(version)@accel_dir_suffix@ + # Used to install the shared libgcc. + slibdir = @slibdir@ + # Maybe used for DLLs on Windows targets. +Index: b/src/libffi/include/Makefile.am +=================================================================== +--- a/src/libffi/include/Makefile.am ++++ b/src/libffi/include/Makefile.am +@@ -8,6 +8,6 @@ EXTRA_DIST=ffi.h.in + + # Where generated headers like ffitarget.h get installed. + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++toollibffidir := $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + toollibffi_HEADERS = ffi.h ffitarget.h +Index: b/src/libffi/include/Makefile.in +=================================================================== +--- a/src/libffi/include/Makefile.in ++++ b/src/libffi/include/Makefile.in +@@ -251,7 +251,7 @@ EXTRA_DIST = ffi.h.in + + # Where generated headers like ffitarget.h get installed. + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++toollibffidir := $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + toollibffi_HEADERS = ffi.h ffitarget.h + all: all-am + +Index: b/src/libcc1/Makefile.am +=================================================================== +--- a/src/libcc1/Makefile.am ++++ b/src/libcc1/Makefile.am +@@ -35,7 +35,7 @@ libiberty = $(if $(wildcard $(libiberty_ + $(Wc)$(libiberty_normal))) + libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty)) + +-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin ++plugindir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/plugin + cc1libdir = $(libdir)/$(libsuffix) + + if ENABLE_PLUGIN +Index: b/src/libcc1/Makefile.in +=================================================================== +--- a/src/libcc1/Makefile.in ++++ b/src/libcc1/Makefile.in +@@ -290,7 +290,7 @@ libiberty = $(if $(wildcard $(libiberty_ + $(Wc)$(libiberty_normal))) + + libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty)) +-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin ++plugindir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/plugin + cc1libdir = $(libdir)/$(libsuffix) + @ENABLE_PLUGIN_TRUE@plugin_LTLIBRARIES = libcc1plugin.la + @ENABLE_PLUGIN_TRUE@cc1lib_LTLIBRARIES = libcc1.la +Index: b/src/libsanitizer/Makefile.am +=================================================================== +--- a/src/libsanitizer/Makefile.am ++++ b/src/libsanitizer/Makefile.am +@@ -1,6 +1,6 @@ + ACLOCAL_AMFLAGS = -I .. -I ../config + +-sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer ++sanincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include/sanitizer + + nodist_saninclude_HEADERS = + +Index: b/src/libsanitizer/Makefile.in +=================================================================== +--- a/src/libsanitizer/Makefile.in ++++ b/src/libsanitizer/Makefile.in +@@ -285,7 +285,7 @@ top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + ACLOCAL_AMFLAGS = -I .. -I ../config +-sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer ++sanincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include/sanitizer + nodist_saninclude_HEADERS = $(am__append_1) + @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ + @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ --- gcc-7-7.2.0.orig/debian/patches/cross-no-locale-include.diff +++ gcc-7-7.2.0/debian/patches/cross-no-locale-include.diff @@ -0,0 +1,17 @@ +# DP: Don't add /usr/local/include for cross compilers. Assume that +# DP: /usr/include is ready for multiarch, but not /usr/local/include. + +--- a/src/gcc/cppdefault.c ++++ b/src/gcc/cppdefault.c +@@ -66,8 +66,11 @@ + #ifdef LOCAL_INCLUDE_DIR + /* /usr/local/include comes before the fixincluded header files. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, ++#if 0 ++ /* Unsafe to assume that /usr/local/include is ready for multiarch. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 }, + #endif ++#endif + #ifdef PREFIX_INCLUDE_DIR + { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 }, + #endif --- gcc-7-7.2.0.orig/debian/patches/disable-gdc-tests.diff +++ gcc-7-7.2.0/debian/patches/disable-gdc-tests.diff @@ -0,0 +1,19 @@ +# DP: Disable D tests, hang on many buildds + +Index: b/src/gcc/d/Make-lang.in +=================================================================== +--- a/src/gcc/d/Make-lang.in ++++ b/src/gcc/d/Make-lang.in +@@ -148,9 +148,9 @@ d.srcman: doc/gdc.1 + # check targets. However, our DejaGNU framework requires 'check-gdc' as its + # entry point. We feed the former to the latter here. + check-d: check-gdc +-lang_checks += check-gdc +-lang_checks_parallelized += check-gdc +-check_gdc_parallelize = 10 ++#lang_checks += check-gdc ++#lang_checks_parallelized += check-gdc ++#check_gdc_parallelize = 10 + + # Install hooks. + --- gcc-7-7.2.0.orig/debian/patches/g++-multiarch-incdir.diff +++ gcc-7-7.2.0/debian/patches/g++-multiarch-incdir.diff @@ -0,0 +1,119 @@ +# DP: Use /usr/include//c++/4.x as the include directory +# DP: for host dependent c++ header files. + +Index: b/src/libstdc++-v3/include/Makefile.am +=================================================================== +--- a/src/libstdc++-v3/include/Makefile.am ++++ b/src/libstdc++-v3/include/Makefile.am +@@ -925,7 +925,7 @@ endif + + host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) + host_builddir = ./${host_alias}/bits +-host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits ++host_installdir = $(if $(shell $(CC) -print-multiarch),/usr/include/$(shell $(filter-out -m%,$(CC)) -print-multiarch)/c++/$(notdir ${gxx_include_dir})$(MULTISUBDIR)/bits,${gxx_include_dir}/${default_host_alias}$(MULTISUBDIR)/bits) + host_headers = \ + ${host_srcdir}/ctype_base.h \ + ${host_srcdir}/ctype_inline.h \ +Index: b/src/libstdc++-v3/include/Makefile.in +=================================================================== +--- a/src/libstdc++-v3/include/Makefile.in ++++ b/src/libstdc++-v3/include/Makefile.in +@@ -1210,7 +1210,7 @@ profile_impl_headers = \ + @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@c_compatibility_headers_extra = ${c_compatibility_headers} + host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) + host_builddir = ./${host_alias}/bits +-host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits ++host_installdir = $(if $(shell $(CC) -print-multiarch),/usr/include/$(shell $(filter-out -m%,$(CC)) -print-multiarch)/c++/$(notdir ${gxx_include_dir})$(MULTISUBDIR)/bits,${gxx_include_dir}/${default_host_alias}$(MULTISUBDIR)/bits) + host_headers = \ + ${host_srcdir}/ctype_base.h \ + ${host_srcdir}/ctype_inline.h \ +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -1150,6 +1150,7 @@ FLAGS_TO_PASS = \ + "prefix=$(prefix)" \ + "local_prefix=$(local_prefix)" \ + "gxx_include_dir=$(gcc_gxx_include_dir)" \ ++ "gxx_tool_include_dir=$(gcc_gxx_tool_include_dir)" \ + "build_tooldir=$(build_tooldir)" \ + "gcc_tooldir=$(gcc_tooldir)" \ + "bindir=$(bindir)" \ +@@ -1681,6 +1682,14 @@ ifneq ($(xmake_file),) + include $(xmake_file) + endif + ++# Directory in which the compiler finds target-dependent g++ includes. ++ifneq ($(call if_multiarch,non-empty),) ++ gcc_gxx_tool_include_dir = $(libsubdir)/$(libsubdir_to_prefix)include/$(MULTIARCH_DIRNAME)/c++/$(BASEVER_c) ++else ++ gcc_gxx_tool_include_dir = $(gcc_gxx_include_dir)/$(target_noncanonical) ++endif ++ ++ + # all-tree.def includes all the tree.def files. + all-tree.def: s-alltree; @true + s-alltree: Makefile +@@ -2769,7 +2778,7 @@ PREPROCESSOR_DEFINES = \ + -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \ + -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \ + -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \ +- -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \ ++ -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_tool_include_dir)\" \ + -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ + -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ + -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ +Index: b/src/gcc/cppdefault.c +=================================================================== +--- a/src/gcc/cppdefault.c ++++ b/src/gcc/cppdefault.c +@@ -49,6 +49,8 @@ const struct default_include cpp_include + /* Pick up GNU C++ target-dependent include files. */ + { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, + GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, ++ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 2 }, + #endif + #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR + /* Pick up GNU C++ backward and deprecated include files. */ +Index: b/src/gcc/incpath.c +=================================================================== +--- a/src/gcc/incpath.c ++++ b/src/gcc/incpath.c +@@ -158,6 +158,18 @@ add_standard_paths (const char *sysroot, + } + str = reconcat (str, str, dir_separator_str, + imultiarch, NULL); ++ if (p->cplusplus && strstr (str, "/c++/")) ++ { ++ char *suffix = strstr (str, "/c++/"); ++ *suffix++ = '\0'; ++ suffix = xstrdup (suffix); ++ str = reconcat (str, str, dir_separator_str, ++ imultiarch, ++ dir_separator_str, suffix, NULL); ++ } ++ else ++ str = reconcat (str, str, dir_separator_str, ++ imultiarch, NULL); + } + add_path (str, SYSTEM, p->cxx_aware, false); + } +@@ -222,7 +234,16 @@ add_standard_paths (const char *sysroot, + free (str); + continue; + } +- str = reconcat (str, str, dir_separator_str, imultiarch, NULL); ++ if (p->cplusplus && strstr (str, "/c++/")) ++ { ++ char *suffix = strstr (str, "/c++/"); ++ *suffix++ = '\0'; ++ suffix = xstrdup (suffix); ++ str = reconcat (str, str, dir_separator_str, imultiarch, ++ dir_separator_str, suffix, NULL); ++ } ++ else ++ str = reconcat (str, str, dir_separator_str, imultiarch, NULL); + } + + add_path (str, SYSTEM, p->cxx_aware, false); --- gcc-7-7.2.0.orig/debian/patches/gcc-as-needed-gold.diff +++ gcc-7-7.2.0/debian/patches/gcc-as-needed-gold.diff @@ -0,0 +1,17 @@ +# DP: Use --push-state/--pop-state for gold as well when linking libtsan. + +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -700,10 +700,10 @@ + #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ +- " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libtsan:--push-state --no-as-needed}" \ + " -ltsan " \ + " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libtsan:--pop-state}" \ + STATIC_LIBTSAN_LIBS + #else + #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS --- gcc-7-7.2.0.orig/debian/patches/gcc-as-needed.diff +++ gcc-7-7.2.0/debian/patches/gcc-as-needed.diff @@ -0,0 +1,183 @@ +# DP: On linux targets pass --as-needed by default to the linker, but always +# DP: link the sanitizer libraries with --no-as-needed. + +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -568,8 +568,11 @@ proper position among the other output f + #ifdef LIBTSAN_EARLY_SPEC + #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) +-#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ +- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ ++#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ ++ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " -ltsan " \ ++ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ ++ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ + STATIC_LIBTSAN_LIBS + #else + #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS +--- a/src/gcc/config/gnu-user.h ++++ b/src/gcc/config/gnu-user.h +@@ -124,13 +124,13 @@ + #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ + "%{static-libasan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" ++ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #undef LIBTSAN_EARLY_SPEC + #define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" ++ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #undef LIBLSAN_EARLY_SPEC + #define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" ++ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #endif +Index: b/src/gcc/config/aarch64/aarch64-linux.h +=================================================================== +--- a/src/gcc/config/aarch64/aarch64-linux.h ++++ b/src/gcc/config/aarch64/aarch64-linux.h +@@ -36,6 +36,7 @@ + + #define LINUX_TARGET_LINK_SPEC "%{h*} \ + --hash-style=gnu \ ++ --as-needed \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ +Index: b/src/gcc/config/ia64/linux.h +=================================================================== +--- a/src/gcc/config/ia64/linux.h ++++ b/src/gcc/config/ia64/linux.h +@@ -58,7 +58,7 @@ do { \ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC " --hash-style=gnu \ ++#define LINK_SPEC " --hash-style=gnu --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/sparc/linux.h +=================================================================== +--- a/src/gcc/config/sparc/linux.h ++++ b/src/gcc/config/sparc/linux.h +@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "-m elf32_sparc --hash-style=gnu %{shared:-shared} \ ++#define LINK_SPEC "-m elf32_sparc --hash-style=gnu --as-needed %{shared:-shared} \ + %{!mno-relax:%{!r:-relax}} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/s390/linux.h +=================================================================== +--- a/src/gcc/config/s390/linux.h ++++ b/src/gcc/config/s390/linux.h +@@ -65,7 +65,7 @@ along with GCC; see the file COPYING3. + + #undef LINK_SPEC + #define LINK_SPEC \ +- "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \ ++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{static:-static} \ +Index: b/src/gcc/config/rs6000/linux64.h +=================================================================== +--- a/src/gcc/config/rs6000/linux64.h ++++ b/src/gcc/config/rs6000/linux64.h +@@ -466,12 +466,12 @@ extern int dot_symbols; + " -m elf64ppc") + #endif + +-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=gnu %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=gnu --as-needed %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ + %(link_os_extra_spec32)" + +-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --hash-style=gnu %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --hash-style=gnu --as-needed %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \ + %(link_os_extra_spec64)" +Index: b/src/gcc/config/rs6000/sysv4.h +=================================================================== +--- a/src/gcc/config/rs6000/sysv4.h ++++ b/src/gcc/config/rs6000/sysv4.h +@@ -784,7 +784,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ + MUSL_DYNAMIC_LINKER) + +-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu --as-needed %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + +Index: b/src/gcc/config/i386/gnu-user64.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user64.h ++++ b/src/gcc/config/i386/gnu-user64.h +@@ -57,6 +57,7 @@ see the files COPYING3 and COPYING.RUNTI + %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ + %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ + --hash-style=gnu \ ++ --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/i386/gnu-user.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user.h ++++ b/src/gcc/config/i386/gnu-user.h +@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. + { "link_emulation", GNU_USER_LINK_EMULATION },\ + { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } + +-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \ ++#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --hash-style=gnu --as-needed %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +Index: b/src/gcc/config/alpha/linux-elf.h +=================================================================== +--- a/src/gcc/config/alpha/linux-elf.h ++++ b/src/gcc/config/alpha/linux-elf.h +@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. + + #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER + +-#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax} \ ++#define LINK_SPEC "-m elf64alpha --hash-style=gnu --as-needed %{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ + %{shared:-shared} \ + %{!shared: \ +Index: b/src/gcc/config/arm/linux-elf.h +=================================================================== +--- a/src/gcc/config/arm/linux-elf.h ++++ b/src/gcc/config/arm/linux-elf.h +@@ -73,6 +73,7 @@ + %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ + -X \ + --hash-style=gnu \ ++ --as-needed \ + %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + +Index: b/src/gcc/config/mips/gnu-user.h +=================================================================== +--- a/src/gcc/config/mips/gnu-user.h ++++ b/src/gcc/config/mips/gnu-user.h +@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. + #undef GNU_USER_TARGET_LINK_SPEC + #define GNU_USER_TARGET_LINK_SPEC "\ + %{G*} %{EB} %{EL} %{mips*} %{shared} \ ++ -as-needed \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ --- gcc-7-7.2.0.orig/debian/patches/gcc-auto-build.diff +++ gcc-7-7.2.0/debian/patches/gcc-auto-build.diff @@ -0,0 +1,15 @@ +# DP: Fix cross building a native compiler. + +Index: b/src/gcc/configure.ac +=================================================================== +--- a/src/gcc/configure.ac ++++ b/src/gcc/configure.ac +@@ -1705,7 +1705,7 @@ else + # Clearing GMPINC is necessary to prevent host headers being + # used by the build compiler. Defining GENERATOR_FILE stops + # system.h from including gmp.h. +- CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \ ++ CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD} -DGENERATOR_FILE" \ + CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \ + LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \ + GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \ --- gcc-7-7.2.0.orig/debian/patches/gcc-d-lang.diff +++ gcc-7-7.2.0/debian/patches/gcc-d-lang.diff @@ -0,0 +1,251 @@ +# DP: Add D options and specs for the gcc driver. + +Index: b/src/gcc/d/lang-specs.h +=================================================================== +--- /dev/null ++++ b/src/gcc/d/lang-specs.h +@@ -0,0 +1,31 @@ ++/* lang-specs.h -- D frontend for GCC. ++ Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ GCC 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. ++ ++ GCC 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 GCC; see the file COPYING3. If not see ++ . ++*/ ++ ++/* %{!M} probably doesn't make sense because we would need ++ to do that -- -MD and -MMD doesn't sound like a plan for D.... */ ++ ++{".d", "@d", 0, 1, 0 }, ++{".D", "@d", 0, 1, 0 }, ++{".dd", "@d", 0, 1, 0 }, ++{".DD", "@d", 0, 1, 0 }, ++{".di", "@d", 0, 1, 0 }, ++{".DI", "@d", 0, 1, 0 }, ++{"@d", ++ "%{!E:cc1d %i %(cc1_options) %(cc1d) %I %{nostdinc*} %{+e*} %{I*} %{J*}\ ++ %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", 0, 1, 0 }, ++ +Index: b/src/gcc/d/lang.opt +=================================================================== +--- /dev/null ++++ b/src/gcc/d/lang.opt +@@ -0,0 +1,208 @@ ++; GDC -- D front-end for GCC ++; Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++; ++; 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 2 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 GCC; see the file COPYING3. If not see ++; . ++ ++Language ++D ++ ++debuglib= ++Driver Joined ++Debug library to use instead of phobos ++ ++defaultlib= ++Driver Joined ++Default library to use instead of phobos ++ ++fassert ++D ++Permit the use of the assert keyword ++ ++; For D: defaults to on ++fbounds-check ++D ++Generate code to check bounds before indexing arrays ++ ++fbuiltin ++D Var(flag_no_builtin, 0) ++Recognize built-in functions ++ ++fdebug ++D ++Compile in debug code ++ ++fdebug= ++D Joined RejectNegative ++-fdebug,-fdebug=,-fdebug= Compile in debug code, code <= level, or code identified by ident ++ ++fdeps= ++D Joined RejectNegative ++-fdeps= Write module dependencies to filename ++ ++fdoc ++D ++Generate documentation ++ ++fdoc-dir= ++D Joined RejectNegative ++-fdoc-dir= Write documentation file to docdir directory ++ ++fdoc-file= ++D Joined RejectNegative ++-fdoc-file= Write documentation file to filename ++ ++fdoc-inc= ++D Joined RejectNegative ++-fdoc-inc= Include a Ddoc macro file ++ ++fdump-source ++D RejectNegative ++Dump decoded UTF-8 text and source from HTML ++ ++fd-verbose ++D ++Print information about D language processing to stdout ++ ++fd-vtls ++D ++List all variables going into thread local storage ++ ++femit-templates ++D ++-femit-templates Emit templates code and data even if the linker cannot merge multiple copies ++ ++fignore-unknown-pragmas ++D ++Ignore unsupported pragmas ++ ++fin ++D ++Generate runtime code for in() contracts ++ ++fintfc ++Generate D interface files ++ ++fintfc-dir= ++D Joined RejectNegative ++-fintfc-dir= Write D interface files to directory ++ ++fintfc-file= ++D Joined RejectNegative ++-fintfc-file= Write D interface file to ++ ++finvariants ++D ++Generate runtime code for invariant()'s ++ ++fmake-deps= ++D Joined RejectNegative ++-fmake-deps= Write dependency output to the given file ++ ++fmake-mdeps= ++D Joined RejectNegative ++Like -fmake-deps= but ignore system modules ++ ++femit-moduleinfo ++D ++Generate ModuleInfo struct for output module ++ ++fonly= ++D Joined RejectNegative ++Process all modules specified on the command line, but only generate code for the module specified by the argument ++ ++fout ++D ++Generate runtime code for out() contracts ++ ++fproperty ++D ++Enforce property syntax ++ ++frelease ++D ++Compile release version ++ ++fsplit-dynamic-arrays ++D Var(flag_split_darrays) ++Split dynamic arrays into length and pointer when passing to functions ++ ++funittest ++D ++Compile in unittest code ++ ++fversion= ++D Joined RejectNegative ++-fversion= Compile in version code >= or identified by ++ ++fXf= ++D Joined RejectNegative ++-fXf= Write JSON file to ++ ++imultilib ++D Joined Separate ++-imultilib Set to be the multilib include subdirectory ++ ++iprefix ++D Joined Separate ++-iprefix Specify as a prefix for next two options ++ ++isysroot ++D Joined Separate ++-isysroot Set to be the system root directory ++ ++isystem ++D Joined Separate ++-isystem Add to the start of the system include path ++ ++I ++D Joined Separate ++-I Add to the end of the main include path ++ ++J ++D Joined Separate ++-J Put MODULE files in 'directory' ++ ++nophoboslib ++Driver ++Do not link the standard D library in the compilation ++ ++nostdinc ++D ++Do not search standard system include directories (those specified with -isystem will still be used) ++ ++static-libphobos ++Driver ++Link the standard D library statically in the compilation ++ ++Wall ++D ++; Documented in c.opt ++ ++Wcast-result ++D Warning Var(warn_cast_result) ++Warn about casts that will produce a null or nil result ++ ++Wdeprecated ++D ++; Documented in c.opt ++ ++Werror ++D ++; Documented in common.opt ++ ++Wunknown-pragmas ++D ++; Documented in c.opt ++ --- gcc-7-7.2.0.orig/debian/patches/gcc-default-format-security.diff +++ gcc-7-7.2.0/debian/patches/gcc-default-format-security.diff @@ -0,0 +1,39 @@ +# DP: Turn on -Wformat -Wformat-security by default for C, C++, ObjC, ObjC++. + +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -4119,6 +4119,11 @@ value is used and that might result in t + sufficient length or magnitude. + @end table + ++NOTE: In Ubuntu 8.10 and later versions this option is enabled by default ++for C, C++, ObjC, ObjC++. To disable, use @option{-Wno-format-security}, ++or disable all format warnings with @option{-Wformat=0}. To make format ++security warnings fatal, specify @option{-Werror=format-security}. ++ + @item -Wformat-y2k + @opindex Wformat-y2k + @opindex Wno-format-y2k +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -867,11 +867,14 @@ proper position among the other output f + #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G" + #endif + ++/* no separate spec, just shove it into the ssp default spec */ ++#define FORMAT_SECURITY_SPEC "%{!Wformat:%{!Wformat=2:%{!Wformat=0:%{!Wall:-Wformat} %{!Wno-format-security:-Wformat-security}}}}" ++ + #ifndef SSP_DEFAULT_SPEC + #if defined(TARGET_LIBC_PROVIDES_SSP) && !defined(ACCEL_COMPILER) +-#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:-fstack-protector}}}}" ++#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:-fstack-protector}}}} " FORMAT_SECURITY_SPEC + #else +-#define SSP_DEFAULT_SPEC "" ++#define SSP_DEFAULT_SPEC FORMAT_SECURITY_SPEC + #endif + #endif + --- gcc-7-7.2.0.orig/debian/patches/gcc-default-fortify-source.diff +++ gcc-7-7.2.0/debian/patches/gcc-default-fortify-source.diff @@ -0,0 +1,42 @@ +# DP: Turn on -D_FORTIFY_SOURCE=2 by default for C, C++, ObjC, ObjC++, +# DP: if the optimization level is > 0 + +--- + gcc/doc/invoke.texi | 6 ++++++ + gcc/c-family/c-cppbuiltin.c | 3 + + 2 files changed, 9 insertions(+), 0 deletions(-) + +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -7105,6 +7105,12 @@ also turns on the following optimization + Please note the warning under @option{-fgcse} about + invoking @option{-O2} on programs that use computed gotos. + ++NOTE: In Ubuntu 8.10 and later versions, @option{-D_FORTIFY_SOURCE=2} is ++set by default, and is activated when @option{-O} is set to 2 or higher. ++This enables additional compile-time and run-time checks for several libc ++functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or ++@option{-D_FORTIFY_SOURCE=0}. ++ + @item -O3 + @opindex O3 + Optimize yet more. @option{-O3} turns on all optimizations specified +Index: b/src/gcc/c-family/c-cppbuiltin.c +=================================================================== +--- a/src/gcc/c-family/c-cppbuiltin.c ++++ b/src/gcc/c-family/c-cppbuiltin.c +@@ -1335,6 +1335,12 @@ c_cpp_builtins (cpp_reader *pfile) + builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0); + builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0); + ++#if !defined(ACCEL_COMPILER) ++ /* Fortify Source enabled by default for optimization levels > 0 */ ++ if (optimize) ++ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2); ++#endif ++ + /* Misc. */ + if (flag_gnu89_inline) + cpp_define (pfile, "__GNUC_GNU_INLINE__"); --- gcc-7-7.2.0.orig/debian/patches/gcc-default-relro.diff +++ gcc-7-7.2.0/debian/patches/gcc-default-relro.diff @@ -0,0 +1,45 @@ +# DP: Turn on -Wl,-z,relro by default. + +--- + gcc/doc/invoke.texi | 3 +++ + gcc/gcc.c | 1 + + 2 files changed, 4 insertions(+), 0 deletions(-) + +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -11813,6 +11813,9 @@ For example, @option{-Wl,-Map,output.map + linker. When using the GNU linker, you can also get the same effect with + @option{-Wl,-Map=output.map}. + ++NOTE: In Ubuntu 8.10 and later versions, for LDFLAGS, the option ++@option{-Wl,-z,relro} is used. To disable, use @option{-Wl,-z,norelro}. ++ + @item -u @var{symbol} + @opindex u + Pretend the symbol @var{symbol} is undefined, to force linking of +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -1037,6 +1037,11 @@ proper position among the other output f + /* We pass any -flto flags on to the linker, which is expected + to understand them. In practice, this means it had better be collect2. */ + /* %{e*} includes -export-dynamic; see comment in common.opt. */ ++#if defined(ACCEL_COMPILER) ++# define RELRO_SPEC "" ++#else ++# define RELRO_SPEC "-z relro " ++#endif + #ifndef LINK_COMMAND_SPEC + #define LINK_COMMAND_SPEC "\ + %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ +@@ -1045,6 +1050,7 @@ proper position among the other output f + "%{flto|flto=*:% + + * gcc.c (offload_targets_default): New variable. + (process_command): Set it if -foffload is defaulted. + (driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1 + into environment if -foffload has been defaulted. + * lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define. + (compile_images_for_offload_targets): If OFFLOAD_TARGET_DEFAULT + is in the environment, don't fail if corresponding mkoffload + can't be found. Free and clear offload_names if no valid offload + is found. +libgomp/ + * target.c (gomp_load_plugin_for_device): If a plugin can't be + dlopened, assume it has no devices silently. + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -290,6 +290,10 @@ static const char *spec_host_machine = D + + static char *offload_targets = NULL; + ++/* Set to true if -foffload has not been used and offload_targets ++ is set to the configured in default. */ ++static bool offload_targets_default; ++ + /* Nonzero if cross-compiling. + When -b is used, the value comes from the `specs' file. */ + +@@ -4457,7 +4461,10 @@ process_command (unsigned int decoded_op + /* If the user didn't specify any, default to all configured offload + targets. */ + if (ENABLE_OFFLOADING && offload_targets == NULL) +- handle_foffload_option (OFFLOAD_TARGETS); ++ { ++ handle_foffload_option (OFFLOAD_TARGETS); ++ offload_targets_default = true; ++ } + + if (output_file + && strcmp (output_file, "-") != 0 +@@ -7696,6 +7703,12 @@ driver::maybe_putenv_OFFLOAD_TARGETS () + obstack_grow (&collect_obstack, offload_targets, + strlen (offload_targets) + 1); + xputenv (XOBFINISH (&collect_obstack, char *)); ++ if (offload_targets_default) ++ { ++ obstack_grow (&collect_obstack, "OFFLOAD_TARGET_DEFAULT=1", ++ sizeof ("OFFLOAD_TARGET_DEFAULT=1") - 1); ++ xputenv (XOBFINISH (&collect_obstack, char *)); ++ } + } + + free (offload_targets); +Index: b/src/gcc/lto-wrapper.c +=================================================================== +--- a/src/gcc/lto-wrapper.c ++++ b/src/gcc/lto-wrapper.c +@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. + /* Environment variable, used for passing the names of offload targets from GCC + driver to lto-wrapper. */ + #define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES" ++#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT" + + enum lto_mode_d { + LTO_MODE_NONE, /* Not doing LTO. */ +@@ -790,8 +791,10 @@ compile_images_for_offload_targets (unsi + if (!target_names) + return; + unsigned num_targets = parse_env_var (target_names, &names, NULL); ++ const char *target_names_default = getenv (OFFLOAD_TARGET_DEFAULT_ENV); + + int next_name_entry = 0; ++ bool hsa_seen = false; + const char *compiler_path = getenv ("COMPILER_PATH"); + if (!compiler_path) + goto out; +@@ -804,18 +807,32 @@ compile_images_for_offload_targets (unsi + /* HSA does not use LTO-like streaming and a different compiler, skip + it. */ + if (strcmp (names[i], "hsa") == 0) +- continue; ++ { ++ hsa_seen = true; ++ continue; ++ } + + offload_names[next_name_entry] + = compile_offload_image (names[i], compiler_path, in_argc, in_argv, + compiler_opts, compiler_opt_count, + linker_opts, linker_opt_count); + if (!offload_names[next_name_entry]) +- fatal_error (input_location, +- "problem with building target image for %s\n", names[i]); ++ { ++ if (target_names_default != NULL) ++ continue; ++ fatal_error (input_location, ++ "problem with building target image for %s\n", ++ names[i]); ++ } + next_name_entry++; + } + ++ if (next_name_entry == 0 && !hsa_seen) ++ { ++ free (offload_names); ++ offload_names = NULL; ++ } ++ + out: + free_array_of_ptrs ((void **) names, num_targets); + } +Index: b/src/libgomp/target.c +=================================================================== +--- a/src/libgomp/target.c ++++ b/src/libgomp/target.c +@@ -2356,7 +2356,7 @@ gomp_load_plugin_for_device (struct gomp + + void *plugin_handle = dlopen (plugin_name, RTLD_LAZY); + if (!plugin_handle) +- goto dl_fail; ++ return 0; + + /* Check if all required functions are available in the plugin and store + their handlers. None of the symbols can legitimately be NULL, --- gcc-7-7.2.0.orig/debian/patches/gcc-fuse-ld-lld-doc.diff +++ gcc-7-7.2.0/debian/patches/gcc-fuse-ld-lld-doc.diff @@ -0,0 +1,17 @@ +# DP: Allow to use lld with -fuse-ld=ld.lld (documentation) + +Index: gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi (revision 246158) ++++ a/src/gcc/doc/invoke.texi (working copy) +@@ -10501,6 +10501,10 @@ + @opindex fuse-ld=gold + Use the @command{gold} linker instead of the default linker. + ++@item -fuse-ld=lld ++@opindex fuse-ld=lld ++Use the LLVM @command{lld} linker instead of the default linker. ++ + @cindex Libraries + @item -l@var{library} + @itemx -l @var{library} --- gcc-7-7.2.0.orig/debian/patches/gcc-fuse-ld-lld.diff +++ gcc-7-7.2.0/debian/patches/gcc-fuse-ld-lld.diff @@ -0,0 +1,83 @@ +# DP: Allow to use lld with -fuse-ld=ld.lld + +Index: b/src/gcc/collect2.c +=================================================================== +--- a/src/gcc/collect2.c ++++ b/src/gcc/collect2.c +@@ -831,6 +831,7 @@ main (int argc, char **argv) + USE_PLUGIN_LD, + USE_GOLD_LD, + USE_BFD_LD, ++ USE_LLD_LD, + USE_LD_MAX + } selected_linker = USE_DEFAULT_LD; + static const char *const ld_suffixes[USE_LD_MAX] = +@@ -838,7 +839,8 @@ main (int argc, char **argv) + "ld", + PLUGIN_LD_SUFFIX, + "ld.gold", +- "ld.bfd" ++ "ld.bfd", ++ "ld.lld" + }; + static const char *const real_ld_suffix = "real-ld"; + static const char *const collect_ld_suffix = "collect-ld"; +@@ -1004,6 +1006,8 @@ main (int argc, char **argv) + selected_linker = USE_BFD_LD; + else if (strcmp (argv[i], "-fuse-ld=gold") == 0) + selected_linker = USE_GOLD_LD; ++ else if (strcmp (argv[i], "-fuse-ld=lld") == 0) ++ selected_linker = USE_LLD_LD; + + #ifdef COLLECT_EXPORT_LIST + /* These flags are position independent, although their order +@@ -1093,7 +1097,8 @@ main (int argc, char **argv) + /* Maybe we know the right file to use (if not cross). */ + ld_file_name = 0; + #ifdef DEFAULT_LINKER +- if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD) ++ if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD || ++ selected_linker == USE_LLD_LD) + { + char *linker_name; + # ifdef HOST_EXECUTABLE_SUFFIX +@@ -1307,7 +1312,7 @@ main (int argc, char **argv) + else if (!use_collect_ld + && strncmp (arg, "-fuse-ld=", 9) == 0) + { +- /* Do not pass -fuse-ld={bfd|gold} to the linker. */ ++ /* Do not pass -fuse-ld={bfd|gold|lld} to the linker. */ + ld1--; + ld2--; + } +Index: b/src/gcc/common.opt +=================================================================== +--- a/src/gcc/common.opt ++++ b/src/gcc/common.opt +@@ -2635,9 +2635,13 @@ Common Driver Negative(fuse-ld=gold) + Use the bfd linker instead of the default linker. + + fuse-ld=gold +-Common Driver Negative(fuse-ld=bfd) ++Common Driver Negative(fuse-ld=lld) + Use the gold linker instead of the default linker. + ++fuse-ld=lld ++Common Driver Negative(fuse-ld=bfd) ++Use the lld LLVM linker instead of the default linker. ++ + fuse-linker-plugin + Common Undocumented Var(flag_use_linker_plugin) + +Index: b/src/gcc/opts.c +=================================================================== +--- a/src/gcc/opts.c ++++ b/src/gcc/opts.c +@@ -2322,6 +2322,7 @@ common_handle_option (struct gcc_options + + case OPT_fuse_ld_bfd: + case OPT_fuse_ld_gold: ++ case OPT_fuse_ld_lld: + case OPT_fuse_linker_plugin: + /* No-op. Used by the driver and passed to us because it starts with f.*/ + break; --- gcc-7-7.2.0.orig/debian/patches/gcc-gfdl-build.diff +++ gcc-7-7.2.0/debian/patches/gcc-gfdl-build.diff @@ -0,0 +1,39 @@ +# DP: Build a dummy s-tm-texi without access to the texinfo sources + +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -2406,30 +2406,8 @@ s-tm-texi: $(srcdir)/doc/../doc/tm.texi + # \r is not portable to Solaris tr, therefore we have a special + # case for ASCII. We use \r for other encodings like EBCDIC. + s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in +- $(RUN_GEN) build/genhooks$(build_exeext) -d \ +- $(srcdir)/doc/tm.texi.in > tmp-tm.texi +- case `echo X|tr X '\101'` in \ +- A) tr -d '\015' < tmp-tm.texi > tmp2-tm.texi ;; \ +- *) tr -d '\r' < tmp-tm.texi > tmp2-tm.texi ;; \ +- esac +- mv tmp2-tm.texi tmp-tm.texi +- $(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi +- @if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \ +- $(STAMP) $@; \ +- elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \ +- && ( test $(srcdir)/doc/tm.texi -nt $(srcdir)/target.def \ +- || test $(srcdir)/doc/tm.texi -nt $(srcdir)/c-family/c-target.def \ +- || test $(srcdir)/doc/tm.texi -nt $(srcdir)/common/common-target.def \ +- ); then \ +- echo >&2 ; \ +- echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \ +- false; \ +- else \ +- echo >&2 ; \ +- echo Verify that you have permission to grant a GFDL license for all >&2 ; \ +- echo new text in tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \ +- false; \ +- fi ++ cat $(srcdir)/doc/tm.texi.in > tmp-tm.texi ++ $(STAMP) $@ + + gimple-match.c: s-match gimple-match-head.c ; @true + generic-match.c: s-match generic-match-head.c ; @true --- gcc-7-7.2.0.orig/debian/patches/gcc-hash-style-both.diff +++ gcc-7-7.2.0/debian/patches/gcc-hash-style-both.diff @@ -0,0 +1,167 @@ +# DP: Link using --hash-style=both (alpha, amd64, armel, armhf, ia64, i386, powerpc, ppc64, s390, sparc) + +2006-07-11 Jakub Jelinek + + * config/i386/linux.h (LINK_SPEC): Add --hash-style=both. + * config/i386/linux64.h (LINK_SPEC): Likewise. + * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise. + * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32, + LINK_OS_LINUX_SPEC64): Likewise. + * config/s390/linux.h (LINK_SPEC): Likewise. + * config/ia64/linux.h (LINK_SPEC): Likewise. + * config/sparc/linux.h (LINK_SPEC): Likewise. + * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC, + LINK_ARCH64_SPEC): Likewise. + * config/alpha/linux-elf.h (LINK_SPEC): Likewise. + +2009-12-21 Matthias Klose + + * config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=both. + +2012-11-17 Matthias Klose + + * config/aarch64/aarch64-linux.h (LINK_SPEC): Add --hash-style=both. + +--- + gcc/config/alpha/linux-elf.h | 2 +- + gcc/config/i386/linux.h | 2 +- + gcc/config/i386/linux64.h | 2 +- + gcc/config/ia64/linux.h | 2 +- + gcc/config/rs6000/linux64.h | 4 ++-- + gcc/config/rs6000/sysv4.h | 2 +- + gcc/config/s390/linux.h | 2 +- + gcc/config/sparc/linux.h | 2 +- + 8 files changed, 9 insertions(+), 9 deletions(-) + +Index: b/src/gcc/config/alpha/linux-elf.h +=================================================================== +--- a/src/gcc/config/alpha/linux-elf.h ++++ b/src/gcc/config/alpha/linux-elf.h +@@ -37,7 +37,7 @@ + + #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER + +-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ ++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ + %{shared:-shared} \ + %{!shared: \ +Index: b/src/gcc/config/ia64/linux.h +=================================================================== +--- a/src/gcc/config/ia64/linux.h ++++ b/src/gcc/config/ia64/linux.h +@@ -58,7 +58,7 @@ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "\ ++#define LINK_SPEC " --hash-style=both \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/rs6000/linux64.h +=================================================================== +--- a/src/gcc/config/rs6000/linux64.h ++++ b/src/gcc/config/rs6000/linux64.h +@@ -385,11 +385,11 @@ + " -m elf64ppc") + #endif + +-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=both %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}" + +-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --hash-style=both %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}" + +Index: b/src/gcc/config/rs6000/sysv4.h +=================================================================== +--- a/src/gcc/config/rs6000/sysv4.h ++++ b/src/gcc/config/rs6000/sysv4.h +@@ -788,7 +788,7 @@ + #define GNU_USER_DYNAMIC_LINKER \ + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) + +-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + +Index: b/src/gcc/config/s390/linux.h +=================================================================== +--- a/src/gcc/config/s390/linux.h ++++ b/src/gcc/config/s390/linux.h +@@ -65,7 +65,7 @@ + + #undef LINK_SPEC + #define LINK_SPEC \ +- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ ++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \ + %{shared:-shared} \ + %{!shared: \ + %{static:-static} \ +Index: b/src/gcc/config/sparc/linux.h +=================================================================== +--- a/src/gcc/config/sparc/linux.h ++++ b/src/gcc/config/sparc/linux.h +@@ -86,7 +86,7 @@ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ ++#define LINK_SPEC "-m elf32_sparc --hash-style=both %{shared:-shared} \ + %{!mno-relax:%{!r:-relax}} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/arm/linux-elf.h +=================================================================== +--- a/src/gcc/config/arm/linux-elf.h ++++ b/src/gcc/config/arm/linux-elf.h +@@ -67,6 +67,7 @@ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ + -X \ ++ --hash-style=both \ + %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + +Index: b/src/gcc/config/i386/gnu-user.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user.h ++++ b/src/gcc/config/i386/gnu-user.h +@@ -74,7 +74,7 @@ + { "link_emulation", GNU_USER_LINK_EMULATION },\ + { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } + +-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ ++#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +Index: b/src/gcc/config/i386/gnu-user64.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user64.h ++++ b/src/gcc/config/i386/gnu-user64.h +@@ -56,6 +56,7 @@ + "%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \ + %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ + %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ ++ --hash-style=both \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/aarch64/aarch64-linux.h +=================================================================== +--- a/src/gcc/config/aarch64/aarch64-linux.h ++++ b/src/gcc/config/aarch64/aarch64-linux.h +@@ -24,6 +24,7 @@ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64.so.1" + + #define LINUX_TARGET_LINK_SPEC "%{h*} \ ++ --hash-style=both \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ --- gcc-7-7.2.0.orig/debian/patches/gcc-hash-style-gnu.diff +++ gcc-7-7.2.0/debian/patches/gcc-hash-style-gnu.diff @@ -0,0 +1,169 @@ +# DP: Link using --hash-style=gnu (aarch64, alpha, amd64, armel, armhf, ia64, +# DP: i386, powerpc, ppc64, s390, sparc) + +2006-07-11 Jakub Jelinek + + * config/i386/linux.h (LINK_SPEC): Add --hash-style=gnu. + * config/i386/linux64.h (LINK_SPEC): Likewise. + * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise. + * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32, + LINK_OS_LINUX_SPEC64): Likewise. + * config/s390/linux.h (LINK_SPEC): Likewise. + * config/ia64/linux.h (LINK_SPEC): Likewise. + * config/sparc/linux.h (LINK_SPEC): Likewise. + * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC, + LINK_ARCH64_SPEC): Likewise. + * config/alpha/linux-elf.h (LINK_SPEC): Likewise. + +2009-12-21 Matthias Klose + + * config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=gnu. + +2012-11-17 Matthias Klose + + * config/aarch64/aarch64-linux.h (LINK_SPEC): Add --hash-style=gnu. + +--- + gcc/config/alpha/linux-elf.h | 2 +- + gcc/config/i386/linux.h | 2 +- + gcc/config/i386/linux64.h | 2 +- + gcc/config/ia64/linux.h | 2 +- + gcc/config/rs6000/linux64.h | 4 ++-- + gcc/config/rs6000/sysv4.h | 2 +- + gcc/config/s390/linux.h | 2 +- + gcc/config/sparc/linux.h | 2 +- + 8 files changed, 9 insertions(+), 9 deletions(-) + +Index: b/src/gcc/config/alpha/linux-elf.h +=================================================================== +--- a/src/gcc/config/alpha/linux-elf.h ++++ b/src/gcc/config/alpha/linux-elf.h +@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. + + #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER + +-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ ++#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ + %{shared:-shared} \ + %{!shared: \ +Index: b/src/gcc/config/ia64/linux.h +=================================================================== +--- a/src/gcc/config/ia64/linux.h ++++ b/src/gcc/config/ia64/linux.h +@@ -58,7 +58,7 @@ do { \ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "\ ++#define LINK_SPEC " --hash-style=gnu \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/rs6000/linux64.h +=================================================================== +--- a/src/gcc/config/rs6000/linux64.h ++++ b/src/gcc/config/rs6000/linux64.h +@@ -469,12 +469,12 @@ extern int dot_symbols; + " -m elf64ppc") + #endif + +-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=gnu %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ + %(link_os_extra_spec32)" + +-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --hash-style=gnu %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \ + %(link_os_extra_spec64)" +Index: b/src/gcc/config/rs6000/sysv4.h +=================================================================== +--- a/src/gcc/config/rs6000/sysv4.h ++++ b/src/gcc/config/rs6000/sysv4.h +@@ -810,7 +810,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ + MUSL_DYNAMIC_LINKER) + +-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + +Index: b/src/gcc/config/s390/linux.h +=================================================================== +--- a/src/gcc/config/s390/linux.h ++++ b/src/gcc/config/s390/linux.h +@@ -78,7 +78,7 @@ along with GCC; see the file COPYING3. + + #undef LINK_SPEC + #define LINK_SPEC \ +- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ ++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \ + %{shared:-shared} \ + %{!shared: \ + %{static:-static} \ +Index: b/src/gcc/config/sparc/linux.h +=================================================================== +--- a/src/gcc/config/sparc/linux.h ++++ b/src/gcc/config/sparc/linux.h +@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ ++#define LINK_SPEC "-m elf32_sparc --hash-style=gnu %{shared:-shared} \ + %{!mno-relax:%{!r:-relax}} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/arm/linux-elf.h +=================================================================== +--- a/src/gcc/config/arm/linux-elf.h ++++ b/src/gcc/config/arm/linux-elf.h +@@ -70,6 +70,7 @@ + %{rdynamic:-export-dynamic} \ + %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ + -X \ ++ --hash-style=gnu \ + %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + +Index: b/src/gcc/config/i386/gnu-user.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user.h ++++ b/src/gcc/config/i386/gnu-user.h +@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. + { "link_emulation", GNU_USER_LINK_EMULATION },\ + { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } + +-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ ++#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +Index: b/src/gcc/config/i386/gnu-user64.h +=================================================================== +--- a/src/gcc/config/i386/gnu-user64.h ++++ b/src/gcc/config/i386/gnu-user64.h +@@ -56,6 +56,7 @@ see the files COPYING3 and COPYING.RUNTI + "%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \ + %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ + %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ ++ --hash-style=gnu \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +Index: b/src/gcc/config/aarch64/aarch64-linux.h +=================================================================== +--- a/src/gcc/config/aarch64/aarch64-linux.h ++++ b/src/gcc/config/aarch64/aarch64-linux.h +@@ -35,6 +35,7 @@ + #define CPP_SPEC "%{pthread:-D_REENTRANT}" + + #define LINUX_TARGET_LINK_SPEC "%{h*} \ ++ --hash-style=gnu \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ --- gcc-7-7.2.0.orig/debian/patches/gcc-ice-apport.diff +++ gcc-7-7.2.0/debian/patches/gcc-ice-apport.diff @@ -0,0 +1,24 @@ +# DP: Report an ICE to apport (if apport is available +# DP: and the environment variable GCC_NOAPPORT is not set) + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -6902,6 +6902,16 @@ do_report_bug (const char **new_argv, co + fflush(stderr); + free(cmd); + } ++ if (!env.get ("GCC_NOAPPORT") ++ && !access ("/usr/share/apport/gcc_ice_hook", R_OK | X_OK)) ++ { ++ char *cmd = XNEWVEC (char, 50 + strlen (*out_file) ++ + strlen (new_argv[0])); ++ sprintf (cmd, "/usr/share/apport/gcc_ice_hook %s %s", ++ new_argv[0], *out_file); ++ system (cmd); ++ free (cmd); ++ } + /* Make sure it is not deleted. */ + free (*out_file); + *out_file = NULL; --- gcc-7-7.2.0.orig/debian/patches/gcc-ice-dump.diff +++ gcc-7-7.2.0/debian/patches/gcc-ice-dump.diff @@ -0,0 +1,41 @@ +# DP: For ICEs, dump the preprocessed source file to stderr +# DP: when in a distro build environment. + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -3163,7 +3163,8 @@ execute (void) + /* For ICEs in cc1, cc1obj, cc1plus see if it is + reproducible or not. */ + const char *p; +- if (flag_report_bug ++ const char *deb_build_options = env.get("DEB_BUILD_OPTIONS"); ++ if ((flag_report_bug || deb_build_options) + && WEXITSTATUS (status) == ICE_EXIT_CODE + && i == 0 + && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR)) +@@ -6884,8 +6885,23 @@ do_report_bug (const char **new_argv, co + + if (status == ATTEMPT_STATUS_SUCCESS) + { ++ const char *deb_build_options = env.get("DEB_BUILD_OPTIONS"); ++ + fnotice (stderr, "Preprocessed source stored into %s file," + " please attach this to your bugreport.\n", *out_file); ++ if (deb_build_options) ++ { ++ char *cmd = XNEWVEC (char, 50 + strlen (*out_file)); ++ ++ sprintf(cmd, "/usr/bin/awk '{print \"%d:\", $0}' %s >&2", getpid(), *out_file); ++ fprintf(stderr, "=== BEGIN GCC DUMP ===\n"); ++ fflush(stderr); ++ system(cmd); ++ fflush(stderr); ++ fprintf(stderr, "=== END GCC DUMP ===\n"); ++ fflush(stderr); ++ free(cmd); ++ } + /* Make sure it is not deleted. */ + free (*out_file); + *out_file = NULL; --- gcc-7-7.2.0.orig/debian/patches/gcc-linaro-doc.diff +++ gcc-7-7.2.0/debian/patches/gcc-linaro-doc.diff @@ -0,0 +1,145 @@ +# DP: Changes for the Linaro 7-2017.09 snapshot (documentation). + +--- a/src/gcc/doc/install.texi ++++ b/src/gcc/doc/install.texi +@@ -1097,14 +1097,18 @@ for each target is given below. + + @table @code + @item arm*-*-* +-@var{list} is one of@code{default}, @code{aprofile} or @code{rmprofile}. +-Specifying @code{default} is equivalent to omitting this option, ie. only the +-default runtime library will be enabled. Specifying @code{aprofile} or +-@code{rmprofile} builds multilibs for a combination of ISA, architecture, +-FPU available and floating-point ABI. ++@var{list} is a comma separated list of @code{aprofile} and @code{rmprofile} ++to build multilibs for A or R and M architecture profiles respectively. Note ++that, due to some limitation of the current multilib framework, using the ++combined @code{aprofile,rmprofile} multilibs selects in some cases a less ++optimal multilib than when using the multilib profile for the architecture ++targetted. The special value @code{default} is also accepted and is equivalent ++to omitting the option, ie. only the default run-time library will be enabled. + + The table below gives the combination of ISAs, architectures, FPUs and + floating-point ABIs for which multilibs are built for each accepted value. ++The union of these options is considered when specifying both @code{aprofile} ++and @code{rmprofile}. + + @multitable @columnfractions .15 .28 .30 + @item Option @tab aprofile @tab rmprofile +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -580,15 +580,14 @@ Objective-C and Objective-C++ Dialects}. + -mgeneral-regs-only @gol + -mcmodel=tiny -mcmodel=small -mcmodel=large @gol + -mstrict-align @gol +--momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol ++-momit-leaf-frame-pointer @gol + -mtls-dialect=desc -mtls-dialect=traditional @gol + -mtls-size=@var{size} @gol +--mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 @gol +--mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 @gol +--mlow-precision-recip-sqrt -mno-low-precision-recip-sqrt@gol +--mlow-precision-sqrt -mno-low-precision-sqrt@gol +--mlow-precision-div -mno-low-precision-div @gol +--march=@var{name} -mcpu=@var{name} -mtune=@var{name}} ++-mfix-cortex-a53-835769 -mfix-cortex-a53-843419 @gol ++-mlow-precision-recip-sqrt -mlow-precision-sqrt -mlow-precision-div @gol ++-mpc-relative-literal-loads @gol ++-msign-return-address=@var{scope} @gol ++-march=@var{name} -mcpu=@var{name} -mtune=@var{name} -moverride=@var{string}} + + @emph{Adapteva Epiphany Options} + @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol +@@ -13961,7 +13960,7 @@ support for the ARMv8.2-A architecture extensions. + + The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler + support for the ARMv8.1-A architecture extension. In particular, it +-enables the @samp{+crc} and @samp{+lse} features. ++enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features. + + The value @samp{native} is available on native AArch64 GNU/Linux and + causes the compiler to pick the architecture of the host system. This +@@ -14034,8 +14033,10 @@ across releases. + This option is only intended to be useful when developing GCC. + + @item -mpc-relative-literal-loads ++@itemx -mno-pc-relative-literal-loads + @opindex mpc-relative-literal-loads +-Enable PC-relative literal loads. With this option literal pools are ++@opindex mno-pc-relative-literal-loads ++Enable or disable PC-relative literal loads. With this option literal pools are + accessed using a single instruction and emitted after each function. This + limits the maximum size of functions to 1MB. This is enabled by default for + @option{-mcmodel=tiny}. +@@ -14074,8 +14075,15 @@ instructions. This is on by default for all possible values for options + @item lse + Enable Large System Extension instructions. This is on by default for + @option{-march=armv8.1-a}. ++@item rdma ++Enable Round Double Multiply Accumulate instructions. This is on by default ++for @option{-march=armv8.1-a}. + @item fp16 + Enable FP16 extension. This also enables floating-point instructions. ++@item rcpc ++Enable the RcPc extension. This does not change code generation from GCC, ++but is passed on to the assembler, enabling inline asm statements to use ++instructions from the RcPc extension. + + @end table + +--- a/src/gcc/doc/sourcebuild.texi ++++ b/src/gcc/doc/sourcebuild.texi +@@ -1570,6 +1570,12 @@ Test system supports executing NEON v2 instructions. + ARM Target supports @code{-mfpu=neon -mfloat-abi=softfp} or compatible + options. Some multilibs may be incompatible with these options. + ++@item arm_neon_ok_no_float_abi ++@anchor{arm_neon_ok_no_float_abi} ++ARM Target supports NEON with @code{-mfpu=neon}, but without any ++-mfloat-abi= option. Some multilibs may be incompatible with this ++option. ++ + @item arm_neonv2_ok + @anchor{arm_neonv2_ok} + ARM Target supports @code{-mfpu=neon-vfpv4 -mfloat-abi=softfp} or compatible +@@ -2274,6 +2280,11 @@ the codeset to convert to. + Skip the test if the target does not support profiling with option + @var{profopt}. + ++@item dg-require-stack-check @var{check} ++Skip the test if the target does not support the @code{-fstack-check} ++option. If @var{check} is @code{""}, support for @code{-fstack-check} ++is checked, for @code{-fstack-check=("@var{check}")} otherwise. ++ + @item dg-require-visibility @var{vis} + Skip the test if the target does not support the @code{visibility} attribute. + If @var{vis} is @code{""}, support for @code{visibility("hidden")} is +--- a/src/gcc/doc/tm.texi ++++ b/src/gcc/doc/tm.texi +@@ -3684,6 +3684,15 @@ such as the result of @code{get_frame_size ()} and the tables of + registers @code{df_regs_ever_live_p} and @code{call_used_regs}. + @end defmac + ++@deftypefn {Target Hook} void TARGET_COMPUTE_FRAME_LAYOUT (void) ++This target hook is called once each time the frame layout needs to be ++recalculated. The calculations can be cached by the target and can then ++be used by @code{INITIAL_ELIMINATION_OFFSET} instead of re-computing the ++layout on every invocation of that hook. This is particularly useful ++for targets that have an expensive frame layout function. Implementing ++this callback is optional. ++@end deftypefn ++ + @node Stack Arguments + @subsection Passing Function Arguments on the Stack + @cindex arguments on stack +--- a/src/gcc/doc/tm.texi.in ++++ b/src/gcc/doc/tm.texi.in +@@ -3213,6 +3213,8 @@ such as the result of @code{get_frame_size ()} and the tables of + registers @code{df_regs_ever_live_p} and @code{call_used_regs}. + @end defmac + ++@hook TARGET_COMPUTE_FRAME_LAYOUT ++ + @node Stack Arguments + @subsection Passing Function Arguments on the Stack + @cindex arguments on stack --- gcc-7-7.2.0.orig/debian/patches/gcc-linaro-no-macros.diff +++ gcc-7-7.2.0/debian/patches/gcc-linaro-no-macros.diff @@ -0,0 +1,92 @@ +# DP : Don't add the __LINARO_RELEASE__ and __LINARO_SPIN__ macros for distro builds. + +Index: b/src/gcc/cppbuiltin.c +=================================================================== +--- a/src/gcc/cppbuiltin.c ++++ b/src/gcc/cppbuiltin.c +@@ -53,41 +53,18 @@ parse_basever (int *major, int *minor, i + *patchlevel = s_patchlevel; + } + +-/* Parse a LINAROVER version string of the format "M.m-year.month[-spin][~dev]" +- to create Linaro release number YYYYMM and spin version. */ +-static void +-parse_linarover (int *release, int *spin) +-{ +- static int s_year = -1, s_month, s_spin; +- +- if (s_year == -1) +- if (sscanf (LINAROVER, "%*[^-]-%d.%d-%d", &s_year, &s_month, &s_spin) != 3) +- { +- sscanf (LINAROVER, "%*[^-]-%d.%d", &s_year, &s_month); +- s_spin = 0; +- } +- +- if (release) +- *release = s_year * 100 + s_month; +- +- if (spin) +- *spin = s_spin; +-} + + /* Define __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ and __VERSION__. */ + static void + define__GNUC__ (cpp_reader *pfile) + { +- int major, minor, patchlevel, linaro_release, linaro_spin; ++ int major, minor, patchlevel; + + parse_basever (&major, &minor, &patchlevel); +- parse_linarover (&linaro_release, &linaro_spin); + cpp_define_formatted (pfile, "__GNUC__=%d", major); + cpp_define_formatted (pfile, "__GNUC_MINOR__=%d", minor); + cpp_define_formatted (pfile, "__GNUC_PATCHLEVEL__=%d", patchlevel); + cpp_define_formatted (pfile, "__VERSION__=\"%s\"", version_string); +- cpp_define_formatted (pfile, "__LINARO_RELEASE__=%d", linaro_release); +- cpp_define_formatted (pfile, "__LINARO_SPIN__=%d", linaro_spin); + cpp_define_formatted (pfile, "__ATOMIC_RELAXED=%d", MEMMODEL_RELAXED); + cpp_define_formatted (pfile, "__ATOMIC_SEQ_CST=%d", MEMMODEL_SEQ_CST); + cpp_define_formatted (pfile, "__ATOMIC_ACQUIRE=%d", MEMMODEL_ACQUIRE); +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -845,12 +845,10 @@ BASEVER := $(srcdir)/BASE-VER # 4.x + DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, "" + DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty + REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX] +-LINAROVER := $(srcdir)/LINARO-VERSION # M.x-YYYY.MM[-S][~dev] + + BASEVER_c := $(shell cat $(BASEVER)) + DEVPHASE_c := $(shell cat $(DEVPHASE)) + DATESTAMP_c := $(shell cat $(DATESTAMP)) +-LINAROVER_c := $(shell cat $(LINAROVER)) + + ifeq (,$(wildcard $(REVISION))) + REVISION_c := +@@ -877,7 +875,6 @@ DATESTAMP_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(DATESTAMP_c))\"" + PKGVERSION_s:= "\"@PKGVERSION@\"" + BUGURL_s := "\"@REPORT_BUGS_TO@\"" +-LINAROVER_s := "\"$(LINAROVER_c)\"" + + PKGVERSION := @PKGVERSION@ + BUGURL_TEXI := @REPORT_BUGS_TEXI@ +@@ -2804,9 +2801,8 @@ PREPROCESSOR_DEFINES = \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + +-CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) \ +- -DLINAROVER=$(LINAROVER_s) +-cppbuiltin.o: $(BASEVER) $(LINAROVER) ++CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) ++cppbuiltin.o: $(BASEVER) + + CFLAGS-cppdefault.o += $(PREPROCESSOR_DEFINES) + +Index: b/src/gcc/LINARO-VERSION +=================================================================== +--- a/src/gcc/LINARO-VERSION ++++ /dev/null +@@ -1,1 +0,0 @@ +-Snapshot 7.2-2017.09 --- gcc-7-7.2.0.orig/debian/patches/gcc-linaro-revert-r249596.diff +++ gcc-7-7.2.0/debian/patches/gcc-linaro-revert-r249596.diff @@ -0,0 +1,38 @@ +Index: gcc/testsuite/gcc.target/arm/fpscr.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/arm/fpscr.c (revision 249596) ++++ a/src/gcc/testsuite/gcc.target/arm/fpscr.c (nonexistent) +@@ -1,16 +0,0 @@ +-/* Test the fpscr builtins. */ +- +-/* { dg-do compile } */ +-/* { dg-require-effective-target arm_fp_ok } */ +-/* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */ +-/* { dg-add-options arm_fp } */ +- +-void +-test_fpscr () +-{ +- volatile unsigned int status = __builtin_arm_get_fpscr (); +- __builtin_arm_set_fpscr (status); +-} +- +-/* { dg-final { scan-assembler "mrc\tp10, 7, r\[0-9\]+, cr1, cr0, 0" } } */ +-/* { dg-final { scan-assembler "mcr\tp10, 7, r\[0-9\]+, cr1, cr0, 0" } } */ +Index: gcc/config/arm/arm-builtins.c +=================================================================== +--- a/src/gcc/config/arm/arm-builtins.c (revision 249596) ++++ a/src/gcc/config/arm/arm-builtins.c (revision 249586) +@@ -1893,10 +1893,10 @@ + = build_function_type_list (unsigned_type_node, NULL); + + arm_builtin_decls[ARM_BUILTIN_GET_FPSCR] +- = add_builtin_function ("__builtin_arm_get_fpscr", ftype_get_fpscr, ++ = add_builtin_function ("__builtin_arm_ldfscr", ftype_get_fpscr, + ARM_BUILTIN_GET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE); + arm_builtin_decls[ARM_BUILTIN_SET_FPSCR] +- = add_builtin_function ("__builtin_arm_set_fpscr", ftype_set_fpscr, ++ = add_builtin_function ("__builtin_arm_stfscr", ftype_set_fpscr, + ARM_BUILTIN_SET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE); + } + --- gcc-7-7.2.0.orig/debian/patches/gcc-linaro-revert-r253234.diff +++ gcc-7-7.2.0/debian/patches/gcc-linaro-revert-r253234.diff @@ -0,0 +1,82 @@ +# DP: Revert r253234, already in the Linaro branch. + +Index: b/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c +@@ -1,7 +1,6 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ +-/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ +-/* { dg-lto-options {{-flto -mfpu=neon}} } */ ++/* { dg-lto-options {{-flto}} } */ + + #include "arm_neon.h" + +Index: b/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c +@@ -1,7 +1,7 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ +-/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ + /* { dg-lto-options {{-flto -mfpu=neon}} } */ ++/* { dg-suppress-ld-options {-mfpu=neon} } */ + + #include "arm_neon.h" + +Index: b/src/gcc/testsuite/lib/target-supports.exp +=================================================================== +--- a/src/gcc/testsuite/lib/target-supports.exp ++++ b/src/gcc/testsuite/lib/target-supports.exp +@@ -3428,9 +3428,8 @@ proc check_effective_target_arm_neon_ok_ + global et_arm_neon_flags + set et_arm_neon_flags "" + if { [check_effective_target_arm32] } { +- foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard -march=armv7-a"} { ++ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a"} { + if { [check_no_compiler_messages_nocache arm_neon_ok object { +- #include + int dummy; + #ifndef __ARM_NEON__ + #error not NEON +@@ -3455,38 +3454,6 @@ proc check_effective_target_arm_neon_ok + check_effective_target_arm_neon_ok_nocache] + } + +-# Return 1 if this is an ARM target supporting -mfpu=neon without any +-# -mfloat-abi= option. Useful in tests where add_options is not +-# supported (such as lto tests). +- +-proc check_effective_target_arm_neon_ok_no_float_abi_nocache { } { +- if { [check_effective_target_arm32] } { +- foreach flags {"-mfpu=neon"} { +- if { [check_no_compiler_messages_nocache arm_neon_ok_no_float_abi object { +- #include +- int dummy; +- #ifndef __ARM_NEON__ +- #error not NEON +- #endif +- /* Avoid the case where a test adds -mfpu=neon, but the toolchain is +- configured for -mcpu=arm926ej-s, for example. */ +- #if __ARM_ARCH < 7 || __ARM_ARCH_PROFILE == 'M' +- #error Architecture does not support NEON. +- #endif +- } "$flags"] } { +- return 1 +- } +- } +- } +- +- return 0 +-} +- +-proc check_effective_target_arm_neon_ok_no_float_abi { } { +- return [check_cached_effective_target arm_neon_ok_no_float_abi \ +- check_effective_target_arm_neon_ok_no_float_abi_nocache] +-} +- + proc check_effective_target_arm_crc_ok_nocache { } { + global et_arm_crc_flags + set et_arm_crc_flags "-march=armv8-a+crc" --- gcc-7-7.2.0.orig/debian/patches/gcc-linaro.diff +++ gcc-7-7.2.0/debian/patches/gcc-linaro.diff @@ -0,0 +1,7769 @@ +# DP: Changes for the Linaro 7-2017.09 snapshot. + +MSG=$(git log origin/linaro/gcc-7-branch --format=format:"%s" -n 1 --grep "Merge branches"); SVN=${MSG##* }; git log origin/gcc-7-branch --format=format:"%H" -n 1 --grep "gcc-7-branch@${SVN%.}" + +LANG=C git diff --no-renames bb85d61e6bfbadee4494e034a5d8187cf0626aed 1604249e382610b087a72d0d07103f815458cec0 \ + | egrep -v '^(diff|index) ' \ + | filterdiff --strip=1 --addoldprefix=a/src/ --addnewprefix=b/src/ \ + | sed 's,a/src//dev/null,/dev/null,' + +--- /dev/null ++++ b/src/gcc/LINARO-VERSION +@@ -0,0 +1 @@ ++Snapshot 7.2-2017.09 +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -845,10 +845,12 @@ BASEVER := $(srcdir)/BASE-VER # 4.x.y + DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, "" + DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty + REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX] ++LINAROVER := $(srcdir)/LINARO-VERSION # M.x-YYYY.MM[-S][~dev] + + BASEVER_c := $(shell cat $(BASEVER)) + DEVPHASE_c := $(shell cat $(DEVPHASE)) + DATESTAMP_c := $(shell cat $(DATESTAMP)) ++LINAROVER_c := $(shell cat $(LINAROVER)) + + ifeq (,$(wildcard $(REVISION))) + REVISION_c := +@@ -875,6 +877,7 @@ DATESTAMP_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(DATESTAMP_c))\"" + PKGVERSION_s:= "\"@PKGVERSION@\"" + BUGURL_s := "\"@REPORT_BUGS_TO@\"" ++LINAROVER_s := "\"$(LINAROVER_c)\"" + + PKGVERSION := @PKGVERSION@ + BUGURL_TEXI := @REPORT_BUGS_TEXI@ +@@ -2801,8 +2804,9 @@ PREPROCESSOR_DEFINES = \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + +-CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) +-cppbuiltin.o: $(BASEVER) ++CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) \ ++ -DLINAROVER=$(LINAROVER_s) ++cppbuiltin.o: $(BASEVER) $(LINAROVER) + + CFLAGS-cppdefault.o += $(PREPROCESSOR_DEFINES) + +--- a/src/gcc/ccmp.c ++++ b/src/gcc/ccmp.c +@@ -38,6 +38,29 @@ along with GCC; see the file COPYING3. If not see + #include "ccmp.h" + #include "predict.h" + ++/* Check whether T is a simple boolean variable or a SSA name ++ set by a comparison operator in the same basic block. */ ++static bool ++ccmp_tree_comparison_p (tree t, basic_block bb) ++{ ++ gimple *g = get_gimple_for_ssa_name (t); ++ tree_code tcode; ++ ++ /* If we have a boolean variable allow it and generate a compare ++ to zero reg when expanding. */ ++ if (!g) ++ return (TREE_CODE (TREE_TYPE (t)) == BOOLEAN_TYPE); ++ ++ /* Check to see if SSA name is set by a comparison operator in ++ the same basic block. */ ++ if (!is_gimple_assign (g)) ++ return false; ++ if (bb != gimple_bb (g)) ++ return false; ++ tcode = gimple_assign_rhs_code (g); ++ return TREE_CODE_CLASS (tcode) == tcc_comparison; ++} ++ + /* The following functions expand conditional compare (CCMP) instructions. + Here is a short description about the over all algorithm: + * ccmp_candidate_p is used to identify the CCMP candidate +@@ -71,49 +94,69 @@ along with GCC; see the file COPYING3. If not see + static bool + ccmp_candidate_p (gimple *g) + { +- tree rhs = gimple_assign_rhs_to_tree (g); ++ tree rhs; + tree lhs, op0, op1; + gimple *gs0, *gs1; +- tree_code tcode, tcode0, tcode1; +- tcode = TREE_CODE (rhs); ++ tree_code tcode; ++ basic_block bb; ++ ++ if (!g) ++ return false; + ++ rhs = gimple_assign_rhs_to_tree (g); ++ tcode = TREE_CODE (rhs); + if (tcode != BIT_AND_EXPR && tcode != BIT_IOR_EXPR) + return false; + + lhs = gimple_assign_lhs (g); + op0 = TREE_OPERAND (rhs, 0); + op1 = TREE_OPERAND (rhs, 1); ++ bb = gimple_bb (g); + + if ((TREE_CODE (op0) != SSA_NAME) || (TREE_CODE (op1) != SSA_NAME) + || !has_single_use (lhs)) + return false; + +- gs0 = get_gimple_for_ssa_name (op0); +- gs1 = get_gimple_for_ssa_name (op1); +- if (!gs0 || !gs1 || !is_gimple_assign (gs0) || !is_gimple_assign (gs1) +- /* g, gs0 and gs1 must be in the same basic block, since current stage +- is out-of-ssa. We can not guarantee the correctness when forwording +- the gs0 and gs1 into g whithout DATAFLOW analysis. */ +- || gimple_bb (gs0) != gimple_bb (gs1) +- || gimple_bb (gs0) != gimple_bb (g)) +- return false; ++ gs0 = get_gimple_for_ssa_name (op0); /* gs0 may be NULL */ ++ gs1 = get_gimple_for_ssa_name (op1); /* gs1 may be NULL */ + +- tcode0 = gimple_assign_rhs_code (gs0); +- tcode1 = gimple_assign_rhs_code (gs1); +- if (TREE_CODE_CLASS (tcode0) == tcc_comparison +- && TREE_CODE_CLASS (tcode1) == tcc_comparison) ++ if (ccmp_tree_comparison_p (op0, bb) && ccmp_tree_comparison_p (op1, bb)) + return true; +- if (TREE_CODE_CLASS (tcode0) == tcc_comparison +- && ccmp_candidate_p (gs1)) ++ if (ccmp_tree_comparison_p (op0, bb) && ccmp_candidate_p (gs1)) + return true; +- else if (TREE_CODE_CLASS (tcode1) == tcc_comparison +- && ccmp_candidate_p (gs0)) ++ if (ccmp_tree_comparison_p (op1, bb) && ccmp_candidate_p (gs0)) + return true; + /* We skip ccmp_candidate_p (gs1) && ccmp_candidate_p (gs0) since +- there is no way to set the CC flag. */ ++ there is no way to set and maintain the CC flag on both sides of ++ the logical operator at the same time. */ + return false; + } + ++/* Extract the comparison we want to do from the tree. */ ++void ++get_compare_parts (tree t, int *up, rtx_code *rcode, ++ tree *rhs1, tree *rhs2) ++{ ++ tree_code code; ++ gimple *g = get_gimple_for_ssa_name (t); ++ if (g) ++ { ++ *up = TYPE_UNSIGNED (TREE_TYPE (gimple_assign_rhs1 (g))); ++ code = gimple_assign_rhs_code (g); ++ *rcode = get_rtx_code (code, *up); ++ *rhs1 = gimple_assign_rhs1 (g); ++ *rhs2 = gimple_assign_rhs2 (g); ++ } ++ else ++ { ++ /* If g is not a comparison operator create a compare to zero. */ ++ *up = 1; ++ *rcode = NE; ++ *rhs1 = t; ++ *rhs2 = build_zero_cst (TREE_TYPE (t)); ++ } ++} ++ + /* PREV is a comparison with the CC register which represents the + result of the previous CMP or CCMP. The function expands the + next compare based on G which is ANDed/ORed with the previous +@@ -121,20 +164,16 @@ ccmp_candidate_p (gimple *g) + PREP_SEQ returns all insns to prepare opearands for compare. + GEN_SEQ returns all compare insns. */ + static rtx +-expand_ccmp_next (gimple *g, tree_code code, rtx prev, ++expand_ccmp_next (tree op, tree_code code, rtx prev, + rtx_insn **prep_seq, rtx_insn **gen_seq) + { + rtx_code rcode; +- int unsignedp = TYPE_UNSIGNED (TREE_TYPE (gimple_assign_rhs1 (g))); +- +- gcc_assert (code == BIT_AND_EXPR || code == BIT_IOR_EXPR); +- +- rcode = get_rtx_code (gimple_assign_rhs_code (g), unsignedp); ++ int unsignedp; ++ tree rhs1, rhs2; + ++ get_compare_parts(op, &unsignedp, &rcode, &rhs1, &rhs2); + return targetm.gen_ccmp_next (prep_seq, gen_seq, prev, rcode, +- gimple_assign_rhs1 (g), +- gimple_assign_rhs2 (g), +- get_rtx_code (code, 0)); ++ rhs1, rhs2, get_rtx_code (code, 0)); + } + + /* Expand conditional compare gimple G. A typical CCMP sequence is like: +@@ -153,39 +192,42 @@ expand_ccmp_expr_1 (gimple *g, rtx_insn **prep_seq, rtx_insn **gen_seq) + { + tree exp = gimple_assign_rhs_to_tree (g); + tree_code code = TREE_CODE (exp); +- gimple *gs0 = get_gimple_for_ssa_name (TREE_OPERAND (exp, 0)); +- gimple *gs1 = get_gimple_for_ssa_name (TREE_OPERAND (exp, 1)); ++ basic_block bb = gimple_bb (g); ++ ++ tree op0 = TREE_OPERAND (exp, 0); ++ tree op1 = TREE_OPERAND (exp, 1); ++ gimple *gs0 = get_gimple_for_ssa_name (op0); ++ gimple *gs1 = get_gimple_for_ssa_name (op1); + rtx tmp; +- tree_code code0 = gimple_assign_rhs_code (gs0); +- tree_code code1 = gimple_assign_rhs_code (gs1); + + gcc_assert (code == BIT_AND_EXPR || code == BIT_IOR_EXPR); +- gcc_assert (gs0 && gs1 && is_gimple_assign (gs0) && is_gimple_assign (gs1)); + +- if (TREE_CODE_CLASS (code0) == tcc_comparison) ++ if (ccmp_tree_comparison_p (op0, bb)) + { +- if (TREE_CODE_CLASS (code1) == tcc_comparison) ++ if (ccmp_tree_comparison_p (op1, bb)) + { + int unsignedp0, unsignedp1; + rtx_code rcode0, rcode1; ++ tree logical_op0_rhs1, logical_op0_rhs2; ++ tree logical_op1_rhs1, logical_op1_rhs2; + int speed_p = optimize_insn_for_speed_p (); ++ + rtx tmp2 = NULL_RTX, ret = NULL_RTX, ret2 = NULL_RTX; + unsigned cost1 = MAX_COST; + unsigned cost2 = MAX_COST; + +- unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (gimple_assign_rhs1 (gs0))); +- unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (gimple_assign_rhs1 (gs1))); +- rcode0 = get_rtx_code (code0, unsignedp0); +- rcode1 = get_rtx_code (code1, unsignedp1); ++ get_compare_parts (op0, &unsignedp0, &rcode0, ++ &logical_op0_rhs1, &logical_op0_rhs2); ++ ++ get_compare_parts (op1, &unsignedp1, &rcode1, ++ &logical_op1_rhs1, &logical_op1_rhs2); + + rtx_insn *prep_seq_1, *gen_seq_1; + tmp = targetm.gen_ccmp_first (&prep_seq_1, &gen_seq_1, rcode0, +- gimple_assign_rhs1 (gs0), +- gimple_assign_rhs2 (gs0)); +- ++ logical_op0_rhs1, logical_op0_rhs2); + if (tmp != NULL) + { +- ret = expand_ccmp_next (gs1, code, tmp, &prep_seq_1, &gen_seq_1); ++ ret = expand_ccmp_next (op1, code, tmp, &prep_seq_1, &gen_seq_1); + cost1 = seq_cost (prep_seq_1, speed_p); + cost1 += seq_cost (gen_seq_1, speed_p); + } +@@ -197,27 +239,22 @@ expand_ccmp_expr_1 (gimple *g, rtx_insn **prep_seq, rtx_insn **gen_seq) + rtx_insn *prep_seq_2, *gen_seq_2; + if (tmp == NULL || cost1 < COSTS_N_INSNS (25)) + tmp2 = targetm.gen_ccmp_first (&prep_seq_2, &gen_seq_2, rcode1, +- gimple_assign_rhs1 (gs1), +- gimple_assign_rhs2 (gs1)); +- ++ logical_op1_rhs1, logical_op1_rhs2); + if (!tmp && !tmp2) + return NULL_RTX; +- + if (tmp2 != NULL) + { +- ret2 = expand_ccmp_next (gs0, code, tmp2, &prep_seq_2, ++ ret2 = expand_ccmp_next (op0, code, tmp2, &prep_seq_2, + &gen_seq_2); + cost2 = seq_cost (prep_seq_2, speed_p); + cost2 += seq_cost (gen_seq_2, speed_p); + } +- + if (cost2 < cost1) + { + *prep_seq = prep_seq_2; + *gen_seq = gen_seq_2; + return ret2; + } +- + *prep_seq = prep_seq_1; + *gen_seq = gen_seq_1; + return ret; +@@ -227,28 +264,18 @@ expand_ccmp_expr_1 (gimple *g, rtx_insn **prep_seq, rtx_insn **gen_seq) + tmp = expand_ccmp_expr_1 (gs1, prep_seq, gen_seq); + if (!tmp) + return NULL_RTX; +- +- return expand_ccmp_next (gs0, code, tmp, prep_seq, gen_seq); ++ return expand_ccmp_next (op0, code, tmp, prep_seq, gen_seq); + } + } + else + { + gcc_assert (gimple_assign_rhs_code (gs0) == BIT_AND_EXPR + || gimple_assign_rhs_code (gs0) == BIT_IOR_EXPR); +- +- if (TREE_CODE_CLASS (gimple_assign_rhs_code (gs1)) == tcc_comparison) +- { +- tmp = expand_ccmp_expr_1 (gs0, prep_seq, gen_seq); +- if (!tmp) +- return NULL_RTX; +- +- return expand_ccmp_next (gs1, code, tmp, prep_seq, gen_seq); +- } +- else +- { +- gcc_assert (gimple_assign_rhs_code (gs1) == BIT_AND_EXPR +- || gimple_assign_rhs_code (gs1) == BIT_IOR_EXPR); +- } ++ gcc_assert (ccmp_tree_comparison_p (op1, bb)); ++ tmp = expand_ccmp_expr_1 (gs0, prep_seq, gen_seq); ++ if (!tmp) ++ return NULL_RTX; ++ return expand_ccmp_next (op1, code, tmp, prep_seq, gen_seq); + } + + return NULL_RTX; +@@ -258,7 +285,7 @@ expand_ccmp_expr_1 (gimple *g, rtx_insn **prep_seq, rtx_insn **gen_seq) + Return NULL_RTX if G is not a legal candidate or expand fail. + Otherwise return the target. */ + rtx +-expand_ccmp_expr (gimple *g) ++expand_ccmp_expr (gimple *g, machine_mode mode) + { + rtx_insn *last; + rtx tmp; +@@ -275,7 +302,6 @@ expand_ccmp_expr (gimple *g) + { + insn_code icode; + machine_mode cc_mode = CCmode; +- tree lhs = gimple_assign_lhs (g); + rtx_code cmp_code = GET_CODE (tmp); + + #ifdef SELECT_CC_MODE +@@ -284,7 +310,6 @@ expand_ccmp_expr (gimple *g) + icode = optab_handler (cstore_optab, cc_mode); + if (icode != CODE_FOR_nothing) + { +- machine_mode mode = TYPE_MODE (TREE_TYPE (lhs)); + rtx target = gen_reg_rtx (mode); + + emit_insn (prep_seq); +@@ -300,4 +325,3 @@ expand_ccmp_expr (gimple *g) + delete_insns_since (last); + return NULL_RTX; + } +- +--- a/src/gcc/ccmp.h ++++ b/src/gcc/ccmp.h +@@ -20,6 +20,6 @@ along with GCC; see the file COPYING3. If not see + #ifndef GCC_CCMP_H + #define GCC_CCMP_H + +-extern rtx expand_ccmp_expr (gimple *); ++extern rtx expand_ccmp_expr (gimple *, machine_mode); + + #endif /* GCC_CCMP_H */ +--- a/src/gcc/config.gcc ++++ b/src/gcc/config.gcc +@@ -3796,34 +3796,19 @@ case "${target}" in + # Add extra multilibs + if test "x$with_multilib_list" != x; then + arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'` +- case ${arm_multilibs} in +- aprofile) +- # Note that arm/t-aprofile is a +- # stand-alone make file fragment to be +- # used only with itself. We do not +- # specifically use the +- # TM_MULTILIB_OPTION framework because +- # this shorthand is more +- # pragmatic. +- tmake_profile_file="arm/t-aprofile" +- ;; +- rmprofile) +- # Note that arm/t-rmprofile is a +- # stand-alone make file fragment to be +- # used only with itself. We do not +- # specifically use the +- # TM_MULTILIB_OPTION framework because +- # this shorthand is more +- # pragmatic. +- tmake_profile_file="arm/t-rmprofile" +- ;; +- default) +- ;; +- *) +- echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2 +- exit 1 +- ;; +- esac ++ if test "x${arm_multilibs}" != xdefault ; then ++ for arm_multilib in ${arm_multilibs}; do ++ case ${arm_multilib} in ++ aprofile|rmprofile) ++ tmake_profile_file="arm/t-multilib" ++ ;; ++ *) ++ echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2 ++ exit 1 ++ ;; ++ esac ++ done ++ fi + + if test "x${tmake_profile_file}" != x ; then + # arm/t-aprofile and arm/t-rmprofile are only +@@ -3840,6 +3825,7 @@ case "${target}" in + fi + + tmake_file="${tmake_file} ${tmake_profile_file}" ++ TM_MULTILIB_CONFIG="$with_multilib_list" + fi + fi + ;; +--- a/src/gcc/config/aarch64/aarch64-cores.def ++++ b/src/gcc/config/aarch64/aarch64-cores.def +@@ -43,7 +43,7 @@ + VARIANT is the variant of the CPU. In a GNU/Linux system it can found + in /proc/cpuinfo. If this is -1, this means it can match any variant. */ + +-/* V8 Architecture Processors. */ ++/* ARMv8-A Architecture Processors. */ + + /* ARM ('A') cores. */ + AARCH64_CORE("cortex-a35", cortexa35, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa35, 0x41, 0xd04, -1) +@@ -52,33 +52,35 @@ AARCH64_CORE("cortex-a57", cortexa57, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AA + AARCH64_CORE("cortex-a72", cortexa72, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, 0x41, 0xd08, -1) + AARCH64_CORE("cortex-a73", cortexa73, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, 0x41, 0xd09, -1) + +-/* Samsung ('S') cores. */ +-AARCH64_CORE("exynos-m1", exynosm1, exynosm1, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1, 0x53, 0x001, -1) +- +-/* Qualcomm ('Q') cores. */ +-AARCH64_CORE("falkor", falkor, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1) +-AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1) +- + /* Cavium ('C') cores. */ + AARCH64_CORE("thunderx", thunderx, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, 0x43, 0x0a0, -1) + /* Do not swap around "thunderxt88p1" and "thunderxt88", + this order is required to handle variant correctly. */ +-AARCH64_CORE("thunderxt88p1", thunderxt88p1, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, 0x43, 0x0a1, 0) +-AARCH64_CORE("thunderxt88", thunderxt88, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, 0x43, 0x0a1, -1) ++AARCH64_CORE("thunderxt88p1", thunderxt88p1, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderxt88, 0x43, 0x0a1, 0) ++AARCH64_CORE("thunderxt88", thunderxt88, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderxt88, 0x43, 0x0a1, -1) + AARCH64_CORE("thunderxt81", thunderxt81, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, 0x43, 0x0a2, -1) + AARCH64_CORE("thunderxt83", thunderxt83, thunderx, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx, 0x43, 0x0a3, -1) +-AARCH64_CORE("thunderx2t99", thunderx2t99, thunderx2t99, 8_1A, AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x43, 0x0af, -1) + + /* APM ('P') cores. */ + AARCH64_CORE("xgene1", xgene1, xgene1, 8A, AARCH64_FL_FOR_ARCH8, xgene1, 0x50, 0x000, -1) + +-/* V8.1 Architecture Processors. */ ++/* Qualcomm ('Q') cores. */ ++AARCH64_CORE("falkor", falkor, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1) ++AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1) ++ ++/* Samsung ('S') cores. */ ++AARCH64_CORE("exynos-m1", exynosm1, exynosm1, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1, 0x53, 0x001, -1) ++ ++/* ARMv8.1-A Architecture Processors. */ + + /* Broadcom ('B') cores. */ + AARCH64_CORE("thunderx2t99p1", thunderx2t99p1, thunderx2t99, 8_1A, AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x42, 0x516, -1) + AARCH64_CORE("vulcan", vulcan, thunderx2t99, 8_1A, AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x42, 0x516, -1) + +-/* V8 big.LITTLE implementations. */ ++/* Cavium ('C') cores. */ ++AARCH64_CORE("thunderx2t99", thunderx2t99, thunderx2t99, 8_1A, AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x43, 0x0af, -1) ++ ++/* ARMv8-A big.LITTLE implementations. */ + + AARCH64_CORE("cortex-a57.cortex-a53", cortexa57cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, 0x41, AARCH64_BIG_LITTLE (0xd07, 0xd03), -1) + AARCH64_CORE("cortex-a72.cortex-a53", cortexa72cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, 0x41, AARCH64_BIG_LITTLE (0xd08, 0xd03), -1) +--- a/src/gcc/config/aarch64/aarch64-cost-tables.h ++++ b/src/gcc/config/aarch64/aarch64-cost-tables.h +@@ -136,8 +136,8 @@ const struct cpu_cost_table thunderx_extra_costs = + 0, /* Logical. */ + 0, /* Shift. */ + 0, /* Shift_reg. */ +- COSTS_N_INSNS (1), /* Arith_shift. */ +- COSTS_N_INSNS (1), /* Arith_shift_reg. */ ++ COSTS_N_INSNS (1)+1, /* Arith_shift. */ ++ COSTS_N_INSNS (1)+1, /* Arith_shift_reg. */ + COSTS_N_INSNS (1), /* UNUSED: Log_shift. */ + COSTS_N_INSNS (1), /* UNUSED: Log_shift_reg. */ + 0, /* Extend. */ +--- a/src/gcc/config/aarch64/aarch64-fusion-pairs.def ++++ b/src/gcc/config/aarch64/aarch64-fusion-pairs.def +@@ -34,5 +34,6 @@ AARCH64_FUSION_PAIR ("movk+movk", MOVK_MOVK) + AARCH64_FUSION_PAIR ("adrp+ldr", ADRP_LDR) + AARCH64_FUSION_PAIR ("cmp+branch", CMP_BRANCH) + AARCH64_FUSION_PAIR ("aes+aesmc", AES_AESMC) ++AARCH64_FUSION_PAIR ("alu+branch", ALU_BRANCH) + + #undef AARCH64_FUSION_PAIR +--- a/src/gcc/config/aarch64/aarch64-option-extensions.def ++++ b/src/gcc/config/aarch64/aarch64-option-extensions.def +@@ -60,4 +60,11 @@ AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, "atomics") + Disabling "fp16" just disables "fp16". */ + AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fphp asimdhp") + ++/* Enabling or disabling "rcpc" only changes "rcpc". */ ++AARCH64_OPT_EXTENSION("rcpc", AARCH64_FL_RCPC, 0, 0, "lrcpc") ++ ++/* Enabling "rdma" also enables "fp", "simd". ++ Disabling "rdma" just disables "rdma". */ ++AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "rdma") ++ + #undef AARCH64_OPT_EXTENSION +--- a/src/gcc/config/aarch64/aarch64-protos.h ++++ b/src/gcc/config/aarch64/aarch64-protos.h +@@ -203,6 +203,16 @@ struct cpu_approx_modes + const unsigned int recip_sqrt; /* Reciprocal square root. */ + }; + ++/* Cache prefetch settings for prefetch-loop-arrays. */ ++struct cpu_prefetch_tune ++{ ++ const int num_slots; ++ const int l1_cache_size; ++ const int l1_cache_line_size; ++ const int l2_cache_size; ++ const int default_opt_level; ++}; ++ + struct tune_params + { + const struct cpu_cost_table *insn_extra_cost; +@@ -224,9 +234,6 @@ struct tune_params + int min_div_recip_mul_df; + /* Value for aarch64_case_values_threshold; or 0 for the default. */ + unsigned int max_case_values; +- /* Value for PARAM_L1_CACHE_LINE_SIZE; or 0 to use the default. */ +- unsigned int cache_line_size; +- + /* An enum specifying how to take into account CPU autoprefetch capabilities + during instruction scheduling: + - AUTOPREFETCHER_OFF: Do not take autoprefetch capabilities into account. +@@ -244,6 +251,10 @@ struct tune_params + } autoprefetcher_model; + + unsigned int extra_tuning_flags; ++ ++ /* Place prefetch struct pointer at the end to enable type checking ++ errors when tune_params misses elements (e.g., from erroneous merges). */ ++ const struct cpu_prefetch_tune *prefetch; + }; + + #define AARCH64_FUSION_PAIR(x, name) \ +@@ -301,18 +312,22 @@ extern struct tune_params aarch64_tune_params; + + HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned); + int aarch64_get_condition_code (rtx); ++bool aarch64_address_valid_for_prefetch_p (rtx, bool); + bool aarch64_bitmask_imm (HOST_WIDE_INT val, machine_mode); + unsigned HOST_WIDE_INT aarch64_and_split_imm1 (HOST_WIDE_INT val_in); + unsigned HOST_WIDE_INT aarch64_and_split_imm2 (HOST_WIDE_INT val_in); + bool aarch64_and_bitmask_imm (unsigned HOST_WIDE_INT val_in, machine_mode mode); + int aarch64_branch_cost (bool, bool); + enum aarch64_symbol_type aarch64_classify_symbolic_expression (rtx); ++bool aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode); + bool aarch64_const_vec_all_same_int_p (rtx, HOST_WIDE_INT); + bool aarch64_constant_address_p (rtx); + bool aarch64_emit_approx_div (rtx, rtx, rtx); + bool aarch64_emit_approx_sqrt (rtx, rtx, bool); ++void aarch64_expand_call (rtx, rtx, bool); + bool aarch64_expand_movmem (rtx *); + bool aarch64_float_const_zero_rtx_p (rtx); ++bool aarch64_float_const_rtx_p (rtx); + bool aarch64_function_arg_regno_p (unsigned); + bool aarch64_fusion_enabled_p (enum aarch64_fusion_pairs); + bool aarch64_gen_movmemqi (rtx *); +@@ -338,9 +353,9 @@ bool aarch64_pad_arg_upward (machine_mode, const_tree); + bool aarch64_pad_reg_upward (machine_mode, const_tree, bool); + bool aarch64_regno_ok_for_base_p (int, bool); + bool aarch64_regno_ok_for_index_p (int, bool); ++bool aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *fail); + bool aarch64_simd_check_vect_par_cnst_half (rtx op, machine_mode mode, + bool high); +-bool aarch64_simd_imm_scalar_p (rtx x, machine_mode mode); + bool aarch64_simd_imm_zero_p (rtx, machine_mode); + bool aarch64_simd_scalar_immediate_valid_for_move (rtx, machine_mode); + bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool); +--- a/src/gcc/config/aarch64/aarch64-simd.md ++++ b/src/gcc/config/aarch64/aarch64-simd.md +@@ -44,12 +44,12 @@ + (define_insn "aarch64_simd_dup" + [(set (match_operand:VDQ_I 0 "register_operand" "=w, w") + (vec_duplicate:VDQ_I +- (match_operand: 1 "register_operand" "r, w")))] ++ (match_operand: 1 "register_operand" "w,?r")))] + "TARGET_SIMD" + "@ +- dup\\t%0., %1 +- dup\\t%0., %1.[0]" +- [(set_attr "type" "neon_from_gp, neon_dup")] ++ dup\\t%0., %1.[0] ++ dup\\t%0., %1" ++ [(set_attr "type" "neon_dup, neon_from_gp")] + ) + + (define_insn "aarch64_simd_dup" +@@ -105,7 +105,7 @@ + { + case 0: return "ldr\\t%d0, %1"; + case 1: return "str\\t%d1, %0"; +- case 2: return "orr\t%0., %1., %1."; ++ case 2: return "mov\t%0., %1."; + case 3: return "umov\t%0, %1.d[0]"; + case 4: return "fmov\t%d0, %1"; + case 5: return "mov\t%0, %1"; +@@ -136,7 +136,7 @@ + case 1: + return "str\\t%q1, %0"; + case 2: +- return "orr\t%0., %1., %1."; ++ return "mov\t%0., %1."; + case 3: + case 4: + case 5: +@@ -153,6 +153,19 @@ + (set_attr "length" "4,4,4,8,8,8,4")] + ) + ++;; When storing lane zero we can use the normal STR and its more permissive ++;; addressing modes. ++ ++(define_insn "aarch64_store_lane0" ++ [(set (match_operand: 0 "memory_operand" "=m") ++ (vec_select: (match_operand:VALL_F16 1 "register_operand" "w") ++ (parallel [(match_operand 2 "const_int_operand" "n")])))] ++ "TARGET_SIMD ++ && ENDIAN_LANE_N (mode, INTVAL (operands[2])) == 0" ++ "str\\t%1, %0" ++ [(set_attr "type" "neon_store1_1reg")] ++) ++ + (define_insn "load_pair" + [(set (match_operand:VD 0 "register_operand" "=w") + (match_operand:VD 1 "aarch64_mem_pair_operand" "Ump")) +@@ -561,18 +574,18 @@ + gcc_unreachable (); + } + } +- [(set_attr "type" "neon_from_gp, neon_ins, neon_load1_1reg")] ++ [(set_attr "type" "neon_from_gp, neon_ins, neon_load1_one_lane")] + ) + + (define_insn "*aarch64_simd_vec_copy_lane" +- [(set (match_operand:VALL 0 "register_operand" "=w") +- (vec_merge:VALL +- (vec_duplicate:VALL ++ [(set (match_operand:VALL_F16 0 "register_operand" "=w") ++ (vec_merge:VALL_F16 ++ (vec_duplicate:VALL_F16 + (vec_select: +- (match_operand:VALL 3 "register_operand" "w") ++ (match_operand:VALL_F16 3 "register_operand" "w") + (parallel + [(match_operand:SI 4 "immediate_operand" "i")]))) +- (match_operand:VALL 1 "register_operand" "0") ++ (match_operand:VALL_F16 1 "register_operand" "0") + (match_operand:SI 2 "immediate_operand" "i")))] + "TARGET_SIMD" + { +@@ -1020,6 +1033,18 @@ + [(set_attr "type" "neon_mla__scalar")] + ) + ++(define_insn "*aarch64_mla_elt_merge" ++ [(set (match_operand:VDQHS 0 "register_operand" "=w") ++ (plus:VDQHS ++ (mult:VDQHS (vec_duplicate:VDQHS ++ (match_operand: 1 "register_operand" "w")) ++ (match_operand:VDQHS 2 "register_operand" "w")) ++ (match_operand:VDQHS 3 "register_operand" "0")))] ++ "TARGET_SIMD" ++ "mla\t%0., %2., %1.[0]" ++ [(set_attr "type" "neon_mla__scalar")] ++) ++ + (define_insn "aarch64_mls" + [(set (match_operand:VDQ_BHSI 0 "register_operand" "=w") + (minus:VDQ_BHSI (match_operand:VDQ_BHSI 1 "register_operand" "0") +@@ -1067,6 +1092,18 @@ + [(set_attr "type" "neon_mla__scalar")] + ) + ++(define_insn "*aarch64_mls_elt_merge" ++ [(set (match_operand:VDQHS 0 "register_operand" "=w") ++ (minus:VDQHS ++ (match_operand:VDQHS 1 "register_operand" "0") ++ (mult:VDQHS (vec_duplicate:VDQHS ++ (match_operand: 2 "register_operand" "w")) ++ (match_operand:VDQHS 3 "register_operand" "w"))))] ++ "TARGET_SIMD" ++ "mls\t%0., %3., %2.[0]" ++ [(set_attr "type" "neon_mla__scalar")] ++) ++ + ;; Max/Min operations. + (define_insn "3" + [(set (match_operand:VDQ_BHSI 0 "register_operand" "=w") +@@ -2796,38 +2833,10 @@ + (match_operand:VDC 2 "register_operand")] + "TARGET_SIMD" + { +- rtx op1, op2; +- if (BYTES_BIG_ENDIAN) +- { +- op1 = operands[2]; +- op2 = operands[1]; +- } +- else +- { +- op1 = operands[1]; +- op2 = operands[2]; +- } +- emit_insn (gen_aarch64_combine_internal (operands[0], op1, op2)); +- DONE; +-} +-) ++ aarch64_split_simd_combine (operands[0], operands[1], operands[2]); + +-(define_insn_and_split "aarch64_combine_internal" +- [(set (match_operand: 0 "register_operand" "=&w") +- (vec_concat: (match_operand:VDC 1 "register_operand" "w") +- (match_operand:VDC 2 "register_operand" "w")))] +- "TARGET_SIMD" +- "#" +- "&& reload_completed" +- [(const_int 0)] +-{ +- if (BYTES_BIG_ENDIAN) +- aarch64_split_simd_combine (operands[0], operands[2], operands[1]); +- else +- aarch64_split_simd_combine (operands[0], operands[1], operands[2]); + DONE; + } +-[(set_attr "type" "multiple")] + ) + + (define_expand "aarch64_simd_combine" +--- a/src/gcc/config/aarch64/aarch64-tune.md ++++ b/src/gcc/config/aarch64/aarch64-tune.md +@@ -1,5 +1,5 @@ + ;; -*- buffer-read-only: t -*- + ;; Generated automatically by gentune.sh from aarch64-cores.def + (define_attr "tune" +- "cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,exynosm1,falkor,qdf24xx,thunderx,thunderxt88p1,thunderxt88,thunderxt81,thunderxt83,thunderx2t99,xgene1,thunderx2t99p1,vulcan,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53" ++ "cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,thunderxt81,thunderxt83,xgene1,falkor,qdf24xx,exynosm1,thunderx2t99p1,vulcan,thunderx2t99,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53" + (const (symbol_ref "((enum attr_tune) aarch64_tune)"))) +--- a/src/gcc/config/aarch64/aarch64-tuning-flags.def ++++ b/src/gcc/config/aarch64/aarch64-tuning-flags.def +@@ -35,4 +35,10 @@ two load/stores are not at least 8 byte aligned don't create load/store + pairs. */ + AARCH64_EXTRA_TUNING_OPTION ("slow_unaligned_ldpw", SLOW_UNALIGNED_LDPW) + ++/* Some of the optional shift to some arthematic instructions are ++ considered cheap. Logical shift left <=4 with or without a ++ zero extend are considered cheap. Sign extend; non logical shift left ++ are not considered cheap. */ ++AARCH64_EXTRA_TUNING_OPTION ("cheap_shift_extend", CHEAP_SHIFT_EXTEND) ++ + #undef AARCH64_EXTRA_TUNING_OPTION +--- a/src/gcc/config/aarch64/aarch64.c ++++ b/src/gcc/config/aarch64/aarch64.c +@@ -147,6 +147,8 @@ static bool aarch64_builtin_support_vector_misalignment (machine_mode mode, + const_tree type, + int misalignment, + bool is_packed); ++static machine_mode ++aarch64_simd_container_mode (machine_mode mode, unsigned width); + + /* Major revision number of the ARM Architecture implemented by the target. */ + unsigned aarch64_architecture_version; +@@ -193,10 +195,10 @@ static const struct aarch64_flag_desc aarch64_tuning_flags[] = + static const struct cpu_addrcost_table generic_addrcost_table = + { + { +- 0, /* hi */ ++ 1, /* hi */ + 0, /* si */ + 0, /* di */ +- 0, /* ti */ ++ 1, /* ti */ + }, + 0, /* pre_modify */ + 0, /* post_modify */ +@@ -390,13 +392,13 @@ static const struct cpu_vector_cost thunderx_vector_cost = + 3, /* scalar_load_cost */ + 1, /* scalar_store_cost */ + 4, /* vec_int_stmt_cost */ +- 4, /* vec_fp_stmt_cost */ ++ 1, /* vec_fp_stmt_cost */ + 4, /* vec_permute_cost */ + 2, /* vec_to_scalar_cost */ + 2, /* scalar_to_vec_cost */ + 3, /* vec_align_load_cost */ +- 10, /* vec_unalign_load_cost */ +- 10, /* vec_unalign_store_cost */ ++ 5, /* vec_unalign_load_cost */ ++ 5, /* vec_unalign_store_cost */ + 1, /* vec_store_cost */ + 3, /* cond_taken_branch_cost */ + 3 /* cond_not_taken_branch_cost */ +@@ -526,6 +528,61 @@ static const cpu_approx_modes xgene1_approx_modes = + AARCH64_APPROX_ALL /* recip_sqrt */ + }; + ++/* Generic prefetch settings (which disable prefetch). */ ++static const cpu_prefetch_tune generic_prefetch_tune = ++{ ++ 0, /* num_slots */ ++ -1, /* l1_cache_size */ ++ -1, /* l1_cache_line_size */ ++ -1, /* l2_cache_size */ ++ -1 /* default_opt_level */ ++}; ++ ++static const cpu_prefetch_tune exynosm1_prefetch_tune = ++{ ++ 0, /* num_slots */ ++ -1, /* l1_cache_size */ ++ 64, /* l1_cache_line_size */ ++ -1, /* l2_cache_size */ ++ -1 /* default_opt_level */ ++}; ++ ++static const cpu_prefetch_tune qdf24xx_prefetch_tune = ++{ ++ 4, /* num_slots */ ++ 32, /* l1_cache_size */ ++ 64, /* l1_cache_line_size */ ++ 1024, /* l2_cache_size */ ++ 3 /* default_opt_level */ ++}; ++ ++static const cpu_prefetch_tune thunderxt88_prefetch_tune = ++{ ++ 8, /* num_slots */ ++ 32, /* l1_cache_size */ ++ 128, /* l1_cache_line_size */ ++ 16*1024, /* l2_cache_size */ ++ 3 /* default_opt_level */ ++}; ++ ++static const cpu_prefetch_tune thunderx_prefetch_tune = ++{ ++ 8, /* num_slots */ ++ 32, /* l1_cache_size */ ++ 128, /* l1_cache_line_size */ ++ -1, /* l2_cache_size */ ++ -1 /* default_opt_level */ ++}; ++ ++static const cpu_prefetch_tune thunderx2t99_prefetch_tune = ++{ ++ 8, /* num_slots */ ++ 32, /* l1_cache_size */ ++ 64, /* l1_cache_line_size */ ++ 256, /* l2_cache_size */ ++ -1 /* default_opt_level */ ++}; ++ + static const struct tune_params generic_tunings = + { + &cortexa57_extra_costs, +@@ -538,17 +595,17 @@ static const struct tune_params generic_tunings = + 2, /* issue_rate */ + (AARCH64_FUSE_AES_AESMC), /* fusible_ops */ + 8, /* function_align. */ +- 8, /* jump_align. */ +- 4, /* loop_align. */ ++ 4, /* jump_align. */ ++ 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ + 1, /* vec_reassoc_width. */ + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ +- tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params cortexa35_tunings = +@@ -564,7 +621,7 @@ static const struct tune_params cortexa35_tunings = + (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD + | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */ + 16, /* function_align. */ +- 8, /* jump_align. */ ++ 4, /* jump_align. */ + 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ +@@ -572,9 +629,9 @@ static const struct tune_params cortexa35_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params cortexa53_tunings = +@@ -590,7 +647,7 @@ static const struct tune_params cortexa53_tunings = + (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD + | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */ + 16, /* function_align. */ +- 8, /* jump_align. */ ++ 4, /* jump_align. */ + 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ +@@ -598,9 +655,9 @@ static const struct tune_params cortexa53_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params cortexa57_tunings = +@@ -616,7 +673,7 @@ static const struct tune_params cortexa57_tunings = + (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD + | AARCH64_FUSE_MOVK_MOVK), /* fusible_ops */ + 16, /* function_align. */ +- 8, /* jump_align. */ ++ 4, /* jump_align. */ + 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ +@@ -624,9 +681,9 @@ static const struct tune_params cortexa57_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_RENAME_FMA_REGS) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_RENAME_FMA_REGS), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params cortexa72_tunings = +@@ -642,7 +699,7 @@ static const struct tune_params cortexa72_tunings = + (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD + | AARCH64_FUSE_MOVK_MOVK), /* fusible_ops */ + 16, /* function_align. */ +- 8, /* jump_align. */ ++ 4, /* jump_align. */ + 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ +@@ -650,9 +707,9 @@ static const struct tune_params cortexa72_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params cortexa73_tunings = +@@ -668,7 +725,7 @@ static const struct tune_params cortexa73_tunings = + (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD + | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */ + 16, /* function_align. */ +- 8, /* jump_align. */ ++ 4, /* jump_align. */ + 8, /* loop_align. */ + 2, /* int_reassoc_width. */ + 4, /* fp_reassoc_width. */ +@@ -676,11 +733,13 @@ static const struct tune_params cortexa73_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + ++ ++ + static const struct tune_params exynosm1_tunings = + { + &exynosm1_extra_costs, +@@ -701,9 +760,34 @@ static const struct tune_params exynosm1_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 48, /* max_case_values. */ +- 64, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &exynosm1_prefetch_tune ++}; ++ ++static const struct tune_params thunderxt88_tunings = ++{ ++ &thunderx_extra_costs, ++ &generic_addrcost_table, ++ &thunderx_regmove_cost, ++ &thunderx_vector_cost, ++ &generic_branch_cost, ++ &generic_approx_modes, ++ 6, /* memmov_cost */ ++ 2, /* issue_rate */ ++ AARCH64_FUSE_CMP_BRANCH, /* fusible_ops */ ++ 8, /* function_align. */ ++ 8, /* jump_align. */ ++ 8, /* loop_align. */ ++ 2, /* int_reassoc_width. */ ++ 4, /* fp_reassoc_width. */ ++ 1, /* vec_reassoc_width. */ ++ 2, /* min_div_recip_mul_sf. */ ++ 2, /* min_div_recip_mul_df. */ ++ 0, /* max_case_values. */ ++ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */ ++ (AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW), /* tune_flags. */ ++ &thunderxt88_prefetch_tune + }; + + static const struct tune_params thunderx_tunings = +@@ -726,9 +810,10 @@ static const struct tune_params thunderx_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_SLOW_UNALIGNED_LDPW ++ | AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND), /* tune_flags. */ ++ &thunderx_prefetch_tune + }; + + static const struct tune_params xgene1_tunings = +@@ -751,9 +836,9 @@ static const struct tune_params xgene1_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 0, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &generic_prefetch_tune + }; + + static const struct tune_params qdf24xx_tunings = +@@ -777,9 +862,9 @@ static const struct tune_params qdf24xx_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 64, /* cache_line_size. */ + tune_params::AUTOPREFETCHER_STRONG, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &qdf24xx_prefetch_tune + }; + + static const struct tune_params thunderx2t99_tunings = +@@ -792,7 +877,8 @@ static const struct tune_params thunderx2t99_tunings = + &generic_approx_modes, + 4, /* memmov_cost. */ + 4, /* issue_rate. */ +- (AARCH64_FUSE_CMP_BRANCH | AARCH64_FUSE_AES_AESMC), /* fusible_ops */ ++ (AARCH64_FUSE_CMP_BRANCH | AARCH64_FUSE_AES_AESMC ++ | AARCH64_FUSE_ALU_BRANCH), /* fusible_ops */ + 16, /* function_align. */ + 8, /* jump_align. */ + 16, /* loop_align. */ +@@ -802,9 +888,9 @@ static const struct tune_params thunderx2t99_tunings = + 2, /* min_div_recip_mul_sf. */ + 2, /* min_div_recip_mul_df. */ + 0, /* max_case_values. */ +- 64, /* cache_line_size. */ +- tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */ +- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */ ++ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */ ++ (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ ++ &thunderx2t99_prefetch_tune + }; + + /* Support for fine-grained override of the tuning structures. */ +@@ -1649,41 +1735,41 @@ aarch64_split_simd_combine (rtx dst, rtx src1, rtx src2) + machine_mode dst_mode = GET_MODE (dst); + + gcc_assert (VECTOR_MODE_P (dst_mode)); ++ gcc_assert (register_operand (dst, dst_mode) ++ && register_operand (src1, src_mode) ++ && register_operand (src2, src_mode)); + +- if (REG_P (dst) && REG_P (src1) && REG_P (src2)) +- { +- rtx (*gen) (rtx, rtx, rtx); +- +- switch (src_mode) +- { +- case V8QImode: +- gen = gen_aarch64_simd_combinev8qi; +- break; +- case V4HImode: +- gen = gen_aarch64_simd_combinev4hi; +- break; +- case V2SImode: +- gen = gen_aarch64_simd_combinev2si; +- break; +- case V4HFmode: +- gen = gen_aarch64_simd_combinev4hf; +- break; +- case V2SFmode: +- gen = gen_aarch64_simd_combinev2sf; +- break; +- case DImode: +- gen = gen_aarch64_simd_combinedi; +- break; +- case DFmode: +- gen = gen_aarch64_simd_combinedf; +- break; +- default: +- gcc_unreachable (); +- } ++ rtx (*gen) (rtx, rtx, rtx); + +- emit_insn (gen (dst, src1, src2)); +- return; ++ switch (src_mode) ++ { ++ case V8QImode: ++ gen = gen_aarch64_simd_combinev8qi; ++ break; ++ case V4HImode: ++ gen = gen_aarch64_simd_combinev4hi; ++ break; ++ case V2SImode: ++ gen = gen_aarch64_simd_combinev2si; ++ break; ++ case V4HFmode: ++ gen = gen_aarch64_simd_combinev4hf; ++ break; ++ case V2SFmode: ++ gen = gen_aarch64_simd_combinev2sf; ++ break; ++ case DImode: ++ gen = gen_aarch64_simd_combinedi; ++ break; ++ case DFmode: ++ gen = gen_aarch64_simd_combinedf; ++ break; ++ default: ++ gcc_unreachable (); + } ++ ++ emit_insn (gen (dst, src1, src2)); ++ return; + } + + /* Split a complex SIMD move. */ +@@ -1792,6 +1878,31 @@ aarch64_internal_mov_immediate (rtx dest, rtx imm, bool generate, + return 1; + } + ++ /* Check to see if the low 32 bits are either 0xffffXXXX or 0xXXXXffff ++ (with XXXX non-zero). In that case check to see if the move can be done in ++ a smaller mode. */ ++ val2 = val & 0xffffffff; ++ if (mode == DImode ++ && aarch64_move_imm (val2, SImode) ++ && (((val >> 32) & 0xffff) == 0 || (val >> 48) == 0)) ++ { ++ if (generate) ++ emit_insn (gen_rtx_SET (dest, GEN_INT (val2))); ++ ++ /* Check if we have to emit a second instruction by checking to see ++ if any of the upper 32 bits of the original DI mode value is set. */ ++ if (val == val2) ++ return 1; ++ ++ i = (val >> 48) ? 48 : 32; ++ ++ if (generate) ++ emit_insn (gen_insv_immdi (dest, GEN_INT (i), ++ GEN_INT ((val >> i) & 0xffff))); ++ ++ return 2; ++ } ++ + if ((val >> 32) == 0 || mode == SImode) + { + if (generate) +@@ -1919,6 +2030,8 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) + gcc_assert (can_create_pseudo_p ()); + base = gen_reg_rtx (ptr_mode); + aarch64_expand_mov_immediate (base, XEXP (mem, 0)); ++ if (ptr_mode != Pmode) ++ base = convert_memory_address (Pmode, base); + mem = gen_rtx_MEM (ptr_mode, base); + } + +@@ -2683,11 +2796,19 @@ aarch64_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size) + plus_constant (Pmode, stack_pointer_rtx, -first)); + + /* LAST_ADDR = SP + FIRST + ROUNDED_SIZE. */ +- emit_set_insn (reg2, +- plus_constant (Pmode, stack_pointer_rtx, +- -(first + rounded_size))); +- +- ++ HOST_WIDE_INT adjustment = - (first + rounded_size); ++ if (! aarch64_uimm12_shift (adjustment)) ++ { ++ aarch64_internal_mov_immediate (reg2, GEN_INT (adjustment), ++ true, Pmode); ++ emit_set_insn (reg2, gen_rtx_PLUS (Pmode, stack_pointer_rtx, reg2)); ++ } ++ else ++ { ++ emit_set_insn (reg2, ++ plus_constant (Pmode, stack_pointer_rtx, adjustment)); ++ } ++ + /* Step 3: the loop + + do +@@ -4549,6 +4670,24 @@ aarch64_classify_address (struct aarch64_address_info *info, + } + } + ++/* Return true if the address X is valid for a PRFM instruction. ++ STRICT_P is true if we should do strict checking with ++ aarch64_classify_address. */ ++ ++bool ++aarch64_address_valid_for_prefetch_p (rtx x, bool strict_p) ++{ ++ struct aarch64_address_info addr; ++ ++ /* PRFM accepts the same addresses as DImode... */ ++ bool res = aarch64_classify_address (&addr, x, DImode, MEM, strict_p); ++ if (!res) ++ return false; ++ ++ /* ... except writeback forms. */ ++ return addr.type != ADDRESS_REG_WB; ++} ++ + bool + aarch64_symbolic_address_p (rtx x) + { +@@ -4611,6 +4750,74 @@ aarch64_legitimize_address_displacement (rtx *disp, rtx *off, machine_mode mode) + return true; + } + ++/* Return the binary representation of floating point constant VALUE in INTVAL. ++ If the value cannot be converted, return false without setting INTVAL. ++ The conversion is done in the given MODE. */ ++bool ++aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *intval) ++{ ++ ++ /* We make a general exception for 0. */ ++ if (aarch64_float_const_zero_rtx_p (value)) ++ { ++ *intval = 0; ++ return true; ++ } ++ ++ machine_mode mode = GET_MODE (value); ++ if (GET_CODE (value) != CONST_DOUBLE ++ || !SCALAR_FLOAT_MODE_P (mode) ++ || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT ++ /* Only support up to DF mode. */ ++ || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (DFmode)) ++ return false; ++ ++ unsigned HOST_WIDE_INT ival = 0; ++ ++ long res[2]; ++ real_to_target (res, ++ CONST_DOUBLE_REAL_VALUE (value), ++ REAL_MODE_FORMAT (mode)); ++ ++ if (mode == DFmode) ++ { ++ int order = BYTES_BIG_ENDIAN ? 1 : 0; ++ ival = zext_hwi (res[order], 32); ++ ival |= (zext_hwi (res[1 - order], 32) << 32); ++ } ++ else ++ ival = zext_hwi (res[0], 32); ++ ++ *intval = ival; ++ return true; ++} ++ ++/* Return TRUE if rtx X is an immediate constant that can be moved using a ++ single MOV(+MOVK) followed by an FMOV. */ ++bool ++aarch64_float_const_rtx_p (rtx x) ++{ ++ machine_mode mode = GET_MODE (x); ++ if (mode == VOIDmode) ++ return false; ++ ++ /* Determine whether it's cheaper to write float constants as ++ mov/movk pairs over ldr/adrp pairs. */ ++ unsigned HOST_WIDE_INT ival; ++ ++ if (GET_CODE (x) == CONST_DOUBLE ++ && SCALAR_FLOAT_MODE_P (mode) ++ && aarch64_reinterpret_float_as_int (x, &ival)) ++ { ++ machine_mode imode = mode == HFmode ? SImode : int_mode_for_mode (mode); ++ int num_instr = aarch64_internal_mov_immediate ++ (NULL_RTX, gen_int_mode (ival, imode), false, imode); ++ return num_instr < 3; ++ } ++ ++ return false; ++} ++ + /* Return TRUE if rtx X is immediate constant 0.0 */ + bool + aarch64_float_const_zero_rtx_p (rtx x) +@@ -4623,6 +4830,49 @@ aarch64_float_const_zero_rtx_p (rtx x) + return real_equal (CONST_DOUBLE_REAL_VALUE (x), &dconst0); + } + ++/* Return TRUE if rtx X is immediate constant that fits in a single ++ MOVI immediate operation. */ ++bool ++aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode) ++{ ++ if (!TARGET_SIMD) ++ return false; ++ ++ machine_mode vmode, imode; ++ unsigned HOST_WIDE_INT ival; ++ ++ if (GET_CODE (x) == CONST_DOUBLE ++ && SCALAR_FLOAT_MODE_P (mode)) ++ { ++ if (!aarch64_reinterpret_float_as_int (x, &ival)) ++ return false; ++ ++ /* We make a general exception for 0. */ ++ if (aarch64_float_const_zero_rtx_p (x)) ++ return true; ++ ++ imode = int_mode_for_mode (mode); ++ } ++ else if (GET_CODE (x) == CONST_INT ++ && SCALAR_INT_MODE_P (mode)) ++ { ++ imode = mode; ++ ival = INTVAL (x); ++ } ++ else ++ return false; ++ ++ /* use a 64 bit mode for everything except for DI/DF mode, where we use ++ a 128 bit vector mode. */ ++ int width = GET_MODE_BITSIZE (mode) == 64 ? 128 : 64; ++ ++ vmode = aarch64_simd_container_mode (imode, width); ++ rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, ival); ++ ++ return aarch64_simd_valid_immediate (v_op, vmode, false, NULL); ++} ++ ++ + /* Return the fixed registers used for condition codes. */ + + static bool +@@ -4633,6 +4883,50 @@ aarch64_fixed_condition_code_regs (unsigned int *p1, unsigned int *p2) + return true; + } + ++/* This function is used by the call expanders of the machine description. ++ RESULT is the register in which the result is returned. It's NULL for ++ "call" and "sibcall". ++ MEM is the location of the function call. ++ SIBCALL indicates whether this function call is normal call or sibling call. ++ It will generate different pattern accordingly. */ ++ ++void ++aarch64_expand_call (rtx result, rtx mem, bool sibcall) ++{ ++ rtx call, callee, tmp; ++ rtvec vec; ++ machine_mode mode; ++ ++ gcc_assert (MEM_P (mem)); ++ callee = XEXP (mem, 0); ++ mode = GET_MODE (callee); ++ gcc_assert (mode == Pmode); ++ ++ /* Decide if we should generate indirect calls by loading the ++ address of the callee into a register before performing ++ the branch-and-link. */ ++ if (SYMBOL_REF_P (callee) ++ ? (aarch64_is_long_call_p (callee) ++ || aarch64_is_noplt_call_p (callee)) ++ : !REG_P (callee)) ++ XEXP (mem, 0) = force_reg (mode, callee); ++ ++ call = gen_rtx_CALL (VOIDmode, mem, const0_rtx); ++ ++ if (result != NULL_RTX) ++ call = gen_rtx_SET (result, call); ++ ++ if (sibcall) ++ tmp = ret_rtx; ++ else ++ tmp = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, LR_REGNUM)); ++ ++ vec = gen_rtvec (2, call, tmp); ++ call = gen_rtx_PARALLEL (VOIDmode, vec); ++ ++ aarch64_emit_call_insn (call); ++} ++ + /* Emit call insn with PAT and do aarch64-specific handling. */ + + void +@@ -4705,7 +4999,7 @@ aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y) + the comparison will have to be swapped when we emit the assembly + code. */ + if ((GET_MODE (x) == SImode || GET_MODE (x) == DImode) +- && (REG_P (y) || GET_CODE (y) == SUBREG) ++ && (REG_P (y) || GET_CODE (y) == SUBREG || y == const0_rtx) + && (GET_CODE (x) == ASHIFT || GET_CODE (x) == ASHIFTRT + || GET_CODE (x) == LSHIFTRT + || GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND)) +@@ -5112,6 +5406,8 @@ aarch64_print_operand (FILE *f, rtx x, int code) + + case MEM: + output_address (GET_MODE (x), XEXP (x, 0)); ++ /* Check all memory references are Pmode - even with ILP32. */ ++ gcc_assert (GET_MODE (XEXP (x, 0)) == Pmode); + break; + + case CONST: +@@ -5756,12 +6052,6 @@ aarch64_preferred_reload_class (rtx x, reg_class_t regclass) + return NO_REGS; + } + +- /* If it's an integer immediate that MOVI can't handle, then +- FP_REGS is not an option, so we return NO_REGS instead. */ +- if (CONST_INT_P (x) && reg_class_subset_p (regclass, FP_REGS) +- && !aarch64_simd_imm_scalar_p (x, GET_MODE (x))) +- return NO_REGS; +- + /* Register eliminiation can result in a request for + SP+constant->FP_REGS. We cannot support such operations which + use SP as source and an FP_REG as destination, so reject out +@@ -5976,9 +6266,10 @@ aarch64_strip_shift (rtx x) + /* Helper function for rtx cost calculation. Strip an extend + expression from X. Returns the inner operand if successful, or the + original expression on failure. We deal with a number of possible +- canonicalization variations here. */ ++ canonicalization variations here. If STRIP_SHIFT is true, then ++ we can strip off a shift also. */ + static rtx +-aarch64_strip_extend (rtx x) ++aarch64_strip_extend (rtx x, bool strip_shift) + { + rtx op = x; + +@@ -6002,7 +6293,8 @@ aarch64_strip_extend (rtx x) + + /* Now handle extended register, as this may also have an optional + left shift by 1..4. */ +- if (GET_CODE (op) == ASHIFT ++ if (strip_shift ++ && GET_CODE (op) == ASHIFT + && CONST_INT_P (XEXP (op, 1)) + && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) <= 4) + op = XEXP (op, 0); +@@ -6026,6 +6318,39 @@ aarch64_shift_p (enum rtx_code code) + return code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT; + } + ++ ++/* Return true iff X is a cheap shift without a sign extend. */ ++ ++static bool ++aarch64_cheap_mult_shift_p (rtx x) ++{ ++ rtx op0, op1; ++ ++ op0 = XEXP (x, 0); ++ op1 = XEXP (x, 1); ++ ++ if (!(aarch64_tune_params.extra_tuning_flags ++ & AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND)) ++ return false; ++ ++ if (GET_CODE (op0) == SIGN_EXTEND) ++ return false; ++ ++ if (GET_CODE (x) == ASHIFT && CONST_INT_P (op1) ++ && UINTVAL (op1) <= 4) ++ return true; ++ ++ if (GET_CODE (x) != MULT || !CONST_INT_P (op1)) ++ return false; ++ ++ HOST_WIDE_INT l2 = exact_log2 (INTVAL (op1)); ++ ++ if (l2 > 0 && l2 <= 4) ++ return true; ++ ++ return false; ++} ++ + /* Helper function for rtx cost calculation. Calculate the cost of + a MULT or ASHIFT, which may be part of a compound PLUS/MINUS rtx. + Return the calculated cost of the expression, recursing manually in to +@@ -6063,7 +6388,11 @@ aarch64_rtx_mult_cost (rtx x, enum rtx_code code, int outer, bool speed) + { + if (compound_p) + { +- if (REG_P (op1)) ++ /* If the shift is considered cheap, ++ then don't add any cost. */ ++ if (aarch64_cheap_mult_shift_p (x)) ++ ; ++ else if (REG_P (op1)) + /* ARITH + shift-by-register. */ + cost += extra_cost->alu.arith_shift_reg; + else if (is_extend) +@@ -6081,7 +6410,7 @@ aarch64_rtx_mult_cost (rtx x, enum rtx_code code, int outer, bool speed) + } + /* Strip extends as we will have costed them in the case above. */ + if (is_extend) +- op0 = aarch64_strip_extend (op0); ++ op0 = aarch64_strip_extend (op0, true); + + cost += rtx_cost (op0, VOIDmode, code, 0, speed); + +@@ -6672,6 +7001,25 @@ aarch64_rtx_costs (rtx x, machine_mode mode, int outer ATTRIBUTE_UNUSED, + return true; + + case CONST_DOUBLE: ++ ++ /* First determine number of instructions to do the move ++ as an integer constant. */ ++ if (!aarch64_float_const_representable_p (x) ++ && !aarch64_can_const_movi_rtx_p (x, mode) ++ && aarch64_float_const_rtx_p (x)) ++ { ++ unsigned HOST_WIDE_INT ival; ++ bool succeed = aarch64_reinterpret_float_as_int (x, &ival); ++ gcc_assert (succeed); ++ ++ machine_mode imode = mode == HFmode ? SImode ++ : int_mode_for_mode (mode); ++ int ncost = aarch64_internal_mov_immediate ++ (NULL_RTX, gen_int_mode (ival, imode), false, imode); ++ *cost += COSTS_N_INSNS (ncost); ++ return true; ++ } ++ + if (speed) + { + /* mov[df,sf]_aarch64. */ +@@ -6925,13 +7273,13 @@ cost_minus: + if (speed) + *cost += extra_cost->alu.extend_arith; + +- op1 = aarch64_strip_extend (op1); ++ op1 = aarch64_strip_extend (op1, true); + *cost += rtx_cost (op1, VOIDmode, + (enum rtx_code) GET_CODE (op1), 0, speed); + return true; + } + +- rtx new_op1 = aarch64_strip_extend (op1); ++ rtx new_op1 = aarch64_strip_extend (op1, false); + + /* Cost this as an FMA-alike operation. */ + if ((GET_CODE (new_op1) == MULT +@@ -7004,7 +7352,7 @@ cost_plus: + if (speed) + *cost += extra_cost->alu.extend_arith; + +- op0 = aarch64_strip_extend (op0); ++ op0 = aarch64_strip_extend (op0, true); + *cost += rtx_cost (op0, VOIDmode, + (enum rtx_code) GET_CODE (op0), 0, speed); + return true; +@@ -7012,7 +7360,7 @@ cost_plus: + + /* Strip any extend, leave shifts behind as we will + cost them through mult_cost. */ +- new_op0 = aarch64_strip_extend (op0); ++ new_op0 = aarch64_strip_extend (op0, false); + + if (GET_CODE (new_op0) == MULT + || aarch64_shift_p (GET_CODE (new_op0))) +@@ -7482,17 +7830,13 @@ cost_plus: + case UMOD: + if (speed) + { ++ /* Slighly prefer UMOD over SMOD. */ + if (VECTOR_MODE_P (mode)) + *cost += extra_cost->vect.alu; + else if (GET_MODE_CLASS (mode) == MODE_INT) + *cost += (extra_cost->mult[mode == DImode].add +- + extra_cost->mult[mode == DImode].idiv); +- else if (mode == DFmode) +- *cost += (extra_cost->fp[1].mult +- + extra_cost->fp[1].div); +- else if (mode == SFmode) +- *cost += (extra_cost->fp[0].mult +- + extra_cost->fp[0].div); ++ + extra_cost->mult[mode == DImode].idiv ++ + (code == MOD ? 1 : 0)); + } + return false; /* All arguments need to be in registers. */ + +@@ -7506,7 +7850,9 @@ cost_plus: + else if (GET_MODE_CLASS (mode) == MODE_INT) + /* There is no integer SQRT, so only DIV and UDIV can get + here. */ +- *cost += extra_cost->mult[mode == DImode].idiv; ++ *cost += (extra_cost->mult[mode == DImode].idiv ++ /* Slighly prefer UDIV over SDIV. */ ++ + (code == DIV ? 1 : 0)); + else + *cost += extra_cost->fp[mode == DFmode].div; + } +@@ -8687,13 +9033,39 @@ aarch64_override_options_internal (struct gcc_options *opts) + opts->x_param_values, + global_options_set.x_param_values); + +- /* Set the L1 cache line size. */ +- if (selected_cpu->tune->cache_line_size != 0) ++ /* Set up parameters to be used in prefetching algorithm. Do not ++ override the defaults unless we are tuning for a core we have ++ researched values for. */ ++ if (aarch64_tune_params.prefetch->num_slots > 0) ++ maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES, ++ aarch64_tune_params.prefetch->num_slots, ++ opts->x_param_values, ++ global_options_set.x_param_values); ++ if (aarch64_tune_params.prefetch->l1_cache_size >= 0) ++ maybe_set_param_value (PARAM_L1_CACHE_SIZE, ++ aarch64_tune_params.prefetch->l1_cache_size, ++ opts->x_param_values, ++ global_options_set.x_param_values); ++ if (aarch64_tune_params.prefetch->l1_cache_line_size >= 0) + maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE, +- selected_cpu->tune->cache_line_size, ++ aarch64_tune_params.prefetch->l1_cache_line_size, ++ opts->x_param_values, ++ global_options_set.x_param_values); ++ if (aarch64_tune_params.prefetch->l2_cache_size >= 0) ++ maybe_set_param_value (PARAM_L2_CACHE_SIZE, ++ aarch64_tune_params.prefetch->l2_cache_size, + opts->x_param_values, + global_options_set.x_param_values); + ++ /* Enable sw prefetching at specified optimization level for ++ CPUS that have prefetch. Lower optimization level threshold by 1 ++ when profiling is enabled. */ ++ if (opts->x_flag_prefetch_loop_arrays < 0 ++ && !opts->x_optimize_size ++ && aarch64_tune_params.prefetch->default_opt_level >= 0 ++ && opts->x_optimize >= aarch64_tune_params.prefetch->default_opt_level) ++ opts->x_flag_prefetch_loop_arrays = 1; ++ + aarch64_override_options_after_change_1 (opts); + } + +@@ -9970,18 +10342,16 @@ aarch64_legitimate_pic_operand_p (rtx x) + /* Return true if X holds either a quarter-precision or + floating-point +0.0 constant. */ + static bool +-aarch64_valid_floating_const (machine_mode mode, rtx x) ++aarch64_valid_floating_const (rtx x) + { + if (!CONST_DOUBLE_P (x)) + return false; + +- if (aarch64_float_const_zero_rtx_p (x)) ++ /* This call determines which constants can be used in mov ++ as integer moves instead of constant loads. */ ++ if (aarch64_float_const_rtx_p (x)) + return true; + +- /* We only handle moving 0.0 to a TFmode register. */ +- if (!(mode == SFmode || mode == DFmode)) +- return false; +- + return aarch64_float_const_representable_p (x); + } + +@@ -9993,11 +10363,15 @@ aarch64_legitimate_constant_p (machine_mode mode, rtx x) + if (TARGET_SIMD && aarch64_vect_struct_mode_p (mode)) + return false; + +- /* This could probably go away because +- we now decompose CONST_INTs according to expand_mov_immediate. */ ++ /* For these cases we never want to use a literal load. ++ As such we have to prevent the compiler from forcing these ++ to memory. */ + if ((GET_CODE (x) == CONST_VECTOR + && aarch64_simd_valid_immediate (x, mode, false, NULL)) +- || CONST_INT_P (x) || aarch64_valid_floating_const (mode, x)) ++ || CONST_INT_P (x) ++ || aarch64_valid_floating_const (x) ++ || aarch64_can_const_movi_rtx_p (x, mode) ++ || aarch64_float_const_rtx_p (x)) + return !targetm.cannot_force_const_mem (mode, x); + + if (GET_CODE (x) == HIGH +@@ -11275,23 +11649,6 @@ aarch64_mask_from_zextract_ops (rtx width, rtx pos) + } + + bool +-aarch64_simd_imm_scalar_p (rtx x, machine_mode mode ATTRIBUTE_UNUSED) +-{ +- HOST_WIDE_INT imm = INTVAL (x); +- int i; +- +- for (i = 0; i < 8; i++) +- { +- unsigned int byte = imm & 0xff; +- if (byte != 0xff && byte != 0) +- return false; +- imm >>= 8; +- } +- +- return true; +-} +- +-bool + aarch64_mov_operand_p (rtx x, machine_mode mode) + { + if (GET_CODE (x) == HIGH +@@ -11647,6 +12004,57 @@ aarch64_expand_vector_init (rtx target, rtx vals) + return; + } + ++ enum insn_code icode = optab_handler (vec_set_optab, mode); ++ gcc_assert (icode != CODE_FOR_nothing); ++ ++ /* If there are only variable elements, try to optimize ++ the insertion using dup for the most common element ++ followed by insertions. */ ++ ++ /* The algorithm will fill matches[*][0] with the earliest matching element, ++ and matches[X][1] with the count of duplicate elements (if X is the ++ earliest element which has duplicates). */ ++ ++ if (n_var == n_elts && n_elts <= 16) ++ { ++ int matches[16][2] = {0}; ++ for (int i = 0; i < n_elts; i++) ++ { ++ for (int j = 0; j <= i; j++) ++ { ++ if (rtx_equal_p (XVECEXP (vals, 0, i), XVECEXP (vals, 0, j))) ++ { ++ matches[i][0] = j; ++ matches[j][1]++; ++ break; ++ } ++ } ++ } ++ int maxelement = 0; ++ int maxv = 0; ++ for (int i = 0; i < n_elts; i++) ++ if (matches[i][1] > maxv) ++ { ++ maxelement = i; ++ maxv = matches[i][1]; ++ } ++ ++ /* Create a duplicate of the most common element. */ ++ rtx x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, maxelement)); ++ aarch64_emit_move (target, gen_rtx_VEC_DUPLICATE (mode, x)); ++ ++ /* Insert the rest. */ ++ for (int i = 0; i < n_elts; i++) ++ { ++ rtx x = XVECEXP (vals, 0, i); ++ if (matches[i][0] == maxelement) ++ continue; ++ x = copy_to_mode_reg (inner_mode, x); ++ emit_insn (GEN_FCN (icode) (target, x, GEN_INT (i))); ++ } ++ return; ++ } ++ + /* Initialise a vector which is part-variable. We want to first try + to build those lanes which are constant in the most efficient way we + can. */ +@@ -11680,10 +12088,6 @@ aarch64_expand_vector_init (rtx target, rtx vals) + } + + /* Insert the variable lanes directly. */ +- +- enum insn_code icode = optab_handler (vec_set_optab, mode); +- gcc_assert (icode != CODE_FOR_nothing); +- + for (int i = 0; i < n_elts; i++) + { + rtx x = XVECEXP (vals, 0, i); +@@ -12049,6 +12453,17 @@ aarch64_split_compare_and_swap (rtx operands[]) + mode = GET_MODE (mem); + model = memmodel_from_int (INTVAL (model_rtx)); + ++ /* When OLDVAL is zero and we want the strong version we can emit a tighter ++ loop: ++ .label1: ++ LD[A]XR rval, [mem] ++ CBNZ rval, .label2 ++ ST[L]XR scratch, newval, [mem] ++ CBNZ scratch, .label1 ++ .label2: ++ CMP rval, 0. */ ++ bool strong_zero_p = !is_weak && oldval == const0_rtx; ++ + label1 = NULL; + if (!is_weak) + { +@@ -12065,11 +12480,21 @@ aarch64_split_compare_and_swap (rtx operands[]) + else + aarch64_emit_load_exclusive (mode, rval, mem, model_rtx); + +- cond = aarch64_gen_compare_reg (NE, rval, oldval); +- x = gen_rtx_NE (VOIDmode, cond, const0_rtx); +- x = gen_rtx_IF_THEN_ELSE (VOIDmode, x, +- gen_rtx_LABEL_REF (Pmode, label2), pc_rtx); +- aarch64_emit_unlikely_jump (gen_rtx_SET (pc_rtx, x)); ++ if (strong_zero_p) ++ { ++ x = gen_rtx_NE (VOIDmode, rval, const0_rtx); ++ x = gen_rtx_IF_THEN_ELSE (VOIDmode, x, ++ gen_rtx_LABEL_REF (Pmode, label2), pc_rtx); ++ aarch64_emit_unlikely_jump (gen_rtx_SET (pc_rtx, x)); ++ } ++ else ++ { ++ cond = aarch64_gen_compare_reg (NE, rval, oldval); ++ x = gen_rtx_NE (VOIDmode, cond, const0_rtx); ++ x = gen_rtx_IF_THEN_ELSE (VOIDmode, x, ++ gen_rtx_LABEL_REF (Pmode, label2), pc_rtx); ++ aarch64_emit_unlikely_jump (gen_rtx_SET (pc_rtx, x)); ++ } + + aarch64_emit_store_exclusive (mode, scratch, mem, newval, model_rtx); + +@@ -12088,7 +12513,15 @@ aarch64_split_compare_and_swap (rtx operands[]) + } + + emit_label (label2); +- ++ /* If we used a CBNZ in the exchange loop emit an explicit compare with RVAL ++ to set the condition flags. If this is not used it will be removed by ++ later passes. */ ++ if (strong_zero_p) ++ { ++ cond = gen_rtx_REG (CCmode, CC_REGNUM); ++ x = gen_rtx_COMPARE (CCmode, rval, const0_rtx); ++ emit_insn (gen_rtx_SET (cond, x)); ++ } + /* Emit any final barrier needed for a __sync operation. */ + if (is_mm_sync (model)) + aarch64_emit_post_barrier (model); +@@ -12608,15 +13041,28 @@ aarch64_output_simd_mov_immediate (rtx const_vector, + } + + char* +-aarch64_output_scalar_simd_mov_immediate (rtx immediate, +- machine_mode mode) ++aarch64_output_scalar_simd_mov_immediate (rtx immediate, machine_mode mode) + { ++ ++ /* If a floating point number was passed and we desire to use it in an ++ integer mode do the conversion to integer. */ ++ if (CONST_DOUBLE_P (immediate) && GET_MODE_CLASS (mode) == MODE_INT) ++ { ++ unsigned HOST_WIDE_INT ival; ++ if (!aarch64_reinterpret_float_as_int (immediate, &ival)) ++ gcc_unreachable (); ++ immediate = gen_int_mode (ival, mode); ++ } ++ + machine_mode vmode; ++ /* use a 64 bit mode for everything except for DI/DF mode, where we use ++ a 128 bit vector mode. */ ++ int width = GET_MODE_BITSIZE (mode) == 64 ? 128 : 64; + + gcc_assert (!VECTOR_MODE_P (mode)); +- vmode = aarch64_simd_container_mode (mode, 64); ++ vmode = aarch64_simd_container_mode (mode, width); + rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, INTVAL (immediate)); +- return aarch64_output_simd_mov_immediate (v_op, vmode, 64); ++ return aarch64_output_simd_mov_immediate (v_op, vmode, width); + } + + /* Split operands into moves from op[1] + op[2] into op[0]. */ +@@ -13981,13 +14427,66 @@ aarch_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) + { + enum attr_type prev_type = get_attr_type (prev); + +- /* FIXME: this misses some which is considered simple arthematic +- instructions for ThunderX. Simple shifts are missed here. */ +- if (prev_type == TYPE_ALUS_SREG +- || prev_type == TYPE_ALUS_IMM +- || prev_type == TYPE_LOGICS_REG +- || prev_type == TYPE_LOGICS_IMM) +- return true; ++ unsigned int condreg1, condreg2; ++ rtx cc_reg_1; ++ aarch64_fixed_condition_code_regs (&condreg1, &condreg2); ++ cc_reg_1 = gen_rtx_REG (CCmode, condreg1); ++ ++ if (reg_referenced_p (cc_reg_1, PATTERN (curr)) ++ && prev ++ && modified_in_p (cc_reg_1, prev)) ++ { ++ /* FIXME: this misses some which is considered simple arthematic ++ instructions for ThunderX. Simple shifts are missed here. */ ++ if (prev_type == TYPE_ALUS_SREG ++ || prev_type == TYPE_ALUS_IMM ++ || prev_type == TYPE_LOGICS_REG ++ || prev_type == TYPE_LOGICS_IMM) ++ return true; ++ } ++ } ++ ++ if (aarch64_fusion_enabled_p (AARCH64_FUSE_ALU_BRANCH) ++ && any_condjump_p (curr)) ++ { ++ /* We're trying to match: ++ prev (alu_insn) == (set (r0) plus ((r0) (r1/imm))) ++ curr (cbz) == (set (pc) (if_then_else (eq/ne) (r0) ++ (const_int 0)) ++ (label_ref ("SYM")) ++ (pc)) */ ++ if (SET_DEST (curr_set) == (pc_rtx) ++ && GET_CODE (SET_SRC (curr_set)) == IF_THEN_ELSE ++ && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) ++ && REG_P (SET_DEST (prev_set)) ++ && REGNO (SET_DEST (prev_set)) ++ == REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0))) ++ { ++ /* Fuse ALU operations followed by conditional branch instruction. */ ++ switch (get_attr_type (prev)) ++ { ++ case TYPE_ALU_IMM: ++ case TYPE_ALU_SREG: ++ case TYPE_ADC_REG: ++ case TYPE_ADC_IMM: ++ case TYPE_ADCS_REG: ++ case TYPE_ADCS_IMM: ++ case TYPE_LOGIC_REG: ++ case TYPE_LOGIC_IMM: ++ case TYPE_CSEL: ++ case TYPE_ADR: ++ case TYPE_MOV_IMM: ++ case TYPE_SHIFT_REG: ++ case TYPE_SHIFT_IMM: ++ case TYPE_BFM: ++ case TYPE_RBIT: ++ case TYPE_REV: ++ case TYPE_EXTEND: ++ return true; ++ ++ default:; ++ } ++ } + } + + return false; +--- a/src/gcc/config/aarch64/aarch64.h ++++ b/src/gcc/config/aarch64/aarch64.h +@@ -98,14 +98,24 @@ + && (ALIGN) < BITS_PER_WORD) \ + ? BITS_PER_WORD : ALIGN) + +-#define DATA_ALIGNMENT(EXP, ALIGN) \ +- ((((ALIGN) < BITS_PER_WORD) \ +- && (TREE_CODE (EXP) == ARRAY_TYPE \ +- || TREE_CODE (EXP) == UNION_TYPE \ +- || TREE_CODE (EXP) == RECORD_TYPE)) \ +- ? BITS_PER_WORD : (ALIGN)) +- +-#define LOCAL_ALIGNMENT(EXP, ALIGN) DATA_ALIGNMENT(EXP, ALIGN) ++/* Align definitions of arrays, unions and structures so that ++ initializations and copies can be made more efficient. This is not ++ ABI-changing, so it only affects places where we can see the ++ definition. Increasing the alignment tends to introduce padding, ++ so don't do this when optimizing for size/conserving stack space. */ ++#define AARCH64_EXPAND_ALIGNMENT(COND, EXP, ALIGN) \ ++ (((COND) && ((ALIGN) < BITS_PER_WORD) \ ++ && (TREE_CODE (EXP) == ARRAY_TYPE \ ++ || TREE_CODE (EXP) == UNION_TYPE \ ++ || TREE_CODE (EXP) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN)) ++ ++/* Align global data. */ ++#define DATA_ALIGNMENT(EXP, ALIGN) \ ++ AARCH64_EXPAND_ALIGNMENT (!optimize_size, EXP, ALIGN) ++ ++/* Similarly, make sure that objects on the stack are sensibly aligned. */ ++#define LOCAL_ALIGNMENT(EXP, ALIGN) \ ++ AARCH64_EXPAND_ALIGNMENT (!flag_conserve_stack, EXP, ALIGN) + + #define STRUCTURE_SIZE_BOUNDARY 8 + +@@ -134,12 +144,14 @@ extern unsigned aarch64_architecture_version; + #define AARCH64_FL_CRC (1 << 3) /* Has CRC. */ + /* ARMv8.1-A architecture extensions. */ + #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ +-#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1-A extensions. */ ++#define AARCH64_FL_RDMA (1 << 5) /* Has Round Double Multiply Add. */ ++#define AARCH64_FL_V8_1 (1 << 6) /* Has ARMv8.1-A extensions. */ + /* ARMv8.2-A architecture extensions. */ + #define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */ + #define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 extensions. */ + /* ARMv8.3-A architecture extensions. */ + #define AARCH64_FL_V8_3 (1 << 10) /* Has ARMv8.3-A features. */ ++#define AARCH64_FL_RCPC (1 << 11) /* Has support for RCpc model. */ + + /* Has FP and SIMD. */ + #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) +@@ -150,7 +162,8 @@ extern unsigned aarch64_architecture_version; + /* Architecture flags that effect instruction selection. */ + #define AARCH64_FL_FOR_ARCH8 (AARCH64_FL_FPSIMD) + #define AARCH64_FL_FOR_ARCH8_1 \ +- (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1) ++ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC \ ++ | AARCH64_FL_RDMA | AARCH64_FL_V8_1) + #define AARCH64_FL_FOR_ARCH8_2 \ + (AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2) + #define AARCH64_FL_FOR_ARCH8_3 \ +@@ -163,7 +176,7 @@ extern unsigned aarch64_architecture_version; + #define AARCH64_ISA_FP (aarch64_isa_flags & AARCH64_FL_FP) + #define AARCH64_ISA_SIMD (aarch64_isa_flags & AARCH64_FL_SIMD) + #define AARCH64_ISA_LSE (aarch64_isa_flags & AARCH64_FL_LSE) +-#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_V8_1) ++#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_RDMA) + #define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2) + #define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16) + #define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3) +--- a/src/gcc/config/aarch64/aarch64.md ++++ b/src/gcc/config/aarch64/aarch64.md +@@ -181,6 +181,11 @@ + ;; will be disabled when !TARGET_FLOAT. + (define_attr "fp" "no,yes" (const_string "no")) + ++;; Attribute that specifies whether or not the instruction touches half ++;; precision fp registers. When this is set to yes for an alternative, ++;; that alternative will be disabled when !TARGET_FP_F16INST. ++(define_attr "fp16" "no,yes" (const_string "no")) ++ + ;; Attribute that specifies whether or not the instruction touches simd + ;; registers. When this is set to yes for an alternative, that alternative + ;; will be disabled when !TARGET_SIMD. +@@ -194,11 +199,14 @@ + ;; registers when -mgeneral-regs-only is specified. + (define_attr "enabled" "no,yes" + (cond [(ior +- (and (eq_attr "fp" "yes") +- (eq (symbol_ref "TARGET_FLOAT") (const_int 0))) +- (and (eq_attr "simd" "yes") +- (eq (symbol_ref "TARGET_SIMD") (const_int 0)))) +- (const_string "no") ++ (ior ++ (and (eq_attr "fp" "yes") ++ (eq (symbol_ref "TARGET_FLOAT") (const_int 0))) ++ (and (eq_attr "simd" "yes") ++ (eq (symbol_ref "TARGET_SIMD") (const_int 0)))) ++ (and (eq_attr "fp16" "yes") ++ (eq (symbol_ref "TARGET_FP_F16INST") (const_int 0)))) ++ (const_string "no") + ] (const_string "yes"))) + + ;; Attribute that specifies whether we are dealing with a branch to a +@@ -519,27 +527,31 @@ + ) + + (define_insn "prefetch" +- [(prefetch (match_operand:DI 0 "register_operand" "r") ++ [(prefetch (match_operand:DI 0 "aarch64_prefetch_operand" "Dp") + (match_operand:QI 1 "const_int_operand" "") + (match_operand:QI 2 "const_int_operand" ""))] + "" + { +- const char * pftype[2][4] = ++ const char * pftype[2][4] = + { +- {"prfm\\tPLDL1STRM, %a0", +- "prfm\\tPLDL3KEEP, %a0", +- "prfm\\tPLDL2KEEP, %a0", +- "prfm\\tPLDL1KEEP, %a0"}, +- {"prfm\\tPSTL1STRM, %a0", +- "prfm\\tPSTL3KEEP, %a0", +- "prfm\\tPSTL2KEEP, %a0", +- "prfm\\tPSTL1KEEP, %a0"}, ++ {"prfm\\tPLDL1STRM, %0", ++ "prfm\\tPLDL3KEEP, %0", ++ "prfm\\tPLDL2KEEP, %0", ++ "prfm\\tPLDL1KEEP, %0"}, ++ {"prfm\\tPSTL1STRM, %0", ++ "prfm\\tPSTL3KEEP, %0", ++ "prfm\\tPSTL2KEEP, %0", ++ "prfm\\tPSTL1KEEP, %0"}, + }; + + int locality = INTVAL (operands[2]); + + gcc_assert (IN_RANGE (locality, 0, 3)); + ++ /* PRFM accepts the same addresses as a 64-bit LDR so wrap ++ the address into a DImode MEM so that aarch64_print_operand knows ++ how to print it. */ ++ operands[0] = gen_rtx_MEM (DImode, operands[0]); + return pftype[INTVAL(operands[1])][locality]; + } + [(set_attr "type" "load1")] +@@ -713,12 +725,6 @@ + ;; Subroutine calls and sibcalls + ;; ------------------------------------------------------------------- + +-(define_expand "call_internal" +- [(parallel [(call (match_operand 0 "memory_operand" "") +- (match_operand 1 "general_operand" "")) +- (use (match_operand 2 "" "")) +- (clobber (reg:DI LR_REGNUM))])]) +- + (define_expand "call" + [(parallel [(call (match_operand 0 "memory_operand" "") + (match_operand 1 "general_operand" "")) +@@ -727,57 +733,22 @@ + "" + " + { +- rtx callee, pat; +- +- /* In an untyped call, we can get NULL for operand 2. */ +- if (operands[2] == NULL) +- operands[2] = const0_rtx; +- +- /* Decide if we should generate indirect calls by loading the +- 64-bit address of the callee into a register before performing +- the branch-and-link. */ +- callee = XEXP (operands[0], 0); +- if (GET_CODE (callee) == SYMBOL_REF +- ? (aarch64_is_long_call_p (callee) +- || aarch64_is_noplt_call_p (callee)) +- : !REG_P (callee)) +- XEXP (operands[0], 0) = force_reg (Pmode, callee); +- +- pat = gen_call_internal (operands[0], operands[1], operands[2]); +- aarch64_emit_call_insn (pat); ++ aarch64_expand_call (NULL_RTX, operands[0], false); + DONE; + }" + ) + +-(define_insn "*call_reg" +- [(call (mem:DI (match_operand:DI 0 "register_operand" "r")) ++(define_insn "*call_insn" ++ [(call (mem:DI (match_operand:DI 0 "aarch64_call_insn_operand" "r, Usf")) + (match_operand 1 "" "")) +- (use (match_operand 2 "" "")) + (clobber (reg:DI LR_REGNUM))] + "" +- "blr\\t%0" +- [(set_attr "type" "call")] +-) +- +-(define_insn "*call_symbol" +- [(call (mem:DI (match_operand:DI 0 "" "")) +- (match_operand 1 "" "")) +- (use (match_operand 2 "" "")) +- (clobber (reg:DI LR_REGNUM))] +- "GET_CODE (operands[0]) == SYMBOL_REF +- && !aarch64_is_long_call_p (operands[0]) +- && !aarch64_is_noplt_call_p (operands[0])" +- "bl\\t%a0" +- [(set_attr "type" "call")] ++ "@ ++ blr\\t%0 ++ bl\\t%a0" ++ [(set_attr "type" "call, call")] + ) + +-(define_expand "call_value_internal" +- [(parallel [(set (match_operand 0 "" "") +- (call (match_operand 1 "memory_operand" "") +- (match_operand 2 "general_operand" ""))) +- (use (match_operand 3 "" "")) +- (clobber (reg:DI LR_REGNUM))])]) +- + (define_expand "call_value" + [(parallel [(set (match_operand 0 "" "") + (call (match_operand 1 "memory_operand" "") +@@ -787,60 +758,23 @@ + "" + " + { +- rtx callee, pat; +- +- /* In an untyped call, we can get NULL for operand 3. */ +- if (operands[3] == NULL) +- operands[3] = const0_rtx; +- +- /* Decide if we should generate indirect calls by loading the +- 64-bit address of the callee into a register before performing +- the branch-and-link. */ +- callee = XEXP (operands[1], 0); +- if (GET_CODE (callee) == SYMBOL_REF +- ? (aarch64_is_long_call_p (callee) +- || aarch64_is_noplt_call_p (callee)) +- : !REG_P (callee)) +- XEXP (operands[1], 0) = force_reg (Pmode, callee); +- +- pat = gen_call_value_internal (operands[0], operands[1], operands[2], +- operands[3]); +- aarch64_emit_call_insn (pat); ++ aarch64_expand_call (operands[0], operands[1], false); + DONE; + }" + ) + +-(define_insn "*call_value_reg" ++(define_insn "*call_value_insn" + [(set (match_operand 0 "" "") +- (call (mem:DI (match_operand:DI 1 "register_operand" "r")) ++ (call (mem:DI (match_operand:DI 1 "aarch64_call_insn_operand" "r, Usf")) + (match_operand 2 "" ""))) +- (use (match_operand 3 "" "")) + (clobber (reg:DI LR_REGNUM))] + "" +- "blr\\t%1" +- [(set_attr "type" "call")] +- +-) +- +-(define_insn "*call_value_symbol" +- [(set (match_operand 0 "" "") +- (call (mem:DI (match_operand:DI 1 "" "")) +- (match_operand 2 "" ""))) +- (use (match_operand 3 "" "")) +- (clobber (reg:DI LR_REGNUM))] +- "GET_CODE (operands[1]) == SYMBOL_REF +- && !aarch64_is_long_call_p (operands[1]) +- && !aarch64_is_noplt_call_p (operands[1])" +- "bl\\t%a1" +- [(set_attr "type" "call")] ++ "@ ++ blr\\t%1 ++ bl\\t%a1" ++ [(set_attr "type" "call, call")] + ) + +-(define_expand "sibcall_internal" +- [(parallel [(call (match_operand 0 "memory_operand" "") +- (match_operand 1 "general_operand" "")) +- (return) +- (use (match_operand 2 "" ""))])]) +- + (define_expand "sibcall" + [(parallel [(call (match_operand 0 "memory_operand" "") + (match_operand 1 "general_operand" "")) +@@ -848,29 +782,11 @@ + (use (match_operand 2 "" ""))])] + "" + { +- rtx pat; +- rtx callee = XEXP (operands[0], 0); +- if (!REG_P (callee) +- && ((GET_CODE (callee) != SYMBOL_REF) +- || aarch64_is_noplt_call_p (callee))) +- XEXP (operands[0], 0) = force_reg (Pmode, callee); +- +- if (operands[2] == NULL_RTX) +- operands[2] = const0_rtx; +- +- pat = gen_sibcall_internal (operands[0], operands[1], operands[2]); +- aarch64_emit_call_insn (pat); ++ aarch64_expand_call (NULL_RTX, operands[0], true); + DONE; + } + ) + +-(define_expand "sibcall_value_internal" +- [(parallel [(set (match_operand 0 "" "") +- (call (match_operand 1 "memory_operand" "") +- (match_operand 2 "general_operand" ""))) +- (return) +- (use (match_operand 3 "" ""))])]) +- + (define_expand "sibcall_value" + [(parallel [(set (match_operand 0 "" "") + (call (match_operand 1 "memory_operand" "") +@@ -879,19 +795,7 @@ + (use (match_operand 3 "" ""))])] + "" + { +- rtx pat; +- rtx callee = XEXP (operands[1], 0); +- if (!REG_P (callee) +- && ((GET_CODE (callee) != SYMBOL_REF) +- || aarch64_is_noplt_call_p (callee))) +- XEXP (operands[1], 0) = force_reg (Pmode, callee); +- +- if (operands[3] == NULL_RTX) +- operands[3] = const0_rtx; +- +- pat = gen_sibcall_value_internal (operands[0], operands[1], operands[2], +- operands[3]); +- aarch64_emit_call_insn (pat); ++ aarch64_expand_call (operands[0], operands[1], true); + DONE; + } + ) +@@ -899,8 +803,7 @@ + (define_insn "*sibcall_insn" + [(call (mem:DI (match_operand:DI 0 "aarch64_call_insn_operand" "Ucs, Usf")) + (match_operand 1 "" "")) +- (return) +- (use (match_operand 2 "" ""))] ++ (return)] + "SIBLING_CALL_P (insn)" + "@ + br\\t%0 +@@ -913,8 +816,7 @@ + (call (mem:DI + (match_operand:DI 1 "aarch64_call_insn_operand" "Ucs, Usf")) + (match_operand 2 "" ""))) +- (return) +- (use (match_operand 3 "" ""))] ++ (return)] + "SIBLING_CALL_P (insn)" + "@ + br\\t%1 +@@ -1026,8 +928,8 @@ + ) + + (define_insn_and_split "*movsi_aarch64" +- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r ,*w, r,*w") +- (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,m, m,rZ,*w,S,Ush,rZ,*w,*w"))] ++ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r ,*w, r,*w,w") ++ (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w,Ds"))] + "(register_operand (operands[0], SImode) + || aarch64_reg_or_zero (operands[1], SImode))" + "@ +@@ -1044,8 +946,9 @@ + adrp\\t%x0, %A1 + fmov\\t%s0, %w1 + fmov\\t%w0, %s1 +- fmov\\t%s0, %s1" +- "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode) ++ fmov\\t%s0, %s1 ++ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);" ++ "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode) + && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" + [(const_int 0)] + "{ +@@ -1053,13 +956,14 @@ + DONE; + }" + [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\ +- adr,adr,f_mcr,f_mrc,fmov") +- (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes")] ++ adr,adr,f_mcr,f_mrc,fmov,neon_move") ++ (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*") ++ (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")] + ) + + (define_insn_and_split "*movdi_aarch64" +- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r, *w, r,*w,w") +- (match_operand:DI 1 "aarch64_mov_operand" " r,r,k,N,n,m, m,rZ,*w,S,Ush,rZ,*w,*w,Dd"))] ++ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,r,*w,m, m,r,r, *w,r,*w,w") ++ (match_operand:DI 1 "aarch64_mov_operand" " r,r,k,N,M,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w,Dd"))] + "(register_operand (operands[0], DImode) + || aarch64_reg_or_zero (operands[1], DImode))" + "@ +@@ -1067,6 +971,7 @@ + mov\\t%0, %x1 + mov\\t%x0, %1 + mov\\t%x0, %1 ++ mov\\t%w0, %1 + # + ldr\\t%x0, %1 + ldr\\t%d0, %1 +@@ -1077,7 +982,7 @@ + fmov\\t%d0, %x1 + fmov\\t%x0, %d1 + fmov\\t%d0, %d1 +- movi\\t%d0, %1" ++ * return aarch64_output_scalar_simd_mov_immediate (operands[1], DImode);" + "(CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), DImode)) + && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" + [(const_int 0)] +@@ -1085,10 +990,10 @@ + aarch64_expand_mov_immediate (operands[0], operands[1]); + DONE; + }" +- [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\ +- adr,adr,f_mcr,f_mrc,fmov,neon_move") +- (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*") +- (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")] ++ [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,mov_imm,load1,\ ++ load1,store1,store1,adr,adr,f_mcr,f_mrc,fmov,neon_move") ++ (set_attr "fp" "*,*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*") ++ (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")] + ) + + (define_insn "insv_imm" +@@ -1123,7 +1028,7 @@ + # + # + # +- orr\\t%0.16b, %1.16b, %1.16b ++ mov\\t%0.16b, %1.16b + ldp\\t%0, %H0, %1 + stp\\t%1, %H1, %0 + stp\\txzr, xzr, %0 +@@ -1168,28 +1073,31 @@ + ) + + (define_insn "*movhf_aarch64" +- [(set (match_operand:HF 0 "nonimmediate_operand" "=w,w ,?r,w,w,m,r,m ,r") +- (match_operand:HF 1 "general_operand" "Y ,?rY, w,w,m,w,m,rY,r"))] ++ [(set (match_operand:HF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w ,w,m,r,m ,r") ++ (match_operand:HF 1 "general_operand" "Y ,?rY, w,w,Ufc,Uvi,m,w,m,rY,r"))] + "TARGET_FLOAT && (register_operand (operands[0], HFmode) + || aarch64_reg_or_fp_zero (operands[1], HFmode))" + "@ + movi\\t%0.4h, #0 +- mov\\t%0.h[0], %w1 ++ fmov\\t%h0, %w1 + umov\\t%w0, %1.h[0] + mov\\t%0.h[0], %1.h[0] ++ fmov\\t%h0, %1 ++ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode); + ldr\\t%h0, %1 + str\\t%h1, %0 + ldrh\\t%w0, %1 + strh\\t%w1, %0 + mov\\t%w0, %w1" +- [(set_attr "type" "neon_move,neon_from_gp,neon_to_gp,neon_move,\ +- f_loads,f_stores,load1,store1,mov_reg") +- (set_attr "simd" "yes,yes,yes,yes,*,*,*,*,*")] ++ [(set_attr "type" "neon_move,f_mcr,neon_to_gp,neon_move,fconsts, \ ++ neon_move,f_loads,f_stores,load1,store1,mov_reg") ++ (set_attr "simd" "yes,*,yes,yes,*,yes,*,*,*,*,*") ++ (set_attr "fp16" "*,yes,*,*,yes,*,*,*,*,*,*")] + ) + + (define_insn "*movsf_aarch64" +- [(set (match_operand:SF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r") +- (match_operand:SF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))] ++ [(set (match_operand:SF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w ,w,m,r,m ,r,r") ++ (match_operand:SF 1 "general_operand" "Y ,?rY, w,w,Ufc,Uvi,m,w,m,rY,r,M"))] + "TARGET_FLOAT && (register_operand (operands[0], SFmode) + || aarch64_reg_or_fp_zero (operands[1], SFmode))" + "@ +@@ -1198,19 +1106,22 @@ + fmov\\t%w0, %s1 + fmov\\t%s0, %s1 + fmov\\t%s0, %1 ++ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode); + ldr\\t%s0, %1 + str\\t%s1, %0 + ldr\\t%w0, %1 + str\\t%w1, %0 +- mov\\t%w0, %w1" +- [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconsts,\ +- f_loads,f_stores,load1,store1,mov_reg") +- (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")] ++ mov\\t%w0, %w1 ++ mov\\t%w0, %1" ++ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconsts,neon_move,\ ++ f_loads,f_stores,load1,store1,mov_reg,\ ++ fconsts") ++ (set_attr "simd" "yes,*,*,*,*,yes,*,*,*,*,*,*")] + ) + + (define_insn "*movdf_aarch64" +- [(set (match_operand:DF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r") +- (match_operand:DF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))] ++ [(set (match_operand:DF 0 "nonimmediate_operand" "=w, w ,?r,w,w ,w ,w,m,r,m ,r,r") ++ (match_operand:DF 1 "general_operand" "Y , ?rY, w,w,Ufc,Uvi,m,w,m,rY,r,N"))] + "TARGET_FLOAT && (register_operand (operands[0], DFmode) + || aarch64_reg_or_fp_zero (operands[1], DFmode))" + "@ +@@ -1219,14 +1130,37 @@ + fmov\\t%x0, %d1 + fmov\\t%d0, %d1 + fmov\\t%d0, %1 ++ * return aarch64_output_scalar_simd_mov_immediate (operands[1], DImode); + ldr\\t%d0, %1 + str\\t%d1, %0 + ldr\\t%x0, %1 + str\\t%x1, %0 +- mov\\t%x0, %x1" +- [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconstd,\ +- f_loadd,f_stored,load1,store1,mov_reg") +- (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")] ++ mov\\t%x0, %x1 ++ mov\\t%x0, %1" ++ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconstd,neon_move,\ ++ f_loadd,f_stored,load1,store1,mov_reg,\ ++ fconstd") ++ (set_attr "simd" "yes,*,*,*,*,yes,*,*,*,*,*,*")] ++) ++ ++(define_split ++ [(set (match_operand:GPF_HF 0 "nonimmediate_operand") ++ (match_operand:GPF_HF 1 "general_operand"))] ++ "can_create_pseudo_p () ++ && !aarch64_can_const_movi_rtx_p (operands[1], mode) ++ && !aarch64_float_const_representable_p (operands[1]) ++ && aarch64_float_const_rtx_p (operands[1])" ++ [(const_int 0)] ++ { ++ unsigned HOST_WIDE_INT ival; ++ if (!aarch64_reinterpret_float_as_int (operands[1], &ival)) ++ FAIL; ++ ++ rtx tmp = gen_reg_rtx (mode); ++ emit_move_insn (tmp, gen_int_mode (ival, mode)); ++ emit_move_insn (operands[0], gen_lowpart (mode, tmp)); ++ DONE; ++ } + ) + + (define_insn "*movtf_aarch64" +@@ -1237,7 +1171,7 @@ + "TARGET_FLOAT && (register_operand (operands[0], TFmode) + || aarch64_reg_or_fp_zero (operands[1], TFmode))" + "@ +- orr\\t%0.16b, %1.16b, %1.16b ++ mov\\t%0.16b, %1.16b + # + # + # +@@ -2340,6 +2274,55 @@ + [(set_attr "type" "alus_sreg")] + ) + ++(define_insn "sub3_compare1_imm" ++ [(set (reg:CC CC_REGNUM) ++ (compare:CC ++ (match_operand:GPI 1 "register_operand" "r") ++ (match_operand:GPI 3 "const_int_operand" "n"))) ++ (set (match_operand:GPI 0 "register_operand" "=r") ++ (plus:GPI (match_dup 1) ++ (match_operand:GPI 2 "aarch64_sub_immediate" "J")))] ++ "INTVAL (operands[3]) == -INTVAL (operands[2])" ++ "subs\\t%0, %1, #%n2" ++ [(set_attr "type" "alus_sreg")] ++) ++ ++(define_peephole2 ++ [(set (match_operand:GPI 0 "register_operand") ++ (minus:GPI (match_operand:GPI 1 "aarch64_reg_or_zero") ++ (match_operand:GPI 2 "aarch64_reg_or_zero"))) ++ (set (reg:CC CC_REGNUM) ++ (compare:CC ++ (match_dup 1) ++ (match_dup 2)))] ++ "!reg_overlap_mentioned_p (operands[0], operands[1]) ++ && !reg_overlap_mentioned_p (operands[0], operands[2])" ++ [(const_int 0)] ++ { ++ emit_insn (gen_sub3_compare1 (operands[0], operands[1], ++ operands[2])); ++ DONE; ++ } ++) ++ ++(define_peephole2 ++ [(set (match_operand:GPI 0 "register_operand") ++ (plus:GPI (match_operand:GPI 1 "register_operand") ++ (match_operand:GPI 2 "aarch64_sub_immediate"))) ++ (set (reg:CC CC_REGNUM) ++ (compare:CC ++ (match_dup 1) ++ (match_operand:GPI 3 "const_int_operand")))] ++ "!reg_overlap_mentioned_p (operands[0], operands[1]) ++ && INTVAL (operands[3]) == -INTVAL (operands[2])" ++ [(const_int 0)] ++ { ++ emit_insn (gen_sub3_compare1_imm (operands[0], operands[1], ++ operands[2], operands[3])); ++ DONE; ++ } ++) ++ + (define_insn "*sub__" + [(set (match_operand:GPI 0 "register_operand" "=r") + (minus:GPI (match_operand:GPI 3 "register_operand" "r") +@@ -3881,6 +3864,22 @@ + [(set_attr "type" "logics_reg,logics_imm")] + ) + ++(define_split ++ [(set (reg:CC_NZ CC_REGNUM) ++ (compare:CC_NZ ++ (and:GPI (match_operand:GPI 0 "register_operand") ++ (match_operand:GPI 1 "aarch64_mov_imm_operand")) ++ (const_int 0))) ++ (clobber (match_operand:SI 2 "register_operand"))] ++ "" ++ [(set (match_dup 2) (match_dup 1)) ++ (set (reg:CC_NZ CC_REGNUM) ++ (compare:CC_NZ ++ (and:GPI (match_dup 0) ++ (match_dup 2)) ++ (const_int 0)))] ++) ++ + (define_insn "*and3nr_compare0_zextract" + [(set (reg:CC_NZ CC_REGNUM) + (compare:CC_NZ +@@ -3916,6 +3915,26 @@ + [(set_attr "type" "logics_shift_imm")] + ) + ++(define_split ++ [(set (reg:CC_NZ CC_REGNUM) ++ (compare:CC_NZ ++ (and:GPI (SHIFT:GPI ++ (match_operand:GPI 0 "register_operand") ++ (match_operand:QI 1 "aarch64_shift_imm_")) ++ (match_operand:GPI 2 "aarch64_mov_imm_operand")) ++ (const_int 0))) ++ (clobber (match_operand:SI 3 "register_operand"))] ++ "" ++ [(set (match_dup 3) (match_dup 2)) ++ (set (reg:CC_NZ CC_REGNUM) ++ (compare:CC_NZ ++ (and:GPI (SHIFT:GPI ++ (match_dup 0) ++ (match_dup 1)) ++ (match_dup 3)) ++ (const_int 0)))] ++) ++ + ;; ------------------------------------------------------------------- + ;; Shifts + ;; ------------------------------------------------------------------- +@@ -4997,6 +5016,18 @@ + [(set_attr "type" "f_minmax")] + ) + ++(define_expand "lrint2" ++ [(match_operand:GPI 0 "register_operand") ++ (match_operand:GPF 1 "register_operand")] ++ "TARGET_FLOAT" ++{ ++ rtx cvt = gen_reg_rtx (mode); ++ emit_insn (gen_rint2 (cvt, operands[1])); ++ emit_insn (gen_lbtrunc2 (operands[0], cvt)); ++ DONE; ++} ++) ++ + ;; For copysign (x, y), we want to generate: + ;; + ;; LDR d2, #(1 << 63) +@@ -5030,14 +5061,16 @@ + (match_operand:SF 2 "register_operand")] + "TARGET_FLOAT && TARGET_SIMD" + { +- rtx mask = gen_reg_rtx (DImode); ++ rtx v_bitmask = gen_reg_rtx (V2SImode); + + /* Juggle modes to get us in to a vector mode for BSL. */ +- rtx op1 = lowpart_subreg (V2SFmode, operands[1], SFmode); ++ rtx op1 = lowpart_subreg (DImode, operands[1], SFmode); + rtx op2 = lowpart_subreg (V2SFmode, operands[2], SFmode); + rtx tmp = gen_reg_rtx (V2SFmode); +- emit_move_insn (mask, GEN_INT (HOST_WIDE_INT_1U << 31)); +- emit_insn (gen_aarch64_simd_bslv2sf (tmp, mask, op2, op1)); ++ emit_move_insn (v_bitmask, ++ aarch64_simd_gen_const_vector_dup (V2SImode, ++ HOST_WIDE_INT_M1U << 31)); ++ emit_insn (gen_aarch64_simd_bslv2sf (tmp, v_bitmask, op2, op1)); + emit_move_insn (operands[0], lowpart_subreg (SFmode, tmp, V2SFmode)); + DONE; + } +--- a/src/gcc/config/aarch64/arm_neon.h ++++ b/src/gcc/config/aarch64/arm_neon.h +@@ -12162,7 +12162,7 @@ vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c) + + /* ARMv8.1-A instrinsics. */ + #pragma GCC push_options +-#pragma GCC target ("arch=armv8.1-a") ++#pragma GCC target ("+nothing+rdma") + + __extension__ extern __inline int16x4_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +--- a/src/gcc/config/aarch64/atomics.md ++++ b/src/gcc/config/aarch64/atomics.md +@@ -25,7 +25,7 @@ + (match_operand:ALLI 1 "register_operand" "") ;; val out + (match_operand:ALLI 2 "aarch64_sync_memory_operand" "") ;; memory + (match_operand:ALLI 3 "general_operand" "") ;; expected +- (match_operand:ALLI 4 "register_operand" "") ;; desired ++ (match_operand:ALLI 4 "aarch64_reg_or_zero" "") ;; desired + (match_operand:SI 5 "const_int_operand") ;; is_weak + (match_operand:SI 6 "const_int_operand") ;; mod_s + (match_operand:SI 7 "const_int_operand")] ;; mod_f +@@ -45,7 +45,7 @@ + (set (match_dup 1) + (unspec_volatile:SHORT + [(match_operand:SI 2 "aarch64_plus_operand" "rI") ;; expected +- (match_operand:SHORT 3 "register_operand" "r") ;; desired ++ (match_operand:SHORT 3 "aarch64_reg_or_zero" "rZ") ;; desired + (match_operand:SI 4 "const_int_operand") ;; is_weak + (match_operand:SI 5 "const_int_operand") ;; mod_s + (match_operand:SI 6 "const_int_operand")] ;; mod_f +@@ -69,7 +69,7 @@ + (set (match_dup 1) + (unspec_volatile:GPI + [(match_operand:GPI 2 "aarch64_plus_operand" "rI") ;; expect +- (match_operand:GPI 3 "register_operand" "r") ;; desired ++ (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ") ;; desired + (match_operand:SI 4 "const_int_operand") ;; is_weak + (match_operand:SI 5 "const_int_operand") ;; mod_s + (match_operand:SI 6 "const_int_operand")] ;; mod_f +@@ -94,7 +94,7 @@ + (set (match_dup 1) + (unspec_volatile:SHORT + [(match_operand:SI 2 "aarch64_plus_operand" "rI") ;; expected +- (match_operand:SHORT 3 "register_operand" "r") ;; desired ++ (match_operand:SHORT 3 "aarch64_reg_or_zero" "rZ") ;; desired + (match_operand:SI 4 "const_int_operand") ;; is_weak + (match_operand:SI 5 "const_int_operand") ;; mod_s + (match_operand:SI 6 "const_int_operand")] ;; mod_f +@@ -119,7 +119,7 @@ + (set (match_dup 1) + (unspec_volatile:GPI + [(match_operand:GPI 2 "aarch64_plus_operand" "rI") ;; expect +- (match_operand:GPI 3 "register_operand" "r") ;; desired ++ (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ") ;; desired + (match_operand:SI 4 "const_int_operand") ;; is_weak + (match_operand:SI 5 "const_int_operand") ;; mod_s + (match_operand:SI 6 "const_int_operand")] ;; mod_f +@@ -534,7 +534,7 @@ + (unspec_volatile:SI [(const_int 0)] UNSPECV_SX)) + (set (match_operand:ALLI 1 "aarch64_sync_memory_operand" "=Q") + (unspec_volatile:ALLI +- [(match_operand:ALLI 2 "register_operand" "r") ++ [(match_operand:ALLI 2 "aarch64_reg_or_zero" "rZ") + (match_operand:SI 3 "const_int_operand")] + UNSPECV_SX))] + "" +@@ -616,7 +616,7 @@ + (set (match_dup 1) + (unspec_volatile:SHORT + [(match_dup 0) +- (match_operand:SHORT 2 "register_operand" "r") ;; value. ++ (match_operand:SHORT 2 "aarch64_reg_or_zero" "rZ") ;; value. + (match_operand:SI 3 "const_int_operand" "")] ;; model. + UNSPECV_ATOMIC_CAS))] + "TARGET_LSE && reload_completed" +@@ -640,7 +640,7 @@ + (set (match_dup 1) + (unspec_volatile:GPI + [(match_dup 0) +- (match_operand:GPI 2 "register_operand" "r") ;; value. ++ (match_operand:GPI 2 "aarch64_reg_or_zero" "rZ") ;; value. + (match_operand:SI 3 "const_int_operand" "")] ;; model. + UNSPECV_ATOMIC_CAS))] + "TARGET_LSE && reload_completed" +--- a/src/gcc/config/aarch64/constraints.md ++++ b/src/gcc/config/aarch64/constraints.md +@@ -98,6 +98,14 @@ + (and (match_code "high") + (match_test "aarch64_valid_symref (XEXP (op, 0), GET_MODE (XEXP (op, 0)))"))) + ++(define_constraint "Usa" ++ "@internal ++ A constraint that matches an absolute symbolic address that can be ++ loaded by a single ADR." ++ (and (match_code "const,symbol_ref,label_ref") ++ (match_test "aarch64_symbolic_address_p (op)") ++ (match_test "aarch64_mov_operand_p (op, GET_MODE (op))"))) ++ + (define_constraint "Uss" + "@internal + A constraint that matches an immediate shift constant in SImode." +@@ -118,7 +126,8 @@ + (define_constraint "Usf" + "@internal Usf is a symbol reference under the context where plt stub allowed." + (and (match_code "symbol_ref") +- (match_test "!aarch64_is_noplt_call_p (op)"))) ++ (match_test "!(aarch64_is_noplt_call_p (op) ++ || aarch64_is_long_call_p (op))"))) + + (define_constraint "UsM" + "@internal +@@ -167,6 +176,12 @@ + (and (match_code "const_double") + (match_test "aarch64_float_const_representable_p (op)"))) + ++(define_constraint "Uvi" ++ "A floating point constant which can be used with a\ ++ MOVI immediate operation." ++ (and (match_code "const_double") ++ (match_test "aarch64_can_const_movi_rtx_p (op, GET_MODE (op))"))) ++ + (define_constraint "Dn" + "@internal + A constraint that matches vector of immediates." +@@ -211,6 +226,19 @@ + + (define_constraint "Dd" + "@internal +- A constraint that matches an immediate operand valid for AdvSIMD scalar." ++ A constraint that matches an integer immediate operand valid\ ++ for AdvSIMD scalar operations in DImode." + (and (match_code "const_int") +- (match_test "aarch64_simd_imm_scalar_p (op, GET_MODE (op))"))) ++ (match_test "aarch64_can_const_movi_rtx_p (op, DImode)"))) ++ ++(define_constraint "Ds" ++ "@internal ++ A constraint that matches an integer immediate operand valid\ ++ for AdvSIMD scalar operations in SImode." ++ (and (match_code "const_int") ++ (match_test "aarch64_can_const_movi_rtx_p (op, SImode)"))) ++ ++(define_address_constraint "Dp" ++ "@internal ++ An address valid for a prefetch instruction." ++ (match_test "aarch64_address_valid_for_prefetch_p (op, true)")) +--- a/src/gcc/config/aarch64/iterators.md ++++ b/src/gcc/config/aarch64/iterators.md +@@ -44,6 +44,9 @@ + ;; Iterator for all scalar floating point modes (HF, SF, DF) + (define_mode_iterator GPF_F16 [(HF "AARCH64_ISA_F16") SF DF]) + ++;; Iterator for all scalar floating point modes (HF, SF, DF) ++(define_mode_iterator GPF_HF [HF SF DF]) ++ + ;; Iterator for all scalar floating point modes (HF, SF, DF and TF) + (define_mode_iterator GPF_TF_F16 [HF SF DF TF]) + +--- a/src/gcc/config/aarch64/predicates.md ++++ b/src/gcc/config/aarch64/predicates.md +@@ -77,6 +77,10 @@ + (define_predicate "aarch64_fp_vec_pow2" + (match_test "aarch64_vec_fpconst_pow_of_2 (op) > 0")) + ++(define_predicate "aarch64_sub_immediate" ++ (and (match_code "const_int") ++ (match_test "aarch64_uimm12_shift (-INTVAL (op))"))) ++ + (define_predicate "aarch64_plus_immediate" + (and (match_code "const_int") + (ior (match_test "aarch64_uimm12_shift (INTVAL (op))") +@@ -106,6 +110,10 @@ + (ior (match_operand 0 "register_operand") + (match_operand 0 "aarch64_logical_immediate"))) + ++(define_predicate "aarch64_mov_imm_operand" ++ (and (match_code "const_int") ++ (match_test "aarch64_move_imm (INTVAL (op), mode)"))) ++ + (define_predicate "aarch64_logical_and_immediate" + (and (match_code "const_int") + (match_test "aarch64_and_bitmask_imm (INTVAL (op), mode)"))) +@@ -165,6 +173,9 @@ + (match_test "aarch64_legitimate_address_p (mode, XEXP (op, 0), PARALLEL, + 0)"))) + ++(define_predicate "aarch64_prefetch_operand" ++ (match_test "aarch64_address_valid_for_prefetch_p (op, false)")) ++ + (define_predicate "aarch64_valid_symref" + (match_code "const, symbol_ref, label_ref") + { +--- a/src/gcc/config/aarch64/thunderx2t99.md ++++ b/src/gcc/config/aarch64/thunderx2t99.md +@@ -441,3 +441,23 @@ + (and (eq_attr "tune" "thunderx2t99") + (eq_attr "type" "neon_store2_one_lane,neon_store2_one_lane_q")) + "thunderx2t99_ls01,thunderx2t99_f01") ++ ++;; Crypto extensions. ++ ++(define_insn_reservation "thunderx2t99_aes" 5 ++ (and (eq_attr "tune" "thunderx2t99") ++ (eq_attr "type" "crypto_aese,crypto_aesmc")) ++ "thunderx2t99_f1") ++ ++(define_insn_reservation "thunderx2t99_sha" 7 ++ (and (eq_attr "tune" "thunderx2t99") ++ (eq_attr "type" "crypto_sha1_fast,crypto_sha1_xor,crypto_sha1_slow,\ ++ crypto_sha256_fast,crypto_sha256_slow")) ++ "thunderx2t99_f1") ++ ++;; CRC extension. ++ ++(define_insn_reservation "thunderx2t99_crc" 4 ++ (and (eq_attr "tune" "thunderx2t99") ++ (eq_attr "type" "crc")) ++ "thunderx2t99_i1") +--- a/src/gcc/config/arm/aarch-common-protos.h ++++ b/src/gcc/config/arm/aarch-common-protos.h +@@ -25,12 +25,13 @@ + + extern int aarch_accumulator_forwarding (rtx_insn *, rtx_insn *); + extern int aarch_crypto_can_dual_issue (rtx_insn *, rtx_insn *); +-extern int aarch_forward_to_shift_is_not_shifted_reg (rtx_insn *, rtx_insn *); + extern bool aarch_rev16_p (rtx); + extern bool aarch_rev16_shleft_mask_imm_p (rtx, machine_mode); + extern bool aarch_rev16_shright_mask_imm_p (rtx, machine_mode); + extern int arm_early_load_addr_dep (rtx, rtx); ++extern int arm_early_load_addr_dep_ptr (rtx, rtx); + extern int arm_early_store_addr_dep (rtx, rtx); ++extern int arm_early_store_addr_dep_ptr (rtx, rtx); + extern int arm_mac_accumulator_is_mul_result (rtx, rtx); + extern int arm_mac_accumulator_is_result (rtx, rtx); + extern int arm_no_early_alu_shift_dep (rtx, rtx); +--- a/src/gcc/config/arm/aarch-common.c ++++ b/src/gcc/config/arm/aarch-common.c +@@ -241,6 +241,24 @@ arm_early_load_addr_dep (rtx producer, rtx consumer) + return reg_overlap_mentioned_p (value, addr); + } + ++/* Return nonzero if the CONSUMER instruction (a load) does need ++ a Pmode PRODUCER's value to calculate the address. */ ++ ++int ++arm_early_load_addr_dep_ptr (rtx producer, rtx consumer) ++{ ++ rtx value = arm_find_sub_rtx_with_code (PATTERN (producer), SET, false); ++ rtx addr = arm_find_sub_rtx_with_code (PATTERN (consumer), SET, false); ++ ++ if (!value || !addr || !MEM_P (SET_SRC (value))) ++ return 0; ++ ++ value = SET_DEST (value); ++ addr = SET_SRC (addr); ++ ++ return GET_MODE (value) == Pmode && reg_overlap_mentioned_p (value, addr); ++} ++ + /* Return nonzero if the CONSUMER instruction (an ALU op) does not + have an early register shift value or amount dependency on the + result of PRODUCER. */ +@@ -254,12 +272,7 @@ arm_no_early_alu_shift_dep (rtx producer, rtx consumer) + return 0; + + if ((early_op = arm_find_shift_sub_rtx (op))) +- { +- if (REG_P (early_op)) +- early_op = op; +- +- return !reg_overlap_mentioned_p (value, early_op); +- } ++ return !reg_overlap_mentioned_p (value, early_op); + + return 0; + } +@@ -336,6 +349,24 @@ arm_early_store_addr_dep (rtx producer, rtx consumer) + return !arm_no_early_store_addr_dep (producer, consumer); + } + ++/* Return nonzero if the CONSUMER instruction (a store) does need ++ a Pmode PRODUCER's value to calculate the address. */ ++ ++int ++arm_early_store_addr_dep_ptr (rtx producer, rtx consumer) ++{ ++ rtx value = arm_find_sub_rtx_with_code (PATTERN (producer), SET, false); ++ rtx addr = arm_find_sub_rtx_with_code (PATTERN (consumer), SET, false); ++ ++ if (!value || !addr || !MEM_P (SET_SRC (value))) ++ return 0; ++ ++ value = SET_DEST (value); ++ addr = SET_DEST (addr); ++ ++ return GET_MODE (value) == Pmode && reg_overlap_mentioned_p (value, addr); ++} ++ + /* Return non-zero iff the consumer (a multiply-accumulate or a + multiple-subtract instruction) has an accumulator dependency on the + result of the producer and no other dependency on that result. It +@@ -472,38 +503,6 @@ aarch_accumulator_forwarding (rtx_insn *producer, rtx_insn *consumer) + return (REGNO (dest) == REGNO (accumulator)); + } + +-/* Return nonzero if the CONSUMER instruction is some sort of +- arithmetic or logic + shift operation, and the register we are +- writing in PRODUCER is not used in a register shift by register +- operation. */ +- +-int +-aarch_forward_to_shift_is_not_shifted_reg (rtx_insn *producer, +- rtx_insn *consumer) +-{ +- rtx value, op; +- rtx early_op; +- +- if (!arm_get_set_operands (producer, consumer, &value, &op)) +- return 0; +- +- if ((early_op = arm_find_shift_sub_rtx (op))) +- { +- if (REG_P (early_op)) +- early_op = op; +- +- /* Any other canonicalisation of a shift is a shift-by-constant +- so we don't care. */ +- if (GET_CODE (early_op) == ASHIFT) +- return (!REG_P (XEXP (early_op, 0)) +- || !REG_P (XEXP (early_op, 1))); +- else +- return 1; +- } +- +- return 0; +-} +- + /* Return non-zero if the consumer (a multiply-accumulate instruction) + has an accumulator dependency on the result of the producer (a + multiplication instruction) and no other dependency on that result. */ +--- a/src/gcc/config/arm/aarch-cost-tables.h ++++ b/src/gcc/config/arm/aarch-cost-tables.h +@@ -154,7 +154,7 @@ const struct cpu_cost_table cortexa53_extra_costs = + COSTS_N_INSNS (1), /* extend. */ + COSTS_N_INSNS (1), /* add. */ + COSTS_N_INSNS (1), /* extend_add. */ +- COSTS_N_INSNS (7) /* idiv. */ ++ COSTS_N_INSNS (9) /* idiv. */ + }, + /* MULT DImode */ + { +--- a/src/gcc/config/arm/arm-builtins.c ++++ b/src/gcc/config/arm/arm-builtins.c +@@ -3058,15 +3058,15 @@ arm_expand_builtin (tree exp, + } + + for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++) +- if (d->code == (const enum arm_builtins) fcode) ++ if (d->code == (enum arm_builtins) fcode) + return arm_expand_binop_builtin (d->icode, exp, target); + + for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++) +- if (d->code == (const enum arm_builtins) fcode) ++ if (d->code == (enum arm_builtins) fcode) + return arm_expand_unop_builtin (d->icode, exp, target, 0); + + for (i = 0, d = bdesc_3arg; i < ARRAY_SIZE (bdesc_3arg); i++, d++) +- if (d->code == (const enum arm_builtins) fcode) ++ if (d->code == (enum arm_builtins) fcode) + return arm_expand_ternop_builtin (d->icode, exp, target); + + /* @@@ Should really do something sensible here. */ +--- a/src/gcc/config/arm/arm.c ++++ b/src/gcc/config/arm/arm.c +@@ -85,6 +85,7 @@ static bool arm_const_not_ok_for_debug_p (rtx); + static int arm_needs_doubleword_align (machine_mode, const_tree); + static int arm_compute_static_chain_stack_bytes (void); + static arm_stack_offsets *arm_get_frame_offsets (void); ++static void arm_compute_frame_layout (void); + static void arm_add_gc_roots (void); + static int arm_gen_constant (enum rtx_code, machine_mode, rtx, + unsigned HOST_WIDE_INT, rtx, rtx, int, int); +@@ -680,6 +681,9 @@ static const struct attribute_spec arm_attribute_table[] = + #undef TARGET_SCALAR_MODE_SUPPORTED_P + #define TARGET_SCALAR_MODE_SUPPORTED_P arm_scalar_mode_supported_p + ++#undef TARGET_COMPUTE_FRAME_LAYOUT ++#define TARGET_COMPUTE_FRAME_LAYOUT arm_compute_frame_layout ++ + #undef TARGET_FRAME_POINTER_REQUIRED + #define TARGET_FRAME_POINTER_REQUIRED arm_frame_pointer_required + +@@ -4009,6 +4013,10 @@ use_simple_return_p (void) + { + arm_stack_offsets *offsets; + ++ /* Note this function can be called before or after reload. */ ++ if (!reload_completed) ++ arm_compute_frame_layout (); ++ + offsets = arm_get_frame_offsets (); + return offsets->outgoing_args != 0; + } +@@ -7858,6 +7866,8 @@ arm_legitimate_index_p (machine_mode mode, rtx index, RTX_CODE outer, + { + HOST_WIDE_INT val = INTVAL (index); + ++ /* Assume we emit ldrd or 2x ldr if !TARGET_LDRD. ++ If vldr is selected it uses arm_coproc_mem_operand. */ + if (TARGET_LDRD) + return val > -256 && val < 256; + else +@@ -7985,11 +7995,13 @@ thumb2_legitimate_index_p (machine_mode mode, rtx index, int strict_p) + if (code == CONST_INT) + { + HOST_WIDE_INT val = INTVAL (index); +- /* ??? Can we assume ldrd for thumb2? */ +- /* Thumb-2 ldrd only has reg+const addressing modes. */ +- /* ldrd supports offsets of +-1020. +- However the ldr fallback does not. */ +- return val > -256 && val < 256 && (val & 3) == 0; ++ /* Thumb-2 ldrd only has reg+const addressing modes. ++ Assume we emit ldrd or 2x ldr if !TARGET_LDRD. ++ If vldr is selected it uses arm_coproc_mem_operand. */ ++ if (TARGET_LDRD) ++ return IN_RANGE (val, -1020, 1020) && (val & 3) == 0; ++ else ++ return IN_RANGE (val, -255, 4095 - 4); + } + else + return 0; +@@ -9285,6 +9297,10 @@ arm_rtx_costs_internal (rtx x, enum rtx_code code, enum rtx_code outer_code, + *cost += COSTS_N_INSNS (speed_p ? extra_cost->mult[0].idiv : 0); + else + *cost = LIBCALL_COST (2); ++ ++ /* Make the cost of sdiv more expensive so when both sdiv and udiv are ++ possible udiv is prefered. */ ++ *cost += (code == DIV ? COSTS_N_INSNS (1) : 0); + return false; /* All arguments must be in registers. */ + + case MOD: +@@ -9307,7 +9323,9 @@ arm_rtx_costs_internal (rtx x, enum rtx_code code, enum rtx_code outer_code, + + /* Fall-through. */ + case UMOD: +- *cost = LIBCALL_COST (2); ++ /* Make the cost of sdiv more expensive so when both sdiv and udiv are ++ possible udiv is prefered. */ ++ *cost = LIBCALL_COST (2) + (code == MOD ? COSTS_N_INSNS (1) : 0); + return false; /* All arguments must be in registers. */ + + case ROTATE: +@@ -13548,10 +13566,7 @@ gen_ldm_seq (rtx *operands, int nops, bool sort_regs) + emit_insn (gen_addsi3 (newbase, base_reg_rtx, GEN_INT (offset))); + offset = 0; + if (!TARGET_THUMB1) +- { +- base_reg = regs[0]; +- base_reg_rtx = newbase; +- } ++ base_reg_rtx = newbase; + } + + for (i = 0; i < nops; i++) +@@ -14075,7 +14090,6 @@ arm_gen_movmemqi (rtx *operands) + { + HOST_WIDE_INT in_words_to_go, out_words_to_go, last_bytes; + HOST_WIDE_INT srcoffset, dstoffset; +- int i; + rtx src, dst, srcbase, dstbase; + rtx part_bytes_reg = NULL; + rtx mem; +@@ -14105,7 +14119,7 @@ arm_gen_movmemqi (rtx *operands) + if (out_words_to_go != in_words_to_go && ((in_words_to_go - 1) & 3) != 0) + part_bytes_reg = gen_rtx_REG (SImode, (in_words_to_go - 1) & 3); + +- for (i = 0; in_words_to_go >= 2; i+=4) ++ while (in_words_to_go >= 2) + { + if (in_words_to_go > 4) + emit_insn (arm_gen_load_multiple (arm_regs_in_sequence, 4, src, +@@ -16857,9 +16871,10 @@ compute_not_to_clear_mask (tree arg_type, rtx arg_rtx, int regno, + return not_to_clear_mask; + } + +-/* Saves callee saved registers, clears callee saved registers and caller saved +- registers not used to pass arguments before a cmse_nonsecure_call. And +- restores the callee saved registers after. */ ++/* Clears caller saved registers not used to pass arguments before a ++ cmse_nonsecure_call. Saving, clearing and restoring of callee saved ++ registers is done in __gnu_cmse_nonsecure_call libcall. ++ See libgcc/config/arm/cmse_nonsecure_call.S. */ + + static void + cmse_nonsecure_call_clear_caller_saved (void) +@@ -19094,7 +19109,7 @@ arm_compute_static_chain_stack_bytes (void) + + /* Compute a bit mask of which registers need to be + saved on the stack for the current function. +- This is used by arm_get_frame_offsets, which may add extra registers. */ ++ This is used by arm_compute_frame_layout, which may add extra registers. */ + + static unsigned long + arm_compute_save_reg_mask (void) +@@ -20728,12 +20743,25 @@ any_sibcall_could_use_r3 (void) + alignment. */ + + ++/* Return cached stack offsets. */ ++ ++static arm_stack_offsets * ++arm_get_frame_offsets (void) ++{ ++ struct arm_stack_offsets *offsets; ++ ++ offsets = &cfun->machine->stack_offsets; ++ ++ return offsets; ++} ++ ++ + /* Calculate stack offsets. These are used to calculate register elimination + offsets and in prologue/epilogue code. Also calculates which registers + should be saved. */ + +-static arm_stack_offsets * +-arm_get_frame_offsets (void) ++static void ++arm_compute_frame_layout (void) + { + struct arm_stack_offsets *offsets; + unsigned long func_type; +@@ -20744,9 +20772,6 @@ arm_get_frame_offsets (void) + + offsets = &cfun->machine->stack_offsets; + +- if (reload_completed) +- return offsets; +- + /* Initially this is the size of the local variables. It will translated + into an offset once we have determined the size of preceding data. */ + frame_size = ROUND_UP_WORD (get_frame_size ()); +@@ -20811,7 +20836,7 @@ arm_get_frame_offsets (void) + { + offsets->outgoing_args = offsets->soft_frame; + offsets->locals_base = offsets->soft_frame; +- return offsets; ++ return; + } + + /* Ensure SFP has the correct alignment. */ +@@ -20887,8 +20912,6 @@ arm_get_frame_offsets (void) + offsets->outgoing_args += 4; + gcc_assert (!(offsets->outgoing_args & 7)); + } +- +- return offsets; + } + + +@@ -21522,7 +21545,7 @@ arm_expand_prologue (void) + { + /* If no coprocessor registers are being pushed and we don't have + to worry about a frame pointer then push extra registers to +- create the stack frame. This is done is a way that does not ++ create the stack frame. This is done in a way that does not + alter the frame layout, so is independent of the epilogue. */ + int n; + int frame; +@@ -21650,8 +21673,8 @@ arm_expand_prologue (void) + will prevent the scheduler from moving stores to the frame + before the stack adjustment. */ + if (frame_pointer_needed) +- insn = emit_insn (gen_stack_tie (stack_pointer_rtx, +- hard_frame_pointer_rtx)); ++ emit_insn (gen_stack_tie (stack_pointer_rtx, ++ hard_frame_pointer_rtx)); + } + + +@@ -23736,7 +23759,6 @@ thumb_pop (FILE *f, unsigned long mask) + { + int regno; + int lo_mask = mask & 0xFF; +- int pushed_words = 0; + + gcc_assert (mask); + +@@ -23759,8 +23781,6 @@ thumb_pop (FILE *f, unsigned long mask) + + if ((lo_mask & ~1) != 0) + fprintf (f, ", "); +- +- pushed_words++; + } + } + +@@ -24030,9 +24050,6 @@ thumb_exit (FILE *f, int reg_containing_return_addr) + move_to = number_of_first_bit_set (regs_to_pop); + + asm_fprintf (f, "\tmov\t%r, %r\n", move_to, popped_into); +- +- regs_to_pop &= ~(1 << move_to); +- + --pops_needed; + } + +@@ -28225,17 +28242,32 @@ arm_expand_compare_and_swap (rtx operands[]) + gcc_unreachable (); + } + +- switch (mode) ++ if (TARGET_THUMB1) + { +- case QImode: gen = gen_atomic_compare_and_swapqi_1; break; +- case HImode: gen = gen_atomic_compare_and_swaphi_1; break; +- case SImode: gen = gen_atomic_compare_and_swapsi_1; break; +- case DImode: gen = gen_atomic_compare_and_swapdi_1; break; +- default: +- gcc_unreachable (); ++ switch (mode) ++ { ++ case QImode: gen = gen_atomic_compare_and_swapt1qi_1; break; ++ case HImode: gen = gen_atomic_compare_and_swapt1hi_1; break; ++ case SImode: gen = gen_atomic_compare_and_swapt1si_1; break; ++ case DImode: gen = gen_atomic_compare_and_swapt1di_1; break; ++ default: ++ gcc_unreachable (); ++ } ++ } ++ else ++ { ++ switch (mode) ++ { ++ case QImode: gen = gen_atomic_compare_and_swap32qi_1; break; ++ case HImode: gen = gen_atomic_compare_and_swap32hi_1; break; ++ case SImode: gen = gen_atomic_compare_and_swap32si_1; break; ++ case DImode: gen = gen_atomic_compare_and_swap32di_1; break; ++ default: ++ gcc_unreachable (); ++ } + } + +- bdst = TARGET_THUMB1 ? bval : gen_rtx_REG (CCmode, CC_REGNUM); ++ bdst = TARGET_THUMB1 ? bval : gen_rtx_REG (CC_Zmode, CC_REGNUM); + emit_insn (gen (bdst, rval, mem, oldval, newval, is_weak, mod_s, mod_f)); + + if (mode == QImode || mode == HImode) +--- a/src/gcc/config/arm/arm.h ++++ b/src/gcc/config/arm/arm.h +@@ -682,7 +682,7 @@ extern int arm_arch_cmse; + /* Standard register usage. */ + + /* Register allocation in ARM Procedure Call Standard +- (S - saved over call). ++ (S - saved over call, F - Frame-related). + + r0 * argument word/integer result + r1-r3 argument word +--- a/src/gcc/config/arm/arm.md ++++ b/src/gcc/config/arm/arm.md +@@ -457,14 +457,13 @@ + ) + + (define_insn_and_split "*arm_adddi3" +- [(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r,&r,&r") +- (plus:DI (match_operand:DI 1 "s_register_operand" "%0, 0, r, 0, r") +- (match_operand:DI 2 "arm_adddi_operand" "r, 0, r, Dd, Dd"))) ++ [(set (match_operand:DI 0 "arm_general_register_operand" "=&r,&r,&r,&r,&r") ++ (plus:DI (match_operand:DI 1 "arm_general_register_operand" "%0, 0, r, 0, r") ++ (match_operand:DI 2 "arm_general_adddi_operand" "r, 0, r, Dd, Dd"))) + (clobber (reg:CC CC_REGNUM))] + "TARGET_32BIT && !TARGET_NEON" + "#" +- "TARGET_32BIT && reload_completed +- && ! (TARGET_NEON && IS_VFP_REGNUM (REGNO (operands[0])))" ++ "TARGET_32BIT && ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed)" + [(parallel [(set (reg:CC_C CC_REGNUM) + (compare:CC_C (plus:SI (match_dup 1) (match_dup 2)) + (match_dup 1))) +@@ -1263,13 +1262,13 @@ + ) + + (define_insn_and_split "*arm_subdi3" +- [(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r") +- (minus:DI (match_operand:DI 1 "s_register_operand" "0,r,0") +- (match_operand:DI 2 "s_register_operand" "r,0,0"))) ++ [(set (match_operand:DI 0 "arm_general_register_operand" "=&r,&r,&r") ++ (minus:DI (match_operand:DI 1 "arm_general_register_operand" "0,r,0") ++ (match_operand:DI 2 "arm_general_register_operand" "r,0,0"))) + (clobber (reg:CC CC_REGNUM))] + "TARGET_32BIT && !TARGET_NEON" + "#" ; "subs\\t%Q0, %Q1, %Q2\;sbc\\t%R0, %R1, %R2" +- "&& reload_completed" ++ "&& (!TARGET_IWMMXT || reload_completed)" + [(parallel [(set (reg:CC CC_REGNUM) + (compare:CC (match_dup 1) (match_dup 2))) + (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))]) +@@ -2255,7 +2254,24 @@ + (and:DI (match_operand:DI 1 "s_register_operand" "") + (match_operand:DI 2 "neon_inv_logic_op2" "")))] + "TARGET_32BIT" +- "" ++ " ++ if (!TARGET_NEON && !TARGET_IWMMXT) ++ { ++ rtx low = simplify_gen_binary (AND, SImode, ++ gen_lowpart (SImode, operands[1]), ++ gen_lowpart (SImode, operands[2])); ++ rtx high = simplify_gen_binary (AND, SImode, ++ gen_highpart (SImode, operands[1]), ++ gen_highpart_mode (SImode, DImode, ++ operands[2])); ++ ++ emit_insn (gen_rtx_SET (gen_lowpart (SImode, operands[0]), low)); ++ emit_insn (gen_rtx_SET (gen_highpart (SImode, operands[0]), high)); ++ ++ DONE; ++ } ++ /* Otherwise expand pattern as above. */ ++ " + ) + + (define_insn_and_split "*anddi3_insn" +@@ -3128,7 +3144,24 @@ + (ior:DI (match_operand:DI 1 "s_register_operand" "") + (match_operand:DI 2 "neon_logic_op2" "")))] + "TARGET_32BIT" +- "" ++ " ++ if (!TARGET_NEON && !TARGET_IWMMXT) ++ { ++ rtx low = simplify_gen_binary (IOR, SImode, ++ gen_lowpart (SImode, operands[1]), ++ gen_lowpart (SImode, operands[2])); ++ rtx high = simplify_gen_binary (IOR, SImode, ++ gen_highpart (SImode, operands[1]), ++ gen_highpart_mode (SImode, DImode, ++ operands[2])); ++ ++ emit_insn (gen_rtx_SET (gen_lowpart (SImode, operands[0]), low)); ++ emit_insn (gen_rtx_SET (gen_highpart (SImode, operands[0]), high)); ++ ++ DONE; ++ } ++ /* Otherwise expand pattern as above. */ ++ " + ) + + (define_insn_and_split "*iordi3_insn" +@@ -3316,6 +3349,22 @@ + no NEON instructions that take an immediate. */ + if (TARGET_IWMMXT && !REG_P (operands[2])) + operands[2] = force_reg (DImode, operands[2]); ++ if (!TARGET_NEON && !TARGET_IWMMXT) ++ { ++ rtx low = simplify_gen_binary (XOR, SImode, ++ gen_lowpart (SImode, operands[1]), ++ gen_lowpart (SImode, operands[2])); ++ rtx high = simplify_gen_binary (XOR, SImode, ++ gen_highpart (SImode, operands[1]), ++ gen_highpart_mode (SImode, DImode, ++ operands[2])); ++ ++ emit_insn (gen_rtx_SET (gen_lowpart (SImode, operands[0]), low)); ++ emit_insn (gen_rtx_SET (gen_highpart (SImode, operands[0]), high)); ++ ++ DONE; ++ } ++ /* Otherwise expand pattern as above. */ + } + ) + +@@ -5027,7 +5076,31 @@ + "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" + "") + +-(define_insn_and_split "one_cmpldi2" ++(define_expand "one_cmpldi2" ++ [(set (match_operand:DI 0 "s_register_operand" "") ++ (not:DI (match_operand:DI 1 "s_register_operand" "")))] ++ "TARGET_32BIT" ++ " ++ if (!TARGET_NEON && !TARGET_IWMMXT) ++ { ++ rtx low = simplify_gen_unary (NOT, SImode, ++ gen_lowpart (SImode, operands[1]), ++ SImode); ++ rtx high = simplify_gen_unary (NOT, SImode, ++ gen_highpart_mode (SImode, DImode, ++ operands[1]), ++ SImode); ++ ++ emit_insn (gen_rtx_SET (gen_lowpart (SImode, operands[0]), low)); ++ emit_insn (gen_rtx_SET (gen_highpart (SImode, operands[0]), high)); ++ ++ DONE; ++ } ++ /* Otherwise expand pattern as above. */ ++ " ++) ++ ++(define_insn_and_split "*one_cmpldi2_insn" + [(set (match_operand:DI 0 "s_register_operand" "=w,&r,&r,?w") + (not:DI (match_operand:DI 1 "s_register_operand" " w, 0, r, w")))] + "TARGET_32BIT" +--- a/src/gcc/config/arm/arm_neon.h ++++ b/src/gcc/config/arm/arm_neon.h +@@ -17069,14 +17069,22 @@ __extension__ extern __inline float16x4_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vadd_f16 (float16x4_t __a, float16x4_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a + __b; ++#else + return __builtin_neon_vaddv4hf (__a, __b); ++#endif + } + + __extension__ extern __inline float16x8_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vaddq_f16 (float16x8_t __a, float16x8_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a + __b; ++#else + return __builtin_neon_vaddv8hf (__a, __b); ++#endif + } + + __extension__ extern __inline uint16x4_t +@@ -17587,7 +17595,11 @@ __extension__ extern __inline float16x4_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vmul_f16 (float16x4_t __a, float16x4_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a * __b; ++#else + return __builtin_neon_vmulfv4hf (__a, __b); ++#endif + } + + __extension__ extern __inline float16x4_t +@@ -17608,7 +17620,11 @@ __extension__ extern __inline float16x8_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vmulq_f16 (float16x8_t __a, float16x8_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a * __b; ++#else + return __builtin_neon_vmulfv8hf (__a, __b); ++#endif + } + + __extension__ extern __inline float16x8_t +@@ -17804,14 +17820,22 @@ __extension__ extern __inline float16x4_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vsub_f16 (float16x4_t __a, float16x4_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a - __b; ++#else + return __builtin_neon_vsubv4hf (__a, __b); ++#endif + } + + __extension__ extern __inline float16x8_t + __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) + vsubq_f16 (float16x8_t __a, float16x8_t __b) + { ++#ifdef __FAST_MATH__ ++ return __a - __b; ++#else + return __builtin_neon_vsubv8hf (__a, __b); ++#endif + } + + #endif /* __ARM_FEATURE_VECTOR_FP16_ARITHMETIC. */ +--- a/src/gcc/config/arm/cortex-a53.md ++++ b/src/gcc/config/arm/cortex-a53.md +@@ -211,7 +211,7 @@ + + (define_bypass 1 "cortex_a53_alu*" + "cortex_a53_alu_shift*" +- "aarch_forward_to_shift_is_not_shifted_reg") ++ "arm_no_early_alu_shift_dep") + + (define_bypass 2 "cortex_a53_alu*" + "cortex_a53_alu_*,cortex_a53_shift*") +@@ -254,6 +254,16 @@ + "cortex_a53_store*" + "arm_no_early_store_addr_dep") + ++;; Model a bypass for load to load/store address. ++ ++(define_bypass 3 "cortex_a53_load1" ++ "cortex_a53_load*" ++ "arm_early_load_addr_dep_ptr") ++ ++(define_bypass 3 "cortex_a53_load1" ++ "cortex_a53_store*" ++ "arm_early_store_addr_dep_ptr") ++ + ;; Model a GP->FP register move as similar to stores. + + (define_bypass 0 "cortex_a53_alu*,cortex_a53_shift*" +@@ -501,19 +511,19 @@ + ;; Floating-point arithmetic. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +-(define_insn_reservation "cortex_a53_fpalu" 5 ++(define_insn_reservation "cortex_a53_fpalu" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "ffariths, fadds, ffarithd, faddd, fmov, + f_cvt, fcmps, fcmpd, fccmps, fccmpd, fcsel, + f_rints, f_rintd, f_minmaxs, f_minmaxd")) + "cortex_a53_slot_any,cortex_a53_fp_alu") + +-(define_insn_reservation "cortex_a53_fconst" 3 ++(define_insn_reservation "cortex_a53_fconst" 2 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "fconsts,fconstd")) + "cortex_a53_slot_any,cortex_a53_fp_alu") + +-(define_insn_reservation "cortex_a53_fpmul" 5 ++(define_insn_reservation "cortex_a53_fpmul" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "fmuls,fmuld")) + "cortex_a53_slot_any,cortex_a53_fp_mul") +@@ -564,7 +574,7 @@ + ;; Floating-point load/store. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +-(define_insn_reservation "cortex_a53_f_load_64" 4 ++(define_insn_reservation "cortex_a53_f_load_64" 3 + (and (eq_attr "tune" "cortexa53") + (ior (eq_attr "type" "f_loads,f_loadd") + (eq_attr "cortex_a53_advsimd_type" +@@ -572,7 +582,7 @@ + "cortex_a53_slot_any+cortex_a53_ls_agen, + cortex_a53_load") + +-(define_insn_reservation "cortex_a53_f_load_many" 5 ++(define_insn_reservation "cortex_a53_f_load_many" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "cortex_a53_advsimd_type" + "advsimd_load_128,advsimd_load_lots")) +@@ -606,22 +616,22 @@ + ;; or a 128-bit operation in which case we require in our model that we + ;; issue from slot 0. + +-(define_insn_reservation "cortex_a53_advsimd_alu" 5 ++(define_insn_reservation "cortex_a53_advsimd_alu" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "cortex_a53_advsimd_type" "advsimd_alu")) + "cortex_a53_slot_any,cortex_a53_fp_alu") + +-(define_insn_reservation "cortex_a53_advsimd_alu_q" 5 ++(define_insn_reservation "cortex_a53_advsimd_alu_q" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "cortex_a53_advsimd_type" "advsimd_alu_q")) + "cortex_a53_slot0,cortex_a53_fp_alu_q") + +-(define_insn_reservation "cortex_a53_advsimd_mul" 5 ++(define_insn_reservation "cortex_a53_advsimd_mul" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "cortex_a53_advsimd_type" "advsimd_mul")) + "cortex_a53_slot_any,cortex_a53_fp_mul") + +-(define_insn_reservation "cortex_a53_advsimd_mul_q" 5 ++(define_insn_reservation "cortex_a53_advsimd_mul_q" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "cortex_a53_advsimd_type" "advsimd_mul_q")) + "cortex_a53_slot0,cortex_a53_fp_mul_q") +@@ -700,20 +710,18 @@ + ;; multiply-accumulate operations as a bypass reducing the latency + ;; of producing instructions to near zero. + +-(define_bypass 1 "cortex_a53_fp*, ++(define_bypass 1 "cortex_a53_fpalu, ++ cortex_a53_fpmul, + cortex_a53_r2f, ++ cortex_a53_r2f_cvt, ++ cortex_a53_fconst, + cortex_a53_f_load*" + "cortex_a53_fpmac" + "aarch_accumulator_forwarding") + +-;; Model a bypass from the result of an FP operation to a use. +- +-(define_bypass 4 "cortex_a53_fpalu, +- cortex_a53_fpmul" +- "cortex_a53_fpalu, +- cortex_a53_fpmul, +- cortex_a53_fpmac, +- cortex_a53_advsimd_div*") ++(define_bypass 4 "cortex_a53_fpmac" ++ "cortex_a53_fpmac" ++ "aarch_accumulator_forwarding") + + ;; We want AESE and AESMC to end up consecutive to one another. + +--- a/src/gcc/config/arm/iterators.md ++++ b/src/gcc/config/arm/iterators.md +@@ -45,6 +45,9 @@ + ;; A list of the 32bit and 64bit integer modes + (define_mode_iterator SIDI [SI DI]) + ++;; A list of atomic compare and swap success return modes ++(define_mode_iterator CCSI [(CC_Z "TARGET_32BIT") (SI "TARGET_THUMB1")]) ++ + ;; A list of modes which the VFP unit can handle + (define_mode_iterator SDF [(SF "") (DF "TARGET_VFP_DOUBLE")]) + +@@ -411,6 +414,10 @@ + ;; Mode attributes + ;;---------------------------------------------------------------------------- + ++;; Determine name of atomic compare and swap from success result mode. This ++;; distinguishes between 16-bit Thumb and 32-bit Thumb/ARM. ++(define_mode_attr arch [(CC_Z "32") (SI "t1")]) ++ + ;; Determine element size suffix from vector mode. + (define_mode_attr MMX_char [(V8QI "b") (V4HI "h") (V2SI "w") (DI "d")]) + +--- a/src/gcc/config/arm/neon.md ++++ b/src/gcc/config/arm/neon.md +@@ -505,6 +505,23 @@ + (const_string "neon_add")))] + ) + ++;; As with SFmode, full support for HFmode vector arithmetic is only available ++;; when flag-unsafe-math-optimizations is enabled. ++ ++(define_insn "add3" ++ [(set ++ (match_operand:VH 0 "s_register_operand" "=w") ++ (plus:VH ++ (match_operand:VH 1 "s_register_operand" "w") ++ (match_operand:VH 2 "s_register_operand" "w")))] ++ "TARGET_NEON_FP16INST && flag_unsafe_math_optimizations" ++ "vadd.\t%0, %1, %2" ++ [(set (attr "type") ++ (if_then_else (match_test "") ++ (const_string "neon_fp_addsub_s") ++ (const_string "neon_add")))] ++) ++ + (define_insn "add3_fp16" + [(set + (match_operand:VH 0 "s_register_operand" "=w") +@@ -557,6 +574,17 @@ + (const_string "neon_sub")))] + ) + ++(define_insn "sub3" ++ [(set ++ (match_operand:VH 0 "s_register_operand" "=w") ++ (minus:VH ++ (match_operand:VH 1 "s_register_operand" "w") ++ (match_operand:VH 2 "s_register_operand" "w")))] ++ "TARGET_NEON_FP16INST && flag_unsafe_math_optimizations" ++ "vsub.\t%0, %1, %2" ++ [(set_attr "type" "neon_sub")] ++) ++ + (define_insn "sub3_fp16" + [(set + (match_operand:VH 0 "s_register_operand" "=w") +@@ -650,7 +678,7 @@ + (match_operand:VCVTF 2 "register_operand" "w") + (match_operand:VCVTF 3 "register_operand" "0")))] + "TARGET_NEON && TARGET_FMA && flag_unsafe_math_optimizations" +- "vfma%?.\\t%0, %1, %2" ++ "vfma.\\t%0, %1, %2" + [(set_attr "type" "neon_fp_mla_s")] + ) + +@@ -660,12 +688,21 @@ + (match_operand:VCVTF 2 "register_operand" "w") + (match_operand:VCVTF 3 "register_operand" "0")))] + "TARGET_NEON && TARGET_FMA" +- "vfma%?.\\t%0, %1, %2" ++ "vfma.\\t%0, %1, %2" + [(set_attr "type" "neon_fp_mla_s")] + ) + +-;; There is limited support for unsafe-math optimizations using the NEON FP16 +-;; arithmetic instructions, so only the intrinsic is currently supported. ++(define_insn "fma4" ++ [(set (match_operand:VH 0 "register_operand" "=w") ++ (fma:VH ++ (match_operand:VH 1 "register_operand" "w") ++ (match_operand:VH 2 "register_operand" "w") ++ (match_operand:VH 3 "register_operand" "0")))] ++ "TARGET_NEON_FP16INST && flag_unsafe_math_optimizations" ++ "vfma.\\t%0, %1, %2" ++ [(set_attr "type" "neon_fp_mla_s")] ++) ++ + (define_insn "fma4_intrinsic" + [(set (match_operand:VH 0 "register_operand" "=w") + (fma:VH +@@ -683,7 +720,7 @@ + (match_operand:VCVTF 2 "register_operand" "w") + (match_operand:VCVTF 3 "register_operand" "0")))] + "TARGET_NEON && TARGET_FMA && flag_unsafe_math_optimizations" +- "vfms%?.\\t%0, %1, %2" ++ "vfms.\\t%0, %1, %2" + [(set_attr "type" "neon_fp_mla_s")] + ) + +@@ -694,7 +731,7 @@ + (match_operand:VCVTF 2 "register_operand" "w") + (match_operand:VCVTF 3 "register_operand" "0")))] + "TARGET_NEON && TARGET_FMA" +- "vfms%?.\\t%0, %1, %2" ++ "vfms.\\t%0, %1, %2" + [(set_attr "type" "neon_fp_mla_s")] + ) + +@@ -715,7 +752,7 @@ + "s_register_operand" "w")] + NEON_VRINT))] + "TARGET_NEON && TARGET_FPU_ARMV8" +- "vrint%?.f32\\t%0, %1" ++ "vrint.f32\\t%0, %1" + [(set_attr "type" "neon_fp_round_")] + ) + +@@ -2175,6 +2212,17 @@ + (const_string "neon_mul_")))] + ) + ++(define_insn "mul3" ++ [(set ++ (match_operand:VH 0 "s_register_operand" "=w") ++ (mult:VH ++ (match_operand:VH 1 "s_register_operand" "w") ++ (match_operand:VH 2 "s_register_operand" "w")))] ++ "TARGET_NEON_FP16INST && flag_unsafe_math_optimizations" ++ "vmul.f16\t%0, %1, %2" ++ [(set_attr "type" "neon_mul_")] ++) ++ + (define_insn "neon_vmulf" + [(set + (match_operand:VH 0 "s_register_operand" "=w") +--- a/src/gcc/config/arm/predicates.md ++++ b/src/gcc/config/arm/predicates.md +@@ -82,6 +82,11 @@ + || REGNO (op) >= FIRST_PSEUDO_REGISTER)); + }) + ++(define_predicate "arm_general_adddi_operand" ++ (ior (match_operand 0 "arm_general_register_operand") ++ (and (match_code "const_int") ++ (match_test "const_ok_for_dimode_op (INTVAL (op), PLUS)")))) ++ + (define_predicate "vfp_register_operand" + (match_code "reg,subreg") + { +--- a/src/gcc/config/arm/sync.md ++++ b/src/gcc/config/arm/sync.md +@@ -191,9 +191,9 @@ + + ;; Constraints of this pattern must be at least as strict as those of the + ;; cbranchsi operations in thumb1.md and aim to be as permissive. +-(define_insn_and_split "atomic_compare_and_swap_1" +- [(set (match_operand 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out +- (unspec_volatile:CC_Z [(const_int 0)] VUNSPEC_ATOMIC_CAS)) ++(define_insn_and_split "atomic_compare_and_swap_1" ++ [(set (match_operand:CCSI 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out ++ (unspec_volatile:CCSI [(const_int 0)] VUNSPEC_ATOMIC_CAS)) + (set (match_operand:SI 1 "s_register_operand" "=&r,&l,&0,&l*h") ;; val out + (zero_extend:SI + (match_operand:NARROW 2 "mem_noofs_operand" "+Ua,Ua,Ua,Ua"))) ;; memory +@@ -223,9 +223,9 @@ + + ;; Constraints of this pattern must be at least as strict as those of the + ;; cbranchsi operations in thumb1.md and aim to be as permissive. +-(define_insn_and_split "atomic_compare_and_swap_1" +- [(set (match_operand 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out +- (unspec_volatile:CC_Z [(const_int 0)] VUNSPEC_ATOMIC_CAS)) ++(define_insn_and_split "atomic_compare_and_swap_1" ++ [(set (match_operand:CCSI 0 "cc_register_operand" "=&c,&l,&l,&l") ;; bool out ++ (unspec_volatile:CCSI [(const_int 0)] VUNSPEC_ATOMIC_CAS)) + (set (match_operand:SIDI 1 "s_register_operand" "=&r,&l,&0,&l*h") ;; val out + (match_operand:SIDI 2 "mem_noofs_operand" "+Ua,Ua,Ua,Ua")) ;; memory + (set (match_dup 2) +--- a/src/gcc/config/arm/t-aprofile ++++ b/src/gcc/config/arm/t-aprofile +@@ -24,30 +24,13 @@ + # have their default values during the configure step. We enforce + # this during the top-level configury. + +-MULTILIB_OPTIONS = +-MULTILIB_DIRNAMES = +-MULTILIB_EXCEPTIONS = +-MULTILIB_MATCHES = +-MULTILIB_REUSE = ++# Arch and FPU variants to build libraries with + +-# We have the following hierachy: +-# ISA: A32 (.) or T32 (thumb) +-# Architecture: ARMv7-A (v7-a), ARMv7VE (v7ve), or ARMv8-A (v8-a). +-# FPU: VFPv3-D16 (fpv3), NEONv1 (simdv1), VFPv4-D16 (fpv4), +-# NEON-VFPV4 (simdvfpv4), NEON for ARMv8 (simdv8), or None (.). +-# Float-abi: Soft (.), softfp (softfp), or hard (hardfp). ++MULTI_ARCH_OPTS_A = march=armv7-a/march=armv7ve/march=armv8-a ++MULTI_ARCH_DIRS_A = v7-a v7ve v8-a + +-MULTILIB_OPTIONS += mthumb +-MULTILIB_DIRNAMES += thumb +- +-MULTILIB_OPTIONS += march=armv7-a/march=armv7ve/march=armv8-a +-MULTILIB_DIRNAMES += v7-a v7ve v8-a +- +-MULTILIB_OPTIONS += mfpu=vfpv3-d16/mfpu=neon/mfpu=vfpv4-d16/mfpu=neon-vfpv4/mfpu=neon-fp-armv8 +-MULTILIB_DIRNAMES += fpv3 simdv1 fpv4 simdvfpv4 simdv8 +- +-MULTILIB_OPTIONS += mfloat-abi=softfp/mfloat-abi=hard +-MULTILIB_DIRNAMES += softfp hard ++MULTI_FPU_OPTS_A = mfpu=vfpv3-d16/mfpu=neon/mfpu=vfpv4-d16/mfpu=neon-vfpv4/mfpu=neon-fp-armv8 ++MULTI_FPU_DIRS_A = fpv3 simdv1 fpv4 simdvfpv4 simdv8 + + + # Option combinations to build library with +@@ -71,7 +54,11 @@ MULTILIB_REQUIRED += *march=armv8-a + MULTILIB_REQUIRED += *march=armv8-a/mfpu=neon-fp-armv8/mfloat-abi=* + + ++# Matches ++ + # CPU Matches ++MULTILIB_MATCHES += march?armv7-a=mcpu?marvell-pj4 ++MULTILIB_MATCHES += march?armv7-a=mcpu?generic-armv7-a + MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a8 + MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a9 + MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a5 +--- /dev/null ++++ b/src/gcc/config/arm/t-multilib +@@ -0,0 +1,69 @@ ++# Copyright (C) 2016 Free Software Foundation, Inc. ++# ++# This file is part of GCC. ++# ++# GCC 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. ++# ++# GCC 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 GCC; see the file COPYING3. If not see ++# . ++ ++# This is a target makefile fragment that attempts to get ++# multilibs built for the range of CPU's, FPU's and ABI's that ++# are relevant for the ARM architecture. It should not be used in ++# conjunction with another make file fragment and assumes --with-arch, ++# --with-cpu, --with-fpu, --with-float, --with-mode have their default ++# values during the configure step. We enforce this during the ++# top-level configury. ++ ++MULTILIB_OPTIONS = ++MULTILIB_DIRNAMES = ++MULTILIB_EXCEPTIONS = ++MULTILIB_MATCHES = ++MULTILIB_REUSE = ++ ++comma := , ++tm_multilib_list := $(subst $(comma), ,$(TM_MULTILIB_CONFIG)) ++ ++HAS_APROFILE := $(filter aprofile,$(tm_multilib_list)) ++HAS_RMPROFILE := $(filter rmprofile,$(tm_multilib_list)) ++ ++ifneq (,$(HAS_APROFILE)) ++include $(srcdir)/config/arm/t-aprofile ++endif ++ifneq (,$(HAS_RMPROFILE)) ++include $(srcdir)/config/arm/t-rmprofile ++endif ++SEP := $(and $(HAS_APROFILE),$(HAS_RMPROFILE),/) ++ ++ ++# We have the following hierachy: ++# ISA: A32 (.) or T16/T32 (thumb) ++# Architecture: ARMv6-M (v6-m), ARMv7-M (v7-m), ARMv7E-M (v7e-m), ++# ARMv7 (v7-ar), ARMv7-A (v7-a), ARMv7VE (v7ve), ++# ARMv8-M Baseline (v8-m.base), ARMv8-M Mainline (v8-m.main) ++# or ARMv8-A (v8-a). ++# FPU: VFPv3-D16 (fpv3), NEONv1 (simdv1), FPV4-SP-D16 (fpv4-sp), ++# VFPv4-D16 (fpv4), NEON-VFPV4 (simdvfpv4), FPV5-SP-D16 (fpv5-sp), ++# VFPv5-D16 (fpv5), NEON for ARMv8 (simdv8), or None (.). ++# Float-abi: Soft (.), softfp (softfp), or hard (hard). ++ ++MULTILIB_OPTIONS += mthumb ++MULTILIB_DIRNAMES += thumb ++ ++MULTILIB_OPTIONS += $(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM) ++MULTILIB_DIRNAMES += $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM) ++ ++MULTILIB_OPTIONS += $(MULTI_FPU_OPTS_A)$(SEP)$(MULTI_FPU_OPTS_RM) ++MULTILIB_DIRNAMES += $(MULTI_FPU_DIRS_A) $(MULTI_FPU_DIRS_RM) ++ ++MULTILIB_OPTIONS += mfloat-abi=softfp/mfloat-abi=hard ++MULTILIB_DIRNAMES += softfp hard +--- a/src/gcc/config/arm/t-rmprofile ++++ b/src/gcc/config/arm/t-rmprofile +@@ -24,33 +24,14 @@ + # values during the configure step. We enforce this during the + # top-level configury. + +-MULTILIB_OPTIONS = +-MULTILIB_DIRNAMES = +-MULTILIB_EXCEPTIONS = +-MULTILIB_MATCHES = +-MULTILIB_REUSE = + +-# We have the following hierachy: +-# ISA: A32 (.) or T16/T32 (thumb). +-# Architecture: ARMv6S-M (v6-m), ARMv7-M (v7-m), ARMv7E-M (v7e-m), +-# ARMv8-M Baseline (v8-m.base) or ARMv8-M Mainline (v8-m.main). +-# FPU: VFPv3-D16 (fpv3), FPV4-SP-D16 (fpv4-sp), FPV5-SP-D16 (fpv5-sp), +-# VFPv5-D16 (fpv5), or None (.). +-# Float-abi: Soft (.), softfp (softfp), or hard (hardfp). ++# Arch and FPU variants to build libraries with + +-# Options to build libraries with ++MULTI_ARCH_OPTS_RM = march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main ++MULTI_ARCH_DIRS_RM = v6-m v7-m v7e-m v7-ar v8-m.base v8-m.main + +-MULTILIB_OPTIONS += mthumb +-MULTILIB_DIRNAMES += thumb +- +-MULTILIB_OPTIONS += march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main +-MULTILIB_DIRNAMES += v6-m v7-m v7e-m v7-ar v8-m.base v8-m.main +- +-MULTILIB_OPTIONS += mfpu=vfpv3-d16/mfpu=fpv4-sp-d16/mfpu=fpv5-sp-d16/mfpu=fpv5-d16 +-MULTILIB_DIRNAMES += fpv3 fpv4-sp fpv5-sp fpv5 +- +-MULTILIB_OPTIONS += mfloat-abi=softfp/mfloat-abi=hard +-MULTILIB_DIRNAMES += softfp hard ++MULTI_FPU_OPTS_RM = mfpu=vfpv3-d16/mfpu=fpv4-sp-d16/mfpu=fpv5-sp-d16/mfpu=fpv5-d16 ++MULTI_FPU_DIRS_RM = fpv3 fpv4-sp fpv5-sp fpv5 + + + # Option combinations to build library with +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -29499,6 +29499,15 @@ ix86_macro_fusion_pair_p (rtx_insn *condgen, rtx_insn *condjmp) + if (!any_condjump_p (condjmp)) + return false; + ++ unsigned int condreg1, condreg2; ++ rtx cc_reg_1; ++ ix86_fixed_condition_code_regs (&condreg1, &condreg2); ++ cc_reg_1 = gen_rtx_REG (CCmode, condreg1); ++ if (!reg_referenced_p (cc_reg_1, PATTERN (condjmp)) ++ || !condgen ++ || !modified_in_p (cc_reg_1, condgen)) ++ return false; ++ + if (get_attr_type (condgen) != TYPE_TEST + && get_attr_type (condgen) != TYPE_ICMP + && get_attr_type (condgen) != TYPE_INCDEC +--- a/src/gcc/configure ++++ b/src/gcc/configure +@@ -1717,7 +1717,8 @@ Optional Packages: + --with-stabs arrange to use stabs instead of host debug format + --with-dwarf2 force the default debug format to be DWARF 2 + --with-specs=SPECS add SPECS to driver command-line processing +- --with-pkgversion=PKG Use PKG in the version string in place of "GCC" ++ --with-pkgversion=PKG Use PKG in the version string in place of "Linaro ++ GCC `cat $srcdir/LINARO-VERSION`" + --with-bugurl=URL Direct users to URL to report a bug + --with-multilib-list select multilibs (AArch64, SH and x86-64 only) + --with-gnu-ld assume the C compiler uses GNU ld default=no +@@ -7637,7 +7638,7 @@ if test "${with_pkgversion+set}" = set; then : + *) PKGVERSION="($withval) " ;; + esac + else +- PKGVERSION="(GCC) " ++ PKGVERSION="(Linaro GCC `cat $srcdir/LINARO-VERSION`) " + + fi + +@@ -18433,7 +18434,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18436 "configure" ++#line 18437 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -18539,7 +18540,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18542 "configure" ++#line 18543 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +--- a/src/gcc/configure.ac ++++ b/src/gcc/configure.ac +@@ -929,7 +929,7 @@ AC_ARG_WITH(specs, + ) + AC_SUBST(CONFIGURE_SPECS) + +-ACX_PKGVERSION([GCC]) ++ACX_PKGVERSION([Linaro GCC `cat $srcdir/LINARO-VERSION`]) + ACX_BUGURL([https://gcc.gnu.org/bugs/]) + + # Sanity check enable_languages in case someone does not run the toplevel +--- a/src/gcc/cppbuiltin.c ++++ b/src/gcc/cppbuiltin.c +@@ -53,18 +53,41 @@ parse_basever (int *major, int *minor, int *patchlevel) + *patchlevel = s_patchlevel; + } + ++/* Parse a LINAROVER version string of the format "M.m-year.month[-spin][~dev]" ++ to create Linaro release number YYYYMM and spin version. */ ++static void ++parse_linarover (int *release, int *spin) ++{ ++ static int s_year = -1, s_month, s_spin; ++ ++ if (s_year == -1) ++ if (sscanf (LINAROVER, "%*[^-]-%d.%d-%d", &s_year, &s_month, &s_spin) != 3) ++ { ++ sscanf (LINAROVER, "%*[^-]-%d.%d", &s_year, &s_month); ++ s_spin = 0; ++ } ++ ++ if (release) ++ *release = s_year * 100 + s_month; ++ ++ if (spin) ++ *spin = s_spin; ++} + + /* Define __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ and __VERSION__. */ + static void + define__GNUC__ (cpp_reader *pfile) + { +- int major, minor, patchlevel; ++ int major, minor, patchlevel, linaro_release, linaro_spin; + + parse_basever (&major, &minor, &patchlevel); ++ parse_linarover (&linaro_release, &linaro_spin); + cpp_define_formatted (pfile, "__GNUC__=%d", major); + cpp_define_formatted (pfile, "__GNUC_MINOR__=%d", minor); + cpp_define_formatted (pfile, "__GNUC_PATCHLEVEL__=%d", patchlevel); + cpp_define_formatted (pfile, "__VERSION__=\"%s\"", version_string); ++ cpp_define_formatted (pfile, "__LINARO_RELEASE__=%d", linaro_release); ++ cpp_define_formatted (pfile, "__LINARO_SPIN__=%d", linaro_spin); + cpp_define_formatted (pfile, "__ATOMIC_RELAXED=%d", MEMMODEL_RELAXED); + cpp_define_formatted (pfile, "__ATOMIC_SEQ_CST=%d", MEMMODEL_SEQ_CST); + cpp_define_formatted (pfile, "__ATOMIC_ACQUIRE=%d", MEMMODEL_ACQUIRE); +--- a/src/gcc/dbgcnt.def ++++ b/src/gcc/dbgcnt.def +@@ -174,6 +174,7 @@ DEBUG_COUNTER (merged_ipa_icf) + DEBUG_COUNTER (postreload_cse) + DEBUG_COUNTER (pre) + DEBUG_COUNTER (pre_insn) ++DEBUG_COUNTER (prefetch) + DEBUG_COUNTER (registered_jump_thread) + DEBUG_COUNTER (sched2_func) + DEBUG_COUNTER (sched_block) +--- a/src/gcc/emit-rtl.h ++++ b/src/gcc/emit-rtl.h +@@ -267,7 +267,7 @@ struct GTY(()) rtl_data { + + /* Nonzero if function being compiled doesn't contain any calls + (ignoring the prologue and epilogue). This is set prior to +- local register allocation and is valid for the remaining ++ register allocation in IRA and is valid for the remaining + compiler passes. */ + bool is_leaf; + +--- a/src/gcc/expr.c ++++ b/src/gcc/expr.c +@@ -8838,6 +8838,15 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode, + end_sequence (); + unsigned uns_cost = seq_cost (uns_insns, speed_p); + unsigned sgn_cost = seq_cost (sgn_insns, speed_p); ++ ++ /* If costs are the same then use as tie breaker the other ++ other factor. */ ++ if (uns_cost == sgn_cost) ++ { ++ uns_cost = seq_cost (uns_insns, !speed_p); ++ sgn_cost = seq_cost (sgn_insns, !speed_p); ++ } ++ + if (uns_cost < sgn_cost || (uns_cost == sgn_cost && unsignedp)) + { + emit_insn (uns_insns); +@@ -9757,7 +9766,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, + if (targetm.gen_ccmp_first) + { + gcc_checking_assert (targetm.gen_ccmp_next != NULL); +- r = expand_ccmp_expr (g); ++ r = expand_ccmp_expr (g, mode); + if (r) + break; + } +--- a/src/gcc/generic-match-head.c ++++ b/src/gcc/generic-match-head.c +@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see + #include "dumpfile.h" + #include "case-cfn-macros.h" + #include "gimplify.h" ++#include "optabs-tree.h" + + + /* Routine to determine if the types T1 and T2 are effectively +--- a/src/gcc/gimple-fold.c ++++ b/src/gcc/gimple-fold.c +@@ -3252,6 +3252,28 @@ gimple_fold_builtin_acc_on_device (gimple_stmt_iterator *gsi, tree arg0) + return true; + } + ++/* Fold realloc (0, n) -> malloc (n). */ ++ ++static bool ++gimple_fold_builtin_realloc (gimple_stmt_iterator *gsi) ++{ ++ gimple *stmt = gsi_stmt (*gsi); ++ tree arg = gimple_call_arg (stmt, 0); ++ tree size = gimple_call_arg (stmt, 1); ++ ++ if (operand_equal_p (arg, null_pointer_node, 0)) ++ { ++ tree fn_malloc = builtin_decl_implicit (BUILT_IN_MALLOC); ++ if (fn_malloc) ++ { ++ gcall *repl = gimple_build_call (fn_malloc, 1, size); ++ replace_call_with_call_and_fold (gsi, repl); ++ return true; ++ } ++ } ++ return false; ++} ++ + /* Fold the non-target builtin at *GSI and return whether any simplification + was made. */ + +@@ -3410,6 +3432,9 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) + case BUILT_IN_ACC_ON_DEVICE: + return gimple_fold_builtin_acc_on_device (gsi, + gimple_call_arg (stmt, 0)); ++ case BUILT_IN_REALLOC: ++ return gimple_fold_builtin_realloc (gsi); ++ + default:; + } + +--- a/src/gcc/gimple-match-head.c ++++ b/src/gcc/gimple-match-head.c +@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see + #include "internal-fn.h" + #include "case-cfn-macros.h" + #include "gimplify.h" ++#include "optabs-tree.h" + + + /* Forward declarations of the private auto-generated matchers. +--- a/src/gcc/lra-constraints.c ++++ b/src/gcc/lra-constraints.c +@@ -5394,6 +5394,29 @@ choose_split_class (enum reg_class allocno_class, + #endif + } + ++/* Copy any equivalence information from ORIGINAL_REGNO to NEW_REGNO. ++ It only makes sense to call this function if NEW_REGNO is always ++ equal to ORIGINAL_REGNO. */ ++ ++static void ++lra_copy_reg_equiv (unsigned int new_regno, unsigned int original_regno) ++{ ++ if (!ira_reg_equiv[original_regno].defined_p) ++ return; ++ ++ ira_expand_reg_equiv (); ++ ira_reg_equiv[new_regno].defined_p = true; ++ if (ira_reg_equiv[original_regno].memory) ++ ira_reg_equiv[new_regno].memory ++ = copy_rtx (ira_reg_equiv[original_regno].memory); ++ if (ira_reg_equiv[original_regno].constant) ++ ira_reg_equiv[new_regno].constant ++ = copy_rtx (ira_reg_equiv[original_regno].constant); ++ if (ira_reg_equiv[original_regno].invariant) ++ ira_reg_equiv[new_regno].invariant ++ = copy_rtx (ira_reg_equiv[original_regno].invariant); ++} ++ + /* Do split transformations for insn INSN, which defines or uses + ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which instruction in + the EBB next uses ORIGINAL_REGNO; it has the same form as the +@@ -5515,6 +5538,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, + new_reg = lra_create_new_reg (mode, original_reg, rclass, "split"); + reg_renumber[REGNO (new_reg)] = hard_regno; + } ++ int new_regno = REGNO (new_reg); + save = emit_spill_move (true, new_reg, original_reg); + if (NEXT_INSN (save) != NULL_RTX && !call_save_p) + { +@@ -5523,7 +5547,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, + fprintf + (lra_dump_file, + " Rejecting split %d->%d resulting in > 2 save insns:\n", +- original_regno, REGNO (new_reg)); ++ original_regno, new_regno); + dump_rtl_slim (lra_dump_file, save, NULL, -1, 0); + fprintf (lra_dump_file, + " ))))))))))))))))))))))))))))))))))))))))))))))))\n"); +@@ -5538,18 +5562,24 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, + fprintf (lra_dump_file, + " Rejecting split %d->%d " + "resulting in > 2 restore insns:\n", +- original_regno, REGNO (new_reg)); ++ original_regno, new_regno); + dump_rtl_slim (lra_dump_file, restore, NULL, -1, 0); + fprintf (lra_dump_file, + " ))))))))))))))))))))))))))))))))))))))))))))))))\n"); + } + return false; + } ++ /* Transfer equivalence information to the spill register, so that ++ if we fail to allocate the spill register, we have the option of ++ rematerializing the original value instead of spilling to the stack. */ ++ if (!HARD_REGISTER_NUM_P (original_regno) ++ && mode == PSEUDO_REGNO_MODE (original_regno)) ++ lra_copy_reg_equiv (new_regno, original_regno); + after_p = usage_insns[original_regno].after_p; +- lra_reg_info[REGNO (new_reg)].restore_rtx = regno_reg_rtx[original_regno]; +- bitmap_set_bit (&check_only_regs, REGNO (new_reg)); ++ lra_reg_info[new_regno].restore_rtx = regno_reg_rtx[original_regno]; ++ bitmap_set_bit (&check_only_regs, new_regno); + bitmap_set_bit (&check_only_regs, original_regno); +- bitmap_set_bit (&lra_split_regs, REGNO (new_reg)); ++ bitmap_set_bit (&lra_split_regs, new_regno); + for (;;) + { + if (GET_CODE (next_usage_insns) != INSN_LIST) +@@ -5565,7 +5595,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, + if (lra_dump_file != NULL) + { + fprintf (lra_dump_file, " Split reuse change %d->%d:\n", +- original_regno, REGNO (new_reg)); ++ original_regno, new_regno); + dump_insn_slim (lra_dump_file, as_a (usage_insn)); + } + } +--- a/src/gcc/lra-eliminations.c ++++ b/src/gcc/lra-eliminations.c +@@ -1196,6 +1196,8 @@ update_reg_eliminate (bitmap insns_with_changed_offsets) + struct lra_elim_table *ep, *ep1; + HARD_REG_SET temp_hard_reg_set; + ++ targetm.compute_frame_layout (); ++ + /* Clear self elimination offsets. */ + for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) + self_elim_offsets[ep->from] = 0; +--- a/src/gcc/lto/lto-partition.c ++++ b/src/gcc/lto/lto-partition.c +@@ -132,7 +132,7 @@ add_symbol_to_partition_1 (ltrans_partition part, symtab_node *node) + + /* Be sure that we never try to duplicate partitioned symbol + or add external symbol. */ +- gcc_assert (c != SYMBOL_EXTERNAL ++ gcc_assert ((c != SYMBOL_EXTERNAL || node->alias) + && (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node))); + + part->symbols++; +--- a/src/gcc/lto/lto-symtab.c ++++ b/src/gcc/lto/lto-symtab.c +@@ -953,6 +953,42 @@ lto_symtab_merge_symbols (void) + if (tgt) + node->resolve_alias (tgt, true); + } ++ /* If the symbol was preempted outside IR, see if we want to get rid ++ of the definition. */ ++ if (node->analyzed ++ && !DECL_EXTERNAL (node->decl) ++ && (node->resolution == LDPR_PREEMPTED_REG ++ || node->resolution == LDPR_RESOLVED_IR ++ || node->resolution == LDPR_RESOLVED_EXEC ++ || node->resolution == LDPR_RESOLVED_DYN)) ++ { ++ DECL_EXTERNAL (node->decl) = 1; ++ /* If alias to local symbol was preempted by external definition, ++ we know it is not pointing to the local symbol. Remove it. */ ++ if (node->alias ++ && !node->weakref ++ && !node->transparent_alias ++ && node->get_alias_target ()->binds_to_current_def_p ()) ++ { ++ node->alias = false; ++ node->remove_all_references (); ++ node->definition = false; ++ node->analyzed = false; ++ node->cpp_implicit_alias = false; ++ } ++ else if (!node->alias ++ && node->definition ++ && node->get_availability () <= AVAIL_INTERPOSABLE) ++ { ++ if ((cnode = dyn_cast (node)) != NULL) ++ cnode->reset (); ++ else ++ { ++ node->analyzed = node->definition = false; ++ node->remove_all_references (); ++ } ++ } ++ } + + if (!(cnode = dyn_cast (node)) + || !cnode->clone_of +--- a/src/gcc/match.pd ++++ b/src/gcc/match.pd +@@ -147,6 +147,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) + (op @0 integer_onep) + (non_lvalue @0))) + ++/* (A / (1 << B)) -> (A >> B). ++ Only for unsigned A. For signed A, this would not preserve rounding ++ toward zero. ++ For example: (-1 / ( 1 << B)) != -1 >> B. */ ++(simplify ++ (trunc_div @0 (lshift integer_onep@1 @2)) ++ (if ((TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (@0)) ++ && (!VECTOR_TYPE_P (type) ++ || target_supports_op_p (type, RSHIFT_EXPR, optab_vector) ++ || target_supports_op_p (type, RSHIFT_EXPR, optab_scalar))) ++ (rshift @0 @2))) ++ + /* Preserve explicit divisions by 0: the C++ front-end wants to detect + undefined behavior in constexpr evaluation, and assuming that the division + traps enables better optimizations than these anyway. */ +--- a/src/gcc/optabs-tree.c ++++ b/src/gcc/optabs-tree.c +@@ -376,3 +376,18 @@ init_tree_optimization_optabs (tree optnode) + ggc_free (tmp_optabs); + } + } ++ ++/* Return TRUE if the target has support for vector right shift of an ++ operand of type TYPE. If OT_TYPE is OPTAB_DEFAULT, check for existence ++ of a shift by either a scalar or a vector. Otherwise, check only ++ for a shift that matches OT_TYPE. */ ++ ++bool ++target_supports_op_p (tree type, enum tree_code code, ++ enum optab_subtype ot_subtype) ++{ ++ optab ot = optab_for_tree_code (code, type, ot_subtype); ++ return (ot != unknown_optab ++ && optab_handler (ot, TYPE_MODE (type)) != CODE_FOR_nothing); ++} ++ +--- a/src/gcc/optabs-tree.h ++++ b/src/gcc/optabs-tree.h +@@ -41,5 +41,7 @@ bool supportable_convert_operation (enum tree_code, tree, tree, tree *, + bool expand_vec_cmp_expr_p (tree, tree, enum tree_code); + bool expand_vec_cond_expr_p (tree, tree, enum tree_code); + void init_tree_optimization_optabs (tree); ++bool target_supports_op_p (tree, enum tree_code, ++ enum optab_subtype = optab_default); + + #endif +--- a/src/gcc/reload1.c ++++ b/src/gcc/reload1.c +@@ -3821,6 +3821,7 @@ verify_initial_elim_offsets (void) + if (!num_eliminable) + return true; + ++ targetm.compute_frame_layout (); + for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) + { + INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, t); +@@ -3838,6 +3839,7 @@ set_initial_elim_offsets (void) + { + struct elim_table *ep = reg_eliminate; + ++ targetm.compute_frame_layout (); + for (; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) + { + INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->initial_offset); +--- a/src/gcc/sched-deps.c ++++ b/src/gcc/sched-deps.c +@@ -2834,34 +2834,30 @@ static void + sched_macro_fuse_insns (rtx_insn *insn) + { + rtx_insn *prev; +- ++ prev = prev_nonnote_nondebug_insn (insn); ++ if (!prev) ++ return; ++ + if (any_condjump_p (insn)) + { + unsigned int condreg1, condreg2; + rtx cc_reg_1; + targetm.fixed_condition_code_regs (&condreg1, &condreg2); + cc_reg_1 = gen_rtx_REG (CCmode, condreg1); +- prev = prev_nonnote_nondebug_insn (insn); +- if (!reg_referenced_p (cc_reg_1, PATTERN (insn)) +- || !prev +- || !modified_in_p (cc_reg_1, prev)) +- return; ++ if (reg_referenced_p (cc_reg_1, PATTERN (insn)) ++ && modified_in_p (cc_reg_1, prev)) ++ { ++ if (targetm.sched.macro_fusion_pair_p (prev, insn)) ++ SCHED_GROUP_P (insn) = 1; ++ return; ++ } + } +- else +- { +- rtx insn_set = single_set (insn); +- +- prev = prev_nonnote_nondebug_insn (insn); +- if (!prev +- || !insn_set +- || !single_set (prev)) +- return; + ++ if (single_set (insn) && single_set (prev)) ++ { ++ if (targetm.sched.macro_fusion_pair_p (prev, insn)) ++ SCHED_GROUP_P (insn) = 1; + } +- +- if (targetm.sched.macro_fusion_pair_p (prev, insn)) +- SCHED_GROUP_P (insn) = 1; +- + } + + /* Get the implicit reg pending clobbers for INSN and save them in TEMP. */ +--- a/src/gcc/simplify-rtx.c ++++ b/src/gcc/simplify-rtx.c +@@ -3345,19 +3345,21 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, + && UINTVAL (trueop0) == GET_MODE_MASK (mode) + && ! side_effects_p (op1)) + return op0; ++ ++ canonicalize_shift: + /* Given: + scalar modes M1, M2 + scalar constants c1, c2 + size (M2) > size (M1) + c1 == size (M2) - size (M1) + optimize: +- (ashiftrt:M1 (subreg:M1 (lshiftrt:M2 (reg:M2) (const_int )) ++ ([a|l]shiftrt:M1 (subreg:M1 (lshiftrt:M2 (reg:M2) (const_int )) + ) + (const_int )) + to: +- (subreg:M1 (ashiftrt:M2 (reg:M2) (const_int )) ++ (subreg:M1 ([a|l]shiftrt:M2 (reg:M2) (const_int )) + ). */ +- if (code == ASHIFTRT ++ if ((code == ASHIFTRT || code == LSHIFTRT) + && !VECTOR_MODE_P (mode) + && SUBREG_P (op0) + && CONST_INT_P (op1) +@@ -3374,13 +3376,13 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, + rtx tmp = GEN_INT (INTVAL (XEXP (SUBREG_REG (op0), 1)) + + INTVAL (op1)); + machine_mode inner_mode = GET_MODE (SUBREG_REG (op0)); +- tmp = simplify_gen_binary (ASHIFTRT, ++ tmp = simplify_gen_binary (code, + GET_MODE (SUBREG_REG (op0)), + XEXP (SUBREG_REG (op0), 0), + tmp); + return lowpart_subreg (mode, tmp, inner_mode); + } +- canonicalize_shift: ++ + if (SHIFT_COUNT_TRUNCATED && CONST_INT_P (op1)) + { + val = INTVAL (op1) & (GET_MODE_PRECISION (mode) - 1); +--- a/src/gcc/target.def ++++ b/src/gcc/target.def +@@ -5395,6 +5395,18 @@ five otherwise. This is best for most machines.", + unsigned int, (void), + default_case_values_threshold) + ++/* Optional callback to advise the target to compute the frame layout. */ ++DEFHOOK ++(compute_frame_layout, ++ "This target hook is called once each time the frame layout needs to be\n\ ++recalculated. The calculations can be cached by the target and can then\n\ ++be used by @code{INITIAL_ELIMINATION_OFFSET} instead of re-computing the\n\ ++layout on every invocation of that hook. This is particularly useful\n\ ++for targets that have an expensive frame layout function. Implementing\n\ ++this callback is optional.", ++ void, (void), ++ hook_void_void) ++ + /* Return true if a function must have and use a frame pointer. */ + DEFHOOK + (frame_pointer_required, +--- a/src/gcc/testsuite/g++.dg/other/i386-9.C ++++ b/src/gcc/testsuite/g++.dg/other/i386-9.C +@@ -2,6 +2,7 @@ + // Testcase by Zdenek Sojka + + // { dg-do run { target i?86-*-* x86_64-*-* } } ++/* { dg-require-stack-check "" } */ + // { dg-options "-Os -mpreferred-stack-boundary=5 -fstack-check -fno-omit-frame-pointer" } + + int main() +--- /dev/null ++++ b/src/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c +@@ -0,0 +1,4 @@ ++/* { dg-require-effective-target untyped_assembly } */ ++/* { dg-require-stack-check "" } */ ++/* { dg-additional-options "-fstack-check" } */ ++#include "20031023-1.c" +--- a/src/gcc/testsuite/gcc.c-torture/execute/pr78622.c ++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr78622.c +@@ -1,6 +1,7 @@ + /* PR middle-end/78622 - [7 Regression] -Wformat-overflow/-fprintf-return-value + incorrect with overflow/wrapping + { dg-skip-if "Requires %hhd format" { hppa*-*-hpux* } { "*" } { "" } } ++ { dg-require-effective-target c99_runtime } + { dg-additional-options "-Wformat-overflow=2" } */ + + __attribute__((noinline, noclone)) int +--- a/src/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c ++++ b/src/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c +@@ -1,3 +1,4 @@ ++/* { dg-require-stack-check "generic" } */ + /* { dg-options "-O -fstack-check=generic -ftree-pre -fgraphite-identity" } */ + /* nvptx doesn't expose a stack. */ + /* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.dg/lsr-div1.c +@@ -0,0 +1,57 @@ ++/* Test division by const int generates only one shift. */ ++/* { dg-do run } */ ++/* { dg-options "-O2 -fdump-rtl-combine-all" } */ ++/* { dg-options "-O2 -fdump-rtl-combine-all -mtune=cortex-a53" { target aarch64*-*-* } } */ ++/* { dg-require-effective-target int32plus } */ ++ ++extern void abort (void); ++ ++#define NOINLINE __attribute__((noinline)) ++ ++static NOINLINE int ++f1 (unsigned int n) ++{ ++ return n % 0x33; ++} ++ ++static NOINLINE int ++f2 (unsigned int n) ++{ ++ return n % 0x12; ++} ++ ++int ++main () ++{ ++ int a = 0xaaaaaaaa; ++ int b = 0x55555555; ++ int c; ++ c = f1 (a); ++ if (c != 0x11) ++ abort (); ++ c = f1 (b); ++ if (c != 0x22) ++ abort (); ++ c = f2 (a); ++ if (c != 0xE) ++ abort (); ++ c = f2 (b); ++ if (c != 0x7) ++ abort (); ++ return 0; ++} ++ ++/* Following replacement pattern of intger division by constant, GCC is expected ++ to generate UMULL and (x)SHIFTRT. This test checks that considering division ++ by const 0x33, gcc generates a single LSHIFTRT by 37, instead of ++ two - LSHIFTRT by 32 and LSHIFTRT by 5. */ ++ ++/* { dg-final { scan-rtl-dump "\\(set \\(subreg:DI \\(reg:SI" "combine" { target aarch64*-*-* } } } */ ++/* { dg-final { scan-rtl-dump "\\(lshiftrt:DI \\(reg:DI" "combine" { target aarch64*-*-* } } } */ ++/* { dg-final { scan-rtl-dump "\\(const_int 37 " "combine" { target aarch64*-*-* } } } */ ++ ++/* Similarly, considering division by const 0x12, gcc generates a ++ single LSHIFTRT by 34, instead of two - LSHIFTRT by 32 and LSHIFTRT by 2. */ ++ ++/* { dg-final { scan-rtl-dump "\\(const_int 34 " "combine" { target aarch64*-*-* } } } */ ++ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.dg/lto/pr69866_0.c +@@ -0,0 +1,13 @@ ++/* { dg-lto-do link } */ ++ ++int _umh(int i) ++{ ++ return i+1; ++} ++ ++int weaks(int i) __attribute__((weak, alias("_umh"))); ++ ++int main() ++{ ++ return weaks(10); ++} +--- /dev/null ++++ b/src/gcc/testsuite/gcc.dg/lto/pr69866_1.c +@@ -0,0 +1,6 @@ ++/* { dg-options { -fno-lto } } */ ++ ++int weaks(int i) ++{ ++ return i+1; ++} +--- a/src/gcc/testsuite/gcc.dg/pr47443.c ++++ b/src/gcc/testsuite/gcc.dg/pr47443.c +@@ -1,5 +1,6 @@ + /* PR tree-optimization/47443 */ + /* { dg-do compile } */ ++/* { dg-require-stack-check "generic" } */ + /* { dg-options "-O -fstack-check=generic" } */ + + static inline int bar (char *c, int i) +--- a/src/gcc/testsuite/gcc.dg/pr48134.c ++++ b/src/gcc/testsuite/gcc.dg/pr48134.c +@@ -1,4 +1,5 @@ + /* { dg-do compile } */ ++/* { dg-require-stack-check "specific" } */ + /* { dg-options "-O2 -fstack-check=specific -fno-tree-dse -fno-tree-fre -fno-tree-loop-optimize -g" } */ + + struct S +--- a/src/gcc/testsuite/gcc.dg/pr70017.c ++++ b/src/gcc/testsuite/gcc.dg/pr70017.c +@@ -1,4 +1,5 @@ + /* { dg-do compile } */ ++/* { dg-require-stack-check "generic" } */ + /* { dg-options "-fstack-check=generic" } */ + + /* Check that the expected warning is issued for large frames. */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/forwprop-37.c +@@ -0,0 +1,25 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O -fdump-tree-forwprop1-raw" } */ ++ ++unsigned int ++f1 (unsigned int a, unsigned int b) ++{ ++ unsigned int x = 1U << b; ++ return a / x; ++} ++ ++unsigned long ++f2 (unsigned long a, int b) ++{ ++ unsigned long x = 1UL << b; ++ return a / x; ++} ++ ++unsigned long long ++f3 (unsigned long long a, int b) ++{ ++ unsigned long long x = 1ULL << b; ++ return a / x; ++} ++ ++/* { dg-final { scan-tree-dump-not "trunc_div_expr" "forwprop1" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr79697.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-tree-gimple -fdump-tree-cddce-details -fdump-tree-optimized" } */ ++ ++void f(void) ++{ ++ __builtin_strdup ("abc"); ++} ++ ++void g(void) ++{ ++ __builtin_strndup ("abc", 3); ++} ++ ++void h(void) ++{ ++ __builtin_realloc (0, 10); ++} ++ ++/* { dg-final { scan-tree-dump "Deleting : __builtin_strdup" "cddce1" } } */ ++/* { dg-final { scan-tree-dump "Deleting : __builtin_strndup" "cddce1" } } */ ++/* { dg-final { scan-tree-dump "__builtin_malloc" "gimple" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int ++foo (int *a) ++{ ++ int x = 3; ++ return __atomic_compare_exchange_n (a, &x, 0, 1, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); ++} ++ ++/* { dg-final { scan-assembler "stxr\\tw\[0-9\]+, wzr,.*" } } */ ++/* { dg-final { scan-assembler-not "mov\\tw\[0-9\]+, 0" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int ++foo (int *a) ++{ ++ int x = 0; ++ return __atomic_compare_exchange_n (a, &x, 4, 0, ++ __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); ++} ++ ++/* { dg-final { scan-assembler-times "cbnz\\tw\[0-9\]+" 2 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/ccmp_2.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int g(void); ++int h(int a, _Bool c) ++{ ++ if (a != 0 && c) ++ return g(); ++ return 1; ++} ++ ++/* { dg-final { scan-assembler "\tccmp\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/cmp_shifted_reg_1.c +@@ -0,0 +1,11 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 " } */ ++ ++int f3 (int x, int y) ++{ ++ int res = x << 3; ++ return res != 0; ++} ++ ++/* We should combine the shift and compare */ ++/* { dg-final { scan-assembler "cmp\.*\twzr, w\[0-9\]+, lsl 3" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c +@@ -0,0 +1,53 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3 -mno-pc-relative-literal-loads" } */ ++/* { dg-skip-if "Tiny model won't generate adrp" { *-*-* } { "-mcmodel=tiny" } { "" } } */ ++ ++double d0(void) ++{ ++ double x = 0.0d; ++ return x; ++} ++ ++double dn1(void) ++{ ++ double x = -0.0d; ++ return x; ++} ++ ++ ++double d1(void) ++{ ++ double x = 1.5d; ++ return x; ++} ++ ++double d2(void) ++{ ++ double x = 123256.0d; ++ return x; ++} ++ ++double d3(void) ++{ ++ double x = 123256123456.0d; ++ return x; ++} ++ ++double d4(void) ++{ ++ double x = 123456123456123456.0d; ++ return x; ++} ++ ++/* { dg-final { scan-assembler-times "movi\td\[0-9\]+, #?0" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "adrp\tx\[0-9\]+, \.LC\[0-9\]" 2 } } */ ++/* { dg-final { scan-assembler-times "ldr\td\[0-9\]+, \\\[x\[0-9\], #:lo12:\.LC\[0-9\]\\\]" 2 } } */ ++ ++/* { dg-final { scan-assembler-times "fmov\td\[0-9\]+, 1\\\.5e\\\+0" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, 25838523252736" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x40fe, lsl 48" 1 } } */ ++/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -9223372036854775808" 1 } } */ ++/* { dg-final { scan-assembler-times "fmov\td\[0-9\]+, x\[0-9\]+" 2 } } */ ++ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c +@@ -0,0 +1,49 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */ ++/* { dg-add-options arm_v8_2a_fp16_scalar } */ ++ ++extern __fp16 foo (); ++extern void bar (__fp16* x); ++ ++void f1 () ++{ ++ volatile __fp16 a = 17.0; ++} ++ ++ ++void f2 (__fp16 *a) ++{ ++ *a = 17.0; ++} ++ ++void f3 () ++{ ++ __fp16 b = foo (); ++ b = 17.0; ++ bar (&b); ++} ++ ++__fp16 f4 () ++{ ++ __fp16 a = 0; ++ __fp16 b = 1; ++ __fp16 c = 2; ++ __fp16 d = 4; ++ ++ __fp16 z = a + b; ++ z = z + c; ++ z = z - d; ++ return z; ++} ++ ++__fp16 f5 () ++{ ++ __fp16 a = 16; ++ bar (&a); ++ return a; ++} ++ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, #?19520" 3 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0xbc, lsl 8" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x4c, lsl 8" 1 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c +@@ -0,0 +1,45 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */ ++/* { dg-add-options arm_v8_2a_fp16_scalar } */ ++ ++#include ++ ++float16_t f0(void) ++{ ++ float16_t x = 0.0f; ++ return x; ++} ++ ++float16_t fn1(void) ++{ ++ float16_t x = -0.0f; ++ return x; ++} ++ ++float16_t f1(void) ++{ ++ float16_t x = 256.0f; ++ return x; ++} ++ ++float16_t f2(void) ++{ ++ float16_t x = 123256.0f; ++ return x; ++} ++ ++float16_t f3(void) ++{ ++ float16_t x = 17.0; ++ return x; ++} ++ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.4h, ?#0" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 8" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x5c, lsl 8" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x7c, lsl 8" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 19520" 1 } } */ ++/* { dg-final { scan-assembler-times "fmov\th\[0-9\], w\[0-9\]+" 1 } } */ ++ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c +@@ -0,0 +1,52 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++ ++float f0(void) ++{ ++ float x = 0.0f; ++ return x; ++} ++ ++float fn1(void) ++{ ++ float x = -0.0f; ++ return x; ++} ++ ++float f1(void) ++{ ++ float x = 256.0f; ++ return x; ++} ++ ++float f2(void) ++{ ++ float x = 123256.0f; ++ return x; ++} ++ ++float f3(void) ++{ ++ float x = 2.0f; ++ return x; ++} ++ ++float f4(void) ++{ ++ float x = -20000.1; ++ return x; ++} ++ ++ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, ?#0" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ ++/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 48128" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0x47f0, lsl 16" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "fmov\ts\[0-9\]+, 2\\\.0e\\\+0" 1 } } */ ++ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 16435" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0xc69c, lsl 16" 1 } } */ ++ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/hfmode_ins_1.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++/* Check that we can perform this in a single INS without doing any DUPs. */ ++ ++#include ++ ++float16x8_t ++foo (float16x8_t a, float16x8_t b) ++{ ++ return vsetq_lane_f16 (vgetq_lane_f16 (b, 2), a, 3); ++} ++ ++float16x4_t ++bar (float16x4_t a, float16x4_t b) ++{ ++ return vset_lane_f16 (vget_lane_f16 (b, 2), a, 3); ++} ++ ++/* { dg-final { scan-assembler-times "ins\\t" 2 } } */ ++/* { dg-final { scan-assembler-not "dup\\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/inline-lrint_1.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target lp64 } */ ++/* { dg-options "-O3 -fno-math-errno" } */ ++ ++#include "lrint-matherr.h" ++ ++TEST (dld, double, long, ) ++TEST (flf, float , long, ) ++ ++TEST (did, double, int, ) ++TEST (fif, float , int, ) ++ ++TEST (dlld, double, long long, l) ++TEST (fllf, float , long long, l) ++ ++/* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-not "bl" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/inline-lrint_2.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target ilp32 } */ ++/* { dg-options "-O3 -fno-math-errno" } */ ++ ++#include "lrint-matherr.h" ++ ++TEST (dld, double, long, ) ++TEST (flf, float , long, ) ++ ++TEST (did, double, int, ) ++TEST (fif, float , int, ) ++ ++TEST (dlld, double, long long, l) ++TEST (fllf, float , long long, l) ++ ++/* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-times "fcvtzs\t\[w,x\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-not "bl" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c +@@ -0,0 +1,59 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target lp64 } */ ++/* { dg-options "-O3" } */ ++ ++long long f1(void) ++{ ++ return 0xffff6666; ++} ++ ++int f3(void) ++{ ++ return 0xffff6666; ++} ++ ++ ++long f2(void) ++{ ++ return 0x11110000ffff6666; ++} ++ ++long f4(void) ++{ ++ return 0x11110001ffff6666; ++} ++ ++long f5(void) ++{ ++ return 0x111100001ff6666; ++} ++ ++long f6(void) ++{ ++ return 0x00001111ffff6666; ++} ++ ++long f7(void) ++{ ++ return 0x000011116666ffff; ++} ++ ++long f8(void) ++{ ++ return 0x0f0011116666ffff; ++} ++ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, -39322" 1 } } */ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 4294927974" 3 } } */ ++/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 1718026239" 1 } } */ ++/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -2576941057" 1 } } */ ++/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -39322" 1 } } */ ++/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, 26214" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0xf00, lsl 48" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1111, lsl 48" 2 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1000, lsl 32" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1111, lsl 32" 3 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x111, lsl 48" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1ff, lsl 16" 1 } } */ ++/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1, lsl 32" 1 } } */ ++ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/lrint-matherr.h +@@ -0,0 +1,5 @@ ++#define TEST(name, float_type, int_type, pref) void f_##name (float_type x) \ ++{ \ ++ volatile float_type a = __builtin_rint (x); \ ++ volatile int_type b = __builtin_l##pref##rint (x); \ ++} +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c +@@ -0,0 +1,19 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target lp64 } */ ++/* { dg-options "-O3" } */ ++ ++#include "lrint-matherr.h" ++ ++TEST (dld, double, long, ) ++TEST (flf, float , long, ) ++ ++TEST (did, double, int, ) ++TEST (fif, float , int, ) ++ ++TEST (dlld, double, long long, l) ++TEST (fllf, float , long long, l) ++ ++/* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-times "bl\tlrint" 4 } } */ ++/* { dg-final { scan-assembler-times "bl\tllrint" 2 } } */ ++/* { dg-final { scan-assembler-not "fcvtzs" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_2.c +@@ -0,0 +1,19 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target ilp32 } */ ++/* { dg-options "-O3" } */ ++ ++#include "lrint-matherr.h" ++ ++TEST (dld, double, long, ) ++TEST (flf, float , long, ) ++ ++TEST (did, double, int, ) ++TEST (fif, float , int, ) ++ ++TEST (dlld, double, long long, l) ++TEST (fllf, float , long long, l) ++ ++/* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ ++/* { dg-final { scan-assembler-times "bl\tlrint" 4 } } */ ++/* { dg-final { scan-assembler-times "bl\tllrint" 2 } } */ ++/* { dg-final { scan-assembler-not "fcvtzs" } } */ +--- a/src/gcc/testsuite/gcc.target/aarch64/pr63304_1.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/pr63304_1.c +@@ -4,10 +4,10 @@ + #pragma GCC target ("+nothing+simd, cmodel=small") + + int +-cal (float a) ++cal (double a) + { +- float b = 1.2; +- float c = 2.2; ++ double b = 3.2; ++ double c = 2.2; + if ((a + b) != c) + return 0; + else +@@ -19,11 +19,11 @@ cal (float a) + #pragma GCC target ("cmodel=large") + + int +-cal2 (float a) ++cal2 (double a) + { + +- float b = 1.2; +- float c = 2.2; ++ double b = 3.2; ++ double c = 2.2; + if ((a + b) != c) + return 0; + else +@@ -33,11 +33,11 @@ cal2 (float a) + #pragma GCC pop_options + + int +-cal3 (float a) ++cal3 (double a) + { + +- float b = 1.2; +- float c = 2.2; ++ double b = 3.2; ++ double c = 2.2; + if ((a + b) != c) + return 0; + else +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_1.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++/* Check that we can generate the immediate-offset addressing ++ mode for PRFM. */ ++ ++#define ARRSIZE 65 ++int *bad_addr[ARRSIZE]; ++ ++void ++prefetch_for_read (void) ++{ ++ int i; ++ for (i = 0; i < ARRSIZE; i++) ++ __builtin_prefetch (bad_addr[i] + 2, 0, 0); ++} ++ ++/* { dg-final { scan-assembler-times "prfm.*\\\[x\[0-9\]+, 8\\\]" 1 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/sdiv_costs_1.c +@@ -0,0 +1,38 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++ ++/* Both sdiv and udiv can be used here, so prefer udiv. */ ++int f1 (unsigned char *p) ++{ ++ return 100 / p[1]; ++} ++ ++int f2 (unsigned char *p, unsigned short x) ++{ ++ return x / p[0]; ++} ++ ++int f3 (unsigned char *p, int x) ++{ ++ x &= 0x7fffffff; ++ return x / p[0]; ++} ++ ++int f5 (unsigned char *p, unsigned short x) ++{ ++ return x % p[0]; ++} ++ ++/* This should only generate signed divisions. */ ++int f4 (unsigned char *p) ++{ ++ return -100 / p[1]; ++} ++ ++int f6 (unsigned char *p, short x) ++{ ++ return x % p[0]; ++} ++ ++/* { dg-final { scan-assembler-times "udiv\tw\[0-9\]+, w\[0-9\]+" 4 } } */ ++/* { dg-final { scan-assembler-times "sdiv\tw\[0-9\]+, w\[0-9\]+" 2 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c +@@ -0,0 +1,67 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++ ++typedef short int __attribute__ ((vector_size (16))) v8hi; ++ ++v8hi ++mla8hi (v8hi v0, v8hi v1, short int v2) ++{ ++ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.8h, v\[0-9\]\+\\.8h, v\[0-9\]\+\\.h\\\[0\\\]" } } */ ++ return v0 + v1 * v2; ++} ++ ++ ++v8hi ++mls8hi (v8hi v0, v8hi v1, short int v2) ++{ ++ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.8h, v\[0-9\]\+\\.8h, v\[0-9\]\+\\.h\\\[0\\\]" } } */ ++ return v0 - v1 * v2; ++} ++ ++typedef short int __attribute__ ((vector_size (8))) v4hi; ++ ++v4hi ++mla4hi (v4hi v0, v4hi v1, short int v2) ++{ ++ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.4h, v\[0-9\]\+\\.4h, v\[0-9\]\+\\.h\\\[0\\\]" } } */ ++ return v0 + v1 * v2; ++} ++ ++v4hi ++mls4hi (v4hi v0, v4hi v1, short int v2) ++{ ++ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.4h, v\[0-9\]\+\\.4h, v\[0-9\]\+\\.h\\\[0\\\]" } } */ ++ return v0 - v1 * v2; ++} ++ ++typedef int __attribute__ ((vector_size (16))) v4si; ++ ++v4si ++mla4si (v4si v0, v4si v1, int v2) ++{ ++ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.4s, v\[0-9\]\+\\.4s, v\[0-9\]\+\\.s\\\[0\\\]" } } */ ++ return v0 + v1 * v2; ++} ++ ++v4si ++mls4si (v4si v0, v4si v1, int v2) ++{ ++ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.4s, v\[0-9\]\+\\.4s, v\[0-9\]\+\\.s\\\[0\\\]" } } */ ++ return v0 - v1 * v2; ++} ++ ++typedef int __attribute__((vector_size (8))) v2si; ++ ++v2si ++mla2si (v2si v0, v2si v1, int v2) ++{ ++ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.2s, v\[0-9\]\+\\.2s, v\[0-9\]\+\\.s\\\[0\\\]" } } */ ++ return v0 + v1 * v2; ++} ++ ++v2si ++mls2si (v2si v0, v2si v1, int v2) ++{ ++ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.2s, v\[0-9\]\+\\.2s, v\[0-9\]\+\\.s\\\[0\\\]" } } */ ++ return v0 - v1 * v2; ++} +--- a/src/gcc/testsuite/gcc.target/aarch64/spellcheck_1.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/spellcheck_1.c +@@ -3,7 +3,7 @@ + __attribute__((target ("arch=armv8-a-typo"))) void + foo () + { ++ /* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'armv8-a'?" "" { target *-*-* } .-1 } */ ++ /* { dg-error "unknown value 'armv8-a-typo' for 'arch' target attribute" "" { target *-*-* } .-2 } */ ++ /* { dg-error "target attribute 'arch=armv8-a-typo' is invalid" "" { target *-*-* } .-3 } */ + } +-/* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'armv8-a'?" "" { target *-*-* } 5 } */ +-/* { dg-error "unknown value 'armv8-a-typo' for 'arch' target attribute" "" { target *-*-* } 5 } */ +-/* { dg-error "target attribute 'arch=armv8-a-typo' is invalid" "" { target *-*-* } 5 } */ +--- a/src/gcc/testsuite/gcc.target/aarch64/spellcheck_2.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/spellcheck_2.c +@@ -3,7 +3,7 @@ + __attribute__((target ("cpu=cortex-a57-typo"))) void + foo () + { ++ /* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'cortex-a57?" "" { target *-*-* } .-1 } */ ++ /* { dg-error "unknown value 'cortex-a57-typo' for 'cpu' target attribute" "" { target *-*-* } .-2 } */ ++ /* { dg-error "target attribute 'cpu=cortex-a57-typo' is invalid" "" { target *-*-* } .-3 } */ + } +-/* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'cortex-a57?" "" { target *-*-* } 5 } */ +-/* { dg-error "unknown value 'cortex-a57-typo' for 'cpu' target attribute" "" { target *-*-* } 5 } */ +-/* { dg-error "target attribute 'cpu=cortex-a57-typo' is invalid" "" { target *-*-* } 5 } */ +--- a/src/gcc/testsuite/gcc.target/aarch64/spellcheck_3.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/spellcheck_3.c +@@ -3,7 +3,7 @@ + __attribute__((target ("tune=cortex-a57-typo"))) void + foo () + { ++ /* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'cortex-a57?" "" { target *-*-* } .-1 } */ ++ /* { dg-error "unknown value 'cortex-a57-typo' for 'tune' target attribute" "" { target *-*-* } .-2 } */ ++ /* { dg-error "target attribute 'tune=cortex-a57-typo' is invalid" "" { target *-*-* } .-3 } */ + } +-/* { dg-message "valid arguments are: \[^\n\r]*; did you mean 'cortex-a57?" "" { target *-*-* } 5 } */ +-/* { dg-error "unknown value 'cortex-a57-typo' for 'tune' target attribute" "" { target *-*-* } 5 } */ +-/* { dg-error "target attribute 'tune=cortex-a57-typo' is invalid" "" { target *-*-* } 5 } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/spill_1.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++typedef int v4si __attribute__ ((vector_size (16))); ++ ++void bar (void); ++void ++foo (void) ++{ ++ v4si x = { 1, 1, 1, 1 }; ++ asm ("# %0" :: "w" (x)); ++ bar (); ++ asm ("# %0" :: "w" (x)); ++} ++ ++/* { dg-final { scan-assembler-times {\tmovi\tv[0-9]+\.4s,} 2 } } */ ++/* { dg-final { scan-assembler-not {\tldr\t} } } */ ++/* { dg-final { scan-assembler-not {\tstr\t} } } */ +--- a/src/gcc/testsuite/gcc.target/aarch64/stack-checking.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/stack-checking.c +@@ -1,4 +1,5 @@ + /* { dg-do run { target { *-*-linux* } } } */ ++/* { dg-require-stack-check "" } */ + /* { dg-options "-fstack-check" } */ + + int main(void) +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/store_lane0_str_1.c +@@ -0,0 +1,54 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++typedef int v2si __attribute__ ((vector_size (8))); ++typedef float v2sf __attribute__ ((vector_size (8))); ++typedef short v4hi __attribute__ ((vector_size (8))); ++typedef __fp16 v4hf __attribute__ ((vector_size (8))); ++typedef char v8qi __attribute__ ((vector_size (8))); ++ ++typedef int v4si __attribute__ ((vector_size (16))); ++typedef float v4sf __attribute__ ((vector_size (16))); ++typedef short v8hi __attribute__ ((vector_size (16))); ++typedef __fp16 v8hf __attribute__ ((vector_size (16))); ++typedef char v16qi __attribute__ ((vector_size (16))); ++typedef long long v2di __attribute__ ((vector_size (16))); ++typedef double v2df __attribute__ ((vector_size (16))); ++ ++#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ++#define LANE(N) (N - 1) ++#else ++#define LANE(N) 0 ++#endif ++ ++#define FUNC(T, E, N) \ ++void \ ++store_lane_##T (T x, E *y) \ ++{ \ ++ y[0] = x[N - 1 - LANE (N)]; \ ++ y[3] = x[LANE (N)]; \ ++} ++ ++FUNC (v2si, int, 2) ++FUNC (v2sf, float, 2) ++FUNC (v4hi, short, 4) ++FUNC (v4hf, __fp16, 4) ++FUNC (v8qi, char, 8) ++ ++FUNC (v4si, int, 4) ++FUNC (v4sf, float, 4) ++FUNC (v8hi, short, 8) ++FUNC (v8hf, __fp16, 8) ++FUNC (v16qi, char, 16) ++FUNC (v2di, long long, 2) ++FUNC (v2df, double, 2) ++ ++/* When storing lane zero of a vector we can use the scalar STR instruction ++ that supports more addressing modes. */ ++ ++/* { dg-final { scan-assembler-times "str\ts\[0-9\]+" 4 } } */ ++/* { dg-final { scan-assembler-times "str\tb\[0-9\]+" 2 } } */ ++/* { dg-final { scan-assembler-times "str\th\[0-9\]+" 4 } } */ ++/* { dg-final { scan-assembler-times "str\td\[0-9\]+" 2 } } */ ++/* { dg-final { scan-assembler-not "umov" } } */ ++/* { dg-final { scan-assembler-not "dup" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/subs_compare_1.c +@@ -0,0 +1,15 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int ++foo (int a, int b) ++{ ++ int x = a - b; ++ if (a <= b) ++ return x; ++ else ++ return 0; ++} ++ ++/* { dg-final { scan-assembler-times "subs\\tw\[0-9\]+, w\[0-9\]+, w\[0-9\]+" 1 } } */ ++/* { dg-final { scan-assembler-not "cmp\\tw\[0-9\]+, w\[0-9\]+" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/subs_compare_2.c +@@ -0,0 +1,15 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int ++foo (int a, int b) ++{ ++ int x = a - 4; ++ if (a < 4) ++ return x; ++ else ++ return 0; ++} ++ ++/* { dg-final { scan-assembler-times "subs\\tw\[0-9\]+, w\[0-9\]+, #4" 1 } } */ ++/* { dg-final { scan-assembler-not "cmp\\tw\[0-9\]+, w\[0-9\]+" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/tst_imm_split_1.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int ++f (unsigned char *p) ++{ ++ return p[0] == 50 || p[0] == 52; ++} ++ ++int ++g (unsigned char *p) ++{ ++ return (p[0] >> 4 & 0xfd) == 0; ++} ++ ++/* { dg-final { scan-assembler-not "and\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+.*" } } */ ++/* { dg-final { scan-assembler "tst\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+" } } */ ++/* { dg-final { scan-assembler "tst\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+, lsr 4" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-init-1.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++#define vector __attribute__((vector_size(16))) ++ ++vector float combine (float a, float b, float c, float d) ++{ ++ return (vector float) { a, b, c, d }; ++} ++ ++/* { dg-final { scan-assembler-not "movi\t" } } */ ++/* { dg-final { scan-assembler-not "orr\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-init-2.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++#define vector __attribute__((vector_size(16))) ++ ++vector float combine (float a, float b, float d) ++{ ++ return (vector float) { a, b, a, d }; ++} ++ ++/* { dg-final { scan-assembler-not "movi\t" } } */ ++/* { dg-final { scan-assembler-not "orr\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-init-3.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++#define vector __attribute__((vector_size(16))) ++ ++vector float combine (float a, float b) ++{ ++ return (vector float) { a, b, a, b }; ++} ++ ++/* { dg-final { scan-assembler-not "movi\t" } } */ ++/* { dg-final { scan-assembler-not "orr\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-init-4.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++#define vector __attribute__((vector_size(16))) ++ ++vector float combine (float a, float b) ++{ ++ return (vector float) { a, b, b, a }; ++} ++ ++/* { dg-final { scan-assembler-not "movi\t" } } */ ++/* { dg-final { scan-assembler-not "orr\t" } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-init-5.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++#define vector __attribute__((vector_size(16))) ++ ++vector float combine (float a, float b) ++{ ++ return (vector float) { a, b, a, a }; ++} ++ ++/* { dg-final { scan-assembler-not "movi\t" } } */ ++/* { dg-final { scan-assembler-not "orr\t" } } */ +--- a/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c ++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c +@@ -3,7 +3,8 @@ + /* { dg-options "-O2 -ffast-math" } */ + /* { dg-add-options arm_v8_2a_fp16_neon } */ + +-/* Test instructions generated for half-precision arithmetic. */ ++/* Test instructions generated for half-precision arithmetic with ++ unsafe-math-optimizations enabled. */ + + typedef __fp16 float16_t; + typedef __simd64_float16_t float16x4_t; +@@ -90,9 +91,18 @@ TEST_CMP (greaterthanqual, >=, int16x8_t, float16x8_t) + /* { dg-final { scan-assembler-times {vneg\.f16\tq[0-9]+, q[0-9]+} 1 } } */ + /* { dg-final { scan-assembler-times {vabs\.f16\ts[0-9]+, s[0-9]+} 2 } } */ + +-/* { dg-final { scan-assembler-times {vadd\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ +-/* { dg-final { scan-assembler-times {vsub\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ +-/* { dg-final { scan-assembler-times {vmul\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ ++/* { dg-final { scan-assembler-times {vadd\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vadd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vadd\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++/* { dg-final { scan-assembler-times {vsub\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vsub\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vsub\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++/* { dg-final { scan-assembler-times {vmul\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ + /* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ + /* { dg-final { scan-assembler-times {vcmp\.f32\ts[0-9]+, s[0-9]+} 26 } } */ + /* { dg-final { scan-assembler-times {vcmpe\.f32\ts[0-9]+, s[0-9]+} 52 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c +@@ -0,0 +1,109 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ ++/* { dg-options "-O2 -fno-fast-math" } */ ++/* { dg-add-options arm_v8_2a_fp16_neon } */ ++ ++/* Test instructions generated for half-precision arithmetic without ++ unsafe-math-optimizations. */ ++ ++typedef __fp16 float16_t; ++typedef __simd64_float16_t float16x4_t; ++typedef __simd128_float16_t float16x8_t; ++ ++typedef short int16x4_t __attribute__ ((vector_size (8))); ++typedef short int int16x8_t __attribute__ ((vector_size (16))); ++ ++float16_t ++fp16_abs (float16_t a) ++{ ++ return (a < 0) ? -a : a; ++} ++ ++#define TEST_UNOP(NAME, OPERATOR, TY) \ ++ TY test_##NAME##_##TY (TY a) \ ++ { \ ++ return OPERATOR (a); \ ++ } ++ ++#define TEST_BINOP(NAME, OPERATOR, TY) \ ++ TY test_##NAME##_##TY (TY a, TY b) \ ++ { \ ++ return a OPERATOR b; \ ++ } ++ ++#define TEST_CMP(NAME, OPERATOR, RTY, TY) \ ++ RTY test_##NAME##_##TY (TY a, TY b) \ ++ { \ ++ return a OPERATOR b; \ ++ } ++ ++/* Scalars. */ ++ ++TEST_UNOP (neg, -, float16_t) ++TEST_UNOP (abs, fp16_abs, float16_t) ++ ++TEST_BINOP (add, +, float16_t) ++TEST_BINOP (sub, -, float16_t) ++TEST_BINOP (mult, *, float16_t) ++TEST_BINOP (div, /, float16_t) ++ ++TEST_CMP (equal, ==, int, float16_t) ++TEST_CMP (unequal, !=, int, float16_t) ++TEST_CMP (lessthan, <, int, float16_t) ++TEST_CMP (greaterthan, >, int, float16_t) ++TEST_CMP (lessthanequal, <=, int, float16_t) ++TEST_CMP (greaterthanqual, >=, int, float16_t) ++ ++/* Vectors of size 4. */ ++ ++TEST_UNOP (neg, -, float16x4_t) ++ ++TEST_BINOP (add, +, float16x4_t) ++TEST_BINOP (sub, -, float16x4_t) ++TEST_BINOP (mult, *, float16x4_t) ++TEST_BINOP (div, /, float16x4_t) ++ ++TEST_CMP (equal, ==, int16x4_t, float16x4_t) ++TEST_CMP (unequal, !=, int16x4_t, float16x4_t) ++TEST_CMP (lessthan, <, int16x4_t, float16x4_t) ++TEST_CMP (greaterthan, >, int16x4_t, float16x4_t) ++TEST_CMP (lessthanequal, <=, int16x4_t, float16x4_t) ++TEST_CMP (greaterthanqual, >=, int16x4_t, float16x4_t) ++ ++/* Vectors of size 8. */ ++ ++TEST_UNOP (neg, -, float16x8_t) ++ ++TEST_BINOP (add, +, float16x8_t) ++TEST_BINOP (sub, -, float16x8_t) ++TEST_BINOP (mult, *, float16x8_t) ++TEST_BINOP (div, /, float16x8_t) ++ ++TEST_CMP (equal, ==, int16x8_t, float16x8_t) ++TEST_CMP (unequal, !=, int16x8_t, float16x8_t) ++TEST_CMP (lessthan, <, int16x8_t, float16x8_t) ++TEST_CMP (greaterthan, >, int16x8_t, float16x8_t) ++TEST_CMP (lessthanequal, <=, int16x8_t, float16x8_t) ++TEST_CMP (greaterthanqual, >=, int16x8_t, float16x8_t) ++ ++/* { dg-final { scan-assembler-times {vneg\.f16\ts[0-9]+, s[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vneg\.f16\td[0-9]+, d[0-9]+} 1 } } */ ++/* { dg-final { scan-assembler-times {vneg\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++/* { dg-final { scan-assembler-times {vadd\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ ++/* { dg-final { scan-assembler-times {vsub\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ ++/* { dg-final { scan-assembler-times {vmul\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ ++/* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } } */ ++/* { dg-final { scan-assembler-times {vcmp\.f32\ts[0-9]+, s[0-9]+} 26 } } */ ++ ++/* { dg-final { scan-assembler-times {vcmpe\.f32\ts[0-9]+, s[0-9]+} 52 } } */ ++/* { dg-final { scan-assembler-times {vcmpe\.f32\ts[0-9]+, #0} 2 } } */ ++ ++/* { dg-final { scan-assembler-not {vabs\.f16} } } */ ++ ++/* { dg-final { scan-assembler-not {vadd\.f32} } } */ ++/* { dg-final { scan-assembler-not {vsub\.f32} } } */ ++/* { dg-final { scan-assembler-not {vmul\.f32} } } */ ++/* { dg-final { scan-assembler-not {vdiv\.f32} } } */ ++/* { dg-final { scan-assembler-not {vcmp\.f16} } } */ ++/* { dg-final { scan-assembler-not {vcmpe\.f16} } } */ +--- a/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c ++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c +@@ -137,7 +137,7 @@ + } + + VCMP1_TEST (vceqz) +-/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-0]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ + /* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ + + VCMP1_TEST (vcgtz) +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c +@@ -0,0 +1,491 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ ++/* { dg-options "-O2 -ffast-math" } */ ++/* { dg-add-options arm_v8_2a_fp16_neon } */ ++ ++/* Test instructions generated for the FP16 vector intrinsics with ++ -ffast-math */ ++ ++#include ++ ++#define MSTRCAT(L, str) L##str ++ ++#define UNOP_TEST(insn) \ ++ float16x4_t \ ++ MSTRCAT (test_##insn, _16x4) (float16x4_t a) \ ++ { \ ++ return MSTRCAT (insn, _f16) (a); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn, _16x8) (float16x8_t a) \ ++ { \ ++ return MSTRCAT (insn, q_f16) (a); \ ++ } ++ ++#define BINOP_TEST(insn) \ ++ float16x4_t \ ++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b) \ ++ { \ ++ return MSTRCAT (insn, _f16) (a, b); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b) \ ++ { \ ++ return MSTRCAT (insn, q_f16) (a, b); \ ++ } ++ ++#define BINOP_LANE_TEST(insn, I) \ ++ float16x4_t \ ++ MSTRCAT (test_##insn##_lane, _16x4) (float16x4_t a, float16x4_t b) \ ++ { \ ++ return MSTRCAT (insn, _lane_f16) (a, b, I); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn##_lane, _16x8) (float16x8_t a, float16x4_t b) \ ++ { \ ++ return MSTRCAT (insn, q_lane_f16) (a, b, I); \ ++ } ++ ++#define BINOP_LANEQ_TEST(insn, I) \ ++ float16x4_t \ ++ MSTRCAT (test_##insn##_laneq, _16x4) (float16x4_t a, float16x8_t b) \ ++ { \ ++ return MSTRCAT (insn, _laneq_f16) (a, b, I); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn##_laneq, _16x8) (float16x8_t a, float16x8_t b) \ ++ { \ ++ return MSTRCAT (insn, q_laneq_f16) (a, b, I); \ ++ } \ ++ ++#define BINOP_N_TEST(insn) \ ++ float16x4_t \ ++ MSTRCAT (test_##insn##_n, _16x4) (float16x4_t a, float16_t b) \ ++ { \ ++ return MSTRCAT (insn, _n_f16) (a, b); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn##_n, _16x8) (float16x8_t a, float16_t b) \ ++ { \ ++ return MSTRCAT (insn, q_n_f16) (a, b); \ ++ } ++ ++#define TERNOP_TEST(insn) \ ++ float16_t \ ++ MSTRCAT (test_##insn, _16) (float16_t a, float16_t b, float16_t c) \ ++ { \ ++ return MSTRCAT (insn, h_f16) (a, b, c); \ ++ } \ ++ float16x4_t \ ++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b, \ ++ float16x4_t c) \ ++ { \ ++ return MSTRCAT (insn, _f16) (a, b, c); \ ++ } \ ++ float16x8_t \ ++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b, \ ++ float16x8_t c) \ ++ { \ ++ return MSTRCAT (insn, q_f16) (a, b, c); \ ++ } ++ ++#define VCMP1_TEST(insn) \ ++ uint16x4_t \ ++ MSTRCAT (test_##insn, _16x4) (float16x4_t a) \ ++ { \ ++ return MSTRCAT (insn, _f16) (a); \ ++ } \ ++ uint16x8_t \ ++ MSTRCAT (test_##insn, _16x8) (float16x8_t a) \ ++ { \ ++ return MSTRCAT (insn, q_f16) (a); \ ++ } ++ ++#define VCMP2_TEST(insn) \ ++ uint16x4_t \ ++ MSTRCAT (test_##insn, _16x4) (float16x4_t a, float16x4_t b) \ ++ { \ ++ return MSTRCAT (insn, _f16) (a, b); \ ++ } \ ++ uint16x8_t \ ++ MSTRCAT (test_##insn, _16x8) (float16x8_t a, float16x8_t b) \ ++ { \ ++ return MSTRCAT (insn, q_f16) (a, b); \ ++ } ++ ++#define VCVT_TEST(insn, TY, TO, FR) \ ++ MSTRCAT (TO, 16x4_t) \ ++ MSTRCAT (test_##insn, TY) (MSTRCAT (FR, 16x4_t) a) \ ++ { \ ++ return MSTRCAT (insn, TY) (a); \ ++ } \ ++ MSTRCAT (TO, 16x8_t) \ ++ MSTRCAT (test_##insn##_q, TY) (MSTRCAT (FR, 16x8_t) a) \ ++ { \ ++ return MSTRCAT (insn, q##TY) (a); \ ++ } ++ ++#define VCVT_N_TEST(insn, TY, TO, FR) \ ++ MSTRCAT (TO, 16x4_t) \ ++ MSTRCAT (test_##insn##_n, TY) (MSTRCAT (FR, 16x4_t) a) \ ++ { \ ++ return MSTRCAT (insn, _n##TY) (a, 1); \ ++ } \ ++ MSTRCAT (TO, 16x8_t) \ ++ MSTRCAT (test_##insn##_n_q, TY) (MSTRCAT (FR, 16x8_t) a) \ ++ { \ ++ return MSTRCAT (insn, q_n##TY) (a, 1); \ ++ } ++ ++VCMP1_TEST (vceqz) ++/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ ++ ++VCMP1_TEST (vcgtz) ++/* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ ++ ++VCMP1_TEST (vcgez) ++/* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vcge\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ ++ ++VCMP1_TEST (vcltz) ++/* { dg-final { scan-assembler-times {vclt.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vclt.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ ++ ++VCMP1_TEST (vclez) ++/* { dg-final { scan-assembler-times {vcle\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ ++/* { dg-final { scan-assembler-times {vcle\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ ++ ++VCVT_TEST (vcvt, _f16_s16, float, int) ++VCVT_N_TEST (vcvt, _f16_s16, float, int) ++/* { dg-final { scan-assembler-times {vcvt\.f16\.s16\td[0-9]+, d[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\tq[0-9]+, q[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\td[0-9]+, d[0-9]+, #1} 1 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.s16\tq[0-9]+, q[0-9]+, #1} 1 } } */ ++ ++VCVT_TEST (vcvt, _f16_u16, float, uint) ++VCVT_N_TEST (vcvt, _f16_u16, float, uint) ++/* { dg-final { scan-assembler-times {vcvt\.f16\.u16\td[0-9]+, d[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\tq[0-9]+, q[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\td[0-9]+, d[0-9]+, #1} 1 } } ++ { dg-final { scan-assembler-times {vcvt\.f16\.u16\tq[0-9]+, q[0-9]+, #1} 1 } } */ ++ ++VCVT_TEST (vcvt, _s16_f16, int, float) ++VCVT_N_TEST (vcvt, _s16_f16, int, float) ++/* { dg-final { scan-assembler-times {vcvt\.s16\.f16\td[0-9]+, d[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\tq[0-9]+, q[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\td[0-9]+, d[0-9]+, #1} 1 } } ++ { dg-final { scan-assembler-times {vcvt\.s16\.f16\tq[0-9]+, q[0-9]+, #1} 1 } } */ ++ ++VCVT_TEST (vcvt, _u16_f16, uint, float) ++VCVT_N_TEST (vcvt, _u16_f16, uint, float) ++/* { dg-final { scan-assembler-times {vcvt\.u16\.f16\td[0-9]+, d[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\tq[0-9]+, q[0-9]+} 2 } } ++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\td[0-9]+, d[0-9]+, #1} 1 } } ++ { dg-final { scan-assembler-times {vcvt\.u16\.f16\tq[0-9]+, q[0-9]+, #1} 1 } } */ ++ ++VCVT_TEST (vcvta, _s16_f16, int, float) ++/* { dg-final { scan-assembler-times {vcvta\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvta\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvta, _u16_f16, uint, float) ++/* { dg-final { scan-assembler-times {vcvta\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvta\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtm, _s16_f16, int, float) ++/* { dg-final { scan-assembler-times {vcvtm\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtm\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtm, _u16_f16, uint, float) ++/* { dg-final { scan-assembler-times {vcvtm\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtm\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtn, _s16_f16, int, float) ++/* { dg-final { scan-assembler-times {vcvtn\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtn\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtn, _u16_f16, uint, float) ++/* { dg-final { scan-assembler-times {vcvtn\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtn\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtp, _s16_f16, int, float) ++/* { dg-final { scan-assembler-times {vcvtp\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtp\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++VCVT_TEST (vcvtp, _u16_f16, uint, float) ++/* { dg-final { scan-assembler-times {vcvtp\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcvtp\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } ++*/ ++ ++UNOP_TEST (vabs) ++/* { dg-final { scan-assembler-times {vabs\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vabs\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vneg) ++/* { dg-final { scan-assembler-times {vneg\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vneg\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrecpe) ++/* { dg-final { scan-assembler-times {vrecpe\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrecpe\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrnd) ++/* { dg-final { scan-assembler-times {vrintz\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrintz\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrnda) ++/* { dg-final { scan-assembler-times {vrinta\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrinta\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrndm) ++/* { dg-final { scan-assembler-times {vrintm\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrintm\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrndn) ++/* { dg-final { scan-assembler-times {vrintn\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrintn\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrndp) ++/* { dg-final { scan-assembler-times {vrintp\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrintp\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrndx) ++/* { dg-final { scan-assembler-times {vrintx\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrintx\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++UNOP_TEST (vrsqrte) ++/* { dg-final { scan-assembler-times {vrsqrte\.f16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrsqrte\.f16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vadd) ++/* { dg-final { scan-assembler-times {vadd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vadd\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vabd) ++/* { dg-final { scan-assembler-times {vabd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vabd\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcage) ++/* { dg-final { scan-assembler-times {vacge\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vacge\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcagt) ++/* { dg-final { scan-assembler-times {vacgt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vacgt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcale) ++/* { dg-final { scan-assembler-times {vacle\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vacle\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcalt) ++/* { dg-final { scan-assembler-times {vaclt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vaclt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vceq) ++/* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcge) ++/* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcge\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcgt) ++/* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcgt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vcle) ++/* { dg-final { scan-assembler-times {vcle\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vcle\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++VCMP2_TEST (vclt) ++/* { dg-final { scan-assembler-times {vclt\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vclt\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vmax) ++/* { dg-final { scan-assembler-times {vmax\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vmax\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vmin) ++/* { dg-final { scan-assembler-times {vmin\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vmin\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vmaxnm) ++/* { dg-final { scan-assembler-times {vmaxnm\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vmaxnm\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vminnm) ++/* { dg-final { scan-assembler-times {vminnm\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vminnm\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vmul) ++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 3 } } ++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++BINOP_LANE_TEST (vmul, 2) ++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+\[2\]} 1 } } ++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, d[0-9]+\[2\]} 1 } } */ ++BINOP_N_TEST (vmul) ++/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+\[0\]} 1 } } ++ { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, d[0-9]+\[0\]} 1 } }*/ ++ ++float16x4_t ++test_vpadd_16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vpadd_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vpadd\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x4_t ++test_vpmax_16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vpmax_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vpmax\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x4_t ++test_vpmin_16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vpmin_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vpmin\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++ ++BINOP_TEST (vsub) ++/* { dg-final { scan-assembler-times {vsub\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vsub\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vrecps) ++/* { dg-final { scan-assembler-times {vrecps\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrecps\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++BINOP_TEST (vrsqrts) ++/* { dg-final { scan-assembler-times {vrsqrts\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrsqrts\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++TERNOP_TEST (vfma) ++/* { dg-final { scan-assembler-times {vfma\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vfma\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++TERNOP_TEST (vfms) ++/* { dg-final { scan-assembler-times {vfms\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vfms\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++float16x4_t ++test_vmov_n_f16 (float16_t a) ++{ ++ return vmov_n_f16 (a); ++} ++ ++float16x4_t ++test_vdup_n_f16 (float16_t a) ++{ ++ return vdup_n_f16 (a); ++} ++/* { dg-final { scan-assembler-times {vdup\.16\td[0-9]+, r[0-9]+} 2 } } */ ++ ++float16x8_t ++test_vmovq_n_f16 (float16_t a) ++{ ++ return vmovq_n_f16 (a); ++} ++ ++float16x8_t ++test_vdupq_n_f16 (float16_t a) ++{ ++ return vdupq_n_f16 (a); ++} ++/* { dg-final { scan-assembler-times {vdup\.16\tq[0-9]+, r[0-9]+} 2 } } */ ++ ++float16x4_t ++test_vdup_lane_f16 (float16x4_t a) ++{ ++ return vdup_lane_f16 (a, 1); ++} ++/* { dg-final { scan-assembler-times {vdup\.16\td[0-9]+, d[0-9]+\[1\]} 1 } } */ ++ ++float16x8_t ++test_vdupq_lane_f16 (float16x4_t a) ++{ ++ return vdupq_lane_f16 (a, 1); ++} ++/* { dg-final { scan-assembler-times {vdup\.16\tq[0-9]+, d[0-9]+\[1\]} 1 } } */ ++ ++float16x4_t ++test_vext_f16 (float16x4_t a, float16x4_t b) ++{ ++ return vext_f16 (a, b, 1); ++} ++/* { dg-final { scan-assembler-times {vext\.16\td[0-9]+, d[0-9]+, d[0-9]+, #1} 1 } } */ ++ ++float16x8_t ++test_vextq_f16 (float16x8_t a, float16x8_t b) ++{ ++ return vextq_f16 (a, b, 1); ++} ++/* { dg-final { scan-assembler-times {vext\.16\tq[0-9]+, q[0-9]+, q[0-9]+, #1} 1 } } */ ++ ++UNOP_TEST (vrev64) ++/* { dg-final { scan-assembler-times {vrev64\.16\td[0-9]+, d[0-9]+} 1 } } ++ { dg-final { scan-assembler-times {vrev64\.16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++float16x4_t ++test_vbsl16x4 (uint16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vbsl_f16 (a, b, c); ++} ++/* { dg-final { scan-assembler-times {vbsl\td[0-9]+, d[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x8_t ++test_vbslq16x8 (uint16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vbslq_f16 (a, b, c); ++} ++/*{ dg-final { scan-assembler-times {vbsl\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ ++ ++float16x4x2_t ++test_vzip16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vzip_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vzip\.16\td[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x8x2_t ++test_vzipq16x8 (float16x8_t a, float16x8_t b) ++{ ++ return vzipq_f16 (a, b); ++} ++/*{ dg-final { scan-assembler-times {vzip\.16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++float16x4x2_t ++test_vuzp16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vuzp_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vuzp\.16\td[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x8x2_t ++test_vuzpq16x8 (float16x8_t a, float16x8_t b) ++{ ++ return vuzpq_f16 (a, b); ++} ++/*{ dg-final { scan-assembler-times {vuzp\.16\tq[0-9]+, q[0-9]+} 1 } } */ ++ ++float16x4x2_t ++test_vtrn16x4 (float16x4_t a, float16x4_t b) ++{ ++ return vtrn_f16 (a, b); ++} ++/* { dg-final { scan-assembler-times {vtrn\.16\td[0-9]+, d[0-9]+} 1 } } */ ++ ++float16x8x2_t ++test_vtrnq16x8 (float16x8_t a, float16x8_t b) ++{ ++ return vtrnq_f16 (a, b); ++} ++/*{ dg-final { scan-assembler-times {vtrn\.16\tq[0-9]+, q[0-9]+} 1 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-3.c +@@ -0,0 +1,108 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ ++/* { dg-options "-O2 -ffast-math" } */ ++/* { dg-add-options arm_v8_2a_fp16_neon } */ ++ ++/* Test compiler use of FP16 FMA/FMS instructions with -ffast-math. */ ++ ++#include ++ ++float16x4_t ++test_vfma_1 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vadd_f16 (vmul_f16 (a, b), c); ++} ++ ++float16x4_t ++test_vfma_2 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vsub_f16 (vmul_f16 (a, b), vneg_f16 (c)); ++} ++ ++float16x4_t ++test_vfma_3 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vsub_f16 (vmul_f16 (vneg_f16 (a), vneg_f16 (b)), vneg_f16 (c)); ++} ++ ++float16x4_t ++test_vfma_4 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vsub_f16 (vmul_f16 (a, b), vneg_f16 (c)); ++} ++/* { dg-final { scan-assembler-times {vfma\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 4 } } */ ++ ++float16x8_t ++test_vfmaq_1 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vaddq_f16 (vmulq_f16 (a, b), c); ++} ++ ++float16x8_t ++test_vfmaq_2 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vsubq_f16 (vmulq_f16 (a, b), vnegq_f16 (c)); ++} ++ ++float16x8_t ++test_vfmaq_3 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vsubq_f16 (vmulq_f16 (vnegq_f16 (a), vnegq_f16 (b)), vnegq_f16 (c)); ++} ++ ++float16x8_t ++test_vfmaq_4 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vsubq_f16 (vmulq_f16 (a, b), vnegq_f16 (c)); ++} ++/* { dg-final { scan-assembler-times {vfma\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 4 } } */ ++ ++float16x4_t ++test_vfms_1 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vsub_f16 (c, vmul_f16 (a, b)); ++} ++ ++float16x4_t ++test_vfms_2 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vsub_f16 (a, vmul_f16 (b, c)); ++} ++ ++float16x4_t ++test_vfms_3 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vadd_f16 (vmul_f16 (vneg_f16 (a), b), c); ++} ++ ++float16x4_t ++test_vfms_4 (float16x4_t a, float16x4_t b, float16x4_t c) ++{ ++ return vadd_f16 (vmul_f16 (a, vneg_f16 (b)), c); ++} ++/* { dg-final { scan-assembler-times {vfms\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 4 } } */ ++ ++float16x8_t ++test_vfmsq_1 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vsubq_f16 (c, vmulq_f16 (a, b)); ++} ++ ++float16x8_t ++test_vfmsq_2 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vsubq_f16 (a, vmulq_f16 (b, c)); ++} ++ ++float16x8_t ++test_vfmsq_3 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vaddq_f16 (vmulq_f16 (vnegq_f16 (a), b), c); ++} ++ ++float16x8_t ++test_vfmsq_4 (float16x8_t a, float16x8_t b, float16x8_t c) ++{ ++ return vaddq_f16 (vmulq_f16 (a, vnegq_f16 (b)), c); ++} ++/* { dg-final { scan-assembler-times {vfms\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 4 } } */ +--- a/src/gcc/testsuite/gcc.target/arm/its.c ++++ b/src/gcc/testsuite/gcc.target/arm/its.c +@@ -1,4 +1,6 @@ + /* { dg-do compile } */ ++/* { dg-require-effective-target arm_cortex_m } */ ++/* { dg-require-effective-target arm_thumb2 } */ + /* { dg-options "-O2" } */ + int test (int a, int b) + { +@@ -17,4 +19,6 @@ int test (int a, int b) + r -= 3; + return r; + } +-/* { dg-final { scan-assembler-times "\tit" 2 { target arm_thumb2 } } } */ ++/* Ensure there is no IT block with more than 2 instructions, ie. we only allow ++ IT, ITT and ITE. */ ++/* { dg-final { scan-assembler-not "\\sit\[te\]{2}" } } */ +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c +@@ -1,6 +1,7 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ +-/* { dg-lto-options {{-flto}} } */ ++/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ ++/* { dg-lto-options {{-flto -mfpu=neon}} } */ + + #include "arm_neon.h" + +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c +@@ -1,7 +1,7 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ ++/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ + /* { dg-lto-options {{-flto -mfpu=neon}} } */ +-/* { dg-suppress-ld-options {-mfpu=neon} } */ + + #include "arm_neon.h" + +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/movdi_movt.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile { target { arm_cortex_m && { arm_thumb2_ok || arm_thumb1_movt_ok } } } } */ ++/* { dg-options "-O2 -mslow-flash-data" } */ ++ ++unsigned long long ++movdi_1 (int a) ++{ ++ return 0xF0F00000LLU; ++} ++ ++unsigned long long ++movdi_2 (int a) ++{ ++ return 0xF0F0000000000000LLU; ++} ++ ++/* Accept r1 because big endian targets put the low bits in the highest ++ numbered register of a pair. */ ++/* { dg-final { scan-assembler-times "movt\tr\[01\], 61680" 2 } } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/movsi_movt.c +@@ -0,0 +1,10 @@ ++/* { dg-do compile { target { arm_cortex_m && { arm_thumb2_ok || arm_thumb1_movt_ok } } } } */ ++/* { dg-options "-O2 -mslow-flash-data" } */ ++ ++unsigned ++movsi (void) ++{ ++ return 0xF0F00000U; ++} ++ ++/* { dg-final { scan-assembler-times "movt\tr0, 61680" 1 } } */ +--- a/src/gcc/testsuite/gcc.target/arm/pr69180.c ++++ b/src/gcc/testsuite/gcc.target/arm/pr69180.c +@@ -8,9 +8,10 @@ + #pragma GCC target ("fpu=neon-fp-armv8") + + #define __ARM_NEON_FP 0 ++/* { dg-warning ".__ARM_NEON_FP. redefined" "" { target *-*-* } .-1 } */ ++ + #define __ARM_FP 0 +-#define __ARM_FEATURE_LDREX 0 ++/* { dg-warning ".__ARM_FP. redefined" "" { target *-*-* } .-1 } */ + +-/* { dg-warning ".__ARM_NEON_FP. redefined" "" { target *-*-* } 10 } */ +-/* { dg-warning ".__ARM_FP. redefined" "" { target *-*-* } 11 } */ +-/* { dg-warning ".__ARM_FEATURE_LDREX. redefined" "" { target *-*-* } 12 } */ ++#define __ARM_FEATURE_LDREX 0 ++/* { dg-warning ".__ARM_FEATURE_LDREX. redefined" "" { target *-*-* } .-1 } */ +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/pr77308-1.c +@@ -0,0 +1,169 @@ ++/* { dg-do compile } */ ++/* { dg-options "-Os -Wstack-usage=2500" } */ ++ ++/* This is a modified algorithm with bit-not "~" at the Sigma-blocks. ++ It improves the test coverage of one_cmpldi2 and subdi3 patterns. ++ Unlike the original test case these insns can reach the reload pass, ++ which may result in large stack usage. */ ++ ++#define SHA_LONG64 unsigned long long ++#define U64(C) C##ULL ++ ++#define SHA_LBLOCK 16 ++#define SHA512_CBLOCK (SHA_LBLOCK*8) ++ ++typedef struct SHA512state_st { ++ SHA_LONG64 h[8]; ++ SHA_LONG64 Nl, Nh; ++ union { ++ SHA_LONG64 d[SHA_LBLOCK]; ++ unsigned char p[SHA512_CBLOCK]; ++ } u; ++ unsigned int num, md_len; ++} SHA512_CTX; ++ ++static const SHA_LONG64 K512[80] = { ++ U64(0x428a2f98d728ae22), U64(0x7137449123ef65cd), ++ U64(0xb5c0fbcfec4d3b2f), U64(0xe9b5dba58189dbbc), ++ U64(0x3956c25bf348b538), U64(0x59f111f1b605d019), ++ U64(0x923f82a4af194f9b), U64(0xab1c5ed5da6d8118), ++ U64(0xd807aa98a3030242), U64(0x12835b0145706fbe), ++ U64(0x243185be4ee4b28c), U64(0x550c7dc3d5ffb4e2), ++ U64(0x72be5d74f27b896f), U64(0x80deb1fe3b1696b1), ++ U64(0x9bdc06a725c71235), U64(0xc19bf174cf692694), ++ U64(0xe49b69c19ef14ad2), U64(0xefbe4786384f25e3), ++ U64(0x0fc19dc68b8cd5b5), U64(0x240ca1cc77ac9c65), ++ U64(0x2de92c6f592b0275), U64(0x4a7484aa6ea6e483), ++ U64(0x5cb0a9dcbd41fbd4), U64(0x76f988da831153b5), ++ U64(0x983e5152ee66dfab), U64(0xa831c66d2db43210), ++ U64(0xb00327c898fb213f), U64(0xbf597fc7beef0ee4), ++ U64(0xc6e00bf33da88fc2), U64(0xd5a79147930aa725), ++ U64(0x06ca6351e003826f), U64(0x142929670a0e6e70), ++ U64(0x27b70a8546d22ffc), U64(0x2e1b21385c26c926), ++ U64(0x4d2c6dfc5ac42aed), U64(0x53380d139d95b3df), ++ U64(0x650a73548baf63de), U64(0x766a0abb3c77b2a8), ++ U64(0x81c2c92e47edaee6), U64(0x92722c851482353b), ++ U64(0xa2bfe8a14cf10364), U64(0xa81a664bbc423001), ++ U64(0xc24b8b70d0f89791), U64(0xc76c51a30654be30), ++ U64(0xd192e819d6ef5218), U64(0xd69906245565a910), ++ U64(0xf40e35855771202a), U64(0x106aa07032bbd1b8), ++ U64(0x19a4c116b8d2d0c8), U64(0x1e376c085141ab53), ++ U64(0x2748774cdf8eeb99), U64(0x34b0bcb5e19b48a8), ++ U64(0x391c0cb3c5c95a63), U64(0x4ed8aa4ae3418acb), ++ U64(0x5b9cca4f7763e373), U64(0x682e6ff3d6b2b8a3), ++ U64(0x748f82ee5defb2fc), U64(0x78a5636f43172f60), ++ U64(0x84c87814a1f0ab72), U64(0x8cc702081a6439ec), ++ U64(0x90befffa23631e28), U64(0xa4506cebde82bde9), ++ U64(0xbef9a3f7b2c67915), U64(0xc67178f2e372532b), ++ U64(0xca273eceea26619c), U64(0xd186b8c721c0c207), ++ U64(0xeada7dd6cde0eb1e), U64(0xf57d4f7fee6ed178), ++ U64(0x06f067aa72176fba), U64(0x0a637dc5a2c898a6), ++ U64(0x113f9804bef90dae), U64(0x1b710b35131c471b), ++ U64(0x28db77f523047d84), U64(0x32caab7b40c72493), ++ U64(0x3c9ebe0a15c9bebc), U64(0x431d67c49c100d4c), ++ U64(0x4cc5d4becb3e42b6), U64(0x597f299cfc657e2a), ++ U64(0x5fcb6fab3ad6faec), U64(0x6c44198c4a475817) ++}; ++ ++#define B(x,j) (((SHA_LONG64)(*(((const unsigned char *)(&x))+j)))<<((7-j)*8)) ++#define PULL64(x) (B(x,0)|B(x,1)|B(x,2)|B(x,3)|B(x,4)|B(x,5)|B(x,6)|B(x,7)) ++#define ROTR(x,s) (((x)>>s) | (x)<<(64-s)) ++#define Sigma0(x) ~(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) ++#define Sigma1(x) ~(ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) ++#define sigma0(x) ~(ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) ++#define sigma1(x) ~(ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) ++#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) ++#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) ++ ++#define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \ ++ T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i]; \ ++ h = Sigma0(a) + Maj(a,b,c); \ ++ d += T1; h += T1; } while (0) ++#define ROUND_16_80(i,j,a,b,c,d,e,f,g,h,X) do { \ ++ s0 = X[(j+1)&0x0f]; s0 = sigma0(s0); \ ++ s1 = X[(j+14)&0x0f]; s1 = sigma1(s1); \ ++ T1 = X[(j)&0x0f] += s0 + s1 + X[(j+9)&0x0f]; \ ++ ROUND_00_15(i+j,a,b,c,d,e,f,g,h); } while (0) ++void sha512_block_data_order(SHA512_CTX *ctx, const void *in, ++ unsigned int num) ++{ ++ const SHA_LONG64 *W = in; ++ SHA_LONG64 a, b, c, d, e, f, g, h, s0, s1, T1; ++ SHA_LONG64 X[16]; ++ int i; ++ ++ while (num--) { ++ ++ a = ctx->h[0]; ++ b = ctx->h[1]; ++ c = ctx->h[2]; ++ d = ctx->h[3]; ++ e = ctx->h[4]; ++ f = ctx->h[5]; ++ g = ctx->h[6]; ++ h = ctx->h[7]; ++ ++ T1 = X[0] = PULL64(W[0]); ++ ROUND_00_15(0, a, b, c, d, e, f, g, h); ++ T1 = X[1] = PULL64(W[1]); ++ ROUND_00_15(1, h, a, b, c, d, e, f, g); ++ T1 = X[2] = PULL64(W[2]); ++ ROUND_00_15(2, g, h, a, b, c, d, e, f); ++ T1 = X[3] = PULL64(W[3]); ++ ROUND_00_15(3, f, g, h, a, b, c, d, e); ++ T1 = X[4] = PULL64(W[4]); ++ ROUND_00_15(4, e, f, g, h, a, b, c, d); ++ T1 = X[5] = PULL64(W[5]); ++ ROUND_00_15(5, d, e, f, g, h, a, b, c); ++ T1 = X[6] = PULL64(W[6]); ++ ROUND_00_15(6, c, d, e, f, g, h, a, b); ++ T1 = X[7] = PULL64(W[7]); ++ ROUND_00_15(7, b, c, d, e, f, g, h, a); ++ T1 = X[8] = PULL64(W[8]); ++ ROUND_00_15(8, a, b, c, d, e, f, g, h); ++ T1 = X[9] = PULL64(W[9]); ++ ROUND_00_15(9, h, a, b, c, d, e, f, g); ++ T1 = X[10] = PULL64(W[10]); ++ ROUND_00_15(10, g, h, a, b, c, d, e, f); ++ T1 = X[11] = PULL64(W[11]); ++ ROUND_00_15(11, f, g, h, a, b, c, d, e); ++ T1 = X[12] = PULL64(W[12]); ++ ROUND_00_15(12, e, f, g, h, a, b, c, d); ++ T1 = X[13] = PULL64(W[13]); ++ ROUND_00_15(13, d, e, f, g, h, a, b, c); ++ T1 = X[14] = PULL64(W[14]); ++ ROUND_00_15(14, c, d, e, f, g, h, a, b); ++ T1 = X[15] = PULL64(W[15]); ++ ROUND_00_15(15, b, c, d, e, f, g, h, a); ++ ++ for (i = 16; i < 80; i += 16) { ++ ROUND_16_80(i, 0, a, b, c, d, e, f, g, h, X); ++ ROUND_16_80(i, 1, h, a, b, c, d, e, f, g, X); ++ ROUND_16_80(i, 2, g, h, a, b, c, d, e, f, X); ++ ROUND_16_80(i, 3, f, g, h, a, b, c, d, e, X); ++ ROUND_16_80(i, 4, e, f, g, h, a, b, c, d, X); ++ ROUND_16_80(i, 5, d, e, f, g, h, a, b, c, X); ++ ROUND_16_80(i, 6, c, d, e, f, g, h, a, b, X); ++ ROUND_16_80(i, 7, b, c, d, e, f, g, h, a, X); ++ ROUND_16_80(i, 8, a, b, c, d, e, f, g, h, X); ++ ROUND_16_80(i, 9, h, a, b, c, d, e, f, g, X); ++ ROUND_16_80(i, 10, g, h, a, b, c, d, e, f, X); ++ ROUND_16_80(i, 11, f, g, h, a, b, c, d, e, X); ++ ROUND_16_80(i, 12, e, f, g, h, a, b, c, d, X); ++ ROUND_16_80(i, 13, d, e, f, g, h, a, b, c, X); ++ ROUND_16_80(i, 14, c, d, e, f, g, h, a, b, X); ++ ROUND_16_80(i, 15, b, c, d, e, f, g, h, a, X); ++ } ++ ++ ctx->h[0] += a; ++ ctx->h[1] += b; ++ ctx->h[2] += c; ++ ctx->h[3] += d; ++ ctx->h[4] += e; ++ ctx->h[5] += f; ++ ctx->h[6] += g; ++ ctx->h[7] += h; ++ ++ W += SHA_LBLOCK; ++ } ++} +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/sdiv_costs_1.c +@@ -0,0 +1,40 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O3" } */ ++/* { dg-require-effective-target arm_arch_v8a_ok } */ ++/* { dg-add-options arm_arch_v8a } */ ++ ++/* Both sdiv and udiv can be used here, so prefer udiv. */ ++int f1 (unsigned char *p) ++{ ++ return 100 / p[1]; ++} ++ ++int f2 (unsigned char *p, unsigned short x) ++{ ++ return x / p[0]; ++} ++ ++int f3 (unsigned char *p, int x) ++{ ++ x &= 0x7fffffff; ++ return x / p[0]; ++} ++ ++int f5 (unsigned char *p, unsigned short x) ++{ ++ return x % p[0]; ++} ++ ++/* This should only generate signed divisions. */ ++int f4 (unsigned char *p) ++{ ++ return -100 / p[1]; ++} ++ ++int f6 (unsigned char *p, short x) ++{ ++ return x % p[0]; ++} ++ ++/* { dg-final { scan-assembler-times "udiv\tr\[0-9\]+, r\[0-9\]+, r\[0-9\]+" 4 } } */ ++/* { dg-final { scan-assembler-times "sdiv\tr\[0-9\]+, r\[0-9\]+, r\[0-9\]+" 2 } } */ +--- a/src/gcc/testsuite/gcc.target/arm/stack-checking.c ++++ b/src/gcc/testsuite/gcc.target/arm/stack-checking.c +@@ -1,6 +1,6 @@ + /* { dg-do run { target { *-*-linux* } } } */ ++/* { dg-require-stack-check "" } */ + /* { dg-options "-fstack-check" } */ +-/* { dg-skip-if "" { arm_thumb1 } } */ + + int main(void) + { +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-1.c +@@ -0,0 +1,73 @@ ++/* The option -mslow-flash-data is just for performance tuning, it ++ doesn't totally disable the use of literal pools. But for below ++ simple cases, the use of literal pool should be replaced by ++ movw/movt or read-only constant pool. */ ++ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_cortex_m } */ ++/* { dg-require-effective-target arm_thumb2_ok } */ ++/* { dg-options "-O2 -mthumb -mslow-flash-data" } */ ++ ++float sf; ++double df; ++long long l; ++static char *p = "Hello World"; ++ ++float ++testsf (float *p) ++{ ++ if (*p > 1.1234f) ++ return 2.1234f; ++ else ++ return 3.1234f; ++} ++ ++double ++testdf (double *p) ++{ ++ if (*p > 4.1234) ++ return 2.1234; ++ else ++ return 3.1234; ++} ++ ++long long ++testll (long long *p) ++{ ++ if (*p > 0x123456789ABCDEFll) ++ return 0x111111111ll; ++ else ++ return 0x222222222ll; ++} ++ ++char * ++testchar () ++{ ++ return p + 4; ++} ++ ++int ++foo (int a, int b) ++{ ++ int i; ++ volatile int *labelref = &&label1; ++ ++ if (a > b) ++ { ++ while (i < b) ++ { ++ a += *labelref; ++ i += 1; ++ } ++ goto *labelref; ++ } ++ else ++ b = b + 3; ++ ++ a = a * b; ++ ++label1: ++ return a + b; ++} ++ ++/* { dg-final { scan-assembler-not "\\.(float|l\\?double|\d?byte|short|int|long|quad|word)\\s+\[^.\]" } } */ +--- a/src/gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data.c ++++ b/src//dev/null +@@ -1,73 +0,0 @@ +-/* The option -mslow-flash-data is just for performance tuning, it +- doesn't totally disable the use of literal pools. But for below +- simple cases, the use of literal pool should be replaced by +- movw/movt or read-only constant pool. */ +- +-/* { dg-do compile } */ +-/* { dg-require-effective-target arm_cortex_m } */ +-/* { dg-require-effective-target arm_thumb2_ok } */ +-/* { dg-options "-O2 -mthumb -mslow-flash-data" } */ +- +-float sf; +-double df; +-long long l; +-static char *p = "Hello World"; +- +-float +-testsf (float *p) +-{ +- if (*p > 1.1234f) +- return 2.1234f; +- else +- return 3.1234f; +-} +- +-double +-testdf (double *p) +-{ +- if (*p > 4.1234) +- return 2.1234; +- else +- return 3.1234; +-} +- +-long long +-testll (long long *p) +-{ +- if (*p > 0x123456789ABCDEFll) +- return 0x111111111ll; +- else +- return 0x222222222ll; +-} +- +-char * +-testchar () +-{ +- return p + 4; +-} +- +-int +-foo (int a, int b) +-{ +- int i; +- volatile int *labelref = &&label1; +- +- if (a > b) +- { +- while (i < b) +- { +- a += *labelref; +- i += 1; +- } +- goto *labelref; +- } +- else +- b = b + 3; +- +- a = a * b; +- +-label1: +- return a + b; +-} +- +-/* { dg-final { scan-assembler-not "\\.(float|l\\?double|\d?byte|short|int|long|quad|word)\\s+\[^.\]" } } */ +--- a/src/gcc/testsuite/gcc.target/i386/pr48723.c ++++ b/src/gcc/testsuite/gcc.target/i386/pr48723.c +@@ -1,4 +1,5 @@ + /* { dg-do compile } */ ++/* { dg-require-stack-check "" } */ + /* { dg-options "-fstack-check -mavx" } */ + + struct S0 +--- a/src/gcc/testsuite/gcc.target/i386/pr55672.c ++++ b/src/gcc/testsuite/gcc.target/i386/pr55672.c +@@ -1,4 +1,5 @@ + /* { dg-do compile } */ ++/* { dg-require-stack-check "generic" } */ + /* { dg-options "-O -fstack-check=generic" } */ + + int main () +--- a/src/gcc/testsuite/gcc.target/i386/pr67265-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/pr67265-2.c +@@ -1,4 +1,5 @@ + /* { dg-do compile } */ ++/* { dg-require-stack-check "" } */ + /* { dg-options "-O -fstack-check" } */ + + void foo (int n) +--- a/src/gcc/testsuite/gcc.target/i386/pr67265.c ++++ b/src/gcc/testsuite/gcc.target/i386/pr67265.c +@@ -2,6 +2,7 @@ + /* Reduced testcase by Johannes Dewender */ + + /* { dg-do compile } */ ++/* { dg-require-stack-check "" } */ + /* { dg-options "-O -fstack-check -fPIC" } */ + + int a, b, c, d, e; +--- a/src/gcc/testsuite/gnat.dg/opt49.adb ++++ b/src/gcc/testsuite/gnat.dg/opt49.adb +@@ -1,4 +1,5 @@ + -- { dg-do run } ++-- { dg-require-stack-check "" } + -- { dg-options "-O -fstack-check" } + + procedure Opt49 is +--- a/src/gcc/testsuite/gnat.dg/stack_check1.adb ++++ b/src/gcc/testsuite/gnat.dg/stack_check1.adb +@@ -1,4 +1,5 @@ + -- { dg-do run } ++-- { dg-require-stack-check "" } + -- { dg-options "-fstack-check" } + + -- This test requires architecture- and OS-specific support code for unwinding +--- a/src/gcc/testsuite/gnat.dg/stack_check2.adb ++++ b/src/gcc/testsuite/gnat.dg/stack_check2.adb +@@ -1,4 +1,5 @@ + -- { dg-do run } ++-- { dg-require-stack-check "" } + -- { dg-options "-fstack-check" } + + -- This test requires architecture- and OS-specific support code for unwinding +--- a/src/gcc/testsuite/gnat.dg/stack_check3.adb ++++ b/src/gcc/testsuite/gnat.dg/stack_check3.adb +@@ -1,4 +1,5 @@ + -- { dg-do compile } ++-- { dg-require-stack-check "" } + -- { dg-options "-O -fstack-check" } + + package body Stack_Check3 is +--- a/src/gcc/testsuite/lib/target-supports-dg.exp ++++ b/src/gcc/testsuite/lib/target-supports-dg.exp +@@ -265,6 +265,21 @@ proc dg-require-linker-plugin { args } { + } + } + ++# If this target does not support the "stack-check" option, skip this ++# test. ++ ++proc dg-require-stack-check { args } { ++ set stack_check_available [ check_stack_check_available [lindex $args 1 ] ] ++ if { $stack_check_available == -1 } { ++ upvar name name ++ unresolved "$name" ++ } ++ if { $stack_check_available != 1 } { ++ upvar dg-do-what dg-do-what ++ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] ++ } ++} ++ + # Add any target-specific flags needed for accessing the given list + # of features. This must come after all dg-options. + +--- a/src/gcc/testsuite/lib/target-supports.exp ++++ b/src/gcc/testsuite/lib/target-supports.exp +@@ -1029,6 +1029,17 @@ proc check_effective_target_fstack_protector {} { + } "-fstack-protector"] + } + ++# Return 1 if the target supports -fstack-check or -fstack-check=$stack_kind ++proc check_stack_check_available { stack_kind } { ++ if [string match "" $stack_kind] then { ++ set stack_opt "-fstack-check" ++ } else { set stack_opt "-fstack-check=$stack_kind" } ++ ++ return [check_no_compiler_messages stack_check_$stack_kind executable { ++ int main (void) { return 0; } ++ } "$stack_opt"] ++} ++ + # Return 1 if compilation with -freorder-blocks-and-partition is error-free + # for trivial code, 0 otherwise. As some targets (ARM for example) only + # warn when -fprofile-use is also supplied we test that combination too. +@@ -3365,7 +3376,7 @@ proc add_options_for_arm_v8_1a_neon { flags } { + return "$flags" + } + global et_arm_v8_1a_neon_flags +- return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a" ++ return "$flags $et_arm_v8_1a_neon_flags" + } + + # Add the options needed for ARMv8.2 with the scalar FP16 extension. +@@ -3428,8 +3439,9 @@ proc check_effective_target_arm_neon_ok_nocache { } { + global et_arm_neon_flags + set et_arm_neon_flags "" + if { [check_effective_target_arm32] } { +- foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a"} { ++ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard -march=armv7-a"} { + if { [check_no_compiler_messages_nocache arm_neon_ok object { ++ #include + int dummy; + #ifndef __ARM_NEON__ + #error not NEON +@@ -3454,6 +3466,38 @@ proc check_effective_target_arm_neon_ok { } { + check_effective_target_arm_neon_ok_nocache] + } + ++# Return 1 if this is an ARM target supporting -mfpu=neon without any ++# -mfloat-abi= option. Useful in tests where add_options is not ++# supported (such as lto tests). ++ ++proc check_effective_target_arm_neon_ok_no_float_abi_nocache { } { ++ if { [check_effective_target_arm32] } { ++ foreach flags {"-mfpu=neon"} { ++ if { [check_no_compiler_messages_nocache arm_neon_ok_no_float_abi object { ++ #include ++ int dummy; ++ #ifndef __ARM_NEON__ ++ #error not NEON ++ #endif ++ /* Avoid the case where a test adds -mfpu=neon, but the toolchain is ++ configured for -mcpu=arm926ej-s, for example. */ ++ #if __ARM_ARCH < 7 || __ARM_ARCH_PROFILE == 'M' ++ #error Architecture does not support NEON. ++ #endif ++ } "$flags"] } { ++ return 1 ++ } ++ } ++ } ++ ++ return 0 ++} ++ ++proc check_effective_target_arm_neon_ok_no_float_abi { } { ++ return [check_cached_effective_target arm_neon_ok_no_float_abi \ ++ check_effective_target_arm_neon_ok_no_float_abi_nocache] ++} ++ + proc check_effective_target_arm_crc_ok_nocache { } { + global et_arm_crc_flags + set et_arm_crc_flags "-march=armv8-a+crc" +@@ -3769,12 +3813,13 @@ proc check_effective_target_arm_fp16_hw { } { + # can be selected and a routine to give the flags to select that architecture + # Note: Extra flags may be added to disable options from newer compilers + # (Thumb in particular - but others may be added in the future). +-# -march=armv7ve is special and is handled explicitly after this loop because +-# it needs more than one predefine check to identify. ++# Warning: Do not use check_effective_target_arm_arch_*_ok for architecture ++# extension (eg. ARMv8.1-A) since there is no macro defined for them. See ++# how only __ARM_ARCH_8A__ is checked for ARMv8.1-A. + # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */ + # /* { dg-add-options arm_arch_v5 } */ + # /* { dg-require-effective-target arm_arch_v5_multilib } */ +-foreach { armfunc armflag armdef } { ++foreach { armfunc armflag armdefs } { + v4 "-march=armv4 -marm" __ARM_ARCH_4__ + v4t "-march=armv4t" __ARM_ARCH_4T__ + v5 "-march=armv5 -marm" __ARM_ARCH_5__ +@@ -3789,20 +3834,23 @@ foreach { armfunc armflag armdef } { + v7r "-march=armv7-r" __ARM_ARCH_7R__ + v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__ + v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__ ++ v7ve "-march=armv7ve -marm" ++ "__ARM_ARCH_7A__ && __ARM_FEATURE_IDIV" + v8a "-march=armv8-a" __ARM_ARCH_8A__ + v8_1a "-march=armv8.1a" __ARM_ARCH_8A__ + v8_2a "-march=armv8.2a" __ARM_ARCH_8A__ +- v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__ ++ v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" ++ __ARM_ARCH_8M_BASE__ + v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } { +- eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] { ++ eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] { + proc check_effective_target_arm_arch_FUNC_ok { } { + if { [ string match "*-marm*" "FLAG" ] && + ![check_effective_target_arm_arm_ok] } { + return 0 + } + return [check_no_compiler_messages arm_arch_FUNC_ok assembly { +- #if !defined (DEF) +- #error !DEF ++ #if !(DEFS) ++ #error !(DEFS) + #endif + } "FLAG" ] + } +@@ -3823,26 +3871,6 @@ foreach { armfunc armflag armdef } { + }] + } + +-# Same functions as above but for -march=armv7ve. To uniquely identify +-# -march=armv7ve we need to check for __ARM_ARCH_7A__ as well as +-# __ARM_FEATURE_IDIV otherwise it aliases with armv7-a. +- +-proc check_effective_target_arm_arch_v7ve_ok { } { +- if { [ string match "*-marm*" "-march=armv7ve" ] && +- ![check_effective_target_arm_arm_ok] } { +- return 0 +- } +- return [check_no_compiler_messages arm_arch_v7ve_ok assembly { +- #if !defined (__ARM_ARCH_7A__) || !defined (__ARM_FEATURE_IDIV) +- #error !armv7ve +- #endif +- } "-march=armv7ve" ] +-} +- +-proc add_options_for_arm_arch_v7ve { flags } { +- return "$flags -march=armv7ve" +-} +- + # Return 1 if GCC was configured with --with-mode= + proc check_effective_target_default_mode { } { + +@@ -4038,13 +4066,15 @@ proc check_effective_target_arm_v8_1a_neon_ok_nocache { } { + # since AArch64 only needs the -march setting. + foreach flags {"" "-mfpu=neon-fp-armv8" "-mfloat-abi=softfp" \ + "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} { +- if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object { +- #if !defined (__ARM_FEATURE_QRDMX) +- #error "__ARM_FEATURE_QRDMX not defined" +- #endif +- } "$flags -march=armv8.1-a"] } { +- set et_arm_v8_1a_neon_flags "$flags -march=armv8.1-a" +- return 1 ++ foreach arches { "-march=armv8-a+rdma" "-march=armv8.1-a" } { ++ if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object { ++ #if !defined (__ARM_FEATURE_QRDMX) ++ #error "__ARM_FEATURE_QRDMX not defined" ++ #endif ++ } "$flags $arches"] } { ++ set et_arm_v8_1a_neon_flags "$flags $arches" ++ return 1 ++ } + } + } + +--- a/src/gcc/tree-ssa-dce.c ++++ b/src/gcc/tree-ssa-dce.c +@@ -233,6 +233,8 @@ mark_stmt_if_obviously_necessary (gimple *stmt, bool aggressive) + case BUILT_IN_CALLOC: + case BUILT_IN_ALLOCA: + case BUILT_IN_ALLOCA_WITH_ALIGN: ++ case BUILT_IN_STRDUP: ++ case BUILT_IN_STRNDUP: + return; + + default:; +--- a/src/gcc/tree-ssa-loop-prefetch.c ++++ b/src/gcc/tree-ssa-loop-prefetch.c +@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see + #include "tree-inline.h" + #include "tree-data-ref.h" + #include "diagnostic-core.h" ++#include "dbgcnt.h" + + /* This pass inserts prefetch instructions to optimize cache usage during + accesses to arrays in loops. It processes loops sequentially and: +@@ -227,6 +228,7 @@ struct mem_ref_group + tree step; /* Step of the reference. */ + struct mem_ref *refs; /* References in the group. */ + struct mem_ref_group *next; /* Next group of references. */ ++ unsigned int uid; /* Group UID, used only for debugging. */ + }; + + /* Assigned to PREFETCH_BEFORE when all iterations are to be prefetched. */ +@@ -269,6 +271,7 @@ struct mem_ref + unsigned reuse_distance; /* The amount of data accessed before the first + reuse of this value. */ + struct mem_ref *next; /* The next reference in the group. */ ++ unsigned int uid; /* Ref UID, used only for debugging. */ + unsigned write_p : 1; /* Is it a write? */ + unsigned independent_p : 1; /* True if the reference is independent on + all other references inside the loop. */ +@@ -290,11 +293,8 @@ dump_mem_details (FILE *file, tree base, tree step, + else + print_generic_expr (file, step, TDF_TREE); + fprintf (file, ")\n"); +- fprintf (file, " delta "); +- fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta); +- fprintf (file, "\n"); +- fprintf (file, " %s\n", write_p ? "write" : "read"); +- fprintf (file, "\n"); ++ fprintf (file, " delta " HOST_WIDE_INT_PRINT_DEC "\n", delta); ++ fprintf (file, " %s\n\n", write_p ? "write" : "read"); + } + + /* Dumps information about reference REF to FILE. */ +@@ -302,12 +302,9 @@ dump_mem_details (FILE *file, tree base, tree step, + static void + dump_mem_ref (FILE *file, struct mem_ref *ref) + { +- fprintf (file, "Reference %p:\n", (void *) ref); +- +- fprintf (file, " group %p ", (void *) ref->group); +- +- dump_mem_details (file, ref->group->base, ref->group->step, ref->delta, +- ref->write_p); ++ fprintf (file, "reference %u:%u (", ref->group->uid, ref->uid); ++ print_generic_expr (file, ref->mem, TDF_SLIM); ++ fprintf (file, ")\n"); + } + + /* Finds a group with BASE and STEP in GROUPS, or creates one if it does not +@@ -316,6 +313,9 @@ dump_mem_ref (FILE *file, struct mem_ref *ref) + static struct mem_ref_group * + find_or_create_group (struct mem_ref_group **groups, tree base, tree step) + { ++ /* Global count for setting struct mem_ref_group->uid. */ ++ static unsigned int last_mem_ref_group_uid = 0; ++ + struct mem_ref_group *group; + + for (; *groups; groups = &(*groups)->next) +@@ -335,6 +335,7 @@ find_or_create_group (struct mem_ref_group **groups, tree base, tree step) + group->base = base; + group->step = step; + group->refs = NULL; ++ group->uid = ++last_mem_ref_group_uid; + group->next = *groups; + *groups = group; + +@@ -348,11 +349,14 @@ static void + record_ref (struct mem_ref_group *group, gimple *stmt, tree mem, + HOST_WIDE_INT delta, bool write_p) + { ++ unsigned int last_mem_ref_uid = 0; + struct mem_ref **aref; + + /* Do not record the same address twice. */ + for (aref = &group->refs; *aref; aref = &(*aref)->next) + { ++ last_mem_ref_uid = (*aref)->uid; ++ + /* It does not have to be possible for write reference to reuse the read + prefetch, or vice versa. */ + if (!WRITE_CAN_USE_READ_PREFETCH +@@ -381,9 +385,16 @@ record_ref (struct mem_ref_group *group, gimple *stmt, tree mem, + (*aref)->next = NULL; + (*aref)->independent_p = false; + (*aref)->storent_p = false; ++ (*aref)->uid = last_mem_ref_uid + 1; + + if (dump_file && (dump_flags & TDF_DETAILS)) +- dump_mem_ref (dump_file, *aref); ++ { ++ dump_mem_ref (dump_file, *aref); ++ ++ fprintf (dump_file, " group %u ", group->uid); ++ dump_mem_details (dump_file, group->base, group->step, delta, ++ write_p); ++ } + } + + /* Release memory references in GROUPS. */ +@@ -938,7 +949,7 @@ prune_group_by_reuse (struct mem_ref_group *group) + + if (dump_file && (dump_flags & TDF_DETAILS)) + { +- fprintf (dump_file, "Reference %p:", (void *) ref_pruned); ++ dump_mem_ref (dump_file, ref_pruned); + + if (ref_pruned->prefetch_before == PREFETCH_ALL + && ref_pruned->prefetch_mod == 1) +@@ -986,8 +997,8 @@ should_issue_prefetch_p (struct mem_ref *ref) + if (ref->prefetch_before != PREFETCH_ALL) + { + if (dump_file && (dump_flags & TDF_DETAILS)) +- fprintf (dump_file, "Ignoring %p due to prefetch_before\n", +- (void *) ref); ++ fprintf (dump_file, "Ignoring reference %u:%u due to prefetch_before\n", ++ ref->group->uid, ref->uid); + return false; + } + +@@ -995,7 +1006,7 @@ should_issue_prefetch_p (struct mem_ref *ref) + if (ref->storent_p) + { + if (dump_file && (dump_flags & TDF_DETAILS)) +- fprintf (dump_file, "Ignoring nontemporal store %p\n", (void *) ref); ++ fprintf (dump_file, "Ignoring nontemporal store reference %u:%u\n", ref->group->uid, ref->uid); + return false; + } + +@@ -1058,7 +1069,14 @@ schedule_prefetches (struct mem_ref_group *groups, unsigned unroll_factor, + if (2 * remaining_prefetch_slots < prefetch_slots) + continue; + ++ /* Stop prefetching if debug counter is activated. */ ++ if (!dbg_cnt (prefetch)) ++ continue; ++ + ref->issue_prefetch_p = true; ++ if (dump_file && (dump_flags & TDF_DETAILS)) ++ fprintf (dump_file, "Decided to issue prefetch for reference %u:%u\n", ++ ref->group->uid, ref->uid); + + if (remaining_prefetch_slots <= prefetch_slots) + return true; +@@ -1122,9 +1140,9 @@ issue_prefetch_ref (struct mem_ref *ref, unsigned unroll_factor, unsigned ahead) + bool nontemporal = ref->reuse_distance >= L2_CACHE_SIZE_BYTES; + + if (dump_file && (dump_flags & TDF_DETAILS)) +- fprintf (dump_file, "Issued%s prefetch for %p.\n", ++ fprintf (dump_file, "Issued%s prefetch for reference %u:%u.\n", + nontemporal ? " nontemporal" : "", +- (void *) ref); ++ ref->group->uid, ref->uid); + + bsi = gsi_for_stmt (ref->stmt); + +@@ -1144,8 +1162,8 @@ issue_prefetch_ref (struct mem_ref *ref, unsigned unroll_factor, unsigned ahead) + delta = (ahead + ap * ref->prefetch_mod) * + int_cst_value (ref->group->step); + addr = fold_build_pointer_plus_hwi (addr_base, delta); +- addr = force_gimple_operand_gsi (&bsi, unshare_expr (addr), true, NULL, +- true, GSI_SAME_STMT); ++ addr = force_gimple_operand_gsi (&bsi, unshare_expr (addr), true, ++ NULL, true, GSI_SAME_STMT); + } + else + { +@@ -1229,8 +1247,8 @@ mark_nontemporal_store (struct mem_ref *ref) + return false; + + if (dump_file && (dump_flags & TDF_DETAILS)) +- fprintf (dump_file, "Marked reference %p as a nontemporal store.\n", +- (void *) ref); ++ fprintf (dump_file, "Marked reference %u:%u as a nontemporal store.\n", ++ ref->group->uid, ref->uid); + + gimple_assign_set_nontemporal_move (ref->stmt, true); + ref->storent_p = true; +@@ -1340,7 +1358,7 @@ should_unroll_loop_p (struct loop *loop, struct tree_niter_desc *desc, + + /* Determine the coefficient by that unroll LOOP, from the information + contained in the list of memory references REFS. Description of +- umber of iterations of LOOP is stored to DESC. NINSNS is the number of ++ number of iterations of LOOP is stored to DESC. NINSNS is the number of + insns of the LOOP. EST_NITER is the estimated number of iterations of + the loop, or -1 if no estimate is available. */ + +@@ -1715,8 +1733,8 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs, + fprintf (dump_file, "Reuse distances:\n"); + for (gr = refs; gr; gr = gr->next) + for (ref = gr->refs; ref; ref = ref->next) +- fprintf (dump_file, " ref %p distance %u\n", +- (void *) ref, ref->reuse_distance); ++ fprintf (dump_file, " reference %u:%u distance %u\n", ++ ref->group->uid, ref->uid, ref->reuse_distance); + } + + return true; +--- a/src/libgcc/config.host ++++ b/src/libgcc/config.host +@@ -231,6 +231,10 @@ case ${host} in + ;; + esac + ;; ++*-*-fuchsia*) ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia" ++ extra_parts="crtbegin.o crtend.o" ++ ;; + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) + tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux" + extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" +@@ -342,6 +346,10 @@ aarch64*-*-freebsd*) + tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" + md_unwind_header=aarch64/freebsd-unwind.h + ;; ++aarch64*-*-fuchsia*) ++ tmake_file="${tmake_file} ${cpu_type}/t-aarch64" ++ tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp" ++ ;; + aarch64*-*-linux*) + extra_parts="$extra_parts crtfastmath.o" + md_unwind_header=aarch64/linux-unwind.h +@@ -394,6 +402,12 @@ arm*-*-freebsd*) # ARM FreeBSD EABI + unwind_header=config/arm/unwind-arm.h + tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp" + ;; ++arm*-*-fuchsia*) ++ tmake_file="${tmake_file} arm/t-arm arm/t-elf arm/t-bpabi" ++ tmake_file="${tmake_file} arm/tsoftfp t-softfp" ++ tm_file="${tm_file} arm/bpabi-lib.h" ++ unwind_header=config/arm/unwind-arm.h ++ ;; + arm*-*-netbsdelf*) + tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover" + ;; +@@ -588,6 +602,9 @@ i[34567]86-*-elf*) + x86_64-*-elf* | x86_64-*-rtems*) + tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic" + ;; ++x86_64-*-fuchsia*) ++ tmake_file="$tmake_file t-libgcc-pic" ++ ;; + i[34567]86-*-dragonfly*) + tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff" + md_unwind_header=i386/dragonfly-unwind.h +--- a/src/libgcc/config/arm/unwind-arm.h ++++ b/src/libgcc/config/arm/unwind-arm.h +@@ -49,7 +49,7 @@ extern "C" { + return 0; + + #if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \ +- || defined(__FreeBSD__) ++ || defined(__FreeBSD__) || defined(__fuchsia__) + /* Pc-relative indirect. */ + #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel | DW_EH_PE_indirect) + tmp += ptr; +--- /dev/null ++++ b/src/libgcc/config/t-slibgcc-fuchsia +@@ -0,0 +1,44 @@ ++# Copyright (C) 2017 Free Software Foundation, Inc. ++# ++# This file is part of GCC. ++# ++# GCC 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. ++# ++# GCC 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 GCC; see the file COPYING3. If not see ++# . ++ ++# Fuchsia-specific shared library overrides. ++ ++SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \ ++ $(LDFLAGS) ++# Copyright (C) 2017 Free Software Foundation, Inc. ++# ++# This file is part of GCC. ++# ++# GCC 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. ++# ++# GCC 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 GCC; see the file COPYING3. If not see ++# . ++ ++# Fuchsia-specific shared library overrides. ++ ++SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \ ++ $(LDFLAGS) +--- /dev/null ++++ b/src/libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h +@@ -0,0 +1,47 @@ ++// Optimizations for random number functions, aarch64 version -*- C++ -*- ++ ++// 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. ++ ++// 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 ++// . ++ ++/** @file bits/opt_random.h ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{random} ++ */ ++ ++#ifndef _BITS_OPT_RANDOM_H ++#define _BITS_OPT_RANDOM_H 1 ++ ++#pragma GCC system_header ++ ++ ++namespace std _GLIBCXX_VISIBILITY (default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ ++ ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace ++ ++ ++#endif // _BITS_OPT_RANDOM_H +--- /dev/null ++++ b/src/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h +@@ -0,0 +1,180 @@ ++// Optimizations for random number extensions, aarch64 version -*- C++ -*- ++ ++// 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. ++ ++// 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 ++// . ++ ++/** @file ext/random.tcc ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{ext/random} ++ */ ++ ++#ifndef _EXT_OPT_RANDOM_H ++#define _EXT_OPT_RANDOM_H 1 ++ ++#pragma GCC system_header ++ ++#ifdef __ARM_NEON ++ ++#ifdef __AARCH64EB__ ++# define __VEXT(_A,_B,_C) __builtin_shuffle (_A, _B, (__Uint8x16_t) \ ++ {16-_C, 17-_C, 18-_C, 19-_C, 20-_C, 21-_C, 22-_C, 23-_C, \ ++ 24-_C, 25-_C, 26-_C, 27-_C, 28-_C, 29-_C, 30-_C, 31-_C}) ++#else ++# define __VEXT(_A,_B,_C) __builtin_shuffle (_B, _A, (__Uint8x16_t) \ ++ {_C, _C+1, _C+2, _C+3, _C+4, _C+5, _C+6, _C+7, \ ++ _C+8, _C+9, _C+10, _C+11, _C+12, _C+13, _C+14, _C+15}) ++#endif ++ ++namespace __gnu_cxx _GLIBCXX_VISIBILITY (default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ namespace { ++ // Logical Shift right 128-bits by c * 8 bits ++ ++ __extension__ extern __inline __Uint32x4_t ++ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ++ __aarch64_lsr_128 (__Uint8x16_t __a, __const int __c) ++ { ++ const __Uint8x16_t __zero = {0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++ return (__Uint32x4_t) __VEXT (__zero, __a, __c); ++ } ++ ++ // Logical Shift left 128-bits by c * 8 bits ++ ++ __extension__ extern __inline __Uint32x4_t ++ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ++ __aarch64_lsl_128 (__Uint8x16_t __a, __const int __c) ++ { ++ const __Uint8x16_t __zero = {0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++ return (__Uint32x4_t) __VEXT (__a, __zero, 16 - __c); ++ } ++ ++ template ++ inline __Uint32x4_t __aarch64_recursion (__Uint32x4_t __a, ++ __Uint32x4_t __b, ++ __Uint32x4_t __c, ++ __Uint32x4_t __d, ++ __Uint32x4_t __e) ++ { ++ __Uint32x4_t __y = (__b >> __sr1); ++ __Uint32x4_t __z = __aarch64_lsr_128 ((__Uint8x16_t) __c, __sr2); ++ ++ __Uint32x4_t __v = __d << __sl1; ++ ++ __z = __z ^ __a; ++ __z = __z ^ __v; ++ ++ __Uint32x4_t __x = __aarch64_lsl_128 ((__Uint8x16_t) __a, __sl2); ++ ++ __y = __y & __e; ++ __z = __z ^ __x; ++ return __z ^ __y; ++ } ++} ++ ++#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_GEN_READ 1 ++ template ++ void simd_fast_mersenne_twister_engine<_UIntType, __m, ++ __pos1, __sl1, __sl2, __sr1, __sr2, ++ __msk1, __msk2, __msk3, __msk4, ++ __parity1, __parity2, __parity3, ++ __parity4>:: ++ _M_gen_rand (void) ++ { ++ __Uint32x4_t __r1 = _M_state[_M_nstate - 2]; ++ __Uint32x4_t __r2 = _M_state[_M_nstate - 1]; ++ ++ __Uint32x4_t __aData = {__msk1, __msk2, __msk3, __msk4}; ++ ++ size_t __i; ++ for (__i = 0; __i < _M_nstate - __pos1; ++__i) ++ { ++ __Uint32x4_t __r = __aarch64_recursion<__sl1, __sl2, __sr1, __sr2> ++ (_M_state[__i], _M_state[__i + __pos1], __r1, __r2, __aData); ++ ++ _M_state[__i] = __r; ++ ++ __r1 = __r2; ++ __r2 = __r; ++ } ++ for (; __i < _M_nstate; ++__i) ++ { ++ __Uint32x4_t __r = __aarch64_recursion<__sl1, __sl2, __sr1, __sr2> ++ (_M_state[__i], _M_state[__i + __pos1 - _M_nstate], __r1, __r2, ++ __aData); ++ ++ _M_state[__i] = __r; ++ ++ __r1 = __r2; ++ __r2 = __r; ++ } ++ ++ _M_pos = 0; ++ } ++ ++ ++#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_OPERATOREQUAL 1 ++ template ++ bool ++ operator==(const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType, ++ __m, __pos1, __sl1, __sl2, __sr1, __sr2, ++ __msk1, __msk2, __msk3, __msk4, ++ __parity1, __parity2, __parity3, __parity4>& __lhs, ++ const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType, ++ __m, __pos1, __sl1, __sl2, __sr1, __sr2, ++ __msk1, __msk2, __msk3, __msk4, ++ __parity1, __parity2, __parity3, __parity4>& __rhs) ++ { ++ if (__lhs._M_pos != __rhs._M_pos) ++ return false; ++ ++ __Uint32x4_t __res = __lhs._M_state[0] ^ __rhs._M_state[0]; ++ ++ for (size_t __i = 1; __i < __lhs._M_nstate; ++__i) ++ __res |= __lhs._M_state[__i] ^ __rhs._M_state[__i]; ++ ++ return (__int128) __res == 0; ++ } ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++ } // namespace ++ ++#endif // __ARM_NEON ++ ++#endif // _EXT_OPT_RANDOM_H +--- a/src/libstdc++-v3/include/ext/random ++++ b/src/libstdc++-v3/include/ext/random +@@ -184,6 +184,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + #ifdef __SSE2__ + __m128i _M_state[_M_nstate]; + #endif ++#ifdef __ARM_NEON ++#ifdef __aarch64__ ++ __Uint32x4_t _M_state[_M_nstate]; ++#endif ++#endif + uint32_t _M_state32[_M_nstate32]; + result_type _M_stateT[state_size]; + } __attribute__ ((__aligned__ (16))); --- gcc-7-7.2.0.orig/debian/patches/gcc-mips64-stack-spilling.diff +++ gcc-7-7.2.0/debian/patches/gcc-mips64-stack-spilling.diff @@ -0,0 +1,16 @@ +--- a/src/gcc/lra-constraints.c ++++ b/src/gcc/lra-constraints.c +@@ -4235,7 +4235,12 @@ curr_insn_transform (bool check_only_p) + && (goal_alt[i] == NO_REGS + || (simplify_subreg_regno + (ira_class_hard_regs[goal_alt[i]][0], +- GET_MODE (reg), byte, mode) >= 0))))) ++ GET_MODE (reg), byte, mode) >= 0)))) ++ || (type != OP_IN ++ && GET_MODE_PRECISION (mode) ++ < GET_MODE_PRECISION (GET_MODE (reg)) ++ && GET_MODE_SIZE (GET_MODE (reg)) <= UNITS_PER_WORD ++ && WORD_REGISTER_OPERATIONS)) + { + /* An OP_INOUT is required when reloading a subreg of a + mode wider than a word to ensure that data beyond the --- gcc-7-7.2.0.orig/debian/patches/gcc-multiarch.diff +++ gcc-7-7.2.0/debian/patches/gcc-multiarch.diff @@ -0,0 +1,254 @@ +# DP: - Remaining multiarch patches, not yet submitted upstream. +# DP: - Add MULTIARCH_DIRNAME definitions for multilib configurations, +# DP: which are used for the non-multilib builds. + +2013-06-12 Matthias Klose + + * config/i386/t-linux64: Set MULTIARCH_DIRNAME. + * config/i386/t-kfreebsd: Set MULTIARCH_DIRNAME. + * config.gcc (i[34567]86-*-linux* | x86_64-*-linux*): Prepend + i386/t-linux to $tmake_file; + set default ABI to N64 for mips64el. + * config/mips/t-linux64: Set MULTIARCH_DIRNAME. + * config/rs6000/t-linux64: Set MULTIARCH_DIRNAME. + * config/s390/t-linux64: Set MULTIARCH_DIRNAME. + * config/sparc/t-linux64: Set MULTIARCH_DIRNAME. + * src/gcc/config/mips/mips.h: (/usr)/lib as default path. + +Index: b/src/gcc/config/sh/t-linux +=================================================================== +--- a/src/gcc/config/sh/t-linux ++++ b/src/gcc/config/sh/t-linux +@@ -1,2 +1,10 @@ + MULTILIB_DIRNAMES= + MULTILIB_MATCHES = ++ ++ifneq (,$(findstring sh4,$(target))) ++MULTILIB_OSDIRNAMES = .:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu ++MULTIARCH_DIRNAME = $(call if_multiarch,sh4-linux-gnu) ++else ++MULTILIB_OSDIRNAMES = .:sh3-linux-gnu sh3_nofpu-linux-gnu:sh3-linux-gnu ++MULTIARCH_DIRNAME = $(call if_multiarch,sh3-linux-gnu) ++endif +Index: b/src/gcc/config/sparc/t-linux64 +=================================================================== +--- a/src/gcc/config/sparc/t-linux64 ++++ b/src/gcc/config/sparc/t-linux64 +@@ -27,3 +27,5 @@ MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 + MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu) + MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu) ++ ++MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu) +Index: b/src/gcc/config/s390/t-linux64 +=================================================================== +--- a/src/gcc/config/s390/t-linux64 ++++ b/src/gcc/config/s390/t-linux64 +@@ -9,3 +9,5 @@ MULTILIB_OPTIONS = m64/m31 + MULTILIB_DIRNAMES = 64 32 + MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) + MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) ++ ++MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu) +Index: b/src/gcc/config/rs6000/t-linux64 +=================================================================== +--- a/src/gcc/config/rs6000/t-linux64 ++++ b/src/gcc/config/rs6000/t-linux64 +@@ -31,6 +31,8 @@ MULTILIB_EXTRA_OPTS := + MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) + MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) + ++MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu) ++ + rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c + $(COMPILE) $< + $(POSTCOMPILE) +Index: b/src/gcc/config/i386/t-linux64 +=================================================================== +--- a/src/gcc/config/i386/t-linux64 ++++ b/src/gcc/config/i386/t-linux64 +@@ -36,3 +36,13 @@ MULTILIB_DIRNAMES = $(patsubst m%, %, + MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) + MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) + MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ++ ++ifneq (,$(findstring x86_64,$(target))) ++ ifneq (,$(findstring biarchx32.h,$(tm_include_list))) ++ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnux32) ++ else ++ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnu) ++ endif ++else ++ MULTIARCH_DIRNAME = $(call if_multiarch,i386-linux-gnu) ++endif +Index: b/src/gcc/config/i386/t-kfreebsd +=================================================================== +--- a/src/gcc/config/i386/t-kfreebsd ++++ b/src/gcc/config/i386/t-kfreebsd +@@ -1,5 +1,9 @@ +-MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu) ++ifeq (,$(MULTIARCH_DIRNAME)) ++ MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu) ++endif + + # MULTILIB_OSDIRNAMES are set in t-linux64. + KFREEBSD_OS = $(filter kfreebsd%, $(word 3, $(subst -, ,$(target)))) + MULTILIB_OSDIRNAMES := $(filter-out mx32=%,$(subst linux,$(KFREEBSD_OS),$(MULTILIB_OSDIRNAMES))) ++ ++MULTIARCH_DIRNAME := $(subst linux,$(KFREEBSD_OS),$(MULTIARCH_DIRNAME)) +Index: b/src/gcc/config/mips/t-linux64 +=================================================================== +--- a/src/gcc/config/mips/t-linux64 ++++ b/src/gcc/config/mips/t-linux64 +@@ -18,9 +18,22 @@ + + MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64 + MULTILIB_DIRNAMES = n32 32 64 ++MIPS_R6 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),r6) ++MIPS_32 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),32) ++MIPS_ISA = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),isa) + MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) + MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) + MULTILIB_OSDIRNAMES = \ + ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ + ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ + ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++ ++ifneq (,$(findstring abin32,$(target))) ++MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) ++else ++ifneq (,$(findstring abi64,$(target))) ++MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++else ++MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) ++endif ++endif +Index: b/src/gcc/config.gcc +=================================================================== +--- a/src/gcc/config.gcc ++++ b/src/gcc/config.gcc +@@ -2100,6 +2100,11 @@ mips*-*-linux*) # Linux MIPS, either + target_cpu_default=MASK_SOFT_FLOAT_ABI + enable_mips_multilibs="yes" + ;; ++ mipsisa64r6*-*-linux-gnuabi64) ++ default_mips_abi=64 ++ default_mips_arch=mips64r6 ++ enable_mips_multilibs="yes" ++ ;; + mipsisa64r6*-*-linux*) + default_mips_abi=n32 + default_mips_arch=mips64r6 +@@ -2110,6 +2115,10 @@ mips*-*-linux*) # Linux MIPS, either + default_mips_arch=mips64r2 + enable_mips_multilibs="yes" + ;; ++ mips64*-*-linux-gnuabi64 | mipsisa64*-*-linux-gnuabi64) ++ default_mips_abi=64 ++ enable_mips_multilibs="yes" ++ ;; + mips64*-*-linux* | mipsisa64*-*-linux*) + default_mips_abi=n32 + enable_mips_multilibs="yes" +@@ -3065,6 +3074,16 @@ powerpc*-*-* | rs6000-*-*) + tm_file="${tm_file} rs6000/option-defaults.h" + esac + ++# non-glibc systems ++case ${target} in ++*-linux-musl*) ++ tmake_file="${tmake_file} t-musl" ++ ;; ++*-linux-uclibc*) ++ tmake_file="${tmake_file} t-uclibc" ++ ;; ++esac ++ + # Build mkoffload tool + case ${target} in + *-intelmic-* | *-intelmicemul-*) +@@ -4512,7 +4531,7 @@ case ${target} in + i[34567]86-*-darwin* | x86_64-*-darwin*) + ;; + i[34567]86-*-linux* | x86_64-*-linux*) +- tmake_file="$tmake_file i386/t-linux" ++ tmake_file="i386/t-linux $tmake_file" + ;; + i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu) + tmake_file="$tmake_file i386/t-kfreebsd" +Index: b/src/gcc/config/aarch64/t-aarch64-linux +=================================================================== +--- a/src/gcc/config/aarch64/t-aarch64-linux ++++ b/src/gcc/config/aarch64/t-aarch64-linux +@@ -22,7 +22,7 @@ LIB1ASMSRC = aarch64/lib1funcs.asm + LIB1ASMFUNCS = _aarch64_sync_cache_range + + AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) +-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) +-MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) ++MULTILIB_OSDIRNAMES = mabi.lp64=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) ++MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)_ilp32-linux-gnu) + +-MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32 ++MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) +Index: b/src/gcc/config/mips/mips.h +=================================================================== +--- a/src/gcc/config/mips/mips.h ++++ b/src/gcc/config/mips/mips.h +@@ -3499,16 +3499,6 @@ struct GTY(()) machine_function { + #define PMODE_INSN(NAME, ARGS) \ + (Pmode == SImode ? NAME ## _si ARGS : NAME ## _di ARGS) + +-/* If we are *not* using multilibs and the default ABI is not ABI_32 we +- need to change these from /lib and /usr/lib. */ +-#if MIPS_ABI_DEFAULT == ABI_N32 +-#define STANDARD_STARTFILE_PREFIX_1 "/lib32/" +-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/" +-#elif MIPS_ABI_DEFAULT == ABI_64 +-#define STANDARD_STARTFILE_PREFIX_1 "/lib64/" +-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/" +-#endif +- + /* Load store bonding is not supported by micromips and fix_24k. The + performance can be degraded for those targets. Hence, do not bond for + micromips or fix_24k. */ +Index: b/src/gcc/config/tilegx/t-tilegx +=================================================================== +--- a/src/gcc/config/tilegx/t-tilegx ++++ b/src/gcc/config/tilegx/t-tilegx +@@ -1,6 +1,7 @@ + MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 +-MULTILIB_OSDIRNAMES = ../lib ../lib32 ++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:tilegx-linux-gnu) ../lib32$(call if_multiarch,:tilegx32-linux-gnu) ++MULTIARCH_DIRNAME = $(call if_multiarch,tilegx-linux-gnu) + + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -521,7 +521,7 @@ SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER + STMP_FIXINC = @STMP_FIXINC@ + + # Test to see whether exists in the system header files. +-LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ] ++LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h -o -f $(SYSTEM_HEADER_DIR)/$(MULTIARCH_DIRNAME)/limits.h ] + + # Directory for prefix to system directories, for + # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc. +Index: b/src/gcc/config/t-musl +=================================================================== +--- /dev/null ++++ b/src/gcc/config/t-musl +@@ -0,0 +1,2 @@ ++MULTIARCH_DIRNAME := $(subst -linux-gnu,-linux-musl,$(MULTIARCH_DIRNAME)) ++MULTILIB_OSDIRNAMES := $(subst -linux-gnu,-linux-musl,$(MULTILIB_OSDIRNAMES)) +Index: b/src/gcc/config/t-uclibc +=================================================================== +--- /dev/null ++++ b/src/gcc/config/t-uclibc +@@ -0,0 +1,2 @@ ++MULTIARCH_DIRNAME := $(subst -linux-gnu,-linux-uclibc,$(MULTIARCH_DIRNAME)) ++MULTILIB_OSDIRNAMES := $(subst -linux-gnu,-linux-uclibc,$(MULTILIB_OSDIRNAMES)) --- gcc-7-7.2.0.orig/debian/patches/gcc-multilib-multiarch.diff +++ gcc-7-7.2.0/debian/patches/gcc-multilib-multiarch.diff @@ -0,0 +1,126 @@ +# DP: Don't auto-detect multilib osdirnames. + +Index: b/src/gcc/config/sparc/t-linux64 +=================================================================== +--- a/src/gcc/config/sparc/t-linux64 ++++ b/src/gcc/config/sparc/t-linux64 +@@ -25,7 +25,12 @@ + + MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 ++ifneq (,$(findstring sparc64,$(target))) ++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:sparc64-linux-gnu) ++MULTILIB_OSDIRNAMES += ../lib32$(call if_multiarch,:sparc-linux-gnu) ++else + MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu) +-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu) ++MULTILIB_OSDIRNAMES += ../lib$(call if_multiarch,:sparc-linux-gnu) ++endif + + MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu) +Index: b/src/gcc/config/s390/t-linux64 +=================================================================== +--- a/src/gcc/config/s390/t-linux64 ++++ b/src/gcc/config/s390/t-linux64 +@@ -7,7 +7,12 @@ + + MULTILIB_OPTIONS = m64/m31 + MULTILIB_DIRNAMES = 64 32 ++ifneq (,$(findstring s390x,$(target))) ++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:s390x-linux-gnu) ++MULTILIB_OSDIRNAMES += ../lib32$(call if_multiarch,:s390-linux-gnu) ++else + MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) +-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) ++MULTILIB_OSDIRNAMES += ../lib$(call if_multiarch,:s390-linux-gnu) ++endif + + MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu) +Index: b/src/gcc/config/rs6000/t-linux64 +=================================================================== +--- a/src/gcc/config/rs6000/t-linux64 ++++ b/src/gcc/config/rs6000/t-linux64 +@@ -28,8 +28,13 @@ + MULTILIB_OPTIONS := m64/m32 + MULTILIB_DIRNAMES := 64 32 + MULTILIB_EXTRA_OPTS := ++ifneq (,$(findstring powerpc64,$(target))) ++MULTILIB_OSDIRNAMES := m64=../lib$(call if_multiarch,:powerpc64-linux-gnu) ++MULTILIB_OSDIRNAMES += m32=../lib32$(call if_multiarch,:powerpc-linux-gnu) ++else + MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) +-MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) ++MULTILIB_OSDIRNAMES += m32=../lib$(call if_multiarch,:powerpc-linux-gnu) ++endif + + MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu) + +Index: b/src/gcc/config/i386/t-linux64 +=================================================================== +--- a/src/gcc/config/i386/t-linux64 ++++ b/src/gcc/config/i386/t-linux64 +@@ -33,9 +33,19 @@ + comma=, + MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) + MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) ++ifneq (,$(findstring gnux32,$(target))) + MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) +-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) ++MULTILIB_OSDIRNAMES+= m32=../lib32$(call if_multiarch,:i386-linux-gnu) ++MULTILIB_OSDIRNAMES+= mx32=../lib$(call if_multiarch,:x86_64-linux-gnux32) ++else ifneq (,$(findstring x86_64,$(target))) ++MULTILIB_OSDIRNAMES = m64=../lib$(call if_multiarch,:x86_64-linux-gnu) ++MULTILIB_OSDIRNAMES+= m32=../lib32$(call if_multiarch,:i386-linux-gnu) + MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ++else ++MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) ++MULTILIB_OSDIRNAMES+= m32=../lib$(call if_multiarch,:i386-linux-gnu) ++MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ++endif + + ifneq (,$(findstring x86_64,$(target))) + ifneq (,$(findstring biarchx32.h,$(tm_include_list))) +Index: b/src/gcc/config/mips/t-linux64 +=================================================================== +--- a/src/gcc/config/mips/t-linux64 ++++ b/src/gcc/config/mips/t-linux64 +@@ -23,10 +23,23 @@ MIPS_32 = $(if $(findstring r6, $(firstw + MIPS_ISA = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),isa) + MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) + MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) ++ ++ifneq (,$(findstring gnuabi64,$(target))) ++MULTILIB_OSDIRNAMES = \ ++ ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ ++ ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ ++ ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++else ifneq (,$(findstring gnuabin32,$(target))) ++MULTILIB_OSDIRNAMES = \ ++ ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ ++ ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ ++ ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++else + MULTILIB_OSDIRNAMES = \ +- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ +- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ +- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++ ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ ++ ../lib$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ ++ ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++endif + + ifneq (,$(findstring abin32,$(target))) + MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) +Index: b/src/gcc/config/rs6000/t-linux +=================================================================== +--- a/src/gcc/config/rs6000/t-linux ++++ b/src/gcc/config/rs6000/t-linux +@@ -2,7 +2,7 @@ + # or soft-float. + ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float))) + ifneq (,$(findstring powerpc64,$(target))) +-MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu) ++MULTILIB_OSDIRNAMES := .=../lib$(call if_multiarch,:powerpc64-linux-gnu) + else + ifneq (,$(findstring spe,$(target))) + MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1) --- gcc-7-7.2.0.orig/debian/patches/gcc-target-include-asm.diff +++ gcc-7-7.2.0/debian/patches/gcc-target-include-asm.diff @@ -0,0 +1,15 @@ +# DP: Search $(builddir)/sys-include for the asm header files + +Index: b/src/configure.ac +=================================================================== +--- a/src/configure.ac ++++ b/src/configure.ac +@@ -3156,7 +3156,7 @@ fi + # being built; programs in there won't even run. + if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then + # Search for pre-installed headers if nothing else fits. +- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include' ++ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -isystem $(CURDIR)/sys-include' + fi + + if test "x${use_gnu_ld}" = x && --- gcc-7-7.2.0.orig/debian/patches/gcc-textdomain.diff +++ gcc-7-7.2.0/debian/patches/gcc-textdomain.diff @@ -0,0 +1,96 @@ +# DP: Set gettext's domain and textdomain to the versioned package name. + +Index: b/src/gcc/intl.c +=================================================================== +--- a/src/gcc/intl.c ++++ b/src/gcc/intl.c +@@ -55,8 +55,8 @@ gcc_init_libintl (void) + setlocale (LC_ALL, ""); + #endif + +- (void) bindtextdomain ("gcc", LOCALEDIR); +- (void) textdomain ("gcc"); ++ (void) bindtextdomain ("gcc-7", LOCALEDIR); ++ (void) textdomain ("gcc-7"); + + /* Opening quotation mark. */ + open_quote = _("`"); +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -4117,8 +4117,8 @@ install-po: + dir=$(localedir)/$$lang/LC_MESSAGES; \ + echo $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \ +- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ +- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ ++ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-7.mo; \ ++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-7.mo; \ + done + + # Rule for regenerating the message template (gcc.pot). +Index: b/src/libcpp/init.c +=================================================================== +--- a/src/libcpp/init.c ++++ b/src/libcpp/init.c +@@ -155,7 +155,7 @@ init_library (void) + init_trigraph_map (); + + #ifdef ENABLE_NLS +- (void) bindtextdomain (PACKAGE, LOCALEDIR); ++ (void) bindtextdomain (PACKAGE PACKAGE_SUFFIX, LOCALEDIR); + #endif + } + } +Index: b/src/libcpp/system.h +=================================================================== +--- a/src/libcpp/system.h ++++ b/src/libcpp/system.h +@@ -280,7 +280,7 @@ extern int errno; + #endif + + #ifndef _ +-# define _(msgid) dgettext (PACKAGE, msgid) ++# define _(msgid) dgettext (PACKAGE PACKAGE_SUFFIX, msgid) + #endif + + #ifndef N_ +Index: b/src/libcpp/Makefile.in +=================================================================== +--- a/src/libcpp/Makefile.in ++++ b/src/libcpp/Makefile.in +@@ -49,6 +49,7 @@ LDFLAGS = @LDFLAGS@ + LIBICONV = @LIBICONV@ + LIBINTL = @LIBINTL@ + PACKAGE = @PACKAGE@ ++PACKAGE_SUFFIX = -7 + RANLIB = @RANLIB@ + SHELL = @SHELL@ + USED_CATALOGS = @USED_CATALOGS@ +@@ -72,10 +73,12 @@ depcomp = $(SHELL) $(srcdir)/../depcomp + + INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \ + -I$(srcdir)/include ++DEBCPPFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\" + +-ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) ++ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) \ ++ $(DEBCPPFLAGS) + ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(NOEXCEPTION_FLAGS) $(INCLUDES) \ +- $(CPPFLAGS) $(PICFLAG) ++ $(CPPFLAGS) $(PICFLAG) $(DEBCPPFLAGS) + + # The name of the compiler to use. + COMPILER = $(CXX) +@@ -164,8 +167,8 @@ install-strip install: all installdirs + else continue; \ + fi; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ +- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ +- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ ++ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \ ++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \ + done + + mostlyclean: --- gcc-7-7.2.0.orig/debian/patches/gdc-7-doc.diff +++ gcc-7-7.2.0/debian/patches/gdc-7-doc.diff @@ -0,0 +1,106 @@ +# DP: This implements D language support in the GCC back end, and adds +# DP: relevant documentation about the GDC front end (documentation part). + +Index: b/src/gcc/doc/frontends.texi +=================================================================== +--- a/src/gcc/doc/frontends.texi ++++ b/src/gcc/doc/frontends.texi +@@ -9,6 +9,7 @@ + @cindex GNU Compiler Collection + @cindex GNU C Compiler + @cindex Ada ++@cindex D + @cindex Fortran + @cindex Go + @cindex Objective-C +@@ -16,7 +17,7 @@ + GCC stands for ``GNU Compiler Collection''. GCC is an integrated + distribution of compilers for several major programming languages. These + languages currently include C, C++, Objective-C, Objective-C++, +-Fortran, Ada, Go, and BRIG (HSAIL). ++Fortran, Ada, Go, D, and BRIG (HSAIL). + + The abbreviation @dfn{GCC} has multiple meanings in common use. The + current official meaning is ``GNU Compiler Collection'', which refers +Index: b/src/gcc/doc/install.texi +=================================================================== +--- a/src/gcc/doc/install.texi ++++ b/src/gcc/doc/install.texi +@@ -1617,12 +1617,12 @@ their runtime libraries should be built. + grep ^language= */config-lang.in + @end smallexample + Currently, you can use any of the following: +-@code{all}, @code{ada}, @code{c}, @code{c++}, @code{fortran}, ++@code{all}, @code{ada}, @code{c}, @code{c++}, @code{d}, @code{fortran}, + @code{go}, @code{jit}, @code{lto}, @code{objc}, @code{obj-c++}. + Building the Ada compiler has special requirements, see below. + If you do not pass this flag, or specify the option @code{all}, then all + default languages available in the @file{gcc} sub-tree will be configured. +-Ada, Go, Jit, and Objective-C++ are not default languages. LTO is not a ++Ada, D, Go, Jit, and Objective-C++ are not default languages. LTO is not a + default language, but is built by default because @option{--enable-lto} is + enabled by default. The other languages are default languages. + +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -1349,6 +1349,15 @@ called @dfn{specs}. + Ada source code file containing a library unit body (a subprogram or + package body). Such files are also called @dfn{bodies}. + ++@item @var{file}.d ++D source code file. ++ ++@item @var{file}.di ++D interface code file. ++ ++@item @var{file}.dd ++D documentation code file. ++ + @c GCC also knows about some suffixes for languages not yet included: + @c Pascal: + @c @var{file}.p +@@ -1384,6 +1393,7 @@ objective-c objective-c-header objecti + objective-c++ objective-c++-header objective-c++-cpp-output + assembler assembler-with-cpp + ada ++d + f77 f77-cpp-input f95 f95-cpp-input + go + brig +Index: b/src/gcc/doc/sourcebuild.texi +=================================================================== +--- a/src/gcc/doc/sourcebuild.texi ++++ b/src/gcc/doc/sourcebuild.texi +@@ -106,6 +106,9 @@ The Objective-C and Objective-C++ runtim + @item libquadmath + The runtime support library for quad-precision math operations. + ++@item libphobos ++The D standard runtime library. ++ + @item libssp + The Stack protector runtime library. + +Index: b/src/gcc/doc/standards.texi +=================================================================== +--- a/src/gcc/doc/standards.texi ++++ b/src/gcc/doc/standards.texi +@@ -309,6 +309,16 @@ capability is typically utilized to impl + finalization extension for a gcc supported processor. HSA standards are + freely available at @uref{http://www.hsafoundation.com/standards/}. + ++@section D language ++ ++The D language is under development as of this writing; see the ++@uref{http://dlang.org/@/language-reference.html, current language ++reference}. At present the current major version of D is 2.0, and ++there is no way to describe the language supported by GCC in terms of ++a specific minor version. In general GCC follows the D frontend ++releases closely, and any given GCC release will support the current ++language as of the date that the release was frozen. ++ + @section References for Other Languages + + @xref{Top, GNAT Reference Manual, About This Guide, gnat_rm, --- gcc-7-7.2.0.orig/debian/patches/gdc-7.diff +++ gcc-7-7.2.0/debian/patches/gdc-7.diff @@ -0,0 +1,139 @@ +# DP: This implements D language support in the GCC back end, and adds +# DP: relevant documentation about the GDC front end (code part). + +Index: b/src/gcc/config/darwin.h +=================================================================== +--- a/src/gcc/config/darwin.h ++++ b/src/gcc/config/darwin.h +@@ -49,6 +49,10 @@ see the files COPYING3 and COPYING.RUNTI + /* Suppress g++ attempt to link in the math library automatically. */ + #define MATH_LIBRARY "" + ++/* Suppress gdc attempt to link in the thread and time library automatically. */ ++#define THREAD_LIBRARY "" ++#define TIME_LIBRARY "" ++ + /* We have atexit. */ + + #define HAVE_ATEXIT +Index: b/src/gcc/config/i386/cygming.h +=================================================================== +--- a/src/gcc/config/i386/cygming.h ++++ b/src/gcc/config/i386/cygming.h +@@ -181,6 +181,10 @@ along with GCC; see the file COPYING3. + + #undef MATH_LIBRARY + #define MATH_LIBRARY "" ++#undef THREAD_LIBRARY ++#define THREAD_LIBRARY "" ++#undef TIME_LIBRARY ++#define TIME_LIBRARY "" + + #undef TARGET_LIBC_HAS_FUNCTION + #define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function +Index: b/src/gcc/config/linux-android.h +=================================================================== +--- a/src/gcc/config/linux-android.h ++++ b/src/gcc/config/linux-android.h +@@ -57,3 +57,9 @@ + + #define ANDROID_ENDFILE_SPEC \ + "%{shared: crtend_so%O%s;: crtend_android%O%s}" ++ ++/* Suppress gdc attempt to link in the thread and time library automatically. */ ++#if ANDROID_DEFAULT ++# define THREAD_LIBRARY "" ++# define TIME_LIBRARY "" ++#endif +Index: b/src/gcc/config/rs6000/rs6000.c +=================================================================== +--- a/src/gcc/config/rs6000/rs6000.c ++++ b/src/gcc/config/rs6000/rs6000.c +@@ -31597,7 +31597,8 @@ rs6000_output_function_epilogue (FILE *f + if (lang_GNU_C () + || ! strcmp (language_string, "GNU GIMPLE") + || ! strcmp (language_string, "GNU Go") +- || ! strcmp (language_string, "libgccjit")) ++ || ! strcmp (language_string, "libgccjit") ++ || ! strcmp (language_string, "GNU D")) + i = 0; + else if (! strcmp (language_string, "GNU F77") + || lang_GNU_Fortran ()) +Index: b/src/gcc/dwarf2out.c +=================================================================== +--- a/src/gcc/dwarf2out.c ++++ b/src/gcc/dwarf2out.c +@@ -5083,6 +5083,16 @@ is_ada (void) + return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83; + } + ++/* Return TRUE if the language is D. */ ++ ++static inline bool ++is_dlang (void) ++{ ++ unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language); ++ ++ return lang == DW_LANG_D; ++} ++ + /* Remove the specified attribute if present. Return TRUE if removal + was successful. */ + +@@ -23598,6 +23608,8 @@ gen_compile_unit_die (const char *filena + language = DW_LANG_ObjC; + else if (strcmp (language_string, "GNU Objective-C++") == 0) + language = DW_LANG_ObjC_plus_plus; ++ else if (strcmp (language_string, "GNU D") == 0) ++ language = DW_LANG_D; + else if (dwarf_version >= 5 || !dwarf_strict) + { + if (strcmp (language_string, "GNU Go") == 0) +@@ -25162,7 +25174,7 @@ declare_in_namespace (tree thing, dw_die + + if (ns_context != context_die) + { +- if (is_fortran ()) ++ if (is_fortran () || is_dlang ()) + return ns_context; + if (DECL_P (thing)) + gen_decl_die (thing, NULL, NULL, ns_context); +@@ -25185,7 +25197,7 @@ gen_namespace_die (tree decl, dw_die_ref + { + /* Output a real namespace or module. */ + context_die = setup_namespace_context (decl, comp_unit_die ()); +- namespace_die = new_die (is_fortran () ++ namespace_die = new_die (is_fortran () || is_dlang () + ? DW_TAG_module : DW_TAG_namespace, + context_die, decl); + /* For Fortran modules defined in different CU don't add src coords. */ +@@ -25252,7 +25264,7 @@ gen_decl_die (tree decl, tree origin, st + break; + + case CONST_DECL: +- if (!is_fortran () && !is_ada ()) ++ if (!is_fortran () && !is_ada () && !is_dlang ()) + { + /* The individual enumerators of an enum type get output when we output + the Dwarf representation of the relevant enum type itself. */ +@@ -25799,7 +25811,7 @@ dwarf2out_decl (tree decl) + case CONST_DECL: + if (debug_info_level <= DINFO_LEVEL_TERSE) + return; +- if (!is_fortran () && !is_ada ()) ++ if (!is_fortran () && !is_ada () && !is_dlang ()) + return; + if (TREE_STATIC (decl) && decl_function_context (decl)) + context_die = lookup_decl_die (DECL_CONTEXT (decl)); +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -1307,6 +1307,7 @@ static const struct compiler default_com + {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0}, + {".zip", "#Java", 0, 0, 0}, {".jar", "#Java", 0, 0, 0}, + {".go", "#Go", 0, 1, 0}, ++ {".d", "#D", 0, 1, 0}, {".dd", "#D", 0, 1, 0}, {".di", "#D", 0, 1, 0}, + /* Next come the entries for C. */ + {".c", "@c", 0, 0, 1}, + {"@c", --- gcc-7-7.2.0.orig/debian/patches/gdc-cross-biarch.diff +++ gcc-7-7.2.0/debian/patches/gdc-cross-biarch.diff @@ -0,0 +1,13 @@ +# DP: Fix the location of target's libs in cross-build for biarch + +--- a/src/config-ml.in ++++ b/src/config-ml.in +@@ -891,6 +915,8 @@ + case $arg in + -[BIL]"${ML_POPDIR}"/*) + GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ -B*/lib/) ++ GDC_="${GDC_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;; + "${ML_POPDIR}"/*) + GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; + *) --- gcc-7-7.2.0.orig/debian/patches/gdc-cross-install-location.diff +++ gcc-7-7.2.0/debian/patches/gdc-cross-install-location.diff @@ -0,0 +1,28 @@ +Index: b/src/libphobos/configure.ac +=================================================================== +--- a/src/libphobos/configure.ac ++++ b/src/libphobos/configure.ac +@@ -118,6 +118,8 @@ + AC_SUBST([DRUNTIME_SOVERSION]) + AC_SUBST([PHOBOS_SOVERSION]) + ++# trigger rebuild of the configure file ++ + # Set default flags (after DRUNTIME_WERROR!) + if test -z "$DFLAGS"; then + DFLAGS="-Wall $WERROR_FLAG -g -frelease -O2" +Index: b/src/libphobos/m4/druntime.m4 +=================================================================== +--- a/src/libphobos/m4/druntime.m4 ++++ b/src/libphobos/m4/druntime.m4 +@@ -78,7 +78,7 @@ AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES], + AC_SUBST(toolexeclibdir) + + # Default case for install directory for D sources files. +- gdc_include_dir='${libdir}/gcc/${target_alias}'/${d_gcc_ver}/include/d ++ gdc_include_dir='${libdir}/gcc-cross/${target_alias}'/${d_gcc_ver}/include/d + AC_SUBST(gdc_include_dir) + ]) + +--- gcc/src/libphobos/configure.ac~ 2017-05-03 13:31:07.175437754 +0200 ++++ gcc/src/libphobos/configure.ac 2017-05-03 13:33:19.905663189 +0200 --- gcc-7-7.2.0.orig/debian/patches/gdc-driver-nophobos.diff +++ gcc-7-7.2.0/debian/patches/gdc-driver-nophobos.diff @@ -0,0 +1,28 @@ +# DP: Modify gdc driver to have no libphobos by default. + +Index: b/src/gcc/d/d-lang.cc +=================================================================== +--- a/src/gcc/d/d-lang.cc ++++ b/src/gcc/d/d-lang.cc +@@ -198,7 +198,7 @@ static void + d_init_options_struct(gcc_options *opts) + { + // GCC options +- opts->x_flag_exceptions = 1; ++ opts->x_flag_exceptions = 0; + + // Avoid range issues for complex multiply and divide. + opts->x_flag_complex_method = 2; +Index: b/src/gcc/d/d-spec.c +=================================================================== +--- a/src/gcc/d/d-spec.c ++++ b/src/gcc/d/d-spec.c +@@ -62,7 +62,7 @@ static int library = 0; + + /* If true, use the standard D runtime library when linking with + standard libraries. */ +-static bool need_phobos = true; ++static bool need_phobos = false; + + void + lang_specific_driver (cl_decoded_option **in_decoded_options, --- gcc-7-7.2.0.orig/debian/patches/gdc-frontend-posix.diff +++ gcc-7-7.2.0/debian/patches/gdc-frontend-posix.diff @@ -0,0 +1,15 @@ +# DP: Fix build of the D frontend on the Hurd and KFreeBSD. + +Index: b/src/gcc/d/dfrontend/object.h +=================================================================== +--- a/src/gcc/d/dfrontend/object.h ++++ b/src/gcc/d/dfrontend/object.h +@@ -10,7 +10,7 @@ + #ifndef OBJECT_H + #define OBJECT_H + +-#define POSIX (__linux__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun) ++#define POSIX (__linux__ || __GLIBC__ || __gnu_hurd__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun) + + #if __DMC__ + #pragma once --- gcc-7-7.2.0.orig/debian/patches/gdc-libphobos-build.diff +++ gcc-7-7.2.0/debian/patches/gdc-libphobos-build.diff @@ -0,0 +1,950 @@ +# DP: This implements building of libphobos library in GCC. + +# Please read ada-changes-in-autogen-output.diff about src/Makefile.[def|tpl]. + +Index: b/src/Makefile.def +=================================================================== +--- a/src/Makefile.def ++++ b/src/Makefile.def +@@ -167,6 +167,7 @@ target_modules = { module= libgfortran; + target_modules = { module= libobjc; }; + target_modules = { module= libgo; }; + target_modules = { module= libhsail-rt; }; ++target_modules = { module= libphobos; }; + target_modules = { module= libtermcap; no_check=true; + missing=mostlyclean; + missing=clean; +@@ -312,6 +313,7 @@ flags_to_pass = { flag= FLAGS_FOR_TARGET + flags_to_pass = { flag= GFORTRAN_FOR_TARGET ; }; + flags_to_pass = { flag= GOC_FOR_TARGET ; }; + flags_to_pass = { flag= GOCFLAGS_FOR_TARGET ; }; ++flags_to_pass = { flag= GDC_FOR_TARGET ; }; + flags_to_pass = { flag= LD_FOR_TARGET ; }; + flags_to_pass = { flag= LIPO_FOR_TARGET ; }; + flags_to_pass = { flag= LDFLAGS_FOR_TARGET ; }; +@@ -585,6 +587,8 @@ dependencies = { module=configure-target + dependencies = { module=all-target-libgo; on=all-target-libbacktrace; }; + dependencies = { module=all-target-libgo; on=all-target-libffi; }; + dependencies = { module=all-target-libgo; on=all-target-libatomic; }; ++dependencies = { module=configure-target-libphobos; on=configure-target-zlib; }; ++dependencies = { module=all-target-libphobos; on=all-target-zlib; }; + dependencies = { module=configure-target-libstdc++-v3; on=configure-target-libgomp; }; + dependencies = { module=configure-target-liboffloadmic; on=configure-target-libgomp; }; + dependencies = { module=configure-target-libsanitizer; on=all-target-libstdc++-v3; }; +@@ -639,6 +643,8 @@ languages = { language=go; gcc-check-tar + lib-check-target=check-target-libgo; }; + languages = { language=brig; gcc-check-target=check-brig; + lib-check-target=check-target-libhsail-rt; }; ++languages = { language=d; gcc-check-target=check-d; ++ lib-check-target=check-target-libphobos; }; + + // Toplevel bootstrap + bootstrap_stage = { id=1 ; }; +Index: b/src/Makefile.tpl +=================================================================== +--- a/src/Makefile.tpl ++++ b/src/Makefile.tpl +@@ -159,6 +159,7 @@ BUILD_EXPORTS = \ + GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \ + GOC="$(GOC_FOR_BUILD)"; export GOC; \ + GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \ ++ GDC="$(GDC_FOR_BUILD)"; export GDC; \ + DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ + LD="$(LD_FOR_BUILD)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ +@@ -195,6 +196,7 @@ HOST_EXPORTS = \ + CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \ + GOC="$(GOC)"; export GOC; \ ++ GDC="$(GDC)"; export GDC; \ + AR="$(AR)"; export AR; \ + AS="$(AS)"; export AS; \ + CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ +@@ -281,6 +283,7 @@ BASE_TARGET_EXPORTS = \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \ + GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \ ++ GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \ + DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ + LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ +@@ -345,6 +348,7 @@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ + DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@ + GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@ + GOC_FOR_BUILD = @GOC_FOR_BUILD@ ++GDC_FOR_BUILD = @GDC_FOR_BUILD@ + LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ + LD_FOR_BUILD = @LD_FOR_BUILD@ + NM_FOR_BUILD = @NM_FOR_BUILD@ +@@ -484,6 +488,7 @@ CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_ + RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ + GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ + GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@ ++GDC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GDC_FOR_TARGET@ + DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@ + LD_FOR_TARGET=@LD_FOR_TARGET@ + +@@ -609,6 +614,7 @@ EXTRA_HOST_FLAGS = \ + 'DLLTOOL=$(DLLTOOL)' \ + 'GFORTRAN=$(GFORTRAN)' \ + 'GOC=$(GOC)' \ ++ 'GDC=$(GDC)' \ + 'LD=$(LD)' \ + 'LIPO=$(LIPO)' \ + 'NM=$(NM)' \ +@@ -665,6 +671,7 @@ EXTRA_TARGET_FLAGS = \ + 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \ ++ 'GDC=$$(GDC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'LD=$(COMPILER_LD_FOR_TARGET)' \ + 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \ + 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \ +Index: b/src/config-ml.in +=================================================================== +--- a/src/config-ml.in ++++ b/src/config-ml.in +@@ -512,6 +512,7 @@ multi-do: + prefix="$(prefix)" \ + exec_prefix="$(exec_prefix)" \ + GOCFLAGS="$(GOCFLAGS) $${flags}" \ ++ GDCFLAGS="$(GDCFLAGS) $${flags}" \ + CXXFLAGS="$(CXXFLAGS) $${flags}" \ + LIBCFLAGS="$(LIBCFLAGS) $${flags}" \ + LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \ +@@ -746,6 +747,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + fi + done + ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags"' ++ ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags" GDC="${GDC_}$flags"' + + if [ "${with_target_subdir}" = "." ]; then + CC_=$CC' ' +@@ -753,6 +755,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + F77_=$F77' ' + GFORTRAN_=$GFORTRAN' ' + GOC_=$GOC' ' ++ GDC_=$GDC' ' + else + # Create a regular expression that matches any string as long + # as ML_POPDIR. +@@ -817,6 +820,18 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n + esac + done + ++ GDC_= ++ for arg in ${GDC}; do ++ case $arg in ++ -[BIL]"${ML_POPDIR}"/*) ++ GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ "${ML_POPDIR}"/*) ++ GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;; ++ *) ++ GDC_="${GDC_}${arg} " ;; ++ esac ++ done ++ + if test "x${LD_LIBRARY_PATH+set}" = xset; then + LD_LIBRARY_PATH_= + for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do +Index: b/src/config/multi.m4 +=================================================================== +--- a/src/config/multi.m4 ++++ b/src/config/multi.m4 +@@ -64,4 +64,5 @@ multi_basedir="$multi_basedir" + CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + CC="$CC" + CXX="$CXX" +-GFORTRAN="$GFORTRAN"])])dnl ++GFORTRAN="$GFORTRAN" ++GDC="$GDC"])])dnl +Index: b/src/configure.ac +=================================================================== +--- a/src/configure.ac ++++ b/src/configure.ac +@@ -173,7 +173,9 @@ target_libraries="target-libgcc \ + target-libada-sjlj \ + ${target_libiberty} \ + target-libgnatvsn \ +- target-libgo" ++ target-libgo \ ++ target-zlib \ ++ target-libphobos" + + # these tools are built using the target libraries, and are intended to + # run only in the target environment +@@ -1283,6 +1285,7 @@ if test "${build}" != "${host}" ; then + CXX_FOR_BUILD=${CXX_FOR_BUILD-g++} + GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran} + GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo} ++ GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc} + DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool} + LD_FOR_BUILD=${LD_FOR_BUILD-ld} + NM_FOR_BUILD=${NM_FOR_BUILD-nm} +@@ -1296,6 +1299,7 @@ else + CXX_FOR_BUILD="\$(CXX)" + GFORTRAN_FOR_BUILD="\$(GFORTRAN)" + GOC_FOR_BUILD="\$(GOC)" ++ GDC_FOR_BUILD="\$(GDC)" + DLLTOOL_FOR_BUILD="\$(DLLTOOL)" + LD_FOR_BUILD="\$(LD)" + NM_FOR_BUILD="\$(NM)" +@@ -3225,6 +3229,7 @@ AC_SUBST(CXX_FOR_BUILD) + AC_SUBST(DLLTOOL_FOR_BUILD) + AC_SUBST(GFORTRAN_FOR_BUILD) + AC_SUBST(GOC_FOR_BUILD) ++AC_SUBST(GDC_FOR_BUILD) + AC_SUBST(LDFLAGS_FOR_BUILD) + AC_SUBST(LD_FOR_BUILD) + AC_SUBST(NM_FOR_BUILD) +@@ -3334,6 +3339,7 @@ NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TA + NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET}) + NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran) + NCN_STRICT_CHECK_TARGET_TOOLS(GOC_FOR_TARGET, gccgo) ++NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc) + + ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar) + ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as) +@@ -3367,6 +3373,8 @@ GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_T + [gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran) + GCC_TARGET_TOOL(gccgo, GOC_FOR_TARGET, GOC, + [gcc/gccgo -B$$r/$(HOST_SUBDIR)/gcc/], go) ++GCC_TARGET_TOOL(gdc, GDC_FOR_TARGET, GDC, ++ [gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/], d) + GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new]) + GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO) + GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new]) +Index: b/src/Makefile.in +=================================================================== +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -156,6 +156,7 @@ BUILD_EXPORTS = \ + GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \ + GOC="$(GOC_FOR_BUILD)"; export GOC; \ + GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \ ++ GDC="$(GDC_FOR_BUILD)"; export GDC; \ + DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ + LD="$(LD_FOR_BUILD)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ +@@ -192,6 +193,7 @@ HOST_EXPORTS = \ + CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \ + GOC="$(GOC)"; export GOC; \ ++ GDC="$(GDC)"; export GDC; \ + AR="$(AR)"; export AR; \ + AS="$(AS)"; export AS; \ + CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ +@@ -278,6 +280,7 @@ BASE_TARGET_EXPORTS = \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \ + GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \ ++ GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \ + DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ + LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ +@@ -342,6 +345,7 @@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ + DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@ + GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@ + GOC_FOR_BUILD = @GOC_FOR_BUILD@ ++GDC_FOR_BUILD = @GDC_FOR_BUILD@ + LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ + LD_FOR_BUILD = @LD_FOR_BUILD@ + NM_FOR_BUILD = @NM_FOR_BUILD@ +@@ -551,6 +555,7 @@ CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_ + RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ + GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ + GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@ ++GDC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GDC_FOR_TARGET@ + DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@ + LD_FOR_TARGET=@LD_FOR_TARGET@ + +@@ -774,6 +779,7 @@ BASE_FLAGS_TO_PASS = \ + "GFORTRAN_FOR_TARGET=$(GFORTRAN_FOR_TARGET)" \ + "GOC_FOR_TARGET=$(GOC_FOR_TARGET)" \ + "GOCFLAGS_FOR_TARGET=$(GOCFLAGS_FOR_TARGET)" \ ++ "GDC_FOR_TARGET=$(GDC_FOR_TARGET)" \ + "LD_FOR_TARGET=$(LD_FOR_TARGET)" \ + "LIPO_FOR_TARGET=$(LIPO_FOR_TARGET)" \ + "LDFLAGS_FOR_TARGET=$(LDFLAGS_FOR_TARGET)" \ +@@ -833,6 +839,7 @@ EXTRA_HOST_FLAGS = \ + 'DLLTOOL=$(DLLTOOL)' \ + 'GFORTRAN=$(GFORTRAN)' \ + 'GOC=$(GOC)' \ ++ 'GDC=$(GDC)' \ + 'LD=$(LD)' \ + 'LIPO=$(LIPO)' \ + 'NM=$(NM)' \ +@@ -889,6 +896,7 @@ EXTRA_TARGET_FLAGS = \ + 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \ ++ 'GDC=$$(GDC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'LD=$(COMPILER_LD_FOR_TARGET)' \ + 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \ + 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \ +@@ -992,6 +1000,7 @@ configure-target: \ + maybe-configure-target-libobjc \ + maybe-configure-target-libgo \ + maybe-configure-target-libhsail-rt \ ++ maybe-configure-target-libphobos \ + maybe-configure-target-libtermcap \ + maybe-configure-target-winsup \ + maybe-configure-target-libgloss \ +@@ -1158,6 +1167,7 @@ all-target: maybe-all-target-libgfortran + all-target: maybe-all-target-libobjc + all-target: maybe-all-target-libgo + all-target: maybe-all-target-libhsail-rt ++all-target: maybe-all-target-libphobos + all-target: maybe-all-target-libtermcap + all-target: maybe-all-target-winsup + all-target: maybe-all-target-libgloss +@@ -1251,6 +1261,7 @@ info-target: maybe-info-target-libgfortr + info-target: maybe-info-target-libobjc + info-target: maybe-info-target-libgo + info-target: maybe-info-target-libhsail-rt ++info-target: maybe-info-target-libphobos + info-target: maybe-info-target-libtermcap + info-target: maybe-info-target-winsup + info-target: maybe-info-target-libgloss +@@ -1337,6 +1348,7 @@ dvi-target: maybe-dvi-target-libgfortran + dvi-target: maybe-dvi-target-libobjc + dvi-target: maybe-dvi-target-libgo + dvi-target: maybe-dvi-target-libhsail-rt ++dvi-target: maybe-dvi-target-libphobos + dvi-target: maybe-dvi-target-libtermcap + dvi-target: maybe-dvi-target-winsup + dvi-target: maybe-dvi-target-libgloss +@@ -1423,6 +1435,7 @@ pdf-target: maybe-pdf-target-libgfortran + pdf-target: maybe-pdf-target-libobjc + pdf-target: maybe-pdf-target-libgo + pdf-target: maybe-pdf-target-libhsail-rt ++pdf-target: maybe-pdf-target-libphobos + pdf-target: maybe-pdf-target-libtermcap + pdf-target: maybe-pdf-target-winsup + pdf-target: maybe-pdf-target-libgloss +@@ -1509,6 +1522,7 @@ html-target: maybe-html-target-libgfortr + html-target: maybe-html-target-libobjc + html-target: maybe-html-target-libgo + html-target: maybe-html-target-libhsail-rt ++html-target: maybe-html-target-libphobos + html-target: maybe-html-target-libtermcap + html-target: maybe-html-target-winsup + html-target: maybe-html-target-libgloss +@@ -1595,6 +1609,7 @@ TAGS-target: maybe-TAGS-target-libgfortr + TAGS-target: maybe-TAGS-target-libobjc + TAGS-target: maybe-TAGS-target-libgo + TAGS-target: maybe-TAGS-target-libhsail-rt ++TAGS-target: maybe-TAGS-target-libphobos + TAGS-target: maybe-TAGS-target-libtermcap + TAGS-target: maybe-TAGS-target-winsup + TAGS-target: maybe-TAGS-target-libgloss +@@ -1681,6 +1696,7 @@ install-info-target: maybe-install-info- + install-info-target: maybe-install-info-target-libobjc + install-info-target: maybe-install-info-target-libgo + install-info-target: maybe-install-info-target-libhsail-rt ++install-info-target: maybe-install-info-target-libphobos + install-info-target: maybe-install-info-target-libtermcap + install-info-target: maybe-install-info-target-winsup + install-info-target: maybe-install-info-target-libgloss +@@ -1767,6 +1783,7 @@ install-pdf-target: maybe-install-pdf-ta + install-pdf-target: maybe-install-pdf-target-libobjc + install-pdf-target: maybe-install-pdf-target-libgo + install-pdf-target: maybe-install-pdf-target-libhsail-rt ++install-pdf-target: maybe-install-pdf-target-libphobos + install-pdf-target: maybe-install-pdf-target-libtermcap + install-pdf-target: maybe-install-pdf-target-winsup + install-pdf-target: maybe-install-pdf-target-libgloss +@@ -1853,6 +1870,7 @@ install-html-target: maybe-install-html- + install-html-target: maybe-install-html-target-libobjc + install-html-target: maybe-install-html-target-libgo + install-html-target: maybe-install-html-target-libhsail-rt ++install-html-target: maybe-install-html-target-libphobos + install-html-target: maybe-install-html-target-libtermcap + install-html-target: maybe-install-html-target-winsup + install-html-target: maybe-install-html-target-libgloss +@@ -1939,6 +1957,7 @@ installcheck-target: maybe-installcheck- + installcheck-target: maybe-installcheck-target-libobjc + installcheck-target: maybe-installcheck-target-libgo + installcheck-target: maybe-installcheck-target-libhsail-rt ++installcheck-target: maybe-installcheck-target-libphobos + installcheck-target: maybe-installcheck-target-libtermcap + installcheck-target: maybe-installcheck-target-winsup + installcheck-target: maybe-installcheck-target-libgloss +@@ -2025,6 +2044,7 @@ mostlyclean-target: maybe-mostlyclean-ta + mostlyclean-target: maybe-mostlyclean-target-libobjc + mostlyclean-target: maybe-mostlyclean-target-libgo + mostlyclean-target: maybe-mostlyclean-target-libhsail-rt ++mostlyclean-target: maybe-mostlyclean-target-libphobos + mostlyclean-target: maybe-mostlyclean-target-libtermcap + mostlyclean-target: maybe-mostlyclean-target-winsup + mostlyclean-target: maybe-mostlyclean-target-libgloss +@@ -2111,6 +2131,7 @@ clean-target: maybe-clean-target-libgfor + clean-target: maybe-clean-target-libobjc + clean-target: maybe-clean-target-libgo + clean-target: maybe-clean-target-libhsail-rt ++clean-target: maybe-clean-target-libphobos + clean-target: maybe-clean-target-libtermcap + clean-target: maybe-clean-target-winsup + clean-target: maybe-clean-target-libgloss +@@ -2197,6 +2218,7 @@ distclean-target: maybe-distclean-target + distclean-target: maybe-distclean-target-libobjc + distclean-target: maybe-distclean-target-libgo + distclean-target: maybe-distclean-target-libhsail-rt ++distclean-target: maybe-distclean-target-libphobos + distclean-target: maybe-distclean-target-libtermcap + distclean-target: maybe-distclean-target-winsup + distclean-target: maybe-distclean-target-libgloss +@@ -2283,6 +2305,7 @@ maintainer-clean-target: maybe-maintaine + maintainer-clean-target: maybe-maintainer-clean-target-libobjc + maintainer-clean-target: maybe-maintainer-clean-target-libgo + maintainer-clean-target: maybe-maintainer-clean-target-libhsail-rt ++maintainer-clean-target: maybe-maintainer-clean-target-libphobos + maintainer-clean-target: maybe-maintainer-clean-target-libtermcap + maintainer-clean-target: maybe-maintainer-clean-target-winsup + maintainer-clean-target: maybe-maintainer-clean-target-libgloss +@@ -2425,6 +2448,7 @@ check-target: \ + maybe-check-target-libobjc \ + maybe-check-target-libgo \ + maybe-check-target-libhsail-rt \ ++ maybe-check-target-libphobos \ + maybe-check-target-libtermcap \ + maybe-check-target-winsup \ + maybe-check-target-libgloss \ +@@ -2607,6 +2631,7 @@ install-target: \ + maybe-install-target-libobjc \ + maybe-install-target-libgo \ + maybe-install-target-libhsail-rt \ ++ maybe-install-target-libphobos \ + maybe-install-target-libtermcap \ + maybe-install-target-winsup \ + maybe-install-target-libgloss \ +@@ -2713,6 +2738,7 @@ install-strip-target: \ + maybe-install-strip-target-libobjc \ + maybe-install-strip-target-libgo \ + maybe-install-strip-target-libhsail-rt \ ++ maybe-install-strip-target-libphobos \ + maybe-install-strip-target-libtermcap \ + maybe-install-strip-target-winsup \ + maybe-install-strip-target-libgloss \ +@@ -46570,6 +46596,464 @@ maintainer-clean-target-libhsail-rt: + + + ++.PHONY: configure-target-libphobos maybe-configure-target-libphobos ++maybe-configure-target-libphobos: ++@if gcc-bootstrap ++configure-target-libphobos: stage_current ++@endif gcc-bootstrap ++@if target-libphobos ++maybe-configure-target-libphobos: configure-target-libphobos ++configure-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ echo "Checking multilib configuration for libphobos..."; \ ++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \ ++ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \ ++ if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \ ++ if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \ ++ rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \ ++ else \ ++ rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \ ++ mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \ ++ fi; \ ++ else \ ++ mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \ ++ fi; \ ++ test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \ ++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo Configuring in $(TARGET_SUBDIR)/libphobos; \ ++ cd "$(TARGET_SUBDIR)/libphobos" || exit 1; \ ++ case $(srcdir) in \ ++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ ++ *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \ ++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ ++ esac; \ ++ module_srcdir=libphobos; \ ++ rm -f no-such-file || : ; \ ++ CONFIG_SITE=no-such-file $(SHELL) \ ++ $$s/$$module_srcdir/configure \ ++ --srcdir=$${topdir}/$$module_srcdir \ ++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ ++ --target=${target_alias} \ ++ || exit 1 ++@endif target-libphobos ++ ++ ++ ++ ++ ++.PHONY: all-target-libphobos maybe-all-target-libphobos ++maybe-all-target-libphobos: ++@if gcc-bootstrap ++all-target-libphobos: stage_current ++@endif gcc-bootstrap ++@if target-libphobos ++TARGET-target-libphobos=all ++maybe-all-target-libphobos: all-target-libphobos ++all-target-libphobos: configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ ++ $(TARGET-target-libphobos)) ++@endif target-libphobos ++ ++ ++ ++ ++ ++.PHONY: check-target-libphobos maybe-check-target-libphobos ++maybe-check-target-libphobos: ++@if target-libphobos ++maybe-check-target-libphobos: check-target-libphobos ++ ++check-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) check) ++ ++@endif target-libphobos ++ ++.PHONY: install-target-libphobos maybe-install-target-libphobos ++maybe-install-target-libphobos: ++@if target-libphobos ++maybe-install-target-libphobos: install-target-libphobos ++ ++install-target-libphobos: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install) ++ ++@endif target-libphobos ++ ++.PHONY: install-strip-target-libphobos maybe-install-strip-target-libphobos ++maybe-install-strip-target-libphobos: ++@if target-libphobos ++maybe-install-strip-target-libphobos: install-strip-target-libphobos ++ ++install-strip-target-libphobos: installdirs ++ @: $(MAKE); $(unstage) ++ @r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) ++ ++@endif target-libphobos ++ ++# Other targets (info, dvi, pdf, etc.) ++ ++.PHONY: maybe-info-target-libphobos info-target-libphobos ++maybe-info-target-libphobos: ++@if target-libphobos ++maybe-info-target-libphobos: info-target-libphobos ++ ++info-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing info in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ info) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-dvi-target-libphobos dvi-target-libphobos ++maybe-dvi-target-libphobos: ++@if target-libphobos ++maybe-dvi-target-libphobos: dvi-target-libphobos ++ ++dvi-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing dvi in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ dvi) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-pdf-target-libphobos pdf-target-libphobos ++maybe-pdf-target-libphobos: ++@if target-libphobos ++maybe-pdf-target-libphobos: pdf-target-libphobos ++ ++pdf-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing pdf in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ pdf) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-html-target-libphobos html-target-libphobos ++maybe-html-target-libphobos: ++@if target-libphobos ++maybe-html-target-libphobos: html-target-libphobos ++ ++html-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing html in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ html) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-TAGS-target-libphobos TAGS-target-libphobos ++maybe-TAGS-target-libphobos: ++@if target-libphobos ++maybe-TAGS-target-libphobos: TAGS-target-libphobos ++ ++TAGS-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing TAGS in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ TAGS) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-install-info-target-libphobos install-info-target-libphobos ++maybe-install-info-target-libphobos: ++@if target-libphobos ++maybe-install-info-target-libphobos: install-info-target-libphobos ++ ++install-info-target-libphobos: \ ++ configure-target-libphobos \ ++ info-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing install-info in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ install-info) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-install-pdf-target-libphobos install-pdf-target-libphobos ++maybe-install-pdf-target-libphobos: ++@if target-libphobos ++maybe-install-pdf-target-libphobos: install-pdf-target-libphobos ++ ++install-pdf-target-libphobos: \ ++ configure-target-libphobos \ ++ pdf-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing install-pdf in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ install-pdf) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-install-html-target-libphobos install-html-target-libphobos ++maybe-install-html-target-libphobos: ++@if target-libphobos ++maybe-install-html-target-libphobos: install-html-target-libphobos ++ ++install-html-target-libphobos: \ ++ configure-target-libphobos \ ++ html-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing install-html in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ install-html) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-installcheck-target-libphobos installcheck-target-libphobos ++maybe-installcheck-target-libphobos: ++@if target-libphobos ++maybe-installcheck-target-libphobos: installcheck-target-libphobos ++ ++installcheck-target-libphobos: \ ++ configure-target-libphobos ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing installcheck in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ installcheck) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-mostlyclean-target-libphobos mostlyclean-target-libphobos ++maybe-mostlyclean-target-libphobos: ++@if target-libphobos ++maybe-mostlyclean-target-libphobos: mostlyclean-target-libphobos ++ ++mostlyclean-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ mostlyclean) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-clean-target-libphobos clean-target-libphobos ++maybe-clean-target-libphobos: ++@if target-libphobos ++maybe-clean-target-libphobos: clean-target-libphobos ++ ++clean-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing clean in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ clean) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-distclean-target-libphobos distclean-target-libphobos ++maybe-distclean-target-libphobos: ++@if target-libphobos ++maybe-distclean-target-libphobos: distclean-target-libphobos ++ ++distclean-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing distclean in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ distclean) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++.PHONY: maybe-maintainer-clean-target-libphobos maintainer-clean-target-libphobos ++maybe-maintainer-clean-target-libphobos: ++@if target-libphobos ++maybe-maintainer-clean-target-libphobos: maintainer-clean-target-libphobos ++ ++maintainer-clean-target-libphobos: ++ @: $(MAKE); $(unstage) ++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \ ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(NORMAL_TARGET_EXPORTS) \ ++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libphobos"; \ ++ for flag in $(EXTRA_TARGET_FLAGS); do \ ++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ ++ done; \ ++ (cd $(TARGET_SUBDIR)/libphobos && \ ++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ ++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ++ "RANLIB=$${RANLIB}" \ ++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ ++ maintainer-clean) \ ++ || exit 1 ++ ++@endif target-libphobos ++ ++ ++ ++ ++ + .PHONY: configure-target-libtermcap maybe-configure-target-libtermcap + maybe-configure-target-libtermcap: + @if gcc-bootstrap +@@ -51864,6 +52348,14 @@ check-gcc-brig: + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-brig); + check-brig: check-gcc-brig check-target-libhsail-rt + ++.PHONY: check-gcc-d check-d ++check-gcc-d: ++ r=`${PWD_COMMAND}`; export r; \ ++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ ++ $(HOST_EXPORTS) \ ++ (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-d); ++check-d: check-gcc-d check-target-libphobos ++ + + # The gcc part of install-no-fixedincludes, which relies on an intimate + # knowledge of how a number of gcc internal targets (inter)operate. Delegate. +@@ -54742,6 +55234,7 @@ configure-target-libgfortran: stage_last + configure-target-libobjc: stage_last + configure-target-libgo: stage_last + configure-target-libhsail-rt: stage_last ++configure-target-libphobos: stage_last + configure-target-libtermcap: stage_last + configure-target-winsup: stage_last + configure-target-libgloss: stage_last +@@ -54777,6 +55270,7 @@ configure-target-libgfortran: maybe-all- + configure-target-libobjc: maybe-all-gcc + configure-target-libgo: maybe-all-gcc + configure-target-libhsail-rt: maybe-all-gcc ++configure-target-libphobos: maybe-all-gcc + configure-target-libtermcap: maybe-all-gcc + configure-target-winsup: maybe-all-gcc + configure-target-libgloss: maybe-all-gcc +@@ -55803,6 +56297,8 @@ configure-target-libgo: maybe-all-target + all-target-libgo: maybe-all-target-libbacktrace + all-target-libgo: maybe-all-target-libffi + all-target-libgo: maybe-all-target-libatomic ++configure-target-libphobos: maybe-configure-target-zlib ++all-target-libphobos: maybe-all-target-zlib + configure-target-libstdc++-v3: maybe-configure-target-libgomp + + configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp +@@ -55930,6 +56426,7 @@ configure-target-libgfortran: maybe-all- + configure-target-libobjc: maybe-all-target-libgcc + configure-target-libgo: maybe-all-target-libgcc + configure-target-libhsail-rt: maybe-all-target-libgcc ++configure-target-libphobos: maybe-all-target-libgcc + configure-target-libtermcap: maybe-all-target-libgcc + configure-target-winsup: maybe-all-target-libgcc + configure-target-libgloss: maybe-all-target-libgcc +@@ -55973,6 +56470,8 @@ configure-target-libgo: maybe-all-target + + configure-target-libhsail-rt: maybe-all-target-newlib maybe-all-target-libgloss + ++configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss ++ + configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss + + configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss --- gcc-7-7.2.0.orig/debian/patches/gdc-multiarch.diff +++ gcc-7-7.2.0/debian/patches/gdc-multiarch.diff @@ -0,0 +1,17 @@ +# DP: Set the D target include directory to a multiarch location. + +--- a/src/gcc/d/Make-lang.in ++++ b/src/gcc/d/Make-lang.in +@@ -61,7 +61,11 @@ + $(D_DMD_H) + + +-gcc_d_target_include_dir=$(gcc_d_include_dir)/$(target_noncanonical) ++ifneq (,$(MULTIARCH_DIRNAME)) ++ gcc_d_target_include_dir = /usr/include/$(MULTIARCH_DIRNAME)/d/$(version) ++else ++ gcc_d_target_include_dir=$(gcc_d_include_dir)/$(target_noncanonical) ++endif + + # Name of phobos library + D_LIBPHOBOS = -DLIBPHOBOS=\"gphobos2\" --- gcc-7-7.2.0.orig/debian/patches/gdc-profiledbuild.diff +++ gcc-7-7.2.0/debian/patches/gdc-profiledbuild.diff @@ -0,0 +1,21 @@ +# DP: Don't build gdc build tools idgen and impcnvgen with profiling flags + +Index: b/src/gcc/d/Make-lang.in +=================================================================== +--- a/src/gcc/d/Make-lang.in ++++ b/src/gcc/d/Make-lang.in +@@ -256,6 +256,14 @@ d/idgen: d/idgen.dmdgen.o + d/impcvgen: d/impcnvgen.dmdgen.o + +$(LINKER_FOR_BUILD) $(BUILD_LINKER_FLAGS) $(BUILD_LDFLAGS) -o $@ $^ + ++d/idgen.dmdgen.o: d/dfrontend/idgen.c ++ $(filter-out -fprofile-%,$(DMD_COMPILE)) $(D_INCLUDES) $< ++ $(POSTCOMPILE) ++ ++d/impcnvgen.dmdgen.o: $(srcdir)/d/dfrontend/impcnvgen.c ++ $(filter-out -fprofile-%,$(DMDGEN_COMPILE)) $(D_INCLUDES) $< ++ $(POSTCOMPILE) ++ + # Generated sources. + d/id.c: d/idgen + cd d && ./idgen --- gcc-7-7.2.0.orig/debian/patches/gdc-sparc-fix.diff +++ gcc-7-7.2.0/debian/patches/gdc-sparc-fix.diff @@ -0,0 +1,12 @@ +# DP: Fix gdc build on sparc. + +--- a/src/gcc/d/d-target.cc ++++ b/src/gcc/d/d-target.cc +@@ -18,6 +18,7 @@ + #include "config.h" + #include "system.h" + #include "coretypes.h" ++#include "memmodel.h" + + #include "dfrontend/aggregate.h" + #include "dfrontend/module.h" --- gcc-7-7.2.0.orig/debian/patches/gdc-texinfo.diff +++ gcc-7-7.2.0/debian/patches/gdc-texinfo.diff @@ -0,0 +1,55 @@ +# DP: Add macros for the gdc texinfo documentation. + +Index: b/src/gcc/d/gdc.texi +=================================================================== +--- a/src/gcc/d/gdc.texi ++++ b/src/gcc/d/gdc.texi +@@ -57,6 +57,22 @@ man page gfdl(7). + @insertcopying + @end ifinfo + ++@macro versionsubtitle ++@ifclear DEVELOPMENT ++@subtitle For @sc{gcc} version @value{version-GCC} ++@end ifclear ++@ifset DEVELOPMENT ++@subtitle For @sc{gcc} version @value{version-GCC} (pre-release) ++@end ifset ++@ifset VERSION_PACKAGE ++@sp 1 ++@subtitle @value{VERSION_PACKAGE} ++@end ifset ++@c Even if there are no authors, the second titlepage line should be ++@c forced to the bottom of the page. ++@vskip 0pt plus 1filll ++@end macro ++ + @titlepage + @title The GNU D Compiler + @versionsubtitle +@@ -139,6 +155,25 @@ the options specific to @command{gdc}. + * Environment Variables:: Environment variables that affect @command{gdc}. + @end menu + ++@macro gcctabopt{body} ++@code{\body\} ++@end macro ++@macro gccoptlist{body} ++@smallexample ++\body\ ++@end smallexample ++@end macro ++@c Makeinfo handles the above macro OK, TeX needs manual line breaks; ++@c they get lost at some point in handling the macro. But if @macro is ++@c used here rather than @alias, it produces double line breaks. ++@iftex ++@alias gol = * ++@end iftex ++@ifnottex ++@macro gol ++@end macro ++@end ifnottex ++ + @c man begin OPTIONS + + @node Input and Output files --- gcc-7-7.2.0.orig/debian/patches/gdc-updates.diff +++ gcc-7-7.2.0/debian/patches/gdc-updates.diff @@ -0,0 +1,30 @@ +# DP: gdc updates up to 20160115. + + * Make-lang.in (d-warn): Filter out -Wmissing-format-attribute. + +Index: b/src/gcc/d/Make-lang.in +=================================================================== +--- a/src/gcc/d/Make-lang.in ++++ b/src/gcc/d/Make-lang.in +@@ -46,7 +46,7 @@ gdc-cross$(exeext): gdc$(exeext) + cp gdc$(exeext) gdc-cross$(exeext) + + # Filter out pedantic and virtual overload warnings. +-d-warn = $(filter-out -pedantic -Woverloaded-virtual, $(STRICT_WARN)) ++d-warn = $(filter-out -pedantic -Woverloaded-virtual -Wmissing-format-attribute, $(STRICT_WARN)) + + # D Frontend has slightly relaxed warnings compared to rest of GDC. + DMD_WARN_CXXFLAGS = -Wno-deprecated -Wstrict-aliasing -Wuninitialized +Index: b/src/libphobos/src/std/internal/math/gammafunction.d +=================================================================== +--- a/src/libphobos/src/std/internal/math/gammafunction.d ++++ b/src/libphobos/src/std/internal/math/gammafunction.d +@@ -437,7 +437,7 @@ real logGamma(real x) + if ( p == q ) + return real.infinity; + int intpart = cast(int)(p); +- real sgngam = 1; ++ real sgngam = 1.0L; + if ( (intpart & 1) == 0 ) + sgngam = -1; + z = q - p; --- gcc-7-7.2.0.orig/debian/patches/gdc-versym-cpu.diff +++ gcc-7-7.2.0/debian/patches/gdc-versym-cpu.diff @@ -0,0 +1,379 @@ +# DP: Implements D CPU version conditions. + +This implements the following versions: +* D_HardFloat +* D_SoftFloat + +for all supported architectures. And these where appropriate: +* ARM +** ARM_Thumb +** ARM_HardFloat +** ARM_SoftFloat +** ARM_SoftFP +* AArch64 +* Alpha +** Alpha_SoftFloat +** Alpha_HardFloat +* X86 +* X86_64 +** D_X32 +* IA64 +* MIPS32 +* MIPS64 +** MIPS_O32 +** MIPS_O64 +** MIPS_N32 +** MIPS_N64 +** MIPS_EABI +** MIPS_HardFloat +** MIPS_SoftFloat +* HPPA +* HPPA64 +* PPC +* PPC64 +** PPC_HardFloat +** PPC_SoftFloat +* S390 +* S390X +* SH +* SH64 +* SPARC +* SPARC64 +* SPARC_V8Plus +** SPARC_HardFloat +** SPARC_SoftFloat + +Index: b/src/gcc/config/aarch64/aarch64.h +=================================================================== +--- a/src/gcc/config/aarch64/aarch64.h ++++ b/src/gcc/config/aarch64/aarch64.h +@@ -26,6 +26,14 @@ + #define TARGET_CPU_CPP_BUILTINS() \ + aarch64_cpu_cpp_builtins (pfile) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("AArch64"); \ ++ builtin_define ("D_HardFloat"); \ ++ } while (0) ++ + + + #define REGISTER_TARGET_PRAGMAS() aarch64_register_pragmas () +Index: b/src/gcc/config/alpha/alpha.h +=================================================================== +--- a/src/gcc/config/alpha/alpha.h ++++ b/src/gcc/config/alpha/alpha.h +@@ -72,6 +72,23 @@ along with GCC; see the file COPYING3. + SUBTARGET_LANGUAGE_CPP_BUILTINS(); \ + } while (0) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("Alpha"); \ ++ if (TARGET_SOFT_FP) \ ++ { \ ++ builtin_define ("D_SoftFloat"); \ ++ builtin_define ("Alpha_SoftFloat"); \ ++ } \ ++ else \ ++ { \ ++ builtin_define ("D_HardFloat"); \ ++ builtin_define ("Alpha_HardFloat"); \ ++ } \ ++} while (0) ++ + #ifndef SUBTARGET_LANGUAGE_CPP_BUILTINS + #define SUBTARGET_LANGUAGE_CPP_BUILTINS() \ + do \ +Index: b/src/gcc/config/arm/arm.h +=================================================================== +--- a/src/gcc/config/arm/arm.h ++++ b/src/gcc/config/arm/arm.h +@@ -47,6 +47,31 @@ extern char arm_arch_name[]; + /* Target CPU builtins. */ + #define TARGET_CPU_CPP_BUILTINS() arm_cpu_cpp_builtins (pfile) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("ARM"); \ ++ \ ++ if (TARGET_THUMB || TARGET_THUMB2) \ ++ builtin_define ("ARM_Thumb"); \ ++ \ ++ if (TARGET_HARD_FLOAT_ABI) \ ++ builtin_define ("ARM_HardFloat"); \ ++ else \ ++ { \ ++ if(TARGET_SOFT_FLOAT) \ ++ builtin_define ("ARM_SoftFloat"); \ ++ else if(TARGET_HARD_FLOAT) \ ++ builtin_define ("ARM_SoftFP"); \ ++ } \ ++ \ ++ if(TARGET_SOFT_FLOAT) \ ++ builtin_define ("D_SoftFloat"); \ ++ else if(TARGET_HARD_FLOAT) \ ++ builtin_define ("D_HardFloat"); \ ++ } while (0) ++ + #include "config/arm/arm-opts.h" + + /* The processor for which instructions should be scheduled. */ +Index: b/src/gcc/config/i386/i386.h +=================================================================== +--- a/src/gcc/config/i386/i386.h ++++ b/src/gcc/config/i386/i386.h +@@ -669,6 +669,24 @@ extern const char *host_detect_local_cpu + /* Target CPU builtins. */ + #define TARGET_CPU_CPP_BUILTINS() ix86_target_macros () + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do { \ ++ if (TARGET_64BIT) \ ++ { \ ++ builtin_define("X86_64"); \ ++ if (TARGET_X32) \ ++ builtin_define("D_X32"); \ ++ } \ ++ else \ ++ builtin_define("X86"); \ ++ \ ++ if (TARGET_80387) \ ++ builtin_define("D_HardFloat"); \ ++ else \ ++ builtin_define("D_SoftFloat"); \ ++ } while (0) ++ + /* Target Pragmas. */ + #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas () + +Index: b/src/gcc/config/ia64/ia64.h +=================================================================== +--- a/src/gcc/config/ia64/ia64.h ++++ b/src/gcc/config/ia64/ia64.h +@@ -40,6 +40,13 @@ do { \ + builtin_define("__BIG_ENDIAN__"); \ + } while (0) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++do { \ ++ builtin_define ("IA64"); \ ++ builtin_define ("D_HardFloat"); \ ++} while (0) ++ + #ifndef SUBTARGET_EXTRA_SPECS + #define SUBTARGET_EXTRA_SPECS + #endif +Index: b/src/gcc/config/mips/mips.h +=================================================================== +--- a/src/gcc/config/mips/mips.h ++++ b/src/gcc/config/mips/mips.h +@@ -644,6 +644,54 @@ struct mips_cpu_info { + } \ + while (0) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ if (TARGET_64BIT) \ ++ builtin_define("MIPS64"); \ ++ else \ ++ builtin_define("MIPS32"); \ ++ \ ++ switch (mips_abi) \ ++ { \ ++ case ABI_32: \ ++ builtin_define("MIPS_O32"); \ ++ break; \ ++ \ ++ case ABI_O64: \ ++ builtin_define("MIPS_O64"); \ ++ break; \ ++ \ ++ case ABI_N32: \ ++ builtin_define("MIPS_N32"); \ ++ break; \ ++ \ ++ case ABI_64: \ ++ builtin_define("MIPS_N64"); \ ++ break; \ ++ \ ++ case ABI_EABI: \ ++ builtin_define("MIPS_EABI"); \ ++ break; \ ++ \ ++ default: \ ++ gcc_unreachable(); \ ++ } \ ++ \ ++ if (TARGET_HARD_FLOAT_ABI) \ ++ { \ ++ builtin_define("MIPS_HardFloat"); \ ++ builtin_define("D_HardFloat"); \ ++ } \ ++ else if (TARGET_SOFT_FLOAT_ABI) \ ++ { \ ++ builtin_define("MIPS_SoftFloat"); \ ++ builtin_define("D_SoftFloat"); \ ++ } \ ++ } \ ++ while (0) ++ + /* Default target_flags if no switches are specified */ + + #ifndef TARGET_DEFAULT +Index: b/src/gcc/config/pa/pa.h +=================================================================== +--- a/src/gcc/config/pa/pa.h ++++ b/src/gcc/config/pa/pa.h +@@ -179,6 +179,20 @@ do { \ + builtin_define("_PA_RISC1_0"); \ + } while (0) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++do { \ ++ if(TARGET_64BIT) \ ++ builtin_define("HPPA64"); \ ++ else \ ++ builtin_define("HPPA"); \ ++ \ ++ if(TARGET_SOFT_FLOAT) \ ++ builtin_define ("D_SoftFloat"); \ ++ else \ ++ builtin_define ("D_HardFloat"); \ ++} while (0) ++ + /* An old set of OS defines for various BSD-like systems. */ + #define TARGET_OS_CPP_BUILTINS() \ + do \ +Index: b/src/gcc/config/rs6000/rs6000.h +=================================================================== +--- a/src/gcc/config/rs6000/rs6000.h ++++ b/src/gcc/config/rs6000/rs6000.h +@@ -822,6 +822,28 @@ extern unsigned char rs6000_recip_bits[] + #define TARGET_CPU_CPP_BUILTINS() \ + rs6000_cpu_cpp_builtins (pfile) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ if (TARGET_64BIT) \ ++ builtin_define ("PPC64"); \ ++ else \ ++ builtin_define ("PPC"); \ ++ \ ++ if (TARGET_HARD_FLOAT) \ ++ { \ ++ builtin_define ("PPC_HardFloat"); \ ++ builtin_define ("D_HardFloat"); \ ++ } \ ++ else if (TARGET_SOFT_FLOAT) \ ++ { \ ++ builtin_define ("PPC_SoftFloat"); \ ++ builtin_define ("D_SoftFloat"); \ ++ } \ ++ } \ ++ while (0) ++ + /* This is used by rs6000_cpu_cpp_builtins to indicate the byte order + we're compiling for. Some configurations may need to override it. */ + #define RS6000_CPU_CPP_ENDIAN_BUILTINS() \ +Index: b/src/gcc/config/s390/s390.h +=================================================================== +--- a/src/gcc/config/s390/s390.h ++++ b/src/gcc/config/s390/s390.h +@@ -194,6 +194,22 @@ enum processor_flags + /* Target CPU builtins. */ + #define TARGET_CPU_CPP_BUILTINS() s390_cpu_cpp_builtins (pfile) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ if (TARGET_64BIT) \ ++ builtin_define ("S390X"); \ ++ else \ ++ builtin_define ("S390"); \ ++ \ ++ if(TARGET_SOFT_FLOAT) \ ++ builtin_define ("D_SoftFloat"); \ ++ else if(TARGET_HARD_FLOAT) \ ++ builtin_define ("D_HardFloat"); \ ++ } \ ++ while (0) ++ + #ifdef DEFAULT_TARGET_64BIT + #define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_DFP \ + | MASK_OPT_HTM | MASK_OPT_VX) +Index: b/src/gcc/config/sh/sh.h +=================================================================== +--- a/src/gcc/config/sh/sh.h ++++ b/src/gcc/config/sh/sh.h +@@ -31,6 +31,19 @@ extern int code_for_indirect_jump_scratc + + #define TARGET_CPU_CPP_BUILTINS() sh_cpu_cpp_builtins (pfile) + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("SH"); \ ++ \ ++ if (TARGET_FPU_ANY) \ ++ builtin_define ("D_HardFloat"); \ ++ else \ ++ builtin_define ("D_SoftFloat"); \ ++ } \ ++ while (0) ++ + /* Value should be nonzero if functions must have frame pointers. + Zero means the frame pointer need not be set up (and parms may be accessed + via the stack pointer) in functions that seem suitable. */ +Index: b/src/gcc/config/sparc/sparc.h +=================================================================== +--- a/src/gcc/config/sparc/sparc.h ++++ b/src/gcc/config/sparc/sparc.h +@@ -27,6 +27,31 @@ along with GCC; see the file COPYING3. + + #define TARGET_CPU_CPP_BUILTINS() sparc_target_macros () + ++/* Target CPU builtins for D. */ ++#define TARGET_CPU_D_BUILTINS() \ ++do \ ++ { \ ++ if (TARGET_64BIT) \ ++ builtin_define ("SPARC64"); \ ++ else \ ++ builtin_define ("SPARC"); \ ++ \ ++ if(TARGET_V8PLUS) \ ++ builtin_define ("SPARC_V8Plus"); \ ++ \ ++ if(TARGET_FPU) \ ++ { \ ++ builtin_define ("D_HardFloat"); \ ++ builtin_define ("SPARC_HardFloat"); \ ++ } \ ++ else \ ++ { \ ++ builtin_define ("D_SoftFloat"); \ ++ builtin_define ("SPARC_SoftFloat"); \ ++ } \ ++ } \ ++ while (0) ++ + /* Specify this in a cover file to provide bi-architecture (32/64) support. */ + /* #define SPARC_BI_ARCH */ + --- gcc-7-7.2.0.orig/debian/patches/gdc-versym-os.diff +++ gcc-7-7.2.0/debian/patches/gdc-versym-os.diff @@ -0,0 +1,409 @@ +# DP: Implements D OS version conditions. + +This implements the following official versions: +* Windows +** Win32 +** Win64 +** Cygwin +** MinGW +* linux +* OSX +* FreeBSD +* OpenBSD +* NetBSD +* Solaris +* Posix +* AIX +* SysV4 +* Hurd +* Android + +These gdc specific versions are also implemented: +* GNU_MinGW64 (for mingw-w64) +* GNU_OpenSolaris (for opensolaris) +* GNU_GLibc (implemented for linux & bsd & opensolaris) +* GNU_UCLibc (implemented for linux) +* GNU_Bionic (implemented for linux) + +These official OS versions are not implemented: +* DragonFlyBSD +* BSD (other BSDs) +* Haiku +* SkyOS +* SysV3 + +Index: b/src/gcc/config/alpha/linux.h +=================================================================== +--- a/src/gcc/config/alpha/linux.h ++++ b/src/gcc/config/alpha/linux.h +@@ -33,6 +33,16 @@ along with GCC; see the file COPYING3. + builtin_define ("_GNU_SOURCE"); \ + } while (0) + ++#undef TARGET_OS_D_BUILTINS ++#define TARGET_OS_D_BUILTINS() \ ++ do { \ ++ if (OPTION_GLIBC) \ ++ builtin_define ("GNU_GLibc"); \ ++ \ ++ builtin_define ("linux"); \ ++ builtin_define ("Posix"); \ ++ } while (0) ++ + #undef LIB_SPEC + #define LIB_SPEC \ + "%{pthread:-lpthread} \ +Index: b/src/gcc/config/arm/linux-eabi.h +=================================================================== +--- a/src/gcc/config/arm/linux-eabi.h ++++ b/src/gcc/config/arm/linux-eabi.h +@@ -30,6 +30,15 @@ + } \ + while (false) + ++#undef TARGET_OS_D_BUILTINS ++#define TARGET_OS_D_BUILTINS() \ ++ do \ ++ { \ ++ TARGET_GENERIC_LINUX_OS_D_BUILTINS(); \ ++ ANDROID_TARGET_OS_D_BUILTINS(); \ ++ } \ ++ while (false) ++ + /* We default to a soft-float ABI so that binaries can run on all + target hardware. If you override this to use the hard-float ABI then + change the setting of GLIBC_DYNAMIC_LINKER_DEFAULT as well. */ +Index: b/src/gcc/config/darwin.h +=================================================================== +--- a/src/gcc/config/darwin.h ++++ b/src/gcc/config/darwin.h +@@ -972,4 +972,10 @@ extern void darwin_driver_init (unsigned + #define DEF_LD64 LD64_VERSION + #endif + ++#define TARGET_OS_D_BUILTINS() \ ++ do { \ ++ builtin_define ("OSX"); \ ++ builtin_define ("Posix"); \ ++ } while (0) ++ + #endif /* CONFIG_DARWIN_H */ +Index: b/src/gcc/config/freebsd.h +=================================================================== +--- a/src/gcc/config/freebsd.h ++++ b/src/gcc/config/freebsd.h +@@ -32,6 +32,13 @@ along with GCC; see the file COPYING3. + #undef TARGET_OS_CPP_BUILTINS + #define TARGET_OS_CPP_BUILTINS() FBSD_TARGET_OS_CPP_BUILTINS() + ++#undef TARGET_OS_D_BUILTINS ++#define TARGET_OS_D_BUILTINS() \ ++ do { \ ++ builtin_define ("FreeBSD"); \ ++ builtin_define ("Posix"); \ ++ } while (0) ++ + #undef CPP_SPEC + #define CPP_SPEC FBSD_CPP_SPEC + +Index: b/src/gcc/config/gnu.h +=================================================================== +--- a/src/gcc/config/gnu.h ++++ b/src/gcc/config/gnu.h +@@ -31,3 +31,11 @@ along with GCC. If not, see . symlink, and having a +# DP: /usr directory like the other ports. So this patch should NOT go +# DP: upstream. + +--- + config.gcc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/src/gcc/config.gcc (rvision 182461) ++++ b/src/gcc/config.gcc (copie de travail) +@@ -583,7 +583,7 @@ + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-kopensolaris*-gnu) + :;; + *-*-gnu*) +- native_system_header_dir=/include ++ # native_system_header_dir=/include + ;; + esac + # glibc / uclibc / bionic switch. --- gcc-7-7.2.0.orig/debian/patches/ignore-pie-specs-when-not-enabled.diff +++ gcc-7-7.2.0/debian/patches/ignore-pie-specs-when-not-enabled.diff @@ -0,0 +1,56 @@ +# DP: Ignore dpkg's pie specs when pie is not enabled. + +Index: b/src/gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c ++++ b/src/gcc/gcc.c +@@ -3715,6 +3715,36 @@ handle_foffload_option (const char *arg) + } + } + ++static bool ignore_pie_specs_when_not_enabled(const char *envvar, ++ const char *specname) ++{ ++ const char *envval = secure_getenv(envvar); ++ char *hardening; ++ bool ignore; ++ ++ if (strstr (specname, "/pie-compile.specs") == NULL ++ && strstr (specname, "/pie-link.specs") == NULL) ++ return false; ++ if (envval == NULL || strstr (envval, "hardening=") == NULL) ++ return true; ++ ignore = true; ++ hardening = (char *) xmalloc (strlen(envval) + 1); ++ strcpy (hardening, strstr (envval, "hardening=")); ++ if (strchr (hardening, ' ')) ++ *strchr (hardening, ' ') = '\0'; ++ if (strstr(hardening, "+all")) ++ { ++ if (strstr(hardening, "-pie") == NULL) ++ ignore = false; ++ } ++ else if (strstr(hardening, "+pie")) ++ { ++ ignore = false; ++ } ++ free (hardening); ++ return ignore; ++} ++ + /* Handle a driver option; arguments and return value as for + handle_option. */ + +@@ -3989,6 +4019,12 @@ driver_handle_option (struct gcc_options + break; + + case OPT_specs_: ++ if (ignore_pie_specs_when_not_enabled("DEB_BUILD_MAINT_OPTIONS", arg) ++ && ignore_pie_specs_when_not_enabled("DEB_BUILD_OPTIONS", arg)) ++ { ++ inform (0, "pie specs %s ignored when pie is not enabled", arg); ++ return true; ++ } + { + struct user_specs *user = XNEW (struct user_specs); + --- gcc-7-7.2.0.orig/debian/patches/kfreebsd-unwind.diff +++ gcc-7-7.2.0/debian/patches/kfreebsd-unwind.diff @@ -0,0 +1,48 @@ +# DP: DWARF2 EH unwinding support for AMD x86-64 and x86 KFreeBSD. + +Index: b/src/libgcc/config.host +=================================================================== +--- a/src/libgcc/config.host ++++ b/src/libgcc/config.host +@@ -620,7 +620,13 @@ i[34567]86-*-linux*) + tm_file="${tm_file} i386/elf-lib.h" + md_unwind_header=i386/linux-unwind.h + ;; +-i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu) ++i[34567]86-*-kfreebsd*-gnu) ++ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o" ++ tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules" ++ tm_file="${tm_file} i386/elf-lib.h" ++ md_unwind_header=i386/freebsd-unwind.h ++ ;; ++i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu) + extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o" + tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules" + tm_file="${tm_file} i386/elf-lib.h" +@@ -635,6 +641,7 @@ x86_64-*-kfreebsd*-gnu) + extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o" + tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules" + tm_file="${tm_file} i386/elf-lib.h" ++ md_unwind_header=i386/freebsd-unwind.h + ;; + i[34567]86-pc-msdosdjgpp*) + ;; +Index: b/src/libgcc/config/i386/freebsd-unwind.h +=================================================================== +--- a/src/libgcc/config/i386/freebsd-unwind.h ++++ b/src/libgcc/config/i386/freebsd-unwind.h +@@ -26,6 +26,8 @@ see the files COPYING3 and COPYING.RUNTI + /* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + ++#ifndef inhibit_libc ++ + #include + #include + #include +@@ -171,3 +173,5 @@ x86_freebsd_fallback_frame_state + return _URC_NO_REASON; + } + #endif /* ifdef __x86_64__ */ ++ ++#endif /* ifndef inhibit_libc */ --- gcc-7-7.2.0.orig/debian/patches/libasan-sparc.diff +++ gcc-7-7.2.0/debian/patches/libasan-sparc.diff @@ -0,0 +1,163 @@ +# DP: Re-apply sanitizer patch for sparc, dropped upstream + +# don't remove, this is regularly overwritten, see PR sanitizer/63958. + +libsanitizer/ + +2014-10-14 David S. Miller + + * sanitizer_common/sanitizer_platform_limits_linux.cc (time_t): + Define at __kernel_time_t, as needed for sparc. + (struct __old_kernel_stat): Don't check if __sparc__ is defined. + * libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h + (__sanitizer): Define struct___old_kernel_stat_sz, + struct_kernel_stat_sz, and struct_kernel_stat64_sz for sparc. + (__sanitizer_ipc_perm): Adjust for sparc targets. + (__sanitizer_shmid_ds): Likewsie. + (__sanitizer_sigaction): Likewsie. + (IOC_SIZE): Likewsie. + +Index: libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h +=================================================================== +--- a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h (revision 216223) ++++ a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h (revision 216224) +@@ -72,6 +72,14 @@ + const unsigned struct_kernel_stat_sz = 144; + #endif + const unsigned struct_kernel_stat64_sz = 104; ++#elif defined(__sparc__) && defined(__arch64__) ++ const unsigned struct___old_kernel_stat_sz = 0; ++ const unsigned struct_kernel_stat_sz = 104; ++ const unsigned struct_kernel_stat64_sz = 144; ++#elif defined(__sparc__) && !defined(__arch64__) ++ const unsigned struct___old_kernel_stat_sz = 0; ++ const unsigned struct_kernel_stat_sz = 64; ++ const unsigned struct_kernel_stat64_sz = 104; + #endif + struct __sanitizer_perf_event_attr { + unsigned type; +@@ -94,7 +102,7 @@ + + #if defined(__powerpc64__) + const unsigned struct___old_kernel_stat_sz = 0; +-#else ++#elif !defined(__sparc__) + const unsigned struct___old_kernel_stat_sz = 32; + #endif + +@@ -173,6 +181,18 @@ + unsigned short __pad1; + unsigned long __unused1; + unsigned long __unused2; ++#elif defined(__sparc__) ++# if defined(__arch64__) ++ unsigned mode; ++ unsigned short __pad1; ++# else ++ unsigned short __pad1; ++ unsigned short mode; ++ unsigned short __pad2; ++# endif ++ unsigned short __seq; ++ unsigned long long __unused1; ++ unsigned long long __unused2; + #else + unsigned short mode; + unsigned short __pad1; +@@ -190,6 +210,26 @@ + + struct __sanitizer_shmid_ds { + __sanitizer_ipc_perm shm_perm; ++ #if defined(__sparc__) ++ # if !defined(__arch64__) ++ u32 __pad1; ++ # endif ++ long shm_atime; ++ # if !defined(__arch64__) ++ u32 __pad2; ++ # endif ++ long shm_dtime; ++ # if !defined(__arch64__) ++ u32 __pad3; ++ # endif ++ long shm_ctime; ++ uptr shm_segsz; ++ int shm_cpid; ++ int shm_lpid; ++ unsigned long shm_nattch; ++ unsigned long __glibc_reserved1; ++ unsigned long __glibc_reserved2; ++ #else + #ifndef __powerpc__ + uptr shm_segsz; + #elif !defined(__powerpc64__) +@@ -227,6 +267,7 @@ + uptr __unused4; + uptr __unused5; + #endif ++#endif + }; + #elif SANITIZER_FREEBSD + struct __sanitizer_ipc_perm { +@@ -523,9 +564,13 @@ + #else + __sanitizer_sigset_t sa_mask; + #ifndef __mips__ ++#if defined(__sparc__) ++ unsigned long sa_flags; ++#else + int sa_flags; + #endif + #endif ++#endif + #if SANITIZER_LINUX + void (*sa_restorer)(); + #endif +@@ -745,7 +790,7 @@ + + #define IOC_NRBITS 8 + #define IOC_TYPEBITS 8 +-#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) ++#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || defined(__sparc__) + #define IOC_SIZEBITS 13 + #define IOC_DIRBITS 3 + #define IOC_NONE 1U +@@ -775,7 +820,17 @@ + #define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK) + #define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK) + #define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK) ++ ++#if defined(__sparc__) ++// In sparc the 14 bits SIZE field overlaps with the ++// least significant bit of DIR, so either IOC_READ or ++// IOC_WRITE shall be 1 in order to get a non-zero SIZE. ++# define IOC_SIZE(nr) \ ++ ((((((nr) >> 29) & 0x7) & (4U|2U)) == 0)? \ ++ 0 : (((nr) >> 16) & 0x3fff)) ++#else + #define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK) ++#endif + + extern unsigned struct_arpreq_sz; + extern unsigned struct_ifreq_sz; +Index: libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cc +=================================================================== +--- a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cc (revision 216223) ++++ a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cc (revision 216224) +@@ -36,6 +36,7 @@ + #define uid_t __kernel_uid_t + #define gid_t __kernel_gid_t + #define off_t __kernel_off_t ++#define time_t __kernel_time_t + // This header seems to contain the definitions of _kernel_ stat* structs. + #include + #undef ino_t +@@ -60,7 +61,7 @@ + } // namespace __sanitizer + + #if !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__aarch64__)\ +- && !defined(__mips__) ++ && !defined(__mips__) && !defined(__sparc__) + COMPILER_CHECK(struct___old_kernel_stat_sz == sizeof(struct __old_kernel_stat)); + #endif + --- gcc-7-7.2.0.orig/debian/patches/libcilkrts-targets.diff +++ gcc-7-7.2.0/debian/patches/libcilkrts-targets.diff @@ -0,0 +1,21 @@ +# DP: Disable libcilkrts on KFreeBSD and the Hurd. See #734973. + +Index: b/src/libcilkrts/configure.tgt +=================================================================== +--- a/src/libcilkrts/configure.tgt ++++ b/src/libcilkrts/configure.tgt +@@ -57,3 +57,14 @@ esac + + # Disable libcilkrts on non POSIX hosted systems. + . ${srcdir}/../config/target-posix ++ ++# Disable libcilkrts on KFreeBSD and the Hurd. ++if test x$enable_libcilkrts = x ; then ++ case "${target}" in ++ *-*-linux*) ++ ;; ++ *-*-gnu* | *-*-k*bsd*-gnu) ++ UNSUPPORTED=1 ++ ;; ++ esac ++fi --- gcc-7-7.2.0.orig/debian/patches/libffi-mips.diff +++ gcc-7-7.2.0/debian/patches/libffi-mips.diff @@ -0,0 +1,703 @@ +# DP: Backport Mips go closure support, taken from libffi issue #197. + +--- a/src/libffi/src/mips/ffi.c ++++ b/src/libffi/src/mips/ffi.c +@@ -581,14 +581,15 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) + /* Low level routine for calling O32 functions */ + extern int ffi_call_O32(void (*)(char *, extended_cif *, int, int), + extended_cif *, unsigned, +- unsigned, unsigned *, void (*)(void)); ++ unsigned, unsigned *, void (*)(void), void *closure); + + /* Low level routine for calling N32 functions */ + extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), + extended_cif *, unsigned, +- unsigned, void *, void (*)(void)); ++ unsigned, void *, void (*)(void), void *closure); + +-void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++void ffi_call_int(ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) + { + extended_cif ecif; + +@@ -610,7 +611,7 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) + case FFI_O32: + case FFI_O32_SOFT_FLOAT: + ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, +- cif->flags, ecif.rvalue, fn); ++ cif->flags, ecif.rvalue, fn, closure); + break; + #endif + +@@ -642,7 +643,7 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) + #endif + } + ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, +- cif->flags, rvalue_copy, fn); ++ cif->flags, rvalue_copy, fn, closure); + if (copy_rvalue) + memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); + } +@@ -655,11 +656,27 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) + } + } + ++void ++ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++ ++ + #if FFI_CLOSURES + #if defined(FFI_MIPS_O32) + extern void ffi_closure_O32(void); ++extern void ffi_go_closure_O32(void); + #else + extern void ffi_closure_N32(void); ++extern void ffi_go_closure_N32(void); + #endif /* FFI_MIPS_O32 */ + + ffi_status +@@ -762,17 +779,17 @@ ffi_prep_closure_loc (ffi_closure *closure, + * Based on the similar routine for sparc. + */ + int +-ffi_closure_mips_inner_O32 (ffi_closure *closure, ++ffi_closure_mips_inner_O32 (ffi_cif *cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, + void *rvalue, ffi_arg *ar, + double *fpr) + { +- ffi_cif *cif; + void **avaluep; + ffi_arg *avalue; + ffi_type **arg_types; + int i, avn, argn, seen_int; + +- cif = closure->cif; + avalue = alloca (cif->nargs * sizeof (ffi_arg)); + avaluep = alloca (cif->nargs * sizeof (ffi_arg)); + +@@ -840,7 +857,7 @@ ffi_closure_mips_inner_O32 (ffi_closure *closure, + } + + /* Invoke the closure. */ +- (closure->fun) (cif, rvalue, avaluep, closure->user_data); ++ fun(cif, rvalue, avaluep, user_data); + + if (cif->abi == FFI_O32_SOFT_FLOAT) + { +@@ -916,11 +933,12 @@ copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, + * + */ + int +-ffi_closure_mips_inner_N32 (ffi_closure *closure, ++ffi_closure_mips_inner_N32 (ffi_cif *cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, + void *rvalue, ffi_arg *ar, + ffi_arg *fpr) + { +- ffi_cif *cif; + void **avaluep; + ffi_arg *avalue; + ffi_type **arg_types; +@@ -928,7 +946,6 @@ ffi_closure_mips_inner_N32 (ffi_closure *closure, + int soft_float; + ffi_arg *argp; + +- cif = closure->cif; + soft_float = cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT; + avalue = alloca (cif->nargs * sizeof (ffi_arg)); +@@ -1040,11 +1057,49 @@ ffi_closure_mips_inner_N32 (ffi_closure *closure, + } + + /* Invoke the closure. */ +- (closure->fun) (cif, rvalue, avaluep, closure->user_data); ++ fun (cif, rvalue, avaluep, user_data); + + return cif->flags >> (FFI_FLAG_BITS * 8); + } + + #endif /* FFI_MIPS_N32 */ + ++#if defined(FFI_MIPS_O32) ++extern void ffi_closure_O32(void); ++extern void ffi_go_closure_O32(void); ++#else ++extern void ffi_closure_N32(void); ++extern void ffi_go_closure_N32(void); ++#endif /* FFI_MIPS_O32 */ ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) ++{ ++ void * fn; ++ ++#if defined(FFI_MIPS_O32) ++ if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT) ++ return FFI_BAD_ABI; ++ fn = ffi_go_closure_O32; ++#else ++#if _MIPS_SIM ==_ABIN32 ++ if (cif->abi != FFI_N32 ++ && cif->abi != FFI_N32_SOFT_FLOAT) ++ return FFI_BAD_ABI; ++#else ++ if (cif->abi != FFI_N64 ++ && cif->abi != FFI_N64_SOFT_FLOAT) ++ return FFI_BAD_ABI; ++#endif ++ fn = ffi_go_closure_N32; ++#endif /* FFI_MIPS_O32 */ ++ ++ closure->tramp = (void *)fn; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ + #endif /* FFI_CLOSURES */ +--- a/src/libffi/src/mips/ffitarget.h ++++ b/src/libffi/src/mips/ffitarget.h +@@ -231,12 +231,14 @@ typedef enum ffi_abi { + + #if defined(FFI_MIPS_O32) + #define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 + #define FFI_TRAMPOLINE_SIZE 20 + #else + /* N32/N64. */ + # define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 + #if _MIPS_SIM==_ABI64 +-#define FFI_TRAMPOLINE_SIZE 52 ++#define FFI_TRAMPOLINE_SIZE 56 + #else + #define FFI_TRAMPOLINE_SIZE 20 + #endif +--- a/src/libffi/src/mips/n32.S ++++ b/src/libffi/src/mips/n32.S +@@ -37,8 +37,12 @@ + #define flags a3 + #define raddr a4 + #define fn a5 ++#define closure a6 + +-#define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) ++/* Note: to keep stack 16 byte aligned we need even number slots ++ used 9 slots here ++*/ ++#define SIZEOF_FRAME ( 10 * FFI_SIZEOF_ARG ) + + #ifdef __GNUC__ + .abicalls +@@ -49,24 +53,25 @@ + .globl ffi_call_N32 + .ent ffi_call_N32 + ffi_call_N32: +-.LFB3: ++.LFB0: + .frame $fp, SIZEOF_FRAME, ra + .mask 0xc0000000,-FFI_SIZEOF_ARG + .fmask 0x00000000,0 + + # Prologue + SUBU $sp, SIZEOF_FRAME # Frame size +-.LCFI0: ++.LCFI00: + REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer + REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address +-.LCFI1: ++.LCFI01: + move $fp, $sp +-.LCFI3: ++.LCFI02: + move t9, callback # callback function pointer + REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes + REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags + REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr + REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn ++ REG_S closure, 6*FFI_SIZEOF_ARG($fp) # closure + + # Allocate at least 4 words in the argstack + move v0, bytes +@@ -198,6 +203,9 @@ callit: + # Load the function pointer + REG_L t9, 5*FFI_SIZEOF_ARG($fp) + ++ # install the static chain(t7=$15) ++ REG_L t7, 6*FFI_SIZEOF_ARG($fp) ++ + # If the return value pointer is NULL, assume no return value. + REG_L t5, 4*FFI_SIZEOF_ARG($fp) + beqz t5, noretval +@@ -346,7 +354,7 @@ epilogue: + ADDU $sp, SIZEOF_FRAME # Fix stack pointer + j ra + +-.LFE3: ++.LFE0: + .end ffi_call_N32 + + /* ffi_closure_N32. Expects address of the passed-in ffi_closure in t0 +@@ -406,6 +414,41 @@ epilogue: + #define GP_OFF2 (0 * FFI_SIZEOF_ARG) + + .align 2 ++ .globl ffi_go_closure_N32 ++ .ent ffi_go_closure_N32 ++ffi_go_closure_N32: ++.LFB1: ++ .frame $sp, SIZEOF_FRAME2, ra ++ .mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2) ++ .fmask 0x00000000,0 ++ SUBU $sp, SIZEOF_FRAME2 ++.LCFI10: ++ .cpsetup t9, GP_OFF2, ffi_go_closure_N32 ++ REG_S ra, RA_OFF2($sp) # Save return address ++.LCFI11: ++ ++ REG_S a0, A0_OFF2($sp) ++ REG_S a1, A1_OFF2($sp) ++ REG_S a2, A2_OFF2($sp) ++ REG_S a3, A3_OFF2($sp) ++ REG_S a4, A4_OFF2($sp) ++ REG_S a5, A5_OFF2($sp) ++ ++ # Call ffi_closure_mips_inner_N32 to do the real work. ++ LA t9, ffi_closure_mips_inner_N32 ++ REG_L a0, 8($15) # cif ++ REG_L a1, 16($15) # fun ++ move a2, t7 # userdata=closure ++ ADDU a3, $sp, V0_OFF2 # rvalue ++ ADDU a4, $sp, A0_OFF2 # ar ++ ADDU a5, $sp, F12_OFF2 # fpr ++ ++ b $do_closure ++ ++.LFE1: ++ .end ffi_go_closure_N32 ++ ++ .align 2 + .globl ffi_closure_N32 + .ent ffi_closure_N32 + ffi_closure_N32: +@@ -414,18 +457,29 @@ ffi_closure_N32: + .mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2) + .fmask 0x00000000,0 + SUBU $sp, SIZEOF_FRAME2 +-.LCFI5: ++.LCFI20: + .cpsetup t9, GP_OFF2, ffi_closure_N32 + REG_S ra, RA_OFF2($sp) # Save return address +-.LCFI6: +- # Store all possible argument registers. If there are more than +- # fit in registers, then they were stored on the stack. ++.LCFI21: + REG_S a0, A0_OFF2($sp) + REG_S a1, A1_OFF2($sp) + REG_S a2, A2_OFF2($sp) + REG_S a3, A3_OFF2($sp) + REG_S a4, A4_OFF2($sp) + REG_S a5, A5_OFF2($sp) ++ ++ # Call ffi_closure_mips_inner_N32 to do the real work. ++ LA t9, ffi_closure_mips_inner_N32 ++ REG_L a0, 56($12) # cif ++ REG_L a1, 64($12) # fun ++ REG_L a2, 72($12) # user_data ++ ADDU a3, $sp, V0_OFF2 ++ ADDU a4, $sp, A0_OFF2 ++ ADDU a5, $sp, F12_OFF2 ++ ++$do_closure: ++ # Store all possible argument registers. If there are more than ++ # fit in registers, then they were stored on the stack. + REG_S a6, A6_OFF2($sp) + REG_S a7, A7_OFF2($sp) + +@@ -439,12 +493,6 @@ ffi_closure_N32: + s.d $f18, F18_OFF2($sp) + s.d $f19, F19_OFF2($sp) + +- # Call ffi_closure_mips_inner_N32 to do the real work. +- LA t9, ffi_closure_mips_inner_N32 +- move a0, $12 # Pointer to the ffi_closure +- ADDU a1, $sp, V0_OFF2 +- ADDU a2, $sp, A0_OFF2 +- ADDU a3, $sp, F12_OFF2 + jalr t9 + + # Return flags are in v0 +@@ -531,46 +579,66 @@ cls_epilogue: + .align EH_FRAME_ALIGN + .LECIE1: + +-.LSFDE1: +- .4byte .LEFDE1-.LASFDE1 # length. +-.LASFDE1: +- .4byte .LASFDE1-.Lframe1 # CIE_pointer. +- FDE_ADDR_BYTES .LFB3 # initial_location. +- FDE_ADDR_BYTES .LFE3-.LFB3 # address_range. ++.LSFDE0: ++ .4byte .LEFDE0-.LASFDE0 # length. ++.LASFDE0: ++ .4byte .LASFDE0-.Lframe1 # CIE_pointer. ++ FDE_ADDR_BYTES .LFB0 # initial_location. ++ FDE_ADDR_BYTES .LFE0-.LFB0 # address_range. + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte .LCFI0-.LFB3 # to .LCFI0 ++ .4byte .LCFI00-.LFB0 # to .LCFI00 + .byte 0xe # DW_CFA_def_cfa_offset + .uleb128 SIZEOF_FRAME # adjust stack.by SIZEOF_FRAME + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte .LCFI1-.LCFI0 # to .LCFI1 ++ .4byte .LCFI01-.LCFI00 # to .LCFI01 + .byte 0x9e # DW_CFA_offset of $fp + .uleb128 2*FFI_SIZEOF_ARG/4 # + .byte 0x9f # DW_CFA_offset of ra + .uleb128 1*FFI_SIZEOF_ARG/4 # + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte .LCFI3-.LCFI1 # to .LCFI3 ++ .4byte .LCFI02-.LCFI01 # to .LCFI02 + .byte 0xd # DW_CFA_def_cfa_register + .uleb128 0x1e # in $fp + .align EH_FRAME_ALIGN ++.LEFDE0: ++ ++.LSFDE1: ++ .4byte .LEFDE1-.LASFDE1 # length ++.LASFDE1: ++ .4byte .LASFDE1-.Lframe1 # CIE_pointer. ++ FDE_ADDR_BYTES .LFB1 # initial_location. ++ FDE_ADDR_BYTES .LFE1-.LFB1 # address_range. ++ .byte 0x4 # DW_CFA_advance_loc4 ++ .4byte .LCFI10-.LFB1 # to .LCFI10 ++ .byte 0xe # DW_CFA_def_cfa_offset ++ .uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME ++ .byte 0x4 # DW_CFA_advance_loc4 ++ .4byte .LCFI11-.LCFI10 # to .LCFI11 ++ .byte 0x9c # DW_CFA_offset of $gp ($28) ++ .uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4 ++ .byte 0x9f # DW_CFA_offset of ra ($31) ++ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 ++ .align EH_FRAME_ALIGN + .LEFDE1: +-.LSFDE3: +- .4byte .LEFDE3-.LASFDE3 # length +-.LASFDE3: +- .4byte .LASFDE3-.Lframe1 # CIE_pointer. ++ ++.LSFDE2: ++ .4byte .LEFDE2-.LASFDE2 # length ++.LASFDE2: ++ .4byte .LASFDE2-.Lframe1 # CIE_pointer. + FDE_ADDR_BYTES .LFB2 # initial_location. + FDE_ADDR_BYTES .LFE2-.LFB2 # address_range. + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte .LCFI5-.LFB2 # to .LCFI5 ++ .4byte .LCFI20-.LFB2 # to .LCFI20 + .byte 0xe # DW_CFA_def_cfa_offset + .uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte .LCFI6-.LCFI5 # to .LCFI6 ++ .4byte .LCFI21-.LCFI20 # to .LCFI21 + .byte 0x9c # DW_CFA_offset of $gp ($28) + .uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4 + .byte 0x9f # DW_CFA_offset of ra ($31) + .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 + .align EH_FRAME_ALIGN +-.LEFDE3: ++.LEFDE2: + #endif /* __GNUC__ */ + + #endif +--- a/src/libffi/src/mips/o32.S ++++ b/src/libffi/src/mips/o32.S +@@ -50,14 +50,14 @@ ffi_call_O32: + $LFB0: + # Prologue + SUBU $sp, SIZEOF_FRAME # Frame size +-$LCFI0: ++$LCFI00: + REG_S $fp, FP_OFF($sp) # Save frame pointer +-$LCFI1: ++$LCFI01: + REG_S ra, RA_OFF($sp) # Save return address +-$LCFI2: ++$LCFI02: + move $fp, $sp + +-$LCFI3: ++$LCFI03: + move t9, callback # callback function pointer + REG_S flags, A3_OFF($fp) # flags + +@@ -132,6 +132,9 @@ pass_f_d: + l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float + + call_it: ++ # Load the static chain pointer ++ REG_L t7, SIZEOF_FRAME + 6*FFI_SIZEOF_ARG($fp) ++ + # Load the function pointer + REG_L t9, SIZEOF_FRAME + 5*FFI_SIZEOF_ARG($fp) + +@@ -204,13 +207,15 @@ $LFE0: + -8 - f14 (le low, be high) + -9 - f12 (le high, be low) + -10 - f12 (le low, be high) +- -11 - Called function a3 save +- -12 - Called function a2 save +- -13 - Called function a1 save +- -14 - Called function a0 save, our sp and fp point here ++ -11 - Called function a5 save ++ -12 - Called function a4 save ++ -13 - Called function a3 save ++ -14 - Called function a2 save ++ -15 - Called function a1 save ++ -16 - Called function a0 save, our sp and fp point here + */ + +-#define SIZEOF_FRAME2 (14 * FFI_SIZEOF_ARG) ++#define SIZEOF_FRAME2 (16 * FFI_SIZEOF_ARG) + #define A3_OFF2 (SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG) + #define A2_OFF2 (SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG) + #define A1_OFF2 (SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG) +@@ -225,13 +230,71 @@ $LFE0: + #define FA_1_0_OFF2 (SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG) + #define FA_0_1_OFF2 (SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG) + #define FA_0_0_OFF2 (SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG) ++#define CALLED_A5_OFF2 (SIZEOF_FRAME2 - 11 * FFI_SIZEOF_ARG) ++#define CALLED_A4_OFF2 (SIZEOF_FRAME2 - 12 * FFI_SIZEOF_ARG) + + .text ++ ++ .align 2 ++ .globl ffi_go_closure_O32 ++ .ent ffi_go_closure_O32 ++ffi_go_closure_O32: ++$LFB1: ++ # Prologue ++ .frame $fp, SIZEOF_FRAME2, ra ++ .set noreorder ++ .cpload t9 ++ .set reorder ++ SUBU $sp, SIZEOF_FRAME2 ++ .cprestore GP_OFF2 ++$LCFI10: ++ ++ REG_S $16, S0_OFF2($sp) # Save s0 ++ REG_S $fp, FP_OFF2($sp) # Save frame pointer ++ REG_S ra, RA_OFF2($sp) # Save return address ++$LCFI11: ++ ++ move $fp, $sp ++$LCFI12: ++ ++ REG_S a0, A0_OFF2($fp) ++ REG_S a1, A1_OFF2($fp) ++ REG_S a2, A2_OFF2($fp) ++ REG_S a3, A3_OFF2($fp) ++ ++ # Load ABI enum to s0 ++ REG_L $16, 4($15) # cif ++ REG_L $16, 0($16) # abi is first member. ++ ++ li $13, 1 # FFI_O32 ++ bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT ++ ++ # Store all possible float/double registers. ++ s.d $f12, FA_0_0_OFF2($fp) ++ s.d $f14, FA_1_0_OFF2($fp) ++1: ++ # prepare arguments for ffi_closure_mips_inner_O32 ++ REG_L a0, 4($15) # cif ++ REG_L a1, 8($15) # fun ++ move a2, $15 # user_data = go closure ++ addu a3, $fp, V0_OFF2 # rvalue ++ ++ addu t9, $fp, A0_OFF2 # ar ++ REG_S t9, CALLED_A4_OFF2($fp) ++ ++ addu t9, $fp, FA_0_0_OFF2 #fpr ++ REG_S t9, CALLED_A5_OFF2($fp) ++ ++ b $do_closure ++ ++$LFE1: ++ .end ffi_go_closure_O32 ++ + .align 2 + .globl ffi_closure_O32 + .ent ffi_closure_O32 + ffi_closure_O32: +-$LFB1: ++$LFB2: + # Prologue + .frame $fp, SIZEOF_FRAME2, ra + .set noreorder +@@ -239,14 +302,14 @@ $LFB1: + .set reorder + SUBU $sp, SIZEOF_FRAME2 + .cprestore GP_OFF2 +-$LCFI4: ++$LCFI20: + REG_S $16, S0_OFF2($sp) # Save s0 + REG_S $fp, FP_OFF2($sp) # Save frame pointer + REG_S ra, RA_OFF2($sp) # Save return address +-$LCFI6: ++$LCFI21: + move $fp, $sp + +-$LCFI7: ++$LCFI22: + # Store all possible argument registers. If there are more than + # four arguments, then they are stored above where we put a3. + REG_S a0, A0_OFF2($fp) +@@ -265,12 +328,21 @@ $LCFI7: + s.d $f12, FA_0_0_OFF2($fp) + s.d $f14, FA_1_0_OFF2($fp) + 1: +- # Call ffi_closure_mips_inner_O32 to do the work. ++ # prepare arguments for ffi_closure_mips_inner_O32 ++ REG_L a0, 20($12) # cif pointer follows tramp. ++ REG_L a1, 24($12) # fun ++ REG_L a2, 28($12) # user_data ++ addu a3, $fp, V0_OFF2 # rvalue ++ ++ addu t9, $fp, A0_OFF2 # ar ++ REG_S t9, CALLED_A4_OFF2($fp) ++ ++ addu t9, $fp, FA_0_0_OFF2 #fpr ++ REG_S t9, CALLED_A5_OFF2($fp) ++ ++$do_closure: + la t9, ffi_closure_mips_inner_O32 +- move a0, $12 # Pointer to the ffi_closure +- addu a1, $fp, V0_OFF2 +- addu a2, $fp, A0_OFF2 +- addu a3, $fp, FA_0_0_OFF2 ++ # Call ffi_closure_mips_inner_O32 to do the work. + jalr t9 + + # Load the return value into the appropriate register. +@@ -300,7 +372,7 @@ closure_done: + REG_L ra, RA_OFF2($sp) # Restore return address + ADDU $sp, SIZEOF_FRAME2 + j ra +-$LFE1: ++$LFE2: + .end ffi_closure_O32 + + /* DWARF-2 unwind info. */ +@@ -322,6 +394,7 @@ $LSCIE0: + .uleb128 0x0 + .align 2 + $LECIE0: ++ + $LSFDE0: + .4byte $LEFDE0-$LASFDE0 # FDE Length + $LASFDE0: +@@ -330,11 +403,11 @@ $LASFDE0: + .4byte $LFE0-$LFB0 # FDE address range + .uleb128 0x0 # Augmentation size + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI0-$LFB0 ++ .4byte $LCFI00-$LFB0 + .byte 0xe # DW_CFA_def_cfa_offset + .uleb128 0x18 + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI2-$LCFI0 ++ .4byte $LCFI01-$LCFI00 + .byte 0x11 # DW_CFA_offset_extended_sf + .uleb128 0x1e # $fp + .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) +@@ -342,12 +415,13 @@ $LASFDE0: + .uleb128 0x1f # $ra + .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI3-$LCFI2 ++ .4byte $LCFI02-$LCFI01 + .byte 0xc # DW_CFA_def_cfa + .uleb128 0x1e + .uleb128 0x18 + .align 2 + $LEFDE0: ++ + $LSFDE1: + .4byte $LEFDE1-$LASFDE1 # FDE Length + $LASFDE1: +@@ -356,11 +430,11 @@ $LASFDE1: + .4byte $LFE1-$LFB1 # FDE address range + .uleb128 0x0 # Augmentation size + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI4-$LFB1 ++ .4byte $LCFI10-$LFB1 + .byte 0xe # DW_CFA_def_cfa_offset +- .uleb128 0x38 ++ .uleb128 SIZEOF_FRAME2 + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI6-$LCFI4 ++ .4byte $LCFI11-$LCFI10 + .byte 0x11 # DW_CFA_offset_extended_sf + .uleb128 0x10 # $16 + .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp) +@@ -371,11 +445,41 @@ $LASFDE1: + .uleb128 0x1f # $ra + .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) + .byte 0x4 # DW_CFA_advance_loc4 +- .4byte $LCFI7-$LCFI6 ++ .4byte $LCFI12-$LCFI11 + .byte 0xc # DW_CFA_def_cfa + .uleb128 0x1e +- .uleb128 0x38 ++ .uleb128 SIZEOF_FRAME2 + .align 2 + $LEFDE1: + ++$LSFDE2: ++ .4byte $LEFDE2-$LASFDE2 # FDE Length ++$LASFDE2: ++ .4byte $LASFDE2-$Lframe0 # FDE CIE offset ++ .4byte $LFB2 # FDE initial location ++ .4byte $LFE2-$LFB2 # FDE address range ++ .uleb128 0x0 # Augmentation size ++ .byte 0x4 # DW_CFA_advance_loc4 ++ .4byte $LCFI20-$LFB2 ++ .byte 0xe # DW_CFA_def_cfa_offset ++ .uleb128 SIZEOF_FRAME2 ++ .byte 0x4 # DW_CFA_advance_loc4 ++ .4byte $LCFI21-$LCFI20 ++ .byte 0x11 # DW_CFA_offset_extended_sf ++ .uleb128 0x10 # $16 ++ .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp) ++ .byte 0x11 # DW_CFA_offset_extended_sf ++ .uleb128 0x1e # $fp ++ .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) ++ .byte 0x11 # DW_CFA_offset_extended_sf ++ .uleb128 0x1f # $ra ++ .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) ++ .byte 0x4 # DW_CFA_advance_loc4 ++ .4byte $LCFI22-$LCFI21 ++ .byte 0xc # DW_CFA_def_cfa ++ .uleb128 0x1e ++ .uleb128 SIZEOF_FRAME2 ++ .align 2 ++$LEFDE2: ++ + #endif --- gcc-7-7.2.0.orig/debian/patches/libffi-pax.diff +++ gcc-7-7.2.0/debian/patches/libffi-pax.diff @@ -0,0 +1,161 @@ +From 757876336c183f5b20b6620d674cc9817fd0d280 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20B=C3=BChler?= +Date: Wed, 7 Sep 2016 15:50:54 +0200 +Subject: [PATCH 2/2] always check for PaX MPROTECT on linux, make EMUTRAMP + experimental + +- ffi_prep_closure_loc doesn't necessarily generate trampolines recognized by + PaX EMUTRAMP handler; there is no way to check before, and it isn't working +on x86-64 right now -> experimental +- if MPROTECT is enabled use the same workaround as is used for SELinux (double + mmap()) +--- + configure.ac | 11 +++++++--- + src/closures.c | 68 +++++++++++++++++++++++++++++++++++++++------------------- + 2 files changed, 54 insertions(+), 25 deletions(-) + +--- a/src/libffi/configure.ac ++++ b/src/libffi/configure.ac +@@ -177,12 +177,17 @@ + ;; + esac + +-# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. ++# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC; ++# if EMUTRAMP is active too ffi could try mapping without PROT_EXEC, ++# but the kernel needs to recognize the trampoline generated by ffi. ++# Otherwise fallback to double mmap trick. + AC_ARG_ENABLE(pax_emutramp, +- [ --enable-pax_emutramp enable pax emulated trampolines, for we can't use PROT_EXEC], ++ [ --enable-pax_emutramp enable pax emulated trampolines (experimental)], + if test "$enable_pax_emutramp" = "yes"; then ++ AC_MSG_WARN([EMUTRAMP is experimental only. Use --enable-pax_emutramp=experimental to enforce.]) ++ elif test "$enable_pax_emutramp" = "experimental"; then + AC_DEFINE(FFI_MMAP_EXEC_EMUTRAMP_PAX, 1, +- [Define this if you want to enable pax emulated trampolines]) ++ [Define this if you want to enable pax emulated trampolines (experimental)]) + fi) + + FFI_EXEC_TRAMPOLINE_TABLE=0 +--- a/src/libffi/src/closures.c ++++ b/src/libffi/src/closures.c +@@ -53,14 +53,18 @@ + # endif + #endif + +-#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX +-# ifdef __linux__ ++#if FFI_MMAP_EXEC_WRIT && defined __linux__ ++# if !defined FFI_MMAP_EXEC_SELINUX + /* When defined to 1 check for SELinux and if SELinux is active, + don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that + might cause audit messages. */ + # define FFI_MMAP_EXEC_SELINUX 1 +-# endif +-#endif ++# endif /* !defined FFI_MMAP_EXEC_SELINUX */ ++# if !defined FFI_MMAP_PAX ++/* Also check for PaX MPROTECT */ ++# define FFI_MMAP_PAX 1 ++# endif /* !defined FFI_MMAP_PAX */ ++#endif /* FFI_MMAP_EXEC_WRIT && defined __linux__ */ + + #if FFI_CLOSURES + +@@ -172,14 +176,18 @@ + + #endif /* !FFI_MMAP_EXEC_SELINUX */ + +-/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ +-#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++/* On PaX enable kernels that have MPROTECT enabled we can't use PROT_EXEC. */ ++#if defined FFI_MMAP_PAX + #include + +-static int emutramp_enabled = -1; ++enum { ++ PAX_MPROTECT = (1 << 0), ++ PAX_EMUTRAMP = (1 << 1), ++}; ++static int cached_pax_flags = -1; + + static int +-emutramp_enabled_check (void) ++pax_flags_check (void) + { + char *buf = NULL; + size_t len = 0; +@@ -193,9 +201,10 @@ + while (getline (&buf, &len, f) != -1) + if (!strncmp (buf, "PaX:", 4)) + { +- char emutramp; +- if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) +- ret = (emutramp == 'E'); ++ if (NULL != strchr (buf + 4, 'M')) ++ ret |= PAX_MPROTECT; ++ if (NULL != strchr (buf + 4, 'E')) ++ ret |= PAX_EMUTRAMP; + break; + } + free (buf); +@@ -203,9 +212,13 @@ + return ret; + } + +-#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ +- : (emutramp_enabled = emutramp_enabled_check ())) +-#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++#define get_pax_flags() (cached_pax_flags >= 0 ? cached_pax_flags \ ++ : (cached_pax_flags = pax_flags_check ())) ++#define has_pax_flags(flags) ((flags) == ((flags) & get_pax_flags ())) ++#define is_mprotect_enabled() (has_pax_flags (PAX_MPROTECT)) ++#define is_emutramp_enabled() (has_pax_flags (PAX_EMUTRAMP)) ++ ++#endif /* defined FFI_MMAP_PAX */ + + #elif defined (__CYGWIN__) || defined(__INTERIX) + +@@ -216,9 +229,10 @@ + + #endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ + +-#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX +-#define is_emutramp_enabled() 0 +-#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++#if !defined FFI_MMAP_PAX ++# define is_mprotect_enabled() 0 ++# define is_emutramp_enabled() 0 ++#endif /* !defined FFI_MMAP_PAX */ + + /* Declare all functions defined in dlmalloc.c as static. */ + static void *dlmalloc(size_t); +@@ -525,13 +539,23 @@ + printf ("mapping in %zi\n", length); + #endif + +- if (execfd == -1 && is_emutramp_enabled ()) ++ /* -1 != execfd hints that we already decided to use dlmmap_locked ++ last time. */ ++ if (execfd == -1 && is_mprotect_enabled ()) + { +- ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); +- return ptr; ++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++ if (is_emutramp_enabled ()) ++ { ++ /* emutramp requires the kernel recognizing the trampoline pattern ++ generated by ffi_prep_closure_loc; there is no way to test ++ in advance whether this will work, so this is experimental. */ ++ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); ++ return ptr; ++ } ++#endif ++ /* fallback to dlmmap_locked. */ + } +- +- if (execfd == -1 && !is_selinux_enabled ()) ++ else if (execfd == -1 && !is_selinux_enabled ()) + { + ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); + --- gcc-7-7.2.0.orig/debian/patches/libffi-race-condition.diff +++ gcc-7-7.2.0/debian/patches/libffi-race-condition.diff @@ -0,0 +1,33 @@ +From 48d2e46528fb6e621d95a7fa194069fd136b712d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20B=C3=BChler?= +Date: Wed, 7 Sep 2016 15:49:48 +0200 +Subject: [PATCH 1/2] dlmmap_locked always needs locking as it always modifies + execsize + +--- + src/closures.c | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +--- a/src/libffi/src/closures.c ++++ b/src/libffi/src/closures.c +@@ -568,16 +568,11 @@ + MREMAP_DUP and prot at this point. */ + } + +- if (execsize == 0 || execfd == -1) +- { +- pthread_mutex_lock (&open_temp_exec_file_mutex); +- ptr = dlmmap_locked (start, length, prot, flags, offset); +- pthread_mutex_unlock (&open_temp_exec_file_mutex); ++ pthread_mutex_lock (&open_temp_exec_file_mutex); ++ ptr = dlmmap_locked (start, length, prot, flags, offset); ++ pthread_mutex_unlock (&open_temp_exec_file_mutex); + +- return ptr; +- } +- +- return dlmmap_locked (start, length, prot, flags, offset); ++ return ptr; + } + + /* Release memory at the given address, as well as the corresponding --- gcc-7-7.2.0.orig/debian/patches/libffi-ro-eh_frame_sect.diff +++ gcc-7-7.2.0/debian/patches/libffi-ro-eh_frame_sect.diff @@ -0,0 +1,15 @@ +# DP: PR libffi/47248, force a read only eh frame section. + +Index: b/src/libffi/configure.ac +=================================================================== +--- a/src/libffi/configure.ac ++++ b/src/libffi/configure.ac +@@ -275,6 +275,8 @@ if test "x$GCC" = "xyes"; then + libffi_cv_hidden_visibility_attribute=yes + fi + fi ++ # FIXME: see PR libffi/47248 ++ libffi_cv_ro_eh_frame=yes + rm -f conftest.* + ]) + if test $libffi_cv_hidden_visibility_attribute = yes; then --- gcc-7-7.2.0.orig/debian/patches/libgo-cleanfiles.diff +++ gcc-7-7.2.0/debian/patches/libgo-cleanfiles.diff @@ -0,0 +1,31 @@ +Index: gcc-7-7.2.0/src/libgo/Makefile.am +=================================================================== +--- gcc-7-7.2.0.orig/src/libgo/Makefile.am ++++ gcc-7-7.2.0/src/libgo/Makefile.am +@@ -1423,7 +1423,9 @@ mostlyclean-local: + find . -name '*-testsum' -print | xargs rm -f + find . -name '*-testlog' -print | xargs rm -f + +-CLEANFILES = *.go *.gox goc2c *.c s-version libgo.sum libgo.log ++CLEANFILES = *.go *.gox goc2c *.c s-* libgo.sum libgo.log \ ++ *.dep */*.dep */*/*.dep */*/*/*.dep */*/*.dep */*/*/*/*.dep \ ++ */*/*/*/*/*.dep + + clean-local: + find . -name '*.la' -print | xargs $(LIBTOOL) --mode=clean rm -f +Index: gcc-7-7.2.0/src/libgo/Makefile.in +=================================================================== +--- gcc-7-7.2.0.orig/src/libgo/Makefile.in ++++ gcc-7-7.2.0/src/libgo/Makefile.in +@@ -1347,7 +1347,10 @@ TEST_PACKAGES = \ + unicode/utf8/check + + MOSTLYCLEAN_FILES = libgo.head libgo.sum.sep libgo.log.sep +-CLEANFILES = *.go *.gox goc2c *.c s-version libgo.sum libgo.log ++CLEANFILES = *.go *.gox goc2c *.c s-* libgo.sum libgo.log \ ++ *.dep */*.dep */*/*.dep */*/*/*.dep */*/*.dep */*/*/*/*.dep \ ++ */*/*/*/*/*.dep ++ + all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + --- gcc-7-7.2.0.orig/debian/patches/libgo-revert-timeout-exp.diff +++ gcc-7-7.2.0/debian/patches/libgo-revert-timeout-exp.diff @@ -0,0 +1,12 @@ +Index: b/src/libgo/testsuite/lib/libgo.exp +=================================================================== +--- a/src/libgo/testsuite/lib/libgo.exp ++++ b/src/libgo/testsuite/lib/libgo.exp +@@ -46,7 +46,6 @@ load_gcc_lib wrapper.exp + load_gcc_lib target-supports.exp + load_gcc_lib target-utils.exp + load_gcc_lib gcc-defs.exp +-load_gcc_lib timeout.exp + load_gcc_lib go.exp + + proc libgo_init { args } { --- gcc-7-7.2.0.orig/debian/patches/libgo-s390x-default-isa.diff +++ gcc-7-7.2.0/debian/patches/libgo-s390x-default-isa.diff @@ -0,0 +1,11 @@ +--- a/src/libgo/go/cmd/go/build.go ++++ b/src/libgo/go/cmd/go/build.go +@@ -3276,7 +3276,7 @@ + case "arm": + return []string{"-marm"} // not thumb + case "s390x": +- return []string{"-m64", "-march=z196"} ++ return []string{"-m64"} + case "mips64", "mips64le": + return []string{"-mabi=64"} + case "mips", "mipsle": --- gcc-7-7.2.0.orig/debian/patches/libgo-setcontext-config.diff +++ gcc-7-7.2.0/debian/patches/libgo-setcontext-config.diff @@ -0,0 +1,21 @@ +# DP: libgo: Overwrite the setcontext_clobbers_tls check on mips* + +Index: b/src/libgo/configure.ac +=================================================================== +--- a/src/libgo/configure.ac ++++ b/src/libgo/configure.ac +@@ -843,6 +843,14 @@ main () + CFLAGS="$CFLAGS_hold" + LIBS="$LIBS_hold" + ]) ++dnl overwrite for the mips* 64bit multilibs, fails on some buildds ++if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then ++ case "$target" in ++ mips*-linux-*) ++ AC_MSG_WARN([FIXME: overwrite setcontext_clobbers_tls for $target:$ptr_type_size]) ++ libgo_cv_lib_setcontext_clobbers_tls=no ;; ++ esac ++fi + if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then + AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1, + [Define if setcontext clobbers TLS variables]) --- gcc-7-7.2.0.orig/debian/patches/libgo-testsuite.diff +++ gcc-7-7.2.0/debian/patches/libgo-testsuite.diff @@ -0,0 +1,70 @@ +# DP: Only run the libgo testsuite for flags configured in RUNTESTFLAGS + +Index: gcc-7-7.2.0/src/libgo/Makefile.am +=================================================================== +--- gcc-7-7.2.0.orig/src/libgo/Makefile.am ++++ gcc-7-7.2.0/src/libgo/Makefile.am +@@ -929,7 +929,7 @@ BUILDGOX = \ + $(SHELL) $(srcdir)/mvifdiff.sh $@.tmp `echo $@ | sed -e 's/s-gox/gox/'` + + GOTESTFLAGS = +-GOBENCH = ++GOBENCH = + + # Check a package. + CHECK = \ +@@ -948,6 +948,12 @@ CHECK = \ + $(MKDIR_P) $(@D); \ + rm -f $@-testsum $@-testlog; \ + files=`$(SHELL) $(srcdir)/match.sh --goarch=$(GOARCH) --goos=$(GOOS) --srcdir=$(srcdir)/go/$(@D) --extrafiles="$(extra_go_files_$(subst /,_,$(@D)))" $(matchargs_$(subst /,_,$(@D)))`; \ ++ run_check=yes; \ ++ MULTILIBDIR="$(MULTILIBDIR)"; \ ++ case "$$MULTILIBDIR" in /64|/x32) \ ++ echo "$$RUNTESTFLAGS" | grep -q "$${MULTILIBDIR\#/*}" || run_check=; \ ++ esac; \ ++ if test "$$run_check" = "yes"; then \ + if test "$(USE_DEJAGNU)" = "yes"; then \ + $(SHELL) $(srcdir)/testsuite/gotest --goarch=$(GOARCH) --goos=$(GOOS) --dejagnu=yes --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$$files" --testname="$(@D)" $(GOTESTFLAGS); \ + elif test "$(GOBENCH)" != ""; then \ +@@ -963,6 +969,7 @@ CHECK = \ + echo "FAIL: $(@D)" > $@-testsum; \ + exit 1; \ + fi; \ ++ fi; \ + fi + + # Build all packages before checking any. +Index: gcc-7-7.2.0/src/libgo/Makefile.in +=================================================================== +--- gcc-7-7.2.0.orig/src/libgo/Makefile.in ++++ gcc-7-7.2.0/src/libgo/Makefile.in +@@ -1085,7 +1085,7 @@ BUILDGOX = \ + $(SHELL) $(srcdir)/mvifdiff.sh $@.tmp `echo $@ | sed -e 's/s-gox/gox/'` + + GOTESTFLAGS = +-GOBENCH = ++GOBENCH = + + # Check a package. + CHECK = \ +@@ -1104,6 +1104,12 @@ CHECK = \ + $(MKDIR_P) $(@D); \ + rm -f $@-testsum $@-testlog; \ + files=`$(SHELL) $(srcdir)/match.sh --goarch=$(GOARCH) --goos=$(GOOS) --srcdir=$(srcdir)/go/$(@D) --extrafiles="$(extra_go_files_$(subst /,_,$(@D)))" $(matchargs_$(subst /,_,$(@D)))`; \ ++ run_check=yes; \ ++ MULTILIBDIR="$(MULTILIBDIR)"; \ ++ case "$$MULTILIBDIR" in /64|/x32) \ ++ echo "$$RUNTESTFLAGS" | grep -q "$${MULTILIBDIR\#/*}" || run_check=; \ ++ esac; \ ++ if test "$$run_check" = "yes"; then \ + if test "$(USE_DEJAGNU)" = "yes"; then \ + $(SHELL) $(srcdir)/testsuite/gotest --goarch=$(GOARCH) --goos=$(GOOS) --dejagnu=yes --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$$files" --testname="$(@D)" $(GOTESTFLAGS); \ + elif test "$(GOBENCH)" != ""; then \ +@@ -1119,6 +1125,7 @@ CHECK = \ + echo "FAIL: $(@D)" > $@-testsum; \ + exit 1; \ + fi; \ ++ fi; \ + fi + + --- gcc-7-7.2.0.orig/debian/patches/libgomp-kfreebsd-testsuite.diff +++ gcc-7-7.2.0/debian/patches/libgomp-kfreebsd-testsuite.diff @@ -0,0 +1,16 @@ +# DP: Disable lock-2.c test on kfreebsd-* + +Index: b/src/libgomp/testsuite/libgomp.c/lock-2.c +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c/lock-2.c ++++ b/src/libgomp/testsuite/libgomp.c/lock-2.c +@@ -4,6 +4,9 @@ + int + main (void) + { ++#ifdef __FreeBSD_kernel__ ++ return 1; ++#endif + int l = 0; + omp_nest_lock_t lock; + omp_init_nest_lock (&lock); --- gcc-7-7.2.0.orig/debian/patches/libgomp-omp_h-multilib.diff +++ gcc-7-7.2.0/debian/patches/libgomp-omp_h-multilib.diff @@ -0,0 +1,28 @@ +# DP: Fix up omp.h for multilibs. + +2008-06-09 Jakub Jelinek + + * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. + +2015-03-25 Matthias Klose + + * omp.h.in (omp_nest_lock_t): Limit the fix Linux. + +Index: b/src/libgomp/omp.h.in +=================================================================== +--- a/src/libgomp/omp.h.in ++++ b/src/libgomp/omp.h.in +@@ -40,8 +40,13 @@ typedef struct + + typedef struct + { ++#if defined(__linux__) ++ unsigned char _x[8 + sizeof (void *)] ++ __attribute__((__aligned__(sizeof (void *)))); ++#else + unsigned char _x[@OMP_NEST_LOCK_SIZE@] + __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); ++#endif + } omp_nest_lock_t; + #endif + --- gcc-7-7.2.0.orig/debian/patches/libitm-no-fortify-source.diff +++ gcc-7-7.2.0/debian/patches/libitm-no-fortify-source.diff @@ -0,0 +1,19 @@ +# DP: Build libitm with -U_FORTIFY_SOURCE on x86 and x86_64. + +Index: b/src/libitm/configure.tgt +=================================================================== +--- a/src/libitm/configure.tgt ++++ b/src/libitm/configure.tgt +@@ -119,6 +119,12 @@ case "${target_cpu}" in + ;; + esac + ++# FIXME: ftbfs with -D_FORTIFY_SOURCE (error: invalid use of '__builtin_va_arg_pack ()) ++case "${target}" in ++ *-*-linux*) ++ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE" ++esac ++ + # For the benefit of top-level configure, determine if the cpu is supported. + test -d ${srcdir}/config/$ARCH || UNSUPPORTED=1 + --- gcc-7-7.2.0.orig/debian/patches/libjit-ldflags.diff +++ gcc-7-7.2.0/debian/patches/libjit-ldflags.diff @@ -0,0 +1,13 @@ +Index: b/src/gcc/jit/Make-lang.in +=================================================================== +--- a/src/gcc/jit/Make-lang.in ++++ b/src/gcc/jit/Make-lang.in +@@ -86,7 +86,7 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ + $(CPPLIB) $(LIBDECNUMBER) $(LIBS) $(BACKENDLIBS) \ + $(EXTRA_GCC_OBJS) \ + -Wl,--version-script=$(srcdir)/jit/libgccjit.map \ +- -Wl,-soname,$(LIBGCCJIT_SONAME) ++ -Wl,-soname,$(LIBGCCJIT_SONAME) $(LDFLAGS) + + $(LIBGCCJIT_SONAME_SYMLINK): $(LIBGCCJIT_FILENAME) + ln -sf $(LIBGCCJIT_FILENAME) $(LIBGCCJIT_SONAME_SYMLINK) --- gcc-7-7.2.0.orig/debian/patches/libphobos-zlib.diff +++ gcc-7-7.2.0/debian/patches/libphobos-zlib.diff @@ -0,0 +1,74 @@ +# DP: Build zlib in any case to have a fall back for missing libz multilibs + +Index: b/src/libphobos/configure.ac +=================================================================== +--- a/src/libphobos/configure.ac ++++ b/src/libphobos/configure.ac +@@ -104,6 +104,7 @@ WITH_LOCAL_DRUNTIME([ + + DRUNTIME_LIBBACKTRACE_SETUP + DRUNTIME_INSTALL_DIRECTORIES ++dnl fake change to regenerate the configure file + + # Add dependencies for libgphobos.spec file + LIBS="$LIBS $LIBADD_DLOPEN" +Index: b/src/libphobos/m4/druntime/libraries.m4 +=================================================================== +--- a/src/libphobos/m4/druntime/libraries.m4 ++++ b/src/libphobos/m4/druntime/libraries.m4 +@@ -39,18 +39,44 @@ AC_DEFUN([DRUNTIME_LIBRARIES_ZLIB], + [ + AC_ARG_WITH(target-system-zlib, + AS_HELP_STRING([--with-target-system-zlib], +- [use installed libz (default: no)])) ++ [use installed libz (default: no)]), ++ [system_zlib=yes],[system_zlib=no]) + +- system_zlib=false +- AS_IF([test "x$with_target_system_zlib" = "xyes"], [ +- AC_CHECK_LIB([z], [deflate], [ +- system_zlib=yes +- ], [ +- AC_MSG_ERROR([System zlib not found])]) +- ], [ +- AC_MSG_CHECKING([for zlib]) +- AC_MSG_RESULT([just compiled]) +- ]) ++ AC_MSG_CHECKING([for system zlib]) ++ save_LIBS=$LIBS ++ LIBS="$LIBS -lz" ++ dnl the link test is not good enough for ARM32 multilib detection, ++ dnl first check to link, then to run ++ AC_LANG_PUSH(C) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([#include ],[gzopen("none", "rb")])], ++ [ ++ AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++ #include ++ int main() { ++ gzFile file = gzopen("none", "rb"); ++ return 0; ++ } ++ ]])], ++ [system_zlib_found=yes], ++ [system_zlib_found=no], ++ dnl no system zlib for cross builds ... ++ [system_zlib_found=no] ++ ) ++ ], ++ [system_zlib_found=no]) ++ LIBS=$save_LIBS ++ if test x$system_zlib = xyes; then ++ if test x$system_zlib_found = xyes; then ++ AC_MSG_RESULT([found]) ++ else ++ AC_MSG_RESULT([not found, disabled]) ++ system_zlib=no ++ fi ++ else ++ AC_MSG_RESULT([not enabled]) ++ fi ++ AC_LANG_POP + + AM_CONDITIONAL([DRUNTIME_ZLIB_SYSTEM], [test "$with_target_system_zlib" = yes]) + ]) --- gcc-7-7.2.0.orig/debian/patches/libstdc++-doclink.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-doclink.diff @@ -0,0 +1,74 @@ +# DP: adjust hrefs to point to the local documentation + +--- + libstdc++-v3/doc/doxygen/mainpage.html | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +Index: b/src/libstdc++-v3/doc/doxygen/mainpage.html +=================================================================== +--- a/src/libstdc++-v3/doc/doxygen/mainpage.html ++++ b/src/libstdc++-v3/doc/doxygen/mainpage.html +@@ -27,10 +27,10 @@ +

Generated on @DATE@.

+ +

There are two types of documentation for libstdc++. One is the +- distribution documentation, which can be read online +- here +- or offline from the file doc/html/index.html in the library source +- directory. ++ distribution documentation, which can be read ++ offline in the documentation directory ++ or ++ online. +

+ +

The other type is the source documentation, of which this is the first page. +@@ -82,8 +82,11 @@ + +

License, Copyright, and Other Lawyerly Verbosity

+

The libstdc++ documentation is released under ++ these terms ++ (read offline or + +- these terms. ++ read online. ++ ). +

+

Part of the generated documentation involved comments and notes from + SGI, who says we gotta say this: +Index: b/src/libstdc++-v3/doc/html/api.html +=================================================================== +--- a/src/libstdc++-v3/doc/html/api.html ++++ b/src/libstdc++-v3/doc/html/api.html +@@ -20,6 +20,8 @@ + member functions for the library classes, finding out what is in a + particular include file, looking at inheritance diagrams, etc. +

++The API documentation, rendered into HTML, can be viewed offline. ++

+ The API documentation, rendered into HTML, can be viewed online + for each GCC release + and +@@ -38,4 +40,4 @@ +

+ In addition, a rendered set of man pages are available in the same + location specified above. Start with C++Intro(3). +-

+\ No newline at end of file ++

+Index: b/src/libstdc++-v3/doc/xml/api.xml +=================================================================== +--- a/src/libstdc++-v3/doc/xml/api.xml ++++ b/src/libstdc++-v3/doc/xml/api.xml +@@ -40,6 +40,11 @@ + + + ++ The source-level documentation for this release can be viewed offline. ++ ++ ++ ++ + The API documentation, rendered into HTML, can be viewed online + for each GCC release + and --- gcc-7-7.2.0.orig/debian/patches/libstdc++-man-3cxx.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-man-3cxx.diff @@ -0,0 +1,67 @@ +# DP: Install libstdc++ man pages with suffix .3cxx instead of .3 + +Index: b/src/libstdc++-v3/doc/doxygen/user.cfg.in +=================================================================== +--- a/src/libstdc++-v3/doc/doxygen/user.cfg.in ++++ b/src/libstdc++-v3/doc/doxygen/user.cfg.in +@@ -1968,7 +1968,7 @@ MAN_OUTPUT = man + # The default value is: .3. + # This tag requires that the tag GENERATE_MAN is set to YES. + +-MAN_EXTENSION = .3 ++MAN_EXTENSION = .3cxx + + # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it + # will generate one additional man file for each entity documented in the real +Index: b/src/libstdc++-v3/scripts/run_doxygen +=================================================================== +--- a/src/libstdc++-v3/scripts/run_doxygen ++++ b/src/libstdc++-v3/scripts/run_doxygen +@@ -243,6 +243,9 @@ fi + if $do_man; then + echo :: + echo :: Fixing up the man pages... ++mkdir -p $outdir/man/man3 ++mv $outdir/man/man3cxx/* $outdir/man/man3/ ++rmdir $outdir/man/man3cxx + cd $outdir/man/man3 + + # File names with embedded spaces (EVIL!) need to be....? renamed or removed? +@@ -264,7 +267,7 @@ rm -f *.h.3 *.hpp.3 *config* *.cc.3 *.tc + # and I'm off getting coffee then anyhow, so I didn't care enough to make + # this super-fast. + g++ ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader +-problematic=`egrep -l '#include <.*_.*>' [a-z]*.3` ++problematic=`egrep -l '#include <.*_.*>' [a-z]*.3 [a-z]*.3cxx` + for f in $problematic; do + # this is also slow, but safe and easy to debug + oldh=`sed -n '/fC#include .*/\1/p' $f` +@@ -277,7 +280,7 @@ rm stdheader + # Some of the pages for generated modules have text that confuses certain + # implementations of man(1), e.g. on GNU/Linux. We need to have another + # top-level *roff tag to /stop/ the .SH NAME entry. +-problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3` ++problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3cxx` + #problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3' + + for f in $problematic; do +@@ -291,7 +294,7 @@ a\ + done + + # Also, break this (generated) line up. It's ugly as sin. +-problematic=`grep -l '[^^]Definition at line' *.3` ++problematic=`grep -l '[^^]Definition at line' *.3 *.3cxx` + for f in $problematic; do + sed 's/Definition at line/\ + .PP\ +@@ -408,8 +411,8 @@ for f in ios streambuf istream ostream i + istringstream ostringstream stringstream filebuf ifstream \ + ofstream fstream string; + do +- echo ".so man3/std::basic_${f}.3" > std::${f}.3 +- echo ".so man3/std::basic_${f}.3" > std::w${f}.3 ++ echo ".so man3/std::basic_${f}.3cxx" > std::${f}.3cxx ++ echo ".so man3/std::basic_${f}.3cxx" > std::w${f}.3cxx + done + + echo :: --- gcc-7-7.2.0.orig/debian/patches/libstdc++-no-testsuite.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-no-testsuite.diff @@ -0,0 +1,12 @@ +# DP: Don't run the libstdc++ testsuite on arm, hppa and mipsel (timeouts on the buildds) + +--- a/src/libstdc++-v3/testsuite/Makefile.in ++++ b/src/libstdc++-v3/testsuite/Makefile.in +@@ -567,6 +567,7 @@ + + # Run the testsuite in normal mode. + check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp ++ case "$(target)" in arm*|hppa*|mipsel*) exit 0;; esac; \ + $(if $*,@)AR="$(AR)"; export AR; \ + RANLIB="$(RANLIB)"; export RANLIB; \ + if [ -z "$*" ] && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \ --- gcc-7-7.2.0.orig/debian/patches/libstdc++-nothumb-check.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-nothumb-check.diff @@ -0,0 +1,38 @@ +# DP: Don't run the libstdc++-v3 testsuite in thumb mode on armel + +Index: testsuite/Makefile.in +=================================================================== +--- a/src/libstdc++-v3/testsuite/Makefile.in (revision 156820) ++++ b/src/libstdc++-v3/testsuite/Makefile.in (working copy) +@@ -583,6 +583,8 @@ + srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ ++ runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-marm/-marm/'`"; \ ++ case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \ + if [ -z "$$runtest" ]; then runtest=runtest; fi; \ + tool=libstdc++; \ + dirs=; \ +@@ -590,7 +592,7 @@ + normal0) \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \ +- $(RUNTESTFLAGS) abi.exp; \ ++ $$runtestflags abi.exp; \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi; \ + dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [abep]*/*`";; \ +@@ -605,11 +607,11 @@ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + if [ -n "$$dirs" ]; then \ + $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \ +- $(RUNTESTFLAGS) \ ++ $$runtestflags \ + "conformance.exp=`echo $$dirs | sed 's/ /* /g;s/$$/*/'`"; \ + else \ + $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \ +- $(RUNTESTFLAGS); \ ++ $$runtestflags; \ + fi; \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi --- gcc-7-7.2.0.orig/debian/patches/libstdc++-pic.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-pic.diff @@ -0,0 +1,95 @@ +# DP: Build and install libstdc++_pic.a library. + +Index: b/src/libstdc++-v3/src/Makefile.am +=================================================================== +--- a/src/libstdc++-v3/src/Makefile.am ++++ b/src/libstdc++-v3/src/Makefile.am +@@ -311,10 +311,12 @@ if GLIBCXX_BUILD_DEBUG + STAMP_DEBUG = build-debug + STAMP_INSTALL_DEBUG = install-debug + CLEAN_DEBUG = debug ++STAMP_INSTALL_PIC = install-pic + else + STAMP_DEBUG = + STAMP_INSTALL_DEBUG = + CLEAN_DEBUG = ++STAMP_INSTALL_PIC = + endif + + # Build a debug variant. +@@ -349,6 +351,7 @@ build-debug: stamp-debug + mv Makefile Makefile.tmp; \ + sed -e 's,all-local: all-once,all-local:,' \ + -e 's,install-data-local: install-data-once,install-data-local:,' \ ++ -e 's,install-exec-local:.*,install-exec-local:,' \ + -e '/vpath/!s,src/c,src/debug/c,' \ + < Makefile.tmp > Makefile ; \ + rm -f Makefile.tmp ; \ +@@ -359,3 +362,8 @@ build-debug: stamp-debug + install-debug: build-debug + (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \ + toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ; ++ ++install-exec-local: $(STAMP_INSTALL_PIC) ++$(STAMP_INSTALL_PIC): ++ $(MKDIR_P) $(DESTDIR)$(toolexeclibdir) ++ $(INSTALL_DATA) .libs/libstdc++convenience.a $(DESTDIR)$(toolexeclibdir)/libstdc++_pic.a +Index: b/src/libstdc++-v3/src/Makefile.in +=================================================================== +--- a/src/libstdc++-v3/src/Makefile.in ++++ b/src/libstdc++-v3/src/Makefile.in +@@ -534,6 +534,8 @@ CXXLINK = \ + @GLIBCXX_BUILD_DEBUG_TRUE@STAMP_INSTALL_DEBUG = install-debug + @GLIBCXX_BUILD_DEBUG_FALSE@CLEAN_DEBUG = + @GLIBCXX_BUILD_DEBUG_TRUE@CLEAN_DEBUG = debug ++@GLIBCXX_BUILD_DEBUG_FALSE@STAMP_INSTALL_PIC = ++@GLIBCXX_BUILD_DEBUG_TRUE@STAMP_INSTALL_PIC = install-pic + + # Build a debug variant. + # Take care to fix all possibly-relative paths. +@@ -832,7 +834,7 @@ install-dvi: install-dvi-recursive + + install-dvi-am: + +-install-exec-am: install-toolexeclibLTLIBRARIES ++install-exec-am: install-exec-local install-toolexeclibLTLIBRARIES + + install-html: install-html-recursive + +@@ -883,11 +885,11 @@ uninstall-am: uninstall-toolexeclibLTLIB + distclean-libtool distclean-tags dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ +- install-exec-am install-html install-html-am install-info \ +- install-info-am install-man install-pdf install-pdf-am \ +- install-ps install-ps-am install-strip \ +- install-toolexeclibLTLIBRARIES installcheck installcheck-am \ +- installdirs installdirs-am maintainer-clean \ ++ install-exec-am install-exec-local install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip install-toolexeclibLTLIBRARIES installcheck \ ++ installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ +@@ -1020,6 +1022,7 @@ build-debug: stamp-debug + mv Makefile Makefile.tmp; \ + sed -e 's,all-local: all-once,all-local:,' \ + -e 's,install-data-local: install-data-once,install-data-local:,' \ ++ -e 's,install-exec-local:.*,install-exec-local:,' \ + -e '/vpath/!s,src/c,src/debug/c,' \ + < Makefile.tmp > Makefile ; \ + rm -f Makefile.tmp ; \ +@@ -1031,6 +1034,11 @@ install-debug: build-debug + (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' \ + toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ; + ++install-exec-local: $(STAMP_INSTALL_PIC) ++$(STAMP_INSTALL_PIC): ++ $(MKDIR_P) $(DESTDIR)$(toolexeclibdir) ++ $(INSTALL_DATA) .libs/libstdc++convenience.a $(DESTDIR)$(toolexeclibdir)/libstdc++_pic.a ++ + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: --- gcc-7-7.2.0.orig/debian/patches/libstdc++-test-installed.diff +++ gcc-7-7.2.0/debian/patches/libstdc++-test-installed.diff @@ -0,0 +1,78 @@ +# DP: Add support to run the libstdc++-v3 testsuite using the +# DP: installed shared libraries. + +Index: b/src/libstdc++-v3/testsuite/lib/libstdc++.exp +=================================================================== +--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp ++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp +@@ -37,6 +37,12 @@ + # the last thing before testing begins. This can be defined in, e.g., + # ~/.dejagnurc or $DEJAGNU. + ++set test_installed 0 ++if [info exists env(TEST_INSTALLED)] { ++ verbose -log "test installed libstdc++-v3" ++ set test_installed 1 ++} ++ + proc load_gcc_lib { filename } { + global srcdir loaded_libs + +@@ -101,6 +107,7 @@ proc libstdc++_init { testfile } { + global tool_timeout + global DEFAULT_CXXFLAGS + global STATIC_LIBCXXFLAGS ++ global test_installed + + # We set LC_ALL and LANG to C so that we get the same error + # messages as expected. +@@ -120,6 +127,9 @@ proc libstdc++_init { testfile } { + + set blddir [lookfor_file [get_multilibs] libstdc++-v3] + set flags_file "${blddir}/scripts/testsuite_flags" ++ if {$test_installed} { ++ set flags_file "${blddir}/scripts/testsuite_flags.installed" ++ } + set shlib_ext [get_shlib_extension] + v3track flags_file 2 + +@@ -154,7 +164,11 @@ proc libstdc++_init { testfile } { + + # Locate libgcc.a so we don't need to account for different values of + # SHLIB_EXT on different platforms +- set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] ++ if {$test_installed} { ++ set gccdir "" ++ } else { ++ set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] ++ } + if {$gccdir != ""} { + set gccdir [file dirname $gccdir] + append ld_library_path_tmp ":${gccdir}" +@@ -163,7 +177,11 @@ proc libstdc++_init { testfile } { + + # Locate libgomp. This is only required for parallel mode. + set v3-libgomp 0 +- set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.$shlib_ext] ++ if {$test_installed} { ++ set libgompdir "" ++ } else { ++ set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.$shlib_ext] ++ } + if {$libgompdir != ""} { + set v3-libgomp 1 + set libgompdir [file dirname $libgompdir] +@@ -185,7 +203,12 @@ proc libstdc++_init { testfile } { + + # Locate libstdc++ shared library. (ie libstdc++.so.) + set v3-sharedlib 0 +- set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.$shlib_ext] ++ if {$test_installed} { ++ set sharedlibdir "" ++ set v3-sharedlib 1 ++ } else { ++ set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.$shlib_ext] ++ } + if {$sharedlibdir != ""} { + if { ([string match "*-*-gnu*" $target_triplet] + || [string match "*-*-linux*" $target_triplet] --- gcc-7-7.2.0.orig/debian/patches/linaro-issue2575.diff +++ gcc-7-7.2.0/debian/patches/linaro-issue2575.diff @@ -0,0 +1,16 @@ +# DP: Fix ICE in tree_to_shwi, Linaro issue #2575. + +--- a/src/gcc/varasm.c ++++ b/src/gcc/varasm.c +@@ -6777,8 +6777,9 @@ + anchor range to reduce the amount of instructions require to refer + to the entire declaration. */ + if (decl && DECL_SIZE (decl) +- && tree_to_shwi (DECL_SIZE (decl)) +- >= (targetm.max_anchor_offset * BITS_PER_UNIT)) ++ && (!tree_fits_shwi_p (DECL_SIZE (decl)) ++ || tree_to_shwi (DECL_SIZE (decl)) ++ >= (targetm.max_anchor_offset * BITS_PER_UNIT))) + return false; + + } --- gcc-7-7.2.0.orig/debian/patches/note-gnu-stack.diff +++ gcc-7-7.2.0/debian/patches/note-gnu-stack.diff @@ -0,0 +1,139 @@ +# DP: Add .note.GNU-stack sections for gcc's crt files, libffi and boehm-gc +# DP: Taken from FC. + +gcc/ + +2004-09-20 Jakub Jelinek + + * config/rs6000/ppc-asm.h: Add .note.GNU-stack section also + on ppc64-linux. + + * config/ia64/lib1funcs.asm: Add .note.GNU-stack section on + ia64-linux. + * config/ia64/crtbegin.asm: Likewise. + * config/ia64/crtend.asm: Likewise. + * config/ia64/crti.asm: Likewise. + * config/ia64/crtn.asm: Likewise. + +2004-05-14 Jakub Jelinek + + * config/ia64/linux.h (TARGET_ASM_FILE_END): Define. + +libffi/ + +2007-05-11 Daniel Jacobowitz + + * src/arm/sysv.S: Fix ARM comment marker. + +2005-02-08 Jakub Jelinek + + * src/alpha/osf.S: Add .note.GNU-stack on Linux. + * src/s390/sysv.S: Likewise. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/linux64_closure.S: Likewise. + * src/powerpc/ppc_closure.S: Likewise. + * src/powerpc/sysv.S: Likewise. + * src/x86/unix64.S: Likewise. + * src/x86/sysv.S: Likewise. + * src/sparc/v8.S: Likewise. + * src/sparc/v9.S: Likewise. + * src/m68k/sysv.S: Likewise. + * src/ia64/unix.S: Likewise. + * src/arm/sysv.S: Likewise. + +--- + gcc/config/ia64/linux.h | 3 +++ + gcc/config/rs6000/ppc-asm.h | 2 +- + libgcc/config/ia64/crtbegin.S | 4 ++++ + libgcc/config/ia64/crtend.S | 4 ++++ + libgcc/config/ia64/crti.S | 4 ++++ + libgcc/config/ia64/crtn.S | 4 ++++ + libgcc/config/ia64/lib1funcs.S | 4 ++++ + 9 files changed, 39 insertions(+), 13 deletions(-) + +Index: b/src/libgcc/config/ia64/crtbegin.S +=================================================================== +--- a/src/libgcc/config/ia64/crtbegin.S ++++ b/src/libgcc/config/ia64/crtbegin.S +@@ -185,3 +185,7 @@ __do_global_dtors_aux: + .weak __cxa_finalize + #endif + .weak _Jv_RegisterClasses ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +Index: b/src/libgcc/config/ia64/crtend.S +=================================================================== +--- a/src/libgcc/config/ia64/crtend.S ++++ b/src/libgcc/config/ia64/crtend.S +@@ -114,3 +114,7 @@ __do_global_ctors_aux: + + br.ret.sptk.many rp + .endp __do_global_ctors_aux ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +Index: b/src/libgcc/config/ia64/crti.S +=================================================================== +--- a/src/libgcc/config/ia64/crti.S ++++ b/src/libgcc/config/ia64/crti.S +@@ -51,3 +51,7 @@ _fini: + .body + + # end of crti.S ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +Index: b/src/libgcc/config/ia64/crtn.S +=================================================================== +--- a/src/libgcc/config/ia64/crtn.S ++++ b/src/libgcc/config/ia64/crtn.S +@@ -41,3 +41,7 @@ + br.ret.sptk.many b0 + + # end of crtn.S ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +Index: b/src/libgcc/config/ia64/lib1funcs.S +=================================================================== +--- a/src/libgcc/config/ia64/lib1funcs.S ++++ b/src/libgcc/config/ia64/lib1funcs.S +@@ -793,3 +793,7 @@ __floattitf: + .endp __floattitf + #endif + #endif ++ ++#ifdef __linux__ ++.section .note.GNU-stack; .previous ++#endif +Index: b/src/gcc/config/ia64/linux.h +=================================================================== +--- a/src/gcc/config/ia64/linux.h ++++ b/src/gcc/config/ia64/linux.h +@@ -79,5 +79,8 @@ do { \ + #undef TARGET_INIT_LIBFUNCS + #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs + ++#undef TARGET_ASM_FILE_END ++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack ++ + /* Define this to be nonzero if static stack checking is supported. */ + #define STACK_CHECK_STATIC_BUILTIN 1 +Index: b/src/gcc/config/rs6000/ppc-asm.h +=================================================================== +--- a/src/gcc/config/rs6000/ppc-asm.h ++++ b/src/gcc/config/rs6000/ppc-asm.h +@@ -375,7 +375,7 @@ GLUE(.L,name): \ + #endif + #endif + +-#if defined __linux__ && !defined __powerpc64__ ++#if defined __linux__ + .section .note.GNU-stack + .previous + #endif --- gcc-7-7.2.0.orig/debian/patches/powerpc_nofprs.diff +++ gcc-7-7.2.0/debian/patches/powerpc_nofprs.diff @@ -0,0 +1,75 @@ +--- a/src/libgcc/config/rs6000/crtsavfpr.S ++++ b/src/libgcc/config/rs6000/crtsavfpr.S +@@ -33,6 +33,7 @@ + + /* On PowerPC64 Linux, these functions are provided by the linker. */ + #ifndef __powerpc64__ ++#ifndef __NO_FPRS__ + + /* Routines for saving floating point registers, called by the compiler. */ + /* Called with r11 pointing to the stack header word of the caller of the */ +@@ -79,3 +80,4 @@ + CFI_ENDPROC + + #endif ++#endif +--- a/src/libgcc/config/rs6000/crtresfpr.S ++++ b/src/libgcc/config/rs6000/crtresfpr.S +@@ -33,6 +33,7 @@ + + /* On PowerPC64 Linux, these functions are provided by the linker. */ + #ifndef __powerpc64__ ++#ifndef __NO_FPRS__ + + /* Routines for restoring floating point registers, called by the compiler. */ + /* Called with r11 pointing to the stack header word of the caller of the */ +@@ -79,3 +80,4 @@ + CFI_ENDPROC + + #endif ++#endif +--- a/src/libgcc/config/rs6000/crtresxfpr.S ++++ b/src/libgcc/config/rs6000/crtresxfpr.S +@@ -33,6 +33,7 @@ + + /* On PowerPC64 Linux, these functions are provided by the linker. */ + #ifndef __powerpc64__ ++#ifndef __NO_FPRS__ + + /* Routines for restoring floating point registers, called by the compiler. */ + /* Called with r11 pointing to the stack header word of the caller of the */ +@@ -124,3 +125,4 @@ + CFI_ENDPROC + + #endif ++#endif +--- a/src/libgcc/config/rs6000/crtsavevr.S 2013-03-13 22:25:25.802681336 +0000 ++++ b/src/libgcc/config/rs6000/crtsavevr.S 2013-03-13 22:26:21.054695066 +0000 +@@ -24,6 +24,7 @@ + + /* On PowerPC64 Linux, these functions are provided by the linker. */ + #ifndef __powerpc64__ ++#ifndef __NO_FPRS__ + + #undef __ALTIVEC__ + #define __ALTIVEC__ 1 +@@ -85,3 +86,4 @@ + CFI_ENDPROC + + #endif ++#endif +--- a/src/libgcc/config/rs6000/crtrestvr.S 2013-03-13 22:25:28.394681980 +0000 ++++ b/src/libgcc/config/rs6000/crtrestvr.S 2013-03-13 22:26:21.058695067 +0000 +@@ -24,6 +24,7 @@ + + /* On PowerPC64 Linux, these functions are provided by the linker. */ + #ifndef __powerpc64__ ++#ifndef __NO_FPRS__ + + #undef __ALTIVEC__ + #define __ALTIVEC__ 1 +@@ -85,3 +86,4 @@ + CFI_ENDPROC + + #endif ++#endif --- gcc-7-7.2.0.orig/debian/patches/powerpc_remove_many.diff +++ gcc-7-7.2.0/debian/patches/powerpc_remove_many.diff @@ -0,0 +1,32 @@ +# DP: Subject: [PATCH] remove -many on __SPE__ target +# DP: this helps to to detect opcodes which are not part of the current +# DP: CPU because without -many gas won't touch them. This currently could +# DP: break the kernel build as the 603 on steroids cpus use performance +# DP: counter opcodes which are not available on the steroid less 603 core. + +--- a/src/gcc/config/rs6000/rs6000.h ++++ b/src/gcc/config/rs6000/rs6000.h +@@ -98,6 +98,12 @@ + #define ASM_CPU_476_SPEC "-mpower4" + #endif + ++#ifndef __SPE__ ++#define ASM_CPU_SPU_MANY_NOT_SPE "-many" ++#else ++#define ASM_CPU_SPU_MANY_NOT_SPE ++#endif ++ + /* Common ASM definitions used by ASM_SPEC among the various targets for + handling -mcpu=xxx switches. There is a parallel list in driver-rs6000.c to + provide the default assembler options if the user uses -mcpu=native, so if +@@ -170,7 +176,8 @@ + %{mcpu=e500mc64: -me500mc64} \ + %{maltivec: -maltivec} \ + %{mvsx: -mvsx %{!maltivec: -maltivec} %{!mcpu*: %(asm_cpu_power7)}} \ + %{mpower8-vector|mcrypto|mdirect-move|mhtm: %{!mcpu*: %(asm_cpu_power8)}} \ +--many" ++" \ ++ASM_CPU_SPU_MANY_NOT_SPE + + #define CPP_DEFAULT_SPEC "" + --- gcc-7-7.2.0.orig/debian/patches/pr39491.diff +++ gcc-7-7.2.0/debian/patches/pr39491.diff @@ -0,0 +1,132 @@ +# DP: Proposed patch for PR libstdc++/39491. + +2009-04-16 Benjamin Kosnik + + * src/math_stubs_long_double.cc (__signbitl): Add for hppa linux only. + +Index: a/src/libstdc++-v3/src/math_stubs_long_double.cc +=================================================================== +--- a/src/libstdc++-v3/src/math_stubs_long_double.cc (revision 146216) ++++ b/src/libstdc++-v3/src/math_stubs_long_double.cc (working copy) +@@ -213,4 +221,111 @@ + return tanh((double) x); + } + #endif ++ ++ // From libmath/signbitl.c ++ // XXX ABI mistakenly exported ++#if defined (__hppa__) && defined (__linux__) ++# include ++# include ++ ++typedef unsigned int U_int32_t __attribute ((mode (SI))); ++typedef int Int32_t __attribute ((mode (SI))); ++typedef unsigned int U_int64_t __attribute ((mode (DI))); ++typedef int Int64_t __attribute ((mode (DI))); ++ ++#if BYTE_ORDER == BIG_ENDIAN ++typedef union ++{ ++ long double value; ++ struct ++ { ++ unsigned int sign_exponent:16; ++ unsigned int empty:16; ++ U_int32_t msw; ++ U_int32_t lsw; ++ } parts; ++} ieee_long_double_shape_type; ++#endif ++#if BYTE_ORDER == LITTLE_ENDIAN ++typedef union ++{ ++ long double value; ++ struct ++ { ++ U_int32_t lsw; ++ U_int32_t msw; ++ unsigned int sign_exponent:16; ++ unsigned int empty:16; ++ } parts; ++} ieee_long_double_shape_type; ++#endif ++ ++/* Get int from the exponent of a long double. */ ++#define GET_LDOUBLE_EXP(exp,d) \ ++do { \ ++ ieee_long_double_shape_type ge_u; \ ++ ge_u.value = (d); \ ++ (exp) = ge_u.parts.sign_exponent; \ ++} while (0) ++ ++#if BYTE_ORDER == BIG_ENDIAN ++typedef union ++{ ++ long double value; ++ struct ++ { ++ U_int64_t msw; ++ U_int64_t lsw; ++ } parts64; ++ struct ++ { ++ U_int32_t w0, w1, w2, w3; ++ } parts32; ++} ieee_quad_double_shape_type; ++#endif ++ ++#if BYTE_ORDER == LITTLE_ENDIAN ++typedef union ++{ ++ long double value; ++ struct ++ { ++ U_int64_t lsw; ++ U_int64_t msw; ++ } parts64; ++ struct ++ { ++ U_int32_t w3, w2, w1, w0; ++ } parts32; ++} ieee_quad_double_shape_type; ++#endif ++ ++/* Get most significant 64 bit int from a quad long double. */ ++#define GET_LDOUBLE_MSW64(msw,d) \ ++do { \ ++ ieee_quad_double_shape_type qw_u; \ ++ qw_u.value = (d); \ ++ (msw) = qw_u.parts64.msw; \ ++} while (0) ++ ++int ++__signbitl (long double x) ++{ ++#if LDBL_MANT_DIG == 113 ++ Int64_t msw; ++ ++ GET_LDOUBLE_MSW64 (msw, x); ++ return msw < 0; ++#else ++ Int32_t e; ++ ++ GET_LDOUBLE_EXP (e, x); ++ return e & 0x8000; ++#endif ++} ++#endif ++ ++#ifndef _GLIBCXX_HAVE___SIGNBITL ++ ++#endif + } // extern "C" +--- a/src/libstdc++-v3/config/abi/pre/gnu.ver~ 2009-04-10 01:23:07.000000000 +0200 ++++ b/src/libstdc++-v3/config/abi/pre/gnu.ver 2009-04-21 16:24:24.000000000 +0200 +@@ -635,6 +635,7 @@ + sqrtf; + sqrtl; + copysignf; ++ __signbitl; + + # GLIBCXX_ABI compatibility only. + # std::string --- gcc-7-7.2.0.orig/debian/patches/pr47818.diff +++ gcc-7-7.2.0/debian/patches/pr47818.diff @@ -0,0 +1,26 @@ +Description: allow pragma Assert with No_Implementation_Pragmas restriction. +Author: Eugeniy Meshcheryakov +Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47818 + +Index: b/src/gcc/ada/sem_prag.adb +=================================================================== +--- a/src/gcc/ada/sem_prag.adb ++++ b/src/gcc/ada/sem_prag.adb +@@ -16864,7 +16864,16 @@ package body Sem_Prag is + Typ_Arg : Node_Id; + + begin +- GNAT_Pragma; ++ -- This could be a rewritten pragma Assert. If it is the case ++ -- then don't check restrictions, because they are different for ++ -- pragma Assert and were already checked. ++ ++ if Nkind (Original_Node (N)) /= N_Pragma ++ or else Pragma_Name (Original_Node (N)) /= Name_Assert ++ then ++ GNAT_Pragma; ++ end if; ++ + Check_At_Least_N_Arguments (2); + Check_At_Most_N_Arguments (3); + Check_Optional_Identifier (Arg1, Name_Entity); --- gcc-7-7.2.0.orig/debian/patches/pr66368.diff +++ gcc-7-7.2.0/debian/patches/pr66368.diff @@ -0,0 +1,26 @@ +# DP: PR go/66368, build libgo with -fno-stack-protector + +Index: b/src/libgo/Makefile.am +=================================================================== +--- a/src/libgo/Makefile.am ++++ b/src/libgo/Makefile.am +@@ -41,6 +41,7 @@ AM_CPPFLAGS = -I $(srcdir)/runtime $(LIB + ACLOCAL_AMFLAGS = -I ./config -I ../config + + AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \ ++ -fno-stack-protector \ + $(SPLIT_STACK) $(WARN_CFLAGS) \ + $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \ + -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \ +Index: b/src/libgo/Makefile.in +=================================================================== +--- a/src/libgo/Makefile.in ++++ b/src/libgo/Makefile.in +@@ -458,6 +458,7 @@ WARN_CFLAGS = $(WARN_FLAGS) $(WERROR) + AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS) + ACLOCAL_AMFLAGS = -I ./config -I ../config + AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \ ++ -fno-stack-protector \ + $(SPLIT_STACK) $(WARN_CFLAGS) \ + $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \ + -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \ --- gcc-7-7.2.0.orig/debian/patches/pr67165.diff +++ gcc-7-7.2.0/debian/patches/pr67165.diff @@ -0,0 +1,2507 @@ +# DP: Fix PR other/67165, libbacktrace support for compressed debug sections + +2017-09-28 Ian Lance Taylor + + PR other/67165 + * elf.c (__builtin_prefetch): Define if not __GNUC__. + (unlikely): Define. + (SHF_UNCOMPRESSED, ELFCOMPRESS_ZLIB): Define. + (b_elf_chdr): Define type. + (enum debug_section): Add ZDEBUG_xxx values. + (debug_section_names): Add names for new sections. + (struct debug_section_info): Add compressed field. + (elf_zlib_failed, elf_zlib_fetch): New static functions. + (HUFFMAN_TABLE_SIZE, HUFFMAN_VALUE_MASK): Define. + (HUFFMAN_BITS_SHIFT, HUFFMAN_BITS_MASK): Define. + (HUFFMAN_SECONDARY_SHIFT): Define. + (ZDEBUG_TABLE_SIZE): Define. + (ZDEBUG_TABLE_CODELEN_OFFSET, ZDEBUG_TABLE_WORK_OFFSET): Define. + (final_next_secondary): New static variable if + BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE. + (elf_zlib_inflate_table): New static function. + (BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE): If define, define main + function to produce fixed Huffman table. + (elf_zlib_default_table): New static variable. + (elf_zlib_inflate): New static function. + (elf_zlib_verify_checksum): Likewise. + (elf_zlib_inflate_and_verify): Likewise. + (elf_uncompress_zdebug): Likewise. + (elf_uncompress_chdr): Likewise. + (backtrace_uncompress_zdebug): New extern function. + (elf_add): Look for .zdebug sections and SHF_COMPRESSED debug + sections, and uncompress them. + * internal.h (backtrace_compress_zdebug): Declare. + * ztest.c: New file. + * configure.ac: Check for -lz and check whether the linker + supports --compress-debug-sections. + * Makefile.am (ztest_SOURCES): New variable. + (ztest_CFLAGS, ztest_LDADD): New variables. + (check_PROGRAMS): Add ztest. + (ctestg_SOURCES): New variable. + (ctestg_CFLAGS, ctestg_LDFLAGS, ctestg_LDADD): New variables. + (ctesta_SOURCES): New variable. + (ctesta_CFLAGS, ctesta_LDFLAGS, ctesta_LDADD): New variables. + (check_PROGRAMS): Add ctestg and ctesta. + * configure, config.h.in, Makefile.in: Rebuild. + +Index: b/src/libbacktrace/Makefile.in +=================================================================== +--- a/src/libbacktrace/Makefile.in ++++ b/src/libbacktrace/Makefile.in +@@ -16,7 +16,7 @@ + @SET_MAKE@ + + # Makefile.am -- Backtrace Makefile. +-# Copyright (C) 2012-2016 Free Software Foundation, Inc. ++# Copyright (C) 2012-2017 Free Software Foundation, Inc. + + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are +@@ -83,9 +83,11 @@ POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ + target_triplet = @target@ +-check_PROGRAMS = $(am__EXEEXT_1) +-@NATIVE_TRUE@am__append_1 = btest stest +-@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_2 = dtest ++check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) ++@NATIVE_TRUE@am__append_1 = btest stest ztest ++@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_2 = -lz ++@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_3 = dtest ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__append_4 = ctestg ctesta + subdir = . + DIST_COMMON = README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ +@@ -114,16 +116,44 @@ am__DEPENDENCIES_1 = + am_libbacktrace_la_OBJECTS = atomic.lo dwarf.lo fileline.lo posix.lo \ + print.lo sort.lo state.lo + libbacktrace_la_OBJECTS = $(am_libbacktrace_la_OBJECTS) +-@NATIVE_TRUE@am__EXEEXT_1 = btest$(EXEEXT) stest$(EXEEXT) ++@NATIVE_TRUE@am__EXEEXT_1 = btest$(EXEEXT) stest$(EXEEXT) \ ++@NATIVE_TRUE@ ztest$(EXEEXT) ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_2 = \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg$(EXEEXT) \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta$(EXEEXT) + @NATIVE_TRUE@am_btest_OBJECTS = btest-btest.$(OBJEXT) + btest_OBJECTS = $(am_btest_OBJECTS) + @NATIVE_TRUE@btest_DEPENDENCIES = libbacktrace.la + btest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(btest_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctesta_OBJECTS = ctesta-btest.$(OBJEXT) \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta-testlib.$(OBJEXT) ++ctesta_OBJECTS = $(am_ctesta_OBJECTS) ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_DEPENDENCIES = \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ libbacktrace.la ++ctesta_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ ++ --mode=link $(CCLD) $(ctesta_CFLAGS) $(CFLAGS) \ ++ $(ctesta_LDFLAGS) $(LDFLAGS) -o $@ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctestg_OBJECTS = ctestg-btest.$(OBJEXT) \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg-testlib.$(OBJEXT) ++ctestg_OBJECTS = $(am_ctestg_OBJECTS) ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_DEPENDENCIES = \ ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ libbacktrace.la ++ctestg_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ ++ --mode=link $(CCLD) $(ctestg_CFLAGS) $(CFLAGS) \ ++ $(ctestg_LDFLAGS) $(LDFLAGS) -o $@ + @NATIVE_TRUE@am_stest_OBJECTS = stest.$(OBJEXT) + stest_OBJECTS = $(am_stest_OBJECTS) + @NATIVE_TRUE@stest_DEPENDENCIES = libbacktrace.la ++@NATIVE_TRUE@am_ztest_OBJECTS = ztest-ztest.$(OBJEXT) \ ++@NATIVE_TRUE@ ztest-testlib.$(OBJEXT) ++ztest_OBJECTS = $(am_ztest_OBJECTS) ++@NATIVE_TRUE@ztest_DEPENDENCIES = libbacktrace.la \ ++@NATIVE_TRUE@ $(am__DEPENDENCIES_1) ++ztest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ ++ --mode=link $(CCLD) $(ztest_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ ++ $(LDFLAGS) -o $@ + DEFAULT_INCLUDES = -I.@am__isrc@ + depcomp = + am__depfiles_maybe = +@@ -137,7 +167,8 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLF + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ + SOURCES = $(libbacktrace_la_SOURCES) $(EXTRA_libbacktrace_la_SOURCES) \ +- $(btest_SOURCES) $(stest_SOURCES) ++ $(btest_SOURCES) $(ctesta_SOURCES) $(ctestg_SOURCES) \ ++ $(stest_SOURCES) $(ztest_SOURCES) + MULTISRCTOP = + MULTIBUILDTOP = + MULTIDIRS = +@@ -326,12 +357,23 @@ libbacktrace_la_LIBADD = \ + $(ALLOC_FILE) + + libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) +-TESTS = $(check_PROGRAMS) $(am__append_2) ++TESTS = $(check_PROGRAMS) $(am__append_3) + @NATIVE_TRUE@btest_SOURCES = btest.c + @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O + @NATIVE_TRUE@btest_LDADD = libbacktrace.la + @NATIVE_TRUE@stest_SOURCES = stest.c + @NATIVE_TRUE@stest_LDADD = libbacktrace.la ++@NATIVE_TRUE@ztest_SOURCES = ztest.c testlib.c ++@NATIVE_TRUE@ztest_CFLAGS = -DSRCDIR=\"$(srcdir)\" ++@NATIVE_TRUE@ztest_LDADD = libbacktrace.la $(am__append_2) ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_SOURCES = btest.c testlib.c ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_CFLAGS = $(AM_CFLAGS) -g ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_LDFLAGS = -Wl,--compress-debug-sections=zlib-gnu ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_LDADD = libbacktrace.la ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_SOURCES = btest.c testlib.c ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_CFLAGS = $(AM_CFLAGS) -g ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_LDFLAGS = -Wl,--compress-debug-sections=zlib-gabi ++@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_LDADD = libbacktrace.la + + # We can't use automake's automatic dependency tracking, because it + # breaks when using bootstrap-lean. Automatic dependency tracking +@@ -424,9 +466,18 @@ clean-checkPROGRAMS: + btest$(EXEEXT): $(btest_OBJECTS) $(btest_DEPENDENCIES) $(EXTRA_btest_DEPENDENCIES) + @rm -f btest$(EXEEXT) + $(btest_LINK) $(btest_OBJECTS) $(btest_LDADD) $(LIBS) ++ctesta$(EXEEXT): $(ctesta_OBJECTS) $(ctesta_DEPENDENCIES) $(EXTRA_ctesta_DEPENDENCIES) ++ @rm -f ctesta$(EXEEXT) ++ $(ctesta_LINK) $(ctesta_OBJECTS) $(ctesta_LDADD) $(LIBS) ++ctestg$(EXEEXT): $(ctestg_OBJECTS) $(ctestg_DEPENDENCIES) $(EXTRA_ctestg_DEPENDENCIES) ++ @rm -f ctestg$(EXEEXT) ++ $(ctestg_LINK) $(ctestg_OBJECTS) $(ctestg_LDADD) $(LIBS) + stest$(EXEEXT): $(stest_OBJECTS) $(stest_DEPENDENCIES) $(EXTRA_stest_DEPENDENCIES) + @rm -f stest$(EXEEXT) + $(LINK) $(stest_OBJECTS) $(stest_LDADD) $(LIBS) ++ztest$(EXEEXT): $(ztest_OBJECTS) $(ztest_DEPENDENCIES) $(EXTRA_ztest_DEPENDENCIES) ++ @rm -f ztest$(EXEEXT) ++ $(ztest_LINK) $(ztest_OBJECTS) $(ztest_LDADD) $(LIBS) + + mostlyclean-compile: + -rm -f *.$(OBJEXT) +@@ -449,6 +500,42 @@ btest-btest.o: btest.c + btest-btest.obj: btest.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_CFLAGS) $(CFLAGS) -c -o btest-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` + ++ctesta-btest.o: btest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c ++ ++ctesta-btest.obj: btest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` ++ ++ctesta-testlib.o: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c ++ ++ctesta-testlib.obj: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi` ++ ++ctestg-btest.o: btest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctestg_CFLAGS) $(CFLAGS) -c -o ctestg-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c ++ ++ctestg-btest.obj: btest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctestg_CFLAGS) $(CFLAGS) -c -o ctestg-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` ++ ++ctestg-testlib.o: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctestg_CFLAGS) $(CFLAGS) -c -o ctestg-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c ++ ++ctestg-testlib.obj: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctestg_CFLAGS) $(CFLAGS) -c -o ctestg-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi` ++ ++ztest-ztest.o: ztest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ztest_CFLAGS) $(CFLAGS) -c -o ztest-ztest.o `test -f 'ztest.c' || echo '$(srcdir)/'`ztest.c ++ ++ztest-ztest.obj: ztest.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ztest_CFLAGS) $(CFLAGS) -c -o ztest-ztest.obj `if test -f 'ztest.c'; then $(CYGPATH_W) 'ztest.c'; else $(CYGPATH_W) '$(srcdir)/ztest.c'; fi` ++ ++ztest-testlib.o: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ztest_CFLAGS) $(CFLAGS) -c -o ztest-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c ++ ++ztest-testlib.obj: testlib.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ztest_CFLAGS) $(CFLAGS) -c -o ztest-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi` ++ + mostlyclean-libtool: + -rm -f *.lo + +Index: b/src/libbacktrace/elf.c +=================================================================== +--- a/src/libbacktrace/elf.c ++++ b/src/libbacktrace/elf.c +@@ -56,6 +56,13 @@ POSSIBILITY OF SUCH DAMAGE. */ + #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) + #endif + ++#ifndef __GNUC__ ++#define __builtin_prefetch(p, r, l) ++#define unlikely(x) (x) ++#else ++#define unlikely(x) __builtin_expect(!!(x), 0) ++#endif ++ + #if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN + + /* If strnlen is not declared, provide our own version. */ +@@ -135,9 +142,11 @@ dl_iterate_phdr (int (*callback) (struct + #undef SHT_SYMTAB + #undef SHT_STRTAB + #undef SHT_DYNSYM ++#undef SHF_COMPRESSED + #undef STT_OBJECT + #undef STT_FUNC + #undef NT_GNU_BUILD_ID ++#undef ELFCOMPRESS_ZLIB + + /* Basic types. */ + +@@ -228,6 +237,8 @@ typedef struct { + #define SHT_STRTAB 3 + #define SHT_DYNSYM 11 + ++#define SHF_COMPRESSED 0x800 ++ + #if BACKTRACE_ELF_SIZE == 32 + + typedef struct +@@ -267,6 +278,29 @@ typedef struct + + #define NT_GNU_BUILD_ID 3 + ++#if BACKTRACE_ELF_SIZE == 32 ++ ++typedef struct ++{ ++ b_elf_word ch_type; /* Compresstion algorithm */ ++ b_elf_word ch_size; /* Uncompressed size */ ++ b_elf_word ch_addralign; /* Alignment for uncompressed data */ ++} b_elf_chdr; /* Elf_Chdr */ ++ ++#else /* BACKTRACE_ELF_SIZE != 32 */ ++ ++typedef struct ++{ ++ b_elf_word ch_type; /* Compression algorithm */ ++ b_elf_word ch_reserved; /* Reserved */ ++ b_elf_xword ch_size; /* Uncompressed size */ ++ b_elf_xword ch_addralign; /* Alignment for uncompressed data */ ++} b_elf_chdr; /* Elf_Chdr */ ++ ++#endif /* BACKTRACE_ELF_SIZE != 32 */ ++ ++#define ELFCOMPRESS_ZLIB 1 ++ + /* An index of ELF sections we care about. */ + + enum debug_section +@@ -276,6 +310,15 @@ enum debug_section + DEBUG_ABBREV, + DEBUG_RANGES, + DEBUG_STR, ++ ++ /* The old style compressed sections. This list must correspond to ++ the list of normal debug sections. */ ++ ZDEBUG_INFO, ++ ZDEBUG_LINE, ++ ZDEBUG_ABBREV, ++ ZDEBUG_RANGES, ++ ZDEBUG_STR, ++ + DEBUG_MAX + }; + +@@ -287,7 +330,12 @@ static const char * const debug_section_ + ".debug_line", + ".debug_abbrev", + ".debug_ranges", +- ".debug_str" ++ ".debug_str", ++ ".zdebug_info", ++ ".zdebug_line", ++ ".zdebug_abbrev", ++ ".zdebug_ranges", ++ ".zdebug_str" + }; + + /* Information we gather for the sections we care about. */ +@@ -300,6 +348,8 @@ struct debug_section_info + size_t size; + /* Section contents, after read from file. */ + const unsigned char *data; ++ /* Whether the SHF_COMPRESSED flag is set for the section. */ ++ int compressed; + }; + + /* Information we keep for an ELF symbol. */ +@@ -936,6 +986,1493 @@ elf_open_debugfile_by_debuglink (struct + return ddescriptor; + } + ++/* A function useful for setting a breakpoint for an inflation failure ++ when this code is compiled with -g. */ ++ ++static void ++elf_zlib_failed(void) ++{ ++} ++ ++/* *PVAL is the current value being read from the stream, and *PBITS ++ is the number of valid bits. Ensure that *PVAL holds at least 15 ++ bits by reading additional bits from *PPIN, up to PINEND, as ++ needed. Updates *PPIN, *PVAL and *PBITS. Returns 1 on success, 0 ++ on error. */ ++ ++static int ++elf_zlib_fetch (const unsigned char **ppin, const unsigned char *pinend, ++ uint32_t *pval, unsigned int *pbits) ++{ ++ unsigned int bits; ++ const unsigned char *pin; ++ uint32_t val; ++ ++ bits = *pbits; ++ if (bits >= 15) ++ return 1; ++ pin = *ppin; ++ val = *pval; ++ ++ if (unlikely (pinend - pin < 2)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ val |= pin[0] << bits; ++ val |= pin[1] << (bits + 8); ++ bits += 16; ++ pin += 2; ++ ++ /* We will need the next two bytes soon. We ask for high temporal ++ locality because we will need the whole cache line soon. */ ++ __builtin_prefetch (pin, 0, 3); ++ __builtin_prefetch (pin + 1, 0, 3); ++ ++ *ppin = pin; ++ *pval = val; ++ *pbits = bits; ++ return 1; ++} ++ ++/* Huffman code tables, like the rest of the zlib format, are defined ++ by RFC 1951. We store a Huffman code table as a series of tables ++ stored sequentially in memory. Each entry in a table is 16 bits. ++ The first, main, table has 256 entries. It is followed by a set of ++ secondary tables of length 2 to 128 entries. The maximum length of ++ a code sequence in the deflate format is 15 bits, so that is all we ++ need. Each secondary table has an index, which is the offset of ++ the table in the overall memory storage. ++ ++ The deflate format says that all codes of a given bit length are ++ lexicographically consecutive. Perhaps we could have 130 values ++ that require a 15-bit code, perhaps requiring three secondary ++ tables of size 128. I don't know if this is actually possible, but ++ it suggests that the maximum size required for secondary tables is ++ 3 * 128 + 3 * 64 ... == 768. The zlib enough program reports 660 ++ as the maximum. We permit 768, since in addition to the 256 for ++ the primary table, with two bytes per entry, and with the two ++ tables we need, that gives us a page. ++ ++ A single table entry needs to store a value or (for the main table ++ only) the index and size of a secondary table. Values range from 0 ++ to 285, inclusive. Secondary table indexes, per above, range from ++ 0 to 510. For a value we need to store the number of bits we need ++ to determine that value (one value may appear multiple times in the ++ table), which is 1 to 8. For a secondary table we need to store ++ the number of bits used to index into the table, which is 1 to 7. ++ And of course we need 1 bit to decide whether we have a value or a ++ secondary table index. So each entry needs 9 bits for value/table ++ index, 3 bits for size, 1 bit what it is. For simplicity we use 16 ++ bits per entry. */ ++ ++/* Number of entries we allocate to for one code table. We get a page ++ for the two code tables we need. */ ++ ++#define HUFFMAN_TABLE_SIZE (1024) ++ ++/* Bit masks and shifts for the values in the table. */ ++ ++#define HUFFMAN_VALUE_MASK 0x01ff ++#define HUFFMAN_BITS_SHIFT 9 ++#define HUFFMAN_BITS_MASK 0x7 ++#define HUFFMAN_SECONDARY_SHIFT 12 ++ ++/* For working memory while inflating we need two code tables, we need ++ an array of code lengths (max value 15, so we use unsigned char), ++ and an array of unsigned shorts used while building a table. The ++ latter two arrays must be large enough to hold the maximum number ++ of code lengths, which RFC 1951 defines as 286 + 30. */ ++ ++#define ZDEBUG_TABLE_SIZE \ ++ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \ ++ + (286 + 30) * sizeof (uint16_t) \ ++ + (286 + 30) * sizeof (unsigned char)) ++ ++#define ZDEBUG_TABLE_CODELEN_OFFSET \ ++ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \ ++ + (286 + 30) * sizeof (uint16_t)) ++ ++#define ZDEBUG_TABLE_WORK_OFFSET \ ++ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t)) ++ ++#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE ++ ++/* Used by the main function that generates the fixed table to learn ++ the table size. */ ++static size_t final_next_secondary; ++ ++#endif ++ ++/* Build a Huffman code table from an array of lengths in CODES of ++ length CODES_LEN. The table is stored into *TABLE. ZDEBUG_TABLE ++ is the same as for elf_zlib_inflate, used to find some work space. ++ Returns 1 on success, 0 on error. */ ++ ++static int ++elf_zlib_inflate_table (unsigned char *codes, size_t codes_len, ++ uint16_t *zdebug_table, uint16_t *table) ++{ ++ uint16_t count[16]; ++ uint16_t start[16]; ++ uint16_t prev[16]; ++ uint16_t firstcode[7]; ++ uint16_t *next; ++ size_t i; ++ size_t j; ++ unsigned int code; ++ size_t next_secondary; ++ ++ /* Count the number of code of each length. Set NEXT[val] to be the ++ next value after VAL with the same bit length. */ ++ ++ next = (uint16_t *) (((unsigned char *) zdebug_table) ++ + ZDEBUG_TABLE_WORK_OFFSET); ++ ++ memset (&count[0], 0, 16 * sizeof (uint16_t)); ++ for (i = 0; i < codes_len; ++i) ++ { ++ if (unlikely (codes[i] >= 16)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ if (count[codes[i]] == 0) ++ { ++ start[codes[i]] = i; ++ prev[codes[i]] = i; ++ } ++ else ++ { ++ next[prev[codes[i]]] = i; ++ prev[codes[i]] = i; ++ } ++ ++ ++count[codes[i]]; ++ } ++ ++ /* For each length, fill in the table for the codes of that ++ length. */ ++ ++ memset (table, 0, HUFFMAN_TABLE_SIZE * sizeof (uint16_t)); ++ ++ /* Handle the values that do not require a secondary table. */ ++ ++ code = 0; ++ for (j = 1; j <= 8; ++j) ++ { ++ unsigned int jcnt; ++ unsigned int val; ++ ++ jcnt = count[j]; ++ if (jcnt == 0) ++ continue; ++ ++ if (unlikely (jcnt > (1U << j))) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ /* There are JCNT values that have this length, the values ++ starting from START[j] continuing through NEXT[VAL]. Those ++ values are assigned consecutive values starting at CODE. */ ++ ++ val = start[j]; ++ for (i = 0; i < jcnt; ++i) ++ { ++ uint16_t tval; ++ size_t ind; ++ unsigned int incr; ++ ++ /* In the compressed bit stream, the value VAL is encoded as ++ J bits with the value C. */ ++ ++ if (unlikely ((val & ~HUFFMAN_VALUE_MASK) != 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ tval = val | ((j - 1) << HUFFMAN_BITS_SHIFT); ++ ++ /* The table lookup uses 8 bits. If J is less than 8, we ++ don't know what the other bits will be. We need to fill ++ in all possibilities in the table. Since the Huffman ++ code is unambiguous, those entries can't be used for any ++ other code. */ ++ ++ for (ind = code; ind < 0x100; ind += 1 << j) ++ { ++ if (unlikely (table[ind] != 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ table[ind] = tval; ++ } ++ ++ /* Advance to the next value with this length. */ ++ if (i + 1 < jcnt) ++ val = next[val]; ++ ++ /* The Huffman codes are stored in the bitstream with the ++ most significant bit first, as is required to make them ++ unambiguous. The effect is that when we read them from ++ the bitstream we see the bit sequence in reverse order: ++ the most significant bit of the Huffman code is the least ++ significant bit of the value we read from the bitstream. ++ That means that to make our table lookups work, we need ++ to reverse the bits of CODE. Since reversing bits is ++ tedious and in general requires using a table, we instead ++ increment CODE in reverse order. That is, if the number ++ of bits we are currently using, here named J, is 3, we ++ count as 000, 100, 010, 110, 001, 101, 011, 111, which is ++ to say the numbers from 0 to 7 but with the bits ++ reversed. Going to more bits, aka incrementing J, ++ effectively just adds more zero bits as the beginning, ++ and as such does not change the numeric value of CODE. ++ ++ To increment CODE of length J in reverse order, find the ++ most significant zero bit and set it to one while ++ clearing all higher bits. In other words, add 1 modulo ++ 2^J, only reversed. */ ++ ++ incr = 1U << (j - 1); ++ while ((code & incr) != 0) ++ incr >>= 1; ++ if (incr == 0) ++ code = 0; ++ else ++ { ++ code &= incr - 1; ++ code += incr; ++ } ++ } ++ } ++ ++ /* Handle the values that require a secondary table. */ ++ ++ /* Set FIRSTCODE, the number at which the codes start, for each ++ length. */ ++ ++ for (j = 9; j < 16; j++) ++ { ++ unsigned int jcnt; ++ unsigned int k; ++ ++ jcnt = count[j]; ++ if (jcnt == 0) ++ continue; ++ ++ /* There are JCNT values that have this length, the values ++ starting from START[j]. Those values are assigned ++ consecutive values starting at CODE. */ ++ ++ firstcode[j - 9] = code; ++ ++ /* Reverse add JCNT to CODE modulo 2^J. */ ++ for (k = 0; k < j; ++k) ++ { ++ if ((jcnt & (1U << k)) != 0) ++ { ++ unsigned int m; ++ unsigned int bit; ++ ++ bit = 1U << (j - k - 1); ++ for (m = 0; m < j - k; ++m, bit >>= 1) ++ { ++ if ((code & bit) == 0) ++ { ++ code += bit; ++ break; ++ } ++ code &= ~bit; ++ } ++ jcnt &= ~(1U << k); ++ } ++ } ++ if (unlikely (jcnt != 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ } ++ ++ /* For J from 9 to 15, inclusive, we store COUNT[J] consecutive ++ values starting at START[J] with consecutive codes starting at ++ FIRSTCODE[J - 9]. In the primary table we need to point to the ++ secondary table, and the secondary table will be indexed by J - 9 ++ bits. We count down from 15 so that we install the larger ++ secondary tables first, as the smaller ones may be embedded in ++ the larger ones. */ ++ ++ next_secondary = 0; /* Index of next secondary table (after primary). */ ++ for (j = 15; j >= 9; j--) ++ { ++ unsigned int jcnt; ++ unsigned int val; ++ size_t primary; /* Current primary index. */ ++ size_t secondary; /* Offset to current secondary table. */ ++ size_t secondary_bits; /* Bit size of current secondary table. */ ++ ++ jcnt = count[j]; ++ if (jcnt == 0) ++ continue; ++ ++ val = start[j]; ++ code = firstcode[j - 9]; ++ primary = 0x100; ++ secondary = 0; ++ secondary_bits = 0; ++ for (i = 0; i < jcnt; ++i) ++ { ++ uint16_t tval; ++ size_t ind; ++ unsigned int incr; ++ ++ if ((code & 0xff) != primary) ++ { ++ uint16_t tprimary; ++ ++ /* Fill in a new primary table entry. */ ++ ++ primary = code & 0xff; ++ ++ tprimary = table[primary]; ++ if (tprimary == 0) ++ { ++ /* Start a new secondary table. */ ++ ++ if (unlikely ((next_secondary & HUFFMAN_VALUE_MASK) ++ != next_secondary)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ secondary = next_secondary; ++ secondary_bits = j - 8; ++ next_secondary += 1 << secondary_bits; ++ table[primary] = (secondary ++ + ((j - 8) << HUFFMAN_BITS_SHIFT) ++ + (1U << HUFFMAN_SECONDARY_SHIFT)); ++ } ++ else ++ { ++ /* There is an existing entry. It had better be a ++ secondary table with enough bits. */ ++ if (unlikely ((tprimary & (1U << HUFFMAN_SECONDARY_SHIFT)) ++ == 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ secondary = tprimary & HUFFMAN_VALUE_MASK; ++ secondary_bits = ((tprimary >> HUFFMAN_BITS_SHIFT) ++ & HUFFMAN_BITS_MASK); ++ if (unlikely (secondary_bits < j - 8)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ } ++ } ++ ++ /* Fill in secondary table entries. */ ++ ++ tval = val | ((j - 8) << HUFFMAN_BITS_SHIFT); ++ ++ for (ind = code >> 8; ++ ind < (1U << secondary_bits); ++ ind += 1U << (j - 8)) ++ { ++ if (unlikely (table[secondary + 0x100 + ind] != 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ table[secondary + 0x100 + ind] = tval; ++ } ++ ++ if (i + 1 < jcnt) ++ val = next[val]; ++ ++ incr = 1U << (j - 1); ++ while ((code & incr) != 0) ++ incr >>= 1; ++ if (incr == 0) ++ code = 0; ++ else ++ { ++ code &= incr - 1; ++ code += incr; ++ } ++ } ++ } ++ ++#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE ++ final_next_secondary = next_secondary; ++#endif ++ ++ return 1; ++} ++ ++#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE ++ ++/* Used to generate the fixed Huffman table for block type 1. */ ++ ++#include ++ ++static uint16_t table[ZDEBUG_TABLE_SIZE]; ++static unsigned char codes[287]; ++ ++int ++main () ++{ ++ size_t i; ++ ++ for (i = 0; i <= 143; ++i) ++ codes[i] = 8; ++ for (i = 144; i <= 255; ++i) ++ codes[i] = 9; ++ for (i = 256; i <= 279; ++i) ++ codes[i] = 7; ++ for (i = 280; i <= 287; ++i) ++ codes[i] = 8; ++ if (!elf_zlib_inflate_table (&codes[0], 287, &table[0], &table[0])) ++ { ++ fprintf (stderr, "elf_zlib_inflate_table failed\n"); ++ exit (EXIT_FAILURE); ++ } ++ ++ printf ("static const uint16_t elf_zlib_default_table[%#zx] =\n", ++ final_next_secondary + 0x100); ++ printf ("{\n"); ++ for (i = 0; i < final_next_secondary + 0x100; i += 8) ++ { ++ size_t j; ++ ++ printf (" "); ++ for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j) ++ printf (" %#x,", table[j]); ++ printf ("\n"); ++ } ++ printf ("};\n"); ++ return 0; ++} ++ ++#endif ++ ++/* The fixed table generated by the #ifdef'ed out main function ++ above. */ ++ ++static const uint16_t elf_zlib_default_table[0x170] = ++{ ++ 0xd00, 0xe50, 0xe10, 0xf18, 0xd10, 0xe70, 0xe30, 0x1232, ++ 0xd08, 0xe60, 0xe20, 0x1212, 0xe00, 0xe80, 0xe40, 0x1252, ++ 0xd04, 0xe58, 0xe18, 0x1202, 0xd14, 0xe78, 0xe38, 0x1242, ++ 0xd0c, 0xe68, 0xe28, 0x1222, 0xe08, 0xe88, 0xe48, 0x1262, ++ 0xd02, 0xe54, 0xe14, 0xf1c, 0xd12, 0xe74, 0xe34, 0x123a, ++ 0xd0a, 0xe64, 0xe24, 0x121a, 0xe04, 0xe84, 0xe44, 0x125a, ++ 0xd06, 0xe5c, 0xe1c, 0x120a, 0xd16, 0xe7c, 0xe3c, 0x124a, ++ 0xd0e, 0xe6c, 0xe2c, 0x122a, 0xe0c, 0xe8c, 0xe4c, 0x126a, ++ 0xd01, 0xe52, 0xe12, 0xf1a, 0xd11, 0xe72, 0xe32, 0x1236, ++ 0xd09, 0xe62, 0xe22, 0x1216, 0xe02, 0xe82, 0xe42, 0x1256, ++ 0xd05, 0xe5a, 0xe1a, 0x1206, 0xd15, 0xe7a, 0xe3a, 0x1246, ++ 0xd0d, 0xe6a, 0xe2a, 0x1226, 0xe0a, 0xe8a, 0xe4a, 0x1266, ++ 0xd03, 0xe56, 0xe16, 0xf1e, 0xd13, 0xe76, 0xe36, 0x123e, ++ 0xd0b, 0xe66, 0xe26, 0x121e, 0xe06, 0xe86, 0xe46, 0x125e, ++ 0xd07, 0xe5e, 0xe1e, 0x120e, 0xd17, 0xe7e, 0xe3e, 0x124e, ++ 0xd0f, 0xe6e, 0xe2e, 0x122e, 0xe0e, 0xe8e, 0xe4e, 0x126e, ++ 0xd00, 0xe51, 0xe11, 0xf19, 0xd10, 0xe71, 0xe31, 0x1234, ++ 0xd08, 0xe61, 0xe21, 0x1214, 0xe01, 0xe81, 0xe41, 0x1254, ++ 0xd04, 0xe59, 0xe19, 0x1204, 0xd14, 0xe79, 0xe39, 0x1244, ++ 0xd0c, 0xe69, 0xe29, 0x1224, 0xe09, 0xe89, 0xe49, 0x1264, ++ 0xd02, 0xe55, 0xe15, 0xf1d, 0xd12, 0xe75, 0xe35, 0x123c, ++ 0xd0a, 0xe65, 0xe25, 0x121c, 0xe05, 0xe85, 0xe45, 0x125c, ++ 0xd06, 0xe5d, 0xe1d, 0x120c, 0xd16, 0xe7d, 0xe3d, 0x124c, ++ 0xd0e, 0xe6d, 0xe2d, 0x122c, 0xe0d, 0xe8d, 0xe4d, 0x126c, ++ 0xd01, 0xe53, 0xe13, 0xf1b, 0xd11, 0xe73, 0xe33, 0x1238, ++ 0xd09, 0xe63, 0xe23, 0x1218, 0xe03, 0xe83, 0xe43, 0x1258, ++ 0xd05, 0xe5b, 0xe1b, 0x1208, 0xd15, 0xe7b, 0xe3b, 0x1248, ++ 0xd0d, 0xe6b, 0xe2b, 0x1228, 0xe0b, 0xe8b, 0xe4b, 0x1268, ++ 0xd03, 0xe57, 0xe17, 0x1200, 0xd13, 0xe77, 0xe37, 0x1240, ++ 0xd0b, 0xe67, 0xe27, 0x1220, 0xe07, 0xe87, 0xe47, 0x1260, ++ 0xd07, 0xe5f, 0xe1f, 0x1210, 0xd17, 0xe7f, 0xe3f, 0x1250, ++ 0xd0f, 0xe6f, 0xe2f, 0x1230, 0xe0f, 0xe8f, 0xe4f, 0, ++ 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, ++ 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, ++ 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, ++ 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, ++ 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, ++ 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, ++ 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, ++ 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, ++ 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, ++ 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, ++ 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, ++ 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, ++ 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, ++ 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, ++}; ++ ++/* Inflate a zlib stream from PIN/SIN to POUT/SOUT. Return 1 on ++ success, 0 on some error parsing the stream. */ ++ ++static int ++elf_zlib_inflate (const unsigned char *pin, size_t sin, uint16_t *zdebug_table, ++ unsigned char *pout, size_t sout) ++{ ++ unsigned char *porigout; ++ const unsigned char *pinend; ++ unsigned char *poutend; ++ ++ /* We can apparently see multiple zlib streams concatenated ++ together, so keep going as long as there is something to read. ++ The last 4 bytes are the checksum. */ ++ porigout = pout; ++ pinend = pin + sin; ++ poutend = pout + sout; ++ while ((pinend - pin) > 4) ++ { ++ uint32_t val; ++ unsigned int bits; ++ int last; ++ ++ /* Read the two byte zlib header. */ ++ ++ if (unlikely ((pin[0] & 0xf) != 8)) /* 8 is zlib encoding. */ ++ { ++ /* Unknown compression method. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ if (unlikely ((pin[0] >> 4) > 7)) ++ { ++ /* Window size too large. Other than this check, we don't ++ care about the window size. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ if (unlikely ((pin[1] & 0x20) != 0)) ++ { ++ /* Stream expects a predefined dictionary, but we have no ++ dictionary. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ val = (pin[0] << 8) | pin[1]; ++ if (unlikely (val % 31 != 0)) ++ { ++ /* Header check failure. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ pin += 2; ++ ++ /* Read blocks until one is marked last. */ ++ ++ val = 0; ++ bits = 0; ++ last = 0; ++ ++ while (!last) ++ { ++ unsigned int type; ++ const uint16_t *tlit; ++ const uint16_t *tdist; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ last = val & 1; ++ type = (val >> 1) & 3; ++ val >>= 3; ++ bits -= 3; ++ ++ if (unlikely (type == 3)) ++ { ++ /* Invalid block type. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ if (type == 0) ++ { ++ uint16_t len; ++ uint16_t lenc; ++ ++ /* An uncompressed block. */ ++ ++ /* If we've read ahead more than a byte, back up. */ ++ while (bits > 8) ++ { ++ --pin; ++ bits -= 8; ++ } ++ ++ val = 0; ++ bits = 0; ++ if (unlikely ((pinend - pin) < 4)) ++ { ++ /* Missing length. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ len = pin[0] | (pin[1] << 8); ++ lenc = pin[2] | (pin[3] << 8); ++ pin += 4; ++ lenc = ~lenc; ++ if (unlikely (len != lenc)) ++ { ++ /* Corrupt data. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ if (unlikely (len > (unsigned int) (pinend - pin) ++ || len > (unsigned int) (poutend - pout))) ++ { ++ /* Not enough space in buffers. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ memcpy (pout, pin, len); ++ pout += len; ++ pin += len; ++ ++ /* Go around to read the next block. */ ++ continue; ++ } ++ ++ if (type == 1) ++ { ++ tlit = elf_zlib_default_table; ++ tdist = elf_zlib_default_table; ++ } ++ else ++ { ++ unsigned int nlit; ++ unsigned int ndist; ++ unsigned int nclen; ++ unsigned char codebits[19]; ++ unsigned char *plenbase; ++ unsigned char *plen; ++ unsigned char *plenend; ++ ++ /* Read a Huffman encoding table. The various magic ++ numbers here are from RFC 1951. */ ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ nlit = (val & 0x1f) + 257; ++ val >>= 5; ++ ndist = (val & 0x1f) + 1; ++ val >>= 5; ++ nclen = (val & 0xf) + 4; ++ val >>= 4; ++ bits -= 14; ++ if (unlikely (nlit > 286 || ndist > 30)) ++ { ++ /* Values out of range. */ ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ /* Read and build the table used to compress the ++ literal, length, and distance codes. */ ++ ++ memset(&codebits[0], 0, 19); ++ ++ /* There are always at least 4 elements in the ++ table. */ ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ codebits[16] = val & 7; ++ codebits[17] = (val >> 3) & 7; ++ codebits[18] = (val >> 6) & 7; ++ codebits[0] = (val >> 9) & 7; ++ val >>= 12; ++ bits -= 12; ++ ++ if (nclen == 4) ++ goto codebitsdone; ++ ++ codebits[8] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 5) ++ goto codebitsdone; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ codebits[7] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 6) ++ goto codebitsdone; ++ ++ codebits[9] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 7) ++ goto codebitsdone; ++ ++ codebits[6] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 8) ++ goto codebitsdone; ++ ++ codebits[10] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 9) ++ goto codebitsdone; ++ ++ codebits[5] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 10) ++ goto codebitsdone; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ codebits[11] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 11) ++ goto codebitsdone; ++ ++ codebits[4] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 12) ++ goto codebitsdone; ++ ++ codebits[12] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 13) ++ goto codebitsdone; ++ ++ codebits[3] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 14) ++ goto codebitsdone; ++ ++ codebits[13] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 15) ++ goto codebitsdone; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ codebits[2] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 16) ++ goto codebitsdone; ++ ++ codebits[14] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 17) ++ goto codebitsdone; ++ ++ codebits[1] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ if (nclen == 18) ++ goto codebitsdone; ++ ++ codebits[15] = val & 7; ++ val >>= 3; ++ bits -= 3; ++ ++ codebitsdone: ++ ++ if (!elf_zlib_inflate_table (codebits, 19, zdebug_table, ++ zdebug_table)) ++ return 0; ++ ++ /* Read the compressed bit lengths of the literal, ++ length, and distance codes. We have allocated space ++ at the end of zdebug_table to hold them. */ ++ ++ plenbase = (((unsigned char *) zdebug_table) ++ + ZDEBUG_TABLE_CODELEN_OFFSET); ++ plen = plenbase; ++ plenend = plen + nlit + ndist; ++ while (plen < plenend) ++ { ++ uint16_t t; ++ unsigned int b; ++ uint16_t v; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ t = zdebug_table[val & 0xff]; ++ ++ /* The compression here uses bit lengths up to 7, so ++ a secondary table is never necessary. */ ++ if (unlikely ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) != 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; ++ val >>= b + 1; ++ bits -= b + 1; ++ ++ v = t & HUFFMAN_VALUE_MASK; ++ if (v < 16) ++ *plen++ = v; ++ else if (v == 16) ++ { ++ unsigned int c; ++ unsigned int prev; ++ ++ /* Copy previous entry 3 to 6 times. */ ++ ++ if (unlikely (plen == plenbase)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ /* We used up to 7 bits since the last ++ elf_zlib_fetch, so we have at least 8 bits ++ available here. */ ++ ++ c = 3 + (val & 0x3); ++ val >>= 2; ++ bits -= 2; ++ if (unlikely ((unsigned int) (plenend - plen) < c)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ prev = plen[-1]; ++ switch (c) ++ { ++ case 6: ++ *plen++ = prev; ++ /* fallthrough */ ++ case 5: ++ *plen++ = prev; ++ /* fallthrough */ ++ case 4: ++ *plen++ = prev; ++ } ++ *plen++ = prev; ++ *plen++ = prev; ++ *plen++ = prev; ++ } ++ else if (v == 17) ++ { ++ unsigned int c; ++ ++ /* Store zero 3 to 10 times. */ ++ ++ /* We used up to 7 bits since the last ++ elf_zlib_fetch, so we have at least 8 bits ++ available here. */ ++ ++ c = 3 + (val & 0x7); ++ val >>= 3; ++ bits -= 3; ++ if (unlikely ((unsigned int) (plenend - plen) < c)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ switch (c) ++ { ++ case 10: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 9: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 8: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 7: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 6: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 5: ++ *plen++ = 0; ++ /* fallthrough */ ++ case 4: ++ *plen++ = 0; ++ } ++ *plen++ = 0; ++ *plen++ = 0; ++ *plen++ = 0; ++ } ++ else if (v == 18) ++ { ++ unsigned int c; ++ ++ /* Store zero 11 to 138 times. */ ++ ++ /* We used up to 7 bits since the last ++ elf_zlib_fetch, so we have at least 8 bits ++ available here. */ ++ ++ c = 11 + (val & 0x7f); ++ val >>= 7; ++ bits -= 7; ++ if (unlikely ((unsigned int) (plenend - plen) < c)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ memset (plen, 0, c); ++ plen += c; ++ } ++ else ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ } ++ ++ /* Make sure that the stop code can appear. */ ++ ++ plen = plenbase; ++ if (unlikely (plen[256] == 0)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ /* Build the decompression tables. */ ++ ++ if (!elf_zlib_inflate_table (plen, nlit, zdebug_table, ++ zdebug_table)) ++ return 0; ++ if (!elf_zlib_inflate_table (plen + nlit, ndist, zdebug_table, ++ zdebug_table + HUFFMAN_TABLE_SIZE)) ++ return 0; ++ tlit = zdebug_table; ++ tdist = zdebug_table + HUFFMAN_TABLE_SIZE; ++ } ++ ++ /* Inflate values until the end of the block. This is the ++ main loop of the inflation code. */ ++ ++ while (1) ++ { ++ uint16_t t; ++ unsigned int b; ++ uint16_t v; ++ unsigned int lit; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ t = tlit[val & 0xff]; ++ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; ++ v = t & HUFFMAN_VALUE_MASK; ++ ++ if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0) ++ { ++ lit = v; ++ val >>= b + 1; ++ bits -= b + 1; ++ } ++ else ++ { ++ t = tlit[v + 0x100 + ((val >> 8) & ((1U << b) - 1))]; ++ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; ++ lit = t & HUFFMAN_VALUE_MASK; ++ val >>= b + 8; ++ bits -= b + 8; ++ } ++ ++ if (lit < 256) ++ { ++ if (unlikely (pout == poutend)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ *pout++ = lit; ++ ++ /* We will need to write the next byte soon. We ask ++ for high temporal locality because we will write ++ to the whole cache line soon. */ ++ __builtin_prefetch (pout, 1, 3); ++ } ++ else if (lit == 256) ++ { ++ /* The end of the block. */ ++ break; ++ } ++ else ++ { ++ unsigned int dist; ++ unsigned int len; ++ ++ /* Convert lit into a length. */ ++ ++ if (lit < 265) ++ len = lit - 257 + 3; ++ else if (lit == 285) ++ len = 258; ++ else if (unlikely (lit > 285)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ else ++ { ++ unsigned int extra; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ /* This is an expression for the table of length ++ codes in RFC 1951 3.2.5. */ ++ lit -= 265; ++ extra = (lit >> 2) + 1; ++ len = (lit & 3) << extra; ++ len += 11; ++ len += ((1U << (extra - 1)) - 1) << 3; ++ len += val & ((1U << extra) - 1); ++ val >>= extra; ++ bits -= extra; ++ } ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ t = tdist[val & 0xff]; ++ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; ++ v = t & HUFFMAN_VALUE_MASK; ++ ++ if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0) ++ { ++ dist = v; ++ val >>= b + 1; ++ bits -= b + 1; ++ } ++ else ++ { ++ t = tdist[v + 0x100 + ((val >> 8) & ((1U << b) - 1))]; ++ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; ++ dist = t & HUFFMAN_VALUE_MASK; ++ val >>= b + 8; ++ bits -= b + 8; ++ } ++ ++ /* Convert dist to a distance. */ ++ ++ if (dist == 0) ++ { ++ /* A distance of 1. A common case, meaning ++ repeat the last character LEN times. */ ++ ++ if (unlikely (pout == porigout)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ if (unlikely ((unsigned int) (poutend - pout) < len)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ memset (pout, pout[-1], len); ++ pout += len; ++ } ++ else if (unlikely (dist > 29)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ else ++ { ++ if (dist < 4) ++ dist = dist + 1; ++ else ++ { ++ unsigned int extra; ++ ++ if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) ++ return 0; ++ ++ /* This is an expression for the table of ++ distance codes in RFC 1951 3.2.5. */ ++ dist -= 4; ++ extra = (dist >> 1) + 1; ++ dist = (dist & 1) << extra; ++ dist += 5; ++ dist += ((1U << (extra - 1)) - 1) << 2; ++ dist += val & ((1U << extra) - 1); ++ val >>= extra; ++ bits -= extra; ++ } ++ ++ /* Go back dist bytes, and copy len bytes from ++ there. */ ++ ++ if (unlikely ((unsigned int) (pout - porigout) < dist)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ if (unlikely ((unsigned int) (poutend - pout) < len)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ if (dist >= len) ++ { ++ memcpy (pout, pout - dist, len); ++ pout += len; ++ } ++ else ++ { ++ while (len > 0) ++ { ++ unsigned int copy; ++ ++ copy = len < dist ? len : dist; ++ memcpy (pout, pout - dist, copy); ++ len -= copy; ++ pout += copy; ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ ++ /* We should have filled the output buffer. */ ++ if (unlikely (pout != poutend)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* Verify the zlib checksum. The checksum is in the 4 bytes at ++ CHECKBYTES, and the uncompressed data is at UNCOMPRESSED / ++ UNCOMPRESSED_SIZE. Returns 1 on success, 0 on failure. */ ++ ++static int ++elf_zlib_verify_checksum (const unsigned char *checkbytes, ++ const unsigned char *uncompressed, ++ size_t uncompressed_size) ++{ ++ unsigned int i; ++ unsigned int cksum; ++ const unsigned char *p; ++ uint32_t s1; ++ uint32_t s2; ++ size_t hsz; ++ ++ cksum = 0; ++ for (i = 0; i < 4; i++) ++ cksum = (cksum << 8) | checkbytes[i]; ++ ++ s1 = 1; ++ s2 = 0; ++ ++ /* Minimize modulo operations. */ ++ ++ p = uncompressed; ++ hsz = uncompressed_size; ++ while (hsz >= 5552) ++ { ++ for (i = 0; i < 5552; i += 16) ++ { ++ /* Manually unroll loop 16 times. */ ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ } ++ hsz -= 5552; ++ s1 %= 65521; ++ s2 %= 65521; ++ } ++ ++ while (hsz >= 16) ++ { ++ /* Manually unroll loop 16 times. */ ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ ++ hsz -= 16; ++ } ++ ++ for (i = 0; i < hsz; ++i) ++ { ++ s1 = s1 + *p++; ++ s2 = s2 + s1; ++ } ++ ++ s1 %= 65521; ++ s2 %= 65521; ++ ++ if (unlikely ((s2 << 16) + s1 != cksum)) ++ { ++ elf_zlib_failed (); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* Inflate a zlib stream from PIN/SIN to POUT/SOUT, and verify the ++ checksum. Return 1 on success, 0 on error. */ ++ ++static int ++elf_zlib_inflate_and_verify (const unsigned char *pin, size_t sin, ++ uint16_t *zdebug_table, unsigned char *pout, ++ size_t sout) ++{ ++ if (!elf_zlib_inflate (pin, sin, zdebug_table, pout, sout)) ++ return 0; ++ if (!elf_zlib_verify_checksum (pin + sin - 4, pout, sout)) ++ return 0; ++ return 1; ++} ++ ++/* Uncompress the old compressed debug format, the one emitted by ++ --compress-debug-sections=zlib-gnu. The compressed data is in ++ COMPRESSED / COMPRESSED_SIZE, and the function writes to ++ *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ZDEBUG_TABLE is work space to ++ hold Huffman tables. Returns 0 on error, 1 on successful ++ decompression or if something goes wrong. In general we try to ++ carry on, by returning 1, even if we can't decompress. */ ++ ++static int ++elf_uncompress_zdebug (struct backtrace_state *state, ++ const unsigned char *compressed, size_t compressed_size, ++ uint16_t *zdebug_table, ++ backtrace_error_callback error_callback, void *data, ++ unsigned char **uncompressed, size_t *uncompressed_size) ++{ ++ size_t sz; ++ size_t i; ++ unsigned char *po; ++ ++ *uncompressed = NULL; ++ *uncompressed_size = 0; ++ ++ /* The format starts with the four bytes ZLIB, followed by the 8 ++ byte length of the uncompressed data in big-endian order, ++ followed by a zlib stream. */ ++ ++ if (compressed_size < 12 || memcmp (compressed, "ZLIB", 4) != 0) ++ return 1; ++ ++ sz = 0; ++ for (i = 0; i < 8; i++) ++ sz = (sz << 8) | compressed[i + 4]; ++ ++ if (*uncompressed != NULL && *uncompressed_size >= sz) ++ po = *uncompressed; ++ else ++ { ++ po = (unsigned char *) backtrace_alloc (state, sz, error_callback, data); ++ if (po == NULL) ++ return 0; ++ } ++ ++ if (!elf_zlib_inflate_and_verify (compressed + 12, compressed_size - 12, ++ zdebug_table, po, sz)) ++ return 1; ++ ++ *uncompressed = po; ++ *uncompressed_size = sz; ++ ++ return 1; ++} ++ ++/* Uncompress the new compressed debug format, the official standard ++ ELF approach emitted by --compress-debug-sections=zlib-gabi. The ++ compressed data is in COMPRESSED / COMPRESSED_SIZE, and the ++ function writes to *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ++ ZDEBUG_TABLE is work space as for elf_uncompress_zdebug. Returns 0 ++ on error, 1 on successful decompression or if something goes wrong. ++ In general we try to carry on, by returning 1, even if we can't ++ decompress. */ ++ ++static int ++elf_uncompress_chdr (struct backtrace_state *state, ++ const unsigned char *compressed, size_t compressed_size, ++ uint16_t *zdebug_table, ++ backtrace_error_callback error_callback, void *data, ++ unsigned char **uncompressed, size_t *uncompressed_size) ++{ ++ const b_elf_chdr *chdr; ++ unsigned char *po; ++ ++ *uncompressed = NULL; ++ *uncompressed_size = 0; ++ ++ /* The format starts with an ELF compression header. */ ++ if (compressed_size < sizeof (b_elf_chdr)) ++ return 1; ++ ++ chdr = (const b_elf_chdr *) compressed; ++ ++ if (chdr->ch_type != ELFCOMPRESS_ZLIB) ++ { ++ /* Unsupported compression algorithm. */ ++ return 1; ++ } ++ ++ if (*uncompressed != NULL && *uncompressed_size >= chdr->ch_size) ++ po = *uncompressed; ++ else ++ { ++ po = (unsigned char *) backtrace_alloc (state, chdr->ch_size, ++ error_callback, data); ++ if (po == NULL) ++ return 0; ++ } ++ ++ if (!elf_zlib_inflate_and_verify (compressed + sizeof (b_elf_chdr), ++ compressed_size - sizeof (b_elf_chdr), ++ zdebug_table, po, chdr->ch_size)) ++ return 1; ++ ++ *uncompressed = po; ++ *uncompressed_size = chdr->ch_size; ++ ++ return 1; ++} ++ ++/* This function is a hook for testing the zlib support. It is only ++ used by tests. */ ++ ++int ++backtrace_uncompress_zdebug (struct backtrace_state *state, ++ const unsigned char *compressed, ++ size_t compressed_size, ++ backtrace_error_callback error_callback, ++ void *data, unsigned char **uncompressed, ++ size_t *uncompressed_size) ++{ ++ uint16_t *zdebug_table; ++ int ret; ++ ++ zdebug_table = ((uint16_t *) backtrace_alloc (state, ZDEBUG_TABLE_SIZE, ++ error_callback, data)); ++ if (zdebug_table == NULL) ++ return 0; ++ ret = elf_uncompress_zdebug (state, compressed, compressed_size, ++ zdebug_table, error_callback, data, ++ uncompressed, uncompressed_size); ++ backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE, ++ error_callback, data); ++ return ret; ++} ++ + /* Add the backtrace data for one ELF file. Returns 1 on success, + 0 on failure (in both cases descriptor is closed) or -1 if exe + is non-zero and the ELF file is ET_DYN, which tells the caller that +@@ -982,6 +2519,8 @@ elf_add (struct backtrace_state *state, + off_t max_offset; + struct backtrace_view debug_view; + int debug_view_valid; ++ unsigned int using_debug_view; ++ uint16_t *zdebug_table; + + *found_sym = 0; + *found_dwarf = 0; +@@ -1145,6 +2684,7 @@ elf_add (struct backtrace_state *state, + { + sections[j].offset = shdr->sh_offset; + sections[j].size = shdr->sh_size; ++ sections[j].compressed = (shdr->sh_flags & SHF_COMPRESSED) != 0; + break; + } + } +@@ -1256,8 +2796,6 @@ elf_add (struct backtrace_state *state, + elf_add_syminfo_data (state, sdata); + } + +- /* FIXME: Need to handle compressed debug sections. */ +- + backtrace_release_view (state, &shdrs_view, error_callback, data); + shdrs_view_valid = 0; + backtrace_release_view (state, &names_view, error_callback, data); +@@ -1345,13 +2883,94 @@ elf_add (struct backtrace_state *state, + goto fail; + descriptor = -1; + ++ using_debug_view = 0; + for (i = 0; i < (int) DEBUG_MAX; ++i) + { + if (sections[i].size == 0) + sections[i].data = NULL; + else +- sections[i].data = ((const unsigned char *) debug_view.data +- + (sections[i].offset - min_offset)); ++ { ++ sections[i].data = ((const unsigned char *) debug_view.data ++ + (sections[i].offset - min_offset)); ++ if (i < ZDEBUG_INFO) ++ ++using_debug_view; ++ } ++ } ++ ++ /* Uncompress the old format (--compress-debug-sections=zlib-gnu). */ ++ ++ zdebug_table = NULL; ++ for (i = 0; i < ZDEBUG_INFO; ++i) ++ { ++ struct debug_section_info *pz; ++ ++ pz = §ions[i + ZDEBUG_INFO - DEBUG_INFO]; ++ if (sections[i].size == 0 && pz->size > 0) ++ { ++ unsigned char *uncompressed_data; ++ size_t uncompressed_size; ++ ++ if (zdebug_table == NULL) ++ { ++ zdebug_table = ((uint16_t *) ++ backtrace_alloc (state, ZDEBUG_TABLE_SIZE, ++ error_callback, data)); ++ if (zdebug_table == NULL) ++ goto fail; ++ } ++ ++ uncompressed_data = NULL; ++ uncompressed_size = 0; ++ if (!elf_uncompress_zdebug (state, pz->data, pz->size, zdebug_table, ++ error_callback, data, ++ &uncompressed_data, &uncompressed_size)) ++ goto fail; ++ sections[i].data = uncompressed_data; ++ sections[i].size = uncompressed_size; ++ sections[i].compressed = 0; ++ } ++ } ++ ++ /* Uncompress the official ELF format ++ (--compress-debug-sections=zlib-gabi). */ ++ for (i = 0; i < ZDEBUG_INFO; ++i) ++ { ++ unsigned char *uncompressed_data; ++ size_t uncompressed_size; ++ ++ if (sections[i].size == 0 || !sections[i].compressed) ++ continue; ++ ++ if (zdebug_table == NULL) ++ { ++ zdebug_table = ((uint16_t *) ++ backtrace_alloc (state, ZDEBUG_TABLE_SIZE, ++ error_callback, data)); ++ if (zdebug_table == NULL) ++ goto fail; ++ } ++ ++ uncompressed_data = NULL; ++ uncompressed_size = 0; ++ if (!elf_uncompress_chdr (state, sections[i].data, sections[i].size, ++ zdebug_table, error_callback, data, ++ &uncompressed_data, &uncompressed_size)) ++ goto fail; ++ sections[i].data = uncompressed_data; ++ sections[i].size = uncompressed_size; ++ sections[i].compressed = 0; ++ ++ --using_debug_view; ++ } ++ ++ if (zdebug_table != NULL) ++ backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE, ++ error_callback, data); ++ ++ if (debug_view_valid && using_debug_view == 0) ++ { ++ backtrace_release_view (state, &debug_view, error_callback, data); ++ debug_view_valid = 0; + } + + if (!backtrace_dwarf_add (state, base_address, +Index: b/src/libbacktrace/configure.ac +=================================================================== +--- a/src/libbacktrace/configure.ac ++++ b/src/libbacktrace/configure.ac +@@ -355,6 +355,23 @@ if test "$have_getexecname" = "yes"; the + AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) + fi + ++AC_CHECK_LIB([z], [compress], []) ++if test $ac_cv_lib_z_compress = "yes"; then ++ AC_DEFINE(HAVE_ZLIB, 1, [Define if -lz is available.]) ++fi ++AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_lib_z_compress" = yes) ++ ++dnl Test whether the linker supports the --compress_debug_sections option. ++AC_CACHE_CHECK([whether --compress-debug-sections is supported], ++[libgo_cv_ld_compress], ++[LDFLAGS_hold=$LDFLAGS ++LDFLAGS="$LDFLAGS -Wl,--compress-debug-sections=zlib-gnu" ++AC_LINK_IFELSE([AC_LANG_PROGRAM(,)], ++[libgo_cv_ld_compress=yes], ++[libgo_cv_ld_compress=no]) ++LDFLAGS=$LDFLAGS_hold]) ++AM_CONDITIONAL(HAVE_COMPRESSED_DEBUG, test "$libgo_cv_ld_compress" = yes) ++ + AC_ARG_VAR(OBJCOPY, [location of objcopy]) + AC_CHECK_PROG(OBJCOPY, objcopy, objcopy,) + AC_CACHE_CHECK([whether objcopy supports debuglink], +Index: b/src/libbacktrace/ztest.c +=================================================================== +--- /dev/null ++++ b/src/libbacktrace/ztest.c +@@ -0,0 +1,446 @@ ++/* ztest.c -- Test for libbacktrace inflate code. ++ Copyright (C) 2017 Free Software Foundation, Inc. ++ Written by Ian Lance Taylor, Google. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++ ++ (1) Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ (2) Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in ++ the documentation and/or other materials provided with the ++ distribution. ++ ++ (3) The name of the author may not be used to ++ endorse or promote products derived from this software without ++ specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, ++INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ++STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING ++IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ++POSSIBILITY OF SUCH DAMAGE. */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef HAVE_ZLIB ++#include ++#endif ++ ++#include "backtrace.h" ++#include "backtrace-supported.h" ++ ++#include "internal.h" ++#include "testlib.h" ++ ++/* Some tests for the local zlib inflation code. */ ++ ++struct zlib_test ++{ ++ const char *name; ++ const char *uncompressed; ++ const char *compressed; ++ size_t compressed_len; ++}; ++ ++/* Error callback. */ ++ ++static void ++error_callback_compress (void *vdata, const char *msg, int errnum) ++{ ++ fprintf (stderr, "%s", msg); ++ if (errnum > 0) ++ fprintf (stderr, ": %s", strerror (errnum)); ++ fprintf (stderr, "\n"); ++ exit (EXIT_FAILURE); ++} ++ ++static const struct zlib_test tests[] = ++{ ++ { ++ "empty", ++ "", ++ "\x78\x9c\x03\x00\x00\x00\x00\x01", ++ 8, ++ }, ++ { ++ "hello", ++ "hello, world\n", ++ ("\x78\x9c\xca\x48\xcd\xc9\xc9\xd7\x51\x28\xcf" ++ "\x2f\xca\x49\xe1\x02\x04\x00\x00\xff\xff\x21\xe7\x04\x93"), ++ 25, ++ }, ++ { ++ "goodbye", ++ "goodbye, world", ++ ("\x78\x9c\x4b\xcf\xcf\x4f\x49\xaa" ++ "\x4c\xd5\x51\x28\xcf\x2f\xca\x49" ++ "\x01\x00\x28\xa5\x05\x5e"), ++ 22, ++ } ++}; ++ ++/* Test the hand coded samples. */ ++ ++static void ++test_samples (struct backtrace_state *state) ++{ ++ size_t i; ++ ++ for (i = 0; i < sizeof tests / sizeof tests[0]; ++i) ++ { ++ char *p; ++ size_t v; ++ size_t j; ++ unsigned char *uncompressed; ++ size_t uncompressed_len; ++ ++ p = malloc (12 + tests[i].compressed_len); ++ memcpy (p, "ZLIB", 4); ++ v = strlen (tests[i].uncompressed); ++ for (j = 0; j < 8; ++j) ++ p[j + 4] = (v >> ((7 - j) * 8)) & 0xff; ++ memcpy (p + 12, tests[i].compressed, tests[i].compressed_len); ++ uncompressed = NULL; ++ uncompressed_len = 0; ++ if (!backtrace_uncompress_zdebug (state, (unsigned char *) p, ++ tests[i].compressed_len + 12, ++ error_callback_compress, NULL, ++ &uncompressed, &uncompressed_len)) ++ { ++ fprintf (stderr, "test %s: uncompress failed\n", tests[i].name); ++ ++failures; ++ } ++ else ++ { ++ if (uncompressed_len != v) ++ { ++ fprintf (stderr, ++ "test %s: got uncompressed length %zu, want %zu\n", ++ tests[i].name, uncompressed_len, v); ++ ++failures; ++ } ++ else if (memcmp (tests[i].uncompressed, uncompressed, v) != 0) ++ { ++ size_t j; ++ ++ fprintf (stderr, "test %s: uncompressed data mismatch\n", ++ tests[i].name); ++ for (j = 0; j < v; ++j) ++ if (tests[i].uncompressed[j] != uncompressed[j]) ++ fprintf (stderr, " %zu: got %#x want %#x\n", j, ++ uncompressed[j], tests[i].uncompressed[j]); ++ ++failures; ++ } ++ else ++ printf ("PASS: inflate %s\n", tests[i].name); ++ ++ backtrace_free (state, uncompressed, uncompressed_len, ++ error_callback_compress, NULL); ++ } ++ } ++} ++ ++#ifdef HAVE_ZLIB ++ ++/* Given a set of TRIALS timings, discard the lowest and highest ++ values and return the mean average of the rest. */ ++ ++static size_t ++average_time (const size_t *times, size_t trials) ++{ ++ size_t imax; ++ size_t max; ++ size_t imin; ++ size_t min; ++ size_t i; ++ size_t sum; ++ ++ imin = 0; ++ imax = 0; ++ min = times[0]; ++ max = times[0]; ++ for (i = 1; i < trials; ++i) ++ { ++ if (times[i] < min) ++ { ++ imin = i; ++ min = times[i]; ++ } ++ if (times[i] > max) ++ { ++ imax = i; ++ max = times[i]; ++ } ++ } ++ ++ sum = 0; ++ for (i = 0; i < trials; ++i) ++ { ++ if (i != imax && i != imin) ++ sum += times[i]; ++ } ++ return sum / (trials - 2); ++} ++ ++#endif ++ ++/* Test a larger text, if available. */ ++ ++static void ++test_large (struct backtrace_state *state) ++{ ++#ifdef HAVE_ZLIB ++ unsigned char *orig_buf; ++ size_t orig_bufsize; ++ size_t i; ++ char *compressed_buf; ++ size_t compressed_bufsize; ++ unsigned long compress_sizearg; ++ unsigned char *uncompressed_buf; ++ size_t uncompressed_bufsize; ++ int r; ++ clockid_t cid; ++ struct timespec ts1; ++ struct timespec ts2; ++ size_t ctime; ++ size_t ztime; ++ const size_t trials = 16; ++ size_t ctimes[16]; ++ size_t ztimes[16]; ++ static const char * const names[] = { ++ "Mark.Twain-Tom.Sawyer.txt", ++ "../libgo/go/compress/testdata/Mark.Twain-Tom.Sawyer.txt" ++ }; ++ ++ orig_buf = NULL; ++ orig_bufsize = 0; ++ uncompressed_buf = NULL; ++ compressed_buf = NULL; ++ ++ for (i = 0; i < sizeof names / sizeof names[0]; ++i) ++ { ++ size_t len; ++ char *namebuf; ++ FILE *e; ++ struct stat st; ++ char *rbuf; ++ size_t got; ++ ++ len = strlen (SRCDIR) + strlen (names[i]) + 2; ++ namebuf = malloc (len); ++ if (namebuf == NULL) ++ { ++ perror ("malloc"); ++ goto fail; ++ } ++ snprintf (namebuf, len, "%s/%s", SRCDIR, names[i]); ++ e = fopen (namebuf, "r"); ++ free (namebuf); ++ if (e == NULL) ++ continue; ++ if (fstat (fileno (e), &st) < 0) ++ { ++ perror ("fstat"); ++ fclose (e); ++ continue; ++ } ++ rbuf = malloc (st.st_size); ++ if (rbuf == NULL) ++ { ++ perror ("malloc"); ++ goto fail; ++ } ++ got = fread (rbuf, 1, st.st_size, e); ++ fclose (e); ++ if (got > 0) ++ { ++ orig_buf = rbuf; ++ orig_bufsize = got; ++ break; ++ } ++ free (rbuf); ++ } ++ ++ if (orig_buf == NULL) ++ { ++ /* We couldn't find an input file. */ ++ printf ("UNSUPPORTED: inflate large\n"); ++ return; ++ } ++ ++ compressed_bufsize = compressBound (orig_bufsize) + 12; ++ compressed_buf = malloc (compressed_bufsize); ++ if (compressed_buf == NULL) ++ { ++ perror ("malloc"); ++ goto fail; ++ } ++ ++ compress_sizearg = compressed_bufsize - 12; ++ r = compress (compressed_buf + 12, &compress_sizearg, ++ orig_buf, orig_bufsize); ++ if (r != Z_OK) ++ { ++ fprintf (stderr, "zlib compress failed: %d\n", r); ++ goto fail; ++ } ++ ++ compressed_bufsize = compress_sizearg + 12; ++ ++ /* Prepare the header that our library expects. */ ++ memcpy (compressed_buf, "ZLIB", 4); ++ for (i = 0; i < 8; ++i) ++ compressed_buf[i + 4] = (orig_bufsize >> ((7 - i) * 8)) & 0xff; ++ ++ uncompressed_buf = malloc (orig_bufsize); ++ if (uncompressed_buf == NULL) ++ { ++ perror ("malloc"); ++ goto fail; ++ } ++ uncompressed_bufsize = orig_bufsize; ++ ++ if (!backtrace_uncompress_zdebug (state, compressed_buf, compressed_bufsize, ++ error_callback_compress, NULL, ++ &uncompressed_buf, &uncompressed_bufsize)) ++ { ++ fprintf (stderr, "inflate large: backtrace_uncompress_zdebug failed\n"); ++ goto fail; ++ } ++ ++ if (uncompressed_bufsize != orig_bufsize) ++ { ++ fprintf (stderr, ++ "inflate large: got uncompressed length %zu, want %zu\n", ++ uncompressed_bufsize, orig_bufsize); ++ goto fail; ++ } ++ ++ if (memcmp (uncompressed_buf, orig_buf, uncompressed_bufsize) != 0) ++ { ++ fprintf (stderr, "inflate large: uncompressed data mismatch\n"); ++ goto fail; ++ } ++ ++ printf ("PASS: inflate large\n"); ++ ++ for (i = 0; i < trials; ++i) ++ { ++ cid = CLOCK_REALTIME; ++#ifdef CLOCK_PROCESS_CPUTIME_ID ++ cid = CLOCK_PROCESS_CPUTIME_ID; ++#endif ++ if (clock_gettime (cid, &ts1) < 0) ++ { ++ perror ("clock_gettime"); ++ return; ++ } ++ ++ if (!backtrace_uncompress_zdebug (state, compressed_buf, ++ compressed_bufsize, ++ error_callback_compress, NULL, ++ &uncompressed_buf, ++ &uncompressed_bufsize)) ++ { ++ fprintf (stderr, ++ ("inflate large: " ++ "benchmark backtrace_uncompress_zdebug failed\n")); ++ return; ++ } ++ ++ if (clock_gettime (cid, &ts2) < 0) ++ { ++ perror ("clock_gettime"); ++ return; ++ } ++ ++ ctime = (ts2.tv_sec - ts1.tv_sec) * 1000000000; ++ ctime += ts2.tv_nsec - ts1.tv_nsec; ++ ctimes[i] = ctime; ++ ++ if (clock_gettime (cid, &ts1) < 0) ++ { ++ perror("clock_gettime"); ++ return; ++ } ++ ++ r = uncompress (uncompressed_buf, &uncompressed_bufsize, ++ compressed_buf + 12, compressed_bufsize - 12); ++ ++ if (clock_gettime (cid, &ts2) < 0) ++ { ++ perror ("clock_gettime"); ++ return; ++ } ++ ++ if (r != Z_OK) ++ { ++ fprintf (stderr, ++ "inflate large: benchmark zlib uncompress failed: %d\n", ++ r); ++ return; ++ } ++ ++ ztime = (ts2.tv_sec - ts1.tv_sec) * 1000000000; ++ ztime += ts2.tv_nsec - ts1.tv_nsec; ++ ztimes[i] = ztime; ++ } ++ ++ /* Toss the highest and lowest times and average the rest. */ ++ ctime = average_time (ctimes, trials); ++ ztime = average_time (ztimes, trials); ++ ++ printf ("backtrace time: %zu ns\n", ctime); ++ printf ("zlib time: : %zu ns\n", ztime); ++ printf ("percentage : %g\n", (double) ztime / (double) ctime); ++ ++ return; ++ ++ fail: ++ printf ("FAIL: inflate large\n"); ++ ++failures; ++ ++ if (orig_buf != NULL) ++ free (orig_buf); ++ if (compressed_buf != NULL) ++ free (compressed_buf); ++ if (uncompressed_buf != NULL) ++ free (uncompressed_buf); ++ ++#else /* !HAVE_ZLIB */ ++ ++ printf ("UNSUPPORTED: inflate large\n"); ++ ++#endif /* !HAVE_ZLIB */ ++} ++ ++int ++main (int argc ATTRIBUTE_UNUSED, char **argv) ++{ ++ struct backtrace_state *state; ++ ++ state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS, ++ error_callback_create, NULL); ++ ++ test_samples (state); ++ test_large (state); ++ ++ exit (failures != 0 ? EXIT_FAILURE : EXIT_SUCCESS); ++} +Index: b/src/libbacktrace/config.h.in +=================================================================== +--- a/src/libbacktrace/config.h.in ++++ b/src/libbacktrace/config.h.in +@@ -28,6 +28,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_INTTYPES_H + ++/* Define to 1 if you have the `z' library (-lz). */ ++#undef HAVE_LIBZ ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_LINK_H + +@@ -61,6 +64,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_UNISTD_H + ++/* Define if -lz is available. */ ++#undef HAVE_ZLIB ++ + /* Define to the sub-directory in which libtool stores uninstalled libraries. + */ + #undef LT_OBJDIR +Index: b/src/libbacktrace/internal.h +=================================================================== +--- a/src/libbacktrace/internal.h ++++ b/src/libbacktrace/internal.h +@@ -292,4 +292,13 @@ extern int backtrace_dwarf_add (struct b + backtrace_error_callback error_callback, + void *data, fileline *fileline_fn); + ++/* A test-only hook for elf_uncompress_zdebug. */ ++ ++extern int backtrace_uncompress_zdebug (struct backtrace_state *, ++ const unsigned char *compressed, ++ size_t compressed_size, ++ backtrace_error_callback, void *data, ++ unsigned char **uncompressed, ++ size_t *uncompressed_size); ++ + #endif +Index: b/src/libbacktrace/Makefile.am +=================================================================== +--- a/src/libbacktrace/Makefile.am ++++ b/src/libbacktrace/Makefile.am +@@ -100,6 +100,16 @@ stest_LDADD = libbacktrace.la + + check_PROGRAMS += stest + ++ztest_SOURCES = ztest.c testlib.c ++ztest_CFLAGS = -DSRCDIR=\"$(srcdir)\" ++ztest_LDADD = libbacktrace.la ++ ++if HAVE_ZLIB ++ztest_LDADD += -lz ++endif ++ ++check_PROGRAMS += ztest ++ + if HAVE_OBJCOPY_DEBUGLINK + + TESTS += dtest +@@ -110,6 +120,22 @@ dtest: btest + + endif HAVE_OBJCOPY_DEBUGLINK + ++if HAVE_COMPRESSED_DEBUG ++ ++ctestg_SOURCES = btest.c testlib.c ++ctestg_CFLAGS = $(AM_CFLAGS) -g ++ctestg_LDFLAGS = -Wl,--compress-debug-sections=zlib-gnu ++ctestg_LDADD = libbacktrace.la ++ ++ctesta_SOURCES = btest.c testlib.c ++ctesta_CFLAGS = $(AM_CFLAGS) -g ++ctesta_LDFLAGS = -Wl,--compress-debug-sections=zlib-gabi ++ctesta_LDADD = libbacktrace.la ++ ++check_PROGRAMS += ctestg ctesta ++ ++endif ++ + endif NATIVE + + # We can't use automake's automatic dependency tracking, because it --- gcc-7-7.2.0.orig/debian/patches/pr67590.diff +++ gcc-7-7.2.0/debian/patches/pr67590.diff @@ -0,0 +1,38 @@ +# DP: Fix PR67590, setting objdump macro. + +Index: b/src/libcc1/configure.ac +=================================================================== +--- a/src/libcc1/configure.ac ++++ b/src/libcc1/configure.ac +@@ -72,6 +72,31 @@ if test "$GXX" = yes; then + fi + AC_SUBST(libsuffix) + ++# Figure out what objdump we will be using. ++AS_VAR_SET_IF(gcc_cv_objdump,, [ ++if test -f $gcc_cv_binutils_srcdir/configure.ac \ ++ && test -f ../binutils/Makefile \ ++ && test x$build = x$host; then ++ # Single tree build which includes binutils. ++ gcc_cv_objdump=../binutils/objdump$build_exeext ++elif test -x objdump$build_exeext; then ++ gcc_cv_objdump=./objdump$build_exeext ++elif ( set dummy $OBJDUMP_FOR_TARGET; test -x $[2] ); then ++ gcc_cv_objdump="$OBJDUMP_FOR_TARGET" ++else ++ AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET) ++fi]) ++ ++AC_MSG_CHECKING(what objdump to use) ++if test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then ++ # Single tree build which includes binutils. ++ AC_MSG_RESULT(newly built objdump) ++elif test x$gcc_cv_objdump = x; then ++ AC_MSG_RESULT(not found) ++else ++ AC_MSG_RESULT($gcc_cv_objdump) ++fi ++ + dnl Test for -lsocket and -lnsl. Copied from libgo/configure.ac. + AC_CACHE_CHECK([for socket libraries], libcc1_cv_lib_sockets, + [libcc1_cv_lib_sockets= --- gcc-7-7.2.0.orig/debian/patches/pr67899.diff +++ gcc-7-7.2.0/debian/patches/pr67899.diff @@ -0,0 +1,31 @@ +# DP: Proposed patch for PR sanitizer/67899 + +Index: b/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h +=================================================================== +--- a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h ++++ b/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h +@@ -606,11 +606,10 @@ namespace __sanitizer { + #else + __sanitizer_sigset_t sa_mask; + #ifndef __mips__ +-#if defined(__sparc__) +- unsigned long sa_flags; +-#else +- int sa_flags; ++#if defined(__sparc__) && defined(__arch64__) ++ int __pad; + #endif ++ int sa_flags; + #endif + #endif + #if SANITIZER_LINUX +@@ -640,7 +639,8 @@ namespace __sanitizer { + void (*handler)(int signo); + void (*sigaction)(int signo, void *info, void *ctx); + }; +- unsigned long sa_flags; ++ int __pad; ++ int sa_flags; + void (*sa_restorer)(void); + __sanitizer_kernel_sigset_t sa_mask; + }; --- gcc-7-7.2.0.orig/debian/patches/pr77631.diff +++ gcc-7-7.2.0/debian/patches/pr77631.diff @@ -0,0 +1,884 @@ +# DP: Fix PR sanitizer/77631, support separate debug info in libbacktrace. + +Index: b/src/libbacktrace/Makefile.am +=================================================================== +--- a/src/libbacktrace/Makefile.am ++++ b/src/libbacktrace/Makefile.am +@@ -100,6 +100,16 @@ stest_LDADD = libbacktrace.la + + check_PROGRAMS += stest + ++if HAVE_OBJCOPY_DEBUGLINK ++ ++TESTS += dtest ++ ++dtest: btest ++ $(OBJCOPY) --only-keep-debug btest btest.debug ++ $(OBJCOPY) --strip-debug --add-gnu-debuglink=btest.debug btest dtest ++ ++endif HAVE_OBJCOPY_DEBUGLINK ++ + endif NATIVE + + # We can't use automake's automatic dependency tracking, because it +Index: b/src/libbacktrace/Makefile.in +=================================================================== +--- a/src/libbacktrace/Makefile.in ++++ b/src/libbacktrace/Makefile.in +@@ -85,6 +85,7 @@ host_triplet = @host@ + target_triplet = @target@ + check_PROGRAMS = $(am__EXEEXT_1) + @NATIVE_TRUE@am__append_1 = btest stest ++@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_2 = dtest + subdir = . + DIST_COMMON = README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ +@@ -200,6 +201,7 @@ MAKEINFO = @MAKEINFO@ + MKDIR_P = @MKDIR_P@ + NM = @NM@ + NMEDIT = @NMEDIT@ ++OBJCOPY = @OBJCOPY@ + OBJDUMP = @OBJDUMP@ + OBJEXT = @OBJEXT@ + OTOOL = @OTOOL@ +@@ -324,7 +326,7 @@ libbacktrace_la_LIBADD = \ + $(ALLOC_FILE) + + libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) +-TESTS = $(check_PROGRAMS) ++TESTS = $(check_PROGRAMS) $(am__append_2) + @NATIVE_TRUE@btest_SOURCES = btest.c + @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O + @NATIVE_TRUE@btest_LDADD = libbacktrace.la +@@ -745,6 +747,10 @@ uninstall-am: + mostlyclean-multi pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + ++ ++@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@dtest: btest ++@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@ $(OBJCOPY) --only-keep-debug btest btest.debug ++@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@ $(OBJCOPY) --strip-debug --add-gnu-debuglink=btest.debug btest dtest + alloc.lo: config.h backtrace.h internal.h + backtrace.lo: config.h backtrace.h internal.h + btest.lo: (INCDIR)/filenames.h backtrace.h backtrace-supported.h +Index: b/src/libbacktrace/configure.ac +=================================================================== +--- a/src/libbacktrace/configure.ac ++++ b/src/libbacktrace/configure.ac +@@ -355,6 +355,20 @@ if test "$have_getexecname" = "yes"; the + AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) + fi + ++AC_ARG_VAR(OBJCOPY, [location of objcopy]) ++AC_CHECK_PROG(OBJCOPY, objcopy, objcopy,) ++AC_CACHE_CHECK([whether objcopy supports debuglink], ++[libbacktrace_cv_objcopy_debuglink], ++[if test -n "${with_target_subdir}"; then ++ libbacktrace_cv_objcopy_debuglink=no ++elif ${OBJCOPY} --add-gnu-debuglink=x /bin/ls /tmp/ls$$; then ++ rm -f /tmp/ls$$ ++ libbacktrace_cv_objcopy_debuglink=yes ++else ++ libbacktrace_cv_objcopy_debuglink=no ++fi]) ++AM_CONDITIONAL(HAVE_OBJCOPY_DEBUGLINK, test "$libbacktrace_cv_objcopy_debuglink" = yes) ++ + AC_CACHE_CHECK([whether tests can run], + [libbacktrace_cv_sys_native], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 0;])], +Index: b/src/libbacktrace/elf.c +=================================================================== +--- a/src/libbacktrace/elf.c ++++ b/src/libbacktrace/elf.c +@@ -32,9 +32,12 @@ POSSIBILITY OF SUCH DAMAGE. */ + + #include "config.h" + ++#include + #include + #include + #include ++#include ++#include + + #ifdef HAVE_DL_ITERATE_PHDR + #include +@@ -43,6 +46,35 @@ POSSIBILITY OF SUCH DAMAGE. */ + #include "backtrace.h" + #include "internal.h" + ++#ifndef S_ISLNK ++ #ifndef S_IFLNK ++ #define S_IFLNK 0120000 ++ #endif ++ #ifndef S_IFMT ++ #define S_IFMT 0170000 ++ #endif ++ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) ++#endif ++ ++#if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN ++ ++/* If strnlen is not declared, provide our own version. */ ++ ++static size_t ++xstrnlen (const char *s, size_t maxlen) ++{ ++ size_t i; ++ ++ for (i = 0; i < maxlen; ++i) ++ if (s[i] == '\0') ++ break; ++ return i; ++} ++ ++#define strnlen xstrnlen ++ ++#endif ++ + #ifndef HAVE_DL_ITERATE_PHDR + + /* Dummy version of dl_iterate_phdr for systems that don't have it. */ +@@ -105,6 +137,7 @@ dl_iterate_phdr (int (*callback) (struct + #undef SHT_DYNSYM + #undef STT_OBJECT + #undef STT_FUNC ++#undef NT_GNU_BUILD_ID + + /* Basic types. */ + +@@ -224,6 +257,16 @@ typedef struct + #define STT_OBJECT 1 + #define STT_FUNC 2 + ++typedef struct ++{ ++ uint32_t namesz; ++ uint32_t descsz; ++ uint32_t type; ++ char name[1]; ++} b_elf_note; ++ ++#define NT_GNU_BUILD_ID 3 ++ + /* An index of ELF sections we care about. */ + + enum debug_section +@@ -283,6 +326,102 @@ struct elf_syminfo_data + size_t count; + }; + ++/* Compute the CRC-32 of BUF/LEN. This uses the CRC used for ++ .gnu_debuglink files. */ ++ ++static uint32_t ++elf_crc32 (uint32_t crc, const unsigned char *buf, size_t len) ++{ ++ static const uint32_t crc32_table[256] = ++ { ++ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, ++ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, ++ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, ++ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, ++ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, ++ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, ++ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, ++ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, ++ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, ++ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, ++ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, ++ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, ++ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, ++ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, ++ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, ++ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, ++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, ++ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, ++ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, ++ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, ++ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, ++ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, ++ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, ++ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, ++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, ++ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, ++ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, ++ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, ++ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, ++ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, ++ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, ++ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, ++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, ++ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, ++ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, ++ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, ++ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, ++ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, ++ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, ++ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, ++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, ++ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, ++ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, ++ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, ++ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, ++ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, ++ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, ++ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, ++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, ++ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, ++ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, ++ 0x2d02ef8d ++ }; ++ const unsigned char *end; ++ ++ crc = ~crc; ++ for (end = buf + len; buf < end; ++ buf) ++ crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); ++ return ~crc; ++} ++ ++/* Return the CRC-32 of the entire file open at DESCRIPTOR. */ ++ ++static uint32_t ++elf_crc32_file (struct backtrace_state *state, int descriptor, ++ backtrace_error_callback error_callback, void *data) ++{ ++ struct stat st; ++ struct backtrace_view file_view; ++ uint32_t ret; ++ ++ if (fstat (descriptor, &st) < 0) ++ { ++ error_callback (data, "fstat", errno); ++ return 0; ++ } ++ ++ if (!backtrace_get_view (state, descriptor, 0, st.st_size, error_callback, ++ data, &file_view)) ++ return 0; ++ ++ ret = elf_crc32 (0, (const unsigned char *) file_view.data, st.st_size); ++ ++ backtrace_release_view (state, &file_view, error_callback, data); ++ ++ return ret; ++} ++ + /* A dummy callback function used when we can't find any debug info. */ + + static int +@@ -510,6 +649,293 @@ elf_syminfo (struct backtrace_state *sta + callback (data, addr, sym->name, sym->address, sym->size); + } + ++/* Return whether FILENAME is a symlink. */ ++ ++static int ++elf_is_symlink (const char *filename) ++{ ++ struct stat st; ++ ++ if (lstat (filename, &st) < 0) ++ return 0; ++ return S_ISLNK (st.st_mode); ++} ++ ++/* Return the results of reading the symlink FILENAME in a buffer ++ allocated by backtrace_alloc. Return the length of the buffer in ++ *LEN. */ ++ ++static char * ++elf_readlink (struct backtrace_state *state, const char *filename, ++ backtrace_error_callback error_callback, void *data, ++ size_t *plen) ++{ ++ size_t len; ++ char *buf; ++ ++ len = 128; ++ while (1) ++ { ++ ssize_t rl; ++ ++ buf = backtrace_alloc (state, len, error_callback, data); ++ if (buf == NULL) ++ return NULL; ++ rl = readlink (filename, buf, len); ++ if (rl < 0) ++ { ++ backtrace_free (state, buf, len, error_callback, data); ++ return NULL; ++ } ++ if ((size_t) rl < len - 1) ++ { ++ buf[rl] = '\0'; ++ *plen = len; ++ return buf; ++ } ++ backtrace_free (state, buf, len, error_callback, data); ++ len *= 2; ++ } ++} ++ ++/* Open a separate debug info file, using the build ID to find it. ++ Returns an open file descriptor, or -1. ++ ++ The GDB manual says that the only place gdb looks for a debug file ++ when the build ID is known is in /usr/lib/debug/.build-id. */ ++ ++static int ++elf_open_debugfile_by_buildid (struct backtrace_state *state, ++ const char *buildid_data, size_t buildid_size, ++ backtrace_error_callback error_callback, ++ void *data) ++{ ++ const char * const prefix = "/usr/lib/debug/.build-id/"; ++ const size_t prefix_len = strlen (prefix); ++ const char * const suffix = ".debug"; ++ const size_t suffix_len = strlen (suffix); ++ size_t len; ++ char *bd_filename; ++ char *t; ++ size_t i; ++ int ret; ++ int does_not_exist; ++ ++ len = prefix_len + buildid_size * 2 + suffix_len + 2; ++ bd_filename = backtrace_alloc (state, len, error_callback, data); ++ if (bd_filename == NULL) ++ return -1; ++ ++ t = bd_filename; ++ memcpy (t, prefix, prefix_len); ++ t += prefix_len; ++ for (i = 0; i < buildid_size; i++) ++ { ++ unsigned char b; ++ unsigned char nib; ++ ++ b = (unsigned char) buildid_data[i]; ++ nib = (b & 0xf0) >> 4; ++ *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10; ++ nib = b & 0x0f; ++ *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10; ++ if (i == 0) ++ *t++ = '/'; ++ } ++ memcpy (t, suffix, suffix_len); ++ t[suffix_len] = '\0'; ++ ++ ret = backtrace_open (bd_filename, error_callback, data, &does_not_exist); ++ ++ backtrace_free (state, bd_filename, len, error_callback, data); ++ ++ /* gdb checks that the debuginfo file has the same build ID note. ++ That seems kind of pointless to me--why would it have the right ++ name but not the right build ID?--so skipping the check. */ ++ ++ return ret; ++} ++ ++/* Try to open a file whose name is PREFIX (length PREFIX_LEN) ++ concatenated with PREFIX2 (length PREFIX2_LEN) concatenated with ++ DEBUGLINK_NAME. Returns an open file descriptor, or -1. */ ++ ++static int ++elf_try_debugfile (struct backtrace_state *state, const char *prefix, ++ size_t prefix_len, const char *prefix2, size_t prefix2_len, ++ const char *debuglink_name, ++ backtrace_error_callback error_callback, void *data) ++{ ++ size_t debuglink_len; ++ size_t try_len; ++ char *try; ++ int does_not_exist; ++ int ret; ++ ++ debuglink_len = strlen (debuglink_name); ++ try_len = prefix_len + prefix2_len + debuglink_len + 1; ++ try = backtrace_alloc (state, try_len, error_callback, data); ++ if (try == NULL) ++ return -1; ++ ++ memcpy (try, prefix, prefix_len); ++ memcpy (try + prefix_len, prefix2, prefix2_len); ++ memcpy (try + prefix_len + prefix2_len, debuglink_name, debuglink_len); ++ try[prefix_len + prefix2_len + debuglink_len] = '\0'; ++ ++ ret = backtrace_open (try, error_callback, data, &does_not_exist); ++ ++ backtrace_free (state, try, try_len, error_callback, data); ++ ++ return ret; ++} ++ ++/* Find a separate debug info file, using the debuglink section data ++ to find it. Returns an open file descriptor, or -1. */ ++ ++static int ++elf_find_debugfile_by_debuglink (struct backtrace_state *state, ++ const char *filename, ++ const char *debuglink_name, ++ backtrace_error_callback error_callback, ++ void *data) ++{ ++ int ret; ++ char *alc; ++ size_t alc_len; ++ const char *slash; ++ int ddescriptor; ++ const char *prefix; ++ size_t prefix_len; ++ ++ /* Resolve symlinks in FILENAME. Since FILENAME is fairly likely to ++ be /proc/self/exe, symlinks are common. We don't try to resolve ++ the whole path name, just the base name. */ ++ ret = -1; ++ alc = NULL; ++ alc_len = 0; ++ while (elf_is_symlink (filename)) ++ { ++ char *new_buf; ++ size_t new_len; ++ ++ new_buf = elf_readlink (state, filename, error_callback, data, &new_len); ++ if (new_buf == NULL) ++ break; ++ ++ if (new_buf[0] == '/') ++ filename = new_buf; ++ else ++ { ++ slash = strrchr (filename, '/'); ++ if (slash == NULL) ++ filename = new_buf; ++ else ++ { ++ size_t clen; ++ char *c; ++ ++ slash++; ++ clen = slash - filename + strlen (new_buf) + 1; ++ c = backtrace_alloc (state, clen, error_callback, data); ++ if (c == NULL) ++ goto done; ++ ++ memcpy (c, filename, slash - filename); ++ memcpy (c + (slash - filename), new_buf, strlen (new_buf)); ++ c[slash - filename + strlen (new_buf)] = '\0'; ++ backtrace_free (state, new_buf, new_len, error_callback, data); ++ filename = c; ++ new_buf = c; ++ new_len = clen; ++ } ++ } ++ ++ if (alc != NULL) ++ backtrace_free (state, alc, alc_len, error_callback, data); ++ alc = new_buf; ++ alc_len = new_len; ++ } ++ ++ /* Look for DEBUGLINK_NAME in the same directory as FILENAME. */ ++ ++ slash = strrchr (filename, '/'); ++ if (slash == NULL) ++ { ++ prefix = ""; ++ prefix_len = 0; ++ } ++ else ++ { ++ slash++; ++ prefix = filename; ++ prefix_len = slash - filename; ++ } ++ ++ ddescriptor = elf_try_debugfile (state, prefix, prefix_len, "", 0, ++ debuglink_name, error_callback, data); ++ if (ddescriptor >= 0) ++ { ++ ret = ddescriptor; ++ goto done; ++ } ++ ++ /* Look for DEBUGLINK_NAME in a .debug subdirectory of FILENAME. */ ++ ++ ddescriptor = elf_try_debugfile (state, prefix, prefix_len, ".debug/", ++ strlen (".debug/"), debuglink_name, ++ error_callback, data); ++ if (ddescriptor >= 0) ++ { ++ ret = ddescriptor; ++ goto done; ++ } ++ ++ /* Look for DEBUGLINK_NAME in /usr/lib/debug. */ ++ ++ ddescriptor = elf_try_debugfile (state, "/usr/lib/debug/", ++ strlen ("/usr/lib/debug/"), prefix, ++ prefix_len, debuglink_name, ++ error_callback, data); ++ if (ddescriptor >= 0) ++ ret = ddescriptor; ++ ++ done: ++ if (alc != NULL && alc_len > 0) ++ backtrace_free (state, alc, alc_len, error_callback, data); ++ return ret; ++} ++ ++/* Open a separate debug info file, using the debuglink section data ++ to find it. Returns an open file descriptor, or -1. */ ++ ++static int ++elf_open_debugfile_by_debuglink (struct backtrace_state *state, ++ const char *filename, ++ const char *debuglink_name, ++ uint32_t debuglink_crc, ++ backtrace_error_callback error_callback, ++ void *data) ++{ ++ int ddescriptor; ++ uint32_t got_crc; ++ ++ ddescriptor = elf_find_debugfile_by_debuglink (state, filename, ++ debuglink_name, ++ error_callback, data); ++ if (ddescriptor < 0) ++ return -1; ++ ++ got_crc = elf_crc32_file (state, ddescriptor, error_callback, data); ++ if (got_crc != debuglink_crc) ++ { ++ backtrace_close (ddescriptor, error_callback, data); ++ return -1; ++ } ++ ++ return ddescriptor; ++} ++ + /* Add the backtrace data for one ELF file. Returns 1 on success, + 0 on failure (in both cases descriptor is closed) or -1 if exe + is non-zero and the ELF file is ET_DYN, which tells the caller that +@@ -517,9 +943,10 @@ elf_syminfo (struct backtrace_state *sta + base_address is determined. */ + + static int +-elf_add (struct backtrace_state *state, int descriptor, uintptr_t base_address, +- backtrace_error_callback error_callback, void *data, +- fileline *fileline_fn, int *found_sym, int *found_dwarf, int exe) ++elf_add (struct backtrace_state *state, const char *filename, int descriptor, ++ uintptr_t base_address, backtrace_error_callback error_callback, ++ void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf, ++ int exe, int debuginfo) + { + struct backtrace_view ehdr_view; + b_elf_ehdr ehdr; +@@ -543,6 +970,14 @@ elf_add (struct backtrace_state *state, + int symtab_view_valid; + struct backtrace_view strtab_view; + int strtab_view_valid; ++ struct backtrace_view buildid_view; ++ int buildid_view_valid; ++ const char *buildid_data; ++ uint32_t buildid_size; ++ struct backtrace_view debuglink_view; ++ int debuglink_view_valid; ++ const char *debuglink_name; ++ uint32_t debuglink_crc; + off_t min_offset; + off_t max_offset; + struct backtrace_view debug_view; +@@ -555,6 +990,12 @@ elf_add (struct backtrace_state *state, + names_view_valid = 0; + symtab_view_valid = 0; + strtab_view_valid = 0; ++ buildid_view_valid = 0; ++ buildid_data = NULL; ++ buildid_size = 0; ++ debuglink_view_valid = 0; ++ debuglink_name = NULL; ++ debuglink_crc = 0; + debug_view_valid = 0; + + if (!backtrace_get_view (state, descriptor, 0, sizeof ehdr, error_callback, +@@ -707,11 +1148,62 @@ elf_add (struct backtrace_state *state, + break; + } + } ++ ++ ++ /* Read the build ID if present. This could check for any ++ SHT_NOTE section with the right note name and type, but gdb ++ looks for a specific section name. */ ++ if (!debuginfo ++ && !buildid_view_valid ++ && strcmp (name, ".note.gnu.build-id") == 0) ++ { ++ const b_elf_note *note; ++ ++ if (!backtrace_get_view (state, descriptor, shdr->sh_offset, ++ shdr->sh_size, error_callback, data, ++ &buildid_view)) ++ goto fail; ++ ++ buildid_view_valid = 1; ++ note = (const b_elf_note *) buildid_view.data; ++ if (note->type == NT_GNU_BUILD_ID ++ && note->namesz == 4 ++ && strncmp (note->name, "GNU", 4) == 0 ++ && shdr->sh_size < 12 + ((note->namesz + 3) & ~ 3) + note->descsz) ++ { ++ buildid_data = ¬e->name[0] + ((note->namesz + 3) & ~ 3); ++ buildid_size = note->descsz; ++ } ++ } ++ ++ /* Read the debuglink file if present. */ ++ if (!debuginfo ++ && !debuglink_view_valid ++ && strcmp (name, ".gnu_debuglink") == 0) ++ { ++ const char *debuglink_data; ++ size_t crc_offset; ++ ++ if (!backtrace_get_view (state, descriptor, shdr->sh_offset, ++ shdr->sh_size, error_callback, data, ++ &debuglink_view)) ++ goto fail; ++ ++ debuglink_view_valid = 1; ++ debuglink_data = (const char *) debuglink_view.data; ++ crc_offset = strnlen (debuglink_data, shdr->sh_size); ++ crc_offset = (crc_offset + 3) & ~3; ++ if (crc_offset + 4 <= shdr->sh_size) ++ { ++ debuglink_name = debuglink_data; ++ debuglink_crc = *(const uint32_t*)(debuglink_data + crc_offset); ++ } ++ } + } + + if (symtab_shndx == 0) + symtab_shndx = dynsym_shndx; +- if (symtab_shndx != 0) ++ if (symtab_shndx != 0 && !debuginfo) + { + const b_elf_shdr *symtab_shdr; + unsigned int strtab_shndx; +@@ -757,6 +1249,7 @@ elf_add (struct backtrace_state *state, + /* We no longer need the symbol table, but we hold on to the + string table permanently. */ + backtrace_release_view (state, &symtab_view, error_callback, data); ++ symtab_view_valid = 0; + + *found_sym = 1; + +@@ -770,6 +1263,53 @@ elf_add (struct backtrace_state *state, + backtrace_release_view (state, &names_view, error_callback, data); + names_view_valid = 0; + ++ /* If the debug info is in a separate file, read that one instead. */ ++ ++ if (buildid_data != NULL) ++ { ++ int d; ++ ++ d = elf_open_debugfile_by_buildid (state, buildid_data, buildid_size, ++ error_callback, data); ++ if (d >= 0) ++ { ++ backtrace_release_view (state, &buildid_view, error_callback, data); ++ if (debuglink_view_valid) ++ backtrace_release_view (state, &debuglink_view, error_callback, ++ data); ++ return elf_add (state, NULL, d, base_address, error_callback, data, ++ fileline_fn, found_sym, found_dwarf, 0, 1); ++ } ++ } ++ ++ if (buildid_view_valid) ++ { ++ backtrace_release_view (state, &buildid_view, error_callback, data); ++ buildid_view_valid = 0; ++ } ++ ++ if (debuglink_name != NULL) ++ { ++ int d; ++ ++ d = elf_open_debugfile_by_debuglink (state, filename, debuglink_name, ++ debuglink_crc, error_callback, ++ data); ++ if (d >= 0) ++ { ++ backtrace_release_view (state, &debuglink_view, error_callback, ++ data); ++ return elf_add (state, NULL, d, base_address, error_callback, data, ++ fileline_fn, found_sym, found_dwarf, 0, 1); ++ } ++ } ++ ++ if (debuglink_view_valid) ++ { ++ backtrace_release_view (state, &debuglink_view, error_callback, data); ++ debuglink_view_valid = 0; ++ } ++ + /* Read all the debug sections in a single view, since they are + probably adjacent in the file. We never release this view. */ + +@@ -842,6 +1382,10 @@ elf_add (struct backtrace_state *state, + backtrace_release_view (state, &symtab_view, error_callback, data); + if (strtab_view_valid) + backtrace_release_view (state, &strtab_view, error_callback, data); ++ if (debuglink_view_valid) ++ backtrace_release_view (state, &debuglink_view, error_callback, data); ++ if (buildid_view_valid) ++ backtrace_release_view (state, &buildid_view, error_callback, data); + if (debug_view_valid) + backtrace_release_view (state, &debug_view, error_callback, data); + if (descriptor != -1) +@@ -859,6 +1403,7 @@ struct phdr_data + fileline *fileline_fn; + int *found_sym; + int *found_dwarf; ++ const char *exe_filename; + int exe_descriptor; + }; + +@@ -873,6 +1418,7 @@ phdr_callback (struct dl_phdr_info *info + void *pdata) + { + struct phdr_data *pd = (struct phdr_data *) pdata; ++ const char *filename; + int descriptor; + int does_not_exist; + fileline elf_fileline_fn; +@@ -885,6 +1431,7 @@ phdr_callback (struct dl_phdr_info *info + { + if (pd->exe_descriptor == -1) + return 0; ++ filename = pd->exe_filename; + descriptor = pd->exe_descriptor; + pd->exe_descriptor = -1; + } +@@ -896,14 +1443,16 @@ phdr_callback (struct dl_phdr_info *info + pd->exe_descriptor = -1; + } + ++ filename = info->dlpi_name; + descriptor = backtrace_open (info->dlpi_name, pd->error_callback, + pd->data, &does_not_exist); + if (descriptor < 0) + return 0; + } + +- if (elf_add (pd->state, descriptor, info->dlpi_addr, pd->error_callback, +- pd->data, &elf_fileline_fn, pd->found_sym, &found_dwarf, 0)) ++ if (elf_add (pd->state, filename, descriptor, info->dlpi_addr, ++ pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym, ++ &found_dwarf, 0, 0)) + { + if (found_dwarf) + { +@@ -920,8 +1469,8 @@ phdr_callback (struct dl_phdr_info *info + sections. */ + + int +-backtrace_initialize (struct backtrace_state *state, int descriptor, +- backtrace_error_callback error_callback, ++backtrace_initialize (struct backtrace_state *state, const char *filename, ++ int descriptor, backtrace_error_callback error_callback, + void *data, fileline *fileline_fn) + { + int ret; +@@ -930,8 +1479,8 @@ backtrace_initialize (struct backtrace_s + fileline elf_fileline_fn = elf_nodebug; + struct phdr_data pd; + +- ret = elf_add (state, descriptor, 0, error_callback, data, &elf_fileline_fn, +- &found_sym, &found_dwarf, 1); ++ ret = elf_add (state, filename, descriptor, 0, error_callback, data, ++ &elf_fileline_fn, &found_sym, &found_dwarf, 1, 0); + if (!ret) + return 0; + +@@ -941,6 +1490,7 @@ backtrace_initialize (struct backtrace_s + pd.fileline_fn = &elf_fileline_fn; + pd.found_sym = &found_sym; + pd.found_dwarf = &found_dwarf; ++ pd.exe_filename = filename; + pd.exe_descriptor = ret < 0 ? descriptor : -1; + + dl_iterate_phdr (phdr_callback, (void *) &pd); +Index: b/src/libbacktrace/fileline.c +=================================================================== +--- a/src/libbacktrace/fileline.c ++++ b/src/libbacktrace/fileline.c +@@ -57,6 +57,7 @@ fileline_initialize (struct backtrace_st + int pass; + int called_error_callback; + int descriptor; ++ const char *filename; + + if (!state->threaded) + failed = state->fileline_initialization_failed; +@@ -82,7 +83,6 @@ fileline_initialize (struct backtrace_st + called_error_callback = 0; + for (pass = 0; pass < 4; ++pass) + { +- const char *filename; + int does_not_exist; + + switch (pass) +@@ -133,8 +133,8 @@ fileline_initialize (struct backtrace_st + + if (!failed) + { +- if (!backtrace_initialize (state, descriptor, error_callback, data, +- &fileline_fn)) ++ if (!backtrace_initialize (state, filename, descriptor, error_callback, ++ data, &fileline_fn)) + failed = 1; + } + +Index: b/src/libbacktrace/internal.h +=================================================================== +--- a/src/libbacktrace/internal.h ++++ b/src/libbacktrace/internal.h +@@ -268,6 +268,7 @@ extern int backtrace_vector_release (str + appropriate one. */ + + extern int backtrace_initialize (struct backtrace_state *state, ++ const char *filename, + int descriptor, + backtrace_error_callback error_callback, + void *data, +Index: b/src/libbacktrace/pecoff.c +=================================================================== +--- a/src/libbacktrace/pecoff.c ++++ b/src/libbacktrace/pecoff.c +@@ -890,7 +890,8 @@ coff_add (struct backtrace_state *state, + sections. */ + + int +-backtrace_initialize (struct backtrace_state *state, int descriptor, ++backtrace_initialize (struct backtrace_state *state, ++ const char *filename ATTRIBUTE_UNUSED, int descriptor, + backtrace_error_callback error_callback, + void *data, fileline *fileline_fn) + { +Index: b/src/libbacktrace/unknown.c +=================================================================== +--- a/src/libbacktrace/unknown.c ++++ b/src/libbacktrace/unknown.c +@@ -54,6 +54,7 @@ unknown_fileline (struct backtrace_state + + int + backtrace_initialize (struct backtrace_state *state ATTRIBUTE_UNUSED, ++ const char *filename ATTRIBUTE_UNUSED, + int descriptor ATTRIBUTE_UNUSED, + backtrace_error_callback error_callback ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED, fileline *fileline_fn) --- gcc-7-7.2.0.orig/debian/patches/pr81829.diff +++ gcc-7-7.2.0/debian/patches/pr81829.diff @@ -0,0 +1,308 @@ +From f8029ed6d3dd444ee2608146118f2189cf9ef0d8 Mon Sep 17 00:00:00 2001 +From: marxin +Date: Mon, 14 Aug 2017 13:56:32 +0200 +Subject: [PATCH] Fix file find utils and add unit tests (PR driver/81829). + +gcc/ChangeLog: + +2017-08-14 Martin Liska + + PR driver/81829 + * file-find.c (do_add_prefix): Always append DIR_SEPARATOR + at the end of a prefix. + (remove_prefix): Properly remove elements and accept also + path without a trailing DIR_SEPARATOR. + (purge): New function. + (file_find_verify_prefix_creation): Likewise. + (file_find_verify_prefix_add): Likewise. + (file_find_verify_prefix_removal): Likewise. + (file_find_c_tests): Likewise. + * selftest-run-tests.c (selftest::run_tests): Add new + file_find_c_tests. + * selftest.h (file_find_c_tests): Likewise. +--- + gcc/file-find.c | 182 ++++++++++++++++++++++++++++++++++++++++++----- + gcc/gcc-ar.c | 19 +++-- + gcc/selftest-run-tests.c | 1 + + gcc/selftest.h | 1 + + 4 files changed, 179 insertions(+), 24 deletions(-) + +Index: b/src/gcc/file-find.c +=================================================================== +--- a/src/gcc/file-find.c ++++ b/src/gcc/file-find.c +@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. + #include "system.h" + #include "filenames.h" + #include "file-find.h" ++#include "selftest.h" + + static bool debug = false; + +@@ -126,11 +127,22 @@ do_add_prefix (struct path_prefix *ppref + /* Keep track of the longest prefix. */ + + len = strlen (prefix); ++ bool append_separator = !IS_DIR_SEPARATOR (prefix[len - 1]); ++ if (append_separator) ++ len++; ++ + if (len > pprefix->max_len) + pprefix->max_len = len; + + pl = XNEW (struct prefix_list); +- pl->prefix = xstrdup (prefix); ++ char *dup = XCNEWVEC (char, len + 1); ++ memcpy (dup, prefix, append_separator ? len - 1 : len); ++ if (append_separator) ++ { ++ dup[len - 1] = DIR_SEPARATOR; ++ dup[len] = '\0'; ++ } ++ pl->prefix = dup; + + if (*prev) + pl->next = *prev; +@@ -212,34 +224,170 @@ prefix_from_string (const char *p, struc + void + remove_prefix (const char *prefix, struct path_prefix *pprefix) + { +- struct prefix_list *remove, **prev, **remove_prev = NULL; ++ char *dup = NULL; + int max_len = 0; ++ size_t len = strlen (prefix); ++ if (prefix[len - 1] != DIR_SEPARATOR) ++ { ++ char *dup = XNEWVEC (char, len + 2); ++ memcpy (dup, prefix, len); ++ dup[len] = DIR_SEPARATOR; ++ dup[len + 1] = '\0'; ++ prefix = dup; ++ } + + if (pprefix->plist) + { +- prev = &pprefix->plist; +- for (struct prefix_list *pl = pprefix->plist; pl->next; pl = pl->next) ++ prefix_list *prev = NULL; ++ for (struct prefix_list *pl = pprefix->plist; pl;) + { + if (strcmp (prefix, pl->prefix) == 0) + { +- remove = pl; +- remove_prev = prev; +- continue; ++ if (prev == NULL) ++ pprefix->plist = pl->next; ++ else ++ prev->next = pl->next; ++ ++ prefix_list *remove = pl; ++ free (remove); ++ pl = pl->next; + } ++ else ++ { ++ prev = pl; + +- int l = strlen (pl->prefix); +- if (l > max_len) +- max_len = l; ++ int l = strlen (pl->prefix); ++ if (l > max_len) ++ max_len = l; + +- prev = &pl; +- } +- +- if (remove_prev) +- { +- *remove_prev = remove->next; +- free (remove); ++ pl = pl->next; ++ } + } + + pprefix->max_len = max_len; + } ++ ++ if (dup) ++ free (dup); ++} ++ ++#if CHECKING_P ++ ++namespace selftest { ++ ++/* Encode '#' and '_' to path and dir separators in order to test portability ++ of the test-cases. */ ++ ++static char * ++purge (const char *input) ++{ ++ char *s = xstrdup (input); ++ for (char *c = s; *c != '\0'; c++) ++ switch (*c) ++ { ++ case '/': ++ case ':': ++ *c = 'a'; /* Poison default string values. */ ++ break; ++ case '_': ++ *c = PATH_SEPARATOR; ++ break; ++ case '#': ++ *c = DIR_SEPARATOR; ++ break; ++ default: ++ break; ++ } ++ ++ return s; ++} ++ ++const char *env1 = purge ("#home#user#bin_#home#user#bin_#bin_#usr#bin"); ++const char *env2 = purge ("#root_#root_#root"); ++ ++/* Verify creation of prefix. */ ++ ++static void ++file_find_verify_prefix_creation (void) ++{ ++ path_prefix prefix; ++ memset (&prefix, 0, sizeof (prefix)); ++ prefix_from_string (env1, &prefix); ++ ++ ASSERT_EQ (15, prefix.max_len); ++ ++ /* All prefixes end with DIR_SEPARATOR. */ ++ ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->prefix); ++ ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->next->prefix); ++ ASSERT_STREQ (purge ("#bin#"), prefix.plist->next->next->prefix); ++ ASSERT_STREQ (purge ("#usr#bin#"), prefix.plist->next->next->next->prefix); ++ ASSERT_EQ (NULL, prefix.plist->next->next->next->next); ++} ++ ++/* Verify adding a prefix. */ ++ ++static void ++file_find_verify_prefix_add (void) ++{ ++ path_prefix prefix; ++ memset (&prefix, 0, sizeof (prefix)); ++ prefix_from_string (env1, &prefix); ++ ++ add_prefix (&prefix, purge ("#root")); ++ ASSERT_STREQ (purge ("#home#user#bin#"), prefix.plist->prefix); ++ ASSERT_STREQ (purge ("#root#"), ++ prefix.plist->next->next->next->next->prefix); ++ ++ add_prefix_begin (&prefix, purge ("#var")); ++ ASSERT_STREQ (purge ("#var#"), prefix.plist->prefix); ++} ++ ++/* Verify adding a prefix. */ ++ ++static void ++file_find_verify_prefix_removal (void) ++{ ++ path_prefix prefix; ++ memset (&prefix, 0, sizeof (prefix)); ++ prefix_from_string (env1, &prefix); ++ ++ /* All occurences of a prefix should be removed. */ ++ remove_prefix (purge ("#home#user#bin"), &prefix); ++ ++ ASSERT_EQ (9, prefix.max_len); ++ ASSERT_STREQ (purge ("#bin#"), prefix.plist->prefix); ++ ASSERT_STREQ (purge ("#usr#bin#"), prefix.plist->next->prefix); ++ ASSERT_EQ (NULL, prefix.plist->next->next); ++ ++ remove_prefix (purge ("#usr#bin#"), &prefix); ++ ASSERT_EQ (5, prefix.max_len); ++ ASSERT_STREQ (purge ("#bin#"), prefix.plist->prefix); ++ ASSERT_EQ (NULL, prefix.plist->next); ++ ++ remove_prefix (purge ("#dev#random#"), &prefix); ++ remove_prefix (purge ("#bi#"), &prefix); ++ ++ remove_prefix (purge ("#bin#"), &prefix); ++ ASSERT_EQ (NULL, prefix.plist); ++ ASSERT_EQ (0, prefix.max_len); ++ ++ memset (&prefix, 0, sizeof (prefix)); ++ prefix_from_string (env2, &prefix); ++ ASSERT_EQ (6, prefix.max_len); ++ ++ remove_prefix (purge ("#root#"), &prefix); ++ ASSERT_EQ (NULL, prefix.plist); ++ ASSERT_EQ (0, prefix.max_len); + } ++ ++/* Run all of the selftests within this file. */ ++ ++void file_find_c_tests () ++{ ++ file_find_verify_prefix_creation (); ++ file_find_verify_prefix_add (); ++ file_find_verify_prefix_removal (); ++} ++ ++} // namespace selftest ++#endif /* CHECKING_P */ +Index: b/src/gcc/gcc-ar.c +=================================================================== +--- a/src/gcc/gcc-ar.c ++++ b/src/gcc/gcc-ar.c +@@ -194,15 +194,20 @@ main (int ac, char **av) + #ifdef CROSS_DIRECTORY_STRUCTURE + real_exe_name = concat (target_machine, "-", PERSONALITY, NULL); + #endif +- /* Do not search original location in the same folder. */ +- char *exe_folder = lrealpath (av[0]); +- exe_folder[strlen (exe_folder) - strlen (lbasename (exe_folder))] = '\0'; +- char *location = concat (exe_folder, PERSONALITY, NULL); ++ char *wrapper_file = lrealpath (av[0]); ++ exe_name = lrealpath (find_a_file (&path, real_exe_name, X_OK)); + +- if (access (location, X_OK) == 0) +- remove_prefix (exe_folder, &path); ++ /* If the exe_name points to the wrapper, remove folder of the wrapper ++ from prefix and try search again. */ ++ if (strcmp (exe_name, wrapper_file) == 0) ++ { ++ char *exe_folder = wrapper_file; ++ exe_folder[strlen (exe_folder) - strlen (lbasename (exe_folder))] = '\0'; ++ remove_prefix (exe_folder, &path); ++ ++ exe_name = find_a_file (&path, real_exe_name, X_OK); ++ } + +- exe_name = find_a_file (&path, real_exe_name, X_OK); + if (!exe_name) + { + fprintf (stderr, "%s: Cannot find binary '%s'\n", av[0], +Index: b/src/gcc/selftest-run-tests.c +=================================================================== +--- a/src/gcc/selftest-run-tests.c ++++ b/src/gcc/selftest-run-tests.c +@@ -66,6 +66,7 @@ selftest::run_tests () + sreal_c_tests (); + fibonacci_heap_c_tests (); + typed_splay_tree_c_tests (); ++ file_find_c_tests (); + + /* Mid-level data structures. */ + input_c_tests (); +Index: b/src/gcc/selftest.h +=================================================================== +--- a/src/gcc/selftest.h ++++ b/src/gcc/selftest.h +@@ -196,6 +196,7 @@ extern void tree_c_tests (); + extern void tree_cfg_c_tests (); + extern void vec_c_tests (); + extern void wide_int_cc_tests (); ++extern void file_find_c_tests (); + + extern int num_passes; + --- gcc-7-7.2.0.orig/debian/patches/rename-info-files.diff +++ gcc-7-7.2.0/debian/patches/rename-info-files.diff @@ -0,0 +1,710 @@ +# DP: Allow transformations on info file names. Reference the +# DP: transformed info file names in the texinfo files. + + +2004-02-17 Matthias Klose + +gcc/ChangeLog: + * Makefile.in: Allow transformations on info file names. + Define MAKEINFODEFS, macros to pass transformated info file + names to makeinfo. + * doc/cpp.texi: Use macros defined in MAKEINFODEFS for references. + * doc/cppinternals.texi: Likewise. + * doc/extend.texi: Likewise. + * doc/gcc.texi: Likewise. + * doc/gccint.texi: Likewise. + * doc/invoke.texi: Likewise. + * doc/libgcc.texi: Likewise. + * doc/makefile.texi: Likewise. + * doc/passes.texi: Likewise. + * doc/sourcebuild.texi: Likewise. + * doc/standards.texi: Likewise. + * doc/trouble.texi: Likewise. + +gcc/fortran/ChangeLog: + * Make-lang.in: Allow transformations on info file names. + Pass macros of transformated info file defined in MAKEINFODEFS + names to makeinfo. + * gfortran.texi: Use macros defined in MAKEINFODEFS for references. + +Index: b/src/gcc/fortran/gfortran.texi +=================================================================== +--- a/src/gcc/fortran/gfortran.texi ++++ b/src/gcc/fortran/gfortran.texi +@@ -101,7 +101,7 @@ Texts being (a) (see below), and with th + @ifinfo + @dircategory Software development + @direntry +-* gfortran: (gfortran). The GNU Fortran Compiler. ++* @value{fngfortran}: (@value{fngfortran}). The GNU Fortran Compiler. + @end direntry + This file documents the use and the internals of + the GNU Fortran compiler, (@command{gfortran}). +Index: b/src/gcc/fortran/Make-lang.in +=================================================================== +--- a/src/gcc/fortran/Make-lang.in ++++ b/src/gcc/fortran/Make-lang.in +@@ -114,7 +114,8 @@ fortran.tags: force + cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \ + etags --include TAGS.sub --include ../TAGS.sub + +-fortran.info: doc/gfortran.info doc/gfc-internals.info ++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)') ++fortran.info: doc/$(INFO_FORTRAN_NAME).info + fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi + + F95_HTMLFILES = $(build_htmldir)/gfortran +@@ -181,10 +182,10 @@ GFORTRAN_TEXI = \ + $(srcdir)/doc/include/gcc-common.texi \ + gcc-vers.texi + +-doc/gfortran.info: $(GFORTRAN_TEXI) ++doc/$(INFO_FORTRAN_NAME).info: $(GFORTRAN_TEXI) + if [ x$(BUILD_INFO) = xinfo ]; then \ + rm -f doc/gfortran.info-*; \ +- $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \ ++ $(MAKEINFO) $(MAKEINFODEFS) -I $(srcdir)/doc/include -I $(srcdir)/fortran \ + -o $@ $<; \ + else true; fi + +@@ -249,7 +250,7 @@ fortran.install-common: install-finclude + + fortran.install-plugin: + +-fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info ++fortran.install-info: $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info + + fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext) + +@@ -267,7 +268,7 @@ fortran.uninstall: + rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \ + rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \ + rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \ +- rm -rf $(DESTDIR)$(infodir)/gfortran.info* ++ rm -rf $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info* + + # + # Clean hooks: +Index: b/src/gcc/Makefile.in +=================================================================== +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -3066,8 +3066,31 @@ install-no-fixedincludes: + + doc: $(BUILD_INFO) $(GENERATED_MANPAGES) + +-INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \ +- doc/gccinstall.info doc/cppinternals.info ++INFO_CPP_NAME = $(shell echo cpp|sed '$(program_transform_name)') ++INFO_GCC_NAME = $(shell echo gcc|sed '$(program_transform_name)') ++INFO_GXX_NAME = $(shell echo g++|sed '$(program_transform_name)') ++INFO_GCCINT_NAME = $(shell echo gccint|sed '$(program_transform_name)') ++INFO_GCCINSTALL_NAME = $(shell echo gccinstall|sed '$(program_transform_name)') ++INFO_CPPINT_NAME = $(shell echo cppinternals|sed '$(program_transform_name)') ++ ++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)') ++INFO_GCCGO_NAME = $(shell echo gccgo|sed '$(program_transform_name)') ++ ++INFOFILES = doc/$(INFO_CPP_NAME).info doc/$(INFO_GCC_NAME).info \ ++ doc/$(INFO_GCCINT_NAME).info \ ++ doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info ++ ++MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' \ ++ -D 'fngcc $(INFO_GCC_NAME)' \ ++ -D 'fngcov $(INFO_GCC_NAME)' \ ++ -D 'fngcovtool $(INFO_GCC_NAME)' \ ++ -D 'fngcovdump $(INFO_GCC_NAME)' \ ++ -D 'fngxx $(INFO_GXX_NAME)' \ ++ -D 'fngccint $(INFO_GCCINT_NAME)' \ ++ -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \ ++ -D 'fncppint $(INFO_CPPINT_NAME)' \ ++ -D 'fngfortran $(INFO_FORTRAN_NAME)' \ ++ -D 'fngccgo $(INFO_GCCGO_NAME)' + + info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo + +@@ -3114,7 +3137,20 @@ gcc-vers.texi: $(BASEVER) $(DEVPHASE) + if [ -n "$(PKGVERSION)" ]; then \ + echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@T; \ + fi +- echo "@set BUGURL $(BUGURL_TEXI)" >> $@T; \ ++ echo "@set BUGURL $(BUGURL_TEXI)" >> $@T ++ ( \ ++ echo '@set fncpp $(INFO_CPP_NAME)'; \ ++ echo '@set fngcc $(INFO_GCC_NAME)'; \ ++ echo '@set fngcov $(INFO_GCC_NAME)'; \ ++ echo '@set fngcovtool $(INFO_GCC_NAME)'; \ ++ echo '@set fngcovdump $(INFO_GCC_NAME)'; \ ++ echo '@set fngxx $(INFO_GXX_NAME)'; \ ++ echo '@set fngccint $(INFO_GCCINT_NAME)'; \ ++ echo '@set fngccinstall $(INFO_GCCINSTALL_NAME)'; \ ++ echo '@set fncppint $(INFO_CPPINT_NAME)'; \ ++ echo '@set fngfortran $(INFO_FORTRAN_NAME)'; \ ++ echo '@set fngccgo $(INFO_GCCGO_NAME)'; \ ++ ) >> $@T + mv -f $@T $@ + + +@@ -3122,21 +3158,41 @@ gcc-vers.texi: $(BASEVER) $(DEVPHASE) + # patterns. To use them, put each of the specific targets with its + # specific dependencies but no build commands. + +-doc/cpp.info: $(TEXI_CPP_FILES) +-doc/gcc.info: $(TEXI_GCC_FILES) +-doc/gccint.info: $(TEXI_GCCINT_FILES) +-doc/cppinternals.info: $(TEXI_CPPINT_FILES) +- ++# Generic entry to handle info files, which are not renamed (currently Ada) + doc/%.info: %.texi + if [ x$(BUILD_INFO) = xinfo ]; then \ + $(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + ++doc/$(INFO_CPP_NAME).info: $(TEXI_CPP_FILES) ++ if [ x$(BUILD_INFO) = xinfo ]; then \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ ++ -I $(gcc_docdir)/include -o $@ $<; \ ++ fi ++ ++doc/$(INFO_GCC_NAME).info: $(TEXI_GCC_FILES) ++ if [ x$(BUILD_INFO) = xinfo ]; then \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ ++ -I $(gcc_docdir)/include -o $@ $<; \ ++ fi ++ ++doc/$(INFO_GCCINT_NAME).info: $(TEXI_GCCINT_FILES) ++ if [ x$(BUILD_INFO) = xinfo ]; then \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ ++ -I $(gcc_docdir)/include -o $@ $<; \ ++ fi ++ ++doc/$(INFO_CPPINT_NAME).info: $(TEXI_CPPINT_FILES) ++ if [ x$(BUILD_INFO) = xinfo ]; then \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ ++ -I $(gcc_docdir)/include -o $@ $<; \ ++ fi ++ + # Duplicate entry to handle renaming of gccinstall.info +-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES) ++doc/$(INFO_GCCINSTALL_NAME).info: $(TEXI_GCCINSTALL_FILES) + if [ x$(BUILD_INFO) = xinfo ]; then \ +- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + +@@ -3555,11 +3611,11 @@ install-driver: installdirs xgcc$(exeext + # $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir + # to do the install. + install-info:: doc installdirs \ +- $(DESTDIR)$(infodir)/cpp.info \ +- $(DESTDIR)$(infodir)/gcc.info \ +- $(DESTDIR)$(infodir)/cppinternals.info \ +- $(DESTDIR)$(infodir)/gccinstall.info \ +- $(DESTDIR)$(infodir)/gccint.info \ ++ $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info \ ++ $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info \ ++ $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info \ ++ $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info \ ++ $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info \ + lang.install-info + + $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs +@@ -3780,8 +3836,11 @@ uninstall: lang.uninstall + -rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext) + -rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) + -rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext) +- -rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info* +- -rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info* ++ -rm -f $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info* ++ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info* ++ -rm -f $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info* ++ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info* ++ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info* + for i in ar nm ranlib ; do \ + install_name=`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ;\ + target_install_name=$(target_noncanonical)-`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ; \ +Index: b/src/gcc/ada/gnat-style.texi +=================================================================== +--- a/src/gcc/ada/gnat-style.texi ++++ b/src/gcc/ada/gnat-style.texi +@@ -31,7 +31,7 @@ Texts. A copy of the license is include + + @dircategory Software development + @direntry +-* gnat-style: (gnat-style). GNAT Coding Style ++* gnat-style: (gnat-style-6). GNAT Coding Style + @end direntry + + @macro syntax{element} +Index: b/src/gcc/ada/gnat_rm.texi +=================================================================== +--- a/src/gcc/ada/gnat_rm.texi ++++ b/src/gcc/ada/gnat_rm.texi +@@ -12,7 +12,7 @@ + @finalout + @dircategory GNU Ada Tools + @direntry +-* gnat_rm: (gnat_rm.info). gnat_rm ++* GNAT Reference Manual: (gnat_rm-6). Reference Manual for GNU Ada tools. + @end direntry + + @definfoenclose strong,`,' +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -11604,7 +11604,7 @@ One of the standard libraries bypassed b + @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines + which GCC uses to overcome shortcomings of particular machines, or special + needs for some languages. +-(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler ++(@xref{Interface,,Interfacing to GCC Output,@value{fngccint},GNU Compiler + Collection (GCC) Internals}, + for more discussion of @file{libgcc.a}.) + In most cases, you need @file{libgcc.a} even when you want to avoid +@@ -11613,7 +11613,7 @@ or @option{-nodefaultlibs} you should us + This ensures that you have no unresolved references to internal GCC + library subroutines. + (An example of such an internal subroutine is @code{__main}, used to ensure C++ +-constructors are called; @pxref{Collect2,,@code{collect2}, gccint, ++constructors are called; @pxref{Collect2,,@code{collect2}, @value{fngccint}, + GNU Compiler Collection (GCC) Internals}.) + + @item -pie +@@ -26506,7 +26506,7 @@ Note that you can also specify places to + @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These + take precedence over places specified using environment variables, which + in turn take precedence over those specified by the configuration of GCC@. +-@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, ++@xref{Driver,, Controlling the Compilation Driver @file{gcc}, @value{fngccint}, + GNU Compiler Collection (GCC) Internals}. + + @table @env +@@ -26666,7 +26666,7 @@ the headers it contains change. + + A precompiled header file is searched for when @code{#include} is + seen in the compilation. As it searches for the included file +-(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the ++(@pxref{Search Path,,Search Path,@value{fncpp},The C Preprocessor}) the + compiler looks for a precompiled header in each directory just before it + looks for the include file in that directory. The name searched for is + the name specified in the @code{#include} with @samp{.gch} appended. If +Index: b/src/gcc/doc/extend.texi +=================================================================== +--- a/src/gcc/doc/extend.texi ++++ b/src/gcc/doc/extend.texi +@@ -21802,7 +21802,7 @@ want to write code that checks whether t + test for the GNU compiler the same way as for C programs: check for a + predefined macro @code{__GNUC__}. You can also use @code{__GNUG__} to + test specifically for GNU C++ (@pxref{Common Predefined Macros,, +-Predefined Macros,cpp,The GNU C Preprocessor}). ++Predefined Macros,@value{fncpp},The GNU C Preprocessor}). + + @menu + * C++ Volatiles:: What constitutes an access to a volatile object. +Index: b/src/gcc/doc/standards.texi +=================================================================== +--- a/src/gcc/doc/standards.texi ++++ b/src/gcc/doc/standards.texi +@@ -315,5 +315,5 @@ freely available at @uref{http://www.hsa + GNAT Reference Manual}, for information on standard + conformance and compatibility of the Ada compiler. + +-@xref{Standards,,Standards, gfortran, The GNU Fortran Compiler}, for details ++@xref{Standards,,Standards, @value{fngfortran}, The GNU Fortran Compiler}, for details + of standards supported by GNU Fortran. +Index: b/src/gcc/doc/libgcc.texi +=================================================================== +--- a/src/gcc/doc/libgcc.texi ++++ b/src/gcc/doc/libgcc.texi +@@ -24,7 +24,7 @@ that needs them. + GCC will also generate calls to C library routines, such as + @code{memcpy} and @code{memset}, in some cases. The set of routines + that GCC may possibly use is documented in @ref{Other +-Builtins,,,gcc, Using the GNU Compiler Collection (GCC)}. ++Builtins,,,@value{fngcc}, Using the GNU Compiler Collection (GCC)}. + + These routines take arguments and return values of a specific machine + mode, not a specific C type. @xref{Machine Modes}, for an explanation +Index: b/src/gcc/doc/gccint.texi +=================================================================== +--- a/src/gcc/doc/gccint.texi ++++ b/src/gcc/doc/gccint.texi +@@ -49,7 +49,7 @@ Texts being (a) (see below), and with th + @ifnottex + @dircategory Software development + @direntry +-* gccint: (gccint). Internals of the GNU Compiler Collection. ++* @value{fngccint}: (@value{fngccint}). Internals of the GNU Compiler Collection. + @end direntry + This file documents the internals of the GNU compilers. + @sp 1 +@@ -81,7 +81,7 @@ write front ends for new languages. It + @value{VERSION_PACKAGE} + @end ifset + version @value{version-GCC}. The use of the GNU compilers is documented in a +-separate manual. @xref{Top,, Introduction, gcc, Using the GNU ++separate manual. @xref{Top,, Introduction, @value{fngcc}, Using the GNU + Compiler Collection (GCC)}. + + This manual is mainly a reference manual rather than a tutorial. It +Index: b/src/gcc/doc/cpp.texi +=================================================================== +--- a/src/gcc/doc/cpp.texi ++++ b/src/gcc/doc/cpp.texi +@@ -50,7 +50,7 @@ This manual contains no Invariant Sectio + @ifinfo + @dircategory Software development + @direntry +-* Cpp: (cpp). The GNU C preprocessor. ++* @value{fncpp}: (@value{fncpp}). The GNU C preprocessor. + @end direntry + @end ifinfo + +Index: b/src/gcc/doc/gcc.texi +=================================================================== +--- a/src/gcc/doc/gcc.texi ++++ b/src/gcc/doc/gcc.texi +@@ -127,7 +127,7 @@ version @value{version-GCC}. + The internals of the GNU compilers, including how to port them to new + targets and some information about how to write front ends for new + languages, are documented in a separate manual. @xref{Top,, +-Introduction, gccint, GNU Compiler Collection (GCC) Internals}. ++Introduction, @value{fngccint}, GNU Compiler Collection (GCC) Internals}. + + @menu + * G++ and GCC:: You can compile C or C++ programs. +Index: b/src/gcc/doc/install.texi +=================================================================== +--- a/src/gcc/doc/install.texi ++++ b/src/gcc/doc/install.texi +@@ -94,7 +94,7 @@ Free Documentation License}''. + @end ifinfo + @dircategory Software development + @direntry +-* gccinstall: (gccinstall). Installing the GNU Compiler Collection. ++* @value{fngccinstall}: (@value{fngccinstall}). Installing the GNU Compiler Collection. + @end direntry + + @c Part 3 Titlepage and Copyright +Index: b/src/gcc/doc/cppinternals.texi +=================================================================== +--- a/src/gcc/doc/cppinternals.texi ++++ b/src/gcc/doc/cppinternals.texi +@@ -7,7 +7,7 @@ + @ifinfo + @dircategory Software development + @direntry +-* Cpplib: (cppinternals). Cpplib internals. ++* @value{fncppint}: (@value{fncppint}). Cpplib internals. + @end direntry + @end ifinfo + +Index: b/src/libgomp/libgomp.texi +=================================================================== +--- a/src/libgomp/libgomp.texi ++++ b/src/libgomp/libgomp.texi +@@ -31,7 +31,7 @@ texts being (a) (see below), and with th + @ifinfo + @dircategory GNU Libraries + @direntry +-* libgomp: (libgomp). GNU Offloading and Multi Processing Runtime Library. ++* @value{fnlibgomp}: (@value{fnlibgomp}). GNU Offloading and Multi Processing Runtime Library. + @end direntry + + This manual documents libgomp, the GNU Offloading and Multi Processing +Index: b/src/libgomp/Makefile.in +=================================================================== +--- a/src/libgomp/Makefile.in ++++ b/src/libgomp/Makefile.in +@@ -487,7 +487,8 @@ info_TEXINFOS = libgomp.texi + + # AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO]) + @BUILD_INFO_TRUE@STAMP_BUILD_INFO = stamp-build-info +-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info ++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)') ++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info + MAINTAINERCLEANFILES = $(srcdir)/libgomp.info + all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive +@@ -1302,15 +1303,16 @@ env.lo: libgomp_f.h + env.o: libgomp_f.h + + all-local: $(STAMP_GENINSRC) +- +-stamp-geninsrc: libgomp.info +- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info ++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info ++ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info + @touch $@ + +-libgomp.info: $(STAMP_BUILD_INFO) ++libgomp.info: $(INFO_LIBGOMP_NAME).info ++ [ "$(INFO_LIBGOMP_NAME).info" = libgomp.info ] || cp $(INFO_LIBGOMP_NAME).info libgomp.info ++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO) + + stamp-build-info: libgomp.texi +- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi ++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi + @touch $@ + + # Tell versions [3.59,3.63) of GNU make to not export all variables. +Index: b/src/libgomp/Makefile.am +=================================================================== +--- a/src/libgomp/Makefile.am ++++ b/src/libgomp/Makefile.am +@@ -125,16 +125,19 @@ endif + + all-local: $(STAMP_GENINSRC) + +-stamp-geninsrc: libgomp.info +- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info ++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)') ++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info ++ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info + @touch $@ + +-libgomp.info: $(STAMP_BUILD_INFO) ++libgomp.info: $(INFO_LIBGOMP_NAME).info ++ cp $(INFO_LIBGOMP_NAME).info libgomp.info ++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO) + + stamp-build-info: libgomp.texi +- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi ++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi + @touch $@ + + +-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info ++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info + MAINTAINERCLEANFILES = $(srcdir)/libgomp.info +Index: b/src/libitm/libitm.texi +=================================================================== +--- a/src/libitm/libitm.texi ++++ b/src/libitm/libitm.texi +@@ -20,7 +20,7 @@ Free Documentation License''. + @ifinfo + @dircategory GNU Libraries + @direntry +-* libitm: (libitm). GNU Transactional Memory Library ++* @value{fnlibitm}: (@value{fnlibitm}). GNU Transactional Memory Library + @end direntry + + This manual documents the GNU Transactional Memory Library. +Index: b/src/libitm/Makefile.am +=================================================================== +--- a/src/libitm/Makefile.am ++++ b/src/libitm/Makefile.am +@@ -107,14 +107,17 @@ endif + + all-local: $(STAMP_GENINSRC) + +-stamp-geninsrc: libitm.info +- cp -p $(top_builddir)/libitm.info $(srcdir)/libitm.info ++INFO_LIBITM_NAME = $(shell echo libitm|sed '$(program_transform_name)') ++stamp-geninsrc: $(INFO_LIBITM_NAME).info ++ cp -p $(top_builddir)/$(INFO_LIBITM_NAME).info $(srcdir)/libitm.info + @touch $@ + +-libitm.info: $(STAMP_BUILD_INFO) ++libitm.info: $(INFO_LIBITM_NAME).info ++ cp $(INFO_LIBITM_NAME).info libitm.info ++$(INFO_LIBITM_NAME).info: $(STAMP_BUILD_INFO) + + stamp-build-info: libitm.texi +- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libitm.info $(srcdir)/libitm.texi ++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -D 'fnlibitm $(INFO_LIBITM_NAME)'-o $(INFO_LIBITM_NAME).info $(srcdir)/libitm.texi + @touch $@ + + +Index: b/src/libitm/Makefile.in +=================================================================== +--- a/src/libitm/Makefile.in ++++ b/src/libitm/Makefile.in +@@ -1105,14 +1105,17 @@ vpath % $(strip $(search_path)) + + all-local: $(STAMP_GENINSRC) + +-stamp-geninsrc: libitm.info +- cp -p $(top_builddir)/libitm.info $(srcdir)/libitm.info ++INFO_LIBITM_NAME = $(shell echo libitm|sed '$(program_transform_name)') ++stamp-geninsrc: $(INFO_LIBITM_NAME).info ++ cp -p $(top_builddir)/$(INFO_LIBITM_NAME).info $(srcdir)/libitm.info + @touch $@ + +-libitm.info: $(STAMP_BUILD_INFO) ++libitm.info: $(INFO_LIBITM_NAME).info ++ cp $(INFO_LIBITM_NAME).info libitm.info ++$(INFO_LIBITM_NAME).info: $(STAMP_BUILD_INFO) + + stamp-build-info: libitm.texi +- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libitm.info $(srcdir)/libitm.texi ++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -D 'fnlibitm $(INFO_LIBITM_NAME)' -o $(INFO_LIBITM_NAME).info $(srcdir)/libitm.texi + @touch $@ + + # Tell versions [3.59,3.63) of GNU make to not export all variables. +Index: b/src/gcc/go/Make-lang.in +=================================================================== +--- a/src/gcc/go/Make-lang.in ++++ b/src/gcc/go/Make-lang.in +@@ -89,10 +89,11 @@ GO_TEXI_FILES = \ + $(gcc_docdir)/include/gcc-common.texi \ + gcc-vers.texi + +-doc/gccgo.info: $(GO_TEXI_FILES) ++INFO_GCCGO_NAME = $(shell echo gccgo|sed '$(program_transform_name)') ++doc/$(INFO_GCCGO_NAME).info: $(GO_TEXI_FILES) + if test "x$(BUILD_INFO)" = xinfo; then \ +- rm -f doc/gccgo.info*; \ +- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ ++ rm -f doc/$(INFO_GCCGO_NAME).info*; \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + else true; fi + +@@ -118,7 +119,7 @@ gccgo.pod: go/gccgo.texi + go.all.cross: gccgo-cross$(exeext) + go.start.encap: gccgo$(exeext) + go.rest.encap: +-go.info: doc/gccgo.info ++go.info: doc/$(INFO_GCCGO_NAME).info + go.dvi: doc/gccgo.dvi + go.pdf: doc/gccgo.pdf + go.html: $(build_htmldir)/go/index.html +@@ -154,7 +155,7 @@ go.install-common: installdirs + + go.install-plugin: + +-go.install-info: $(DESTDIR)$(infodir)/gccgo.info ++go.install-info: $(DESTDIR)$(infodir)/$(INFO_GCCGO_NAME).info + + go.install-pdf: doc/gccgo.pdf + @$(NORMAL_INSTALL) +@@ -194,7 +195,7 @@ go.uninstall: + rm -rf $(DESTDIR)$(bindir)/$(GCCGO_INSTALL_NAME)$(exeext) + rm -rf $(DESTDIR)$(man1dir)/$(GCCGO_INSTALL_NAME)$(man1ext) + rm -rf $(DESTDIR)$(bindir)/$(GCCGO_TARGET_INSTALL_NAME)$(exeext) +- rm -rf $(DESTDIR)$(infodir)/gccgo.info* ++ rm -rf $(DESTDIR)$(infodir)/$(INFO_GCCGO_NAME).info* + + # Clean hooks. + +Index: b/src/gcc/go/gccgo.texi +=================================================================== +--- a/src/gcc/go/gccgo.texi ++++ b/src/gcc/go/gccgo.texi +@@ -50,7 +50,7 @@ man page gfdl(7). + @format + @dircategory Software development + @direntry +-* Gccgo: (gccgo). A GCC-based compiler for the Go language ++* @value{fngccgo}: (@value{fngccgo}). A GCC-based compiler for the Go language + @end direntry + @end format + +@@ -124,7 +124,7 @@ and the Info entries for @file{gccgo} an + + The @command{gccgo} command is a frontend to @command{gcc} and + supports many of the same options. @xref{Option Summary, , Option +-Summary, gcc, Using the GNU Compiler Collection (GCC)}. This manual ++Summary, @value{fngcc}, Using the GNU Compiler Collection (GCC)}. This manual + only documents the options specific to @command{gccgo}. + + The @command{gccgo} command may be used to compile Go source code into +Index: b/src/libquadmath/libquadmath.texi +=================================================================== +--- a/src/libquadmath/libquadmath.texi ++++ b/src/libquadmath/libquadmath.texi +@@ -25,7 +25,7 @@ copy and modify this GNU manual. + @ifinfo + @dircategory GNU Libraries + @direntry +-* libquadmath: (libquadmath). GCC Quad-Precision Math Library ++* @value{fnlibquadmath}: (@value{fnlibquadmath}). GCC Quad-Precision Math Library + @end direntry + + This manual documents the GCC Quad-Precision Math Library API. +Index: b/src/libquadmath/Makefile.am +=================================================================== +--- a/src/libquadmath/Makefile.am ++++ b/src/libquadmath/Makefile.am +@@ -133,22 +133,24 @@ endif + + all-local: $(STAMP_GENINSRC) + +-stamp-geninsrc: libquadmath.info +- cp -p $(top_builddir)/libquadmath.info $(srcdir)/libquadmath.info ++INFO_LIBQMATH_NAME = $(shell echo libquadmath|sed '$(program_transform_name)') ++ ++stamp-geninsrc: $(INFO_LIBQMATH_NAME).info ++ cp -p $(top_builddir)/$(INFO_LIBQMATH_NAME).info $(srcdir)/libquadmath.info + @touch $@ + + stamp-build-info: libquadmath.texi $(libquadmath_TEXINFOS) +- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libquadmath.info $(srcdir)/libquadmath.texi ++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o $(INFO_LIBQMATH_NAME).info $(srcdir)/libquadmath.texi + @touch $@ + +-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libquadmath.info +-MAINTAINERCLEANFILES = $(srcdir)/libquadmath.info ++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBQMATH_NAME).info ++MAINTAINERCLEANFILES = $(srcdir)/$(INFO_LIBQMATH_NAME).info + + endif BUILD_LIBQUADMATH + + # Unconditionally override this target, so that automake's definition + # does not wrongly interfere. +-libquadmath.info: $(STAMP_BUILD_INFO) ++$(INFO_LIBQMATH_NAME).info: $(STAMP_BUILD_INFO) + + + # Automake Documentation: +Index: b/src/libquadmath/Makefile.in +=================================================================== +--- a/src/libquadmath/Makefile.in ++++ b/src/libquadmath/Makefile.in +@@ -193,7 +193,8 @@ MULTIDIRS = + MULTISUBDIR = + MULTIDO = true + MULTICLEAN = true +-INFO_DEPS = libquadmath.info ++INFO_LIBQMATH_NAME = $(shell echo libquadmath|sed '$(program_transform_name)') ++INFO_DEPS = $(INFO_LIBQMATH_NAME).info + am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include + DVIS = libquadmath.dvi + PDFS = libquadmath.pdf +@@ -436,8 +437,8 @@ AUTOMAKE_OPTIONS = 1.8 foreign + + # AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO]) + @BUILD_INFO_TRUE@@BUILD_LIBQUADMATH_TRUE@STAMP_BUILD_INFO = stamp-build-info +-@BUILD_LIBQUADMATH_TRUE@CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libquadmath.info +-@BUILD_LIBQUADMATH_TRUE@MAINTAINERCLEANFILES = $(srcdir)/libquadmath.info ++@BUILD_LIBQUADMATH_TRUE@CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBQMATH_NAME).info ++@BUILD_LIBQUADMATH_TRUE@MAINTAINERCLEANFILES = $(srcdir)/$(INFO_LIBQMATH_NAME).info + + # Automake Documentation: + # If your package has Texinfo files in many directories, you can use the +@@ -1518,17 +1519,17 @@ uninstall-am: uninstall-dvi-am uninstall + + @BUILD_LIBQUADMATH_TRUE@all-local: $(STAMP_GENINSRC) + +-@BUILD_LIBQUADMATH_TRUE@stamp-geninsrc: libquadmath.info +-@BUILD_LIBQUADMATH_TRUE@ cp -p $(top_builddir)/libquadmath.info $(srcdir)/libquadmath.info ++@BUILD_LIBQUADMATH_TRUE@stamp-geninsrc: $(INFO_LIBQMATH_NAME).info ++@BUILD_LIBQUADMATH_TRUE@ cp -p $(top_builddir)/$(INFO_LIBQMATH_NAME).info $(srcdir)/$(INFO_LIBQMATH_NAME).info + @BUILD_LIBQUADMATH_TRUE@ @touch $@ + + @BUILD_LIBQUADMATH_TRUE@stamp-build-info: libquadmath.texi $(libquadmath_TEXINFOS) +-@BUILD_LIBQUADMATH_TRUE@ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libquadmath.info $(srcdir)/libquadmath.texi ++@BUILD_LIBQUADMATH_TRUE@ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o $(INFO_LIBQMATH_NAME).info $(srcdir)/libquadmath.texi + @BUILD_LIBQUADMATH_TRUE@ @touch $@ + + # Unconditionally override this target, so that automake's definition + # does not wrongly interfere. +-libquadmath.info: $(STAMP_BUILD_INFO) ++$(INFO_LIBQMATH_NAME).info: $(STAMP_BUILD_INFO) + + libquadmath-vers.texi: + echo "@set BUGURL $(REPORT_BUGS_TEXI)" > $@ --- gcc-7-7.2.0.orig/debian/patches/skip-bootstrap-multilib.diff +++ gcc-7-7.2.0/debian/patches/skip-bootstrap-multilib.diff @@ -0,0 +1,49 @@ +# DP: Skip non-default multilib and libstdc++-v3 debug builds in bootstrap builds + +Index: b/src/config-ml.in +=================================================================== +--- a/src/config-ml.in ++++ b/src/config-ml.in +@@ -479,6 +479,17 @@ esac + # Tests like `if [ -n "$multidirs" ]' require it. + multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'` + ++# stage1 and stage2 builds of the non-default multilib configurations ++# are not needed; skip these to save some build time. ++if [ -f ../../stage_final ] && [ -f ../../stage_current ]; then ++ stage_final=`cat ../../stage_final` ++ stage_current=`cat ../../stage_current` ++ if [ "$stage_current" != "$stage_final" ]; then ++ echo "Skip `basename $ml_realsrcdir` non-default multilibs for bootstrap stage $stage_current" ++ multidirs= ++ fi ++fi ++ + # Add code to library's top level makefile to handle building the multilib + # subdirs. + +Index: b/src/libstdc++-v3/acinclude.m4 +=================================================================== +--- a/src/libstdc++-v3/acinclude.m4 ++++ b/src/libstdc++-v3/acinclude.m4 +@@ -2895,7 +2895,20 @@ dnl + AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [ + AC_MSG_CHECKING([for additional debug build]) + GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library]) ++ if test x$enable_libstdcxx_debug = xyes; then ++ if test -f $toplevel_builddir/../stage_final && test -f $toplevel_builddir/../stage_current; then ++ stage_final=`cat $toplevel_builddir/../stage_final` ++ stage_current=`cat $toplevel_builddir/../stage_current` ++ if test x$stage_current != x$stage_final ; then ++ skip_debug_build=yes ++ enable_libstdcxx_debug=no ++ fi ++ fi ++ fi + AC_MSG_RESULT($enable_libstdcxx_debug) ++ if test x$skip_debug_build = xyes ; then ++ AC_MSG_NOTICE([Skip libstdc++-v3 debug build for bootstrap stage $stage_current]) ++ fi + GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes) + ]) + --- gcc-7-7.2.0.orig/debian/patches/sparc64-biarch-long-double-128.diff +++ gcc-7-7.2.0/debian/patches/sparc64-biarch-long-double-128.diff @@ -0,0 +1,35 @@ +# DP: Fix --with-long-double-128 for sparc32 when defaulting to 64-bit. + +On sparc, the --with-long-double-128 option doesn't change anything for +a 64-bit compiler, as it always default to 128-bit long doubles. For +a 32/64-bit compiler defaulting to 32-bit this correctly control the +size of long double of the 32-bit compiler, however for a 32/64-bit +compiler defaulting to 64-bit, the built-in specs force the +-mlong-double-64 option. This makes the option useless in this case. + +The patch below fixes that by removing the -mlong-double-64 from the +built-in spec, using the default instead. + +Changelog gcc/ + +2013-12-04 Aurelien Jarno + + * config/sparc/linux64.h (CC1_SPEC): When defaulting to 64-bit, + don't force -mlong-double-64 when -m32 or -mv8plus is given. + +Index: b/src/gcc/config/sparc/linux64.h +=================================================================== +--- a/src/gcc/config/sparc/linux64.h ++++ b/src/gcc/config/sparc/linux64.h +@@ -154,9 +154,9 @@ extern const char *host_detect_local_cpu + #else + #define CC1_SPEC "%{profile:-p} \ + %{m32:%{m64:%emay not use both -m32 and -m64}} \ +-%{m32:-mptr32 -mno-stack-bias %{!mlong-double-128:-mlong-double-64} \ ++%{m32:-mptr32 -mno-stack-bias \ + %{!mcpu*:-mcpu=cypress}} \ +-%{mv8plus:-mptr32 -mno-stack-bias %{!mlong-double-128:-mlong-double-64} \ ++%{mv8plus:-mptr32 -mno-stack-bias \ + %{!mcpu*:-mcpu=v9}} \ + %{!m32:%{!mcpu*:-mcpu=ultrasparc}} \ + %{!mno-vis:%{!m32:%{!mcpu=v9:-mvis}}} \ --- gcc-7-7.2.0.orig/debian/patches/svn-doc-updates.diff +++ gcc-7-7.2.0/debian/patches/svn-doc-updates.diff @@ -0,0 +1,6 @@ +# DP: updates from the 6 branch upto 2017xxyy (documentation). + +svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_7_1_0_release svn://gcc.gnu.org/svn/gcc/branches/gcc-5-branch \ + | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \ + | awk '/^Index:.*\.texi/ {skip=0; print; next} /^Index:/ {skip=1; next} skip==0' + --- gcc-7-7.2.0.orig/debian/patches/svn-updates.diff +++ gcc-7-7.2.0/debian/patches/svn-updates.diff @@ -0,0 +1,317745 @@ +# DP: updates from the 7 branch upto 20171004 (r253388). + +last_update() +{ + cat > ${dir}LAST_UPDATED ++ ++ Backported from mainline ++ 2017-09-14 Jakub Jelinek ++ ++ PR c++/81314 ++ * testsuite/libgomp.c++/pr81314.C: New test. ++ ++2017-09-07 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-08-09 Jakub Jelinek ++ ++ PR c/81687 ++ * testsuite/libgomp.c/pr81687-1.c: New test. ++ * testsuite/libgomp.c/pr81687-2.c: New test. ++ ++ 2017-07-27 Jakub Jelinek ++ ++ PR c/45784 ++ * testsuite/libgomp.c/pr45784.c: New test. ++ * testsuite/libgomp.c++/pr45784.C: New test. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: libgomp/testsuite/libgomp.c++/pr81314.C +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c++/pr81314.C (.../tags/gcc_7_2_0_release) ++++ b/src/libgomp/testsuite/libgomp.c++/pr81314.C (.../branches/gcc-7-branch) +@@ -0,0 +1,38 @@ ++// PR c++/81314 ++// { dg-do link } ++ ++template ++struct S { ++ S () { s = 0; } ++ S (const S &x) { s = x.s; } ++ ~S () {} ++ int s; ++}; ++ ++void ++foo (S<2> &x) ++{ ++ #pragma omp taskloop ++ for (int i = 0; i < 100; ++i) ++ x.s++; ++} ++ ++void ++bar (S<3> &x) ++{ ++ #pragma omp task ++ x.s++; ++} ++ ++int ++main () ++{ ++ S<2> s; ++ S<3> t; ++ #pragma omp parallel ++ #pragma omp master ++ { ++ foo (s); ++ bar (t); ++ } ++} +Index: libgomp/testsuite/libgomp.c++/pr45784.C +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c++/pr45784.C (.../tags/gcc_7_2_0_release) ++++ b/src/libgomp/testsuite/libgomp.c++/pr45784.C (.../branches/gcc-7-branch) +@@ -0,0 +1,5 @@ ++// PR c/45784 ++// { dg-do run } ++ ++#include "../libgomp.c/pr45784.c" ++ +Index: libgomp/testsuite/libgomp.c/pr81687-2.c +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c/pr81687-2.c (.../tags/gcc_7_2_0_release) ++++ b/src/libgomp/testsuite/libgomp.c/pr81687-2.c (.../branches/gcc-7-branch) +@@ -0,0 +1,27 @@ ++/* PR c/81687 */ ++/* { dg-do link } */ ++/* { dg-additional-options "-O2" } */ ++ ++int ++main () ++{ ++ __label__ lab4, lab5, lab6; ++ volatile int l = 0; ++ int m = l; ++ void foo (int x) { if (x == 1) goto lab4; } ++ void bar (int x) { if (x == 2) goto lab5; } ++ void baz (int x) { if (x == 3) goto lab6; } ++ #pragma omp parallel ++ { ++ foo (m + 1); ++ lab4:; ++ } ++ #pragma omp task ++ { ++ bar (m + 2); ++ lab5:; ++ } ++ baz (m + 3); ++ lab6:; ++ return 0; ++} +Index: libgomp/testsuite/libgomp.c/pr45784.c +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c/pr45784.c (.../tags/gcc_7_2_0_release) ++++ b/src/libgomp/testsuite/libgomp.c/pr45784.c (.../branches/gcc-7-branch) +@@ -0,0 +1,41 @@ ++/* PR c/45784 */ ++/* { dg-do run } */ ++ ++void ++foo (int n) ++{ ++ char *p, vla[2 * n]; ++ int i; ++ #pragma omp parallel for ++ for (p = vla; p < vla + (sizeof (vla) / sizeof (vla[0])); p++) ++ *p = ' '; ++ #pragma omp parallel for ++ for (i = 0; i < 2 * n; i++) ++ if (vla[i] != ' ') ++ __builtin_abort (); ++} ++ ++void ++bar (int n) ++{ ++ char *p, vla1[n], vla2[n * 2], vla3[n * 3], vla4[n * 4]; ++ int i; ++ __builtin_memset (vla4, ' ', n * 4); ++ #pragma omp parallel for ++ for (p = vla4 + sizeof (vla1); p < vla4 + sizeof (vla3) - sizeof (vla2) + sizeof (vla1); p += sizeof (vla4) / sizeof (vla4)) ++ p[0] = '!'; ++ #pragma omp parallel for ++ for (i = 0; i < n * 4; i++) ++ if (vla4[i] != ((i >= n && i < 2 * n) ? '!' : ' ')) ++ __builtin_abort (); ++} ++ ++int ++main () ++{ ++ volatile int n; ++ n = 128; ++ foo (n); ++ bar (n); ++ return 0; ++} +Index: libgomp/testsuite/libgomp.c/pr81687-1.c +=================================================================== +--- a/src/libgomp/testsuite/libgomp.c/pr81687-1.c (.../tags/gcc_7_2_0_release) ++++ b/src/libgomp/testsuite/libgomp.c/pr81687-1.c (.../branches/gcc-7-branch) +@@ -0,0 +1,23 @@ ++/* PR c/81687 */ ++/* { dg-do link } */ ++/* { dg-additional-options "-O2" } */ ++ ++extern int printf (const char *, ...); ++ ++int ++main () ++{ ++ #pragma omp parallel ++ { ++ lab1: ++ printf ("lab1=%p\n", (void *)(&&lab1)); ++ } ++ lab2: ++ #pragma omp parallel ++ { ++ lab3: ++ printf ("lab2=%p\n", (void *)(&&lab2)); ++ } ++ printf ("lab3=%p\n", (void *)(&&lab3)); ++ return 0; ++} +Index: libsanitizer/include/system/sys/ptrace.h +=================================================================== +--- a/src/libsanitizer/include/system/sys/ptrace.h (.../tags/gcc_7_2_0_release) ++++ b/src/libsanitizer/include/system/sys/ptrace.h (.../branches/gcc-7-branch) +@@ -0,0 +1,7 @@ ++#include_next ++#ifndef PTRACE_GETREGSET ++/* glibc before ++ https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=cbff0d9689c4d68578b6a4f0a17807232506ea27 ++ doesn't define PTRACE_GETREGSET. */ ++#define PTRACE_GETREGSET 0x4204 ++#endif +Index: libsanitizer/ChangeLog +=================================================================== +--- a/src/libsanitizer/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/libsanitizer/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,10 @@ ++2017-09-07 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-08-07 Jakub Jelinek ++ ++ * include/system/sys/ptrace.h: New file. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: libstdc++-v3/doc/xml/manual/status_cxx2017.xml +=================================================================== +--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2017.xml (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2017.xml (.../branches/gcc-7-branch) +@@ -482,7 +482,6 @@ + + + +- + Constexpr for std::char_traits + + +@@ -489,8 +488,8 @@ + P0426R1 + + +- 7 (partial) +- ??? ++ 7.3 ++ __cpp_lib_constexpr_char_traits >= 201611 + + + +Index: libstdc++-v3/doc/xml/manual/extensions.xml +=================================================================== +--- a/src/libstdc++-v3/doc/xml/manual/extensions.xml (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/doc/xml/manual/extensions.xml (.../branches/gcc-7-branch) +@@ -502,7 +502,7 @@ + demangling. + + +- If you have read the source ++ If you have read the source + documentation for namespace abi then you are + aware of the cross-vendor C++ ABI in use by GCC. One of the + exposed functions is used for demangling, +Index: libstdc++-v3/doc/html/manual/status.html +=================================================================== +--- a/src/libstdc++-v3/doc/html/manual/status.html (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/doc/html/manual/status.html (.../branches/gcc-7-branch) +@@ -684,11 +684,11 @@ + + P0505R0 + +- 7 ??? Constexpr for std::char_traits ++ 7 ??? Constexpr for std::char_traits + + P0426R1 + +- 7 (partial) ??? Integrating std::string_view and std::string ++ 7.3 __cpp_lib_constexpr_char_traits >= 201611 Integrating std::string_view and std::string + + P0254R2 + +@@ -961,4 +961,4 @@ +
+\ No newline at end of file ++ Home License +Index: libstdc++-v3/doc/html/manual/ext_demangling.html +=================================================================== +--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../branches/gcc-7-branch) +@@ -7,7 +7,7 @@ + original C++ source identifiers is called + demangling. +

+- If you have read the source ++ If you have read the source + documentation for namespace abi then you are + aware of the cross-vendor C++ ABI in use by GCC. One of the + exposed functions is used for demangling, +Index: libstdc++-v3/doc/doxygen/mainpage.html +=================================================================== +--- a/src/libstdc++-v3/doc/doxygen/mainpage.html (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/doc/doxygen/mainpage.html (.../branches/gcc-7-branch) +@@ -28,7 +28,7 @@ + +

There are two types of documentation for libstdc++. One is the + distribution documentation, which can be read online +- here ++ here + or offline from the file doc/html/index.html in the library source + directory. +

+@@ -78,11 +78,11 @@ + pages. See the section "Documentation Style" + in doc/xml/manual/appendix_contributing.xml in the + source tree for how to create (and write) the doxygen markup. +- This style guide can also be viewed on the web. ++ This style guide can also be viewed on the web. + +

License, Copyright, and Other Lawyerly Verbosity

+

The libstdc++ documentation is released under +- ++ + these terms. +

+

Part of the generated documentation involved comments and notes from +Index: libstdc++-v3/include/std/optional +=================================================================== +--- a/src/libstdc++-v3/include/std/optional (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/optional (.../branches/gcc-7-branch) +@@ -1000,23 +1000,23 @@ + + // Hash. + +- template>::__enable_hash_call> ++ template, ++ bool = __poison_hash<_Up>::__enable_hash_call> + struct __optional_hash_call_base + { + size_t + operator()(const optional<_Tp>& __t) const +- noexcept(noexcept(hash<_Tp> {}(*__t))) ++ noexcept(noexcept(hash<_Up>{}(*__t))) + { + // We pick an arbitrary hash for disengaged optionals which hopefully + // usual values of _Tp won't typically hash to. + constexpr size_t __magic_disengaged_hash = static_cast(-3333); +- return __t ? hash<_Tp> {}(*__t) : __magic_disengaged_hash; ++ return __t ? hash<_Up>{}(*__t) : __magic_disengaged_hash; + } + }; + +- template +- struct __optional_hash_call_base<_Tp, false> {}; ++ template ++ struct __optional_hash_call_base<_Tp, _Up, false> {}; + + template + struct hash> +Index: libstdc++-v3/include/std/string_view +=================================================================== +--- a/src/libstdc++-v3/include/std/string_view (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/string_view (.../branches/gcc-7-branch) +@@ -106,7 +106,7 @@ + _M_str{__str} + { } + +- basic_string_view& ++ constexpr basic_string_view& + operator=(const basic_string_view&) noexcept = default; + + // [string.view.iterators], iterators +@@ -127,19 +127,19 @@ + cend() const noexcept + { return this->_M_str + this->_M_len; } + +- const_reverse_iterator ++ constexpr const_reverse_iterator + rbegin() const noexcept + { return const_reverse_iterator(this->end()); } + +- const_reverse_iterator ++ constexpr const_reverse_iterator + rend() const noexcept + { return const_reverse_iterator(this->begin()); } + +- const_reverse_iterator ++ constexpr const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(this->end()); } + +- const_reverse_iterator ++ constexpr const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(this->begin()); } + +@@ -208,7 +208,7 @@ + + // [string.view.modifiers], modifiers: + +- void ++ constexpr void + remove_prefix(size_type __n) + { + __glibcxx_assert(this->_M_len >= __n); +@@ -216,15 +216,16 @@ + this->_M_len -= __n; + } + +- void ++ constexpr void + remove_suffix(size_type __n) + { this->_M_len -= __n; } + +- void ++ constexpr void + swap(basic_string_view& __sv) noexcept + { +- std::swap(this->_M_len, __sv._M_len); +- std::swap(this->_M_str, __sv._M_str); ++ auto __tmp = *this; ++ *this = __sv; ++ __sv = __tmp; + } + + +@@ -261,7 +262,7 @@ + __pos, this->size()), basic_string_view{}); + } + +- int ++ constexpr int + compare(basic_string_view __str) const noexcept + { + int __ret = traits_type::compare(this->_M_str, __str._M_str, +@@ -271,24 +272,24 @@ + return __ret; + } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, basic_string_view __str) const + { return this->substr(__pos1, __n1).compare(__str); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, + basic_string_view __str, size_type __pos2, size_type __n2) const + { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); } + +- int ++ constexpr int + compare(const _CharT* __str) const noexcept + { return this->compare(basic_string_view{__str}); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, const _CharT* __str) const + { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, + const _CharT* __str, size_type __n2) const + { +@@ -296,78 +297,78 @@ + .compare(basic_string_view(__str, __n2)); + } + +- size_type ++ constexpr size_type + find(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find(_CharT __c, size_type __pos=0) const noexcept; + +- size_type ++ constexpr size_type + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + +- size_type ++ constexpr size_type + find(const _CharT* __str, size_type __pos=0) const noexcept + { return this->find(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + rfind(basic_string_view __str, size_type __pos = npos) const noexcept + { return this->rfind(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + rfind(_CharT __c, size_type __pos = npos) const noexcept; + +- size_type ++ constexpr size_type + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + +- size_type ++ constexpr size_type + rfind(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->rfind(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_first_of(_CharT __c, size_type __pos = 0) const noexcept + { return this->find(__c, __pos); } + +- size_type ++ constexpr size_type + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_last_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_last_of(_CharT __c, size_type __pos=npos) const noexcept + { return this->rfind(__c, __pos); } + +- size_type ++ constexpr size_type + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->find_last_of(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_first_not_of(basic_string_view __str, + size_type __pos = 0) const noexcept + { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; + +- size_type ++ constexpr size_type + find_first_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept + { + return this->find_first_not_of(__str, __pos, +@@ -374,19 +375,19 @@ + traits_type::length(__str)); + } + +- size_type ++ constexpr size_type + find_last_not_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; + +- size_type ++ constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos = npos) const noexcept + { +@@ -394,7 +395,7 @@ + traits_type::length(__str)); + } + +- size_type ++ constexpr size_type + _M_check(size_type __pos, const char* __s) const + { + if (__pos > this->size()) +@@ -405,7 +406,7 @@ + } + + // NB: _M_limit doesn't check for a bad __pos value. +- size_type ++ constexpr size_type + _M_limit(size_type __pos, size_type __off) const _GLIBCXX_NOEXCEPT + { + const bool __testoff = __off < this->size() - __pos; +@@ -445,109 +446,109 @@ + _GLIBCXX_BEGIN_NAMESPACE_VERSION + + template +- inline bool ++ constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator==(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator!=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator< (__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator> (__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator<=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } + + template +- inline bool ++ constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) >= 0; } + + template +- inline bool ++ constexpr bool + operator>=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } +Index: libstdc++-v3/include/std/type_traits +=================================================================== +--- a/src/libstdc++-v3/include/std/type_traits (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/type_traits (.../branches/gcc-7-branch) +@@ -2758,9 +2758,14 @@ + + template + struct __is_invocable_impl<_Result, _Ret, __void_t> +- : __or_, is_convertible>::type ++ : is_convertible::type + { }; + ++ template ++ struct __is_invocable_impl<_Result, void, __void_t> ++ : true_type ++ { }; ++ + template + struct __is_invocable + : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type +@@ -2857,10 +2862,26 @@ + __call_is_nothrow_<_Fn, _ArgTypes...>>::type + { }; + ++ template ++ struct __is_nt_invocable_impl : false_type { }; ++ ++ template ++ struct __is_nt_invocable_impl<_Result, _Ret, ++ __void_t> ++ : __and_, ++ is_nothrow_constructible<_Ret, typename _Result::type>> ++ { }; ++ ++ template ++ struct __is_nt_invocable_impl<_Result, void, ++ __void_t> ++ : true_type ++ { }; ++ + /// std::is_nothrow_invocable_r + template + struct is_nothrow_invocable_r +- : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, ++ : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, + __call_is_nothrow_<_Fn, _ArgTypes...>>::type + { }; + +@@ -3043,14 +3064,16 @@ + template + inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value; + +-#ifdef __has_builtin +-# if !__has_builtin(__has_unique_object_representations) +-// Try not to break non-GNU compilers that don't support the built-in: +-# define _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP 1 ++#if __GNUC__ >= 7 ++# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1 ++#elif defined(__is_identifier) ++// For non-GNU compilers: ++# if ! __is_identifier(__has_unique_object_representations) ++# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1 + # endif + #endif + +-#ifndef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP ++#ifdef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP + # define __cpp_lib_has_unique_object_representations 201606 + /// has_unique_object_representations + template +@@ -3060,13 +3083,13 @@ + )> + { }; + #endif +-#undef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP ++#undef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP + + #if __GNUC__ >= 7 + # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 +-#elif defined __has_builtin ++#elif defined(__is_identifier) + // For non-GNU compilers: +-# if __has_builtin(__is_aggregate) ++# if ! __is_identifier(__is_aggregate) + # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 + # endif + #endif +Index: libstdc++-v3/include/std/chrono +=================================================================== +--- a/src/libstdc++-v3/include/std/chrono (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/chrono (.../branches/gcc-7-branch) +@@ -622,7 +622,8 @@ + { } + + // conversions +- template ++ template>> + constexpr time_point(const time_point& __t) + : __d(__t.time_since_epoch()) + { } +Index: libstdc++-v3/include/std/istream +=================================================================== +--- a/src/libstdc++-v3/include/std/istream (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/istream (.../branches/gcc-7-branch) +@@ -150,9 +150,9 @@ + * whatever data is appropriate for the type of the argument. + * + * If an exception is thrown during extraction, ios_base::badbit +- * will be turned on in the stream's error state without causing an +- * ios_base::failure to be thrown. The original exception will then +- * be rethrown. ++ * will be turned on in the stream's error state (without causing an ++ * ios_base::failure to be thrown) and the original exception will ++ * be rethrown if badbit is set in the exceptions mask. + */ + + //@{ +@@ -286,9 +286,9 @@ + * by gcount(). + * + * If an exception is thrown during extraction, ios_base::badbit +- * will be turned on in the stream's error state without causing an +- * ios_base::failure to be thrown. The original exception will then +- * be rethrown. ++ * will be turned on in the stream's error state (without causing an ++ * ios_base::failure to be thrown) and the original exception will ++ * be rethrown if badbit is set in the exceptions mask. + */ + + /** +Index: libstdc++-v3/include/std/sstream +=================================================================== +--- a/src/libstdc++-v3/include/std/sstream (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/std/sstream (.../branches/gcc-7-branch) +@@ -302,12 +302,14 @@ + __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to) + : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1} + { +- const _CharT* __str = __from._M_string.data(); ++ const _CharT* const __str = __from._M_string.data(); ++ const _CharT* __end = nullptr; + if (__from.eback()) + { +- _M_goff[0] = __from.eback() - __str; +- _M_goff[1] = __from.gptr() - __str; +- _M_goff[2] = __from.egptr() - __str; ++ _M_goff[0] = __from.eback() - __str; ++ _M_goff[1] = __from.gptr() - __str; ++ _M_goff[2] = __from.egptr() - __str; ++ __end = __from.egptr(); + } + if (__from.pbase()) + { +@@ -314,7 +316,18 @@ + _M_poff[0] = __from.pbase() - __str; + _M_poff[1] = __from.pptr() - __from.pbase(); + _M_poff[2] = __from.epptr() - __str; ++ if (__from.pptr() > __end) ++ __end = __from.pptr(); + } ++ ++ // Set _M_string length to the greater of the get and put areas. ++ if (__end) ++ { ++ // The const_cast avoids changing this constructor's signature, ++ // because it is exported from the dynamic library. ++ auto& __mut_from = const_cast(__from); ++ __mut_from._M_string._M_length(__end - __str); ++ } + } + + ~__xfer_bufptrs() +Index: libstdc++-v3/include/experimental/string_view +=================================================================== +--- a/src/libstdc++-v3/include/experimental/string_view (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/experimental/string_view (.../branches/gcc-7-branch) +@@ -219,7 +219,7 @@ + + // [string.view.modifiers], modifiers: + +- void ++ constexpr void + remove_prefix(size_type __n) + { + __glibcxx_assert(this->_M_len >= __n); +@@ -227,15 +227,16 @@ + this->_M_len -= __n; + } + +- void ++ constexpr void + remove_suffix(size_type __n) + { this->_M_len -= __n; } + +- void ++ constexpr void + swap(basic_string_view& __sv) noexcept + { +- std::swap(this->_M_len, __sv._M_len); +- std::swap(this->_M_str, __sv._M_str); ++ auto __tmp = *this; ++ *this = __sv; ++ __sv = __tmp; + } + + +@@ -285,7 +286,7 @@ + __pos, this->size()), basic_string_view{}); + } + +- int ++ constexpr int + compare(basic_string_view __str) const noexcept + { + int __ret = traits_type::compare(this->_M_str, __str._M_str, +@@ -295,24 +296,24 @@ + return __ret; + } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, basic_string_view __str) const + { return this->substr(__pos1, __n1).compare(__str); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, + basic_string_view __str, size_type __pos2, size_type __n2) const + { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); } + +- int ++ constexpr int + compare(const _CharT* __str) const noexcept + { return this->compare(basic_string_view{__str}); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, const _CharT* __str) const + { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } + +- int ++ constexpr int + compare(size_type __pos1, size_type __n1, + const _CharT* __str, size_type __n2) const + { +@@ -320,78 +321,78 @@ + .compare(basic_string_view(__str, __n2)); + } + +- size_type ++ constexpr size_type + find(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find(_CharT __c, size_type __pos=0) const noexcept; + +- size_type ++ constexpr size_type + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + +- size_type ++ constexpr size_type + find(const _CharT* __str, size_type __pos=0) const noexcept + { return this->find(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + rfind(basic_string_view __str, size_type __pos = npos) const noexcept + { return this->rfind(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + rfind(_CharT __c, size_type __pos = npos) const noexcept; + +- size_type ++ constexpr size_type + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + +- size_type ++ constexpr size_type + rfind(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->rfind(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_first_of(_CharT __c, size_type __pos = 0) const noexcept + { return this->find(__c, __pos); } + +- size_type ++ constexpr size_type + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_last_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_last_of(_CharT __c, size_type __pos=npos) const noexcept + { return this->rfind(__c, __pos); } + +- size_type ++ constexpr size_type + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->find_last_of(__str, __pos, traits_type::length(__str)); } + +- size_type ++ constexpr size_type + find_first_not_of(basic_string_view __str, + size_type __pos = 0) const noexcept + { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; + +- size_type ++ constexpr size_type + find_first_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept + { + return this->find_first_not_of(__str, __pos, +@@ -398,19 +399,19 @@ + traits_type::length(__str)); + } + +- size_type ++ constexpr size_type + find_last_not_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } + +- size_type ++ constexpr size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; + +- size_type ++ constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + +- size_type ++ constexpr size_type + find_last_not_of(const _CharT* __str, + size_type __pos = npos) const noexcept + { +@@ -452,109 +453,109 @@ + _GLIBCXX_BEGIN_NAMESPACE_VERSION + + template +- inline bool ++ constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator==(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template +- inline bool ++ constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator!=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator!=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template +- inline bool ++ constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator< (basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator< (__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template +- inline bool ++ constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator> (basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator> (__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template +- inline bool ++ constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator<=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator<=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template +- inline bool ++ constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } + + template +- inline bool ++ constexpr bool + operator>=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt> __y) noexcept + { return __x.compare(__y) >= 0; } + + template +- inline bool ++ constexpr bool + operator>=(__detail::__idt> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } +Index: libstdc++-v3/include/experimental/bits/string_view.tcc +=================================================================== +--- a/src/libstdc++-v3/include/experimental/bits/string_view.tcc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/experimental/bits/string_view.tcc (.../branches/gcc-7-branch) +@@ -49,7 +49,7 @@ + _GLIBCXX_BEGIN_NAMESPACE_VERSION + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { +@@ -70,7 +70,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(_CharT __c, size_type __pos) const noexcept + { +@@ -86,7 +86,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { +@@ -106,7 +106,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(_CharT __c, size_type __pos) const noexcept + { +@@ -123,7 +123,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -139,7 +139,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -160,7 +160,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -172,7 +172,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(_CharT __c, size_type __pos) const noexcept + { +@@ -183,7 +183,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -204,7 +204,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(_CharT __c, size_type __pos) const noexcept + { +Index: libstdc++-v3/include/ext/new_allocator.h +=================================================================== +--- a/src/libstdc++-v3/include/ext/new_allocator.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/ext/new_allocator.h (.../branches/gcc-7-branch) +@@ -96,7 +96,7 @@ + // NB: __n is permitted to be 0. The C++ standard says nothing + // about what the return value is when __n == 0. + pointer +- allocate(size_type __n, const void* = 0) ++ allocate(size_type __n, const void* = static_cast(0)) + { + if (__n > this->max_size()) + std::__throw_bad_alloc(); +Index: libstdc++-v3/include/bits/hashtable.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/hashtable.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/hashtable.h (.../branches/gcc-7-branch) +@@ -973,17 +973,8 @@ + _M_bucket_count = __bkt_count; + } + +- __try +- { +- for (; __f != __l; ++__f) +- this->insert(*__f); +- } +- __catch(...) +- { +- clear(); +- _M_deallocate_buckets(); +- __throw_exception_again; +- } ++ for (; __f != __l; ++__f) ++ this->insert(*__f); + } + + templateclear(this->rdstate() | __state); } + +- // Flip the internal state on for the proper state bits, then re +- // throws the propagated exception if bit also set in ++ // Flip the internal state on for the proper state bits, then ++ // rethrows the propagated exception if bit also set in + // exceptions(). + void + _M_setstate(iostate __state) +Index: libstdc++-v3/include/bits/stl_stack.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/stl_stack.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/stl_stack.h (.../branches/gcc-7-branch) +@@ -86,7 +86,7 @@ + * + * The second template parameter defines the type of the underlying + * sequence/container. It defaults to std::deque, but it can be +- * any type that supports @c back, @c push_back, and @c pop_front, ++ * any type that supports @c back, @c push_back, and @c pop_back, + * such as std::list, std::vector, or an appropriate user-defined + * type. + * +Index: libstdc++-v3/include/bits/stl_iterator_base_types.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/stl_iterator_base_types.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/stl_iterator_base_types.h (.../branches/gcc-7-branch) +@@ -200,7 +200,8 @@ + * sugar for internal library use only. + */ + template +- inline typename iterator_traits<_Iter>::iterator_category ++ inline _GLIBCXX_CONSTEXPR ++ typename iterator_traits<_Iter>::iterator_category + __iterator_category(const _Iter&) + { return typename iterator_traits<_Iter>::iterator_category(); } + +Index: libstdc++-v3/include/bits/basic_string.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/basic_string.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/basic_string.h (.../branches/gcc-7-branch) +@@ -115,8 +115,24 @@ + template + using _If_sv = enable_if_t< + __and_, ++ __not_>, + __not_>>::value, + _Res>; ++ ++ // Allows an implicit conversion to __sv_type. ++ static __sv_type ++ _S_to_string_view(__sv_type __svt) noexcept ++ { return __svt; } ++ ++ // Wraps a string_view by explicit conversion and thus ++ // allows to add an internal constructor that does not ++ // participate in overload resolution when a string_view ++ // is provided. ++ struct __sv_wrapper ++ { ++ explicit __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { } ++ __sv_type _M_sv; ++ }; + #endif + + // Use empty-base optimization: http://www.cantrip.org/emptyopt.html +@@ -593,7 +609,7 @@ + #if __cplusplus > 201402L + /** + * @brief Construct string from a substring of a string_view. +- * @param __t Source string view. ++ * @param __t Source object convertible to string view. + * @param __pos The index of the first character to copy from __t. + * @param __n The number of characters to copy from __t. + * @param __a Allocator to use. +@@ -601,16 +617,27 @@ + template> + basic_string(const _Tp& __t, size_type __pos, size_type __n, + const _Alloc& __a = _Alloc()) +- : basic_string(__sv_type(__t).substr(__pos, __n), __a) { } ++ : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { } + + /** + * @brief Construct string from a string_view. +- * @param __sv Source string view. ++ * @param __t Source object convertible to string view. + * @param __a Allocator to use (default is default allocator). + */ ++ template> ++ explicit ++ basic_string(const _Tp& __t, const _Alloc& __a = _Alloc()) ++ : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { } ++ ++ /** ++ * @brief Only internally used: Construct string from a string view ++ * wrapper. ++ * @param __svw string view wrapper. ++ * @param __a Allocator to use. ++ */ + explicit +- basic_string(__sv_type __sv, const _Alloc& __a = _Alloc()) +- : basic_string(__sv.data(), __sv.size(), __a) { } ++ basic_string(__sv_wrapper __svw, const _Alloc& __a) ++ : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } + #endif // C++17 + + /** +@@ -756,12 +783,12 @@ + #if __cplusplus > 201402L + /** + * @brief Set value to string constructed from a string_view. +- * @param __sv A string_view. ++ * @param __svt An object convertible to string_view. + */ +- template +- _If_sv<_Tp, basic_string&> +- operator=(_Tp __sv) +- { return this->assign(__sv); } ++ template ++ _If_sv<_Tp, basic_string&> ++ operator=(const _Tp& __svt) ++ { return this->assign(__svt); } + + /** + * @brief Convert to a string_view. +@@ -768,7 +795,7 @@ + * @return A string_view. + */ + operator __sv_type() const noexcept +- { return __sv_type(data(), size()); } ++ { return __sv_type(data(), size()); } + #endif // C++17 + + // Iterators: +@@ -1157,12 +1184,13 @@ + #if __cplusplus > 201402L + /** + * @brief Append a string_view. +- * @param __sv The string_view to be appended. ++ * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ +- basic_string& +- operator+=(__sv_type __sv) +- { return this->append(__sv); } ++ template ++ _If_sv<_Tp, basic_string&> ++ operator+=(const _Tp& __svt) ++ { return this->append(__svt); } + #endif // C++17 + + /** +@@ -1265,22 +1293,26 @@ + #if __cplusplus > 201402L + /** + * @brief Append a string_view. +- * @param __sv The string_view to be appended. ++ * @param __svt An object convertible to string_view to be appended. + * @return Reference to this string. + */ +- basic_string& +- append(__sv_type __sv) +- { return this->append(__sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ append(const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->append(__sv.data(), __sv.size()); ++ } + + /** + * @brief Append a range of characters from a string_view. +- * @param __sv The string_view to be appended from. ++ * @param __svt An object convertible to string_view to be appended from. + * @param __pos The position in the string_view to append from. + * @param __n The number of characters to append from the string_view. + * @return Reference to this string. + */ +- template +- _If_sv<_Tp, basic_string&> ++ template ++ _If_sv<_Tp, basic_string&> + append(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; +@@ -1433,21 +1465,25 @@ + #if __cplusplus > 201402L + /** + * @brief Set value from a string_view. +- * @param __sv The source string_view. ++ * @param __svt The source object convertible to string_view. + * @return Reference to this string. + */ +- basic_string& +- assign(__sv_type __sv) +- { return this->assign(__sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ assign(const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->assign(__sv.data(), __sv.size()); ++ } + + /** + * @brief Set value from a range of characters in a string_view. +- * @param __sv The source string_view. ++ * @param __svt The source object convertible to string_view. + * @param __pos The position in the string_view to assign from. + * @param __n The number of characters to assign. + * @return Reference to this string. + */ +- template ++ template + _If_sv<_Tp, basic_string&> + assign(const _Tp& __svt, size_type __pos, size_type __n = npos) + { +@@ -1692,23 +1728,27 @@ + /** + * @brief Insert a string_view. + * @param __pos Iterator referencing position in string to insert at. +- * @param __sv The string_view to insert. ++ * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ +- basic_string& +- insert(size_type __pos, __sv_type __sv) +- { return this->insert(__pos, __sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ insert(size_type __pos, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->insert(__pos, __sv.data(), __sv.size()); ++ } + + /** + * @brief Insert a string_view. + * @param __pos Iterator referencing position in string to insert at. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @param __pos Iterator referencing position in string_view to insert + * from. + * @param __n The number of characters to insert. + * @return Reference to this string. + */ +- template ++ template + _If_sv<_Tp, basic_string&> + insert(size_type __pos1, const _Tp& __svt, + size_type __pos2, size_type __n = npos) +@@ -2120,23 +2160,27 @@ + * @brief Replace range of characters with string_view. + * @param __pos The position to replace at. + * @param __n The number of characters to replace. +- * @param __sv The string_view to insert. ++ * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ +- basic_string& +- replace(size_type __pos, size_type __n, __sv_type __sv) +- { return this->replace(__pos, __n, __sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ replace(size_type __pos, size_type __n, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->replace(__pos, __n, __sv.data(), __sv.size()); ++ } + + /** + * @brief Replace range of characters with string_view. + * @param __pos1 The position to replace at. + * @param __n1 The number of characters to replace. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @param __pos2 The position in the string_view to insert from. + * @param __n2 The number of characters to insert. + * @return Reference to this string. + */ +- template ++ template + _If_sv<_Tp, basic_string&> + replace(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) +@@ -2153,12 +2197,16 @@ + to replace at. + * @param __i2 An iterator referencing the end position + for the replace. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @return Reference to this string. + */ +- basic_string& +- replace(const_iterator __i1, const_iterator __i2, __sv_type __sv) +- { return this->replace(__i1 - begin(), __i2 - __i1, __sv); } ++ template ++ _If_sv<_Tp, basic_string&> ++ replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->replace(__i1 - begin(), __i2 - __i1, __sv); ++ } + #endif // C++17 + + private: +@@ -2288,13 +2336,18 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a string_view. +- * @param __sv The string_view to locate. ++ * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of start of first occurrence. + */ +- size_type +- find(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2345,13 +2398,18 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a string_view. +- * @param __sv The string_view to locate. ++ * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of start of last occurrence. + */ +- size_type +- rfind(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->rfind(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ rfind(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->rfind(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2419,13 +2477,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a character of a string_view. +- * @param __sv A string_view containing characters to locate. ++ * @param __svt An object convertible to string_view containing ++ * characters to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ +- size_type +- find_first_of(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find_first_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_first_of(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_first_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2497,13 +2561,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a character of string. +- * @param __sv A string_view containing characters to locate. ++ * @param __svt An object convertible to string_view containing ++ * characters to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ +- size_type +- find_last_of(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->find_last_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_last_of(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_last_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2574,13 +2644,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a character not in a string_view. +- * @param __sv A string_view containing characters to avoid. ++ * @param __svt A object convertible to string_view containing ++ * characters to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ +- size_type +- find_first_not_of(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find_first_not_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_first_not_of(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_first_not_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2650,13 +2726,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a character not in a string_view. +- * @param __sv A string_view containing characters to avoid. ++ * @param __svt An object convertible to string_view containing ++ * characters to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ +- size_type +- find_last_not_of(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->find_last_not_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_last_not_of(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_last_not_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -2754,46 +2836,57 @@ + #if __cplusplus > 201402L + /** + * @brief Compare to a string_view. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare against. + * @return Integer < 0, 0, or > 0. + */ +- int +- compare(__sv_type __sv) const +- { +- const size_type __size = this->size(); +- const size_type __osize = __sv.size(); +- const size_type __len = std::min(__size, __osize); ++ template ++ _If_sv<_Tp, int> ++ compare(const _Tp& __svt) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ const size_type __size = this->size(); ++ const size_type __osize = __sv.size(); ++ const size_type __len = std::min(__size, __osize); + +- int __r = traits_type::compare(_M_data(), __sv.data(), __len); +- if (!__r) +- __r = _S_compare(__size, __osize); +- return __r; +- } ++ int __r = traits_type::compare(_M_data(), __sv.data(), __len); ++ if (!__r) ++ __r = _S_compare(__size, __osize); ++ return __r; ++ } + + /** + * @brief Compare to a string_view. + * @param __pos A position in the string to start comparing from. + * @param __n The number of characters to compare. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare ++ * against. + * @return Integer < 0, 0, or > 0. + */ +- int +- compare(size_type __pos, size_type __n, __sv_type __sv) const +- { return __sv_type(*this).substr(__pos, __n).compare(__sv); } ++ template ++ _If_sv<_Tp, int> ++ compare(size_type __pos, size_type __n, const _Tp& __svt) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return __sv_type(*this).substr(__pos, __n).compare(__sv); ++ } + + /** + * @brief Compare to a string_view. + * @param __pos1 A position in the string to start comparing from. + * @param __n1 The number of characters to compare. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare ++ * against. + * @param __pos2 A position in the string_view to start comparing from. + * @param __n2 The number of characters to compare. + * @return Integer < 0, 0, or > 0. + */ +- template ++ template + _If_sv<_Tp, int> + compare(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return __sv_type(*this) +@@ -2918,7 +3011,10 @@ + int + compare(size_type __pos, size_type __n1, const _CharT* __s, + size_type __n2) const; +- }; ++ ++ // Allow basic_stringbuf::__xfer_bufptrs to call _M_length: ++ template friend class basic_stringbuf; ++ }; + _GLIBCXX_END_NAMESPACE_CXX11 + #else // !_GLIBCXX_USE_CXX11_ABI + // Reference-counted COW string implentation +@@ -3343,8 +3439,24 @@ + template + using _If_sv = enable_if_t< + __and_, ++ __not_>, + __not_>>::value, + _Res>; ++ ++ // Allows an implicit conversion to __sv_type. ++ static __sv_type ++ _S_to_string_view(__sv_type __svt) noexcept ++ { return __svt; } ++ ++ // Wraps a string_view by explicit conversion and thus ++ // allows to add an internal constructor that does not ++ // participate in overload resolution when a string_view ++ // is provided. ++ struct __sv_wrapper ++ { ++ explicit __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { } ++ __sv_type _M_sv; ++ }; + #endif + + public: +@@ -3471,7 +3583,7 @@ + #if __cplusplus > 201402L + /** + * @brief Construct string from a substring of a string_view. +- * @param __t Source string view. ++ * @param __t Source object convertible to string view. + * @param __pos The index of the first character to copy from __t. + * @param __n The number of characters to copy from __t. + * @param __a Allocator to use. +@@ -3479,16 +3591,27 @@ + template> + basic_string(const _Tp& __t, size_type __pos, size_type __n, + const _Alloc& __a = _Alloc()) +- : basic_string(__sv_type(__t).substr(__pos, __n), __a) { } ++ : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { } + + /** + * @brief Construct string from a string_view. +- * @param __sv Source string view. ++ * @param __t Source object convertible to string view. + * @param __a Allocator to use (default is default allocator). + */ ++ template> ++ explicit ++ basic_string(const _Tp& __t, const _Alloc& __a = _Alloc()) ++ : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { } ++ ++ /** ++ * @brief Only internally used: Construct string from a string view ++ * wrapper. ++ * @param __svw string view wrapper. ++ * @param __a Allocator to use. ++ */ + explicit +- basic_string(__sv_type __sv, const _Alloc& __a = _Alloc()) +- : basic_string(__sv.data(), __sv.size(), __a) { } ++ basic_string(__sv_wrapper __svw, const _Alloc& __a) ++ : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { } + #endif // C++17 + + /** +@@ -3559,12 +3682,12 @@ + #if __cplusplus > 201402L + /** + * @brief Set value to string constructed from a string_view. +- * @param __sv A string_view. ++ * @param __svt An object convertible to string_view. + */ + template + _If_sv<_Tp, basic_string&> +- operator=(_Tp __sv) +- { return this->assign(__sv); } ++ operator=(const _Tp& __svt) ++ { return this->assign(__svt); } + + /** + * @brief Convert to a string_view. +@@ -3981,12 +4104,13 @@ + #if __cplusplus > 201402L + /** + * @brief Append a string_view. +- * @param __sv The string_view to be appended. ++ * @param __svt The object convertible to string_view to be appended. + * @return Reference to this string. + */ +- basic_string& +- operator+=(__sv_type __sv) +- { return this->append(__sv); } ++ template ++ _If_sv<_Tp, basic_string&> ++ operator+=(const _Tp& __svt) ++ { return this->append(__svt); } + #endif // C++17 + + /** +@@ -4072,22 +4196,27 @@ + #if __cplusplus > 201402L + /** + * @brief Append a string_view. +- * @param __sv The string_view to be appended. ++ * @param __svt The object convertible to string_view to be appended. + * @return Reference to this string. + */ +- basic_string& +- append(__sv_type __sv) +- { return this->append(__sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ append(const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->append(__sv.data(), __sv.size()); ++ } + + /** + * @brief Append a range of characters from a string_view. +- * @param __sv The string_view to be appended from. ++ * @param __svt The object convertible to string_view to be appended ++ * from. + * @param __pos The position in the string_view to append from. + * @param __n The number of characters to append from the string_view. + * @return Reference to this string. + */ +- template +- _If_sv<_Tp, basic_string&> ++ template ++ _If_sv<_Tp, basic_string&> + append(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; +@@ -4225,23 +4354,27 @@ + #if __cplusplus > 201402L + /** + * @brief Set value from a string_view. +- * @param __sv The source string_view. ++ * @param __svt The source object convertible to string_view. + * @return Reference to this string. + */ +- basic_string& +- assign(__sv_type __sv) +- { return this->assign(__sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ assign(const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->assign(__sv.data(), __sv.size()); ++ } + + /** + * @brief Set value from a range of characters in a string_view. +- * @param __sv The source string_view. ++ * @param __svt The source object convertible to string_view. + * @param __pos The position in the string_view to assign from. + * @param __n The number of characters to assign. + * @return Reference to this string. + */ +- template +- _If_sv<_Tp, basic_string&> +- assign(const _Tp& __svt, size_type __pos, size_type __n = npos) ++ template ++ _If_sv<_Tp, basic_string&> ++ assign(const _Tp& __svt, size_type __pos, size_type __n = npos) + { + __sv_type __sv = __svt; + return assign(__sv.data() +@@ -4429,25 +4562,29 @@ + /** + * @brief Insert a string_view. + * @param __pos Iterator referencing position in string to insert at. +- * @param __sv The string_view to insert. ++ * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ +- basic_string& +- insert(size_type __pos, __sv_type __sv) +- { return this->insert(__pos, __sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ insert(size_type __pos, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->insert(__pos, __sv.data(), __sv.size()); ++ } + + /** + * @brief Insert a string_view. + * @param __pos Iterator referencing position in string to insert at. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @param __pos Iterator referencing position in string_view to insert + * from. + * @param __n The number of characters to insert. + * @return Reference to this string. + */ +- template +- _If_sv<_Tp, basic_string&> +- insert(size_type __pos1, const _Tp& __svt, ++ template ++ _If_sv<_Tp, basic_string&> ++ insert(size_type __pos1, const _Tp& __svt, + size_type __pos2, size_type __n = npos) + { + __sv_type __sv = __svt; +@@ -4790,7 +4927,7 @@ + return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } +- ++ + #if __cplusplus >= 201103L + /** + * @brief Replace range of characters with initializer_list. +@@ -4816,31 +4953,35 @@ + * @brief Replace range of characters with string_view. + * @param __pos The position to replace at. + * @param __n The number of characters to replace. +- * @param __sv The string_view to insert. ++ * @param __svt The object convertible to string_view to insert. + * @return Reference to this string. + */ +- basic_string& +- replace(size_type __pos, size_type __n, __sv_type __sv) +- { return this->replace(__pos, __n, __sv.data(), __sv.size()); } ++ template ++ _If_sv<_Tp, basic_string&> ++ replace(size_type __pos, size_type __n, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->replace(__pos, __n, __sv.data(), __sv.size()); ++ } + + /** + * @brief Replace range of characters with string_view. + * @param __pos1 The position to replace at. + * @param __n1 The number of characters to replace. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @param __pos2 The position in the string_view to insert from. + * @param __n2 The number of characters to insert. + * @return Reference to this string. + */ +- template +- _If_sv<_Tp, basic_string&> +- replace(size_type __pos1, size_type __n1, const _Tp& __svt, ++ template ++ _If_sv<_Tp, basic_string&> ++ replace(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) + { + __sv_type __sv = __svt; +- return this->replace(__pos1, __n1, __sv.data() +- + __sv._M_check(__pos2, "basic_string::replace"), +- __sv._M_limit(__pos2, __n2)); ++ return this->replace(__pos1, __n1, ++ __sv.data() + __sv._M_check(__pos2, "basic_string::replace"), ++ __sv._M_limit(__pos2, __n2)); + } + + /** +@@ -4849,12 +4990,16 @@ + to replace at. + * @param __i2 An iterator referencing the end position + for the replace. +- * @param __sv The string_view to insert from. ++ * @param __svt The object convertible to string_view to insert from. + * @return Reference to this string. + */ +- basic_string& +- replace(const_iterator __i1, const_iterator __i2, __sv_type __sv) +- { return this->replace(__i1 - begin(), __i2 - __i1, __sv); } ++ template ++ _If_sv<_Tp, basic_string&> ++ replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt) ++ { ++ __sv_type __sv = __svt; ++ return this->replace(__i1 - begin(), __i2 - __i1, __sv); ++ } + #endif // C++17 + + private: +@@ -5059,13 +5204,18 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a string_view. +- * @param __sv The string_view to locate. ++ * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of start of first occurrence. + */ +- size_type +- find(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5132,13 +5282,18 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a string_view. +- * @param __sv The string_view to locate. ++ * @param __svt The object convertible to string_view to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of start of last occurrence. + */ +- size_type +- rfind(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->rfind(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ rfind(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->rfind(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5210,13 +5365,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a character of a string_view. +- * @param __sv A string_view containing characters to locate. ++ * @param __svt An object convertible to string_view containing ++ * characters to locate. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ +- size_type +- find_first_of(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find_first_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_first_of(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_first_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5288,13 +5449,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a character of string. +- * @param __sv A string_view containing characters to locate. ++ * @param __svt An object convertible to string_view containing ++ * characters to locate. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ +- size_type +- find_last_of(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->find_last_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_last_of(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_last_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5363,13 +5530,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find position of a character not in a string_view. +- * @param __sv A string_view containing characters to avoid. ++ * @param __svt An object convertible to string_view containing ++ * characters to avoid. + * @param __pos Index of character to search from (default 0). + * @return Index of first occurrence. + */ +- size_type +- find_first_not_of(__sv_type __sv, size_type __pos = 0) const noexcept +- { return this->find_first_not_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_first_not_of(const _Tp& __svt, size_type __pos = 0) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_first_not_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5439,13 +5612,19 @@ + #if __cplusplus > 201402L + /** + * @brief Find last position of a character not in a string_view. +- * @param __sv A string_view containing characters to avoid. ++ * @param __svt An object convertible to string_view containing ++ * characters to avoid. + * @param __pos Index of character to search back from (default end). + * @return Index of last occurrence. + */ +- size_type +- find_last_not_of(__sv_type __sv, size_type __pos = npos) const noexcept +- { return this->find_last_not_of(__sv.data(), __pos, __sv.size()); } ++ template ++ _If_sv<_Tp, size_type> ++ find_last_not_of(const _Tp& __svt, size_type __pos = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return this->find_last_not_of(__sv.data(), __pos, __sv.size()); ++ } + #endif // C++17 + + /** +@@ -5495,46 +5674,57 @@ + #if __cplusplus > 201402L + /** + * @brief Compare to a string_view. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare against. + * @return Integer < 0, 0, or > 0. + */ +- int +- compare(__sv_type __sv) const +- { +- const size_type __size = this->size(); +- const size_type __osize = __sv.size(); +- const size_type __len = std::min(__size, __osize); ++ template ++ _If_sv<_Tp, int> ++ compare(const _Tp& __svt) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ const size_type __size = this->size(); ++ const size_type __osize = __sv.size(); ++ const size_type __len = std::min(__size, __osize); + +- int __r = traits_type::compare(_M_data(), __sv.data(), __len); +- if (!__r) +- __r = _S_compare(__size, __osize); +- return __r; +- } ++ int __r = traits_type::compare(_M_data(), __sv.data(), __len); ++ if (!__r) ++ __r = _S_compare(__size, __osize); ++ return __r; ++ } + + /** + * @brief Compare to a string_view. + * @param __pos A position in the string to start comparing from. + * @param __n The number of characters to compare. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare ++ * against. + * @return Integer < 0, 0, or > 0. + */ +- int +- compare(size_type __pos, size_type __n, __sv_type __sv) const +- { return __sv_type(*this).substr(__pos, __n).compare(__sv); } ++ template ++ _If_sv<_Tp, int> ++ compare(size_type __pos, size_type __n, const _Tp& __svt) const ++ noexcept(is_same<_Tp, __sv_type>::value) ++ { ++ __sv_type __sv = __svt; ++ return __sv_type(*this).substr(__pos, __n).compare(__sv); ++ } + + /** + * @brief Compare to a string_view. + * @param __pos1 A position in the string to start comparing from. + * @param __n1 The number of characters to compare. +- * @param __sv A string_view to compare against. ++ * @param __svt An object convertible to string_view to compare ++ * against. + * @param __pos2 A position in the string_view to start comparing from. + * @param __n2 The number of characters to compare. + * @return Integer < 0, 0, or > 0. + */ +- template ++ template + _If_sv<_Tp, int> + compare(size_type __pos1, size_type __n1, const _Tp& __svt, + size_type __pos2, size_type __n2 = npos) const ++ noexcept(is_same<_Tp, __sv_type>::value) + { + __sv_type __sv = __svt; + return __sv_type(*this) +Index: libstdc++-v3/include/bits/istream.tcc +=================================================================== +--- a/src/libstdc++-v3/include/bits/istream.tcc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/istream.tcc (.../branches/gcc-7-branch) +@@ -48,28 +48,36 @@ + { + ios_base::iostate __err = ios_base::goodbit; + if (__in.good()) +- { +- if (__in.tie()) +- __in.tie()->flush(); +- if (!__noskip && bool(__in.flags() & ios_base::skipws)) +- { +- const __int_type __eof = traits_type::eof(); +- __streambuf_type* __sb = __in.rdbuf(); +- __int_type __c = __sb->sgetc(); ++ __try ++ { ++ if (__in.tie()) ++ __in.tie()->flush(); ++ if (!__noskip && bool(__in.flags() & ios_base::skipws)) ++ { ++ const __int_type __eof = traits_type::eof(); ++ __streambuf_type* __sb = __in.rdbuf(); ++ __int_type __c = __sb->sgetc(); + +- const __ctype_type& __ct = __check_facet(__in._M_ctype); +- while (!traits_type::eq_int_type(__c, __eof) +- && __ct.is(ctype_base::space, +- traits_type::to_char_type(__c))) +- __c = __sb->snextc(); ++ const __ctype_type& __ct = __check_facet(__in._M_ctype); ++ while (!traits_type::eq_int_type(__c, __eof) ++ && __ct.is(ctype_base::space, ++ traits_type::to_char_type(__c))) ++ __c = __sb->snextc(); + +- // _GLIBCXX_RESOLVE_LIB_DEFECTS +- // 195. Should basic_istream::sentry's constructor ever +- // set eofbit? +- if (traits_type::eq_int_type(__c, __eof)) +- __err |= ios_base::eofbit; +- } +- } ++ // _GLIBCXX_RESOLVE_LIB_DEFECTS ++ // 195. Should basic_istream::sentry's constructor ever ++ // set eofbit? ++ if (traits_type::eq_int_type(__c, __eof)) ++ __err |= ios_base::eofbit; ++ } ++ } ++ __catch(__cxxabiv1::__forced_unwind&) ++ { ++ __in._M_setstate(ios_base::badbit); ++ __throw_exception_again; ++ } ++ __catch(...) ++ { __in._M_setstate(ios_base::badbit); } + + if (__in.good() && __err == ios_base::goodbit) + _M_ok = true; +Index: libstdc++-v3/include/bits/sstream.tcc +=================================================================== +--- a/src/libstdc++-v3/include/bits/sstream.tcc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/sstream.tcc (.../branches/gcc-7-branch) +@@ -88,6 +88,25 @@ + return traits_type::not_eof(__c); + + const __size_type __capacity = _M_string.capacity(); ++ ++#if _GLIBCXX_USE_CXX11_ABI ++ if ((this->epptr() - this->pbase()) < __capacity) ++ { ++ // There is additional capacity in _M_string that can be used. ++ char_type* __base = const_cast(_M_string.data()); ++ _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase()); ++ if (_M_mode & ios_base::in) ++ { ++ const __size_type __nget = this->gptr() - this->eback(); ++ const __size_type __eget = this->egptr() - this->eback(); ++ this->setg(__base, __base + __nget, __base + __eget + 1); ++ } ++ *this->pptr() = traits_type::to_char_type(__c); ++ this->pbump(1); ++ return __c; ++ } ++#endif ++ + const __size_type __max_size = _M_string.max_size(); + const bool __testput = this->pptr() < this->epptr(); + if (__builtin_expect(!__testput && __capacity == __max_size, false)) +Index: libstdc++-v3/include/bits/char_traits.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/char_traits.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/char_traits.h (.../branches/gcc-7-branch) +@@ -40,6 +40,10 @@ + #include // For streampos + #include // For WEOF, wmemmove, wmemset, etc. + ++#ifndef _GLIBCXX_ALWAYS_INLINE ++#define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) ++#endif ++ + namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) + { + _GLIBCXX_BEGIN_NAMESPACE_VERSION +@@ -139,7 +143,7 @@ + { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } + }; + +-// #define __cpp_lib_constexpr_char_traits 201611 ++#define __cpp_lib_constexpr_char_traits 201611 + + template + _GLIBCXX14_CONSTEXPR int +@@ -212,6 +216,42 @@ + { + _GLIBCXX_BEGIN_NAMESPACE_VERSION + ++#if __cplusplus > 201402 ++ /** ++ * @brief Determine whether the characters of a NULL-terminated ++ * string are known at compile time. ++ * @param __s The string. ++ * ++ * Assumes that _CharT is a built-in character type. ++ */ ++ template ++ static _GLIBCXX_ALWAYS_INLINE constexpr bool ++ __constant_string_p(const _CharT* __s) ++ { ++ while (__builtin_constant_p(*__s) && *__s) ++ __s++; ++ return __builtin_constant_p(*__s); ++ } ++ ++ /** ++ * @brief Determine whether the characters of a character array are ++ * known at compile time. ++ * @param __a The character array. ++ * @param __n Number of characters. ++ * ++ * Assumes that _CharT is a built-in character type. ++ */ ++ template ++ static _GLIBCXX_ALWAYS_INLINE constexpr bool ++ __constant_char_array_p(const _CharT* __a, size_t __n) ++ { ++ size_t __i = 0; ++ while (__builtin_constant_p(__a[__i]) && __i < __n) ++ __i++; ++ return __i == __n; ++ } ++#endif ++ + // 21.1 + /** + * @brief Basis for explicit traits specializations. +@@ -256,21 +296,39 @@ + < static_cast(__c2)); + } + +- static /* _GLIBCXX17_CONSTEXPR */ int ++ static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { ++#if __cplusplus > 201402 ++ if (__builtin_constant_p(__n) ++ && __constant_char_array_p(__s1, __n) ++ && __constant_char_array_p(__s2, __n)) ++ return __gnu_cxx::char_traits::compare(__s1, __s2, __n); ++#endif + if (__n == 0) + return 0; + return __builtin_memcmp(__s1, __s2, __n); + } + +- static /* _GLIBCXX17_CONSTEXPR */ size_t ++ static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) +- { return __builtin_strlen(__s); } ++ { ++#if __cplusplus > 201402 ++ if (__constant_string_p(__s)) ++ return __gnu_cxx::char_traits::length(__s); ++#endif ++ return __builtin_strlen(__s); ++ } + +- static /* _GLIBCXX17_CONSTEXPR */ const char_type* ++ static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { ++#if __cplusplus > 201402 ++ if (__builtin_constant_p(__n) ++ && __builtin_constant_p(__a) ++ && __constant_char_array_p(__s, __n)) ++ return __gnu_cxx::char_traits::find(__s, __n, __a); ++#endif + if (__n == 0) + return 0; + return static_cast(__builtin_memchr(__s, __a, __n)); +@@ -347,24 +405,45 @@ + lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT + { return __c1 < __c2; } + +- static /* _GLIBCXX17_CONSTEXPR */ int ++ static _GLIBCXX17_CONSTEXPR int + compare(const char_type* __s1, const char_type* __s2, size_t __n) + { ++#if __cplusplus > 201402 ++ if (__builtin_constant_p(__n) ++ && __constant_char_array_p(__s1, __n) ++ && __constant_char_array_p(__s2, __n)) ++ return __gnu_cxx::char_traits::compare(__s1, __s2, __n); ++#endif + if (__n == 0) + return 0; +- return wmemcmp(__s1, __s2, __n); ++ else ++ return wmemcmp(__s1, __s2, __n); + } + +- static /* _GLIBCXX17_CONSTEXPR */ size_t ++ static _GLIBCXX17_CONSTEXPR size_t + length(const char_type* __s) +- { return wcslen(__s); } ++ { ++#if __cplusplus > 201402 ++ if (__constant_string_p(__s)) ++ return __gnu_cxx::char_traits::length(__s); ++ else ++#endif ++ return wcslen(__s); ++ } + +- static /* _GLIBCXX17_CONSTEXPR */ const char_type* ++ static _GLIBCXX17_CONSTEXPR const char_type* + find(const char_type* __s, size_t __n, const char_type& __a) + { ++#if __cplusplus > 201402 ++ if (__builtin_constant_p(__n) ++ && __builtin_constant_p(__a) ++ && __constant_char_array_p(__s, __n)) ++ return __gnu_cxx::char_traits::find(__s, __n, __a); ++#endif + if (__n == 0) + return 0; +- return wmemchr(__s, __a, __n); ++ else ++ return wmemchr(__s, __a, __n); + } + + static char_type* +Index: libstdc++-v3/include/bits/string_view.tcc +=================================================================== +--- a/src/libstdc++-v3/include/bits/string_view.tcc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/include/bits/string_view.tcc (.../branches/gcc-7-branch) +@@ -45,7 +45,7 @@ + _GLIBCXX_BEGIN_NAMESPACE_VERSION + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { +@@ -66,7 +66,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(_CharT __c, size_type __pos) const noexcept + { +@@ -82,7 +82,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { +@@ -102,7 +102,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(_CharT __c, size_type __pos) const noexcept + { +@@ -119,7 +119,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -135,7 +135,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -156,7 +156,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -168,7 +168,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(_CharT __c, size_type __pos) const noexcept + { +@@ -179,7 +179,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { +@@ -200,7 +200,7 @@ + } + + template +- typename basic_string_view<_CharT, _Traits>::size_type ++ constexpr typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(_CharT __c, size_type __pos) const noexcept + { +Index: libstdc++-v3/libsupc++/cxxabi.h +=================================================================== +--- a/src/libstdc++-v3/libsupc++/cxxabi.h (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/libsupc++/cxxabi.h (.../branches/gcc-7-branch) +@@ -182,7 +182,7 @@ + * with GNU extensions. For example, this function is used in + * __gnu_cxx::__verbose_terminate_handler. + * +- * See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch39.html ++ * See https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html + * for other examples of use. + * + * @note The same demangling functionality is available via +Index: libstdc++-v3/ChangeLog +=================================================================== +--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,317 @@ ++2017-09-21 Jonathan Wakely ++ ++ * testsuite/25_algorithms/clamp/1.cc: Fix order of arguments and ++ expected results when using predicate defining reverse order. ++ * testsuite/25_algorithms/clamp/constexpr.cc: Likewise. ++ ++2017-09-20 Jonathan Wakely ++ ++ Backport from mainline ++ 2017-06-14 Jonathan Wakely ++ ++ * doc/xml/manual/test.xml: Correct instructions on running tests. ++ * testsuite/27_io/basic_ios/copyfmt/char/1.cc: Adjust to pass when ++ -D_GLIBCXX_USE_CXX11_ABI=0 added to RUNTESTFLAGS. ++ * testsuite/27_io/basic_ios/exceptions/char/1.cc: Likewise. ++ * testsuite/27_io/basic_istream/extractors_arithmetic/char/ ++ exceptions_failbit.cc: Likewise. ++ * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/ ++ exceptions_failbit.cc: Likewise. ++ * testsuite/27_io/basic_istream/extractors_other/char/ ++ exceptions_null.cc: Likewise. ++ * testsuite/27_io/basic_istream/extractors_other/wchar_t/ ++ exceptions_null.cc: Likewise. ++ * testsuite/27_io/basic_istream/sentry/char/12297.cc: Likewise. ++ * testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc: Likewise. ++ * testsuite/27_io/basic_ostream/inserters_other/char/ ++ exceptions_null.cc: Likewise. ++ * testsuite/27_io/basic_ostream/inserters_other/wchar_t/ ++ exceptions_null.cc: Likewise. ++ * testsuite/27_io/ios_base/storage/2.cc: Likewise. ++ ++ PR libstdc++/79162 ++ * include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI] ++ (basic_string::_If_sv): Remove from the overload set when the ++ argument is derived from basic_string. ++ ++ PR libstdc++/79162 ++ * include/bits/basic_string.h (basic_string::_If_sv): Remove from the ++ overload set when the argument is derived from basic_string. ++ * testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc: New ++ test. ++ * testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc: ++ New test. ++ ++ * testsuite/24_iterators/range_access_cpp17.cc: Fix order of dg-do ++ and dg-options directives. Fix invalid test. ++ ++ Backport from mainline ++ 2017-09-20 Jonathan Wakely ++ ++ PR libstdc++/82262 ++ * include/std/optional (__optional_hash_call_base): Add template ++ parameter for remove_const_t<_Tp> and use it consistently. ++ * testsuite/20_util/optional/hash.cc: Test optional. ++ ++ Backport from mainline ++ 2017-09-19 Jonathan Wakely ++ ++ PR libstdc++/82254 ++ * include/std/type_traits (__is_invocable): Add partial specialization ++ for INVOKE case and remove is_void check from partial ++ specialization for INVOKE case. ++ (__is_nt_invocable_impl): New helper for is_nothrow_invocable_r. ++ (is_nothrow_invocable_r): Use __is_nt_invocable_impl. ++ * testsuite/20_util/is_nothrow_invocable/value.cc: Add tests for ++ conversions that can throw or fail to convert. Use static assert ++ strings to explain negative results. ++ * testsuite/20_util/is_nothrow_invocable/value_ext.cc: Use ++ is_nothrow_constructible in is_nt_invocable_conv. ++ ++2017-09-13 Jonathan Wakely ++ ++ Backport from mainline ++ 2017-09-04 Daniel Kruegler ++ ++ PR libstdc++/79162 ++ Implement LWG 2946, LWG 2758's resolution missed further corrections ++ * include/bits/basic_string.h (basic_string::compare): Add missing ++ required noexcept specifications. ++ (basic_string): Introduce internal _S_to_string_view and __sv_wrapper ++ for implicit string_view conversion. ++ (basic_string::basic_string): Fix explicit string_view conversion by ++ implicit conversion using _S_to_string_view and __sv_wrapper. ++ (basic_string): Introduce internal basic_string(__sv_wrapper, Alloc) ++ constructor. ++ (basic_string): Fix operator=(T) template by operator=(const T&) ++ template for uncopyable types (PR 79162). ++ (basic_string::operator+=, basic_string::append, basic_string::assign) ++ (basic_string::insert, basic_string::replace, basic_string::find) ++ (basic_string::rfind, basic_string::find_first_of) ++ (basic_string::find_last_of, basic_string::find_first_not_of) ++ (basic_string::find_last_not_of, basic_string::compare): Replace ++ __sv_type argument by template const T& (LWG 2946) and correct ++ documentation describing __sv_type argument. ++ (basic_string::find, basic_string::rfind, basic_string::find_first_of) ++ (basic_string::find_last_of, basic_string::find_first_not_of) ++ (basic_string::find_last_not_of, basic_string::compare): Replace ++ unconditional noexcept specification by conditional noexcept ++ specification to partially balance the removal of noexcept by LWG 2946. ++ * testsuite/21_strings/basic_string/79162.cc: New. ++ * testsuite/21_strings/basic_string/lwg2946.cc: New. ++ ++2017-09-13 Jonathan Wakely ++ ++ PR libstdc++/81468 ++ * include/std/chrono (time_point(const time_point<_Dur2>&)): Add ++ missing constraint from LWG DR 1177. ++ * testsuite/20_util/duration/cons/dr1177.cc: New. ++ * testsuite/20_util/time_point/cons/81468.cc: New. ++ * testsuite/20_util/duration/literals/range.cc: Update dg-error line. ++ ++ * doc/doxygen/mainpage.html: Fix broken URLs. ++ ++ PR libstdc++/81835 ++ * doc/xml/manual/extensions.xml: Replace unstable URL. ++ * doc/html/manual/ext_demangling.html: Regenerate. ++ * libsupc++/cxxabi.h (__cxa_demangle): Fix broken URL. ++ ++2017-09-12 Jonathan Wakely ++ ++ Backport from mainline ++ 2017-09-12 Jonathan Wakely ++ ++ PR libstdc++/70483 ++ * include/experimental/bits/string_view.tcc (basic_string_view::find) ++ (basic_string_view::rfind, basic_string_view::find_first_of) ++ (basic_string_view::find_last_of, basic_string_view::find_first_not_of) ++ (basic_string_view::find_last_not_of): Add constexpr specifier. ++ * include/experimental/string_view (basic_string_view::remove_prefix) ++ (basic_string_view::remove_suffix, basic_string_view::swap) ++ (basic_string_view::compare, basic_string_view::find) ++ (basic_string_view::rfind, basic_string_view::find_first_of) ++ (basic_string_view::find_last_of, basic_string_view::find_first_not_of) ++ (basic_string_view::find_last_not_of, operator==, operator!=) ++ (operator<, operator>, operator<=, operator>=): Likewise. ++ * testsuite/experimental/string_view/operations/compare/char/70483.cc: ++ New. ++ ++ Backport from mainline ++ 2017-09-11 Jonathan Wakely ++ ++ PR libstdc++/70483 ++ * include/bits/string_view.tcc (basic_string_view::find) ++ (basic_string_view::rfind, basic_string_view::find_first_of) ++ (basic_string_view::find_last_of, basic_string_view::find_first_not_of) ++ (basic_string_view::find_last_not_of): Add constexpr specifier. ++ * include/std/string_view (basic_string_view::operator=) ++ (basic_string_view::rbegin, basic_string_view::rend) ++ (basic_string_view::crbegin, basic_string_view::crend) ++ (basic_string_view::remove_prefix, basic_string_view::remove_suffix) ++ (basic_string_view::swap, basic_string_view::compare) ++ (basic_string_view::find, basic_string_view::rfind) ++ (basic_string_view::find_first_of, basic_string_view::find_last_of) ++ (basic_string_view::find_first_not_of) ++ (basic_string_view::find_last_not_of, basic_string_view::_M_check) ++ (basic_string_view::_M_limit, operator==, operator!=, operator<) ++ (operator>, operator<=, operator>=): Likewise. ++ * testsuite/21_strings/basic_string_view/modifiers/remove_prefix/ ++ char/1.cc: Repeat tests in constexpr context. ++ * testsuite/21_strings/basic_string_view/modifiers/remove_prefix/ ++ wchar_t/1.cc: Likewise. ++ * testsuite/21_strings/basic_string_view/modifiers/remove_suffix/ ++ char/1.cc: Likewise. ++ * testsuite/21_strings/basic_string_view/modifiers/remove_suffix/ ++ wchar_t/1.cc: Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/char/1.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/char/2.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/char/3.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operators/char/2.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/range_access/char/1.cc: Test ++ cbegin, cend, rbegin, rend, crbegin and crend. ++ * testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc: ++ Likewise. ++ * testsuite/21_strings/basic_string_view/operations/compare/char/1.cc: ++ Remove trailing whitespace. ++ * testsuite/21_strings/basic_string_view/operations/compare/wchar_t/ ++ 1.cc: Likewise. ++ * testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc: ++ New. ++ * testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc: ++ New. ++ * testsuite/21_strings/basic_string_view/operations/compare/char/2.cc: ++ New. ++ * testsuite/21_strings/basic_string_view/operations/compare/wchar_t/ ++ 2.cc: New. ++ ++ Backport from mainline ++ 2017-06-12 Pedro Alves ++ ++ * doc/xml/manual/status_cxx2017.xml: Update C++17 constexpr ++ char_traits status. ++ * doc/html/*: Regenerate. ++ ++ * include/bits/char_traits.h (_GLIBCXX_ALWAYS_INLINE): Define if ++ not already defined. ++ (__cpp_lib_constexpr_char_traits): Uncomment. ++ (__constant_string_p, __constant_char_array_p): New. ++ (std::char_traits, std::char_traits): Add ++ _GLIBCXX17_CONSTEXPR on compare, length and find and use ++ __constant_string_p, __constant_char_array_p and ++ __builtin_constant_p to defer to __gnu_cxx::char_traits at compile ++ time. ++ ++ * testsuite/21_strings/char_traits/requirements/ ++ constexpr_functions_c++17.cc: Uncomment ++ __cpp_lib_constexpr_char_traits tests. Uncomment ++ test_compare, test_length, test_find, ++ test_compare, test_length and test_find ++ static_assert tests. ++ ++2017-09-04 Jonathan Wakely ++ ++ Backport from mainline ++ 2017-08-31 Jonathan Wakely ++ ++ PR c++/82039 ++ * include/ext/new_allocator.h (__gnu_cxx::new_allocator::allocate): ++ Adjust null pointer constant to avoid warning. ++ ++ Backport from mainline ++ 2017-08-21 Jonathan Wakely ++ ++ PR libstdc++/81912 ++ * include/bits/stl_iterator_base_types.h (__iterator_category): Add ++ constexpr for C++11 and later. ++ * testsuite/24_iterators/container_access.cc: Add target selector. ++ * testsuite/24_iterators/range_access.cc: Fix clause number in ++ comment. ++ * testsuite/24_iterators/range_access_cpp14.cc: Likewise. ++ * testsuite/24_iterators/range_access_cpp17.cc: New. ++ ++ Backport from mainline ++ 2017-08-09 Jonathan Wakely ++ ++ * include/std/type_traits (_GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP): ++ Replace with _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP and use ++ __is_identifier to set it. ++ ++ Backport from mainline ++ 2017-08-09 Katsuhiko Nishimra ++ ++ * include/std/type_traits (_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE): Use ++ __is_identifier instead of __has_builtin. ++ ++ Backport from mainline ++ 2017-08-18 Jonathan Wakely ++ ++ PR libstdc++/81891 ++ * include/bits/hashtable.h (_Hashtable(_InputIterator, _InputIterator, ++ size_type, const _H1&, const _H2&, const _Hash&, const _Equal&, ++ const _ExtractKey&, const allocator_type&)): Let destructor do clean ++ up if an exception is thrown. ++ * testsuite/23_containers/unordered_map/cons/81891.cc: New. ++ ++ Backport from mainline ++ 2017-07-31 Marek Polacek ++ ++ PR libstdc++/81599 ++ * include/bits/stl_stack.h: Fix typo. ++ ++ Backport from mainline ++ 2017-07-10 Jonathan Wakely ++ ++ PR libstdc++/81338 ++ * include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] (basic_string): ++ Declare basic_stringbuf to be a friend. ++ * include/bits/sstream.tcc (basic_stringbuf::overflow) ++ [_GLIBCXX_USE_CXX11_ABI]: Use unused capacity before reallocating. ++ * include/std/sstream (basic_stringbuf::__xfer_bufptrs): Update string ++ length to buffer length. ++ * testsuite/27_io/basic_stringstream/assign/81338.cc: New. ++ ++2017-08-20 John David Anglin ++ ++ PR testsuite/81056 ++ * testsuite/17_intro/names.cc: Undef 'd' and 'r' on __hpux__. ++ ++2017-08-14 Jonathan Wakely ++ ++ Backport from mainline ++ 2017-08-09 Jonathan Wakely ++ ++ PR libstdc++/79820 ++ PR libstdc++/81751 ++ * config/io/basic_file_stdio.cc (sys_open(FILE*, ios_base::openmode)): ++ Call fflush on the stream instead of calling sync() while _M_cfile is ++ null. Restore original value of errno. ++ * testsuite/ext/stdio_filebuf/char/79820.cc: New. ++ * testsuite/ext/stdio_filebuf/char/81751.cc: New. ++ ++ Backport from mainline ++ 2017-07-25 Jonathan Wakely ++ ++ PR libstdc++/53984 ++ * include/bits/basic_ios.h (basic_ios::_M_setstate): Adjust comment. ++ * include/bits/istream.tcc (basic_istream::sentry): Handle exceptions ++ during construction. ++ * include/std/istream: Adjust comments for formatted input functions ++ and unformatted input functions. ++ * testsuite/27_io/basic_fstream/53984.cc: New. ++ * testsuite/27_io/basic_istream/sentry/char/53984.cc: New. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: libstdc++-v3/testsuite/25_algorithms/clamp/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc (.../branches/gcc-7-branch) +@@ -30,12 +30,12 @@ + VERIFY( y == 3 ); + VERIFY( z == 4 ); + +- const int xc = std::clamp(1, 2, 4, std::greater()); +- const int yc = std::clamp(3, 2, 4, std::greater()); +- const int zc = std::clamp(5, 2, 4, std::greater()); +- VERIFY( xc == 4 ); +- VERIFY( yc == 2 ); +- VERIFY( zc == 2 ); ++ const int xc = std::clamp(1, 4, 2, std::greater()); ++ const int yc = std::clamp(3, 4, 2, std::greater()); ++ const int zc = std::clamp(5, 4, 2, std::greater()); ++ VERIFY( xc == 2 ); ++ VERIFY( yc == 3 ); ++ VERIFY( zc == 4 ); + } + + int +Index: libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc (.../branches/gcc-7-branch) +@@ -27,5 +27,5 @@ + # error "Feature-test macro for clamp has wrong value" + #endif + +-static_assert(std::clamp(2, 0, 1) == 1, ""); +-static_assert(std::clamp(2, 0, 1, std::greater()) == 0, ""); ++static_assert(std::clamp(2, 0, 1) == 1); ++static_assert(std::clamp(2, 1, 0, std::greater()) == 1); +Index: libstdc++-v3/testsuite/24_iterators/container_access.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/24_iterators/container_access.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/24_iterators/container_access.cc (.../branches/gcc-7-branch) +@@ -1,4 +1,4 @@ +-// { dg-do run } ++// { dg-do run { target c++1z } } + // { dg-options "-std=gnu++17" } + + // Copyright (C) 2015-2017 Free Software Foundation, Inc. +@@ -62,7 +62,6 @@ + static_assert(s == 3); + constexpr auto e = std::empty(il3); + static_assert(!e); +- + } + + void +Index: libstdc++-v3/testsuite/24_iterators/range_access.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/24_iterators/range_access.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/24_iterators/range_access.cc (.../branches/gcc-7-branch) +@@ -17,7 +17,7 @@ + // with this library; see the file COPYING3. If not see + // . + +-// 24.6.5, range access [iterator.range] ++// C++ 2011 24.6.5, range access [iterator.range] + + #include + +Index: libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc (.../branches/gcc-7-branch) +@@ -17,7 +17,7 @@ + // with this library; see the file COPYING3. If not see + // . + +-// 24.6.5, range access [iterator.range] ++// C++ 2014 24.7, range access [iterator.range] + + #include + #include +Index: libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,57 @@ ++// { dg-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++// 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 ++// . ++ ++// C++ 2017 27.7, range access [iterator.range] ++ ++#include ++ ++void ++test01() ++{ ++ using std::reverse_iterator; ++ static int i[1]; ++ static_assert(std::cbegin(i) == i); ++ static_assert(std::cend(i) == i+1); ++ static_assert(std::rbegin(i) == reverse_iterator(i+1)); ++ static_assert(std::rend(i) == reverse_iterator(i)); ++ static_assert(std::crbegin(i) == reverse_iterator(i+1)); ++ static_assert(std::crend(i) == reverse_iterator(i)); ++} ++ ++void ++test02() ++{ ++ static int i[] = { 1, 2 }; ++ static_assert(std::distance(std::begin(i), std::end(i)) == 2); ++ static_assert(std::distance(std::cbegin(i), std::cend(i)) == 2); ++} ++ ++void ++test03() ++{ ++ using std::reverse_iterator; ++ static constexpr std::initializer_list il{1}; ++ static_assert(std::cbegin(il) == il.begin()); ++ static_assert(std::cend(il) == il.end()); ++ static_assert(std::rbegin(il) == reverse_iterator(il.end())); ++ static_assert(std::rend(il) == reverse_iterator(il.begin())); ++ static_assert(std::crbegin(il) == reverse_iterator(il.end())); ++ static_assert(std::crend(il) == reverse_iterator(il.begin())); ++} +Index: libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,53 @@ ++// 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-require-fileio "" } ++ ++#include ++#include ++#include ++#include ++ ++void ++test01() ++{ ++ FILE* out = std::fopen("81751.txt", "w"); ++ std::fwrite("Some words.", 1, 10, out); ++ ++ FILE* in1 = std::fopen("81751.txt", "r"); ++ __gnu_cxx::stdio_filebuf buf1(in1, std::ios::in, BUFSIZ); ++ int c = buf1.sgetc(); ++ VERIFY( c == std::char_traits::eof() ); // PR libstdc++/81751 ++ ++ std::fflush(out); ++ FILE* in2 = std::fopen("81751.txt", "r"); ++ __gnu_cxx::stdio_filebuf buf2(in2, std::ios::in, BUFSIZ); ++ c = buf2.sgetc(); ++ VERIFY( c == 'S' ); ++ ++ buf1.close(); ++ buf2.close(); ++ std::fclose(in1); ++ std::fclose(in2); ++ std::fclose(out); ++} ++ ++int ++main() ++{ ++ test01(); ++} +Index: libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,39 @@ ++// 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-require-fileio "" } ++ ++#include ++#include ++#include ++#include ++ ++void ++test01() ++{ ++ FILE* f = std::fopen("79820.txt", "w"); ++ std::fclose(f); ++ errno = 127; ++ __gnu_cxx::stdio_filebuf b(f, std::ios::out, BUFSIZ); ++ VERIFY(errno == 127); // PR libstdc++/79820 ++} ++ ++int ++main() ++{ ++ test01(); ++} +Index: libstdc++-v3/testsuite/23_containers/unordered_map/cons/81891.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/cons/81891.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/cons/81891.cc (.../branches/gcc-7-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 run { target c++11 } } ++ ++#include ++#include ++#include ++ ++struct fails_on_copy { ++ fails_on_copy() = default; ++ fails_on_copy(const fails_on_copy&) { throw 0; }; ++}; ++ ++using value_type = std::pair; ++ ++void ++test01() ++{ ++ value_type p; ++ try ++ { ++ std::unordered_map umap(&p, &p + 1); ++ } ++ catch(...) ++ { } ++} ++ ++void ++test02() ++{ ++ using Alloc = __gnu_test::tracker_allocator; ++ using std::hash; ++ using std::equal_to; ++ ++ value_type p; ++ try ++ { ++ std::unordered_map, equal_to, Alloc> ++ umap(&p, &p + 1); ++ } ++ catch(...) ++ { } ++ ++ using counter = __gnu_test::tracker_allocator_counter; ++ VERIFY(counter::get_allocation_count() == counter::get_deallocation_count()); ++} ++ ++int ++main() ++{ ++ test01(); ++ test02(); ++} +Index: libstdc++-v3/testsuite/27_io/basic_stringstream/assign/81338.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_stringstream/assign/81338.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_stringstream/assign/81338.cc (.../branches/gcc-7-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 run { target c++11 } } ++ ++#include ++#include ++ ++void ++test01() ++{ ++ std::stringstream ss; ++ for (int i = 0; i < 100; ++i) ++ { ++ ss << 'a'; ++ VERIFY( static_cast(ss) ); ++ VERIFY( ss.str() == "a" ); ++ ss = std::stringstream(); ++ } ++} ++ ++int ++main() ++{ ++ test01(); ++} +Index: libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc (.../branches/gcc-7-branch) +@@ -26,11 +26,8 @@ + // Skip test at -m64 on Darwin because RLIMITS are not being honored. + // Radar 6467883: 10.4/10.5 setrlimits are not honored by memory allocators + // Radar 6467884: 10.X systems are not robust when paging space is exceeded +-// { dg-skip-if "" { *-*-darwin* && lp64 } { "*" } { "" } } ++// { dg-skip-if "" { *-*-darwin* && lp64 } { "*" } { "" } } + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + #include +@@ -52,12 +49,19 @@ + // pword + ios.pword(1) = v; + VERIFY( ios.pword(1) == v ); +- +- try ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ ++ try + { + v = ios.pword(max); + } +- catch(std::ios_base::failure& obj) ++ catch(exception_type&) + { + // Ok. + VERIFY( ios.bad() ); +@@ -69,7 +73,7 @@ + VERIFY( v == 0 ); + + VERIFY( ios.pword(1) == v ); +- ++ + // max is different code path from max-1 + v = &test; + try +@@ -76,7 +80,7 @@ + { + v = ios.pword(std::numeric_limits::max()); + } +- catch(std::ios_base::failure& obj) ++ catch(exception_type&) + { + // Ok. + VERIFY( ios.bad() ); +@@ -90,12 +94,12 @@ + // iword + ios.iword(1) = 1; + VERIFY( ios.iword(1) == 1 ); +- +- try ++ ++ try + { + l = ios.iword(max); + } +- catch(std::ios_base::failure& obj) ++ catch(exception_type&) + { + // Ok. + VERIFY( ios.bad() ); +@@ -110,11 +114,11 @@ + + // max is different code path from max-1 + l = 1; +- try ++ try + { + l = ios.iword(std::numeric_limits::max()); + } +- catch(std::ios_base::failure& obj) ++ catch(exception_type&) + { + // Ok. + VERIFY( ios.bad() ); +Index: libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc (.../branches/gcc-7-branch) +@@ -17,9 +17,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + // 27.4.4.2 basic_ios member functions + + // NB: Don't include any other headers in this file. +@@ -36,13 +33,13 @@ + // basic_ios& copyfmt(const basic_ios& rhs) + { + std::ios ios_01(0); +- std::ios ios_02(0); ++ std::ios ios_02(0); + ios_01.exceptions(std::ios_base::eofbit); + ios_02.exceptions(std::ios_base::eofbit); +- ++ + try { +- ios_01.copyfmt(ios_02); +- } ++ ios_01.copyfmt(ios_02); ++ } + catch(...) { + VERIFY( false ); + } +@@ -49,8 +46,15 @@ + } + + { ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + std::ios ios_01(0); +- std::ios ios_02(0); ++ std::ios ios_02(0); + ios_01.clear(std::ios_base::eofbit); + ios_02.exceptions(std::ios_base::eofbit); + +@@ -57,8 +61,8 @@ + try { + ios_01.copyfmt(ios_02); + VERIFY( false ); +- } +- catch(std::ios_base::failure& fail) { ++ } ++ catch(exception_type&) { + VERIFY( true ); + } + catch(...) { +@@ -67,7 +71,7 @@ + } + } + +-int main() ++int main() + { + test02(); + return 0; +Index: libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc (.../branches/gcc-7-branch) +@@ -17,9 +17,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + // 27.4.4.2 basic_ios member functions + + // NB: Don't include any other headers in this file. +@@ -44,7 +41,7 @@ + std::ios ios_01(0); + try { + ios_01.exceptions(std::ios_base::eofbit); +- } ++ } + catch(...) { + VERIFY( false ); + } +@@ -53,13 +50,20 @@ + } + + { ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + std::ios ios_01(0); + ios_01.clear(std::ios_base::eofbit); + try { + ios_01.exceptions(std::ios_base::eofbit); + VERIFY( false ); +- } +- catch(std::ios_base::failure& fail) { ++ } ++ catch(exception_type&) { + iostate02 = ios_01.exceptions(); + VERIFY( static_cast(iostate02 & std::ios_base::eofbit) ); + } +@@ -69,7 +73,7 @@ + } + } + +-int main() ++int main() + { + test01(); + return 0; +Index: libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,64 @@ ++// 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-require-fileio "" } ++ ++// PR libstdc++/53984 ++ ++#include ++#include ++ ++void ++test01() ++{ ++ std::ifstream in("."); ++ if (in) ++ { ++ char c; ++ if (in.get(c)) ++ { ++ // Reading a directory doesn't produce an error on this target ++ // so the formatted input functions below wouldn't fail anyway ++ // (see PR libstdc++/81808). ++ return; ++ } ++ int x; ++ in.clear(); ++ // Formatted input function should set badbit, but not throw: ++ in >> x; ++ VERIFY( in.bad() ); ++ ++ in.clear(); ++ in.exceptions(std::ios::badbit); ++ try ++ { ++ // Formatted input function should set badbit, and throw: ++ in >> x; ++ VERIFY( false ); ++ } ++ catch (const std::exception&) ++ { ++ VERIFY( in.bad() ); ++ } ++ } ++} ++ ++int ++main() ++{ ++ test01(); ++} +Index: libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + // 27.6.1.1.2 class basic_istream::sentry + + #include +@@ -28,16 +25,23 @@ + using namespace std; + wistringstream stream; + stream.exceptions(ios_base::eofbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + wistream::sentry sentry(stream, false); + VERIFY( false ); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + VERIFY( stream.rdstate() == (ios_base::eofbit | ios_base::failbit) ); + } +- ++ + return 0; + } +Index: libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,41 @@ ++// 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 ++#include ++#include ++ ++struct SB : std::streambuf ++{ ++ virtual int_type underflow() { throw 1; } ++}; ++ ++void ++test01() ++{ ++ SB sb; ++ std::istream is(&sb); ++ int i; ++ is >> i; ++ VERIFY( is.bad() ); ++} ++ ++int ++main() ++{ ++ test01(); ++} +Index: libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc (.../branches/gcc-7-branch) +@@ -15,12 +15,8 @@ + // with this library; see the file COPYING3. If not see + // . + +- + // 27.6.1.1.2 class basic_istream::sentry + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + +@@ -29,16 +25,23 @@ + using namespace std; + istringstream stream; + stream.exceptions(ios_base::eofbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + istream::sentry sentry(stream, false); + VERIFY( false ); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + VERIFY( stream.rdstate() == (ios_base::eofbit | ios_base::failbit) ); + } +- ++ + return 0; + } +Index: libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + #include +@@ -38,12 +35,19 @@ + wistringstream stream; + stream.exceptions(ios_base::failbit); + ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + stream >> static_cast(0); + VERIFY( false ); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + } + +Index: libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + #include +@@ -38,12 +35,19 @@ + istringstream stream; + stream.exceptions(ios_base::failbit); + ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + stream >> static_cast(0); + VERIFY(false); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + } + +Index: libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + +@@ -29,7 +26,14 @@ + + wistringstream stream(L"jaylib - champion sound"); + stream.exceptions(ios_base::failbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + T i; +@@ -36,13 +40,13 @@ + stream >> i; + VERIFY( false ); + } +- catch (const ios_base::failure&) +- { ++ catch (const exception_type&) ++ { + // stream should set failbit and throw ios_base::failure. + VERIFY( stream.fail() ); + VERIFY( !stream.bad() ); + VERIFY( !stream.eof() ); +- } ++ } + catch(...) + { VERIFY( false ); } + } +Index: libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + +@@ -29,7 +26,14 @@ + + istringstream stream("jaylib - champion sound"); + stream.exceptions(ios_base::failbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + T i; +@@ -36,13 +40,13 @@ + stream >> i; + VERIFY( false ); + } +- catch (const ios_base::failure&) +- { ++ catch (const exception_type&) ++ { + // stream should set failbit and throw ios_base::failure. + VERIFY( stream.fail() ); + VERIFY( !stream.bad() ); + VERIFY( !stream.eof() ); +- } ++ } + catch(...) + { VERIFY( false ); } + } +Index: libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + #include +@@ -39,13 +36,20 @@ + + wostringstream stream; + stream.exceptions(ios_base::badbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + stream << static_cast(0); + VERIFY( false ); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + } + +Index: libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc (.../branches/gcc-7-branch) +@@ -15,9 +15,6 @@ + // with this library; see the file COPYING3. If not see + // . + +-// The library throws the new definition of std::ios::failure +-// { dg-options "-D_GLIBCXX_USE_CXX11_ABI=1" } +- + #include + #include + #include +@@ -39,13 +36,20 @@ + + ostringstream stream; + stream.exceptions(ios_base::badbit); +- ++ ++ // The library throws the new definition of std::ios::failure ++#if _GLIBCXX_USE_CXX11_ABI ++ typedef std::ios_base::failure exception_type; ++#else ++ typedef std::exception exception_type; ++#endif ++ + try + { + stream << static_cast(0); + VERIFY( false ); + } +- catch (ios_base::failure&) ++ catch (exception_type&) + { + } + +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -33,10 +33,29 @@ + VERIFY( str0 == wstring_view{L"olympus mo"} ); + } + ++constexpr bool ++test02() ++{ ++ using std::wstring_view; ++ ++ wstring_view str0{L"olympus mons"}; ++ wstring_view::pointer p = str0.data(); ++ str0.remove_suffix(2); ++ if ( str0.data() != p) ++ return false; ++ if ( str0.length() != 10 ) ++ return false; ++ if ( str0 != wstring_view{L"olympus mo"} ) ++ return false; ++ ++ return true; ++} ++ + int + main() + { + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc (.../branches/gcc-7-branch) +@@ -33,10 +33,29 @@ + VERIFY( str0 == string_view{"olympus mo"} ); + } + ++constexpr bool ++test02() ++{ ++ using std::string_view; ++ ++ string_view str0{"olympus mons"}; ++ string_view::pointer p = str0.data(); ++ str0.remove_suffix(2); ++ if ( str0.data() != p) ++ return false; ++ if ( str0.length() != 10 ) ++ return false; ++ if ( str0 != string_view{"olympus mo"} ) ++ return false; ++ ++ return true; ++} ++ + int + main() + { + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -33,10 +33,29 @@ + VERIFY( str0 == wstring_view{L"pus mons"} ); + } + ++constexpr bool ++test02() ++{ ++ using std::wstring_view; ++ ++ wstring_view str0{L"olympus mons"}; ++ wstring_view::pointer p = str0.data(); ++ str0.remove_prefix(4); ++ if ( str0.data() != p + 4) ++ return false; ++ if ( str0.length() != 8 ) ++ return false; ++ if ( str0 != wstring_view{L"pus mons"} ) ++ return false; ++ ++ return true; ++} ++ + int + main() + { + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc (.../branches/gcc-7-branch) +@@ -33,10 +33,29 @@ + VERIFY( str0 == string_view{"pus mons"} ); + } + ++constexpr bool ++test02() ++{ ++ using std::string_view; ++ ++ string_view str0{"olympus mons"}; ++ string_view::pointer p = str0.data(); ++ str0.remove_prefix(4); ++ if ( str0.data() != p + 4) ++ return false; ++ if ( str0.length() != 8 ) ++ return false; ++ if ( str0 != string_view{"pus mons"} ) ++ return false; ++ ++ return true; ++} ++ + int + main() + { + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,35 @@ ++// 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-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++#include ++ ++constexpr bool ++test01() ++{ ++ using std::wstring_view; ++ ++ wstring_view s1{L"last"}; ++ wstring_view s2{L"first"}; ++ ++ s1.swap(s2); ++ return s1 == L"first" && s2 == L"last"; ++} ++ ++static_assert( test01() ); +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,35 @@ ++// 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-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++#include ++ ++constexpr bool ++test01() ++{ ++ using std::string_view; ++ ++ string_view s1{"last"}; ++ string_view s2{"first"}; ++ ++ s1.swap(s2); ++ return s1 == "first" && s2 == "last"; ++} ++ ++static_assert( test01() ); +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -61,10 +61,10 @@ + csz01 = str01.find(str04, 5); + VERIFY( csz01 == 5 ); + csz01 = str01.find(str04, str01.size()); +- VERIFY( csz01 == str01.size() ); ++ VERIFY( csz01 == str01.size() ); + csz01 = str01.find(str04, str01.size()+1); +- VERIFY( csz01 == npos ); +- ++ VERIFY( csz01 == npos ); ++ + // size_type find(const wchar_t* s, size_type pos, size_type n) const; + csz01 = str01.find(str_lit01, 0, 3); + VERIFY( csz01 == 0 ); +@@ -85,10 +85,79 @@ + VERIFY( csz01 == npos ); + } + ++constexpr bool ++test02() ++{ ++ typedef std::wstring_view::size_type csize_type; ++ typedef std::wstring_view::const_reference cref; ++ typedef std::wstring_view::reference ref; ++ csize_type npos = std::wstring_view::npos; ++ csize_type csz01 = 0, csz02 = 0; ++ ++ const wchar_t str_lit01[] = L"mave"; ++ const std::wstring_view str01(L"mavericks, santa cruz"); ++ std::wstring_view str02(str_lit01); ++ std::wstring_view str03(L"s, s"); ++ std::wstring_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find(const wstring_view&, size_type pos = 0) const; ++ csz01 = str01.find(str01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str01, 4); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str02, 3); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find(str03, 3); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find(str03, 12); ++ VERIFY( csz01 == npos ); ++ ++ // An empty string_view consists of no characters ++ // therefore it should be found at every point in a string_view, ++ // except beyond the end ++ csz01 = str01.find(str04, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str04, 5); ++ VERIFY( csz01 == 5 ); ++ csz01 = str01.find(str04, str01.size()); ++ VERIFY( csz01 == str01.size() ); ++ csz01 = str01.find(str04, str01.size()+1); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find(const wchar_t* s, size_type pos, size_type n) const; ++ csz01 = str01.find(str_lit01, 0, 3); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str_lit01, 3, 0); ++ VERIFY( csz01 == 3 ); ++ ++ // size_type find(const wchar_t* s, size_type pos = 0) const; ++ csz01 = str01.find(str_lit01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str_lit01, 3); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find(wchar_t c, size_type pos = 0) const; ++ csz01 = str01.find(L'z'); ++ csz02 = str01.size() - 1; ++ VERIFY( csz01 == csz02 ); ++ csz01 = str01.find(L'/'); ++ VERIFY( csz01 == npos ); ++ ++ return true; ++} ++ + int + main() +-{ ++{ + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc (.../branches/gcc-7-branch) +@@ -59,13 +59,13 @@ + // An empty string_view consists of no characters + // therefore it should be found at every point in a string_view, + // except beyond the end +- // However, str1.find_first_of(str2,pos) finds the first character in ++ // However, str1.find_first_of(str2,pos) finds the first character in + // str1 (starting at pos) that exists in str2, which is none for empty str2 + csz01 = str01.find_first_of(str04, 0); + VERIFY( csz01 == npos ); + csz01 = str01.find_first_of(str04, 5); + VERIFY( csz01 == npos ); +- ++ + // size_type find_first_of(const wchar_t* s, size_type pos, size_type n) const; + csz01 = str01.find_first_of(str_lit01, 0, 3); + VERIFY( csz01 == 0 ); +@@ -84,10 +84,78 @@ + VERIFY( csz01 == csz02 ); + } + ++constexpr bool ++test04() ++{ ++ typedef std::wstring_view::size_type csize_type; ++ csize_type npos = std::wstring_view::npos; ++ csize_type csz01 = 0, csz02 = 0; ++ ++ const wchar_t str_lit01[] = L"mave"; ++ const std::wstring_view str01(L"mavericks, santa cruz"); ++ std::wstring_view str02(str_lit01); ++ std::wstring_view str03(L"s, s"); ++ std::wstring_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find_first_of(const wstring_view&, size_type pos = 0) const; ++ std::wstring_view str05(L"xena rulez"); ++ csz01 = str01.find_first_of(str01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str01, 4); ++ VERIFY( csz01 == 4 ); ++ csz01 = str01.find_first_of(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str02, 3); ++ VERIFY( csz01 == 3 ); ++ csz01 = str01.find_first_of(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_of(str03, 3); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_of(str03, 12); ++ VERIFY( csz01 == 16 ); ++ csz01 = str01.find_first_of(str05, 0); ++ VERIFY( csz01 == 1 ); ++ csz01 = str01.find_first_of(str05, 4); ++ VERIFY( csz01 == 4 ); ++ ++ // An empty string_view consists of no characters ++ // therefore it should be found at every point in a string_view, ++ // except beyond the end ++ // However, str1.find_first_of(str2,pos) finds the first character in ++ // str1 (starting at pos) that exists in str2, which is none for empty str2 ++ csz01 = str01.find_first_of(str04, 0); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_of(str04, 5); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_of(const wchar_t* s, size_type pos, size_type n) const; ++ csz01 = str01.find_first_of(str_lit01, 0, 3); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str_lit01, 3, 0); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_of(const wchar_t* s, size_type pos = 0) const; ++ csz01 = str01.find_first_of(str_lit01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str_lit01, 3); ++ VERIFY( csz01 == 3 ); ++ ++ // size_type find_first_of(wchar_t c, size_type pos = 0) const; ++ csz01 = str01.find_first_of(L'z'); ++ csz02 = str01.size() - 1; ++ VERIFY( csz01 == csz02 ); ++ ++ return true; ++} ++ + int + main() +-{ ++{ + test02(); ++ static_assert( test04() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc (.../branches/gcc-7-branch) +@@ -84,10 +84,78 @@ + VERIFY( csz01 == npos ); + } + ++constexpr bool ++test04() ++{ ++ typedef std::wstring_view::size_type csize_type; ++ csize_type npos = std::wstring_view::npos; ++ csize_type csz01 = 0; ++ ++ const std::wstring_view str01(L"Bob Rock, per me"); ++ const wchar_t str_lit01[] = L"Bob Rock"; ++ std::wstring_view str02(L"ovvero Trivi"); ++ std::wstring_view str03(str_lit01); ++ std::wstring_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find_first_not_of(const string_view&, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of(str01); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_not_of(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str02, 10); ++ VERIFY( csz01 == 10 ); ++ csz01 = str01.find_first_not_of(str02, 12); ++ VERIFY( csz01 == 14 ); ++ csz01 = str01.find_first_not_of(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_not_of(str03, 15); ++ VERIFY( csz01 == 15 ); ++ csz01 = str01.find_first_not_of(str03, 16); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_not_of(str04, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str04, 12); ++ VERIFY( csz01 == 12 ); ++ csz01 = str03.find_first_not_of(str01, 0); ++ VERIFY( csz01 == npos ); ++ csz01 = str04.find_first_not_of(str02, 0); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_not_of(const char* s, size_type pos, size_type n) const; ++ csz01 = str01.find_first_not_of(str_lit01, 0, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str_lit01, 0, 8); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_not_of(str_lit01, 10, 0); ++ VERIFY( csz01 == 10 ); ++ ++ // size_type find_first_not_of(const char* s, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of(str_lit01); ++ VERIFY( csz01 == 8 ); ++ csz01 = str02.find_first_not_of(str_lit01, 2); ++ VERIFY( csz01 == 2 ); ++ ++ // size_type find_first_not_of(char c, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of(L'B'); ++ VERIFY( csz01 == 1 ); ++ csz01 = str01.find_first_not_of(L'o', 1); ++ VERIFY( csz01 == 2 ); ++ csz01 = str02.find_first_not_of(L'z'); ++ VERIFY( csz01 == 0 ); ++ csz01 = str04.find_first_not_of(L'S'); ++ VERIFY( csz01 == npos ); ++ ++ return true; ++} ++ + int + main() +-{ ++{ + test03(); ++ static_assert( test04() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc (.../branches/gcc-7-branch) +@@ -61,10 +61,10 @@ + csz01 = str01.find(str04, 5); + VERIFY( csz01 == 5 ); + csz01 = str01.find(str04, str01.size()); +- VERIFY( csz01 == str01.size() ); ++ VERIFY( csz01 == str01.size() ); + csz01 = str01.find(str04, str01.size()+1); +- VERIFY( csz01 == npos ); +- ++ VERIFY( csz01 == npos ); ++ + // size_type find(const char* s, size_type pos, size_type n) const; + csz01 = str01.find(str_lit01, 0, 3); + VERIFY( csz01 == 0 ); +@@ -85,10 +85,80 @@ + VERIFY( csz01 == npos ); + } + ++constexpr bool ++test02() ++{ ++ typedef std::string_view::size_type csize_type; ++ typedef std::string_view::const_reference cref; ++ typedef std::string_view::reference ref; ++ csize_type npos = std::string_view::npos; ++ csize_type csz01 = 0, csz02 = 0; ++ ++ const char str_lit01[] = "mave"; ++ const std::string_view str01("mavericks, santa cruz"); ++ std::string_view str02(str_lit01); ++ std::string_view str03("s, s"); ++ std::string_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find(const string_view&, size_type pos = 0) const; ++ csz01 = str01.find(str01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str01, 4); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str02, 3); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find(str03, 3); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find(str03, 12); ++ VERIFY( csz01 == npos ); ++ ++ // An empty string_view consists of no characters ++ // therefore it should be found at every point in a string_view, ++ // except beyond the end ++ csz01 = str01.find(str04, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str04, 5); ++ VERIFY( csz01 == 5 ); ++ csz01 = str01.find(str04, str01.size()); ++ VERIFY( csz01 == str01.size() ); ++ csz01 = str01.find(str04, str01.size()+1); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find(const char* s, size_type pos, size_type n) const; ++ csz01 = str01.find(str_lit01, 0, 3); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str_lit01, 3, 0); ++ VERIFY( csz01 == 3 ); ++ ++ // size_type find(const char* s, size_type pos = 0) const; ++ csz01 = str01.find(str_lit01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find(str_lit01, 3); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find(char c, size_type pos = 0) const; ++ csz01 = str01.find('z'); ++ csz02 = str01.size() - 1; ++ VERIFY( csz01 == csz02 ); ++ csz01 = str01.find('/'); ++ VERIFY( csz01 == npos ); ++ ++ return true; ++} ++ ++ + int + main() +-{ ++{ + test01(); ++ static_assert( test02() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc (.../branches/gcc-7-branch) +@@ -59,13 +59,13 @@ + // An empty string_view consists of no characters + // therefore it should be found at every point in a string_view, + // except beyond the end +- // However, str1.find_first_of(str2,pos) finds the first character in ++ // However, str1.find_first_of(str2,pos) finds the first character in + // str1 (starting at pos) that exists in str2, which is none for empty str2 + csz01 = str01.find_first_of(str04, 0); + VERIFY( csz01 == npos ); + csz01 = str01.find_first_of(str04, 5); + VERIFY( csz01 == npos ); +- ++ + // size_type find_first_of(const char* s, size_type pos, size_type n) const; + csz01 = str01.find_first_of(str_lit01, 0, 3); + VERIFY( csz01 == 0 ); +@@ -84,10 +84,78 @@ + VERIFY( csz01 == csz02 ); + } + ++constexpr bool ++test03() ++{ ++ typedef std::string_view::size_type csize_type; ++ csize_type npos = std::string_view::npos; ++ csize_type csz01 = 0, csz02 = 0; ++ ++ const char str_lit01[] = "mave"; ++ const std::string_view str01("mavericks, santa cruz"); ++ std::string_view str02(str_lit01); ++ std::string_view str03("s, s"); ++ std::string_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find_first_of(const string_view&, size_type pos = 0) const; ++ std::string_view str05("xena rulez"); ++ csz01 = str01.find_first_of(str01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str01, 4); ++ VERIFY( csz01 == 4 ); ++ csz01 = str01.find_first_of(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str02, 3); ++ VERIFY( csz01 == 3 ); ++ csz01 = str01.find_first_of(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_of(str03, 3); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_of(str03, 12); ++ VERIFY( csz01 == 16 ); ++ csz01 = str01.find_first_of(str05, 0); ++ VERIFY( csz01 == 1 ); ++ csz01 = str01.find_first_of(str05, 4); ++ VERIFY( csz01 == 4 ); ++ ++ // An empty string_view consists of no characters ++ // therefore it should be found at every point in a string_view, ++ // except beyond the end ++ // However, str1.find_first_of(str2,pos) finds the first character in ++ // str1 (starting at pos) that exists in str2, which is none for empty str2 ++ csz01 = str01.find_first_of(str04, 0); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_of(str04, 5); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_of(const char* s, size_type pos, size_type n) const; ++ csz01 = str01.find_first_of(str_lit01, 0, 3); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str_lit01, 3, 0); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_of(const char* s, size_type pos = 0) const; ++ csz01 = str01.find_first_of(str_lit01); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_of(str_lit01, 3); ++ VERIFY( csz01 == 3 ); ++ ++ // size_type find_first_of(char c, size_type pos = 0) const; ++ csz01 = str01.find_first_of('z'); ++ csz02 = str01.size() - 1; ++ VERIFY( csz01 == csz02 ); ++ ++ return true; ++} ++ + int + main() +-{ ++{ + test02(); ++ static_assert( test03() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc (.../branches/gcc-7-branch) +@@ -84,10 +84,78 @@ + VERIFY( csz01 == npos ); + } + ++constexpr bool ++test04() ++{ ++ typedef std::string_view::size_type csize_type; ++ csize_type npos = std::string_view::npos; ++ csize_type csz01 = 0; ++ ++ const std::string_view str01("Bob Rock, per me"); ++ const char str_lit01[] = "Bob Rock"; ++ std::string_view str02("ovvero Trivi"); ++ std::string_view str03(str_lit01); ++ std::string_view str04; ++ ++#undef VERIFY ++#define VERIFY(x) if(!(x)) return false ++ ++ // size_type find_first_not_of(const string_view&, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of(str01); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_not_of(str02, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str02, 10); ++ VERIFY( csz01 == 10 ); ++ csz01 = str01.find_first_not_of(str02, 12); ++ VERIFY( csz01 == 14 ); ++ csz01 = str01.find_first_not_of(str03, 0); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_not_of(str03, 15); ++ VERIFY( csz01 == 15 ); ++ csz01 = str01.find_first_not_of(str03, 16); ++ VERIFY( csz01 == npos ); ++ csz01 = str01.find_first_not_of(str04, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str04, 12); ++ VERIFY( csz01 == 12 ); ++ csz01 = str03.find_first_not_of(str01, 0); ++ VERIFY( csz01 == npos ); ++ csz01 = str04.find_first_not_of(str02, 0); ++ VERIFY( csz01 == npos ); ++ ++ // size_type find_first_not_of(const char* s, size_type pos, size_type n) const; ++ csz01 = str01.find_first_not_of(str_lit01, 0, 0); ++ VERIFY( csz01 == 0 ); ++ csz01 = str01.find_first_not_of(str_lit01, 0, 8); ++ VERIFY( csz01 == 8 ); ++ csz01 = str01.find_first_not_of(str_lit01, 10, 0); ++ VERIFY( csz01 == 10 ); ++ ++ // size_type find_first_not_of(const char* s, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of(str_lit01); ++ VERIFY( csz01 == 8 ); ++ csz01 = str02.find_first_not_of(str_lit01, 2); ++ VERIFY( csz01 == 2 ); ++ ++ // size_type find_first_not_of(char c, size_type pos = 0) const; ++ csz01 = str01.find_first_not_of('B'); ++ VERIFY( csz01 == 1 ); ++ csz01 = str01.find_first_not_of('o', 1); ++ VERIFY( csz01 == 2 ); ++ csz01 = str02.find_first_not_of('z'); ++ VERIFY( csz01 == 0 ); ++ csz01 = str04.find_first_not_of('S'); ++ VERIFY( csz01 == npos ); ++ ++ return true; ++} ++ + int + main() +-{ ++{ + test03(); ++ static_assert( test04() ); + + return 0; + } +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -62,9 +62,9 @@ + VERIFY(pass); + return 0; + } +- + +-int ++ ++int + test01() + { + using std::wstring_view; +@@ -74,7 +74,7 @@ + wstring_view str_2; + + //sanity check +- test_value(wcscmp(L"costa marbella", L"costa rica"), lt); ++ test_value(wcscmp(L"costa marbella", L"costa rica"), lt); + test_value(wcscmp(L"costa rica", L"costa rica"), z); + test_value(wcscmp(str_1.data(), str_0.data()), lt); + test_value(wcscmp(str_0.data(), str_1.data()), gt); +@@ -100,8 +100,8 @@ + test_value(str_1.compare(0, 4, str_2), z); + test_value(str_1.compare(0, 5, str_2), gt); + +- // int compare(size_type pos1, size_type n1, const basic_string_view& str, +- // size_type pos2, size_type n2) const; ++ // int compare(size_type pos1, size_type n1, const basic_string_view& str, ++ // size_type pos2, size_type n2) const; + test_value(str_1.compare(0, 6, str_0, 0, 6), z); + test_value(str_1.compare(0, 7, str_0, 0, 7), lt); + test_value(str_0.compare(0, 7, str_1, 0, 7), gt); +@@ -111,21 +111,21 @@ + test_value(str_1.compare(L"costa rica"), lt); + str_2 = str_0; + test_value(str_2.compare(L"costa rica"), z); +- test_value(str_2.compare(L"cost"), gt); +- test_value(str_2.compare(L"costa ricans"), lt); ++ test_value(str_2.compare(L"cost"), gt); ++ test_value(str_2.compare(L"costa ricans"), lt); + + // int compare(size_type pos, size_type n1, const charT* str, + // size_type n2 = npos) const; +- test_value(str_1.compare(0, 6, L"costa rica", 0, 6), z); +- test_value(str_1.compare(0, 7, L"costa rica", 0, 7), lt); +- test_value(str_0.compare(0, 7, L"costa marbella", 0, 7), gt); ++ test_value(str_1.compare(0, 6, L"costa rica", 0, 6), z); ++ test_value(str_1.compare(0, 7, L"costa rica", 0, 7), lt); ++ test_value(str_0.compare(0, 7, L"costa marbella", 0, 7), gt); + + return 0; + } + + +-int +-main() ++int ++main() + { + test01(); + +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,30 @@ ++// 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-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++#include ++ ++constexpr wchar_t c1[] = L"one"; ++constexpr wchar_t c2[] = L"two"; ++ ++constexpr std::wstring_view s1{c1}; ++constexpr std::wstring_view s2{c2}; ++ ++constexpr int n1 = s1.compare(s1); ++constexpr int n2 = s1.compare(s2); +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc (.../branches/gcc-7-branch) +@@ -62,9 +62,8 @@ + VERIFY(pass); + return 0; + } +- + +-int ++int + test01() + { + using std::string_view; +@@ -74,7 +73,7 @@ + string_view str_2; + + //sanity check +- test_value(strcmp("costa marbella", "costa rica"), lt); ++ test_value(strcmp("costa marbella", "costa rica"), lt); + test_value(strcmp("costa rica", "costa rica"), z); + test_value(strcmp(str_1.data(), str_0.data()), lt); + test_value(strcmp(str_0.data(), str_1.data()), gt); +@@ -100,8 +99,8 @@ + test_value(str_1.compare(0, 4, str_2), z); + test_value(str_1.compare(0, 5, str_2), gt); + +- // int compare(size_type pos1, size_type n1, const basic_string_view& str, +- // size_type pos2, size_type n2) const; ++ // int compare(size_type pos1, size_type n1, const basic_string_view& str, ++ // size_type pos2, size_type n2) const; + test_value(str_1.compare(0, 6, str_0, 0, 6), z); + test_value(str_1.compare(0, 7, str_0, 0, 7), lt); + test_value(str_0.compare(0, 7, str_1, 0, 7), gt); +@@ -111,21 +110,21 @@ + test_value(str_1.compare("costa rica"), lt); + str_2 = str_0; + test_value(str_2.compare("costa rica"), z); +- test_value(str_2.compare("cost"), gt); +- test_value(str_2.compare("costa ricans"), lt); ++ test_value(str_2.compare("cost"), gt); ++ test_value(str_2.compare("costa ricans"), lt); + + // int compare(size_type pos, size_type n1, const charT* str, + // size_type n2 = npos) const; +- test_value(str_1.compare(0, 6, "costa rica", 0, 6), z); +- test_value(str_1.compare(0, 7, "costa rica", 0, 7), lt); +- test_value(str_0.compare(0, 7, "costa marbella", 0, 7), gt); ++ test_value(str_1.compare(0, 6, "costa rica", 0, 6), z); ++ test_value(str_1.compare(0, 7, "costa rica", 0, 7), lt); ++ test_value(str_0.compare(0, 7, "costa marbella", 0, 7), gt); + + return 0; + } + + +-int +-main() ++int ++main() + { + test01(); + +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,30 @@ ++// 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-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++#include ++ ++constexpr char c1[] = "one"; ++constexpr char c2[] = "two"; ++ ++constexpr std::string_view s1{c1}; ++constexpr std::string_view s2{c2}; ++ ++constexpr int n1 = s1.compare(s1); ++constexpr int n2 = s1.compare(s2); +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,89 @@ ++// 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-options "-std=gnu++17" } ++// { dg-do compile { target c++1z } } ++ ++#include ++ ++struct constexpr_char_traits : std::char_traits ++{ ++ static constexpr size_t ++ length(const char* val) ++ { ++ size_t res = 0; ++ for (; val[res] != '\0'; ++res) ++ ; ++ return res; ++ } ++ ++ static constexpr int ++ compare(const char* lhs, const char* rhs, std::size_t count) ++ { ++ for (size_t pos = 0; pos < count; ++pos) ++ { ++ if (lhs[pos] != rhs[pos]) ++ return lhs[pos] - rhs[pos]; ++ } ++ return 0; ++ } ++}; ++ ++using string_view = std::basic_string_view; ++ ++constexpr ++string_view get() ++{ ++ string_view res = "x::"; ++ string_view start_pattern = "x"; ++ res = res.substr(res.find(start_pattern) + start_pattern.size()); ++ res = res.substr(0, res.find_first_of(";]")); ++ res = res.substr(res.rfind("::")); ++ return res; ++} ++ ++static_assert( get() == get() ); ++ ++using std::u16string_view; ++ ++constexpr ++u16string_view get16() ++{ ++ u16string_view res = u"x::"; ++ u16string_view start_pattern = u"x"; ++ res = res.substr(res.find(start_pattern) + start_pattern.size()); ++ res = res.substr(0, res.find_first_of(u";]")); ++ res = res.substr(res.rfind(u"::")); ++ return res; ++} ++ ++static_assert( get16() == get16() ); ++ ++using std::u32string_view; ++ ++constexpr ++u32string_view get32() ++{ ++ u32string_view res = U"x::"; ++ u32string_view start_pattern = U"x"; ++ res = res.substr(res.find(start_pattern) + start_pattern.size()); ++ res = res.substr(0, res.find_first_of(U";]")); ++ res = res.substr(res.rfind(U"::")); ++ return res; ++} ++ ++static_assert( get32() == get32() ); +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc (.../branches/gcc-7-branch) +@@ -18,7 +18,7 @@ + // with this library; see the file COPYING3. If not see + // . + +-// 24.6.5, range access [iterator.range] ++// C++17 27.7, range access [iterator.range] + + #include + +@@ -25,9 +25,23 @@ + void + test01() + { +-#ifdef _GLIBCXX_USE_WCHAR_T + std::wstring_view ws(L"Hello, World!"); + std::begin(ws); + std::end(ws); +-#endif ++ std::rbegin(ws); ++ std::rend(ws); + } ++ ++void ++test02() ++{ ++ constexpr std::wstring_view ws(L"Hello, World!"); ++ [[maybe_unused]] constexpr auto b = std::begin(ws); ++ [[maybe_unused]] constexpr auto e = std::end(ws); ++ [[maybe_unused]] constexpr auto cb = std::cbegin(ws); ++ [[maybe_unused]] constexpr auto ce = std::cend(ws); ++ [[maybe_unused]] constexpr auto rb = std::rbegin(ws); ++ [[maybe_unused]] constexpr auto re = std::rend(ws); ++ [[maybe_unused]] constexpr auto crb = std::crbegin(ws); ++ [[maybe_unused]] constexpr auto cre = std::crend(ws); ++} +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc (.../branches/gcc-7-branch) +@@ -18,7 +18,7 @@ + // with this library; see the file COPYING3. If not see + // . + +-// 24.6.5, range access [iterator.range] ++// C++17 27.7, range access [iterator.range] + + #include + +@@ -28,4 +28,20 @@ + std::string_view s("Hello, World!"); + std::begin(s); + std::end(s); ++ std::rbegin(s); ++ std::rend(s); + } ++ ++void ++test02() ++{ ++ constexpr std::string_view s("Hello, World!"); ++ [[maybe_unused]] constexpr auto b = std::begin(s); ++ [[maybe_unused]] constexpr auto e = std::end(s); ++ [[maybe_unused]] constexpr auto cb = std::cbegin(s); ++ [[maybe_unused]] constexpr auto ce = std::cend(s); ++ [[maybe_unused]] constexpr auto rb = std::rbegin(s); ++ [[maybe_unused]] constexpr auto re = std::rend(s); ++ [[maybe_unused]] constexpr auto crb = std::crbegin(s); ++ [[maybe_unused]] constexpr auto cre = std::crend(s); ++} +Index: libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc (.../branches/gcc-7-branch) +@@ -45,7 +45,7 @@ + const basic_string_view& rhs); + + template +- bool operator!=(const basic_string_view& lhs, ++ bool operator!=(const basic_string_view& lhs, + const charT* rhs); + */ + +@@ -60,7 +60,7 @@ + const charT* rhs); + + template +- bool operator< (const charT* lhs, ++ bool operator< (const charT* lhs, + const basic_string_view& rhs); + */ + +@@ -112,7 +112,7 @@ + #include + #include + +-int ++void + test01() + { + std::wstring_view str_0(L"costa rica"); +@@ -120,7 +120,7 @@ + std::wstring_view str_2(L"cost"); + std::wstring_view str_3(L"costa ricans"); + std::wstring_view str_4; +- ++ + str_4 = str_0; + //comparisons between string_view objects + VERIFY( !(str_0 == str_1) ); +@@ -140,7 +140,7 @@ + VERIFY( str_3 != str_0 ); + VERIFY( !(str_0 != str_4) ); + VERIFY( !(str_4 != str_0) ); +- ++ + VERIFY( str_0 > str_1 ); //true cuz r>m + VERIFY( str_0 > str_2 ); + VERIFY( !(str_0 > str_3) ); +@@ -231,14 +231,137 @@ + VERIFY( !(L"costa ricans" <= str_0) ); + VERIFY( L"costa rica" <= str_0 ); + VERIFY( str_0 <= L"costa rica" ); ++} + +- return 0; ++constexpr bool ++test02() ++{ ++ std::wstring_view str_0(L"costa rica"); ++ std::wstring_view str_1(L"costa marbella"); ++ std::wstring_view str_2(L"cost"); ++ std::wstring_view str_3(L"costa ricans"); ++ std::wstring_view str_4; ++ ++#undef VERIFY ++#define VERIFY(x) if (!(x)) return false ++ ++ str_4 = str_0; ++ //comparisons between string_view objects ++ VERIFY( !(str_0 == str_1) ); ++ VERIFY( !(str_0 == str_2) ); ++ VERIFY( !(str_0 == str_3) ); ++ VERIFY( !(str_1 == str_0) ); ++ VERIFY( !(str_2 == str_0) ); ++ VERIFY( !(str_3 == str_0) ); ++ VERIFY( str_4 == str_0 ); ++ VERIFY( str_0 == str_4 ); ++ ++ VERIFY( str_0 != str_1 ); ++ VERIFY( str_0 != str_2 ); ++ VERIFY( str_0 != str_3 ); ++ VERIFY( str_1 != str_0 ); ++ VERIFY( str_2 != str_0 ); ++ VERIFY( str_3 != str_0 ); ++ VERIFY( !(str_0 != str_4) ); ++ VERIFY( !(str_4 != str_0) ); ++ ++ VERIFY( str_0 > str_1 ); //true cuz r>m ++ VERIFY( str_0 > str_2 ); ++ VERIFY( !(str_0 > str_3) ); ++ VERIFY( !(str_1 > str_0) ); //false cuz m str_0) ); ++ VERIFY( str_3 > str_0 ); ++ VERIFY( !(str_0 > str_4) ); ++ VERIFY( !(str_4 > str_0) ); ++ ++ VERIFY( !(str_0 < str_1) ); //false cuz r>m ++ VERIFY( !(str_0 < str_2) ); ++ VERIFY( str_0 < str_3 ); ++ VERIFY( str_1 < str_0 ); //true cuz m= str_1 ); //true cuz r>m ++ VERIFY( str_0 >= str_2 ); ++ VERIFY( !(str_0 >= str_3) ); ++ VERIFY( !(str_1 >= str_0) );//false cuz m= str_0) ); ++ VERIFY( str_3 >= str_0 ); ++ VERIFY( str_0 >= str_4 ); ++ VERIFY( str_4 >= str_0 ); ++ ++ VERIFY( !(str_0 <= str_1) );//false cuz r>m ++ VERIFY( !(str_0 <= str_2) ); ++ VERIFY( str_0 <= str_3 ); ++ VERIFY( str_1 <= str_0 );//true cuz m L"costa marbella" ); //true cuz r>m ++ VERIFY( str_0 > L"cost" ); ++ VERIFY( !(str_0 > L"costa ricans") ); ++ VERIFY( !(L"costa marbella" > str_0) );//false cuz m str_0) ); ++ VERIFY( L"costa ricans" > str_0 ); ++ VERIFY( !(L"costa rica" > str_0) ); ++ VERIFY( !(str_0 > L"costa rica") ); ++ ++ VERIFY( !(str_0 < L"costa marbella") );//false cuz r>m ++ VERIFY( !(str_0 < L"cost") ); ++ VERIFY( str_0 < L"costa ricans" ); ++ VERIFY( L"costa marbella" < str_0 );//true cuz m= L"costa marbella" );//true cuz r>m ++ VERIFY( str_0 >= L"cost" ); ++ VERIFY( !(str_0 >= L"costa ricans") ); ++ VERIFY( !(L"costa marbella" >= str_0) );//false cuz m= str_0) ); ++ VERIFY( L"costa ricans" >= str_0 ); ++ VERIFY( L"costa rica" >= str_0 ); ++ VERIFY( str_0 >= L"costa rica" ); ++ ++ VERIFY( !(str_0 <= L"costa marbella") );//false cuz r>m ++ VERIFY( !(str_0 <= L"cost") ); ++ VERIFY( str_0 <= L"costa ricans" ); ++ VERIFY( L"costa marbella" <= str_0 );//true cuz m + #include + +-int ++void + test01() + { + std::string_view str_0("costa rica"); +@@ -120,7 +120,7 @@ + std::string_view str_2("cost"); + std::string_view str_3("costa ricans"); + std::string_view str_4; +- ++ + str_4 = str_0; + //comparisons between string objects + VERIFY( !(str_0 == str_1) ); +@@ -140,7 +140,7 @@ + VERIFY( str_3 != str_0 ); + VERIFY( !(str_0 != str_4) ); + VERIFY( !(str_4 != str_0) ); +- ++ + VERIFY( str_0 > str_1 ); //true cuz r>m + VERIFY( str_0 > str_2 ); + VERIFY( !(str_0 > str_3) ); +@@ -231,14 +231,137 @@ + VERIFY( !("costa ricans" <= str_0) ); + VERIFY( "costa rica" <= str_0 ); + VERIFY( str_0 <= "costa rica" ); ++} + +- return 0; ++constexpr bool ++test02() ++{ ++ std::string_view str_0("costa rica"); ++ std::string_view str_1("costa marbella"); ++ std::string_view str_2("cost"); ++ std::string_view str_3("costa ricans"); ++ std::string_view str_4; ++ ++#undef VERIFY ++#define VERIFY(x) if (!(x)) return false ++ ++ str_4 = str_0; ++ //comparisons between string objects ++ VERIFY( !(str_0 == str_1) ); ++ VERIFY( !(str_0 == str_2) ); ++ VERIFY( !(str_0 == str_3) ); ++ VERIFY( !(str_1 == str_0) ); ++ VERIFY( !(str_2 == str_0) ); ++ VERIFY( !(str_3 == str_0) ); ++ VERIFY( str_4 == str_0 ); ++ VERIFY( str_0 == str_4 ); ++ ++ VERIFY( str_0 != str_1 ); ++ VERIFY( str_0 != str_2 ); ++ VERIFY( str_0 != str_3 ); ++ VERIFY( str_1 != str_0 ); ++ VERIFY( str_2 != str_0 ); ++ VERIFY( str_3 != str_0 ); ++ VERIFY( !(str_0 != str_4) ); ++ VERIFY( !(str_4 != str_0) ); ++ ++ VERIFY( str_0 > str_1 ); //true cuz r>m ++ VERIFY( str_0 > str_2 ); ++ VERIFY( !(str_0 > str_3) ); ++ VERIFY( !(str_1 > str_0) ); //false cuz m str_0) ); ++ VERIFY( str_3 > str_0 ); ++ VERIFY( !(str_0 > str_4) ); ++ VERIFY( !(str_4 > str_0) ); ++ ++ VERIFY( !(str_0 < str_1) ); //false cuz r>m ++ VERIFY( !(str_0 < str_2) ); ++ VERIFY( str_0 < str_3 ); ++ VERIFY( str_1 < str_0 ); //true cuz m= str_1 ); //true cuz r>m ++ VERIFY( str_0 >= str_2 ); ++ VERIFY( !(str_0 >= str_3) ); ++ VERIFY( !(str_1 >= str_0) );//false cuz m= str_0) ); ++ VERIFY( str_3 >= str_0 ); ++ VERIFY( str_0 >= str_4 ); ++ VERIFY( str_4 >= str_0 ); ++ ++ VERIFY( !(str_0 <= str_1) );//false cuz r>m ++ VERIFY( !(str_0 <= str_2) ); ++ VERIFY( str_0 <= str_3 ); ++ VERIFY( str_1 <= str_0 );//true cuz m "costa marbella" ); //true cuz r>m ++ VERIFY( str_0 > "cost" ); ++ VERIFY( !(str_0 > "costa ricans") ); ++ VERIFY( !("costa marbella" > str_0) );//false cuz m str_0) ); ++ VERIFY( "costa ricans" > str_0 ); ++ VERIFY( !("costa rica" > str_0) ); ++ VERIFY( !(str_0 > "costa rica") ); ++ ++ VERIFY( !(str_0 < "costa marbella") );//false cuz r>m ++ VERIFY( !(str_0 < "cost") ); ++ VERIFY( str_0 < "costa ricans" ); ++ VERIFY( "costa marbella" < str_0 );//true cuz m= "costa marbella" );//true cuz r>m ++ VERIFY( str_0 >= "cost" ); ++ VERIFY( !(str_0 >= "costa ricans") ); ++ VERIFY( !("costa marbella" >= str_0) );//false cuz m= str_0) ); ++ VERIFY( "costa ricans" >= str_0 ); ++ VERIFY( "costa rica" >= str_0 ); ++ VERIFY( str_0 >= "costa rica" ); ++ ++ VERIFY( !(str_0 <= "costa marbella") );//false cuz r>m ++ VERIFY( !(str_0 <= "cost") ); ++ VERIFY( str_0 <= "costa ricans" ); ++ VERIFY( "costa marbella" <= str_0 );//true cuz m>() ); +-// static_assert( test_compare>() ); +-// static_assert( test_length>() ); +-// static_assert( test_find>() ); ++static_assert( test_compare>() ); ++static_assert( test_length>() ); ++static_assert( test_find>() ); + #ifdef _GLIBCXX_USE_WCHAR_T + static_assert( test_assign>() ); +-// static_assert( test_compare>() ); +-// static_assert( test_length>() ); +-// static_assert( test_find>() ); ++static_assert( test_compare>() ); ++static_assert( test_length>() ); ++static_assert( test_find>() ); + #endif + static_assert( test_assign>() ); + static_assert( test_compare>() ); +Index: libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,53 @@ ++// { dg-options "-std=gnu++17" } ++// { dg-do run { target c++1z } } ++ ++// Copyright (C) 2011-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 ++// . ++ ++// NOTE: This makes use of the fact that we know how moveable ++// is implemented on string (via swap). If the implementation changed ++// this test may begin to fail. ++ ++#include ++#include ++#include ++ ++class tstring : public std::basic_string ++{ ++public: ++ tstring() : std::basic_string() {} ++ tstring(tstring&& s) : std::basic_string(std::move(s)) {} ++ tstring& operator=(tstring&& s) = default; ++}; ++ ++void test01() ++{ ++ tstring a, b; ++ a.push_back(L'1'); ++ b = std::move(a); ++ VERIFY( b.size() == 1 && b[0] == L'1' && a.size() == 0 ); ++ ++ tstring c(std::move(b)); ++ VERIFY( c.size() == 1 && c[0] == L'1' ); ++ VERIFY( b.size() == 0 ); ++} ++ ++int main() ++{ ++ test01(); ++ return 0; ++} +Index: libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,53 @@ ++// { dg-options "-std=gnu++17" } ++// { dg-do run { target c++1z } } ++ ++// Copyright (C) 2011-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 ++// . ++ ++// NOTE: This makes use of the fact that we know how moveable ++// is implemented on string (via swap). If the implementation changed ++// this test may begin to fail. ++ ++#include ++#include ++#include ++ ++class tstring : public std::basic_string ++{ ++public: ++ tstring() : std::basic_string() {} ++ tstring(tstring&& s) : std::basic_string(std::move(s)) {} ++ tstring& operator=(tstring&& s) = default; ++}; ++ ++void test01() ++{ ++ tstring a, b; ++ a.push_back('1'); ++ b = std::move(a); ++ VERIFY( b.size() == 1 && b[0] == '1' && a.size() == 0 ); ++ ++ tstring c(std::move(b)); ++ VERIFY( c.size() == 1 && c[0] == '1' ); ++ VERIFY( b.size() == 0 ); ++} ++ ++int main() ++{ ++ test01(); ++ return 0; ++} +Index: libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,41 @@ ++// { dg-options "-std=gnu++17" } ++// { 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 ++ ++int main() ++{ ++ std::string s({"abc", 1}); ++ s = {"abc", 1}; ++ s += {"abc", 1}; ++ s.append({"abc", 1}); ++ s.assign({"abc", 1}); ++ s.insert(0, {"abc", 1}); ++ s.replace(0, 1, {"abc", 1}); ++ s.replace(s.begin(), s.begin(), {"abc", 1}); ++ s.find({"abc", 1}); ++ s.rfind({"abc", 1}); ++ s.find_first_of({"abc", 1}); ++ s.find_last_of({"abc", 1}); ++ s.find_first_not_of({"abc", 1}); ++ s.find_last_not_of({"abc", 1}); ++ s.compare({"abc", 1}); ++ s.compare(0, 1, {"abc", 1}); ++} +Index: libstdc++-v3/testsuite/21_strings/basic_string/79162.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/79162.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/79162.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,37 @@ ++// { dg-options "-std=gnu++17" } ++// { 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 ++ ++template ++class opt : public DataType ++{ ++ opt(const opt &) = delete; ++ opt &operator=(const opt &) = delete; ++public: ++ opt() {} ++}; ++ ++int main() ++{ ++ opt PGOTestProfileFile; ++ std::string ProfileFileName; ++ ProfileFileName = PGOTestProfileFile; ++} +Index: libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/70483.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/70483.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/70483.cc (.../branches/gcc-7-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++14 } } ++ ++#include ++ ++struct constexpr_char_traits : std::char_traits ++{ ++ static constexpr size_t ++ length(const char* val) ++ { ++ size_t res = 0; ++ for (; val[res] != '\0'; ++res) ++ ; ++ return res; ++ } ++ ++ static constexpr int ++ compare(const char* lhs, const char* rhs, std::size_t count) ++ { ++ for (size_t pos = 0; pos < count; ++pos) ++ { ++ if (lhs[pos] != rhs[pos]) ++ return lhs[pos] - rhs[pos]; ++ } ++ return 0; ++ } ++ ++ static constexpr const char* ++ find(const char* p, std::size_t n, char c) ++ { ++ for (size_t pos = 0; pos < n; ++pos) ++ if (p[pos] == c) ++ return p + pos; ++ return nullptr; ++ } ++}; ++ ++using string_view ++ = std::experimental::basic_string_view; ++ ++constexpr ++string_view get() ++{ ++ string_view res = "x::"; ++ string_view start_pattern = "x"; ++ res = res.substr(res.find(start_pattern) + start_pattern.size()); ++ res = res.substr(0, res.find_first_of(";]")); ++ res = res.substr(res.rfind("::")); ++ return res; ++} ++ ++static_assert( get() == get() ); +Index: libstdc++-v3/testsuite/17_intro/names.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/17_intro/names.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/17_intro/names.cc (.../branches/gcc-7-branch) +@@ -107,4 +107,9 @@ + #undef y + #endif + ++#ifdef __hpux__ ++#undef d ++#undef r ++#endif ++ + #include +Index: libstdc++-v3/testsuite/20_util/duration/literals/range.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/duration/literals/range.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/duration/literals/range.cc (.../branches/gcc-7-branch) +@@ -26,6 +26,6 @@ + + // std::numeric_limits::max() == 9223372036854775807; + auto h = 9223372036854775808h; +- // { dg-error "cannot be represented" "" { target *-*-* } 892 } ++ // { dg-error "cannot be represented" "" { target *-*-* } 893 } + } + // { dg-prune-output "in constexpr expansion" } // needed for -O0 +Index: libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,41 @@ ++// 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 ++#include ++ ++using namespace std; ++using namespace std::chrono; ++ ++// DR 1177 ++static_assert(is_constructible, duration>{}, ++ "can convert duration with one floating point rep to another"); ++static_assert(is_constructible, duration>{}, ++ "can convert duration with integral rep to one with floating point rep"); ++static_assert(!is_constructible, duration>{}, ++ "cannot convert duration with floating point rep to one with integral rep"); ++static_assert(is_constructible, duration>{}, ++ "can convert duration with one integral rep to another"); ++ ++static_assert(!is_constructible, duration>>{}, ++ "cannot convert duration to one with different period"); ++static_assert(is_constructible, duration>>{}, ++ "unless it has a floating-point representation"); ++static_assert(is_constructible, duration>>{}, ++ "or a period that is an integral multiple of the original"); +Index: libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc (.../branches/gcc-7-branch) +@@ -40,6 +40,10 @@ + + void test01() + { ++ struct T { T(int) { } }; ++ struct NT { NT(int) noexcept { } }; ++ struct Ex { explicit Ex(int) noexcept { } }; ++ + using func_type = void(*)(); + static_assert( ! is_nt_invocable< func_type>(), ""); + +@@ -55,28 +59,46 @@ + static_assert( ! is_nt_invocable< mem_type, int >(), ""); + static_assert( ! is_nt_invocable< mem_type, int& >(), ""); + +- static_assert( is_nt_invocable< mem_type, X& >(), ""); +- static_assert( is_nt_invocable_r< int, mem_type, X& >(), ""); +- static_assert( is_nt_invocable_r< int&, mem_type, X& >(), ""); +- static_assert( is_nt_invocable_r< long, mem_type, X& >(), ""); +- static_assert( is_nt_invocable_r< int&, mem_type, X* >(), ""); ++ static_assert( is_nt_invocable< mem_type, X& >(), ""); ++ static_assert( is_nt_invocable_r< int, mem_type, X& >(), ""); ++ static_assert( is_nt_invocable_r< int&, mem_type, X& >(), ""); ++ static_assert( is_nt_invocable_r< long, mem_type, X& >(), ""); ++ static_assert( ! is_nt_invocable_r< long&, mem_type, X& >(), ++ "conversion fails, cannot bind long& to int"); ++ static_assert( is_nt_invocable_r< int&, mem_type, X* >(), ""); + ++ static_assert( ! is_nt_invocable_r< T, mem_type, X& >(), ++ "conversion throws"); ++ static_assert( is_nt_invocable_r< NT, mem_type, X& >(), ""); ++ static_assert( ! is_nt_invocable_r< Ex, mem_type, X& >(), ++ "conversion fails, would use explicit constructor"); ++ + using memfun_type = int (X::*)(); + +- static_assert( ! is_nt_invocable< memfun_type >(), ""); +- static_assert( ! is_nt_invocable< memfun_type, int >(), ""); +- static_assert( ! is_nt_invocable< memfun_type, int& >(), ""); +- static_assert( ! is_nt_invocable< memfun_type, X& >(), ""); +- static_assert( ! is_nt_invocable< memfun_type, X* >(), ""); ++ static_assert( ! is_nt_invocable< memfun_type >(), "no object"); ++ static_assert( ! is_nt_invocable< memfun_type, int >(), "no object"); ++ static_assert( ! is_nt_invocable< memfun_type, int& >(), "no object"); ++ static_assert( ! is_nt_invocable< memfun_type, X& >(), "call throws"); ++ static_assert( ! is_nt_invocable< memfun_type, X* >(), "call throws"); + ++ static_assert( ! is_nt_invocable_r< T, memfun_type, X& >(), "call throws"); ++ static_assert( ! is_nt_invocable_r< NT, memfun_type, X& >(), "call throws"); ++ static_assert( ! is_nt_invocable_r< Ex, memfun_type, X& >(), "call throws"); ++ + #if __cpp_noexcept_function_type + using memfun_type_nt = int (X::*)() noexcept; + +- static_assert( ! is_nt_invocable< memfun_type_nt >(), ""); +- static_assert( ! is_nt_invocable< memfun_type_nt, int >(), ""); +- static_assert( ! is_nt_invocable< memfun_type_nt, int& >(), ""); ++ static_assert( ! is_nt_invocable< memfun_type_nt >(), "no object"); ++ static_assert( ! is_nt_invocable< memfun_type_nt, int >(), "no object"); ++ static_assert( ! is_nt_invocable< memfun_type_nt, int& >(), "no object"); + static_assert( is_nt_invocable< memfun_type_nt, X& >(), ""); + static_assert( is_nt_invocable< memfun_type_nt, X* >(), ""); ++ ++ static_assert( ! is_nt_invocable_r< T, memfun_type_nt, X& >(), ++ "conversion throws"); ++ static_assert( is_nt_invocable_r< NT, memfun_type_nt, X& >(), ""); ++ static_assert( ! is_nt_invocable_r< Ex, memfun_type_nt, X& >(), ++ "conversion fails, would use explicit constructor"); + #endif + + struct F { +@@ -89,12 +111,44 @@ + }; + using CF = const F; + +- static_assert( ! is_nt_invocable_r< int&, F >(), ""); +- static_assert( is_nt_invocable_r< long&, CF >(), ""); +- static_assert( ! is_nt_invocable_r< short&, F, int >(), "" ); +- static_assert( is_nt_invocable_r< char&, F&, int >(), "" ); +- static_assert( is_nt_invocable_r< char&, CF, int >(), "" ); +- static_assert( is_nt_invocable_r< char&, CF&, int >(), "" ); ++ static_assert( ! is_nt_invocable< F >(), "call throws"); ++ static_assert( is_nt_invocable< CF >(), ""); + +- static_assert( ! is_nt_invocable< F, int, int >(), ""); ++ static_assert( ! is_nt_invocable_r< int&, F >(), "call throws"); ++ static_assert( is_nt_invocable_r< long&, CF >(), ""); ++ static_assert( ! is_nt_invocable_r< T, F >(), "call throws"); ++ static_assert( ! is_nt_invocable_r< NT, F >(), "call throws"); ++ static_assert( ! is_nt_invocable_r< Ex, F >(), "call throws"); ++ static_assert( ! is_nt_invocable_r< T, CF >(), "conversion throws"); ++ static_assert( is_nt_invocable_r< NT, CF >(), "" ); ++ static_assert( ! is_nt_invocable_r< Ex, CF >(), "conversion fails"); ++ ++ static_assert( ! is_nt_invocable< F, int >(), "call throws"); ++ static_assert( is_nt_invocable< F&, int >(), ""); ++ ++ static_assert( ! is_nt_invocable_r< short&, F, int >(), ++ "call throws" ); ++ static_assert( is_nt_invocable_r< char&, F&, int >(), ""); ++ static_assert( ! is_nt_invocable_r< T, F&, int >(), ++ "conversion throws"); ++ static_assert( is_nt_invocable_r< NT, F&, int >(), ""); ++ static_assert( ! is_nt_invocable_r< Ex, F&, int >(), ++ "conversion fails, would use explicit constructor"); ++ ++ static_assert( is_nt_invocable< CF, int >(), ""); ++ static_assert( is_nt_invocable< CF&, int >(), ""); ++ ++ static_assert( is_nt_invocable_r< char&, CF, int >(), ""); ++ static_assert( is_nt_invocable_r< char&, CF&, int >(), ""); ++ ++ static_assert( ! is_nt_invocable_r< T, CF&, int >(), ++ "conversion throws"); ++ static_assert( is_nt_invocable_r< NT, CF&, int >(), ""); ++ static_assert( ! is_nt_invocable_r< Ex, CF&, int >(), ++ "conversion fails, would use explicit constructor"); ++ ++ static_assert( ! is_nt_invocable< F, int, int >(), ++ "would call private member"); ++ static_assert( ! is_nt_invocable_r(), ++ "would call private member"); + } +Index: libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc (.../branches/gcc-7-branch) +@@ -27,7 +27,9 @@ + constexpr bool is_nt_invocable_conv(std::true_type) + { + using result_type = typename std::__invoke_result::type; +- return std::is_void::value || std::is_convertible::value; ++ return std::is_void::value ++ || (std::is_convertible::value ++ && std::is_nothrow_constructible::value); + } + + template +Index: libstdc++-v3/testsuite/20_util/optional/hash.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/optional/hash.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/optional/hash.cc (.../branches/gcc-7-branch) +@@ -29,14 +29,23 @@ + auto f(...) -> decltype(std::false_type()); + + static_assert(!decltype(f(0))::value, ""); +-static_assert(!std::is_invocable_v< +- std::hash>&, std::optional const&> ); +-static_assert(std::is_invocable_v< +- std::hash>&, std::optional const&> ); + ++template ++constexpr bool hashable() ++{ return std::is_invocable_v&, const T&>; } ++ ++static_assert(!hashable>()); ++static_assert(!hashable>()); ++static_assert(hashable>()); ++static_assert(hashable>()); ++ + int main() + { + int x = 42; + std::optional x2 = 42; + VERIFY(std::hash()(x) == std::hash>()(x2)); ++ ++ // PR libstdc++/82262 ++ std::optional x3 = x2; ++ VERIFY(std::hash()(x) == std::hash>()(x3)); + } +Index: libstdc++-v3/testsuite/20_util/time_point/cons/81468.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/20_util/time_point/cons/81468.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/testsuite/20_util/time_point/cons/81468.cc (.../branches/gcc-7-branch) +@@ -0,0 +1,34 @@ ++// 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 ++#include ++ ++using namespace std; ++using namespace std::chrono; ++ ++template ++ using sys_time = time_point; ++ ++static_assert(is_constructible, sys_time>{}, ++ "Can construct time_point from one with lower precision duration"); ++ ++// PR libstdc++/81468 - DR 1177 ++static_assert(!is_constructible, sys_time>{}, ++ "Cannot construct time_point from one with higher precision duration"); +Index: libstdc++-v3/config/io/basic_file_stdio.cc +=================================================================== +--- a/src/libstdc++-v3/config/io/basic_file_stdio.cc (.../tags/gcc_7_2_0_release) ++++ b/src/libstdc++-v3/config/io/basic_file_stdio.cc (.../branches/gcc-7-branch) +@@ -195,11 +195,13 @@ + __basic_file* __ret = NULL; + if (!this->is_open() && __file) + { +- int __err; ++ int __err, __save_errno = errno; ++ // POSIX guarantees that fflush sets errno on error, but C doesn't. + errno = 0; + do +- __err = this->sync(); ++ __err = fflush(__file); + while (__err && errno == EINTR); ++ errno = __save_errno; + if (!__err) + { + _M_cfile = __file; +Index: contrib/ChangeLog +=================================================================== +--- a/src/contrib/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/contrib/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,7 @@ ++2017-10-02 Thomas Schwinge ++ ++ * gcc_update (files_and_dependencies): Handle libbacktrace. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: contrib/gcc_update +=================================================================== +--- a/src/contrib/gcc_update (.../tags/gcc_7_2_0_release) ++++ b/src/contrib/gcc_update (.../branches/gcc-7-branch) +@@ -172,6 +172,10 @@ + liboffloadmic/plugin/aclocal.m4: liboffloadmic/plugin/configure.ac + liboffloadmic/plugin/Makefile.in: liboffloadmic/plugin/Makefile.am + liboffloadmic/plugin/configure: liboffloadmic/plugin/configure.ac ++libbacktrace/aclocal.m4: libbacktrace/configure.ac ++libbacktrace/Makefile.in: libbacktrace/Makefile.am libbacktrace/aclocal.m4 ++libbacktrace/configure: libbacktrace/configure.ac libbacktrace/aclocal.m4 ++libbacktrace/config.h.in: libbacktrace/configure.ac libbacktrace/aclocal.m4 + # Top level + Makefile.in: Makefile.tpl Makefile.def + configure: configure.ac config/acx.m4 +Index: libgcc/config.host +=================================================================== +--- a/src/libgcc/config.host (.../tags/gcc_7_2_0_release) ++++ b/src/libgcc/config.host (.../branches/gcc-7-branch) +@@ -245,6 +245,7 @@ + *-*-netbsd*) + tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" + tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ tmake_file="$tmake_file t-slibgcc-libgcc" + # NetBSD 1.7 and later are set up to use GCC's crtstuff for + # ELF configurations. We will clear extra_parts in the + # a.out configurations. +Index: libgcc/ChangeLog +=================================================================== +--- a/src/libgcc/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/libgcc/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,11 @@ ++2017-09-28 Krister Walfridsson ++ ++ Backport from mainline ++ 2017-05-14 Krister Walfridsson ++ ++ PR target/80600 ++ * config.host (*-*-netbsd*): Add t-slibgcc-libgcc to tmake_file. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/is-a.h +=================================================================== +--- a/src/gcc/is-a.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/is-a.h (.../branches/gcc-7-branch) +@@ -103,7 +103,12 @@ + Note that we have converted two sets of assertions in the calls to varpool + into safe and efficient use of a variable. + ++TYPE safe_dyn_cast (pointer) + ++ Like dyn_cast (pointer), except that it accepts null pointers ++ and returns null results for them. ++ ++ + If you use these functions and get a 'inline function not defined' or a + 'missing symbol' error message for 'is_a_helper<....>::test', it means that + the connection between the types has not been made. See below. +@@ -222,4 +227,13 @@ + return static_cast (0); + } + ++/* Similar to dyn_cast, except that the pointer may be null. */ ++ ++template ++inline T ++safe_dyn_cast (U *p) ++{ ++ return p ? dyn_cast (p) : 0; ++} ++ + #endif /* GCC_IS_A_H */ +Index: gcc/tree-vrp.c +=================================================================== +--- a/src/gcc/tree-vrp.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-vrp.c (.../branches/gcc-7-branch) +@@ -4897,7 +4897,12 @@ + operand of the ASSERT_EXPR. Create it so the new name and the old one + are registered in the replacement table so that we can fix the SSA web + after adding all the ASSERT_EXPRs. */ +- create_new_def_for (v, assertion, NULL); ++ tree new_def = create_new_def_for (v, assertion, NULL); ++ /* Make sure we preserve abnormalness throughout an ASSERT_EXPR chain ++ given we have to be able to fully propagate those out to re-create ++ valid SSA when removing the asserts. */ ++ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (v)) ++ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_def) = 1; + + return assertion; + } +Index: gcc/ipa-visibility.c +=================================================================== +--- a/src/gcc/ipa-visibility.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ipa-visibility.c (.../branches/gcc-7-branch) +@@ -97,7 +97,8 @@ + && !DECL_EXTERNAL (node->decl) + && !node->externally_visible + && !node->used_from_other_partition +- && !node->in_other_partition); ++ && !node->in_other_partition ++ && node->get_availability () >= AVAIL_AVAILABLE); + } + + /* Return true when function can be marked local. */ +Index: gcc/tree-chkp.c +=================================================================== +--- a/src/gcc/tree-chkp.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-chkp.c (.../branches/gcc-7-branch) +@@ -3277,7 +3277,7 @@ + return DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST + && tree_to_uhwi (DECL_SIZE (field)) != 0 + && !(flag_chkp_flexible_struct_trailing_arrays +- && array_at_struct_end_p (ref, true)) ++ && array_at_struct_end_p (ref)) + && (!DECL_FIELD_OFFSET (field) + || TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST) + && (!DECL_FIELD_BIT_OFFSET (field) +Index: gcc/ipa-icf-gimple.c +=================================================================== +--- a/src/gcc/ipa-icf-gimple.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ipa-icf-gimple.c (.../branches/gcc-7-branch) +@@ -361,10 +361,14 @@ + } + case LABEL_DECL: + { ++ if (t1 == t2) ++ return true; ++ + int *bb1 = m_label_bb_map.get (t1); + int *bb2 = m_label_bb_map.get (t2); + +- return return_with_debug (*bb1 == *bb2); ++ /* Labels can point to another function (non-local GOTOs). */ ++ return return_with_debug (bb1 != NULL && bb2 != NULL && *bb1 == *bb2); + } + case PARM_DECL: + case RESULT_DECL: +@@ -539,11 +543,8 @@ + } + } + +-/* Compares two tree list operands T1 and T2 and returns true if these +- two trees are semantically equivalent. */ +- + bool +-func_checker::compare_tree_list_operand (tree t1, tree t2) ++func_checker::compare_asm_inputs_outputs (tree t1, tree t2) + { + gcc_assert (TREE_CODE (t1) == TREE_LIST); + gcc_assert (TREE_CODE (t2) == TREE_LIST); +@@ -556,6 +557,16 @@ + if (!compare_operand (TREE_VALUE (t1), TREE_VALUE (t2))) + return return_false (); + ++ tree p1 = TREE_PURPOSE (t1); ++ tree p2 = TREE_PURPOSE (t2); ++ ++ gcc_assert (TREE_CODE (p1) == TREE_LIST); ++ gcc_assert (TREE_CODE (p2) == TREE_LIST); ++ ++ if (strcmp (TREE_STRING_POINTER (TREE_VALUE (p1)), ++ TREE_STRING_POINTER (TREE_VALUE (p2))) != 0) ++ return return_false (); ++ + t2 = TREE_CHAIN (t2); + } + +@@ -1004,7 +1015,7 @@ + tree input1 = gimple_asm_input_op (g1, i); + tree input2 = gimple_asm_input_op (g2, i); + +- if (!compare_tree_list_operand (input1, input2)) ++ if (!compare_asm_inputs_outputs (input1, input2)) + return return_false_with_msg ("ASM input is different"); + } + +@@ -1013,7 +1024,7 @@ + tree output1 = gimple_asm_output_op (g1, i); + tree output2 = gimple_asm_output_op (g2, i); + +- if (!compare_tree_list_operand (output1, output2)) ++ if (!compare_asm_inputs_outputs (output1, output2)) + return return_false_with_msg ("ASM output is different"); + } + +Index: gcc/ipa-icf-gimple.h +=================================================================== +--- a/src/gcc/ipa-icf-gimple.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ipa-icf-gimple.h (.../branches/gcc-7-branch) +@@ -215,9 +215,9 @@ + is returned. */ + bool compare_operand (tree t1, tree t2); + +- /* Compares two tree list operands T1 and T2 and returns true if these +- two trees are semantically equivalent. */ +- bool compare_tree_list_operand (tree t1, tree t2); ++ /* Compares GIMPLE ASM inputs (or outputs) where we iterate tree chain ++ and compare both TREE_PURPOSEs and TREE_VALUEs. */ ++ bool compare_asm_inputs_outputs (tree t1, tree t2); + + /* Verifies that trees T1 and T2, representing function declarations + are equivalent from perspective of ICF. */ +Index: gcc/opts-common.c +=================================================================== +--- a/src/gcc/opts-common.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/opts-common.c (.../branches/gcc-7-branch) +@@ -988,7 +988,8 @@ + { + if (!handlers->handlers[i].handler (opts, opts_set, decoded, + lang_mask, kind, loc, +- handlers, dc)) ++ handlers, dc, ++ handlers->target_option_override_hook)) + return false; + } + +Index: gcc/c-family/c-cppbuiltin.c +=================================================================== +--- a/src/gcc/c-family/c-cppbuiltin.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/c-cppbuiltin.c (.../branches/gcc-7-branch) +@@ -987,6 +987,8 @@ + } + if (flag_new_ttp) + cpp_define (pfile, "__cpp_template_template_args=201611"); ++ if (flag_threadsafe_statics) ++ cpp_define (pfile, "__cpp_threadsafe_static_init=200806"); + } + /* Note that we define this for C as well, so that we know if + __attribute__((cleanup)) will interface with EH. */ +Index: gcc/c-family/ChangeLog +=================================================================== +--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,49 @@ ++2017-09-15 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-12 Jakub Jelinek ++ ++ PR target/82112 ++ * c-common.c (sync_resolve_size): Instead of c_dialect_cxx () ++ assertion check that in the condition. ++ (get_atomic_generic_size): Likewise. Before testing if parameter ++ has pointer type, if it has array type, call for C++ ++ default_conversion to perform array-to-pointer conversion. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-29 Martin Liska ++ ++ PR other/39851 ++ * c-common.c (parse_optimize_options): Add argument to function ++ call. ++ * c-pragma.c (handle_pragma_diagnostic): Likewise. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-06-28 Martin Liska ++ ++ PR ipa/81128 ++ * c-attribs.c (handle_alias_ifunc_attribute): Append ifunc alias ++ to a function declaration. ++ ++2017-09-10 Jonathan Wakely ++ ++ PR c++/81852 ++ * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_threadsafe_static_init. ++ ++2017-09-07 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-07-27 Jakub Jelinek ++ ++ PR c/45784 ++ * c-omp.c (c_finish_omp_for): If the condition is wrapped in ++ rhs of COMPOUND_EXPR(s), skip them and readd their lhs into ++ new COMPOUND_EXPRs around the rhs of the comparison. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/c-family/c-common.c +=================================================================== +--- a/src/gcc/c-family/c-common.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/c-common.c (.../branches/gcc-7-branch) +@@ -5597,7 +5597,7 @@ + /* And apply them. */ + decode_options (&global_options, &global_options_set, + decoded_options, decoded_options_count, +- input_location, global_dc); ++ input_location, global_dc, NULL); + + targetm.override_options_after_change(); + +@@ -6576,10 +6576,9 @@ + } + + argtype = type = TREE_TYPE ((*params)[0]); +- if (TREE_CODE (type) == ARRAY_TYPE) ++ if (TREE_CODE (type) == ARRAY_TYPE && c_dialect_cxx ()) + { + /* Force array-to-pointer decay for C++. */ +- gcc_assert (c_dialect_cxx()); + (*params)[0] = default_conversion ((*params)[0]); + type = TREE_TYPE ((*params)[0]); + } +@@ -6741,10 +6740,9 @@ + + /* Get type of first parameter, and determine its size. */ + type_0 = TREE_TYPE ((*params)[0]); +- if (TREE_CODE (type_0) == ARRAY_TYPE) ++ if (TREE_CODE (type_0) == ARRAY_TYPE && c_dialect_cxx ()) + { + /* Force array-to-pointer decay for C++. */ +- gcc_assert (c_dialect_cxx()); + (*params)[0] = default_conversion ((*params)[0]); + type_0 = TREE_TYPE ((*params)[0]); + } +@@ -6783,6 +6781,12 @@ + /* __atomic_compare_exchange has a bool in the 4th position, skip it. */ + if (n_param == 6 && x == 3) + continue; ++ if (TREE_CODE (type) == ARRAY_TYPE && c_dialect_cxx ()) ++ { ++ /* Force array-to-pointer decay for C++. */ ++ (*params)[x] = default_conversion ((*params)[x]); ++ type = TREE_TYPE ((*params)[x]); ++ } + if (!POINTER_TYPE_P (type)) + { + error_at (loc, "argument %d of %qE must be a pointer type", x + 1, +Index: gcc/c-family/c-omp.c +=================================================================== +--- a/src/gcc/c-family/c-omp.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/c-omp.c (.../branches/gcc-7-branch) +@@ -531,6 +531,12 @@ + { + bool cond_ok = false; + ++ /* E.g. C sizeof (vla) could add COMPOUND_EXPRs with ++ evaluation of the vla VAR_DECL. We need to readd ++ them to the non-decl operand. See PR45784. */ ++ while (TREE_CODE (cond) == COMPOUND_EXPR) ++ cond = TREE_OPERAND (cond, 1); ++ + if (EXPR_HAS_LOCATION (cond)) + elocus = EXPR_LOCATION (cond); + +@@ -605,6 +611,21 @@ + else if (code != CILK_SIMD && code != CILK_FOR) + cond_ok = false; + } ++ ++ if (cond_ok && TREE_VEC_ELT (condv, i) != cond) ++ { ++ tree ce = NULL_TREE, *pce = &ce; ++ tree type = TREE_TYPE (TREE_OPERAND (cond, 1)); ++ for (tree c = TREE_VEC_ELT (condv, i); c != cond; ++ c = TREE_OPERAND (c, 1)) ++ { ++ *pce = build2 (COMPOUND_EXPR, type, TREE_OPERAND (c, 0), ++ TREE_OPERAND (cond, 1)); ++ pce = &TREE_OPERAND (*pce, 1); ++ } ++ TREE_OPERAND (cond, 1) = ce; ++ TREE_VEC_ELT (condv, i) = cond; ++ } + } + + if (!cond_ok) +Index: gcc/c-family/c-pragma.c +=================================================================== +--- a/src/gcc/c-family/c-pragma.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/c-pragma.c (.../branches/gcc-7-branch) +@@ -815,7 +815,7 @@ + } + + struct cl_option_handlers handlers; +- set_default_handlers (&handlers); ++ set_default_handlers (&handlers, NULL); + const char *arg = NULL; + if (cl_options[option_index].flags & CL_JOINED) + arg = option_string + 1 + cl_options[option_index].opt_len; +Index: gcc/c-family/c-attribs.c +=================================================================== +--- a/src/gcc/c-family/c-attribs.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c-family/c-attribs.c (.../branches/gcc-7-branch) +@@ -1764,9 +1764,14 @@ + TREE_STATIC (decl) = 1; + + if (!is_alias) +- /* ifuncs are also aliases, so set that attribute too. */ +- DECL_ATTRIBUTES (decl) +- = tree_cons (get_identifier ("alias"), args, DECL_ATTRIBUTES (decl)); ++ { ++ /* ifuncs are also aliases, so set that attribute too. */ ++ DECL_ATTRIBUTES (decl) ++ = tree_cons (get_identifier ("alias"), args, ++ DECL_ATTRIBUTES (decl)); ++ DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("ifunc"), ++ NULL, DECL_ATTRIBUTES (decl)); ++ } + } + else + { +Index: gcc/c/ChangeLog +=================================================================== +--- a/src/gcc/c/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,12 @@ ++2017-09-30 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-29 Jakub Jelinek ++ ++ PR c/82340 ++ * c-decl.c (build_compound_literal): Use c_apply_type_quals_to_decl ++ instead of trying to set just TREE_READONLY manually. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/c/c-decl.c +=================================================================== +--- a/src/gcc/c/c-decl.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/c/c-decl.c (.../branches/gcc-7-branch) +@@ -5264,9 +5264,7 @@ + DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; + TREE_TYPE (decl) = type; +- TREE_READONLY (decl) = (TYPE_READONLY (type) +- || (TREE_CODE (type) == ARRAY_TYPE +- && TYPE_READONLY (TREE_TYPE (type)))); ++ c_apply_type_quals_to_decl (TYPE_QUALS (strip_array_types (type)), decl); + store_init_value (loc, decl, init, NULL_TREE); + + if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) +Index: gcc/DATESTAMP +=================================================================== +--- a/src/gcc/DATESTAMP (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/DATESTAMP (.../branches/gcc-7-branch) +@@ -1 +1 @@ +-20170814 ++20171003 +Index: gcc/tree.c +=================================================================== +--- a/src/gcc/tree.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree.c (.../branches/gcc-7-branch) +@@ -13219,18 +13219,26 @@ + return NULL_TREE; + } + +-/* Returns true if REF is an array reference to an array at the end of +- a structure. If this is the case, the array may be allocated larger +- than its upper bound implies. When ALLOW_COMPREF is true considers +- REF when it's a COMPONENT_REF in addition ARRAY_REF and +- ARRAY_RANGE_REF. */ ++/* Returns true if REF is an array reference or a component reference ++ to an array at the end of a structure. ++ If this is the case, the array may be allocated larger ++ than its upper bound implies. */ + + bool +-array_at_struct_end_p (tree ref, bool allow_compref) ++array_at_struct_end_p (tree ref) + { +- if (TREE_CODE (ref) != ARRAY_REF +- && TREE_CODE (ref) != ARRAY_RANGE_REF +- && (!allow_compref || TREE_CODE (ref) != COMPONENT_REF)) ++ tree atype; ++ ++ if (TREE_CODE (ref) == ARRAY_REF ++ || TREE_CODE (ref) == ARRAY_RANGE_REF) ++ { ++ atype = TREE_TYPE (TREE_OPERAND (ref, 0)); ++ ref = TREE_OPERAND (ref, 0); ++ } ++ else if (TREE_CODE (ref) == COMPONENT_REF ++ && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 1))) == ARRAY_TYPE) ++ atype = TREE_TYPE (TREE_OPERAND (ref, 1)); ++ else + return false; + + while (handled_component_p (ref)) +@@ -13238,19 +13246,42 @@ + /* If the reference chain contains a component reference to a + non-union type and there follows another field the reference + is not at the end of a structure. */ +- if (TREE_CODE (ref) == COMPONENT_REF +- && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE) ++ if (TREE_CODE (ref) == COMPONENT_REF) + { +- tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1)); +- while (nextf && TREE_CODE (nextf) != FIELD_DECL) +- nextf = DECL_CHAIN (nextf); +- if (nextf) +- return false; ++ if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE) ++ { ++ tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1)); ++ while (nextf && TREE_CODE (nextf) != FIELD_DECL) ++ nextf = DECL_CHAIN (nextf); ++ if (nextf) ++ return false; ++ } + } ++ /* If we have a multi-dimensional array we do not consider ++ a non-innermost dimension as flex array if the whole ++ multi-dimensional array is at struct end. ++ Same for an array of aggregates with a trailing array ++ member. */ ++ else if (TREE_CODE (ref) == ARRAY_REF) ++ return false; ++ else if (TREE_CODE (ref) == ARRAY_RANGE_REF) ++ ; ++ /* If we view an underlying object as sth else then what we ++ gathered up to now is what we have to rely on. */ ++ else if (TREE_CODE (ref) == VIEW_CONVERT_EXPR) ++ break; ++ else ++ gcc_unreachable (); + + ref = TREE_OPERAND (ref, 0); + } + ++ /* The array now is at struct end. Treat flexible arrays as ++ always subject to extend, even into just padding constrained by ++ an underlying decl. */ ++ if (! TYPE_SIZE (atype)) ++ return true; ++ + tree size = NULL; + + if (TREE_CODE (ref) == MEM_REF +Index: gcc/tree.h +=================================================================== +--- a/src/gcc/tree.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree.h (.../branches/gcc-7-branch) +@@ -4870,12 +4870,10 @@ + EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ + extern tree array_ref_low_bound (tree); + +-/* Returns true if REF is an array reference to an array at the end of +- a structure. If this is the case, the array may be allocated larger +- than its upper bound implies. When second argument is true considers +- REF when it's a COMPONENT_REF in addition ARRAY_REF and +- ARRAY_RANGE_REF. */ +-extern bool array_at_struct_end_p (tree, bool = false); ++/* Returns true if REF is an array reference or a component reference ++ to an array at the end of a structure. If this is the case, the array ++ may be allocated larger than its upper bound implies. */ ++extern bool array_at_struct_end_p (tree); + + /* Return a tree representing the offset, in bytes, of the field referenced + by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */ +Index: gcc/gcc.c +=================================================================== +--- a/src/gcc/gcc.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/gcc.c (.../branches/gcc-7-branch) +@@ -872,8 +872,7 @@ + #endif + + #ifdef ENABLE_DEFAULT_PIE +-#define NO_PIE_SPEC "no-pie|static" +-#define PIE_SPEC NO_PIE_SPEC "|r|shared:;" ++#define PIE_SPEC "!no-pie" + #define NO_FPIE1_SPEC "fno-pie" + #define FPIE1_SPEC NO_FPIE1_SPEC ":;" + #define NO_FPIE2_SPEC "fno-PIE" +@@ -894,7 +893,6 @@ + #define FPIE_OR_FPIC_SPEC NO_FPIE_AND_FPIC_SPEC ":;" + #else + #define PIE_SPEC "pie" +-#define NO_PIE_SPEC PIE_SPEC "|r|shared:;" + #define FPIE1_SPEC "fpie" + #define NO_FPIE1_SPEC FPIE1_SPEC ":;" + #define FPIE2_SPEC "fPIE" +@@ -923,7 +921,7 @@ + #else + #define LD_PIE_SPEC "" + #endif +-#define LINK_PIE_SPEC "%{no-pie:} " "%{" PIE_SPEC ":" LD_PIE_SPEC "} " ++#define LINK_PIE_SPEC "%{static|shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} " + #endif + + #ifndef LINK_BUILDID_SPEC +@@ -1011,8 +1009,10 @@ + #endif + + /* -u* was put back because both BSD and SysV seem to support it. */ +-/* %{static:} simply prevents an error message if the target machine +- doesn't handle -static. */ ++/* %{static|no-pie:} simply prevents an error message: ++ 1. If the target machine doesn't handle -static. ++ 2. If PIE isn't enabled by default. ++ */ + /* We want %{T*} after %{L*} and %D so that it can be used to specify linker + scripts which exist in user specified directories, or in standard + directories. */ +@@ -1029,7 +1029,7 @@ + "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ + "%X %{o*} %{e*} %{N} %{n} %{r}\ + %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \ +- %{static:} %{L*} %(mfwrap) %(link_libgcc) " \ ++ %{static|no-pie:} %{L*} %(mfwrap) %(link_libgcc) " \ + VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \ + %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ + %:include(libgomp.spec)%(link_gomp)}\ +@@ -3742,7 +3742,8 @@ + unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, + location_t loc, + const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, +- diagnostic_context *dc) ++ diagnostic_context *dc, ++ void (*) (void)) + { + size_t opt_index = decoded->opt_index; + const char *arg = decoded->arg; +Index: gcc/fold-const.c +=================================================================== +--- a/src/gcc/fold-const.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fold-const.c (.../branches/gcc-7-branch) +@@ -877,6 +877,13 @@ + } + } + ++ if (*litp ++ && TREE_OVERFLOW_P (*litp)) ++ *litp = drop_tree_overflow (*litp); ++ if (*minus_litp ++ && TREE_OVERFLOW_P (*minus_litp)) ++ *minus_litp = drop_tree_overflow (*minus_litp); ++ + return var; + } + +@@ -6175,6 +6182,7 @@ + t1 = extract_muldiv (op0, c, code, wide_type, &sub_strict_overflow_p); + t2 = extract_muldiv (op1, c, code, wide_type, &sub_strict_overflow_p); + if (t1 != 0 && t2 != 0 ++ && TYPE_OVERFLOW_WRAPS (ctype) + && (code == MULT_EXPR + /* If not multiplication, we can only do this if both operands + are divisible by c. */ +@@ -6237,11 +6245,6 @@ + if (TYPE_UNSIGNED (ctype) && ctype != type) + break; + +- /* If we were able to eliminate our operation from the first side, +- apply our operation to the second side and reform the PLUS. */ +- if (t1 != 0 && (TREE_CODE (t1) != code || code == MULT_EXPR)) +- return fold_build2 (tcode, ctype, fold_convert (ctype, t1), op1); +- + /* The last case is if we are a multiply. In that case, we can + apply the distributive law to commute the multiply and addition + if the multiplication of the constants doesn't overflow +@@ -7200,15 +7203,10 @@ + static int + native_encode_string (const_tree expr, unsigned char *ptr, int len, int off) + { +- tree type = TREE_TYPE (expr); +- HOST_WIDE_INT total_bytes; ++ if (! can_native_encode_string_p (expr)) ++ return 0; + +- if (TREE_CODE (type) != ARRAY_TYPE +- || TREE_CODE (TREE_TYPE (type)) != INTEGER_TYPE +- || GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (type))) != BITS_PER_UNIT +- || !tree_fits_shwi_p (TYPE_SIZE_UNIT (type))) +- return 0; +- total_bytes = tree_to_shwi (TYPE_SIZE_UNIT (type)); ++ HOST_WIDE_INT total_bytes = tree_to_shwi (TYPE_SIZE_UNIT (TREE_TYPE (expr))); + if ((off == -1 && total_bytes > len) + || off >= total_bytes) + return 0; +@@ -7502,6 +7500,22 @@ + } + } + ++/* Return true iff a STRING_CST S is accepted by ++ native_encode_expr. */ ++ ++bool ++can_native_encode_string_p (const_tree expr) ++{ ++ tree type = TREE_TYPE (expr); ++ ++ if (TREE_CODE (type) != ARRAY_TYPE ++ || TREE_CODE (TREE_TYPE (type)) != INTEGER_TYPE ++ || (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (type))) != BITS_PER_UNIT) ++ || !tree_fits_shwi_p (TYPE_SIZE_UNIT (type))) ++ return false; ++ return true; ++} ++ + /* Fold a VIEW_CONVERT_EXPR of a constant expression EXPR to type + TYPE at compile-time. If we're unable to perform the conversion + return NULL_TREE. */ +@@ -8879,7 +8893,7 @@ + tree op0 = fold_convert_loc (loc, type, TREE_OPERAND (aref0, 1)); + tree op1 = fold_convert_loc (loc, type, TREE_OPERAND (aref1, 1)); + tree esz = fold_convert_loc (loc, type, array_ref_element_size (aref0)); +- tree diff = build2 (MINUS_EXPR, type, op0, op1); ++ tree diff = fold_build2_loc (loc, MINUS_EXPR, type, op0, op1); + return fold_build2_loc (loc, PLUS_EXPR, type, + base_offset, + fold_build2_loc (loc, MULT_EXPR, type, +@@ -9638,11 +9652,6 @@ + + (lit0 != 0) + (lit1 != 0) + + (minus_lit0 != 0) + (minus_lit1 != 0)))) + { +- bool any_overflows = false; +- if (lit0) any_overflows |= TREE_OVERFLOW (lit0); +- if (lit1) any_overflows |= TREE_OVERFLOW (lit1); +- if (minus_lit0) any_overflows |= TREE_OVERFLOW (minus_lit0); +- if (minus_lit1) any_overflows |= TREE_OVERFLOW (minus_lit1); + var0 = associate_trees (loc, var0, var1, code, atype); + con0 = associate_trees (loc, con0, con1, code, atype); + lit0 = associate_trees (loc, lit0, lit1, code, atype); +@@ -9673,9 +9682,8 @@ + } + + /* Don't introduce overflows through reassociation. */ +- if (!any_overflows +- && ((lit0 && TREE_OVERFLOW_P (lit0)) +- || (minus_lit0 && TREE_OVERFLOW_P (minus_lit0)))) ++ if ((lit0 && TREE_OVERFLOW_P (lit0)) ++ || (minus_lit0 && TREE_OVERFLOW_P (minus_lit0))) + return NULL_TREE; + + if (minus_lit0) +Index: gcc/fold-const.h +=================================================================== +--- a/src/gcc/fold-const.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fold-const.h (.../branches/gcc-7-branch) +@@ -28,6 +28,7 @@ + extern int native_encode_expr (const_tree, unsigned char *, int, int off = -1); + extern tree native_interpret_expr (tree, const unsigned char *, int); + extern bool can_native_encode_type_p (tree); ++extern bool can_native_encode_string_p (const_tree); + + /* Fold constants as much as possible in an expression. + Returns the simplified expression. +Index: gcc/omp-low.c +=================================================================== +--- a/src/gcc/omp-low.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/omp-low.c (.../branches/gcc-7-branch) +@@ -800,6 +800,8 @@ + + if (TREE_CODE (var) == LABEL_DECL) + { ++ if (FORCED_LABEL (var) || DECL_NONLOCAL (var)) ++ return var; + new_var = create_artificial_label (DECL_SOURCE_LOCATION (var)); + DECL_CONTEXT (new_var) = current_function_decl; + insert_decl_map (&ctx->cb, var, new_var); +@@ -6925,10 +6927,14 @@ + rhs_p = gimple_omp_for_initial_ptr (stmt, i); + if (!is_gimple_min_invariant (*rhs_p)) + *rhs_p = get_formal_tmp_var (*rhs_p, &body); ++ else if (TREE_CODE (*rhs_p) == ADDR_EXPR) ++ recompute_tree_invariant_for_addr_expr (*rhs_p); + + rhs_p = gimple_omp_for_final_ptr (stmt, i); + if (!is_gimple_min_invariant (*rhs_p)) + *rhs_p = get_formal_tmp_var (*rhs_p, &body); ++ else if (TREE_CODE (*rhs_p) == ADDR_EXPR) ++ recompute_tree_invariant_for_addr_expr (*rhs_p); + + rhs_p = &TREE_OPERAND (gimple_omp_for_incr (stmt, i), 1); + if (!is_gimple_min_invariant (*rhs_p)) +@@ -9089,7 +9095,7 @@ + } + if (kind == NULL) + { +- gcc_checking_assert (flag_openmp); ++ gcc_checking_assert (flag_openmp || flag_openmp_simd); + kind = "OpenMP"; + } + +@@ -9349,7 +9355,7 @@ + /* opt_pass methods: */ + virtual bool gate (function *) + { +- return flag_cilkplus || flag_openacc || flag_openmp; ++ return flag_cilkplus || flag_openacc || flag_openmp || flag_openmp_simd; + } + virtual unsigned int execute (function *) + { +Index: gcc/toplev.c +=================================================================== +--- a/src/gcc/toplev.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/toplev.c (.../branches/gcc-7-branch) +@@ -2115,7 +2115,8 @@ + enough to default flags appropriately. */ + decode_options (&global_options, &global_options_set, + save_decoded_options, save_decoded_options_count, +- UNKNOWN_LOCATION, global_dc); ++ UNKNOWN_LOCATION, global_dc, ++ targetm.target_option.override); + + handle_common_deferred_options (); + +Index: gcc/tree-ssa-sccvn.c +=================================================================== +--- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-7-branch) +@@ -2304,7 +2304,7 @@ + memset (&op, 0, sizeof (op)); + op.type = vr->type; + op.opcode = MEM_REF; +- op.op0 = build_int_cst (ptr_type_node, at - rhs_offset); ++ op.op0 = build_int_cst (ptr_type_node, at - lhs_offset + rhs_offset); + op.off = at - lhs_offset + rhs_offset; + vr->operands[0] = op; + op.type = TREE_TYPE (rhs); +@@ -2990,16 +2990,13 @@ + return false; + + /* Verify the controlling stmt is the same. */ +- gimple *last1 = last_stmt (idom1); +- gimple *last2 = last_stmt (idom2); +- if (gimple_code (last1) != GIMPLE_COND +- || gimple_code (last2) != GIMPLE_COND) ++ gcond *last1 = safe_dyn_cast (last_stmt (idom1)); ++ gcond *last2 = safe_dyn_cast (last_stmt (idom2)); ++ if (! last1 || ! last2) + return false; + bool inverted_p; +- if (! cond_stmts_equal_p (as_a (last1), +- vp1->cclhs, vp1->ccrhs, +- as_a (last2), +- vp2->cclhs, vp2->ccrhs, ++ if (! cond_stmts_equal_p (last1, vp1->cclhs, vp1->ccrhs, ++ last2, vp2->cclhs, vp2->ccrhs, + &inverted_p)) + return false; + +@@ -3084,7 +3081,7 @@ + vp1.ccrhs = NULL_TREE; + basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1.block); + if (EDGE_COUNT (idom1->succs) == 2) +- if (gcond *last1 = dyn_cast (last_stmt (idom1))) ++ if (gcond *last1 = safe_dyn_cast (last_stmt (idom1))) + { + vp1.cclhs = vn_valueize (gimple_cond_lhs (last1)); + vp1.ccrhs = vn_valueize (gimple_cond_rhs (last1)); +@@ -3130,7 +3127,7 @@ + vp1->ccrhs = NULL_TREE; + basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1->block); + if (EDGE_COUNT (idom1->succs) == 2) +- if (gcond *last1 = dyn_cast (last_stmt (idom1))) ++ if (gcond *last1 = safe_dyn_cast (last_stmt (idom1))) + { + vp1->cclhs = vn_valueize (gimple_cond_lhs (last1)); + vp1->ccrhs = vn_valueize (gimple_cond_rhs (last1)); +Index: gcc/ChangeLog +=================================================================== +--- a/src/gcc/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,597 @@ ++2017-10-02 Bill Schmidt ++ ++ Backport from mainline ++ 2017-09-29 Bill Schmidt ++ ++ PR tree-optimization/82337 ++ * gimple-ssa-strength-reduction.c (find_phi_def): Don't record a ++ phi definition if the PHI result appears in an abnormal PHI. ++ (find_basis_for_base_expr): Don't record a basis if the LHS of the ++ basis appears in an abnormal PHI. ++ ++2017-09-30 Jakub Jelinek ++ ++ * config/i386/i386.c (ix86_split_idivmod): Use mode instead of ++ always SImode for DIV and MOD in REG_EQUAL notes. ++ ++ Backported from mainline ++ 2017-09-27 Jakub Jelinek ++ ++ PR c++/82159 ++ * gimplify.c (gimplify_modify_expr): Don't optimize away zero sized ++ lhs from calls if the lhs has addressable type. ++ ++2017-09-29 Krister Walfridsson ++ ++ Backport from mainline ++ 2017-06-29 Maya Rashish ++ ++ PR target/77480 ++ * config/netbsd.h (NETBSD_LIB_SPEC): Add -lc when creating shared ++ objects. ++ ++2017-09-29 Krister Walfridsson ++ ++ Backport from mainline ++ 2017-09-26 Krister Walfridsson ++ ++ PR target/39570 ++ * gcc/config/netbsd-protos.h: New file. ++ * gcc/config/netbsd.c: New file. ++ * gcc/config/netbsd.h (SUBTARGET_INIT_BUILTINS): Define. ++ * gcc/config/t-netbsd: New file. ++ * gcc/config.gcc (tm_p_file): Add netbsd-protos.h. ++ (tmake_file) Add t-netbsd. ++ (extra_objs) Add netbsd.o. ++ ++2017-09-28 Krister Walfridsson ++ ++ Backport from mainline ++ 2017-05-14 Krister Walfridsson ++ ++ PR target/80600 ++ * config/netbsd.h (NETBSD_LIBGCC_SPEC): Always add -lgcc. ++ ++2017-09-27 Christophe Lyon ++ ++ Backport from trunk r249639. ++ 2017-06-26 Christophe Lyon ++ ++ * doc/sourcebuild.texi (ARM-specific attributes): Document new ++ arm_neon_ok_no_float_abi effective target. ++ ++2017-09-26 Richard Biener ++ ++ Backport from mainline ++ 2017-09-19 Richard Biener ++ ++ PR tree-optimization/82244 ++ * tree-vrp.c (remove_range_assertions): Do not propagate ++ a constant to abnormals but replace the assert with a copy. ++ ++ 2017-09-21 Richard Biener ++ ++ PR tree-optimization/82276 ++ PR tree-optimization/82244 ++ * tree-vrp.c (build_assert_expr_for): Set ++ SSA_NAME_OCCURS_IN_ABNORMAL_PHI if the variable we assert on ++ has it set. ++ (remove_range_assertions): Revert earlier change. ++ ++ 2017-09-20 Richard Biener ++ ++ PR tree-optimization/82264 ++ * tree-ssa-sccvn.c (vn_phi_eq): Use safe_dyn_cast to check ++ for GIMPLE_CONDs. ++ (vn_phi_lookup): Likewise. ++ (vn_phi_insert): Likewise. ++ * is-a.h (safe_dyn_cast): New. ++ ++ 2017-09-25 Richard Biener ++ ++ PR tree-optimization/82285 ++ * tree-vect-patterns.c (vect_recog_bool_pattern): Also handle ++ enumeral types. ++ ++ 2017-09-22 Richard Biener ++ ++ PR tree-optimization/82291 ++ * tree-if-conv.c (predicate_mem_writes): Make sure to ++ remove writes in blocks predicated with false. ++ ++2017-09-21 Alan Modra ++ ++ PR target/81996 ++ * gcc/config/rs6000/rs6000.c (rs6000_return_addr): Use ++ stack_pointer_rtx for count 0. Update comments. Break up ++ large rtl expression. ++ ++2017-09-21 Wilco Dijkstra ++ ++ PR target/71951 ++ * config/aarch64/aarch64.h (LIBGCC2_UNWIND_ATTRIBUTE): Define. ++ ++2017-09-19 Uros Bizjak ++ ++ * config/i386/i386.c (fold_builtin_cpu): Add M_AMDFAM17H ++ to processor_model and "amdfam17h" to arch_names_table. ++ * doc/extend.texi (__builtin_cpu_is): Document amdfam17h CPU name. ++ ++2017-09-19 Martin Liska ++ ++ PR c++/81355 ++ * config/i386/i386.c (sorted_attr_string): Skip empty strings. ++ ++2017-09-19 Martin Liska ++ ++ Revert backport: ++ 2017-08-10 Martin Liska ++ ++ PR c++/81355 ++ * c-attribs.c (handle_target_attribute): ++ Report warning for an empty string argument of target attribute. ++ ++2017-09-18 Richard Biener ++ ++ Backport from mainline ++ 2017-09-04 Richard Biener ++ ++ PR tree-optimization/82084 ++ * fold-const.h (can_native_encode_string_p): Declare. ++ * fold-const.c (can_native_encode_string_p): Factor out from ... ++ (native_encode_string): ... here. ++ * tree-vect-stmts.c (vectorizable_store): Call it to avoid ++ vectorizing stores from constants we later cannot handle. ++ ++ 2017-09-06 Richard Biener ++ ++ PR tree-optimization/82108 ++ * tree-vect-stmts.c (vectorizable_load): Fix pointer adjustment ++ for gap in the non-permutation SLP case. ++ ++2017-09-15 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-14 Jakub Jelinek ++ ++ PR target/81325 ++ * cfgbuild.c (find_bb_boundaries): Ignore debug insns in decisions ++ if and where to split a bb, except for splitting before debug insn ++ sequences followed by non-label real insn. Delete debug insns ++ in between basic blocks. ++ ++ 2017-09-12 Jakub Jelinek ++ ++ PR target/82112 ++ * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): For ++ ALTIVEC_BUILTIN_VEC_LD if arg1 has array type call default_conversion ++ on it early, rather than manual conversion late. For ++ ALTIVEC_BUILTIN_VEC_ST if arg2 has array type call default_conversion ++ instead of performing manual conversion. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-09-14 Martin Liska ++ ++ * gimple-ssa-strength-reduction.c (create_add_on_incoming_edge): ++ Add proper printf format. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-30 Martin Liska ++ ++ PR inline-asm/82001 ++ * ipa-icf-gimple.c (func_checker::compare_tree_list_operand): ++ Rename to ... ++ (func_checker::compare_asm_inputs_outputs): ... this function. ++ (func_checker::compare_gimple_asm): Use the function to compare ++ also ASM constrains. ++ * ipa-icf-gimple.h: Rename the function. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-29 Martin Liska ++ ++ PR other/39851 ++ * gcc.c (driver_handle_option): Add new argument. ++ * opts-common.c (handle_option): Pass ++ target_option_override_hook. ++ * opts-global.c (lang_handle_option): Add new option. ++ (set_default_handlers): Add new argument. ++ (decode_options): Likewise. ++ * opts.c (target_handle_option): Likewise. ++ (common_handle_option): Call target_option_override_hook. ++ * opts.h (struct cl_option_handler_func): Add hook for ++ target option override. ++ (struct cl_option_handlers): Likewise. ++ (set_default_handlers): Add new argument. ++ (decode_options): Likewise. ++ (common_handle_option): Likewise. ++ (target_handle_option): Likewise. ++ * toplev.c (toplev::main): Pass targetm.target_option.override ++ hook. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-10 Martin Liska ++ ++ PR c++/81355 ++ * c-attribs.c (handle_target_attribute): ++ Report warning for an empty string argument of target attribute. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-08 Martin Liska ++ ++ PR tree-opt/81696 ++ * ipa-icf-gimple.c (func_checker::compare_cst_or_decl): Consider ++ LABEL_DECLs that can be from a different function. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-06-28 Martin Liska ++ ++ PR ipa/81128 ++ * ipa-visibility.c (non_local_p): Handle visibility. ++ ++2017-09-12 Bill Schmidt ++ ++ Backport from mainline ++ 2017-09-05 Bill Schmidt ++ ++ PR target/81833 ++ * config/rs6000/altivec.md (altivec_vsum2sws): Convert from a ++ define_insn to a define_expand. ++ (altivec_vsum2sws_direct): New define_insn. ++ (altivec_vsumsws): Convert from a define_insn to a define_expand. ++ ++2017-09-11 Max Filippov ++ ++ Backport from mainline ++ PR target/82181 ++ * config/xtensa/xtensa.c (xtensa_mem_offset): Check that both ++ words of DImode object are reachable by xtensa_uimm8x4 access. ++ ++2017-09-10 Bill Schmidt ++ ++ Backport from mainline ++ 2017-05-11 Bill Schmidt ++ ++ PR target/80695 ++ * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): ++ Account for direct move costs for vec_construct of integer ++ vectors. ++ ++ Backport from mainline ++ 2017-07-23 Bill Schmidt ++ ++ PR target/80695 ++ * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): ++ Reduce cost estimate for direct moves. ++ ++2017-09-08 Eric Botcazou ++ ++ PR target/81988 ++ * config/sparc/sparc.md (mulsi3): Rename into *mulsi3_sp32. ++ (*mulsi3_sp64): New instruction. ++ (mulsi3): New expander. ++ ++2017-09-07 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-05 Jakub Jelinek ++ ++ PR middle-end/81768 ++ * omp-low.c (lower_omp_for): Recompute tree invariant if ++ gimple_omp_for_initial/final is ADDR_EXPR. ++ ++ PR middle-end/81768 ++ * omp-expand.c (expand_omp_simd): Force second operands of COND_EXPR ++ into gimple val before gimplification fo the COND_EXPR. ++ ++ 2017-09-04 Jakub Jelinek ++ ++ * lra-remat.c (reg_overlap_for_remat_p): Fix a pasto. ++ ++ 2017-09-01 Jakub Jelinek ++ ++ PR sanitizer/81923 ++ * asan.c (create_odr_indicator): Strip name encoding from assembler ++ name before appending it after __odr_asan_. ++ ++ 2017-08-09 Jakub Jelinek ++ ++ PR c/81687 ++ * omp-low.c (omp_copy_decl): Don't remap FORCED_LABEL or DECL_NONLOCAL ++ LABEL_DECLs. ++ * tree-cfg.c (move_stmt_op): Don't adjust DECL_CONTEXT of FORCED_LABEL ++ or DECL_NONLOCAL labels. ++ (move_stmt_r) : Adjust DECL_CONTEXT of FORCED_LABEL ++ or DECL_NONLOCAL labels here. ++ ++ 2017-08-03 Jakub Jelinek ++ ++ PR target/81621 ++ * bb-reorder.c (pass_partition_blocks::execute): Return TODO_df_finish ++ after setting changeable df flags. ++ ++ PR driver/81650 ++ * calls.c (alloc_max_size): Use HOST_WIDE_INT_UC (10??) ++ instead of 10??LU, perform unit multiplication in wide_int, ++ don't change alloc_object_size_limit if the limit is larger ++ than SSIZE_MAX. ++ ++ PR middle-end/81052 ++ * omp-low.c (diagnose_sb_0): Handle flag_openmp_simd like flag_openmp. ++ (pass_diagnose_omp_blocks::gate): Enable also for flag_openmp_simd. ++ ++2017-09-06 Bill Schmidt ++ ++ Backport from mainline: ++ 2017-08-30 Bill Schmidt ++ ++ PR tree-optimization/81987 ++ * gimple-ssa-strength-reduction.c (insert_initializers): Don't ++ insert an initializer in a location not dominated by the stride ++ definition. ++ ++2017-09-05 Bill Schmidt ++ ++ Backport from mainline ++ 2017-08-29 Bill Schmidt ++ Jakub Jelinek ++ Richard Biener ++ ++ PR tree-optimization/81503 ++ * gimple-ssa-strength-reduction.c (replace_mult_candidate): Ensure ++ folded constant fits in the target type; reorder tests for clarity. ++ ++2017-09-05 Pierre-Marie de Rodat ++ ++ Backport from trunk ++ PR ada/79542 ++ * dwarf2out.c (modified_type_die): For C typedef types that have ++ an ultimate origin, process the ultimate origin instead of the ++ input type. ++ (gen_typedef_die): Assert that input DECLs have no ultimate ++ origin. ++ (gen_type_die_with_usage): For typedef variants that have an ++ ultimate origin, just call gen_decl_die on the original DECL. ++ (process_scope_var): Avoid creating DIEs for local typedefs and ++ concrete static variables. ++ ++2017-08-31 Bill Schmidt ++ ++ Backport from mainline ++ 2017-08-25 Bill Schmidt ++ ++ PR target/81504 ++ * config/rs6000/rs6000.c (find_alignment_op): Add reference ++ parameter and_insn and return it. ++ (recombine_lvx_pattern): Insert a copy to ensure availability of ++ the base register of the copied masking operation at the point of ++ the instruction replacement. ++ (recombine_stvx_pattern): Likewise. ++ ++2017-08-29 Michael Meissner ++ ++ Back port from trunk ++ 2017-08-07 Michael Meissner ++ ++ PR target/81593 ++ * config/rs6000/vsx.md (vsx_concat__1): New combiner insns ++ to recognize inserting into a vector from a double word element ++ that was extracted from another vector, and eliminate extra ++ XXPERMDI instructions. ++ (vsx_concat__2): Likewise. ++ (vsx_concat__3): Likewise. ++ (vsx_set_, VSX_D): Rewrite vector set in terms of vector ++ concat to allow optimizing inserts from previous extracts. ++ ++2017-08-29 Alan Modra ++ ++ Apply from mainline ++ 2017-08-12 Alan Modra ++ PR target/81170 ++ PR target/81295 ++ * config/rs6000/sysv4.h (STARTFILE_LINUX_SPEC): Upgrade to ++ match gnu-user.h startfile. ++ (ENDFILE_LINUX_SPEC): Similarly. ++ ++ 2017-08-08 Alan Modra ++ H.J. Lu ++ PR target/81170 ++ PR target/81295 ++ PR driver/81523 ++ * gcc.c (NO_PIE_SPEC): Delete. ++ (PIE_SPEC): Define as !no-pie/pie. Move static|shared|r ++ exclusion.. ++ (LINK_PIE_SPEC): ..to here. ++ (LINK_COMMAND_SPEC): Support -no-pie. ++ * config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Correct ++ chain of crtbegin*.o selection, update for PIE_SPEC changes and ++ format. ++ (GNU_USER_TARGET_ENDFILE_SPEC): Similarly. ++ * config/sol2.h (STARTFILE_CRTBEGIN_SPEC): Similarly. ++ (ENDFILE_CRTEND_SPEC): Similarly. ++ ++2017-08-29 Richard Biener ++ ++ Backport from mainline ++ 2017-08-28 Richard Biener ++ ++ PR tree-optimization/81977 ++ * tree-ssa-sccvn.c (vn_reference_lookup_3): Fix look through ++ memcpy. ++ ++ 2017-08-28 Richard Biener ++ ++ PR debug/81993 ++ * dwarf2out.c (gen_remaining_tmpl_value_param_die_attributes): ++ Do nothing for removed DIEs. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-06-14 Richard Biener ++ ++ PR middle-end/81088 ++ * fold-const.c (split_tree): Drop TREE_OVERFLOW flag from ++ literal constants. ++ (fold_binary_loc): When associating do not treat pre-existing ++ TREE_OVERFLOW on literal constants as a reason to allow ++ TREE_OVERFLOW on associated literal constants. ++ ++ 2017-06-13 Richard Biener ++ ++ PR middle-end/81065 ++ * fold-const.c (extract_muldiv_1): Remove bogus distribution ++ case of C * (x * C2 + C3). ++ (fold_addr_of_array_ref_difference): Properly fold index difference. ++ ++ 2017-06-07 Marek Polacek ++ ++ PR sanitizer/80932 ++ * fold-const.c (extract_muldiv_1) : Add ++ TYPE_OVERFLOW_WRAPS check. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-08-21 Richard Biener ++ ++ PR middle-end/81884 ++ * tree-ssa-alias.c (stmt_kills_ref_p): Handle array accesses ++ at struct end conservatively when comparing common bases. ++ ++ 2017-05-04 Richard Biener ++ ++ * tree.c (array_at_struct_end_p): Handle arrays at struct ++ end with flexarrays more conservatively. Refactor and treat ++ arrays of arrays or aggregates more strict. Fix ++ VIEW_CONVERT_EXPR handling. Remove allow_compref argument. ++ * tree.h (array_at_struct_end_p): Adjust prototype. ++ * gimple-fold.c (get_range_strlen): Likewise. ++ * tree-chkp.c (chkp_may_narrow_to_field): Likewise. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-08-01 Richard Biener ++ ++ PR tree-optimization/81181 ++ * tree-ssa-pre.c (compute_antic_aux): Defer clean() to ... ++ (compute_antic): ... end of iteration here. ++ ++ 2017-08-08 Richard Biener ++ ++ PR tree-optimization/81723 ++ * tree-vect-slp.c (struct bst_traits): New hash traits. ++ (bst_fail): New global. ++ (vect_build_slp_tree_2): New worker, split out from ... ++ (vect_build_slp_tree): ... this now wrapping it with using ++ bst_fail set to cache SLP tree build fails. Properly handle ++ max_tree_size. ++ (vect_analyze_slp_instance): Allocate and free bst_fail. ++ ++ 2017-08-24 Richard Biener ++ ++ PR target/81921 ++ * config/i386/i386.c: Include symbol-summary.h, ipa-prop.h ++ and ipa-inline.h. ++ (ix86_can_inline_p): When ix86_fpmath flags do not match ++ check whether the callee uses FP math at all. ++ ++2017-08-23 Peter Bergner ++ ++ Backport from mainline ++ 2017-08-17 Peter Bergner ++ ++ PR target/72804 ++ * config/rs6000/vsx.md (*vsx_le_permute_): Add support for ++ operands residing in integer registers. ++ (*vsx_le_perm_load_): Likewise. ++ (*vsx_le_perm_store_): Likewise. ++ (define_peephole2): Add peepholes to optimize the above. ++ ++2017-08-22 Peter Bergner ++ ++ Backport from mainline ++ 2017-08-17 Peter Bergner ++ ++ PR target/80210 ++ * config/rs6000/rs6000.c (rs6000_activate_target_options): New function. ++ (rs6000_set_current_function): Rewrite function to use it. ++ ++2017-08-22 Sebastian Huber ++ ++ Backport from mainline ++ 2017-08-22 Sebastian Huber ++ ++ * config.gcc (powerpc-*-rtems*): Add rs6000/linux64.opt. ++ * config/rs6000/rtems.h (ASM_PREFERRED_EH_DATA_FORMAT): New define. ++ (DOT_SYMBOLS): Likewise. ++ (MINIMAL_TOC_SECTION_ASM_OP): Likewise. ++ (RELOCATABLE_NEEDS_FIXUP): Likewise. ++ (RS6000_ABI_NAME): Likewise. ++ (TARGET_CMODEL): Likewise. ++ (TOC_SECTION_ASM_OP): Likewise. ++ (SET_CMODEL): New macro. ++ (SUBSUBTARGET_OVERRIDE_OPTIONS): Evaluate cmodel options. ++ ++2017-08-22 Georg-Johann Lay ++ ++ Backport from 2017-08-22 trunk r251256. ++ ++ PR target/81910 ++ * config/avr/avr.c (avr_handle_addr_attribute): Early return if ++ not VAR_P. Filter attribute warnings with OPT_Wattributes. ++ (avr_attribute_table) : Initialize ++ .decl_required with true. ++ ++2017-08-21 Georg-Johann Lay ++ ++ PR target/79883 ++ * config/avr/avr.c (avr_set_current_function): Typo in diagnostic. ++ ++2017-08-19 Uros Bizjak ++ ++ PR target/81894 ++ * doc/extend.texi (x86 Built-in Functions): Correct the name of ++ __builtin_ia32_lzcnt_u16. ++ ++2017-08-17 Uros Bizjak ++ ++ Backport from mainline ++ 2017-08-17 Maxim Ostapenko ++ ++ PR target/81861 ++ * config/i386/i386.c (ix86_option_override_internal): Save target ++ specific options after ix86_stack_protector_guard_reg was changed. ++ ++2017-08-16 Bill Schmidt ++ ++ Backport from mainline ++ 2017-08-08 Bill Schmidt ++ ++ PR tree-optimization/81354 ++ * gimple-ssa-strength-reduction.c (create_add_on_incoming_edge): ++ Insert on edges rather than explicitly creating landing pads. ++ (analyze_candidates_and_replace): Commit edge inserts. ++ ++2017-08-15 Joseph Myers ++ ++ PR target/78460 ++ PR target/67712 ++ * config/sh/sh-mem.cc (sh_expand_cmpnstr): Only unroll for ++ constant count if that count is less than 32. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/testsuite/gcc.target/powerpc/pr81833-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr81833-1.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr81833-1.c (.../branches/gcc-7-branch) +@@ -0,0 +1,59 @@ ++/* PR81833: This used to fail due to improper implementation of vec_msum. */ ++/* Test case relies on -mcpu=power7 or later. Currently we don't have ++ machinery to express that, so we have two separate tests for -mcpu=power7 ++ and -mcpu=power8 to catch 32-bit BE on P7 and 64-bit BE/LE on P8. */ ++ ++/* { dg-do run } */ ++/* { dg-require-effective-target p8vector_hw } */ ++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ ++/* { dg-options "-mcpu=power8 -O2" } */ ++ ++#include ++ ++#define vec_u8 vector unsigned char ++#define vec_s8 vector signed char ++#define vec_u16 vector unsigned short ++#define vec_s16 vector signed short ++#define vec_u32 vector unsigned int ++#define vec_s32 vector signed int ++#define vec_f vector float ++ ++#define LOAD_ZERO const vec_u8 zerov = vec_splat_u8 (0) ++ ++#define zero_u8v (vec_u8) zerov ++#define zero_s8v (vec_s8) zerov ++#define zero_u16v (vec_u16) zerov ++#define zero_s16v (vec_s16) zerov ++#define zero_u32v (vec_u32) zerov ++#define zero_s32v (vec_s32) zerov ++ ++signed int __attribute__((noinline)) ++scalarproduct_int16_vsx (const signed short *v1, const signed short *v2, ++ int order) ++{ ++ int i; ++ LOAD_ZERO; ++ register vec_s16 vec1; ++ register vec_s32 res = vec_splat_s32 (0), t; ++ signed int ires; ++ ++ for (i = 0; i < order; i += 8) { ++ vec1 = vec_vsx_ld (0, v1); ++ t = vec_msum (vec1, vec_vsx_ld (0, v2), zero_s32v); ++ res = vec_sums (t, res); ++ v1 += 8; ++ v2 += 8; ++ } ++ res = vec_splat (res, 3); ++ vec_ste (res, 0, &ires); ++ ++ return ires; ++} ++ ++int main(void) ++{ ++ const signed short test_vec[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; ++ if (scalarproduct_int16_vsx (test_vec, test_vec, 8) != 8) ++ __builtin_abort (); ++ return 0; ++} +Index: gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c (.../branches/gcc-7-branch) +@@ -0,0 +1,11 @@ ++/* { dg-do run { target { powerpc64le*-*-linux* } } } */ ++/* { dg-require-effective-target vsx_hw } */ ++/* { dg-options "-O2 -mvsx -maltivec=be" } */ ++ ++/* Test various ways of creating vectors with 2 double words and accessing the ++ elements. This test uses the long (on 64-bit systems) or long long datatype ++ (on 32-bit systems). ++ ++ This test explicitly tests -maltivec=be to make sure things are correct. */ ++ ++#include "vec-setup.h" +Index: gcc/testsuite/gcc.target/powerpc/pr81833-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr81833-2.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr81833-2.c (.../branches/gcc-7-branch) +@@ -0,0 +1,59 @@ ++/* PR81833: This used to fail due to improper implementation of vec_msum. */ ++/* Test case relies on -mcpu=power7 or later. Currently we don't have ++ machinery to express that, so we have two separate tests for -mcpu=power7 ++ and -mcpu=power8 to catch 32-bit BE on P7 and 64-bit BE/LE on P8. */ ++ ++/* { dg-do run } */ ++/* { dg-require-effective-target vsx_hw } */ ++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ ++/* { dg-options "-mcpu=power7 -O2" } */ ++ ++#include ++ ++#define vec_u8 vector unsigned char ++#define vec_s8 vector signed char ++#define vec_u16 vector unsigned short ++#define vec_s16 vector signed short ++#define vec_u32 vector unsigned int ++#define vec_s32 vector signed int ++#define vec_f vector float ++ ++#define LOAD_ZERO const vec_u8 zerov = vec_splat_u8 (0) ++ ++#define zero_u8v (vec_u8) zerov ++#define zero_s8v (vec_s8) zerov ++#define zero_u16v (vec_u16) zerov ++#define zero_s16v (vec_s16) zerov ++#define zero_u32v (vec_u32) zerov ++#define zero_s32v (vec_s32) zerov ++ ++signed int __attribute__((noinline)) ++scalarproduct_int16_vsx (const signed short *v1, const signed short *v2, ++ int order) ++{ ++ int i; ++ LOAD_ZERO; ++ register vec_s16 vec1; ++ register vec_s32 res = vec_splat_s32 (0), t; ++ signed int ires; ++ ++ for (i = 0; i < order; i += 8) { ++ vec1 = vec_vsx_ld (0, v1); ++ t = vec_msum (vec1, vec_vsx_ld (0, v2), zero_s32v); ++ res = vec_sums (t, res); ++ v1 += 8; ++ v2 += 8; ++ } ++ res = vec_splat (res, 3); ++ vec_ste (res, 0, &ires); ++ ++ return ires; ++} ++ ++int main(void) ++{ ++ const signed short test_vec[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; ++ if (scalarproduct_int16_vsx (test_vec, test_vec, 8) != 8) ++ __builtin_abort (); ++ return 0; ++} +Index: gcc/testsuite/gcc.target/powerpc/pr82112.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr82112.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr82112.c (.../branches/gcc-7-branch) +@@ -0,0 +1,16 @@ ++/* PR target/82112 */ ++/* { dg-do compile } */ ++/* { dg-require-effective-target powerpc_altivec_ok } */ ++/* { dg-options "-maltivec -std=gnu90" } */ ++ ++#include ++ ++struct __attribute__((aligned (16))) S { unsigned char c[64]; } bar (void); ++vector unsigned char v; ++ ++void ++foo (void) ++{ ++ vec_ld (0, bar ().c); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */ ++ vec_st (v, 0, bar ().c); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */ ++} +Index: gcc/testsuite/gcc.target/powerpc/vec-setup.h +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vec-setup.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-setup.h (.../branches/gcc-7-branch) +@@ -0,0 +1,366 @@ ++#include ++ ++/* Test various ways of creating vectors with 2 double words and accessing the ++ elements. This include files supports: ++ ++ testing double ++ testing long on 64-bit systems ++ testing long long on 32-bit systems. ++ ++ The endian support is: ++ ++ big endian ++ little endian with little endian element ordering ++ little endian with big endian element ordering. */ ++ ++#ifdef DEBUG ++#include ++#define DEBUG0(STR) fputs (STR, stdout) ++#define DEBUG2(STR,A,B) printf (STR, A, B) ++ ++static int errors = 0; ++ ++#else ++#include ++#define DEBUG0(STR) ++#define DEBUG2(STR,A,B) ++#endif ++ ++#if defined(DO_DOUBLE) ++#define TYPE double ++#define STYPE "double" ++#define ZERO 0.0 ++#define ONE 1.0 ++#define TWO 2.0 ++#define THREE 3.0 ++#define FOUR 4.0 ++#define FIVE 5.0 ++#define SIX 6.0 ++#define FMT "g" ++ ++#elif defined(_ARCH_PPC64) ++#define TYPE long ++#define STYPE "long" ++#define ZERO 0L ++#define ONE 1L ++#define TWO 2L ++#define THREE 3L ++#define FOUR 4L ++#define FIVE 5L ++#define SIX 6L ++#define FMT "ld" ++ ++#else ++#define TYPE long long ++#define STYPE "long long" ++#define ZERO 0LL ++#define ONE 1LL ++#define TWO 2LL ++#define THREE 3LL ++#define FOUR 4LL ++#define FIVE 5LL ++#define SIX 6LL ++#define FMT "lld" ++#endif ++ ++/* Macros to order the left/right values correctly. Note, -maltivec=be does ++ not change the order for static initializations, so we have to handle it ++ specially. */ ++ ++#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ++#define INIT_ORDER(A, B) (TYPE) A, (TYPE) B ++#define ELEMENT_ORDER(A, B) (TYPE) A, (TYPE) B ++#define ENDIAN "-mbig" ++ ++#elif __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ ++#define NO_ARRAY ++#define INIT_ORDER(A, B) (TYPE) B, (TYPE) A ++#define ELEMENT_ORDER(A, B) (TYPE) A, (TYPE) B ++#define ENDIAN "-mlittle -maltivec=be" ++ ++#else ++#define INIT_ORDER(A, B) (TYPE) B, (TYPE) A ++#define ELEMENT_ORDER(A, B) (TYPE) B, (TYPE) A ++#define ENDIAN "-mlittle" ++#endif ++ ++static volatile TYPE five = FIVE; ++static volatile TYPE six = SIX; ++static volatile vector TYPE s_v12 = { ONE, TWO }; ++static volatile vector TYPE g_v34 = { THREE, FOUR }; ++ ++ ++__attribute__((__noinline__)) ++static void ++vector_check (vector TYPE v, TYPE expect_hi, TYPE expect_lo) ++{ ++ TYPE actual_hi, actual_lo; ++#ifdef DEBUG ++ const char *pass_fail; ++#endif ++ ++ __asm__ ("xxlor %x0,%x1,%x1" : "=&wa" (actual_hi) : "wa" (v)); ++ __asm__ ("xxpermdi %x0,%x1,%x1,3" : "=&wa" (actual_lo) : "wa" (v)); ++ ++#ifdef DEBUG ++ if ((actual_hi == expect_hi) && (actual_lo == expect_lo)) ++ pass_fail = ", pass"; ++ else ++ { ++ pass_fail = ", fail"; ++ errors++; ++ } ++ ++ printf ("Expected %" FMT ", %" FMT ", got %" FMT ", %" FMT "%s\n", ++ expect_hi, expect_lo, ++ actual_hi, actual_lo, ++ pass_fail); ++#else ++ if ((actual_hi != expect_hi) || (actual_lo != expect_lo)) ++ abort (); ++#endif ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++combine (TYPE op0, TYPE op1) ++{ ++ return (vector TYPE) { op0, op1 }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++combine_insert (TYPE op0, TYPE op1) ++{ ++ vector TYPE ret = (vector TYPE) { ZERO, ZERO }; ++ ret = vec_insert (op0, ret, 0); ++ ret = vec_insert (op1, ret, 1); ++ return ret; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract_00 (vector TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 0), vec_extract (b, 0) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract_01 (vector TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 0), vec_extract (b, 1) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract_10 (vector TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 1), vec_extract (b, 0) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract_11 (vector TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 1), vec_extract (b, 1) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract2_0s (vector TYPE a, TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 0), b }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract2_1s (vector TYPE a, TYPE b) ++{ ++ return (vector TYPE) { vec_extract (a, 1), b }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract2_s0 (TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { a, vec_extract (b, 0) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract2_s1 (TYPE a, vector TYPE b) ++{ ++ return (vector TYPE) { a, vec_extract (b, 1) }; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++concat_extract_nn (vector TYPE a, vector TYPE b, size_t i, size_t j) ++{ ++ return (vector TYPE) { vec_extract (a, i), vec_extract (b, j) }; ++} ++ ++#ifndef NO_ARRAY ++__attribute__((__noinline__)) ++static vector TYPE ++array_0 (vector TYPE v, TYPE a) ++{ ++ v[0] = a; ++ return v; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++array_1 (vector TYPE v, TYPE a) ++{ ++ v[1] = a; ++ return v; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++array_01 (vector TYPE v, TYPE a, TYPE b) ++{ ++ v[0] = a; ++ v[1] = b; ++ return v; ++} ++ ++__attribute__((__noinline__)) ++static vector TYPE ++array_01b (TYPE a, TYPE b) ++{ ++ vector TYPE v = (vector TYPE) { 0, 0 }; ++ v[0] = a; ++ v[1] = b; ++ return v; ++} ++#endif ++ ++int ++main (void) ++{ ++ vector TYPE a = (vector TYPE) { ONE, TWO }; ++ vector TYPE b = (vector TYPE) { THREE, FOUR }; ++ size_t i, j; ++ ++#ifndef NO_ARRAY ++ vector TYPE z = (vector TYPE) { ZERO, ZERO }; ++#endif ++ ++ DEBUG2 ("Endian: %s, type: %s\n", ENDIAN, STYPE); ++ DEBUG0 ("\nStatic/global initialization\n"); ++ vector_check (s_v12, INIT_ORDER (1, 2)); ++ vector_check (g_v34, INIT_ORDER (3, 4)); ++ ++ DEBUG0 ("\nVector via constant runtime intiialization\n"); ++ vector_check (a, INIT_ORDER (1, 2)); ++ vector_check (b, INIT_ORDER (3, 4)); ++ ++ DEBUG0 ("\nCombine scalars using vector initialization\n"); ++ vector_check (combine (1, 2), INIT_ORDER (1, 2)); ++ vector_check (combine (3, 4), INIT_ORDER (3, 4)); ++ ++ DEBUG0 ("\nSetup with vec_insert\n"); ++ a = combine_insert (1, 2); ++ b = combine_insert (3, 4); ++ vector_check (a, ELEMENT_ORDER (1, 2)); ++ vector_check (b, ELEMENT_ORDER (3, 4)); ++ ++#ifndef NO_ARRAY ++ DEBUG0 ("\nTesting array syntax\n"); ++ vector_check (array_0 (a, FIVE), ELEMENT_ORDER (5, 2)); ++ vector_check (array_1 (b, SIX), ELEMENT_ORDER (3, 6)); ++ vector_check (array_01 (z, FIVE, SIX), ELEMENT_ORDER (5, 6)); ++ vector_check (array_01b (FIVE, SIX), ELEMENT_ORDER (5, 6)); ++ ++ vector_check (array_0 (a, five), ELEMENT_ORDER (5, 2)); ++ vector_check (array_1 (b, six), ELEMENT_ORDER (3, 6)); ++ vector_check (array_01 (z, five, six), ELEMENT_ORDER (5, 6)); ++ vector_check (array_01b (five, six), ELEMENT_ORDER (5, 6)); ++#else ++ DEBUG0 ("\nSkipping array syntax on -maltivec=be\n"); ++#endif ++ ++ DEBUG0 ("\nTesting concat and extract\n"); ++ vector_check (concat_extract_00 (a, b), INIT_ORDER (1, 3)); ++ vector_check (concat_extract_01 (a, b), INIT_ORDER (1, 4)); ++ vector_check (concat_extract_10 (a, b), INIT_ORDER (2, 3)); ++ vector_check (concat_extract_11 (a, b), INIT_ORDER (2, 4)); ++ ++ DEBUG0 ("\nTesting concat and extract #2\n"); ++ vector_check (concat_extract2_0s (a, FIVE), INIT_ORDER (1, 5)); ++ vector_check (concat_extract2_1s (a, FIVE), INIT_ORDER (2, 5)); ++ vector_check (concat_extract2_s0 (SIX, a), INIT_ORDER (6, 1)); ++ vector_check (concat_extract2_s1 (SIX, a), INIT_ORDER (6, 2)); ++ ++ DEBUG0 ("\nTesting variable concat and extract\n"); ++ for (i = 0; i < 2; i++) ++ { ++ for (j = 0; j < 2; j++) ++ { ++ static struct { ++ TYPE hi; ++ TYPE lo; ++ } hilo[2][2] = ++ { { { ONE, THREE }, { ONE, FOUR } }, ++ { { TWO, THREE }, { TWO, FOUR } } }; ++ ++ vector_check (concat_extract_nn (a, b, i, j), ++ INIT_ORDER (hilo[i][j].hi, hilo[i][j].lo)); ++ } ++ } ++ ++ DEBUG0 ("\nTesting separate function\n"); ++ vector_check (combine (vec_extract (a, 0), vec_extract (b, 0)), ++ INIT_ORDER (1, 3)); ++ ++ vector_check (combine (vec_extract (a, 0), vec_extract (b, 1)), ++ INIT_ORDER (1, 4)); ++ ++ vector_check (combine (vec_extract (a, 1), vec_extract (b, 0)), ++ INIT_ORDER (2, 3)); ++ ++ vector_check (combine (vec_extract (a, 1), vec_extract (b, 1)), ++ INIT_ORDER (2, 4)); ++ ++ vector_check (combine_insert (vec_extract (a, 0), vec_extract (b, 0)), ++ ELEMENT_ORDER (1, 3)); ++ ++ vector_check (combine_insert (vec_extract (a, 0), vec_extract (b, 1)), ++ ELEMENT_ORDER (1, 4)); ++ ++ vector_check (combine_insert (vec_extract (a, 1), vec_extract (b, 0)), ++ ELEMENT_ORDER (2, 3)); ++ ++ vector_check (combine_insert (vec_extract (a, 1), vec_extract (b, 1)), ++ ELEMENT_ORDER (2, 4)); ++ ++ ++#if defined(DO_DOUBLE) ++ DEBUG0 ("\nTesting explicit 2df concat\n"); ++ vector_check (__builtin_vsx_concat_2df (FIVE, SIX), INIT_ORDER (5, 6)); ++ vector_check (__builtin_vsx_concat_2df (five, six), INIT_ORDER (5, 6)); ++ ++#elif defined(_ARCH_PPC64) ++ DEBUG0 ("\nTesting explicit 2di concat\n"); ++ vector_check (__builtin_vsx_concat_2di (FIVE, SIX), INIT_ORDER (5, 6)); ++ vector_check (__builtin_vsx_concat_2di (five, six), INIT_ORDER (5, 6)); ++ ++#else ++ DEBUG0 ("\nSkip explicit 2di concat on 32-bit\n"); ++#endif ++ ++#ifdef DEBUG ++ if (errors) ++ printf ("\n%d error%s were found", errors, (errors == 1) ? "" : "s"); ++ else ++ printf ("\nNo errors were found.\n"); ++ ++ return errors; ++ ++#else ++ return 0; ++#endif ++} +Index: gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c (.../branches/gcc-7-branch) +@@ -0,0 +1,12 @@ ++/* { dg-do run { target { powerpc*-*-linux* } } } */ ++/* { dg-require-effective-target vsx_hw } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++/* Test various ways of creating vectors with 2 double words and accessing the ++ elements. This test uses the double datatype. ++ ++ This test explicitly tests -maltivec=be to make sure things are correct. */ ++ ++#define DO_DOUBLE ++ ++#include "vec-setup.h" +Index: gcc/testsuite/gcc.target/powerpc/pr80695-p8.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr80695-p8.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr80695-p8.c (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++/* { dg-do compile { target { powerpc*-*-* } } } */ ++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ ++/* { dg-require-effective-target vect_int } */ ++/* { dg-options "-mcpu=power8 -O3 -fdump-tree-slp-details" } */ ++ ++/* PR80695: Verify cost model for vec_construct on POWER8. */ ++ ++long a[10] __attribute__((aligned(16))); ++ ++void foo (long i, long j, long k, long l) ++{ ++ a[6] = i; ++ a[7] = j; ++ a[8] = k; ++ a[9] = l; ++} ++ ++/* { dg-final { scan-tree-dump-times "vectorization is not profitable" 1 "slp2" } } */ +Index: gcc/testsuite/gcc.target/powerpc/pr80695-p9.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr80695-p9.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr80695-p9.c (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++/* { dg-do compile { target { powerpc*-*-* } } } */ ++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ ++/* { dg-require-effective-target vect_int } */ ++/* { dg-options "-mcpu=power9 -O3 -fdump-tree-slp-details" } */ ++ ++/* PR80695: Verify cost model for vec_construct on POWER9. */ ++ ++long a[10] __attribute__((aligned(16))); ++ ++void foo (long i, long j, long k, long l) ++{ ++ a[6] = i; ++ a[7] = j; ++ a[8] = k; ++ a[9] = l; ++} ++ ++/* { dg-final { scan-tree-dump-times "vectorization is not profitable" 1 "slp2" } } */ +Index: gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c (.../branches/gcc-7-branch) +@@ -0,0 +1,25 @@ ++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ ++/* { dg-skip-if "" { powerpc*-*-darwin* } } */ ++/* { dg-require-effective-target powerpc_vsx_ok } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++vector unsigned long ++test_vpasted (vector unsigned long high, vector unsigned long low) ++{ ++ vector unsigned long res; ++ res[1] = high[1]; ++ res[0] = low[0]; ++ return res; ++} ++ ++/* { dg-final { scan-assembler-times {\mxxpermdi\M} 1 } } */ ++/* { dg-final { scan-assembler-not {\mvspltisw\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxlor\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxlxor\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxspltib\M} } } */ ++/* { dg-final { scan-assembler-not {\mlxvx?\M} } } */ ++/* { dg-final { scan-assembler-not {\mlxv[dw][24]x\M} } } */ ++/* { dg-final { scan-assembler-not {\mlvx\M} } } */ ++/* { dg-final { scan-assembler-not {\mstxvx?\M} } } */ ++/* { dg-final { scan-assembler-not {\mstxv[dw][24]x\M} } } */ ++/* { dg-final { scan-assembler-not {\mstvx\M} } } */ +Index: gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c (.../branches/gcc-7-branch) +@@ -0,0 +1,25 @@ ++/* { dg-do compile { target { powerpc*-*-* } } } */ ++/* { dg-skip-if "" { powerpc*-*-darwin* } } */ ++/* { dg-require-effective-target powerpc_vsx_ok } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++vector double ++test_vpasted (vector double high, vector double low) ++{ ++ vector double res; ++ res[1] = high[1]; ++ res[0] = low[0]; ++ return res; ++} ++ ++/* { dg-final { scan-assembler-times {\mxxpermdi\M} 1 } } */ ++/* { dg-final { scan-assembler-not {\mvspltisw\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxlor\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxlxor\M} } } */ ++/* { dg-final { scan-assembler-not {\mxxspltib\M} } } */ ++/* { dg-final { scan-assembler-not {\mlxvx?\M} } } */ ++/* { dg-final { scan-assembler-not {\mlxv[dw][24]x\M} } } */ ++/* { dg-final { scan-assembler-not {\mlvx\M} } } */ ++/* { dg-final { scan-assembler-not {\mstxvx?\M} } } */ ++/* { dg-final { scan-assembler-not {\mstxv[dw][24]x\M} } } */ ++/* { dg-final { scan-assembler-not {\mstvx\M} } } */ +Index: gcc/testsuite/gcc.target/powerpc/pr80210.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr80210.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr80210.c (.../branches/gcc-7-branch) +@@ -0,0 +1,10 @@ ++/* Test for ICE arising from GCC target pragma. */ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++double ++foo (double a) ++{ ++ return __builtin_sqrt (a); ++} ++#pragma GCC target "no-powerpc-gpopt" +Index: gcc/testsuite/gcc.target/powerpc/vec-setup-double.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vec-setup-double.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-setup-double.c (.../branches/gcc-7-branch) +@@ -0,0 +1,11 @@ ++/* { dg-do run { target { powerpc*-*-linux* } } } */ ++/* { dg-require-effective-target vsx_hw } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++/* Test various ways of creating vectors with 2 double words and accessing the ++ elements. This test uses the double datatype and the default endian ++ order. */ ++ ++#define DO_DOUBLE ++ ++#include "vec-setup.h" +Index: gcc/testsuite/gcc.target/powerpc/pr72804.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/pr72804.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/pr72804.c (.../branches/gcc-7-branch) +@@ -0,0 +1,25 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-skip-if "" { powerpc*-*-darwin* } } */ ++/* { dg-require-effective-target powerpc_vsx_ok } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++__int128_t ++foo (__int128_t *src) ++{ ++ return ~*src; ++} ++ ++void ++bar (__int128_t *dst, __int128_t src) ++{ ++ *dst = ~src; ++} ++ ++/* { dg-final { scan-assembler-times "not " 4 } } */ ++/* { dg-final { scan-assembler-times "std " 2 } } */ ++/* { dg-final { scan-assembler-times "ld " 2 } } */ ++/* { dg-final { scan-assembler-not "lxvd2x" } } */ ++/* { dg-final { scan-assembler-not "stxvd2x" } } */ ++/* { dg-final { scan-assembler-not "xxpermdi" } } */ ++/* { dg-final { scan-assembler-not "mfvsrd" } } */ ++/* { dg-final { scan-assembler-not "mfvsrd" } } */ +Index: gcc/testsuite/gcc.target/powerpc/vec-setup-long.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/powerpc/vec-setup-long.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-setup-long.c (.../branches/gcc-7-branch) +@@ -0,0 +1,9 @@ ++/* { dg-do run { target { powerpc*-*-linux* } } } */ ++/* { dg-require-effective-target vsx_hw } */ ++/* { dg-options "-O2 -mvsx" } */ ++ ++/* Test various ways of creating vectors with 2 double words and accessing the ++ elements. This test uses the long (on 64-bit systems) or long long datatype ++ (on 32-bit systems). The default endian order is used. */ ++ ++#include "vec-setup.h" +Index: gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c (.../branches/gcc-7-branch) +@@ -1,6 +1,7 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ +-/* { dg-lto-options {{-flto}} } */ ++/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ ++/* { dg-lto-options {{-flto -mfpu=neon}} } */ + + #include "arm_neon.h" + +Index: gcc/testsuite/gcc.target/arm/lto/pr65837_0.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/arm/lto/pr65837_0.c (.../branches/gcc-7-branch) +@@ -1,7 +1,7 @@ + /* { dg-lto-do run } */ + /* { dg-require-effective-target arm_neon_hw } */ ++/* { dg-require-effective-target arm_neon_ok_no_float_abi } */ + /* { dg-lto-options {{-flto -mfpu=neon}} } */ +-/* { dg-suppress-ld-options {-mfpu=neon} } */ + + #include "arm_neon.h" + +Index: gcc/testsuite/gcc.target/i386/pr81921.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/pr81921.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/pr81921.c (.../branches/gcc-7-branch) +@@ -0,0 +1,14 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target lto } */ ++/* { dg-options "-flto -march=x86-64" } */ ++ ++extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__, target("sse2"))) ++_mm_loadu_si128 (int const *__P) ++{ ++ return *__P; ++} ++ ++void __attribute__((target("ssse3"))) foo (void *p) ++{ ++ volatile int x = _mm_loadu_si128 (p); ++} +Index: gcc/testsuite/gcc.target/i386/pr81128.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/pr81128.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/pr81128.c (.../branches/gcc-7-branch) +@@ -0,0 +1,65 @@ ++/* PR ipa/81128 */ ++/* { dg-do run } */ ++/* { dg-options "-O3" } */ ++/* { dg-require-ifunc "" } */ ++ ++ ++#include ++#include ++#include ++ ++int resolver_fn = 0; ++int resolved_fn = 0; ++ ++static inline void ++do_it_right_at_runtime_A () ++{ ++ resolved_fn++; ++} ++ ++static inline void ++do_it_right_at_runtime_B () ++{ ++ resolved_fn++; ++} ++ ++static inline void do_it_right_at_runtime (void); ++ ++void do_it_right_at_runtime (void) ++ __attribute__ ((ifunc ("resolve_do_it_right_at_runtime"))); ++ ++static void (*resolve_do_it_right_at_runtime (void)) (void) ++{ ++ srand (time (NULL)); ++ int r = rand (); ++ resolver_fn++; ++ ++ /* Use intermediate variable to get a warning for non-matching ++ * prototype. */ ++ typeof(do_it_right_at_runtime) *func; ++ if (r & 1) ++ func = do_it_right_at_runtime_A; ++ else ++ func = do_it_right_at_runtime_B; ++ ++ return (void *) func; ++} ++ ++int ++main (void) ++{ ++ const unsigned int ITERS = 10; ++ ++ for (int i = ITERS; i > 0; i--) ++ { ++ do_it_right_at_runtime (); ++ } ++ ++ if (resolver_fn != 1) ++ __builtin_abort (); ++ ++ if (resolved_fn != 10) ++ __builtin_abort (); ++ ++ return 0; ++} +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-nov.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-nov.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-nov.c (.../branches/gcc-7-branch) +@@ -25,7 +25,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-lbv.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-lbv.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-lbv.c (.../branches/gcc-7-branch) +@@ -28,7 +28,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/gcc.target/i386/mpx/mpx-os-support.h +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/mpx-os-support.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/mpx-os-support.h (.../branches/gcc-7-branch) +@@ -0,0 +1,16 @@ ++/* Check if the OS supports executing MPX instructions. */ ++ ++#define XCR_XFEATURE_ENABLED_MASK 0x0 ++ ++#define XSTATE_BNDREGS 0x8 ++ ++static int ++mpx_os_support (void) ++{ ++ unsigned int eax, edx; ++ unsigned int ecx = XCR_XFEATURE_ENABLED_MASK; ++ ++ __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (ecx)); ++ ++ return (eax & XSTATE_BNDREGS) != 0; ++} +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-ubv.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-ubv.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-1-ubv.c (.../branches/gcc-7-branch) +@@ -28,7 +28,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-nov.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-nov.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-nov.c (.../branches/gcc-7-branch) +@@ -27,7 +27,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-lbv.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-lbv.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-lbv.c (.../branches/gcc-7-branch) +@@ -30,7 +30,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/gcc.target/i386/mpx/mpx-check.h +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/mpx-check.h (.../branches/gcc-7-branch) +@@ -1,8 +1,8 @@ + #include + #include + #include +- + #include "cpuid.h" ++#include "mpx-os-support.h" + + static int + __attribute__ ((noinline)) +@@ -16,14 +16,13 @@ + + #define DEBUG + +-#define XSTATE_BNDREGS (1 << 3) ++static int ++check_osxsave (void) ++{ ++ unsigned int eax, ebx, ecx, edx; + +-/* This should be an intrinsic, but isn't. */ +-static int xgetbv (unsigned x) +-{ +- unsigned eax, edx; +- asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (x)); +- return eax; ++ __cpuid (1, eax, ebx, ecx, edx); ++ return (ecx & bit_OSXSAVE) != 0; + } + + int +@@ -31,13 +30,11 @@ + { + unsigned int eax, ebx, ecx, edx; + +- if (__get_cpuid_max (0, NULL) < 7) +- return 0; ++ if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx)) ++ return NORUNRES; + +- __cpuid_count (7, 0, eax, ebx, ecx, edx); +- + /* Run MPX test only if host has MPX support. */ +- if ((ebx & bit_MPX) && (xgetbv (0) & XSTATE_BNDREGS)) ++ if (check_osxsave () && (ebx & bit_MPX) && mpx_os_support ()) + mpx_test (argc, argv); + else + { +Index: gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-ubv.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-ubv.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.target/i386/mpx/va-arg-pack-2-ubv.c (.../branches/gcc-7-branch) +@@ -30,7 +30,7 @@ + static __attribute__((always_inline)) int + foo1 (int *p1, ...) + { +- return foo2 (10, p1, __va_arg_pack ()); ++ return foo2 (10, p1, __builtin_va_arg_pack ()); + } + + int prebuf[100]; +Index: gcc/testsuite/lib/target-supports.exp +=================================================================== +--- a/src/gcc/testsuite/lib/target-supports.exp (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/lib/target-supports.exp (.../branches/gcc-7-branch) +@@ -1777,6 +1777,7 @@ + expr 0 + } else { + check_runtime_nocache avx2_hw_available { ++ #include + #include "cpuid.h" + int main () + { +@@ -3427,8 +3428,9 @@ + global et_arm_neon_flags + set et_arm_neon_flags "" + if { [check_effective_target_arm32] } { +- foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a"} { ++ foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard -march=armv7-a"} { + if { [check_no_compiler_messages_nocache arm_neon_ok object { ++ #include + int dummy; + #ifndef __ARM_NEON__ + #error not NEON +@@ -3453,6 +3455,38 @@ + check_effective_target_arm_neon_ok_nocache] + } + ++# Return 1 if this is an ARM target supporting -mfpu=neon without any ++# -mfloat-abi= option. Useful in tests where add_options is not ++# supported (such as lto tests). ++ ++proc check_effective_target_arm_neon_ok_no_float_abi_nocache { } { ++ if { [check_effective_target_arm32] } { ++ foreach flags {"-mfpu=neon"} { ++ if { [check_no_compiler_messages_nocache arm_neon_ok_no_float_abi object { ++ #include ++ int dummy; ++ #ifndef __ARM_NEON__ ++ #error not NEON ++ #endif ++ /* Avoid the case where a test adds -mfpu=neon, but the toolchain is ++ configured for -mcpu=arm926ej-s, for example. */ ++ #if __ARM_ARCH < 7 || __ARM_ARCH_PROFILE == 'M' ++ #error Architecture does not support NEON. ++ #endif ++ } "$flags"] } { ++ return 1 ++ } ++ } ++ } ++ ++ return 0 ++} ++ ++proc check_effective_target_arm_neon_ok_no_float_abi { } { ++ return [check_cached_effective_target arm_neon_ok_no_float_abi \ ++ check_effective_target_arm_neon_ok_no_float_abi_nocache] ++} ++ + proc check_effective_target_arm_crc_ok_nocache { } { + global et_arm_crc_flags + set et_arm_crc_flags "-march=armv8-a+crc" +Index: gcc/testsuite/gfortran.dg/dtio_12.f90 +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/dtio_12.f90 (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/dtio_12.f90 (.../branches/gcc-7-branch) +@@ -70,5 +70,11 @@ + rewind (10) + read (10, *) msg + if (trim (msg) .ne. "77") call abort ++ rewind (10) ++ write (10,40) child (77) ! Modified using format label ++40 format(DT) ++ rewind (10) ++ read (10, *) msg ++ if (trim (msg) .ne. "77") call abort + close(10) + end +Index: gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 (.../branches/gcc-7-branch) +@@ -3,7 +3,7 @@ + ! + ! PR fortran/55476 + ! +-! Contribued by Janus Weil ++! Contributed by Janus Weil + ! + subroutine test + integer, pointer :: p +Index: gcc/testsuite/gfortran.dg/array_temporaries_4.f90 +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/array_temporaries_4.f90 (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/array_temporaries_4.f90 (.../branches/gcc-7-branch) +@@ -0,0 +1,59 @@ ++! { dg-do compile } ++! { dg-options "-Warray-temporaries" } ++! Tests the fix for PR80164, in which the compiler segfaulted on this ++! when using -Warray-temporaries ++! ++!****************************************************************************** ++module global ++ type :: a ++ integer :: b ++ character(8):: c ++ end type a ++ interface assignment(=) ++ module procedure a_to_a, c_to_a, a_to_c ++ end interface ++ interface operator(.ne.) ++ module procedure a_ne_a ++ end interface ++ ++ type(a) :: x(4), y(4) ++ logical :: l1(4), t = .true., f= .false. ++contains ++!****************************************************************************** ++ elemental subroutine a_to_a (m, n) ++ type(a), intent(in) :: n ++ type(a), intent(out) :: m ++ m%b = len ( trim(n%c)) ++ m%c = n%c ++ end subroutine a_to_a ++ elemental subroutine c_to_a (m, n) ++ character(8), intent(in) :: n ++ type(a), intent(out) :: m ++ m%b = m%b + 1 ++ m%c = n ++ end subroutine c_to_a ++ elemental subroutine a_to_c (m, n) ++ type(a), intent(in) :: n ++ character(8), intent(out) :: m ++ m = n%c ++ end subroutine a_to_c ++!****************************************************************************** ++ elemental logical function a_ne_a (m, n) ++ type(a), intent(in) :: n ++ type(a), intent(in) :: m ++ a_ne_a = (m%b .ne. n%b) .or. (m%c .ne. n%c) ++ end function a_ne_a ++!****************************************************************************** ++ elemental function foo (m) ++ type(a) :: foo ++ type(a), intent(in) :: m ++ foo%b = 0 ++ foo%c = m%c ++ end function foo ++end module global ++!****************************************************************************** ++program test ++ use global ++ x = (/a (0, "one"),a (0, "two"),a (0, "three"),a (0, "four")/) ! { dg-warning "Creating array temporary" } ++ y = x ++end program test +Index: gcc/testsuite/gfortran.dg/zero_sized_7.f90 +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/zero_sized_7.f90 (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/zero_sized_7.f90 (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++! { dg-do compile } ++! PR 80118 - this used to ICE ++! Original test case by Marco Restelli ++module m ++implicit none ++ ++ integer, parameter :: not_empty(1) = 0 ++ integer, parameter :: empty1(0) = (/integer :: /) ++ integer, parameter :: empty2(0) = 0 ++ ++contains ++ ++ subroutine sub(v) ++ integer, allocatable, intent(out) :: v(:) ++ v = 2*empty2 ! internal compiler error ++ end subroutine sub ++ ++end module m +Index: gcc/testsuite/gfortran.dg/pr81723.f +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/pr81723.f (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/pr81723.f (.../branches/gcc-7-branch) +@@ -0,0 +1,56 @@ ++! { dg-do compile } ++! { dg-options "-O3 -fno-automatic" } ++ ++ FUNCTION WWERF(Z) ++ ++ IMPLICIT DOUBLE PRECISION (A-H,O-Z) ++ COMPLEX*16 WWERF ++ COMPLEX*16 Z,ZH,R(37),S,T,V,W ++ ++ PARAMETER (Z1 = 1, HF = Z1/2, Z10 = 10) ++ PARAMETER (C1 = 74/Z10, C2 = 83/Z10, C3 = Z10/32, C4 = 16/Z10) ++ PARAMETER (C = 1.12837 91670 95512 57D0, P = (2*C4)**33) ++ ++ DOUBLE PRECISION GREAL,GIMAG,XARG,YARG ++ COMPLEX*16 ZARG,GCONJG,GCMPLX ++ GREAL( ZARG)=DREAL( ZARG) ++ GIMAG( ZARG)=DIMAG( ZARG) ++ GCONJG(ZARG)=DCONJG(ZARG) ++ GCMPLX(XARG,YARG)=DCMPLX(XARG,YARG) ++ ++ X=Z ++ Y=GIMAG(Z) ++ XA=ABS(X) ++ YA=ABS(Y) ++ IF(YA .LT. C1 .AND. XA .LT. C2) THEN ++ ZH=GCMPLX(YA+C4,XA) ++ R(37)=0 ++ DO 1 N = 36,1,-1 ++ T=ZH+N*GCONJG(R(N+1)) ++ 1 R(N)=HF*T/(GREAL(T)**2+GIMAG(T)**2) ++ XL=P ++ S=0 ++ DO 2 N = 33,1,-1 ++ XL=C3*XL ++ 2 S=R(N)*(S+XL) ++ V=C*S ++ ELSE ++ ZH=GCMPLX(YA,XA) ++ R(1)=0 ++ DO 3 N = 9,1,-1 ++ T=ZH+N*GCONJG(R(1)) ++ 3 R(1)=HF*T/(GREAL(T)**2+GIMAG(T)**2) ++ V=C*R(1) ++ END IF ++ IF(YA .EQ. 0) V=GCMPLX(EXP(-XA**2),GIMAG(V)) ++ IF(Y .LT. 0) THEN ++ V=2*EXP(-GCMPLX(XA,YA)**2)-V ++ IF(X .GT. 0) V=GCONJG(V) ++ ELSE ++ IF(X .LT. 0) V=GCONJG(V) ++ END IF ++ ++ WWERF=V ++ ++ RETURN ++ END +Index: gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 +=================================================================== +--- a/src/gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 (.../branches/gcc-7-branch) +@@ -0,0 +1,28 @@ ++! { dg-do compile } ++! { dg-options "-Wtarget-lifetime" } ++! ++! PR fortran/81770: [5/6/7 Regression] Bogus warning: Pointer in pointer assignment might outlive the pointer target ++! ++! Contributed by Janus Weil ++ ++module m ++ ++ type t ++ integer, allocatable :: l ++ end type ++ ++contains ++ ++ subroutine sub(c_in, list) ++ type(t), target, intent(in) :: c_in ++ integer, pointer, intent(out) :: list ++ ++ type(t), pointer :: container ++ ++ container => c_in ++ ++ list => container%l ++ ++ end subroutine ++ ++end +Index: gcc/testsuite/gcc.c-torture/execute/pr81503.c +=================================================================== +--- a/src/gcc/testsuite/gcc.c-torture/execute/pr81503.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr81503.c (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++unsigned short a = 41461; ++unsigned short b = 3419; ++int c = 0; ++ ++void foo() { ++ if (a + b * ~(0 != 5)) ++ c = -~(b * ~(0 != 5)) + 2147483647; ++} ++ ++int main() { ++ foo(); ++ if (c != 2147476810) ++ return -1; ++ return 0; ++} +Index: gcc/testsuite/gcc.c-torture/compile/string-large-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.c-torture/compile/string-large-1.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.c-torture/compile/string-large-1.c (.../branches/gcc-7-branch) +@@ -0,0 +1,119 @@ ++/* Test built-in string functions with large sizes. PR 78460. */ ++ ++typedef __SIZE_TYPE__ size_t; ++ ++#define SIZE1 ((size_t) -1) ++#define SIZE2 (SIZE1 >> 1) ++#define SIZE3 ((unsigned int) -1) ++#define SIZE4 (SIZE3 >> 1) ++ ++volatile int v1, v2, v3, v4; ++void *volatile vp1, *volatile vp2, *volatile vp3, *volatile vp4; ++ ++void ++test_memchr (const void *a, int b) ++{ ++ vp1 = __builtin_memchr (a, b, SIZE1); ++ vp2 = __builtin_memchr (a, b, SIZE2); ++ vp3 = __builtin_memchr (a, b, SIZE3); ++ vp4 = __builtin_memchr (a, b, SIZE4); ++} ++ ++void ++test_memcmp (const void *a, const void *b) ++{ ++ v1 = __builtin_memcmp (a, b, SIZE1); ++ v2 = __builtin_memcmp (a, b, SIZE2); ++ v3 = __builtin_memcmp (a, b, SIZE3); ++ v4 = __builtin_memcmp (a, b, SIZE4); ++} ++ ++void ++test_memcpy (void *a, const void *b) ++{ ++ vp1 = __builtin_memcpy (a, b, SIZE1); ++ vp2 = __builtin_memcpy (a, b, SIZE2); ++ vp3 = __builtin_memcpy (a, b, SIZE3); ++ vp4 = __builtin_memcpy (a, b, SIZE4); ++} ++ ++void ++test_memmove (void *a, const void *b) ++{ ++ vp1 = __builtin_memmove (a, b, SIZE1); ++ vp2 = __builtin_memmove (a, b, SIZE2); ++ vp3 = __builtin_memmove (a, b, SIZE3); ++ vp4 = __builtin_memmove (a, b, SIZE4); ++} ++ ++void ++test_mempcpy (void *a, const void *b) ++{ ++ vp1 = __builtin_mempcpy (a, b, SIZE1); ++ vp2 = __builtin_mempcpy (a, b, SIZE2); ++ vp3 = __builtin_mempcpy (a, b, SIZE3); ++ vp4 = __builtin_mempcpy (a, b, SIZE4); ++} ++ ++void ++test_memset (void *a, int b) ++{ ++ vp1 = __builtin_memset (a, b, SIZE1); ++ vp2 = __builtin_memset (a, b, SIZE2); ++ vp3 = __builtin_memset (a, b, SIZE3); ++ vp4 = __builtin_memset (a, b, SIZE4); ++} ++ ++void ++test_stpncpy (char *a, const char *b) ++{ ++ vp1 = __builtin_stpncpy (a, b, SIZE1); ++ vp2 = __builtin_stpncpy (a, b, SIZE2); ++ vp3 = __builtin_stpncpy (a, b, SIZE3); ++ vp4 = __builtin_stpncpy (a, b, SIZE4); ++} ++ ++void ++test_strndup (const char *a) ++{ ++ vp1 = __builtin_strndup (a, SIZE1); ++ vp2 = __builtin_strndup (a, SIZE2); ++ vp3 = __builtin_strndup (a, SIZE3); ++ vp4 = __builtin_strndup (a, SIZE4); ++} ++ ++void ++test_strncasecmp (const char *a, const char *b) ++{ ++ v1 = __builtin_strncasecmp (a, b, SIZE1); ++ v2 = __builtin_strncasecmp (a, b, SIZE2); ++ v3 = __builtin_strncasecmp (a, b, SIZE3); ++ v4 = __builtin_strncasecmp (a, b, SIZE4); ++} ++ ++void ++test_strncat (char *a, const char *b) ++{ ++ vp1 = __builtin_strncat (a, b, SIZE1); ++ vp2 = __builtin_strncat (a, b, SIZE2); ++ vp3 = __builtin_strncat (a, b, SIZE3); ++ vp4 = __builtin_strncat (a, b, SIZE4); ++} ++ ++void ++test_strncmp (const char *a, const char *b) ++{ ++ v1 = __builtin_strncmp (a, b, SIZE1); ++ v2 = __builtin_strncmp (a, b, SIZE2); ++ v3 = __builtin_strncmp (a, b, SIZE3); ++ v4 = __builtin_strncmp (a, b, SIZE4); ++} ++ ++void ++test_strncpy (char *a, const char *b) ++{ ++ vp1 = __builtin_strncpy (a, b, SIZE1); ++ vp2 = __builtin_strncpy (a, b, SIZE2); ++ vp3 = __builtin_strncpy (a, b, SIZE3); ++ vp4 = __builtin_strncpy (a, b, SIZE4); ++} +Index: gcc/testsuite/gcc.c-torture/compile/pr82337.c +=================================================================== +--- a/src/gcc/testsuite/gcc.c-torture/compile/pr82337.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr82337.c (.../branches/gcc-7-branch) +@@ -0,0 +1,25 @@ ++/* PR82337: SLSR needs to prevent abnormal SSA names from ++ serving as a basis. */ ++char *a, *b, *c; ++ ++struct d { ++ short e; ++ char f[]; ++}; ++ ++extern void j (void); ++ ++void ++g() { ++ struct d *h; ++ char *i; ++ int d; ++ do { ++ i = h->f + d; ++ 20 ? j() : 0; ++ i = c; ++ if (__builtin_setjmp (h)) ++ b = h->f + d; ++ d = (int)(*i); ++ } while (a); ++} +Index: gcc/testsuite/gnat.dg/incomplete5_pkg.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/incomplete5_pkg.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/incomplete5_pkg.adb (.../branches/gcc-7-branch) +@@ -0,0 +1,13 @@ ++package body Incomplete5_Pkg is ++ ++ function Get_Handle (Object: Base_Object) return Access_Type is ++ begin ++ return Object.Handle; ++ end; ++ ++ function From_Handle (Handle: Access_Type) return Base_Object is ++ begin ++ return (Handle=>Handle); ++ end; ++ ++end Incomplete5_Pkg; +Index: gcc/testsuite/gnat.dg/incomplete5_pkg.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/incomplete5_pkg.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/incomplete5_pkg.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++generic ++ type Record_Type; ++package Incomplete5_Pkg is ++ ++ type Access_Type is access Record_Type; ++ ++ type Base_Object is tagged record ++ Handle: Access_Type; ++ end record; ++ ++ function Get_Handle(Object: Base_Object) return Access_Type; ++ ++ function From_Handle(Handle: Access_Type) return Base_Object; ++ ++end Incomplete5_Pkg; +Index: gcc/testsuite/gnat.dg/array29.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/array29.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/array29.adb (.../branches/gcc-7-branch) +@@ -0,0 +1,26 @@ ++-- { dg-do compile } ++-- { dg-options "-O" } ++ ++package body Array29 is ++ ++ procedure Copy (Src : in Matrix; Dst : out Matrix) is ++ begin ++ for I in Src'Range (1) loop ++ for J in Src'Range (2) loop ++ Dst (I, J) := Src (I, J); ++ end loop; ++ end loop; ++ end; ++ ++ procedure Proc is ++ N : constant := 2; ++ FM1 : constant Matrix (1 .. N, 1 .. N) := ((1.0, 2.0), (3.0, 4.0)); ++ FM2 : constant Matrix (1 .. N, 1 .. N) := ((1.0, 2.0), (3.0, 4.0)); ++ A : constant array (1 .. 2) of Matrix (1 .. N, 1 .. N) ++ := (Matrix (FM1), Matrix (FM2)); ++ Final : Matrix (1 .. N, 1 .. N); ++ begin ++ Copy (Src => A (1), Dst => Final); ++ end; ++ ++end Array29; +Index: gcc/testsuite/gnat.dg/array29.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/array29.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/array29.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,7 @@ ++package Array29 is ++ ++ type Matrix is array (Integer range <>, Integer range <>) of Long_Float; ++ ++ procedure Proc; ++ ++end Array29; +Index: gcc/testsuite/gnat.dg/debug13.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/debug13.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/debug13.adb (.../branches/gcc-7-branch) +@@ -0,0 +1,38 @@ ++-- { dg-options "-cargs -O2 -g -margs" } ++ ++package body Debug13 is ++ ++ procedure Compile (P : Natural) ++ is ++ Max_Pos : constant Natural := P; ++ type Position_Set is array (1 .. Max_Pos) of Boolean; ++ ++ Empty : constant Position_Set := (others => False); ++ ++ type Position_Set_Array is array (1 .. Max_Pos) of Position_Set; ++ ++ Follow : Position_Set_Array := (others => Empty); ++ ++ function Get_Follows return Position_Set; ++ ++ procedure Make_DFA; ++ ++ function Get_Follows return Position_Set is ++ Result : Position_Set := Empty; ++ begin ++ Result := Result or Follow (1); ++ ++ return Result; ++ end Get_Follows; ++ ++ procedure Make_DFA is ++ Next : constant Position_Set := Get_Follows; ++ begin ++ null; ++ end Make_DFA; ++ ++ begin ++ Make_DFA; ++ end Compile; ++ ++end Debug13; +Index: gcc/testsuite/gnat.dg/debug13.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/debug13.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/debug13.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,5 @@ ++package Debug13 is ++ ++ procedure Compile (P : Natural); ++ ++end Debug13; +Index: gcc/testsuite/gnat.dg/incomplete5.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/incomplete5.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/incomplete5.adb (.../branches/gcc-7-branch) +@@ -0,0 +1,10 @@ ++-- { dg-do compile } ++ ++package body Incomplete5 is ++ ++ function Get (O: Base_Object) return Integer is ++ begin ++ return Get_Handle(O).I; ++ end; ++ ++end Incomplete5; +Index: gcc/testsuite/gnat.dg/incomplete5.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/incomplete5.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/incomplete5.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,25 @@ ++with Incomplete5_Pkg; ++ ++package Incomplete5 is ++ ++ type Rec1 is private; ++ ++ type Rec2 is private; ++ ++ package My_G is new Incomplete5_Pkg (Rec1); ++ ++ use My_G; ++ ++ function Get (O: Base_Object) return Integer; ++ ++private ++ ++ type Rec1 is record ++ I : Integer; ++ end record; ++ ++ type Rec2 is record ++ A : Access_Type; ++ end record; ++ ++end Incomplete5; +Index: gcc/testsuite/gnat.dg/pack9.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/pack9.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/pack9.adb (.../branches/gcc-7-branch) +@@ -1,7 +1,8 @@ + -- { dg-do compile } + -- { dg-options "-O2 -gnatp -fdump-tree-optimized" } +--- See PR tree-optimization/46801 for the expected failure + ++pragma Optimize_Alignment (Space); ++ + package body Pack9 is + + procedure Copy (X, Y : R2_Ptr) is +Index: gcc/testsuite/gnat.dg/specs/vfa.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/specs/vfa.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/specs/vfa.ads (.../branches/gcc-7-branch) +@@ -1,14 +0,0 @@ +--- { dg-do compile } +--- { dg-options "-g" } +- +-package VFA is +- +- type Rec is record +- A : Short_Integer; +- B : Short_Integer; +- end record; +- +- type Rec_VFA is new Rec; +- pragma Volatile_Full_Access (Rec_VFA); +- +-end VFA; +Index: gcc/testsuite/gnat.dg/specs/uc2.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/specs/uc2.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/specs/uc2.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++-- { dg-do compile } ++-- { dg-options "-O" } ++ ++with Ada.Unchecked_Conversion; ++ ++package UC2 is ++ ++ subtype Word_Type is Integer range 0 .. 0; ++ type Arr is array (1 .. Word_Type'Size) of Boolean; ++ pragma Pack(Arr); ++ ++ function Conv is ++ new Ada.Unchecked_Conversion (Source => Arr, Target => Word_Type); ++ ++ A : Arr; ++ W : Word_Type := Conv(A); ++ ++end UC2; +Index: gcc/testsuite/gnat.dg/specs/vfa2.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/specs/vfa2.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/specs/vfa2.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,110 @@ ++-- { dg-do compile } ++-- { dg-options "-O" } ++ ++package VFA2 is ++ ++ type Bit is mod 2**1 ++ with Size => 1; ++ type UInt2 is mod 2**2 ++ with Size => 2; ++ type UInt22 is mod 2**22 ++ with Size => 22; ++ ++ type MODE_ENUM is ++ ( ++ Function_0_Default, ++ Function_1, ++ Function_2, ++ Function_3, ++ Function_4, ++ Function_5, ++ Function_6, ++ Function_7) ++ with Size => 3; ++ ++ type EPD_ENUM is ++ ( ++ Disable_Pull_Down, ++ Enable_Pull_Down) ++ with Size => 1; ++ ++ type EPUN_ENUM is ++ ( ++ Enable_Pull_Up, ++ Disable_Pull_Up) ++ with Size => 1; ++ ++ type EHS_ENUM is ++ ( ++ Slow_Low_Noise_With, ++ Fast_Medium_Noise_W) ++ with Size => 1; ++ ++ type EZI_ENUM is ++ ( ++ Disable_Input_Buffer, ++ Enable_Input_Buffer) ++ with Size => 1; ++ ++ type ZIF_ENUM is ++ ( ++ Enable_Input_Glitch, ++ Disable_Input_Glitch) ++ with Size => 1; ++ ++ type EHD_ENUM is ++ ( ++ Normal_Drive_4_Ma_D, ++ Medium_Drive_8_Ma_D, ++ High_Drive_14_Ma_Dr, ++ Ultra_High_Drive_20) ++ with Size => 2; ++ ++ type Pin_Type is (Normal_Drive, High_Drive, High_Speed); ++ ++ type SFS_Register(Pin : Pin_Type := Normal_Drive) is record ++ MODE : MODE_ENUM; ++ EPD : EPD_ENUM; ++ EPUN : EPUN_ENUM; ++ EZI : EZI_ENUM; ++ ZIF : ZIF_ENUM; ++ RESERVED : UInt22; ++ ++ case Pin is ++ when Normal_Drive => ++ ++ ND_EHS_RESERVED : Bit; ++ ND_EHD_RESERVED : UInt2; ++ ++ when High_Drive => ++ ++ EHD : EHD_ENUM; ++ HD_EHS_RESERVED : Bit; ++ ++ when High_Speed => ++ EHS : EHS_ENUM; ++ HS_EHD_RESERVED : UInt2; ++ ++ end case; ++ end record ++ with Unchecked_Union, Size => 32, Volatile_Full_Access; ++ ++ for SFS_Register use record ++ MODE at 0 range 0 .. 2; ++ EPD at 0 range 3 .. 3; ++ EPUN at 0 range 4 .. 4; ++ ND_EHS_RESERVED at 0 range 5 .. 5; ++ HD_EHS_RESERVED at 0 range 5 .. 5; ++ EHS at 0 range 5 .. 5; ++ EZI at 0 range 6 .. 6; ++ ZIF at 0 range 7 .. 7; ++ ND_EHD_RESERVED at 0 range 8 .. 9; ++ EHD at 0 range 8 .. 9; ++ HS_EHD_RESERVED at 0 range 8 .. 9; ++ RESERVED at 0 range 10 .. 31; ++ end record; ++ ++ type Normal_Drive_Pins is array (Integer range <>) ++ of SFS_Register(Normal_Drive) with Volatile; ++ ++end VFA2; +Index: gcc/testsuite/gnat.dg/specs/atomic3.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/specs/atomic3.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/specs/atomic3.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,33 @@ ++-- { dg-do compile } ++ ++package Atomic3 is ++ ++ type Four_Bits is mod 2**4; ++ type Fourteen_Bits is mod 2**14; ++ type Twenty_Eight_Bits is mod 2**28; ++ ++ type Rec1 (Mode : Boolean := True) is record ++ Reserved : Four_Bits; ++ case Mode is ++ when True => ++ High_Part : Fourteen_Bits; ++ Low_Part : Fourteen_Bits; ++ when False => ++ Data : Twenty_Eight_Bits; ++ end case; ++ end record; ++ for Rec1 use record ++ Reserved at 0 range 28 .. 31; ++ High_Part at 0 range 14 .. 27; ++ Low_Part at 0 range 0 .. 13; ++ Data at 0 range 0 .. 27; ++ end record; ++ for Rec1'Size use 32; ++ pragma Unchecked_Union (Rec1); ++ ++ type Rec2 is record ++ A : Rec1; ++ pragma Atomic (A); ++ end record; ++ ++end Atomic3; +Index: gcc/testsuite/gnat.dg/specs/vfa1.ads +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/specs/vfa1.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gnat.dg/specs/vfa1.ads (.../branches/gcc-7-branch) +@@ -0,0 +1,14 @@ ++-- { dg-do compile } ++-- { dg-options "-g" } ++ ++package VFA1 is ++ ++ type Rec is record ++ A : Short_Integer; ++ B : Short_Integer; ++ end record; ++ ++ type Rec_VFA is new Rec; ++ pragma Volatile_Full_Access (Rec_VFA); ++ ++end VFA1; +Index: gcc/testsuite/gcc.dg/pr82112.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/pr82112.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/pr82112.c (.../branches/gcc-7-branch) +@@ -0,0 +1,21 @@ ++/* PR target/82112 */ ++/* { dg-do compile } */ ++/* { dg-options "-std=gnu90" } */ ++ ++struct S { int a[10]; } bar (void); ++int b, c; ++ ++void ++foo (void) ++{ ++ __atomic_load (bar ().a, &b, __ATOMIC_ACQUIRE); /* { dg-error "argument 1 of .__atomic_load. must be a non-void pointer type" } */ ++ __atomic_load (&b, bar ().a, __ATOMIC_ACQUIRE); /* { dg-error "argument 2 of .__atomic_load. must be a pointer type" } */ ++ __atomic_store (bar ().a, &b, __ATOMIC_SEQ_CST); /* { dg-error "argument 1 of .__atomic_store. must be a non-void pointer type" } */ ++ __atomic_store (&b, bar ().a, __ATOMIC_SEQ_CST); /* { dg-error "argument 2 of .__atomic_store. must be a pointer type" } */ ++ __atomic_exchange (bar ().a, &b, &c, __ATOMIC_RELAXED); /* { dg-error "argument 1 of .__atomic_exchange. must be a non-void pointer type" } */ ++ __atomic_exchange (&b, bar ().a, &c, __ATOMIC_RELAXED); /* { dg-error "argument 2 of .__atomic_exchange. must be a pointer type" } */ ++ __atomic_exchange (&b, &c, bar ().a, __ATOMIC_RELAXED); /* { dg-error "argument 3 of .__atomic_exchange. must be a pointer type" } */ ++ __atomic_compare_exchange (bar ().a, &b, &c, 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED); /* { dg-error "argument 1 of .__atomic_compare_exchange. must be a non-void pointer type" } */ ++ __atomic_compare_exchange (&b, bar ().a, &c, 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED); /* { dg-error "argument 2 of .__atomic_compare_exchange. must be a pointer type" } */ ++ __atomic_compare_exchange (&b, &c, bar ().a, 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED); /* { dg-error "argument 3 of .__atomic_compare_exchange. must be a pointer type" } */ ++} +Index: gcc/testsuite/gcc.dg/gimplefe-14.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/gimplefe-14.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/gimplefe-14.c (.../branches/gcc-7-branch) +@@ -7,7 +7,9 @@ + int a; + + bb_2: +- switch (argc_2(D)) {default: L2; case 1: L0; case 2: L1; } ++ /* Because of PR82114 we need to handle also 0 as base metal can have ++ argc == 0. */ ++ switch (argc_2(D)) {default: L2; case 0: L0; case 1: L0; case 2: L1; } + + L0: + a_4 = 0; +Index: gcc/testsuite/gcc.dg/gomp/pr81768-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/gomp/pr81768-2.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/gomp/pr81768-2.c (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++/* PR middle-end/81768 */ ++/* { dg-do compile } */ ++ ++float b[10][15][10]; ++ ++void ++foo (void) ++{ ++ float *i; ++#pragma omp target parallel for schedule(static, 32) collapse(3) ++ for (i = &b[0][0][0]; i < &b[0][0][10]; i++) ++ for (float *j = &b[0][15][0]; j > &b[0][0][0]; j -= 10) ++ for (float *k = &b[0][0][10]; k > &b[0][0][0]; --k) ++ b[i - &b[0][0][0]][(j - &b[0][0][0]) / 10 - 1][(k - &b[0][0][0]) - 1] -= 3.5; ++} +Index: gcc/testsuite/gcc.dg/gomp/pr81768-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/gomp/pr81768-1.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/gomp/pr81768-1.c (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++/* PR middle-end/81768 */ ++/* { dg-do compile } */ ++ ++float b[10][15][10]; ++ ++void ++foo (void) ++{ ++ float *i; ++#pragma omp target parallel for simd schedule(static, 32) collapse(3) ++ for (i = &b[0][0][0]; i < &b[0][0][10]; i++) ++ for (float *j = &b[0][15][0]; j > &b[0][0][0]; j -= 10) ++ for (float *k = &b[0][0][10]; k > &b[0][0][0]; --k) ++ b[i - &b[0][0][0]][(j - &b[0][0][0]) / 10 - 1][(k - &b[0][0][0]) - 1] -= 3.5; ++} +Index: gcc/testsuite/gcc.dg/asan/pr81923.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/asan/pr81923.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/asan/pr81923.c (.../branches/gcc-7-branch) +@@ -0,0 +1,10 @@ ++/* PR sanitizer/81923 */ ++/* { dg-do link } */ ++ ++int foobar __asm (__USER_LABEL_PREFIX__ "barbaz") = 34; ++ ++int ++main () ++{ ++ return 0; ++} +Index: gcc/testsuite/gcc.dg/pr81621.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/pr81621.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/pr81621.c (.../branches/gcc-7-branch) +@@ -0,0 +1,5 @@ ++/* PR target/81621 */ ++/* { dg-do compile { target freorder } } */ ++/* { dg-options "-Og -fno-split-wide-types -freorder-blocks-and-partition" } */ ++ ++#include "graphite/scop-10.c" +Index: gcc/testsuite/gcc.dg/torture/pr82276.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr82276.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr82276.c (.../branches/gcc-7-branch) +@@ -0,0 +1,32 @@ ++/* { dg-do compile } */ ++ ++typedef struct a { ++ struct a *b; ++} a; ++ ++extern int d(void); ++extern int g(void); ++extern int h(void); ++extern int _setjmp(); ++extern int i(void); ++ ++void c(void) { ++ 1 ? d() : 0; ++ a *e; ++ while (e) { ++ e = (e == (a *) c) ? 0 : e->b; ++ while (e) { ++ unsigned int f = 0; ++ g(); ++ _setjmp(f); ++ if (f & 6) { ++ ; ++ } else if (f & 2) { ++ ; ++ } else { ++ h(); ++ } ++ i(); ++ } ++ } ++} +Index: gcc/testsuite/gcc.dg/torture/pr82285.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr82285.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr82285.c (.../branches/gcc-7-branch) +@@ -0,0 +1,16 @@ ++/* { dg-do run } */ ++ ++enum tst { first = 0, second = 1 }; ++ ++int ++main () ++{ ++ enum tst data[16]; ++ ++ for (unsigned i = 0; i < 16; i++) ++ data[i] = (i < 5 ? second : first); ++ ++ if (data[2] != second) ++ __builtin_abort (); ++ return 0; ++} +Index: gcc/testsuite/gcc.dg/torture/pr81181.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr81181.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr81181.c (.../branches/gcc-7-branch) +@@ -0,0 +1,30 @@ ++/* { dg-do compile } */ ++ ++unsigned int lh; ++ ++void ++ny (int t3, int ys, int rt, int p8) ++{ ++ if (lh != 0) ++ { ++ if (0) ++ { ++oo: ++ do ++ { ++ rt = (p8 != 0) ? t3 : 0; ++ rt = (rt != 0 || lh != (unsigned int)ys); ++ rt += lh + ys; ++ } ++ while (t3 <= 0); ++ ++ lh = ys; ++ ys = rt; ++ } ++ ++ if (lh != 0) ++ p8 = lh; ++ } ++ ++ goto oo; ++} +Index: gcc/testsuite/gcc.dg/torture/pr82244.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr82244.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr82244.c (.../branches/gcc-7-branch) +@@ -0,0 +1,31 @@ ++/* { dg-do compile } */ ++ ++typedef struct a { ++ struct a *b; ++} a; ++ ++extern int d(void); ++extern int g(void); ++extern int h(void); ++extern int _setjmp(void *); ++ ++int c(void) ++{ ++ 1 ? d() : 0; ++ ++ a *e; ++ while (e) { ++ e = (e == (a *) c) ? 0 : e->b; ++ while (e) { ++ int f = 0; ++ g(); ++ if (_setjmp(0)) { ++ if (f & 6) { ++ ; ++ } else if (f & 2) { ++ h(); ++ } ++ } ++ } ++ } ++} +Index: gcc/testsuite/gcc.dg/torture/pr82264.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr82264.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr82264.c (.../branches/gcc-7-branch) +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++ ++char a; ++int c; ++unsigned b (); ++unsigned ++setjmp () ++{ ++} ++static void ++d () ++{ ++ if (b ()) ++ c = 3; ++} ++void ++e () ++{ ++ d (); ++ a && ({ setjmp (); }); ++} +Index: gcc/testsuite/gcc.dg/torture/pr82291.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr82291.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr82291.c (.../branches/gcc-7-branch) +@@ -0,0 +1,37 @@ ++/* { dg-do run } */ ++ ++int a, c, d, *h; ++unsigned b; ++ ++int *fn1 () ++{ ++ int *f[3], g = 0; ++ for (; g < 3; g++) ++ f[g] = &a; ++ if (--b > a) ++ { ++ if (a > b) ++ d++; ++ return f[0]; ++ } ++} ++ ++void fn2 () ++{ ++ for (; c >= 0; --c) ++ { ++ int j[] = { 0, 0, 0, 0, 0 }; ++ int *k = fn1 (); ++ if (!k) ++ __builtin_abort (); ++ h = &j[4]; ++ } ++} ++ ++int main () ++{ ++ fn2 (); ++ if (d != 0) ++ __builtin_abort (); ++ return 0; ++} +Index: gcc/testsuite/gcc.dg/pr81650.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/pr81650.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/pr81650.c (.../branches/gcc-7-branch) +@@ -0,0 +1,9 @@ ++/* PR driver/81650 */ ++/* { dg-do compile } */ ++/* { dg-options "-Walloc-size-larger-than=9223372036854775807" } */ ++ ++void * ++foo (void) ++{ ++ return __builtin_malloc (5); ++} +Index: gcc/testsuite/gcc.dg/tree-ssa/pr81588.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr81588.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr81588.c (.../branches/gcc-7-branch) +@@ -1,5 +1,5 @@ + /* PR tree-optimization/81588 */ +-/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* bfin*-*-* v850*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-* nios2*-*-*" } } } */ ++/* { dg-do compile { target { ! { { logical_op_short_circuit && { ! "mips*-*-* avr-*-* s390*-*-*" } } || { m68k*-*-* bfin*-*-* v850*-*-* moxie*-*-* m32c*-*-* fr30*-*-* mcore*-*-* xtensa*-*-* hppa*-*-* } } } } } */ + /* { dg-options "-O2 -fdump-tree-reassoc1-details" } */ + /* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* s390*-*-* i?86-*-* x86_64-*-* } } */ + +Index: gcc/testsuite/gcc.dg/tree-ssa/pr82340.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr82340.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr82340.c (.../branches/gcc-7-branch) +@@ -0,0 +1,14 @@ ++/* PR c/82340 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-tree-ssa" } */ ++/* { dg-final { scan-tree-dump "D.\[0-9]*\\\[0\\\] ={v} 77;" "ssa" } } */ ++ ++int ++foo (void) ++{ ++ int i; ++ volatile char *p = (volatile char[1]) { 77 }; ++ for (i = 1; i < 10; i++) ++ *p = 4; ++ return *p; ++} +Index: gcc/testsuite/gcc.dg/pr81988.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/pr81988.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/pr81988.c (.../branches/gcc-7-branch) +@@ -0,0 +1,22 @@ ++/* PR target/81988 */ ++/* Testcase by James Cowgill */ ++ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target pie } */ ++/* { dg-options "-O3 -fpie" } */ ++ ++int c, d; ++ ++short **e; ++int *a; ++ ++void foo(void) ++{ ++ int g[64 * 35], *h = g; ++ do { ++ short *f = e[d]; ++ for (int i = 0; i < 4; i++) ++ a[i] = a[i] + (h[364] + f[4] * h[64] + f[5] * h[i] + f[6] * h[i + 3 * 4] + ++ f[7] * h[i + 4]); ++ } while (c); ++} +Index: gcc/testsuite/gcc.dg/ipa/pr82001.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/ipa/pr82001.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/ipa/pr82001.c (.../branches/gcc-7-branch) +@@ -0,0 +1,21 @@ ++/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ ++/* { dg-options "-O2 -fdump-ipa-icf-details" } */ ++ ++int ++mullo (int a, int b) ++{ ++ asm("mul %%edx # %%1 was %1" ++ : "+" ++ "a"(a), ++ "+d"(b)); ++ return a; ++} ++ ++int ++mulhi (int a, int b) ++{ ++ asm("mul %%edx # %%1 was %1" : "+d"(a), "+a"(b)); ++ return a; ++} ++ ++/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */ +Index: gcc/testsuite/gcc.dg/ipa/pr81696.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/ipa/pr81696.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/ipa/pr81696.c (.../branches/gcc-7-branch) +@@ -0,0 +1,26 @@ ++/* { dg-options "-O2 -fdump-ipa-icf-details" } */ ++ ++int ++main (int argc, char **argv) ++{ ++ __label__ lab4, lab5, lab6; ++ ++ void foo (void) { goto lab4; } ++ void foo2 (void) { goto lab4; } ++ void bar (void) { goto lab5; } ++ void baz (void) { goto lab6; } ++ ++ if (argc) ++ foo (); ++ else ++ foo2 (); ++ ++ lab4:; ++ bar (); ++ lab5:; ++ baz (); ++ lab6:; ++ return 0; ++} ++ ++/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */ +Index: gcc/testsuite/gcc.dg/ipa/ipcp-cstagg-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/ipa/ipcp-cstagg-7.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/ipa/ipcp-cstagg-7.c (.../branches/gcc-7-branch) +@@ -62,4 +62,4 @@ + return bar (s, x); + } + +-/* { dg-final { scan-ipa-dump-times "Discovered an indirect call to a known target" 3 "cp" } } */ ++/* { dg-final { scan-ipa-dump-times "Discovered an indirect call to a known target" 3 "cp" { xfail { hppa*-*-* && { ! lp64 } } } } } */ +Index: gcc/testsuite/gcc.dg/vect/pr82108.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/vect/pr82108.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/gcc.dg/vect/pr82108.c (.../branches/gcc-7-branch) +@@ -0,0 +1,47 @@ ++/* { dg-do run } */ ++/* { dg-require-effective-target vect_float } */ ++ ++#include "tree-vect.h" ++ ++void __attribute__((noinline,noclone)) ++downscale_2 (const float* src, int src_n, float* dst) ++{ ++ int i; ++ ++ for (i = 0; i < src_n; i += 2) { ++ const float* a = src; ++ const float* b = src + 4; ++ ++ dst[0] = (a[0] + b[0]) / 2; ++ dst[1] = (a[1] + b[1]) / 2; ++ dst[2] = (a[2] + b[2]) / 2; ++ dst[3] = (a[3] + b[3]) / 2; ++ ++ src += 2 * 4; ++ dst += 4; ++ } ++} ++ ++int main () ++{ ++ const float in[4 * 4] = { ++ 1, 2, 3, 4, ++ 5, 6, 7, 8, ++ ++ 1, 2, 3, 4, ++ 5, 6, 7, 8 ++ }; ++ float out[2 * 4]; ++ ++ check_vect (); ++ ++ downscale_2 (in, 4, out); ++ ++ if (out[0] != 3 || out[1] != 4 || out[2] != 5 || out[3] != 6 ++ || out[4] != 3 || out[5] != 4 || out[6] != 5 || out[7] != 6) ++ __builtin_abort (); ++ ++ return 0; ++} ++ ++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +Index: gcc/testsuite/ChangeLog +=================================================================== +--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,442 @@ ++2017-10-03 Thomas Koenig ++ Steven G. Kargl ++ ++ Backport from trunk ++ PR fortran/80118 ++ * gfortran.dg/zero_sized_7.f90: New test. ++ ++2017-10-02 Bill Schmidt ++ ++ Backport from mainline ++ 2017-09-29 Bill Schmidt ++ ++ PR tree-optimization/82337 ++ * gcc.c-torture/compile/pr82337.c: New file. ++ ++2017-09-30 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-29 Jakub Jelinek ++ ++ PR c/82340 ++ * gcc.dg/tree-ssa/pr82340.c: New test. ++ ++ 2017-09-27 Jakub Jelinek ++ ++ PR c++/82159 ++ * g++.dg/opt/pr82159.C: New test. ++ ++2017-09-27 Christophe Lyon ++ ++ Backport from trunk r249639. ++ 2017-06-26 Christophe Lyon ++ ++ * lib/target-supports.exp ++ (check_effective_target_arm_neon_ok_nocache): Add flags with ++ -mfloat-abi=hard. Include arm_neon.h. ++ (check_effective_target_arm_neon_ok_no_float_abi_nocache): New. ++ (check_effective_target_arm_neon_ok_no_float_abi): New. ++ * gcc.target/arm/lto/pr65837_0.c: Require ++ arm_neon_ok_no_float_abi. Add -mfpu=neon to dg-lto-options. ++ * gcc.target/arm/lto/pr65837-attr_0.c: Require ++ arm_neon_ok_no_float_abi. Remove dg-suppress-ld-options. ++ ++2017-09-26 Richard Biener ++ ++ Backport from mainline ++ 2017-09-19 Richard Biener ++ ++ PR tree-optimization/82244 ++ * gcc.dg/torture/pr82244.c: New testcase. ++ ++ 2017-09-21 Richard Biener ++ ++ PR tree-optimization/82276 ++ PR tree-optimization/82244 ++ * gcc.dg/torture/pr82276.c: New testcase. ++ ++ 2017-09-20 Richard Biener ++ ++ PR tree-optimization/82264 ++ * gcc.dg/torture/pr82264.c: New testcase. ++ ++ 2017-09-25 Richard Biener ++ ++ PR tree-optimization/82285 ++ * gcc.dg/torture/pr82285.c: New testcase. ++ ++ 2017-09-22 Richard Biener ++ ++ PR tree-optimization/82291 ++ * gcc.dg/torture/pr82291.c: New testcase. ++ ++2017-09-22 Jakub Jelinek ++ ++ PR sanitizer/81929 ++ * g++.dg/ubsan/pr81929.C: New test. ++ ++2017-09-19 Martin Liska ++ ++ Revert backport: ++ 2017-08-10 Martin Liska ++ ++ PR c++/81355 ++ * g++.dg/other/pr81355.C: New test. ++ ++2017-09-18 Richard Biener ++ ++ Backport from mainline ++ 2017-09-04 Richard Biener ++ ++ PR tree-optimization/82084 ++ * g++.dg/torture/pr82084.C: New testcase. ++ ++ 2017-09-06 Richard Biener ++ ++ PR tree-optimization/82108 ++ * gcc.dg/vect/pr82108.c: New testcase. ++ ++2017-09-15 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-14 Jakub Jelinek ++ ++ PR target/81325 ++ * g++.dg/cpp0x/pr81325.C: New test. ++ ++ 2017-09-12 Jakub Jelinek ++ ++ PR target/82112 ++ * gcc.target/powerpc/pr82112.c: New test. ++ * g++.dg/ext/altivec-18.C: New test. ++ ++ PR target/82112 ++ * c-c++-common/pr82112.c: New test. ++ * gcc.dg/pr82112.c: New test. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-09-12 Martin Liska ++ ++ PR testsuite/82114 ++ * gcc.dg/gimplefe-14.c (main): Add handling of case 0. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-30 Martin Liska ++ ++ PR inline-asm/82001 ++ * gcc.dg/ipa/pr82001.c: New test. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-10 Martin Liska ++ ++ PR c++/81355 ++ * g++.dg/other/pr81355.C: New test. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-08 Martin Liska ++ ++ PR tree-opt/81696 ++ * gcc.dg/ipa/pr81696.c: New test. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-07-19 Martin Liska ++ ++ PR sanitizer/63361 ++ * c-c++-common/ubsan/float-cast-overflow-1.c: Add either ++ -ffloat-store or -mieee for targets that need it. ++ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-06-28 Martin Liska ++ ++ PR ipa/81128 ++ * gcc.target/i386/pr81128.c: New test. ++ ++2017-09-12 Bill Schmidt ++ ++ Backport from mainline ++ 2017-09-05 Bill Schmidt ++ ++ PR target/81833 ++ * gcc.target/powerpc/pr81833-1.c: New file. ++ * gcc.target/powerpc/pr81833-2.c: New file. ++ ++2017-09-10 Bill Schmidt ++ ++ Backport from mainline ++ 2017-05-11 Bill Schmidt ++ ++ PR target/80695 ++ * gcc.target/powerpc/pr80695-p8.c: New file. ++ * gcc.target/powerpc/pr80695-p9.c: New file. ++ ++2017-09-10 Eric Botcazou ++ ++ PR ada/79441 ++ * gnat.dg/pack9.adb: Robustify. ++ ++2017-09-10 Jonathan Wakely ++ ++ PR c++/81852 ++ * g++.dg/cpp1y/feat-cxx11.C: Check __cpp_threadsafe_static_init. ++ * g++.dg/cpp1y/feat-cxx14.C: Likewise. ++ * g++.dg/cpp1y/feat-cxx98.C: Likewise. ++ * g++.dg/cpp1y/feat-neg.C: Likewise. ++ * g++.dg/cpp1z/feat-cxx1z.C: Likewise. ++ ++2017-09-09 Eric Botcazou ++ ++ * gnat.dg/specs/atomic3.ads: New test. ++ ++2017-09-09 Eric Botcazou ++ ++ * gnat.dg/specs/vfa.ads: Rename into... ++ * gnat.dg/specs/vfa1.ads: ...this. ++ * gnat.dg/specs/vfa2.ads: New test. ++ ++2017-09-08 Eric Botcazou ++ ++ * gcc.dg/pr81988.c: New test. ++ ++2017-09-07 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-05 Jakub Jelinek ++ ++ PR middle-end/81768 ++ * gcc.dg/gomp/pr81768-2.c: New test. ++ ++ PR middle-end/81768 ++ * gcc.dg/gomp/pr81768-1.c: New test. ++ ++ 2017-09-01 Jakub Jelinek ++ ++ PR sanitizer/81923 ++ * gcc.dg/asan/pr81923.c: New test. ++ ++ 2017-08-03 Jakub Jelinek ++ ++ PR target/81621 ++ * gcc.dg/pr81621.c: New test. ++ ++ PR driver/81650 ++ * gcc.dg/pr81650.c: New test. ++ ++ PR middle-end/81052 ++ * c-c++-common/pr81052.c: New test. ++ ++2017-09-06 Bill Schmidt ++ ++ Backport from mainline: ++ 2017-08-30 Bill Schmidt ++ ++ PR tree-optimization/81987 ++ * g++.dg/torture/pr81987.C: New file. ++ ++2017-09-06 Jakub Jelinek ++ ++ PR testsuite/82120 ++ * gcc.dg/tree-ssa/pr81588.c: Don't run on logical_op_short_circuit ++ targets except for those where -mbranch-cost=2 is supported. ++ ++2017-09-05 Bill Schmidt ++ ++ Backport from mainline ++ 2017-08-29 Bill Schmidt ++ Jakub Jelinek ++ Richard Biener ++ ++ PR tree-optimization/81503 ++ * gcc.c-torture/execute/pr81503.c: New file. ++ ++2017-09-05 Pierre-Marie de Rodat ++ ++ Backport from trunk ++ PR ada/79542 ++ * gnat.dg/debug13.ads, gnat.dg/debug13.adb: New testcase. ++ ++2017-09-05 Eric Botcazou ++ ++ * gnat.dg/incomplete5.ad[sb]: New test. ++ * gnat.dg/incomplete5_pkg.ad[sb]: New helper. ++ ++2017-09-05 Eric Botcazou ++ ++ * gnat.dg/specs/uc2.ads: New test. ++ ++2017-09-05 Eric Botcazou ++ ++ * testsuite/gnat.dg/array29.ad[sb]: New test. ++ ++2017-09-04 Uros Bizjak ++ ++ * gcc.target/i386/mpx/mpx-os-support.h: New file. ++ * gcc.target/i386/mpx/mpx-check.h: Include mpx-os-support.h. ++ (check_osxsave): New function. ++ (main): Use __get_cpuid_count and return NORUNRES on failure. ++ Use check_osxsave. ++ * gcc.target/i386/mpx/va-arg-pack-1-lbv.c (foo1): Use ++ __builtin_va_arg_pack instead of __va_arg_pack. ++ * gcc.target/i386/mpx/va-arg-pack-1-nov.c (foo1): Ditto. ++ * gcc.target/i386/mpx/va-arg-pack-1-ubv.c (foo1): Ditto. ++ * gcc.target/i386/mpx/va-arg-pack-2-lbv.c (foo1): Ditto. ++ * gcc.target/i386/mpx/va-arg-pack-2-nov.c (foo1): Ditto. ++ * gcc.target/i386/mpx/va-arg-pack-2-ubv.c (foo1): Ditto. ++ ++2017-09-02 Janus Weil ++ ++ Backport from trunk ++ PR fortran/81770 ++ * gfortran.dg/warn_target_lifetime_3.f90: Fix a typo. ++ * gfortran.dg/warn_target_lifetime_4.f90: New testcase. ++ ++2017-08-29 Michael Meissner ++ ++ Back port from trunk ++ 2017-08-07 Michael Meissner ++ ++ PR target/81593 ++ * gcc.target/powerpc/vec-setup.h: New tests to test various ++ combinations of setting up vectors of 2 double word elements. ++ * gcc.target/powerpc/vec-setup-long.c: Likewise. ++ * gcc.target/powerpc/vec-setup-double.c: Likewise. ++ * gcc.target/powerpc/vec-setup-be-long.c: Likewise. ++ * gcc.target/powerpc/vec-setup-be-double.c: Likewise. ++ * gcc.target/powerpc/vsx-extract-6.c: New tests for optimzing ++ vector inserts from vector extracts. ++ * gcc.target/powerpc/vsx-extract-7.c: Likewise. ++ ++2017-08-29 Richard Biener ++ ++ Backport from mainline ++ 2017-08-28 Richard Biener ++ ++ PR tree-optimization/81977 ++ * g++.dg/torture/pr81977.C: New testcase. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-06-14 Richard Biener ++ ++ PR middle-end/81088 ++ * c-c++-common/ubsan/pr81088.c: New testcase. ++ ++ 2017-06-13 Richard Biener ++ ++ PR middle-end/81065 ++ * c-c++-common/ubsan/pr81065.c: New testcase. ++ ++ 2017-06-08 Marek Polacek ++ ++ PR sanitize/80932 ++ * c-c++-common/ubsan/pr80932.c: Test with ints, not with long ints. ++ ++ 2017-06-07 Marek Polacek ++ ++ PR sanitizer/80932 ++ * c-c++-common/ubsan/pr80932.c: New test. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-08-21 Richard Biener ++ ++ PR middle-end/81884 ++ * g++.dg/torture/pr81884.C: New testcase. ++ ++2017-08-28 Richard Biener ++ ++ Backport from mainline ++ 2017-08-01 Richard Biener ++ ++ PR tree-optimization/81181 ++ * gcc.dg/torture/pr81181.c: New testcase. ++ ++ 2017-08-08 Richard Biener ++ ++ PR tree-optimization/81723 ++ * gfortran.dg/pr81723.f: New testcase. ++ ++ 2017-08-24 Richard Biener ++ ++ PR target/81921 ++ * gcc/testsuite/gcc.target/i386/pr81921.c: New testcase. ++ ++2017-05-19 Uros Bizjak ++ ++ Backport from mainline ++ 2017-08-23 Daniel Santos ++ ++ * lib/target-supports.exp (check_avx2_hw_available): ++ Fix breakage due NULL being undefined. ++ ++2017-08-23 Peter Bergner ++ ++ Backport from mainline ++ 2017-08-17 Peter Bergner ++ ++ PR target/72804 ++ * gcc.target/powerpc/pr72804.c: New test. ++ ++2017-08-22 Jerry DeLisle ++ ++ Backport from trunk ++ PR fortran/81296 ++ * gfortran.dg/dtio_12.f90: Update test. ++ ++2017-08-22 Peter Bergner ++ ++ Backport from mainline ++ 2017-08-17 Peter Bergner ++ ++ PR target/80210 ++ * gcc.target/powerpc/pr80210.c: New test. ++ ++2017-08-22 Yvan Roux ++ ++ Backport from mainline ++ 2017-08-22 Yvan Roux ++ ++ PR c++/80287 ++ * g++.dg/pr80287.C: New test. ++ ++2017-08-20 John David Anglin ++ ++ PR ipa/77732 ++ * gcc.dg/ipa/ipcp-cstagg-7.c: Xfail on 32-bit hppa. ++ ++2017-08-18 Jerry DeLisle ++ ++ Backport from trunk ++ PR fortran/80164 ++ * gfortran.dg/array_temporaries_4.f90: New test. ++ ++2017-08-16 Bill Schmidt ++ ++ Backport from mainline ++ 2017-08-08 Bill Schmidt ++ ++ PR tree-optimization/81354 ++ * g++.dg/torture/pr81354.C: New file. ++ ++2017-08-15 Joseph Myers ++ ++ PR target/78460 ++ PR target/67712 ++ * gcc.c-torture/compile/string-large-1.c: New test. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/testsuite/g++.dg/opt/pr82159.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/opt/pr82159.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/opt/pr82159.C (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++// PR c++/82159 ++// { dg-do compile } ++// { dg-options "" } ++ ++template ++struct S ++{ ++ ~S () {} ++ template S foo () { return S (); } ++ unsigned char data[N]; ++}; ++ ++int ++main () ++{ ++ S<16> d; ++ S<0> t = d.foo<0> (); ++} +Index: gcc/testsuite/g++.dg/ubsan/pr81929.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/ubsan/pr81929.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/ubsan/pr81929.C (.../branches/gcc-7-branch) +@@ -0,0 +1,14 @@ ++// PR sanitizer/81929 ++// { dg-do compile } ++// { dg-options "-std=c++14 -fsanitize=undefined" } ++ ++struct S { S &operator<< (long); S foo (); S (); }; ++ ++void ++bar () ++{ ++ static_cast(S () << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 ++ << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 ++ << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 ++ << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0).foo (); ++} +Index: gcc/testsuite/g++.dg/cpp0x/nullptr39.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp0x/nullptr39.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp0x/nullptr39.C (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++// PR c++/81671 ++// { dg-do compile { target c++11 } } ++ ++namespace std { typedef decltype(nullptr) nullptr_t; } ++ ++template struct Bar ++{}; ++template struct Bar ++{ ++ template struct Bind { constexpr static int const cb = 0; }; ++}; ++int foo() ++{ ++ return Bar::Bind::cb; ++} +Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv12.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv12.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv12.C (.../branches/gcc-7-branch) +@@ -0,0 +1,18 @@ ++// PR c++/80767 ++// { dg-do compile { target c++11 } } ++ ++template struct A { using type = U; }; ++template struct B : B::type, B::type { ++ using type = B; ++ using B::type::operator(); ++}; ++template struct B { using type = F; }; ++struct { ++ template ::type...>::type> ++ Overload operator()(F...){} ++} a; ++int main() { ++ auto f = a([](int) {}, [](float) {}); ++ f({}); ++} +Index: gcc/testsuite/g++.dg/cpp0x/pr81325.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp0x/pr81325.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr81325.C (.../branches/gcc-7-branch) +@@ -0,0 +1,84 @@ ++// PR target/81325 ++// { dg-do compile { target c++11 } } ++// { dg-options "-O2 -fcompare-debug" } ++ ++struct A { A(const char *, const int & = 0); }; ++template struct B; ++template struct C { ++ int _M_i; ++ void m_fn1() { __atomic_fetch_add(&_M_i, 0, __ATOMIC_RELAXED); } ++}; ++struct D { ++ int *Data; ++ long Length = 0; ++ D(int) : Data() {} ++}; ++template <> struct B : C {}; ++struct F { ++ B RefCount; ++ void m_fn2() { RefCount.m_fn1(); } ++}; ++struct G { ++ F *Obj; ++ G(const G &p1) : Obj(p1.Obj) { ++ if (Obj) { ++ F *a = 0; ++ a->m_fn2(); ++ } ++ } ++}; ++struct H { ++ int CPlusPlus : 1; ++}; ++struct I { ++ enum {} KindId; ++}; ++template struct J { ++ void operator()(); ++ ResultT operator()(ArgT) {} ++}; ++struct K { ++ int AllowBind; ++ I SupportedKind; ++ I RestrictKind; ++ G Implementation; ++}; ++struct L { ++ L(int) : Implementation(Implementation) {} ++ K Implementation; ++}; ++struct M { ++ int Param1; ++}; ++struct N { ++ N(int, L &p2) : Param2(p2) {} ++ L Param2; ++}; ++struct O { ++ L m_fn3(); ++}; ++L ignoringImpCasts(L); ++J b; ++L hasName(const A &); ++M hasOverloadedOperatorName(D); ++J c; ++struct P { ++ void m_fn4(L, int); ++}; ++struct Q { ++ void m_fn5(P *); ++}; ++H d; ++void Q::m_fn5(P *p1) { ++ if (!d.CPlusPlus) { ++ c(); ++ L e = 0, f = ignoringImpCasts(e); ++ b(ignoringImpCasts(f)).m_fn3(); ++ } ++ hasOverloadedOperatorName(0); ++ hasName(""); ++ L g = 0; ++ N(0, g); ++ L h(0); ++ p1->m_fn4(h, 0); ++} +Index: gcc/testsuite/g++.dg/torture/pr81884.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/torture/pr81884.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/torture/pr81884.C (.../branches/gcc-7-branch) +@@ -0,0 +1,39 @@ ++/* { dg-do run } */ ++ ++typedef unsigned long uint64_t; ++ ++struct value_t { ++ uint64_t _count; ++ value_t(uint64_t c) : _count(c) {} ++}; ++ ++struct X { ++ value_t eventTime; ++ uint64_t arr[0]; ++}; ++ ++X* x; ++ ++__attribute__((noclone, noinline)) ++void initialize() ++{ ++ x->arr[0] = 11; ++ x->arr[1] = 12; ++ x->eventTime = value_t(10); ++ x->arr[2] = 13; ++ x->arr[3] = 14; ++} ++ ++int main() ++{ ++ char buffer[sizeof(X) + sizeof(uint64_t)*4]; ++ x = (X*)buffer; ++ x->eventTime = value_t(999); ++ x->arr[0] = 1; ++ x->arr[1] = 2; ++ x->arr[2] = 3; ++ x->arr[3] = 4; ++ initialize(); ++ if (x->arr[0] != 11 || x->arr[1] != 12 || x->arr[2] != 13 || x->arr[3] != 14) ++ __builtin_abort (); ++} +Index: gcc/testsuite/g++.dg/torture/pr81354.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/torture/pr81354.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/torture/pr81354.C (.../branches/gcc-7-branch) +@@ -0,0 +1,24 @@ ++// PR81354 reported this test as crashing in a limited range of revisions. ++// { dg-do compile } ++ ++struct T { double a; double b; }; ++ ++void foo(T Ad[], int As[2]) ++{ ++ int j; ++ int i; ++ int Bs[2] = {0,0}; ++ T Bd[16]; ++ ++ for (j = 0; j < 4; j++) { ++ for (i = 0; i + 1 <= j + 1; i++) { ++ Ad[i + As[0] * j] = Bd[i + Bs[0] * j]; ++ } ++ ++ i = j + 1; // <- comment out this line and it does not crash ++ for (; i + 1 < 5; i++) { ++ Ad[i + As[0] * j].a = 0.0; ++ Ad[i + As[0] * j].b = 0.0; ++ } ++ } ++} +Index: gcc/testsuite/g++.dg/torture/pr82084.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/torture/pr82084.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/torture/pr82084.C (.../branches/gcc-7-branch) +@@ -0,0 +1,9 @@ ++// { dg-do compile } ++ ++#include ++int main() ++{ ++ wchar_t strs[4][2]= { L"A", L"B", L"C" , L"D"}; ++ std::wstring ss(strs[0]); ++ return 0; ++} +Index: gcc/testsuite/g++.dg/torture/pr81977.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/torture/pr81977.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/torture/pr81977.C (.../branches/gcc-7-branch) +@@ -0,0 +1,55 @@ ++/* { dg-do run } */ ++/* { dg-require-effective-target int32plus } */ ++ ++#include ++ ++typedef struct ++{ ++ uint16_t x ; ++ uint16_t y ; ++ uint64_t z ; ++} __attribute__((packed, aligned(1))) TestMsgType; ++ ++struct Payload ++{ ++ uint16_t header_info[2]; ++ TestMsgType _pref; ++ void Pack(uint8_t *buffer) ++ { ++ __builtin_memcpy(buffer, &_pref, sizeof(_pref)); ++ } ++ void UnPack(uint8_t *buffer) ++ { ++ __builtin_memcpy(&_pref, buffer, sizeof(_pref)); ++ } ++}; ++ ++ ++struct Msg ++{ ++ Payload _payload; ++ void Pack(uint8_t *buffer) ++ { ++ _payload.Pack(buffer); ++ } ++ ++ void UnPack(uint8_t *buffer) ++ { ++ _payload.UnPack(buffer); ++ } ++}; ++ ++int main() ++{ ++ uint8_t * buffer = new uint8_t [30]; ++ Msg msg; ++ Msg msg1; ++ msg._payload._pref.x = 0xabcd; ++ msg._payload._pref.y = 0xa; ++ msg._payload._pref.z = 0x0001020304051617; ++ msg.Pack(&buffer[0]); ++ msg1.UnPack(&buffer[0]); ++ if (msg1._payload._pref.x != 0xabcd) ++ __builtin_abort (); ++ delete [] buffer; ++} +Index: gcc/testsuite/g++.dg/torture/pr81987.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/torture/pr81987.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/torture/pr81987.C (.../branches/gcc-7-branch) +@@ -0,0 +1,61 @@ ++extern short var_1; ++extern const short var_3; ++extern unsigned long int var_9; ++extern short var_13; ++extern const unsigned long int var_15; ++extern const unsigned long int var_37; ++extern unsigned long int var_40; ++extern long long int var_47; ++extern short var_48; ++extern const short var_54; ++extern long long int var_79; ++extern long long int var_81; ++extern long long int var_94; ++extern long long int var_95; ++extern long long int var_701; ++extern unsigned long int var_786; ++extern short var_788; ++extern long long int var_844; ++ ++struct struct_1 { ++ short member_1_2 : 15; ++ static long long int member_1_3; ++}; ++ ++extern struct_1 struct_obj_6; ++extern struct_1 struct_obj_8; ++ ++void foo() { ++ int a = var_3 <= 602154393864UL; ++ if (var_81 ? 0 : var_3 && var_9) ++ ; ++ else { ++ var_94 = 0; ++ if (var_3 && var_48 || var_13) { ++ if (var_48) ++ var_95 = 0; ++ short b((2364461588881776511UL + var_3) * (2 ? var_13 : 0) || var_1); ++ struct_obj_8.member_1_2 = b; ++ if (var_15) { ++ if (var_81) ++ if (var_47) ++ ; ++ else if (var_40) ++ var_701 = 0; ++ } else { ++ if (var_40) ++ var_79 = 0; ++ if (var_54) { ++ if (var_37) ++ var_786 = 0; ++ else ++ var_788 = 0; ++ struct_obj_6.member_1_3 = ++ (2364461588881776511UL + var_3) * (2 ? var_13 : 0); ++ } ++ } ++ if ((2364461588881776511UL + var_3) * (2 ? var_13 : 0)) ++ var_844 = 0; ++ } ++ } ++} +Index: gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C (.../branches/gcc-7-branch) +@@ -125,6 +125,12 @@ + # error "__cpp_alias_templates != 200704" + #endif + ++#ifndef __cpp_threadsafe_static_init ++# error "__cpp_threadsafe_static_init" ++#elif __cpp_threadsafe_static_init != 200806 ++# error "__cpp_threadsafe_static_init != 200806" ++#endif ++ + // C++14 features allowed in C++11 in non-ANSI modes: + + #ifndef __cpp_binary_literals +Index: gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1.C (.../branches/gcc-7-branch) +@@ -0,0 +1,17 @@ ++// PR c++/81236 ++// { dg-do compile { target c++14 } } ++ ++struct A { constexpr operator int() { return 24; } }; ++ ++struct MyType { ++ void crash() { ++ auto l = [&](auto i){ ++ make_crash(); // Line (1) ++ }; ++ ++ l(A{}); ++ } ++ ++ template ++ void make_crash() {} ++}; +Index: gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C (.../branches/gcc-7-branch) +@@ -0,0 +1,20 @@ ++// PR c++/81525 ++// { dg-do compile { target c++14 } } ++ ++template struct A { ++ constexpr operator int () const { return i; } ++}; ++template constexpr A a = {}; ++ ++template void foo (F f) { ++ f (A<0>{}); ++} ++template ++void bar (T) { ++ constexpr auto N = a<1>; ++ auto f = [&] (auto i) { ++ static_assert (static_cast(N) == 1, ""); ++ }; ++ foo (f); ++} ++int main () { bar (0); } +Index: gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C (.../branches/gcc-7-branch) +@@ -118,6 +118,12 @@ + # error "__cpp_alias_templates != 200704" + #endif + ++#ifndef __cpp_threadsafe_static_init ++# error "__cpp_threadsafe_static_init" ++#elif __cpp_threadsafe_static_init != 200806 ++# error "__cpp_threadsafe_static_init != 200806" ++#endif ++ + // C++14 features: + + #ifndef __cpp_binary_literals +Index: gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C (.../branches/gcc-7-branch) +@@ -15,6 +15,14 @@ + # error "__cpp_exceptions != 199711" + #endif + ++// C++11 features allowed in C++98: ++ ++#ifndef __cpp_threadsafe_static_init ++# error "__cpp_threadsafe_static_init" ++#elif __cpp_threadsafe_static_init != 200806 ++# error "__cpp_threadsafe_static_init != 200806" ++#endif ++ + // C++14 features allowed in C++98 in non-ANSI modes: + + #ifndef __cpp_binary_literals +Index: gcc/testsuite/g++.dg/cpp1y/lambda-generic-const5.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const5.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const5.C (.../branches/gcc-7-branch) +@@ -0,0 +1,17 @@ ++// PR c++/78840 ++// { dg-do compile { target c++14 } } ++ ++int global; ++ ++void Bar (int); ++ ++template void Foo () { ++ const int cst = global; ++ auto lam0 = [&]() -> void { ++ auto lam1 = [&]() -> void { cst; }; ++ ++ Bar (cst); ++ }; ++} ++ ++template void Foo <0> (); +Index: gcc/testsuite/g++.dg/cpp1y/feat-neg.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/feat-neg.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/feat-neg.C (.../branches/gcc-7-branch) +@@ -1,5 +1,5 @@ + // { dg-do compile } +-// { dg-options "-fno-rtti -fno-exceptions" } ++// { dg-options "-fno-rtti -fno-exceptions -fno-threadsafe-statics" } + + // C++98 features with explicit opt-out: + +@@ -10,3 +10,9 @@ + #ifndef __cpp_exceptions + # error "__cpp_exceptions" // { dg-error "error" } + #endif ++ ++// C++11 features with explicit opt-out: ++ ++#ifndef __cpp_threadsafe_static_init ++# error "__cpp_threadsafe_static_init" // { dg-error "error" } ++#endif +Index: gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1a.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1a.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this1a.C (.../branches/gcc-7-branch) +@@ -0,0 +1,17 @@ ++// PR c++/81236 ++// { dg-do compile { target c++14 } } ++ ++struct A { constexpr operator int() { return 24; } }; ++ ++struct MyType { ++ void crash() { ++ auto l = [&](auto i){ ++ MyType::make_crash(); // Line (1) ++ }; ++ ++ l(A{}); ++ } ++ ++ template ++ void make_crash() {} ++}; +Index: gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C (.../branches/gcc-7-branch) +@@ -106,6 +106,12 @@ + # error "__cpp_alias_templates != 200704" + #endif + ++#ifndef __cpp_threadsafe_static_init ++# error "__cpp_threadsafe_static_init" ++#elif __cpp_threadsafe_static_init != 200806 ++# error "__cpp_threadsafe_static_init != 200806" ++#endif ++ + // C++14 features: + + #ifndef __cpp_binary_literals +Index: gcc/testsuite/g++.dg/cpp1z/constexpr-lambda16.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda16.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda16.C (.../branches/gcc-7-branch) +@@ -0,0 +1,15 @@ ++// PR c++/80642 ++// { dg-do compile { target c++14 } } ++ ++int main() ++{ ++ [](auto i) ++ { ++ if (i) ++ { ++ int j; ++ return i + j; ++ } ++ return i; ++ }(0); ++} +Index: gcc/testsuite/g++.dg/cpp1z/lambda-inherit1.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/cpp1z/lambda-inherit1.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/cpp1z/lambda-inherit1.C (.../branches/gcc-7-branch) +@@ -0,0 +1,23 @@ ++// PR c++/80767 ++// { dg-options -std=c++17 } ++ ++template ++struct overloader : Fs... ++{ ++ overloader(Fs... fs) ++ : Fs(fs)... ++ { } ++ ++ using Fs::operator()...; ++}; ++ ++struct a { void foo() { } }; ++struct b { void bar() { } }; ++struct c { void bar() { } }; ++ ++int main() { ++ overloader{ ++ [](a x) { x.foo(); }, ++ [](auto x) { x.bar(); } ++ }(a{}); ++} +Index: gcc/testsuite/g++.dg/ext/altivec-18.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/ext/altivec-18.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/ext/altivec-18.C (.../branches/gcc-7-branch) +@@ -0,0 +1,14 @@ ++// PR target/82112 ++// { dg-do compile { target powerpc*-*-* } } ++// { dg-require-effective-target powerpc_altivec_ok } ++// { dg-options "-maltivec" } ++ ++#include ++ ++__attribute__((aligned (16))) extern const unsigned char c[16]; ++ ++void ++foo (void) ++{ ++ vec_ld (0, c); ++} +Index: gcc/testsuite/g++.dg/pr80287.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/pr80287.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/pr80287.C (.../branches/gcc-7-branch) +@@ -0,0 +1,13 @@ ++// PR c++/80287 ++// { dg-do compile { target c++11 } } ++// { dg-options "-g" } ++ ++struct A { ++ operator long() {} ++} __attribute__((__may_alias__)); ++ ++struct { ++ A ino; ++} a; ++ ++char b = a.ino; +Index: gcc/testsuite/g++.dg/other/bitfield6.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/other/bitfield6.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/other/bitfield6.C (.../branches/gcc-7-branch) +@@ -0,0 +1,9 @@ ++// PR c++/81607 ++ ++int a; ++ ++struct b { ++ long c : 32; ++} d; ++ ++char f = (903092 ? int(d.c) : 0) << a; +Index: gcc/testsuite/g++.dg/warn/Wbool-operation-1.C +=================================================================== +--- a/src/gcc/testsuite/g++.dg/warn/Wbool-operation-1.C (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/g++.dg/warn/Wbool-operation-1.C (.../branches/gcc-7-branch) +@@ -0,0 +1,11 @@ ++// PR c++/82040 ++// { dg-do compile { target c++11 } } ++// { dg-options "-Wbool-operation" } ++ ++template ++decltype (~c{}) ++call () ++{ ++ return ~false; // { dg-warning "on an expression of type bool" } ++} ++template int call(); +Index: gcc/testsuite/c-c++-common/ubsan/pr81065.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/ubsan/pr81065.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/ubsan/pr81065.c (.../branches/gcc-7-branch) +@@ -0,0 +1,13 @@ ++/* { dg-do run } */ ++/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */ ++ ++unsigned char x = 154; ++int foo() { ++ // 8575 * (254408 - 9057) = 8575 * 245351 = 2103884825 = 0x7d66bc19 ++ return 8575 * (1652 * x - 9057); ++} ++ ++int main() { ++ foo(); ++ return 0; ++} +Index: gcc/testsuite/c-c++-common/ubsan/pr80932.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/ubsan/pr80932.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/ubsan/pr80932.c (.../branches/gcc-7-branch) +@@ -0,0 +1,17 @@ ++/* PR sanitizer/80932 */ ++/* { dg-do run } */ ++/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */ ++ ++int x = 1; ++ ++int ++foo (void) ++{ ++ return ((int) (2855545792U * x) - (int) (3269399503U * x)) * -5; ++} ++ ++int ++main () ++{ ++ foo (); ++} +Index: gcc/testsuite/c-c++-common/ubsan/pr81088.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/ubsan/pr81088.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/ubsan/pr81088.c (.../branches/gcc-7-branch) +@@ -0,0 +1,11 @@ ++/* { dg-do run } */ ++/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */ ++ ++short s = 2; ++short y = 1; ++int i; ++int main() ++{ ++ i = -(s + (int)(~(unsigned)(0 / y))) + 0x7fffffff; ++ return 0; ++} +Index: gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-1.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-1.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-1.c (.../branches/gcc-7-branch) +@@ -1,6 +1,7 @@ + /* { dg-do run { target { lp64 || ilp32 } } } */ + /* { dg-options "-fsanitize=float-cast-overflow" } */ +-/* { dg-additional-options "-msse2 -mfpmath=sse" { target { sse2_runtime && ia32 } } } */ ++/* { dg-additional-options "-ffloat-store" { target { ia32 } } } */ ++/* { dg-additional-options "-mieee" { target { { alpha*-*-* } || { sh*-*-* } } } } */ + + #include + #include "float-cast.h" +Index: gcc/testsuite/c-c++-common/pr82112.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/pr82112.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/pr82112.c (.../branches/gcc-7-branch) +@@ -0,0 +1,13 @@ ++/* PR target/82112 */ ++/* { dg-do compile } */ ++ ++int c[10], d[10], e[10], f[10], g[10], h[10], i[10], j[10], k[10], l[10]; ++ ++void ++foo (void) ++{ ++ __atomic_load (c, d, __ATOMIC_ACQUIRE); ++ __atomic_store (e, f, __ATOMIC_SEQ_CST); ++ __atomic_exchange (g, h, i, __ATOMIC_RELAXED); ++ __atomic_compare_exchange (j, k, l, 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED); ++} +Index: gcc/testsuite/c-c++-common/pr81052.c +=================================================================== +--- a/src/gcc/testsuite/c-c++-common/pr81052.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/testsuite/c-c++-common/pr81052.c (.../branches/gcc-7-branch) +@@ -0,0 +1,28 @@ ++/* PR middle-end/81052 */ ++/* { dg-do compile } */ ++/* { dg-options "-fopenmp-simd -O2" } */ ++ ++int ++foo (int x, int y) ++{ ++ int i; ++#pragma omp simd ++ for (i = x; i < y; ++i) ++ return 0; /* { dg-error "invalid branch to/from OpenMP structured block" } */ ++ return 1; ++} ++ ++#ifdef __cplusplus ++template ++T ++bar (T x, T y) ++{ ++ T i; ++#pragma omp simd ++ for (i = x; i < y; ++i) ++ return 0; /* { dg-error "invalid branch to/from OpenMP structured block" "" { target c++ } } */ ++ return 1; ++} ++ ++int x = bar (1, 7); ++#endif +Index: gcc/cp/typeck.c +=================================================================== +--- a/src/gcc/cp/typeck.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/typeck.c (.../branches/gcc-7-branch) +@@ -5927,6 +5927,7 @@ + { + /* Warn if the expression has boolean value. */ + if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE ++ && (complain & tf_warning) + && warning_at (location, OPT_Wbool_operation, + "%<~%> on an expression of type bool")) + inform (location, "did you mean to use logical not (%)?"); +Index: gcc/cp/decl.c +=================================================================== +--- a/src/gcc/cp/decl.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/decl.c (.../branches/gcc-7-branch) +@@ -5579,9 +5579,10 @@ + "uninitialized const %qD", decl); + else + { +- error_at (DECL_SOURCE_LOCATION (decl), +- "uninitialized variable %qD in % function", +- decl); ++ if (!is_instantiation_of_constexpr (current_function_decl)) ++ error_at (DECL_SOURCE_LOCATION (decl), ++ "uninitialized variable %qD in % function", ++ decl); + cp_function_chain->invalid_constexpr = true; + } + +Index: gcc/cp/tree.c +=================================================================== +--- a/src/gcc/cp/tree.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/tree.c (.../branches/gcc-7-branch) +@@ -2767,6 +2767,7 @@ + { + tree obj; /* The object to be substituted for a PLACEHOLDER_EXPR. */ + bool seen; /* Whether we've encountered a PLACEHOLDER_EXPR. */ ++ hash_set *pset; /* To avoid walking same trees multiple times. */ + }; + + /* Like substitute_placeholder_in_expr, but handle C++ tree codes and +@@ -2789,8 +2790,8 @@ + case PLACEHOLDER_EXPR: + { + tree x = obj; +- for (; !(same_type_ignoring_top_level_qualifiers_p +- (TREE_TYPE (*t), TREE_TYPE (x))); ++ for (; !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (*t), ++ TREE_TYPE (x)); + x = TREE_OPERAND (x, 0)) + gcc_assert (TREE_CODE (x) == COMPONENT_REF); + *t = x; +@@ -2822,8 +2823,7 @@ + valp = &TARGET_EXPR_INITIAL (*valp); + } + d->obj = subob; +- cp_walk_tree (valp, replace_placeholders_r, +- data_, NULL); ++ cp_walk_tree (valp, replace_placeholders_r, data_, d->pset); + d->obj = obj; + } + *walk_subtrees = false; +@@ -2855,10 +2855,11 @@ + return exp; + + tree *tp = &exp; +- replace_placeholders_t data = { obj, false }; ++ hash_set pset; ++ replace_placeholders_t data = { obj, false, &pset }; + if (TREE_CODE (exp) == TARGET_EXPR) + tp = &TARGET_EXPR_INITIAL (exp); +- cp_walk_tree (tp, replace_placeholders_r, &data, NULL); ++ cp_walk_tree (tp, replace_placeholders_r, &data, &pset); + if (seen_p) + *seen_p = data.seen; + return exp; +Index: gcc/cp/ChangeLog +=================================================================== +--- a/src/gcc/cp/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,76 @@ ++2017-09-22 Eric Botcazou ++ ++ PR bootstrap/81926 ++ * cp-objcp-common.c (cp_get_debug_type): Do only one lookup ++ ++2017-09-22 Jakub Jelinek ++ ++ PR sanitizer/81929 ++ * tree.c (struct replace_placeholders_t): Add pset field. ++ (replace_placeholders_r): Call cp_walk_tree with d->pset as ++ last argument instead of NULL. Formatting fix. ++ (replace_placeholders): Add pset variable, add its address ++ into data. Pass &pset instead of NULL to cp_walk_tree. ++ ++2017-09-18 Jason Merrill ++ ++ PR c++/81236 - ICE with template-id in generic lambda ++ * parser.c (parsing_default_capturing_generic_lambda): Don't check ++ for enclosing template. ++ * semantics.c (finish_qualified_id_expr): Call it. ++ * cp-tree.h: Adjust. ++ ++ PR c++/80767 - unnecessary instantiation of generic lambda ++ PR c++/82030 - ICE inheriting from multiple lambdas ++ * call.c (convert_like_real): Call build_user_type_conversion_1 if ++ cand is null. ++ (add_conv_candidate): Build a ck_user conversion with no candidate. ++ ++ PR c++/80935 - wrong C++17 error with lambda ++ * decl.c (check_for_uninitialized_const_var): Check ++ is_instantiation_of_constexpr. ++ ++ PR c++/81671 - nullptr_t template parameter ++ * pt.c (convert_nontype_argument): Fix nullptr_t check. ++ ++ PR c++/81525 - wrong constant value with generic lambda ++ * pt.c (tsubst_decl) [VAR_DECL]: Avoid clobbering auto. ++ (tsubst_copy) [VAR_DECL]: Handle auto. ++ ++2017-09-15 Jakub Jelinek ++ ++ Backported from mainline ++ 2017-09-14 Jakub Jelinek ++ ++ PR c++/81314 ++ * cp-gimplify.c (omp_var_to_track): Look through references. ++ (omp_cxx_notice_variable): Likewise. ++ ++2017-09-09 Eric Botcazou ++ ++ PR bootstrap/81926 ++ * cp-objcp-common.c (struct debug_type_hasher): New class. ++ (debug_type_hash): New variable. ++ (cp_get_debug_type): Associate the OFFSET_TYPEs with the types. ++ ++2017-09-01 Marek Polacek ++ ++ Backported from mainline ++ 2017-09-01 Marek Polacek ++ ++ PR c++/82040 ++ * typeck.c (cp_build_unary_op): Avoid re-entering reporting routines. ++ ++2017-08-25 Marek Polacek ++ ++ Backported from mainline ++ 2017-08-08 Marek Polacek ++ ++ PR c++/81607 ++ * cp-gimplify.c (cp_fold): If folding exposed a branch of ++ a COND_EXPR, convert it to the original type of the COND_EXPR, if ++ they differ. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +@@ -4,8 +77,8 @@ + + 2017-08-09 Leonid Koppel + +- PR c++/67054 - Inherited ctor with non-default-constructible members +- * method.c (walk_field_subobs) Consider member initializers (NSDMIs) ++ PR c++/67054 - Inherited ctor with non-default-constructible members ++ * method.c (walk_field_subobs) Consider member initializers (NSDMIs) + when deducing an inheriting constructor. + + 2017-07-27 Paolo Carlini +Index: gcc/cp/cp-gimplify.c +=================================================================== +--- a/src/gcc/cp/cp-gimplify.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/cp-gimplify.c (.../branches/gcc-7-branch) +@@ -924,6 +924,8 @@ + tree type = TREE_TYPE (decl); + if (is_invisiref_parm (decl)) + type = TREE_TYPE (type); ++ else if (TREE_CODE (type) == REFERENCE_TYPE) ++ type = TREE_TYPE (type); + while (TREE_CODE (type) == ARRAY_TYPE) + type = TREE_TYPE (type); + if (type == error_mark_node || !CLASS_TYPE_P (type)) +@@ -976,6 +978,8 @@ + tree type = TREE_TYPE (decl); + if (is_invisiref_parm (decl)) + type = TREE_TYPE (type); ++ else if (TREE_CODE (type) == REFERENCE_TYPE) ++ type = TREE_TYPE (type); + while (TREE_CODE (type) == ARRAY_TYPE) + type = TREE_TYPE (type); + get_copy_ctor (type, tf_none); +@@ -2311,9 +2315,9 @@ + + /* A COND_EXPR might have incompatible types in branches if one or both + arms are bitfields. If folding exposed such a branch, fix it up. */ +- if (TREE_CODE (x) != code) +- if (tree type = is_bitfield_expr_with_lowered_type (x)) +- x = fold_convert (type, x); ++ if (TREE_CODE (x) != code ++ && !useless_type_conversion_p (TREE_TYPE (org_x), TREE_TYPE (x))) ++ x = fold_convert (TREE_TYPE (org_x), x); + + break; + +Index: gcc/cp/pt.c +=================================================================== +--- a/src/gcc/cp/pt.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/pt.c (.../branches/gcc-7-branch) +@@ -6849,7 +6849,7 @@ + } + else if (NULLPTR_TYPE_P (type)) + { +- if (expr != nullptr_node) ++ if (!NULLPTR_TYPE_P (TREE_TYPE (expr))) + { + if (complain & tf_error) + error ("%qE is not a valid template argument for type %qT " +@@ -12896,7 +12896,15 @@ + && VAR_HAD_UNKNOWN_BOUND (t) + && type != error_mark_node) + type = strip_array_domain (type); ++ tree auto_node = type_uses_auto (type); ++ int len = TREE_VEC_LENGTH (args); ++ if (auto_node) ++ /* Mask off any template args past the variable's context so we ++ don't replace the auto with an unrelated argument. */ ++ TREE_VEC_LENGTH (args) = TEMPLATE_TYPE_LEVEL (auto_node) - 1; + type = tsubst (type, args, complain, in_decl); ++ if (auto_node) ++ TREE_VEC_LENGTH (args) = len; + } + if (VAR_P (r)) + { +@@ -14687,6 +14695,10 @@ + DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) + = TREE_CONSTANT (r) = true; + DECL_INITIAL (r) = init; ++ if (tree auto_node = type_uses_auto (TREE_TYPE (r))) ++ TREE_TYPE (r) ++ = do_auto_deduction (TREE_TYPE (r), init, auto_node, ++ complain, adc_variable_type); + } + gcc_assert (cp_unevaluated_operand || TREE_STATIC (r) + || decl_constant_var_p (r) +Index: gcc/cp/semantics.c +=================================================================== +--- a/src/gcc/cp/semantics.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/semantics.c (.../branches/gcc-7-branch) +@@ -2008,7 +2008,9 @@ + qualifying_class); + pop_deferring_access_checks (); + } +- else if (BASELINK_P (expr) && !processing_template_decl) ++ else if (BASELINK_P (expr) ++ && (!processing_template_decl ++ || parsing_default_capturing_generic_lambda ())) + { + /* See if any of the functions are non-static members. */ + /* If so, the expression may be relative to 'this'. */ +@@ -3584,12 +3586,12 @@ + : CP_ID_KIND_UNQUALIFIED))); + + /* If the name was dependent on a template parameter and we're not in a +- default capturing generic lambda within a template, we will resolve the ++ default capturing generic lambda, we will resolve the + name at instantiation time. FIXME: For lambdas, we should defer + building the closure type until instantiation time then we won't need + the extra test here. */ + if (dependent_p +- && !parsing_default_capturing_generic_lambda_in_template ()) ++ && !parsing_default_capturing_generic_lambda ()) + { + if (DECL_P (decl) + && any_dependent_type_attributes_p (DECL_ATTRIBUTES (decl))) +Index: gcc/cp/parser.c +=================================================================== +--- a/src/gcc/cp/parser.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/parser.c (.../branches/gcc-7-branch) +@@ -20486,7 +20486,7 @@ + which we ultimately want to defer to instantiation time. */ + + bool +-parsing_default_capturing_generic_lambda_in_template (void) ++parsing_default_capturing_generic_lambda (void) + { + if (!processing_template_decl || !current_class_type) + return false; +@@ -20499,12 +20499,7 @@ + if (!callop) + return false; + +- return (DECL_TEMPLATE_INFO (callop) +- && (DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (callop)) == callop) +- && ((current_nonlambda_class_type () +- && CLASSTYPE_TEMPLATE_INFO (current_nonlambda_class_type ())) +- || ((current_nonlambda_function () +- && DECL_TEMPLATE_INFO (current_nonlambda_function ()))))); ++ return generic_lambda_fn_p (callop); + } + + /* Parse a late-specified return type, if any. This is not a separate +Index: gcc/cp/call.c +=================================================================== +--- a/src/gcc/cp/call.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/call.c (.../branches/gcc-7-branch) +@@ -2279,8 +2279,10 @@ + + if (i == 0) + { +- t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false, +- flags, complain); ++ t = build_identity_conv (argtype, NULL_TREE); ++ t = build_conv (ck_user, totype, t); ++ /* Leave the 'cand' field null; we'll figure out the conversion in ++ convert_like_real if this candidate is chosen. */ + convert_type = totype; + } + else if (parmnode == void_list_node) +@@ -6665,6 +6667,13 @@ + case ck_user: + { + struct z_candidate *cand = convs->cand; ++ ++ if (cand == NULL) ++ /* We chose the surrogate function from add_conv_candidate, now we ++ actually need to build the conversion. */ ++ cand = build_user_type_conversion_1 (totype, expr, ++ LOOKUP_NO_CONVERSION, complain); ++ + tree convfn = cand->fn; + + /* When converting from an init list we consider explicit +@@ -9128,7 +9137,9 @@ + return 0; + else if (t1->kind == ck_user) + { +- if (t1->cand->fn != t2->cand->fn) ++ tree f1 = t1->cand ? t1->cand->fn : t1->type; ++ tree f2 = t2->cand ? t2->cand->fn : t2->type; ++ if (f1 != f2) + return 0; + } + else +Index: gcc/cp/cp-objcp-common.c +=================================================================== +--- a/src/gcc/cp/cp-objcp-common.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/cp-objcp-common.c (.../branches/gcc-7-branch) +@@ -131,6 +131,20 @@ + return same_type_ignoring_top_level_qualifiers_p (x, y); + } + ++struct debug_type_hasher : ggc_cache_ptr_hash ++{ ++ static hashval_t hash (tree_map *m) { return tree_map_hash (m); } ++ static bool equal (tree_map *a, tree_map *b) { return tree_map_eq (a, b); } ++ ++ static int ++ keep_cache_entry (tree_map *&e) ++ { ++ return ggc_marked_p (e->base.from); ++ } ++}; ++ ++static GTY((cache)) hash_table *debug_type_hash; ++ + /* Return a type to use in the debug info instead of TYPE, or NULL_TREE to + keep TYPE. */ + +@@ -138,9 +152,36 @@ + cp_get_debug_type (const_tree type) + { + if (TYPE_PTRMEMFUNC_P (type) && !typedef_variant_p (type)) +- return build_offset_type (TYPE_PTRMEMFUNC_OBJECT_TYPE (type), +- TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))); ++ { ++ if (debug_type_hash == NULL) ++ debug_type_hash = hash_table::create_ggc (512); + ++ /* We cannot simply use build_offset_type here because the function uses ++ the type canonicalization hashtable, which is GC-ed, so its behavior ++ depends on the actual collection points. Since we are building these ++ types on the fly for the debug info only, they would not be attached ++ to any GC root and always be swept, so we would make the contents of ++ the debug info depend on the collection points. */ ++ struct tree_map in, *h, **slot; ++ ++ in.base.from = CONST_CAST_TREE (type); ++ in.hash = htab_hash_pointer (type); ++ slot = debug_type_hash->find_slot_with_hash (&in, in.hash, INSERT); ++ if (*slot) ++ return (*slot)->to; ++ ++ tree t = build_offset_type (TYPE_PTRMEMFUNC_OBJECT_TYPE (type), ++ TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))); ++ ++ h = ggc_alloc (); ++ h->base.from = CONST_CAST_TREE (type); ++ h->hash = htab_hash_pointer (type); ++ h->to = t; ++ *slot = h; ++ ++ return t; ++ } ++ + return NULL_TREE; + } + +Index: gcc/cp/cp-tree.h +=================================================================== +--- a/src/gcc/cp/cp-tree.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-7-branch) +@@ -6125,7 +6125,7 @@ + /* In parser.c */ + extern tree cp_convert_range_for (tree, tree, tree, tree, unsigned int, bool); + extern bool parsing_nsdmi (void); +-extern bool parsing_default_capturing_generic_lambda_in_template (void); ++extern bool parsing_default_capturing_generic_lambda (void); + extern void inject_this_parameter (tree, cp_cv_quals); + + /* in pt.c */ +Index: gcc/omp-expand.c +=================================================================== +--- a/src/gcc/omp-expand.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/omp-expand.c (.../branches/gcc-7-branch) +@@ -4725,12 +4725,14 @@ + tree itype2 = TREE_TYPE (fd->loops[i - 1].v); + if (POINTER_TYPE_P (itype2)) + itype2 = signed_type_for (itype2); ++ t = fold_convert (itype2, fd->loops[i - 1].step); ++ t = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE, true, ++ GSI_SAME_STMT); + t = build3 (COND_EXPR, itype2, + build2 (fd->loops[i].cond_code, boolean_type_node, + fd->loops[i].v, + fold_convert (itype, fd->loops[i].n2)), +- build_int_cst (itype2, 0), +- fold_convert (itype2, fd->loops[i - 1].step)); ++ build_int_cst (itype2, 0), t); + if (POINTER_TYPE_P (TREE_TYPE (fd->loops[i - 1].v))) + t = fold_build_pointer_plus (fd->loops[i - 1].v, t); + else +@@ -4737,12 +4739,14 @@ + t = fold_build2 (PLUS_EXPR, itype2, fd->loops[i - 1].v, t); + expand_omp_build_assign (&gsi, fd->loops[i - 1].v, t); + ++ t = fold_convert (itype, fd->loops[i].n1); ++ t = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE, true, ++ GSI_SAME_STMT); + t = build3 (COND_EXPR, itype, + build2 (fd->loops[i].cond_code, boolean_type_node, + fd->loops[i].v, + fold_convert (itype, fd->loops[i].n2)), +- fd->loops[i].v, +- fold_convert (itype, fd->loops[i].n1)); ++ fd->loops[i].v, t); + expand_omp_build_assign (&gsi, fd->loops[i].v, t); + } + } +Index: gcc/tree-ssa-alias.c +=================================================================== +--- a/src/gcc/tree-ssa-alias.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-ssa-alias.c (.../branches/gcc-7-branch) +@@ -2415,6 +2415,7 @@ + if (ref->ref) + { + tree base = ref->ref; ++ tree innermost_dropped_array_ref = NULL_TREE; + if (handled_component_p (base)) + { + tree saved_lhs0 = NULL_TREE; +@@ -2434,6 +2435,11 @@ + TREE_OPERAND (base, 0) = saved_base0; + if (res) + break; ++ /* Remember if we drop an array-ref that we need to ++ double-check not being at struct end. */ ++ if (TREE_CODE (base) == ARRAY_REF ++ || TREE_CODE (base) == ARRAY_RANGE_REF) ++ innermost_dropped_array_ref = base; + /* Otherwise drop handled components of the access. */ + base = saved_base0; + } +@@ -2442,15 +2448,22 @@ + TREE_OPERAND (lhs, 0) = saved_lhs0; + } + /* Finally check if the lhs has the same address and size as the +- base candidate of the access. */ +- if (lhs == base +- || (((TYPE_SIZE (TREE_TYPE (lhs)) +- == TYPE_SIZE (TREE_TYPE (base))) +- || (TYPE_SIZE (TREE_TYPE (lhs)) +- && TYPE_SIZE (TREE_TYPE (base)) +- && operand_equal_p (TYPE_SIZE (TREE_TYPE (lhs)), +- TYPE_SIZE (TREE_TYPE (base)), 0))) +- && operand_equal_p (lhs, base, OEP_ADDRESS_OF))) ++ base candidate of the access. Watch out if we have dropped ++ an array-ref that was at struct end, this means ref->ref may ++ be outside of the TYPE_SIZE of its base. */ ++ if ((! innermost_dropped_array_ref ++ || ! array_at_struct_end_p (innermost_dropped_array_ref)) ++ && (lhs == base ++ || (((TYPE_SIZE (TREE_TYPE (lhs)) ++ == TYPE_SIZE (TREE_TYPE (base))) ++ || (TYPE_SIZE (TREE_TYPE (lhs)) ++ && TYPE_SIZE (TREE_TYPE (base)) ++ && operand_equal_p (TYPE_SIZE (TREE_TYPE (lhs)), ++ TYPE_SIZE (TREE_TYPE (base)), ++ 0))) ++ && operand_equal_p (lhs, base, ++ OEP_ADDRESS_OF ++ | OEP_MATCH_SIDE_EFFECTS)))) + return true; + } + +Index: gcc/dwarf2out.c +=================================================================== +--- a/src/gcc/dwarf2out.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/dwarf2out.c (.../branches/gcc-7-branch) +@@ -12514,6 +12514,15 @@ + + if (qualified_type == dtype) + { ++ tree origin = decl_ultimate_origin (name); ++ ++ /* Typedef variants that have an abstract origin don't get their own ++ type DIE (see gen_typedef_die), so fall back on the ultimate ++ abstract origin instead. */ ++ if (origin != NULL) ++ return modified_type_die (TREE_TYPE (origin), cv_quals, reverse, ++ context_die); ++ + /* For a named type, use the typedef. */ + gen_type_die (qualified_type, context_die); + return lookup_type_die (qualified_type); +@@ -24346,7 +24355,7 @@ + gen_typedef_die (tree decl, dw_die_ref context_die) + { + dw_die_ref type_die; +- tree origin; ++ tree type; + + if (TREE_ASM_WRITTEN (decl)) + { +@@ -24355,76 +24364,72 @@ + return; + } + ++ /* As we avoid creating DIEs for local typedefs (see decl_ultimate_origin ++ checks in process_scope_var and modified_type_die), this should be called ++ only for original types. */ ++ gcc_assert (decl_ultimate_origin (decl) == NULL); ++ + TREE_ASM_WRITTEN (decl) = 1; + type_die = new_die (DW_TAG_typedef, context_die, decl); +- origin = decl_ultimate_origin (decl); +- if (origin != NULL) +- add_abstract_origin_attribute (type_die, origin); ++ ++ add_name_and_src_coords_attributes (type_die, decl); ++ if (DECL_ORIGINAL_TYPE (decl)) ++ { ++ type = DECL_ORIGINAL_TYPE (decl); ++ if (type == error_mark_node) ++ return; ++ ++ gcc_assert (type != TREE_TYPE (decl)); ++ equate_type_number_to_die (TREE_TYPE (decl), type_die); ++ } + else + { +- tree type = TREE_TYPE (decl); +- ++ type = TREE_TYPE (decl); + if (type == error_mark_node) + return; + +- add_name_and_src_coords_attributes (type_die, decl); +- if (DECL_ORIGINAL_TYPE (decl)) ++ if (is_naming_typedef_decl (TYPE_NAME (type))) + { +- type = DECL_ORIGINAL_TYPE (decl); ++ /* Here, we are in the case of decl being a typedef naming ++ an anonymous type, e.g: ++ typedef struct {...} foo; ++ In that case TREE_TYPE (decl) is not a typedef variant ++ type and TYPE_NAME of the anonymous type is set to the ++ TYPE_DECL of the typedef. This construct is emitted by ++ the C++ FE. + +- if (type == error_mark_node) +- return; ++ TYPE is the anonymous struct named by the typedef ++ DECL. As we need the DW_AT_type attribute of the ++ DW_TAG_typedef to point to the DIE of TYPE, let's ++ generate that DIE right away. add_type_attribute ++ called below will then pick (via lookup_type_die) that ++ anonymous struct DIE. */ ++ if (!TREE_ASM_WRITTEN (type)) ++ gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE); + +- gcc_assert (type != TREE_TYPE (decl)); +- equate_type_number_to_die (TREE_TYPE (decl), type_die); ++ /* This is a GNU Extension. We are adding a ++ DW_AT_linkage_name attribute to the DIE of the ++ anonymous struct TYPE. The value of that attribute ++ is the name of the typedef decl naming the anonymous ++ struct. This greatly eases the work of consumers of ++ this debug info. */ ++ add_linkage_name_raw (lookup_type_die (type), decl); + } +- else +- { +- if (is_naming_typedef_decl (TYPE_NAME (type))) +- { +- /* Here, we are in the case of decl being a typedef naming +- an anonymous type, e.g: +- typedef struct {...} foo; +- In that case TREE_TYPE (decl) is not a typedef variant +- type and TYPE_NAME of the anonymous type is set to the +- TYPE_DECL of the typedef. This construct is emitted by +- the C++ FE. ++ } + +- TYPE is the anonymous struct named by the typedef +- DECL. As we need the DW_AT_type attribute of the +- DW_TAG_typedef to point to the DIE of TYPE, let's +- generate that DIE right away. add_type_attribute +- called below will then pick (via lookup_type_die) that +- anonymous struct DIE. */ +- if (!TREE_ASM_WRITTEN (type)) +- gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE); ++ add_type_attribute (type_die, type, decl_quals (decl), false, ++ context_die); + +- /* This is a GNU Extension. We are adding a +- DW_AT_linkage_name attribute to the DIE of the +- anonymous struct TYPE. The value of that attribute +- is the name of the typedef decl naming the anonymous +- struct. This greatly eases the work of consumers of +- this debug info. */ +- add_linkage_name_raw (lookup_type_die (type), decl); +- } +- } ++ if (is_naming_typedef_decl (decl)) ++ /* We want that all subsequent calls to lookup_type_die with ++ TYPE in argument yield the DW_TAG_typedef we have just ++ created. */ ++ equate_type_number_to_die (type, type_die); + +- add_type_attribute (type_die, type, decl_quals (decl), false, +- context_die); ++ add_alignment_attribute (type_die, TREE_TYPE (decl)); + +- if (is_naming_typedef_decl (decl)) +- /* We want that all subsequent calls to lookup_type_die with +- TYPE in argument yield the DW_TAG_typedef we have just +- created. */ +- equate_type_number_to_die (type, type_die); ++ add_accessibility_attribute (type_die, decl); + +- type = TREE_TYPE (decl); +- +- add_alignment_attribute (type_die, type); +- +- add_accessibility_attribute (type_die, decl); +- } +- + if (DECL_ABSTRACT_P (decl)) + equate_decl_number_to_die (decl, type_die); + +@@ -24535,8 +24540,16 @@ + if (TREE_ASM_WRITTEN (type)) + return; + ++ tree name = TYPE_NAME (type); ++ tree origin = decl_ultimate_origin (name); ++ if (origin != NULL) ++ { ++ gen_decl_die (origin, NULL, NULL, context_die); ++ return; ++ } ++ + /* Prevent broken recursion; we can't hand off to the same type. */ +- gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type); ++ gcc_assert (DECL_ORIGINAL_TYPE (name) != type); + + /* Give typedefs the right scope. */ + context_die = scope_die_for (type, context_die); +@@ -24543,7 +24556,7 @@ + + TREE_ASM_WRITTEN (type) = 1; + +- gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die); ++ gen_decl_die (name, NULL, NULL, context_die); + return; + } + +@@ -24862,6 +24875,22 @@ + else + die = NULL; + ++ /* Avoid creating DIEs for local typedefs and concrete static variables that ++ will only be pruned later. */ ++ if ((origin || decl_ultimate_origin (decl)) ++ && (TREE_CODE (decl_or_origin) == TYPE_DECL ++ || (VAR_P (decl_or_origin) && TREE_STATIC (decl_or_origin)))) ++ { ++ origin = decl_ultimate_origin (decl_or_origin); ++ if (decl && VAR_P (decl) && die != NULL) ++ { ++ die = lookup_decl_die (origin); ++ if (die != NULL) ++ equate_decl_number_to_die (decl, die); ++ } ++ return; ++ } ++ + if (die != NULL && die->die_parent == NULL) + add_child_die (context_die, die); + else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL) +@@ -26058,7 +26087,8 @@ + j = 0; + FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e) + { +- if (!tree_add_const_value_attribute (e->die, e->arg)) ++ if (!e->die->removed ++ && !tree_add_const_value_attribute (e->die, e->arg)) + { + dw_loc_descr_ref loc = NULL; + if (! early_dwarf +Index: gcc/cfgbuild.c +=================================================================== +--- a/src/gcc/cfgbuild.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/cfgbuild.c (.../branches/gcc-7-branch) +@@ -442,9 +442,10 @@ + rtx_insn *end = BB_END (bb), *x; + rtx_jump_table_data *table; + rtx_insn *flow_transfer_insn = NULL; ++ rtx_insn *debug_insn = NULL; + edge fallthru = NULL; + +- if (insn == BB_END (bb)) ++ if (insn == end) + return; + + if (LABEL_P (insn)) +@@ -455,27 +456,49 @@ + { + enum rtx_code code = GET_CODE (insn); + ++ if (code == DEBUG_INSN) ++ { ++ if (flow_transfer_insn && !debug_insn) ++ debug_insn = insn; ++ } + /* In case we've previously seen an insn that effects a control + flow transfer, split the block. */ +- if ((flow_transfer_insn || code == CODE_LABEL) +- && inside_basic_block_p (insn)) ++ else if ((flow_transfer_insn || code == CODE_LABEL) ++ && inside_basic_block_p (insn)) + { +- fallthru = split_block (bb, PREV_INSN (insn)); ++ rtx_insn *prev = PREV_INSN (insn); ++ ++ /* If the first non-debug inside_basic_block_p insn after a control ++ flow transfer is not a label, split the block before the debug ++ insn instead of before the non-debug insn, so that the debug ++ insns are not lost. */ ++ if (debug_insn && code != CODE_LABEL && code != BARRIER) ++ prev = PREV_INSN (debug_insn); ++ fallthru = split_block (bb, prev); + if (flow_transfer_insn) + { + BB_END (bb) = flow_transfer_insn; + ++ rtx_insn *next; + /* Clean up the bb field for the insns between the blocks. */ + for (x = NEXT_INSN (flow_transfer_insn); + x != BB_HEAD (fallthru->dest); +- x = NEXT_INSN (x)) +- if (!BARRIER_P (x)) +- set_block_for_insn (x, NULL); ++ x = next) ++ { ++ next = NEXT_INSN (x); ++ /* Debug insns should not be in between basic blocks, ++ drop them on the floor. */ ++ if (DEBUG_INSN_P (x)) ++ delete_insn (x); ++ else if (!BARRIER_P (x)) ++ set_block_for_insn (x, NULL); ++ } + } + + bb = fallthru->dest; + remove_edge (fallthru); + flow_transfer_insn = NULL; ++ debug_insn = NULL; + if (code == CODE_LABEL && LABEL_ALT_ENTRY_P (insn)) + make_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun), bb, 0); + } +@@ -498,17 +521,23 @@ + /* In case expander replaced normal insn by sequence terminating by + return and barrier, or possibly other sequence not behaving like + ordinary jump, we need to take care and move basic block boundary. */ +- if (flow_transfer_insn) ++ if (flow_transfer_insn && flow_transfer_insn != end) + { + BB_END (bb) = flow_transfer_insn; + + /* Clean up the bb field for the insns that do not belong to BB. */ +- x = flow_transfer_insn; +- while (x != end) ++ rtx_insn *next; ++ for (x = NEXT_INSN (flow_transfer_insn); ; x = next) + { +- x = NEXT_INSN (x); +- if (!BARRIER_P (x)) ++ next = NEXT_INSN (x); ++ /* Debug insns should not be in between basic blocks, ++ drop them on the floor. */ ++ if (DEBUG_INSN_P (x)) ++ delete_insn (x); ++ else if (!BARRIER_P (x)) + set_block_for_insn (x, NULL); ++ if (x == end) ++ break; + } + } + +Index: gcc/opts.c +=================================================================== +--- a/src/gcc/opts.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/opts.c (.../branches/gcc-7-branch) +@@ -217,7 +217,7 @@ + unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, + location_t loc, + const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, +- diagnostic_context *dc) ++ diagnostic_context *dc, void (*) (void)) + { + gcc_assert (dc == global_dc); + gcc_assert (kind == DK_UNSPECIFIED); +@@ -1678,7 +1678,8 @@ + unsigned int lang_mask, int kind ATTRIBUTE_UNUSED, + location_t loc, + const struct cl_option_handlers *handlers, +- diagnostic_context *dc) ++ diagnostic_context *dc, ++ void (*target_option_override_hook) (void)) + { + size_t scode = decoded->opt_index; + const char *arg = decoded->arg; +@@ -1705,6 +1706,7 @@ + undoc_mask = ((opts->x_verbose_flag | opts->x_extra_warnings) + ? 0 + : CL_UNDOCUMENTED); ++ target_option_override_hook (); + /* First display any single language specific options. */ + for (i = 0; i < cl_lang_count; i++) + print_specific_help +@@ -1724,6 +1726,7 @@ + if (lang_mask == CL_DRIVER) + break; + ++ target_option_override_hook (); + print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0, opts, lang_mask); + opts->x_exit_after_options = true; + break; +@@ -1850,8 +1853,11 @@ + } + + if (include_flags) +- print_specific_help (include_flags, exclude_flags, 0, opts, +- lang_mask); ++ { ++ target_option_override_hook (); ++ print_specific_help (include_flags, exclude_flags, 0, opts, ++ lang_mask); ++ } + opts->x_exit_after_options = true; + break; + } +Index: gcc/opts.h +=================================================================== +--- a/src/gcc/opts.h (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/opts.h (.../branches/gcc-7-branch) +@@ -267,7 +267,8 @@ + const struct cl_decoded_option *decoded, + unsigned int lang_mask, int kind, location_t loc, + const struct cl_option_handlers *handlers, +- diagnostic_context *dc); ++ diagnostic_context *dc, ++ void (*target_option_override_hook) (void)); + + /* The mask that must have some bit in common with the flags for the + option for this particular handler to be used. */ +@@ -289,6 +290,9 @@ + void (*wrong_lang_callback) (const struct cl_decoded_option *decoded, + unsigned int lang_mask); + ++ /* Target option override hook. */ ++ void (*target_option_override_hook) (void); ++ + /* The number of individual handlers. */ + size_t num_handlers; + +@@ -333,13 +337,15 @@ + const char **argv, + struct cl_decoded_option **decoded_options, + unsigned int *decoded_options_count); +-extern void set_default_handlers (struct cl_option_handlers *handlers); ++extern void set_default_handlers (struct cl_option_handlers *handlers, ++ void (*target_option_override_hook) (void)); + extern void decode_options (struct gcc_options *opts, + struct gcc_options *opts_set, + struct cl_decoded_option *decoded_options, + unsigned int decoded_options_count, + location_t loc, +- diagnostic_context *dc); ++ diagnostic_context *dc, ++ void (*target_option_override_hook) (void)); + extern int option_enabled (int opt_idx, void *opts); + extern bool get_option_state (struct gcc_options *, int, + struct cl_option_state *); +@@ -384,7 +390,8 @@ + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, +- diagnostic_context *dc); ++ diagnostic_context *dc, ++ void (*target_option_override_hook) (void)); + extern bool target_handle_option (struct gcc_options *opts, + struct gcc_options *opts_set, + const struct cl_decoded_option *decoded, +@@ -391,7 +398,8 @@ + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, +- diagnostic_context *dc); ++ diagnostic_context *dc, ++ void (*target_option_override_hook) (void)); + extern void finish_options (struct gcc_options *opts, + struct gcc_options *opts_set, + location_t loc); +Index: gcc/ada/sem_ch3.adb +=================================================================== +--- a/src/gcc/ada/sem_ch3.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/sem_ch3.adb (.../branches/gcc-7-branch) +@@ -21211,9 +21211,11 @@ + Error_Msg_N ("invalid subtype mark in subtype indication", S); + end case; + +- -- Size and Convention are always inherited from the base type ++ -- Size, Alignment, Representation aspects and Convention are always ++ -- inherited from the base type. + + Set_Size_Info (Def_Id, (Subtype_Mark_Id)); ++ Set_Rep_Info (Def_Id, (Subtype_Mark_Id)); + Set_Convention (Def_Id, Convention (Subtype_Mark_Id)); + + return Def_Id; +Index: gcc/ada/sem_util.adb +=================================================================== +--- a/src/gcc/ada/sem_util.adb (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/sem_util.adb (.../branches/gcc-7-branch) +@@ -20302,6 +20302,20 @@ + end if; + end Set_Referenced_Modified; + ++ ------------------ ++ -- Set_Rep_Info -- ++ ------------------ ++ ++ procedure Set_Rep_Info (T1, T2 : Entity_Id) is ++ begin ++ Set_Is_Atomic (T1, Is_Atomic (T2)); ++ Set_Is_Independent (T1, Is_Independent (T2)); ++ Set_Is_Volatile_Full_Access (T1, Is_Volatile_Full_Access (T2)); ++ if Is_Base_Type (T1) then ++ Set_Is_Volatile (T1, Is_Volatile (T2)); ++ end if; ++ end Set_Rep_Info; ++ + ---------------------------- + -- Set_Scope_Is_Transient -- + ---------------------------- +Index: gcc/ada/sem_util.ads +=================================================================== +--- a/src/gcc/ada/sem_util.ads (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/sem_util.ads (.../branches/gcc-7-branch) +@@ -2313,6 +2313,12 @@ + -- (Referenced_As_LHS if Out_Param is False, Referenced_As_Out_Parameter + -- if Out_Param is True) is set True, and the other flag set False. + ++ procedure Set_Rep_Info (T1, T2 : Entity_Id); ++ pragma Inline (Set_Rep_Info); ++ -- Copies the Is_Atomic, Is_Independent and Is_Volatile_Full_Access flags ++ -- from sub(type) entity T2 to (sub)type entity T1, as well as Is_Volatile ++ -- if T1 is a base type. ++ + procedure Set_Scope_Is_Transient (V : Boolean := True); + -- Set the flag Is_Transient of the current scope + +Index: gcc/ada/ChangeLog +=================================================================== +--- a/src/gcc/ada/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,58 @@ ++2017-09-15 Martin Liska ++ ++ Backport from mainline ++ 2017-08-29 Martin Liska ++ ++ PR other/39851 ++ * gcc-interface/trans.c (Pragma_to_gnu): Set argument to NULL. ++ ++2017-09-09 Eric Botcazou ++ ++ * gcc-interface/decl.c (promote_object_alignment): New function taken ++ from... ++ (gnat_to_gnu_entity) : ...here. Invoke it. ++ (gnat_to_gnu_field): If the field is Atomic or VFA, invoke it and ++ create a padding type on success before doing the atomic check. ++ ++2017-09-09 Eric Botcazou ++ ++ * gcc-interface/decl.c (gnat_to_gnu_entity) : Apply the ++ promotion to static memory earlier in the processing. ++ ++2017-09-09 Eric Botcazou ++ ++ * sem_util.ads (Set_Rep_Info): New inline procedure. ++ * sem_util.adb (Set_Rep_Info): Implement it. ++ * sem_ch3.adb (Process_Subtype): If the case of a constraint present, ++ always copy the representation aspects onto the subtype. ++ * gcc-interface/decl.c (gnat_to_gnu_entity): Only set the TYPE_ALIGN_OK ++ and TYPE_BY_REFERENCE_P flags on types after various promotions. ++ * gcc-interface/trans.c (node_has_volatile_full_access) : ++ Consider all kinds of entities. ++ ++2017-09-05 Eric Botcazou ++ ++ PR ada/62235 ++ * gcc-interface/decl.c (gnat_to_gnu_entity): Skip regular processing ++ for Itypes that are E_Record_Subtype with a cloned subtype. ++ : Use the DECL of the cloned type directly, if any. ++ ++2017-09-05 Eric Botcazou ++ ++ * gcc-interface/utils.c (unchecked_convert): When the result type is a ++ non-biased integral type with size 0, set the result to 0 directly. ++ ++2017-09-05 Eric Botcazou ++ ++ * gcc-interface/trans.c (Call_to_gnu): If this is a function call and ++ there is no target, do not create a temporary for the return value for ++ an allocator either. ++ ++2017-09-05 Eric Botcazou ++ ++ * gcc-interface/trans.c (pos_to_constructor): Skip conversions to an ++ unconstrained array type. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/ada/gcc-interface/utils.c +=================================================================== +--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-7-branch) +@@ -5230,20 +5230,26 @@ + ? TYPE_RM_SIZE (etype) + : TYPE_SIZE (etype)) == 0))) + { +- tree base_type +- = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (type)), +- type_unsigned_for_rm (type)); +- tree shift_expr +- = convert (base_type, +- size_binop (MINUS_EXPR, +- TYPE_SIZE (type), TYPE_RM_SIZE (type))); +- expr +- = convert (type, +- build_binary_op (RSHIFT_EXPR, base_type, +- build_binary_op (LSHIFT_EXPR, base_type, +- convert (base_type, expr), +- shift_expr), +- shift_expr)); ++ if (integer_zerop (TYPE_RM_SIZE (type))) ++ expr = build_int_cst (type, 0); ++ else ++ { ++ tree base_type ++ = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (type)), ++ type_unsigned_for_rm (type)); ++ tree shift_expr ++ = convert (base_type, ++ size_binop (MINUS_EXPR, ++ TYPE_SIZE (type), TYPE_RM_SIZE (type))); ++ expr ++ = convert (type, ++ build_binary_op (RSHIFT_EXPR, base_type, ++ build_binary_op (LSHIFT_EXPR, base_type, ++ convert (base_type, ++ expr), ++ shift_expr), ++ shift_expr)); ++ } + } + + /* An unchecked conversion should never raise Constraint_Error. The code +Index: gcc/ada/gcc-interface/decl.c +=================================================================== +--- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-7-branch) +@@ -229,6 +229,7 @@ + static tree validate_size (Uint, tree, Entity_Id, enum tree_code, bool, bool); + static void set_rm_size (Uint, tree, Entity_Id); + static unsigned int validate_alignment (Uint, Entity_Id, unsigned int); ++static unsigned int promote_object_alignment (tree, Entity_Id); + static void check_ok_for_atomic_type (tree, Entity_Id, bool); + static tree create_field_decl_from (tree, tree, tree, tree, tree, + vec ); +@@ -309,11 +310,14 @@ + + /* Since a use of an Itype is a definition, process it as such if it is in + the main unit, except for E_Access_Subtype because it's actually a use +- of its base type, see below. */ ++ of its base type, and for E_Record_Subtype with cloned subtype because ++ it's actually a use of the cloned subtype, see below. */ + if (!definition + && is_type + && Is_Itype (gnat_entity) +- && Ekind (gnat_entity) != E_Access_Subtype ++ && !(kind == E_Access_Subtype ++ || (kind == E_Record_Subtype ++ && Present (Cloned_Subtype (gnat_entity)))) + && !present_gnu_tree (gnat_entity) + && In_Extended_Main_Code_Unit (gnat_entity)) + { +@@ -847,46 +851,8 @@ + && No (Renamed_Object (gnat_entity)) + && No (Address_Clause (gnat_entity)))) + && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST) +- { +- unsigned int size_cap, align_cap; ++ align = promote_object_alignment (gnu_type, gnat_entity); + +- /* No point in promoting the alignment if this doesn't prevent +- BLKmode access to the object, in particular block copy, as +- this will for example disable the NRV optimization for it. +- No point in jumping through all the hoops needed in order +- to support BIGGEST_ALIGNMENT if we don't really have to. +- So we cap to the smallest alignment that corresponds to +- a known efficient memory access pattern of the target. */ +- if (Is_Atomic_Or_VFA (gnat_entity)) +- { +- size_cap = UINT_MAX; +- align_cap = BIGGEST_ALIGNMENT; +- } +- else +- { +- size_cap = MAX_FIXED_MODE_SIZE; +- align_cap = get_mode_alignment (ptr_mode); +- } +- +- if (!tree_fits_uhwi_p (TYPE_SIZE (gnu_type)) +- || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0) +- align = 0; +- else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0) +- align = align_cap; +- else +- align = ceil_pow2 (tree_to_uhwi (TYPE_SIZE (gnu_type))); +- +- /* But make sure not to under-align the object. */ +- if (align <= TYPE_ALIGN (gnu_type)) +- align = 0; +- +- /* And honor the minimum valid atomic alignment, if any. */ +-#ifdef MINIMUM_ATOMIC_ALIGNMENT +- else if (align < MINIMUM_ATOMIC_ALIGNMENT) +- align = MINIMUM_ATOMIC_ALIGNMENT; +-#endif +- } +- + /* If the object is set to have atomic components, find the component + type and validate it. + +@@ -1413,6 +1379,19 @@ + gnu_size = NULL_TREE; + } + ++ /* If this is an aggregate constant initialized to a constant, force it ++ to be statically allocated. This saves an initialization copy. */ ++ if (!static_flag ++ && const_flag ++ && gnu_expr ++ && TREE_CONSTANT (gnu_expr) ++ && AGGREGATE_TYPE_P (gnu_type) ++ && tree_fits_uhwi_p (TYPE_SIZE_UNIT (gnu_type)) ++ && !(TYPE_IS_PADDING_P (gnu_type) ++ && !tree_fits_uhwi_p (TYPE_SIZE_UNIT ++ (TREE_TYPE (TYPE_FIELDS (gnu_type)))))) ++ static_flag = true; ++ + /* If this is an aliased object with an unconstrained array nominal + subtype, we make its type a thin reference, i.e. the reference + counterpart of a thin pointer, so it points to the array part. +@@ -1463,18 +1442,6 @@ + && No (Address_Clause (gnat_entity)))) + gnu_ext_name = create_concat_name (gnat_entity, NULL); + +- /* If this is an aggregate constant initialized to a constant, force it +- to be statically allocated. This saves an initialization copy. */ +- if (!static_flag +- && const_flag +- && gnu_expr && TREE_CONSTANT (gnu_expr) +- && AGGREGATE_TYPE_P (gnu_type) +- && tree_fits_uhwi_p (TYPE_SIZE_UNIT (gnu_type)) +- && !(TYPE_IS_PADDING_P (gnu_type) +- && !tree_fits_uhwi_p (TYPE_SIZE_UNIT +- (TREE_TYPE (TYPE_FIELDS (gnu_type)))))) +- static_flag = true; +- + /* Deal with a pragma Linker_Section on a constant or variable. */ + if ((kind == E_Constant || kind == E_Variable) + && Present (Linker_Section_Pragma (gnat_entity))) +@@ -3391,7 +3358,7 @@ + { + gnu_decl = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity), + NULL_TREE, false); +- maybe_present = true; ++ saved = true; + break; + } + +@@ -4505,18 +4472,6 @@ + already defined so we cannot pass true for IN_PLACE here. */ + process_attributes (&gnu_type, &attr_list, false, gnat_entity); + +- /* Tell the middle-end that objects of tagged types are guaranteed to +- be properly aligned. This is necessary because conversions to the +- class-wide type are translated into conversions to the root type, +- which can be less aligned than some of its derived types. */ +- if (Is_Tagged_Type (gnat_entity) +- || Is_Class_Wide_Equivalent_Type (gnat_entity)) +- TYPE_ALIGN_OK (gnu_type) = 1; +- +- /* Record whether the type is passed by reference. */ +- if (!VOID_TYPE_P (gnu_type) && Is_By_Reference_Type (gnat_entity)) +- TYPE_BY_REFERENCE_P (gnu_type) = 1; +- + /* ??? Don't set the size for a String_Literal since it is either + confirming or we don't handle it properly (if the low bound is + non-constant). */ +@@ -4726,17 +4681,29 @@ + /* If this is not an unconstrained array type, set some flags. */ + if (TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE) + { ++ /* Tell the middle-end that objects of tagged types are guaranteed to ++ be properly aligned. This is necessary because conversions to the ++ class-wide type are translated into conversions to the root type, ++ which can be less aligned than some of its derived types. */ ++ if (Is_Tagged_Type (gnat_entity) ++ || Is_Class_Wide_Equivalent_Type (gnat_entity)) ++ TYPE_ALIGN_OK (gnu_type) = 1; ++ ++ /* Record whether the type is passed by reference. */ ++ if (Is_By_Reference_Type (gnat_entity) && !VOID_TYPE_P (gnu_type)) ++ TYPE_BY_REFERENCE_P (gnu_type) = 1; ++ ++ /* Record whether an alignment clause was specified. */ + if (Present (Alignment_Clause (gnat_entity))) + TYPE_USER_ALIGN (gnu_type) = 1; + ++ /* Record whether a pragma Universal_Aliasing was specified. */ + if (Universal_Aliasing (gnat_entity) && !TYPE_IS_DUMMY_P (gnu_type)) + TYPE_UNIVERSAL_ALIASING_P (gnu_type) = 1; + + /* If it is passed by reference, force BLKmode to ensure that + objects of this type will always be put in memory. */ +- if (TYPE_MODE (gnu_type) != BLKmode +- && AGGREGATE_TYPE_P (gnu_type) +- && TYPE_BY_REFERENCE_P (gnu_type)) ++ if (AGGREGATE_TYPE_P (gnu_type) && TYPE_BY_REFERENCE_P (gnu_type)) + SET_TYPE_MODE (gnu_type, BLKmode); + } + +@@ -7114,7 +7081,15 @@ + } + + if (Is_Atomic_Or_VFA (gnat_field)) +- check_ok_for_atomic_type (gnu_field_type, gnat_field, false); ++ { ++ const unsigned int align ++ = promote_object_alignment (gnu_field_type, gnat_field); ++ if (align > 0) ++ gnu_field_type ++ = maybe_pad_type (gnu_field_type, NULL_TREE, align, gnat_field, ++ false, false, definition, true); ++ check_ok_for_atomic_type (gnu_field_type, gnat_field, false); ++ } + + if (Present (Component_Clause (gnat_field))) + { +@@ -8788,6 +8763,53 @@ + return align; + } + ++/* Promote the alignment of GNU_TYPE corresponding to GNAT_ENTITY. Return ++ a positive value on success or zero on failure. */ ++ ++static unsigned int ++promote_object_alignment (tree gnu_type, Entity_Id gnat_entity) ++{ ++ unsigned int align, size_cap, align_cap; ++ ++ /* No point in promoting the alignment if this doesn't prevent BLKmode access ++ to the object, in particular block copy, as this will for example disable ++ the NRV optimization for it. No point in jumping through all the hoops ++ needed in order to support BIGGEST_ALIGNMENT if we don't really have to. ++ So we cap to the smallest alignment that corresponds to a known efficient ++ memory access pattern, except for Atomic and Volatile_Full_Access. */ ++ if (Is_Atomic_Or_VFA (gnat_entity)) ++ { ++ size_cap = UINT_MAX; ++ align_cap = BIGGEST_ALIGNMENT; ++ } ++ else ++ { ++ size_cap = MAX_FIXED_MODE_SIZE; ++ align_cap = get_mode_alignment (ptr_mode); ++ } ++ ++ /* Do the promotion within the above limits. */ ++ if (!tree_fits_uhwi_p (TYPE_SIZE (gnu_type)) ++ || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0) ++ align = 0; ++ else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0) ++ align = align_cap; ++ else ++ align = ceil_pow2 (tree_to_uhwi (TYPE_SIZE (gnu_type))); ++ ++ /* But make sure not to under-align the object. */ ++ if (align <= TYPE_ALIGN (gnu_type)) ++ align = 0; ++ ++ /* And honor the minimum valid atomic alignment, if any. */ ++#ifdef MINIMUM_ATOMIC_ALIGNMENT ++ else if (align < MINIMUM_ATOMIC_ALIGNMENT) ++ align = MINIMUM_ATOMIC_ALIGNMENT; ++#endif ++ ++ return align; ++} ++ + /* Verify that TYPE is something we can implement atomically. If not, issue + an error for GNAT_ENTITY. COMPONENT_P is true if we are being called to + process a component type. */ +Index: gcc/ada/gcc-interface/trans.c +=================================================================== +--- a/src/gcc/ada/gcc-interface/trans.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/ada/gcc-interface/trans.c (.../branches/gcc-7-branch) +@@ -1477,7 +1477,7 @@ + else + option_index = 0; + +- set_default_handlers (&handlers); ++ set_default_handlers (&handlers, NULL); + control_warning_option (option_index, (int) kind, arg, imply, location, + lang_mask, &handlers, &global_options, + &global_options_set, global_dc); +@@ -4058,8 +4058,6 @@ + case N_Identifier: + case N_Expanded_Name: + gnat_entity = Entity (gnat_node); +- if (Ekind (gnat_entity) != E_Variable) +- break; + return Is_Volatile_Full_Access (gnat_entity) + || Is_Volatile_Full_Access (Etype (gnat_entity)); + +@@ -4326,11 +4324,11 @@ + parameters. + + 2. There is no target and the call is made for neither an object nor a +- renaming declaration, nor a return statement, and the return type has +- variable size, because in this case the gimplifier cannot create the +- temporary, or more generally is simply an aggregate type, because the +- gimplifier would create the temporary in the outermost scope instead +- of locally. ++ renaming declaration, nor a return statement, nor an allocator, and ++ the return type has variable size because in this case the gimplifier ++ cannot create the temporary, or more generally is simply an aggregate ++ type, because the gimplifier would then create the temporary in the ++ outermost scope instead of locally. + + 3. There is a target and it is a slice or an array with fixed size, + and the return type has variable size, because the gimplifier +@@ -4349,6 +4347,8 @@ + && Nkind (Parent (gnat_node)) != N_Object_Declaration + && Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration + && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement ++ && !(Nkind (Parent (gnat_node)) == N_Qualified_Expression ++ && Nkind (Parent (Parent (gnat_node))) == N_Allocator) + && AGGREGATE_TYPE_P (gnu_result_type) + && !TYPE_IS_FAT_POINTER_P (gnu_result_type)) + || (gnu_target +@@ -9702,7 +9702,14 @@ + gnat_component_type); + else + { +- gnu_expr = gnat_to_gnu (gnat_expr); ++ /* If the expression is a conversion to an unconstrained array type, ++ skip it to avoid spilling to memory. */ ++ if (Nkind (gnat_expr) == N_Type_Conversion ++ && Is_Array_Type (Etype (gnat_expr)) ++ && !Is_Constrained (Etype (gnat_expr))) ++ gnu_expr = gnat_to_gnu (Expression (gnat_expr)); ++ else ++ gnu_expr = gnat_to_gnu (gnat_expr); + + /* Before assigning the element to the array, make sure it is + in range. */ +Index: gcc/asan.c +=================================================================== +--- a/src/gcc/asan.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/asan.c (.../branches/gcc-7-branch) +@@ -2315,9 +2315,12 @@ + /* DECL_NAME theoretically might be NULL. Bail out with 0 in this case. */ + if (decl_name == NULL_TREE) + return build_int_cst (uptr, 0); +- size_t len = strlen (IDENTIFIER_POINTER (decl_name)) + sizeof ("__odr_asan_"); ++ const char *dname = IDENTIFIER_POINTER (decl_name); ++ if (HAS_DECL_ASSEMBLER_NAME_P (decl)) ++ dname = targetm.strip_name_encoding (dname); ++ size_t len = strlen (dname) + sizeof ("__odr_asan_"); + name = XALLOCAVEC (char, len); +- snprintf (name, len, "__odr_asan_%s", IDENTIFIER_POINTER (decl_name)); ++ snprintf (name, len, "__odr_asan_%s", dname); + #ifndef NO_DOT_IN_LABEL + name[sizeof ("__odr_asan") - 1] = '.'; + #elif !defined(NO_DOLLAR_IN_LABEL) +Index: gcc/lra-remat.c +=================================================================== +--- a/src/gcc/lra-remat.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/lra-remat.c (.../branches/gcc-7-branch) +@@ -684,7 +684,7 @@ + + if (regno2 >= FIRST_PSEUDO_REGISTER && reg_renumber[regno2] >= 0) + regno2 = reg_renumber[regno2]; +- if (regno >= FIRST_PSEUDO_REGISTER) ++ if (regno2 >= FIRST_PSEUDO_REGISTER) + nregs2 = 1; + else + nregs2 = hard_regno_nregs[regno2][reg->biggest_mode]; +Index: gcc/gimple-ssa-strength-reduction.c +=================================================================== +--- a/src/gcc/gimple-ssa-strength-reduction.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/gimple-ssa-strength-reduction.c (.../branches/gcc-7-branch) +@@ -476,7 +476,8 @@ + + c = base_cand_from_table (base); + +- if (!c || c->kind != CAND_PHI) ++ if (!c || c->kind != CAND_PHI ++ || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_phi_result (c->cand_stmt))) + return 0; + + return c->cand_num; +@@ -515,6 +516,11 @@ + gimple_bb (one_basis->cand_stmt))) + continue; + ++ tree lhs = gimple_assign_lhs (one_basis->cand_stmt); ++ if (lhs && TREE_CODE (lhs) == SSA_NAME ++ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs)) ++ continue; ++ + if (!basis || basis->cand_num < one_basis->cand_num) + basis = one_basis; + } +@@ -2044,105 +2050,105 @@ + tree target_type = TREE_TYPE (gimple_assign_lhs (c->cand_stmt)); + enum tree_code cand_code = gimple_assign_rhs_code (c->cand_stmt); + +- /* It is highly unlikely, but possible, that the resulting +- bump doesn't fit in a HWI. Abandon the replacement +- in this case. This does not affect siblings or dependents +- of C. Restriction to signed HWI is conservative for unsigned +- types but allows for safe negation without twisted logic. */ +- if (wi::fits_shwi_p (bump) +- && bump.to_shwi () != HOST_WIDE_INT_MIN +- /* It is not useful to replace casts, copies, negates, or adds of +- an SSA name and a constant. */ +- && cand_code != SSA_NAME +- && !CONVERT_EXPR_CODE_P (cand_code) +- && cand_code != PLUS_EXPR +- && cand_code != POINTER_PLUS_EXPR +- && cand_code != MINUS_EXPR +- && cand_code != NEGATE_EXPR) ++ /* It is not useful to replace casts, copies, negates, or adds of ++ an SSA name and a constant. */ ++ if (cand_code == SSA_NAME ++ || CONVERT_EXPR_CODE_P (cand_code) ++ || cand_code == PLUS_EXPR ++ || cand_code == POINTER_PLUS_EXPR ++ || cand_code == MINUS_EXPR ++ || cand_code == NEGATE_EXPR) ++ return; ++ ++ enum tree_code code = PLUS_EXPR; ++ tree bump_tree; ++ gimple *stmt_to_print = NULL; ++ ++ /* If the basis name and the candidate's LHS have incompatible ++ types, introduce a cast. */ ++ if (!useless_type_conversion_p (target_type, TREE_TYPE (basis_name))) ++ basis_name = introduce_cast_before_cand (c, target_type, basis_name); ++ if (wi::neg_p (bump)) + { +- enum tree_code code = PLUS_EXPR; +- tree bump_tree; +- gimple *stmt_to_print = NULL; ++ code = MINUS_EXPR; ++ bump = -bump; ++ } + +- /* If the basis name and the candidate's LHS have incompatible +- types, introduce a cast. */ +- if (!useless_type_conversion_p (target_type, TREE_TYPE (basis_name))) +- basis_name = introduce_cast_before_cand (c, target_type, basis_name); +- if (wi::neg_p (bump)) ++ /* It is possible that the resulting bump doesn't fit in target_type. ++ Abandon the replacement in this case. This does not affect ++ siblings or dependents of C. */ ++ if (bump != wi::ext (bump, TYPE_PRECISION (target_type), ++ TYPE_SIGN (target_type))) ++ return; ++ ++ bump_tree = wide_int_to_tree (target_type, bump); ++ ++ if (dump_file && (dump_flags & TDF_DETAILS)) ++ { ++ fputs ("Replacing: ", dump_file); ++ print_gimple_stmt (dump_file, c->cand_stmt, 0, 0); ++ } ++ ++ if (bump == 0) ++ { ++ tree lhs = gimple_assign_lhs (c->cand_stmt); ++ gassign *copy_stmt = gimple_build_assign (lhs, basis_name); ++ gimple_stmt_iterator gsi = gsi_for_stmt (c->cand_stmt); ++ slsr_cand_t cc = c; ++ gimple_set_location (copy_stmt, gimple_location (c->cand_stmt)); ++ gsi_replace (&gsi, copy_stmt, false); ++ c->cand_stmt = copy_stmt; ++ while (cc->next_interp) + { +- code = MINUS_EXPR; +- bump = -bump; ++ cc = lookup_cand (cc->next_interp); ++ cc->cand_stmt = copy_stmt; + } +- +- bump_tree = wide_int_to_tree (target_type, bump); +- + if (dump_file && (dump_flags & TDF_DETAILS)) ++ stmt_to_print = copy_stmt; ++ } ++ else ++ { ++ tree rhs1, rhs2; ++ if (cand_code != NEGATE_EXPR) { ++ rhs1 = gimple_assign_rhs1 (c->cand_stmt); ++ rhs2 = gimple_assign_rhs2 (c->cand_stmt); ++ } ++ if (cand_code != NEGATE_EXPR ++ && ((operand_equal_p (rhs1, basis_name, 0) ++ && operand_equal_p (rhs2, bump_tree, 0)) ++ || (operand_equal_p (rhs1, bump_tree, 0) ++ && operand_equal_p (rhs2, basis_name, 0)))) + { +- fputs ("Replacing: ", dump_file); +- print_gimple_stmt (dump_file, c->cand_stmt, 0, 0); ++ if (dump_file && (dump_flags & TDF_DETAILS)) ++ { ++ fputs ("(duplicate, not actually replacing)", dump_file); ++ stmt_to_print = c->cand_stmt; ++ } + } +- +- if (bump == 0) ++ else + { +- tree lhs = gimple_assign_lhs (c->cand_stmt); +- gassign *copy_stmt = gimple_build_assign (lhs, basis_name); + gimple_stmt_iterator gsi = gsi_for_stmt (c->cand_stmt); + slsr_cand_t cc = c; +- gimple_set_location (copy_stmt, gimple_location (c->cand_stmt)); +- gsi_replace (&gsi, copy_stmt, false); +- c->cand_stmt = copy_stmt; ++ gimple_assign_set_rhs_with_ops (&gsi, code, ++ basis_name, bump_tree); ++ update_stmt (gsi_stmt (gsi)); ++ c->cand_stmt = gsi_stmt (gsi); + while (cc->next_interp) + { + cc = lookup_cand (cc->next_interp); +- cc->cand_stmt = copy_stmt; ++ cc->cand_stmt = gsi_stmt (gsi); + } + if (dump_file && (dump_flags & TDF_DETAILS)) +- stmt_to_print = copy_stmt; ++ stmt_to_print = gsi_stmt (gsi); + } +- else +- { +- tree rhs1, rhs2; +- if (cand_code != NEGATE_EXPR) { +- rhs1 = gimple_assign_rhs1 (c->cand_stmt); +- rhs2 = gimple_assign_rhs2 (c->cand_stmt); +- } +- if (cand_code != NEGATE_EXPR +- && ((operand_equal_p (rhs1, basis_name, 0) +- && operand_equal_p (rhs2, bump_tree, 0)) +- || (operand_equal_p (rhs1, bump_tree, 0) +- && operand_equal_p (rhs2, basis_name, 0)))) +- { +- if (dump_file && (dump_flags & TDF_DETAILS)) +- { +- fputs ("(duplicate, not actually replacing)", dump_file); +- stmt_to_print = c->cand_stmt; +- } +- } +- else +- { +- gimple_stmt_iterator gsi = gsi_for_stmt (c->cand_stmt); +- slsr_cand_t cc = c; +- gimple_assign_set_rhs_with_ops (&gsi, code, +- basis_name, bump_tree); +- update_stmt (gsi_stmt (gsi)); +- c->cand_stmt = gsi_stmt (gsi); +- while (cc->next_interp) +- { +- cc = lookup_cand (cc->next_interp); +- cc->cand_stmt = gsi_stmt (gsi); +- } +- if (dump_file && (dump_flags & TDF_DETAILS)) +- stmt_to_print = gsi_stmt (gsi); +- } +- } +- +- if (dump_file && (dump_flags & TDF_DETAILS)) +- { +- fputs ("With: ", dump_file); +- print_gimple_stmt (dump_file, stmt_to_print, 0, 0); +- fputs ("\n", dump_file); +- } + } ++ ++ if (dump_file && (dump_flags & TDF_DETAILS)) ++ { ++ fputs ("With: ", dump_file); ++ print_gimple_stmt (dump_file, stmt_to_print, 0, 0); ++ fputs ("\n", dump_file); ++ } + } + + /* Replace candidate C with an add or subtract. Note that we only +@@ -2193,8 +2199,6 @@ + widest_int increment, edge e, location_t loc, + bool known_stride) + { +- basic_block insert_bb; +- gimple_stmt_iterator gsi; + tree lhs, basis_type; + gassign *new_stmt, *cast_stmt = NULL; + +@@ -2263,39 +2267,25 @@ + } + } + +- insert_bb = single_succ_p (e->src) ? e->src : split_edge (e); +- gsi = gsi_last_bb (insert_bb); +- +- if (!gsi_end_p (gsi) && stmt_ends_bb_p (gsi_stmt (gsi))) ++ if (cast_stmt) + { +- gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT); +- if (cast_stmt) +- { +- gsi_insert_before (&gsi, cast_stmt, GSI_SAME_STMT); +- gimple_set_location (cast_stmt, loc); +- } ++ gimple_set_location (cast_stmt, loc); ++ gsi_insert_on_edge (e, cast_stmt); + } +- else +- { +- if (cast_stmt) +- { +- gsi_insert_after (&gsi, cast_stmt, GSI_NEW_STMT); +- gimple_set_location (cast_stmt, loc); +- } +- gsi_insert_after (&gsi, new_stmt, GSI_NEW_STMT); +- } + + gimple_set_location (new_stmt, loc); ++ gsi_insert_on_edge (e, new_stmt); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + if (cast_stmt) + { +- fprintf (dump_file, "Inserting cast in block %d: ", +- insert_bb->index); ++ fprintf (dump_file, "Inserting cast on edge %d->%d: ", ++ e->src->index, e->dest->index); + print_gimple_stmt (dump_file, cast_stmt, 0, 0); + } +- fprintf (dump_file, "Inserting in block %d: ", insert_bb->index); ++ fprintf (dump_file, "Inserting on edge %d->%d: ", e->src->index, ++ e->dest->index); + print_gimple_stmt (dump_file, new_stmt, 0, 0); + } + +@@ -3217,6 +3207,23 @@ + that block, the earliest one will be returned in WHERE. */ + bb = nearest_common_dominator_for_cands (c, incr, &where); + ++ /* If the NCD is not dominated by the block containing the ++ definition of the stride, we can't legally insert a ++ single initializer. Mark the increment as unprofitable ++ so we don't make any replacements. FIXME: Multiple ++ initializers could be placed with more analysis. */ ++ gimple *stride_def = SSA_NAME_DEF_STMT (c->stride); ++ basic_block stride_bb = gimple_bb (stride_def); ++ ++ if (stride_bb && !dominated_by_p (CDI_DOMINATORS, bb, stride_bb)) ++ { ++ if (dump_file && (dump_flags & TDF_DETAILS)) ++ fprintf (dump_file, ++ "Initializer #%d cannot be legally placed\n", i); ++ incr_vec[i].cost = COST_INFINITE; ++ continue; ++ } ++ + /* If the nominal stride has a different type than the recorded + stride type, build a cast from the nominal stride to that type. */ + if (!types_compatible_p (TREE_TYPE (c->stride), c->stride_type)) +@@ -3736,6 +3743,10 @@ + free (incr_vec); + } + } ++ ++ /* For conditional candidates, we may have uncommitted insertions ++ on edges to clean up. */ ++ gsi_commit_edge_inserts (); + } + + namespace { +Index: gcc/fortran/ChangeLog +=================================================================== +--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-7-branch) +@@ -1,3 +1,32 @@ ++2017-10-03 Thomas Koenig ++ Steven G. Kargl ++ ++ Backport from trunk ++ PR fortran/80118 ++ * expr.c (gfc_get_full_arrayspec_from_expr): If there is ++ no symtree, set array spec to NULL. ++ ++2017-09-02 Janus Weil ++ ++ Backport from trunk ++ PR fortran/81770 ++ * expr.c (gfc_check_pointer_assign): Improve the check whether pointer ++ may outlive pointer target. ++ ++2017-08-22 Jerry DeLisle ++ ++ Backport from trunk ++ PR fortran/81296 ++ * trans-io.c (get_dtio_proc): Add check for format label and set ++ formatted flag accordingly. Reorganize the code a little. ++ ++2017-08-18 Jerry DeLisle ++ ++ Backport from trunk ++ PR fortran/80164 ++ * trans-stmt.c (gfc_trans_call): If no code expr, use code->loc ++ as warning/error locus. ++ + 2017-08-14 Release Manager + + * GCC 7.2.0 released. +Index: gcc/fortran/trans-stmt.c +=================================================================== +--- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-7-branch) +@@ -452,7 +452,10 @@ + subscripts. This could be prevented in the elemental case + as temporaries are handled separatedly + (below in gfc_conv_elemental_dependencies). */ +- gfc_conv_loop_setup (&loop, &code->expr1->where); ++ if (code->expr1) ++ gfc_conv_loop_setup (&loop, &code->expr1->where); ++ else ++ gfc_conv_loop_setup (&loop, &code->loc); + gfc_mark_ss_chain_used (ss, 1); + + /* Convert the arguments, checking for dependencies. */ +Index: gcc/fortran/expr.c +=================================================================== +--- a/src/gcc/fortran/expr.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fortran/expr.c (.../branches/gcc-7-branch) +@@ -3806,7 +3806,8 @@ + if (warn_target_lifetime + && rvalue->expr_type == EXPR_VARIABLE + && !rvalue->symtree->n.sym->attr.save +- && !attr.pointer && !rvalue->symtree->n.sym->attr.host_assoc ++ && !rvalue->symtree->n.sym->attr.pointer && !attr.pointer ++ && !rvalue->symtree->n.sym->attr.host_assoc + && !rvalue->symtree->n.sym->attr.in_common + && !rvalue->symtree->n.sym->attr.use_assoc + && !rvalue->symtree->n.sym->attr.dummy) +@@ -4514,7 +4515,11 @@ + if (expr->expr_type == EXPR_VARIABLE + || expr->expr_type == EXPR_CONSTANT) + { +- as = expr->symtree->n.sym->as; ++ if (expr->symtree) ++ as = expr->symtree->n.sym->as; ++ else ++ as = NULL; ++ + for (ref = expr->ref; ref; ref = ref->next) + { + switch (ref->type) +Index: gcc/fortran/trans-io.c +=================================================================== +--- a/src/gcc/fortran/trans-io.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/fortran/trans-io.c (.../branches/gcc-7-branch) +@@ -2214,19 +2214,25 @@ + bool formatted = false; + gfc_dt *dt = code->ext.dt; + +- if (dt && dt->format_expr) ++ if (dt) + { +- char *fmt; +- fmt = gfc_widechar_to_char (dt->format_expr->value.character.string, +- -1); +- if (strtok (fmt, "DT") != NULL) ++ char *fmt = NULL; ++ ++ if (dt->format_label == &format_asterisk) ++ { ++ /* List directed io must call the formatted DTIO procedure. */ ++ formatted = true; ++ } ++ else if (dt->format_expr) ++ fmt = gfc_widechar_to_char (dt->format_expr->value.character.string, ++ -1); ++ else if (dt->format_label) ++ fmt = gfc_widechar_to_char (dt->format_label->format->value.character.string, ++ -1); ++ if (fmt && strtok (fmt, "DT") != NULL) + formatted = true; ++ + } +- else if (dt && dt->format_label == &format_asterisk) +- { +- /* List directed io must call the formatted DTIO procedure. */ +- formatted = true; +- } + + if (ts->type == BT_CLASS) + derived = ts->u.derived->components->ts.u.derived; +Index: gcc/tree-if-conv.c +=================================================================== +--- a/src/gcc/tree-if-conv.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-if-conv.c (.../branches/gcc-7-branch) +@@ -2198,7 +2198,7 @@ + gimple *stmt; + int index; + +- if (is_true_predicate (cond) || is_false_predicate (cond)) ++ if (is_true_predicate (cond)) + continue; + + swap = false; +@@ -2211,96 +2211,106 @@ + vect_sizes.truncate (0); + vect_masks.truncate (0); + +- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) +- if (!gimple_assign_single_p (stmt = gsi_stmt (gsi))) +- continue; +- else if (gimple_plf (stmt, GF_PLF_2)) +- { +- tree lhs = gimple_assign_lhs (stmt); +- tree rhs = gimple_assign_rhs1 (stmt); +- tree ref, addr, ptr, mask; +- gimple *new_stmt; +- gimple_seq stmts = NULL; +- int bitsize = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (lhs))); +- ref = TREE_CODE (lhs) == SSA_NAME ? rhs : lhs; +- mark_addressable (ref); +- addr = force_gimple_operand_gsi (&gsi, build_fold_addr_expr (ref), +- true, NULL_TREE, true, +- GSI_SAME_STMT); +- if (!vect_sizes.is_empty () +- && (index = mask_exists (bitsize, vect_sizes)) != -1) +- /* Use created mask. */ +- mask = vect_masks[index]; +- else +- { +- if (COMPARISON_CLASS_P (cond)) +- mask = gimple_build (&stmts, TREE_CODE (cond), +- boolean_type_node, +- TREE_OPERAND (cond, 0), +- TREE_OPERAND (cond, 1)); +- else +- { +- gcc_assert (TREE_CODE (cond) == SSA_NAME); +- mask = cond; +- } ++ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);) ++ { ++ if (!gimple_assign_single_p (stmt = gsi_stmt (gsi))) ++ ; ++ else if (is_false_predicate (cond)) ++ { ++ unlink_stmt_vdef (stmt); ++ gsi_remove (&gsi, true); ++ release_defs (stmt); ++ continue; ++ } ++ else if (gimple_plf (stmt, GF_PLF_2)) ++ { ++ tree lhs = gimple_assign_lhs (stmt); ++ tree rhs = gimple_assign_rhs1 (stmt); ++ tree ref, addr, ptr, mask; ++ gimple *new_stmt; ++ gimple_seq stmts = NULL; ++ int bitsize = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (lhs))); ++ ref = TREE_CODE (lhs) == SSA_NAME ? rhs : lhs; ++ mark_addressable (ref); ++ addr = force_gimple_operand_gsi (&gsi, build_fold_addr_expr (ref), ++ true, NULL_TREE, true, ++ GSI_SAME_STMT); ++ if (!vect_sizes.is_empty () ++ && (index = mask_exists (bitsize, vect_sizes)) != -1) ++ /* Use created mask. */ ++ mask = vect_masks[index]; ++ else ++ { ++ if (COMPARISON_CLASS_P (cond)) ++ mask = gimple_build (&stmts, TREE_CODE (cond), ++ boolean_type_node, ++ TREE_OPERAND (cond, 0), ++ TREE_OPERAND (cond, 1)); ++ else ++ { ++ gcc_assert (TREE_CODE (cond) == SSA_NAME); ++ mask = cond; ++ } + +- if (swap) +- { +- tree true_val +- = constant_boolean_node (true, TREE_TYPE (mask)); +- mask = gimple_build (&stmts, BIT_XOR_EXPR, +- TREE_TYPE (mask), mask, true_val); +- } +- gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); ++ if (swap) ++ { ++ tree true_val ++ = constant_boolean_node (true, TREE_TYPE (mask)); ++ mask = gimple_build (&stmts, BIT_XOR_EXPR, ++ TREE_TYPE (mask), mask, true_val); ++ } ++ gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); + +- mask = ifc_temp_var (TREE_TYPE (mask), mask, &gsi); +- /* Save mask and its size for further use. */ +- vect_sizes.safe_push (bitsize); +- vect_masks.safe_push (mask); +- } +- ptr = build_int_cst (reference_alias_ptr_type (ref), +- get_object_alignment (ref)); +- /* Copy points-to info if possible. */ +- if (TREE_CODE (addr) == SSA_NAME && !SSA_NAME_PTR_INFO (addr)) +- copy_ref_info (build2 (MEM_REF, TREE_TYPE (ref), addr, ptr), +- ref); +- if (TREE_CODE (lhs) == SSA_NAME) +- { +- new_stmt +- = gimple_build_call_internal (IFN_MASK_LOAD, 3, addr, +- ptr, mask); +- gimple_call_set_lhs (new_stmt, lhs); +- gimple_set_vuse (new_stmt, gimple_vuse (stmt)); +- } +- else +- { +- new_stmt +- = gimple_build_call_internal (IFN_MASK_STORE, 4, addr, ptr, ++ mask = ifc_temp_var (TREE_TYPE (mask), mask, &gsi); ++ /* Save mask and its size for further use. */ ++ vect_sizes.safe_push (bitsize); ++ vect_masks.safe_push (mask); ++ } ++ ptr = build_int_cst (reference_alias_ptr_type (ref), ++ get_object_alignment (ref)); ++ /* Copy points-to info if possible. */ ++ if (TREE_CODE (addr) == SSA_NAME && !SSA_NAME_PTR_INFO (addr)) ++ copy_ref_info (build2 (MEM_REF, TREE_TYPE (ref), addr, ptr), ++ ref); ++ if (TREE_CODE (lhs) == SSA_NAME) ++ { ++ new_stmt ++ = gimple_build_call_internal (IFN_MASK_LOAD, 3, addr, ++ ptr, mask); ++ gimple_call_set_lhs (new_stmt, lhs); ++ gimple_set_vuse (new_stmt, gimple_vuse (stmt)); ++ } ++ else ++ { ++ new_stmt ++ = gimple_build_call_internal (IFN_MASK_STORE, 4, addr, ptr, + mask, rhs); +- gimple_set_vuse (new_stmt, gimple_vuse (stmt)); +- gimple_set_vdef (new_stmt, gimple_vdef (stmt)); +- SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt; +- } ++ gimple_set_vuse (new_stmt, gimple_vuse (stmt)); ++ gimple_set_vdef (new_stmt, gimple_vdef (stmt)); ++ SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt; ++ } + +- gsi_replace (&gsi, new_stmt, true); +- } +- else if (gimple_vdef (stmt)) +- { +- tree lhs = gimple_assign_lhs (stmt); +- tree rhs = gimple_assign_rhs1 (stmt); +- tree type = TREE_TYPE (lhs); ++ gsi_replace (&gsi, new_stmt, true); ++ } ++ else if (gimple_vdef (stmt)) ++ { ++ tree lhs = gimple_assign_lhs (stmt); ++ tree rhs = gimple_assign_rhs1 (stmt); ++ tree type = TREE_TYPE (lhs); + +- lhs = ifc_temp_var (type, unshare_expr (lhs), &gsi); +- rhs = ifc_temp_var (type, unshare_expr (rhs), &gsi); +- if (swap) +- std::swap (lhs, rhs); +- cond = force_gimple_operand_gsi_1 (&gsi, unshare_expr (cond), +- is_gimple_condexpr, NULL_TREE, +- true, GSI_SAME_STMT); +- rhs = fold_build_cond_expr (type, unshare_expr (cond), rhs, lhs); +- gimple_assign_set_rhs1 (stmt, ifc_temp_var (type, rhs, &gsi)); +- update_stmt (stmt); +- } ++ lhs = ifc_temp_var (type, unshare_expr (lhs), &gsi); ++ rhs = ifc_temp_var (type, unshare_expr (rhs), &gsi); ++ if (swap) ++ std::swap (lhs, rhs); ++ cond = force_gimple_operand_gsi_1 (&gsi, unshare_expr (cond), ++ is_gimple_condexpr, NULL_TREE, ++ true, GSI_SAME_STMT); ++ rhs = fold_build_cond_expr (type, unshare_expr (cond), rhs, lhs); ++ gimple_assign_set_rhs1 (stmt, ifc_temp_var (type, rhs, &gsi)); ++ update_stmt (stmt); ++ } ++ gsi_next (&gsi); ++ } + } + } + +Index: gcc/gimplify.c +=================================================================== +--- a/src/gcc/gimplify.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/gimplify.c (.../branches/gcc-7-branch) +@@ -5434,7 +5434,12 @@ + side as statements and throw away the assignment. Do this after + gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable + types properly. */ +- if (zero_sized_type (TREE_TYPE (*from_p)) && !want_value) ++ if (zero_sized_type (TREE_TYPE (*from_p)) ++ && !want_value ++ /* Don't do this for calls that return addressable types, expand_call ++ relies on those having a lhs. */ ++ && !(TREE_ADDRESSABLE (TREE_TYPE (*from_p)) ++ && TREE_CODE (*from_p) == CALL_EXPR)) + { + gimplify_stmt (from_p, pre_p); + gimplify_stmt (to_p, pre_p); +Index: gcc/calls.c +=================================================================== +--- a/src/gcc/calls.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/calls.c (.../branches/gcc-7-branch) +@@ -1220,32 +1220,38 @@ + else if (!strcasecmp (end, "KiB") || strcmp (end, "KB")) + unit = 1024; + else if (!strcmp (end, "MB")) +- unit = 1000LU * 1000; ++ unit = HOST_WIDE_INT_UC (1000) * 1000; + else if (!strcasecmp (end, "MiB")) +- unit = 1024LU * 1024; ++ unit = HOST_WIDE_INT_UC (1024) * 1024; + else if (!strcasecmp (end, "GB")) +- unit = 1000LU * 1000 * 1000; ++ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000; + else if (!strcasecmp (end, "GiB")) +- unit = 1024LU * 1024 * 1024; ++ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024; + else if (!strcasecmp (end, "TB")) +- unit = 1000LU * 1000 * 1000 * 1000; ++ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000; + else if (!strcasecmp (end, "TiB")) +- unit = 1024LU * 1024 * 1024 * 1024; ++ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024; + else if (!strcasecmp (end, "PB")) +- unit = 1000LU * 1000 * 1000 * 1000 * 1000; ++ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000 * 1000; + else if (!strcasecmp (end, "PiB")) +- unit = 1024LU * 1024 * 1024 * 1024 * 1024; ++ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024 * 1024; + else if (!strcasecmp (end, "EB")) +- unit = 1000LU * 1000 * 1000 * 1000 * 1000 * 1000; ++ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000 * 1000 ++ * 1000; + else if (!strcasecmp (end, "EiB")) +- unit = 1024LU * 1024 * 1024 * 1024 * 1024 * 1024; ++ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024 * 1024 ++ * 1024; + else + unit = 0; + } + + if (unit) +- alloc_object_size_limit +- = build_int_cst (ssizetype, limit * unit); ++ { ++ wide_int w = wi::uhwi (limit, HOST_BITS_PER_WIDE_INT + 64); ++ w *= unit; ++ if (wi::ltu_p (w, alloc_object_size_limit)) ++ alloc_object_size_limit = wide_int_to_tree (ssizetype, w); ++ } + } + } + } +Index: gcc/gimple-fold.c +=================================================================== +--- a/src/gcc/gimple-fold.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/gimple-fold.c (.../branches/gcc-7-branch) +@@ -1236,7 +1236,7 @@ + the NUL. + Set *FLEXP to true if the array whose bound is being + used is at the end of a struct. */ +- if (array_at_struct_end_p (arg, true)) ++ if (array_at_struct_end_p (arg)) + *flexp = true; + + arg = TREE_OPERAND (arg, 1); +Index: gcc/tree-ssa-pre.c +=================================================================== +--- a/src/gcc/tree-ssa-pre.c (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/tree-ssa-pre.c (.../branches/gcc-7-branch) +@@ -2090,8 +2090,9 @@ + ANTIC_OUT[BLOCK] = phi_translate (ANTIC_IN[succ(BLOCK)]) + + ANTIC_IN[BLOCK] = clean(ANTIC_OUT[BLOCK] U EXP_GEN[BLOCK] - TMP_GEN[BLOCK]) +-*/ + ++ Note that clean() is deferred until after the iteration. */ ++ + static bool + compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) + { +@@ -2190,7 +2191,8 @@ + bitmap_value_insert_into_set (ANTIC_IN (block), + expression_for_id (bii)); + +- clean (ANTIC_IN (block)); ++ /* clean (ANTIC_IN (block)) is defered to after the iteration converged ++ because it can cause non-convergence, see for example PR81181. */ + + if (!was_visited || !bitmap_set_equal (old, ANTIC_IN (block))) + changed = true; +@@ -2424,6 +2426,12 @@ + gcc_checking_assert (num_iterations < 500); + } + ++ /* We have to clean after the dataflow problem converged as cleaning ++ can cause non-convergence because it is based on expressions ++ rather than values. */ ++ FOR_EACH_BB_FN (block, cfun) ++ clean (ANTIC_IN (block)); ++ + statistics_histogram_event (cfun, "compute_antic iterations", + num_iterations); + +Index: gcc/po/es.po +=================================================================== +--- a/src/gcc/po/es.po (.../tags/gcc_7_2_0_release) ++++ b/src/gcc/po/es.po (.../branches/gcc-7-branch) +@@ -39,7 +39,7 @@ + msgstr "" + "Project-Id-Version: gcc 7.1.0\n" + "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" +-"POT-Creation-Date: 2017-05-01 22:24+0000\n" ++"POT-Creation-Date: 2017-08-04 22:17+0000\n" + "PO-Revision-Date: 2017-07-26 08:25+0200\n" + "Last-Translator: Antonio Ceballos \n" + "Language-Team: Spanish \n" +@@ -227,13 +227,13 @@ + #. TARGET_PRINT_OPERAND must handle them. + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. +-#: final.c:3988 config/arc/arc.c:5068 config/i386/i386.c:17057 ++#: final.c:3988 config/arc/arc.c:5068 config/i386/i386.c:17063 + #: config/pdp11/pdp11.c:1698 + #, c-format + msgid "floating constant misused" + msgstr "constante de coma flotante mal usada" + +-#: final.c:4046 config/arc/arc.c:5165 config/i386/i386.c:17155 ++#: final.c:4046 config/arc/arc.c:5165 config/i386/i386.c:17161 + #: config/pdp11/pdp11.c:1739 + #, c-format + msgid "invalid expression as operand" +@@ -519,62 +519,62 @@ + " automáticamente a los varios subprocesos invocados por %s. Para pasar\n" + " otras opciones a estos procesos se deben usar las opciones -W.\n" + +-#: gcc.c:5934 ++#: gcc.c:5937 + #, c-format + msgid "Processing spec (%s), which is '%s'\n" + msgstr "Se procesa la especificación (%s), la cual es '%s'\n" + +-#: gcc.c:6638 ++#: gcc.c:6641 + #, c-format + msgid "Target: %s\n" + msgstr "Objetivo: %s\n" + +-#: gcc.c:6639 ++#: gcc.c:6642 + #, c-format + msgid "Configured with: %s\n" + msgstr "Configurado con: %s\n" + +-#: gcc.c:6653 ++#: gcc.c:6656 + #, c-format + msgid "Thread model: %s\n" + msgstr "Modelo de hilos: %s\n" + +-#: gcc.c:6664 ++#: gcc.c:6667 + #, c-format + msgid "gcc version %s %s\n" + msgstr "gcc versión %s %s\n" + +-#: gcc.c:6667 ++#: gcc.c:6670 + #, c-format + msgid "gcc driver version %s %sexecuting gcc version %s\n" + msgstr "controlador gcc versión %s %sejecutando gcc versión %s\n" + +-#: gcc.c:6740 gcc.c:6952 ++#: gcc.c:6743 gcc.c:6955 + #, c-format + msgid "The bug is not reproducible, so it is likely a hardware or OS problem.\n" + msgstr "El error no es repetible, por lo que probablemente sea un problema de hardware o de S.O.\n" + +-#: gcc.c:6876 ++#: gcc.c:6879 + #, c-format + msgid "Preprocessed source stored into %s file, please attach this to your bugreport.\n" + msgstr "Fuente preprocesada almacenada en el fichero %s; por favor, adjúntelo a su informe de errores.\n" + +-#: gcc.c:7829 ++#: gcc.c:7832 + #, c-format + msgid "install: %s%s\n" + msgstr "instalar: %s%s\n" + +-#: gcc.c:7832 ++#: gcc.c:7835 + #, c-format + msgid "programs: %s\n" + msgstr "programas: %s\n" + +-#: gcc.c:7834 ++#: gcc.c:7837 + #, c-format + msgid "libraries: %s\n" + msgstr "bibliotecas: %s\n" + +-#: gcc.c:7951 ++#: gcc.c:7954 + #, c-format + msgid "" + "\n" +@@ -583,16 +583,16 @@ + "\n" + "Para instrucciones de informe de errores, por favor vea:\n" + +-#: gcc.c:7967 gcov-tool.c:528 ++#: gcc.c:7970 gcov-tool.c:528 + #, c-format + msgid "%s %s%s\n" + msgstr "%s %s%s\n" + +-#: gcc.c:7970 gcov-tool.c:530 gcov.c:689 fortran/gfortranspec.c:280 ++#: gcc.c:7973 gcov-tool.c:530 gcov.c:689 fortran/gfortranspec.c:280 + msgid "(C)" + msgstr "(C)" + +-#: gcc.c:7971 fortran/gfortranspec.c:281 ++#: gcc.c:7974 fortran/gfortranspec.c:281 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +@@ -603,7 +603,7 @@ + "PARTICULAR\n" + "\n" + +-#: gcc.c:8276 ++#: gcc.c:8279 + #, c-format + msgid "" + "\n" +@@ -616,7 +616,7 @@ + "======================\n" + "\n" + +-#: gcc.c:8277 ++#: gcc.c:8280 + #, c-format + msgid "" + "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n" +@@ -623,7 +623,7 @@ + "\n" + msgstr "Utilice \"-Wl,OPCIÓN\" para pasar la \"OPCIÓN\" al enlazador.\n" + +-#: gcc.c:9580 ++#: gcc.c:9583 + #, c-format + msgid "" + "Assembler options\n" +@@ -634,7 +634,7 @@ + "=======================\n" + "\n" + +-#: gcc.c:9581 ++#: gcc.c:9584 + #, c-format + msgid "" + "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n" +@@ -648,16 +648,16 @@ + msgid " merge [options] Merge coverage file contents\n" + msgstr " merge [opciones] Mezcla el contenido del fichero de cobertura\n" + +-#: gcov-tool.c:176 gcov-tool.c:270 gcov-tool.c:420 ++#: gcov-tool.c:176 gcov-tool.c:271 + #, c-format ++msgid " -o, --output

Output directory\n" ++msgstr " -o, --output Directorio de salida\n" ++ ++#: gcov-tool.c:177 gcov-tool.c:273 gcov-tool.c:425 ++#, c-format + msgid " -v, --verbose Verbose mode\n" + msgstr " -v, --verbose Modo expresivo\n" + +-#: gcov-tool.c:177 gcov-tool.c:271 +-#, c-format +-msgid " -o, --output Output directory\n" +-msgstr " -o, --output Directorio de salida\n" +- + #: gcov-tool.c:178 + #, c-format + msgid " -w, --weight Set weights (float point values)\n" +@@ -673,16 +673,16 @@ + msgid " rewrite [options] Rewrite coverage file contents\n" + msgstr " rewrite [opciones] Reescribe el contenido del fichero de cobertura\n" + ++#: gcov-tool.c:270 ++#, c-format ++msgid " -n, --normalize Normalize the profile\n" ++msgstr " -n, --normalize Normaliza el perfil\n" ++ + #: gcov-tool.c:272 + #, c-format + msgid " -s, --scale Scale the profile counters\n" + msgstr " -s, --scale Escala los contadores de perfil\n" + +-#: gcov-tool.c:273 +-#, c-format +-msgid " -n, --normalize Normalize the profile\n" +-msgstr " -n, --normalize Normaliza el perfil\n" +- + #: gcov-tool.c:290 + #, c-format + msgid "Rewrite subcommand usage:" +@@ -708,27 +708,27 @@ + msgid " overlap [options] Compute the overlap of two profiles\n" + msgstr " overlap [opciones]  Calcula el solapamiento de dos perfiles\n" + +-#: gcov-tool.c:421 ++#: gcov-tool.c:420 + #, c-format +-msgid " -h, --hotonly Only print info for hot objects/functions\n" +-msgstr " -h, --hotonly Solo imprime información sobre objetos y funciones calientes\n" +- +-#: gcov-tool.c:422 +-#, c-format + msgid " -f, --function Print function level info\n" + msgstr " -f, --function Imprime información sobre el nivel de funciones\n" + +-#: gcov-tool.c:423 ++#: gcov-tool.c:421 + #, c-format + msgid " -F, --fullname Print full filename\n" + msgstr " -F, --fullname Imprime el nombre de fichero completo\n" + +-#: gcov-tool.c:424 ++#: gcov-tool.c:422 + #, c-format ++msgid " -h, --hotonly Only print info for hot objects/functions\n" ++msgstr " -h, --hotonly Solo imprime información sobre objetos y funciones calientes\n" ++ ++#: gcov-tool.c:423 ++#, c-format + msgid " -o, --object Print object level info\n" + msgstr " -o, --object Imprime información sobre el nivel de objetos\n" + +-#: gcov-tool.c:425 ++#: gcov-tool.c:424 + #, c-format + msgid " -t , --hot_threshold Set the threshold for hotness\n" + msgstr " -t , --hot_threshold Establece el umbral de calentura\n" +@@ -815,20 +815,15 @@ + + #: gcov.c:658 + #, c-format +-msgid " -h, --help Print this help, then exit\n" +-msgstr " -h, --help Muestra esta información, y finaliza\n" +- +-#: gcov.c:659 +-#, c-format + msgid " -a, --all-blocks Show information for every basic block\n" + msgstr " -a, --all-blocks Muestra información por cada bloque básico\n" + +-#: gcov.c:660 ++#: gcov.c:659 + #, c-format + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr " -b, --branch-probabilities Incluye las probabilidades de ramificación en la salida\n" + +-#: gcov.c:661 ++#: gcov.c:660 + #, c-format + msgid "" + " -c, --branch-counts Output counts of branches taken\n" +@@ -837,16 +832,21 @@ + " -c, --branch-counts Se muestra el número de ramificaciones\n" + " en lugar de los porcentajes\n" + +-#: gcov.c:663 ++#: gcov.c:662 + #, c-format + msgid " -d, --display-progress Display progress information\n" + msgstr " -d, --display-progress Muestra información de progreso\n" + +-#: gcov.c:664 ++#: gcov.c:663 + #, c-format + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr " -f, --function-summaries Muestra sumarios para cada función\n" + ++#: gcov.c:664 ++#, c-format ++msgid " -h, --help Print this help, then exit\n" ++msgstr " -h, --help Muestra esta información, y finaliza\n" ++ + #: gcov.c:665 + #, c-format + msgid " -i, --intermediate-format Output .gcov file in intermediate text format\n" +@@ -1031,82 +1031,82 @@ + msgid "%s:graph is unsolvable for '%s'\n" + msgstr "%s:no se puede resolver el grafo para '%s'\n" + +-#: gcov.c:2002 ++#: gcov.c:2009 + #, c-format + msgid "Lines executed:%s of %d\n" + msgstr "Líneas ejecutadas:%s de %d\n" + +-#: gcov.c:2005 ++#: gcov.c:2012 + #, c-format + msgid "No executable lines\n" + msgstr "No hay líneas de código ejecutables\n" + +-#: gcov.c:2013 ++#: gcov.c:2020 + #, c-format + msgid "%s '%s'\n" + msgstr "%s '%s'\n" + +-#: gcov.c:2020 ++#: gcov.c:2027 + #, c-format + msgid "Branches executed:%s of %d\n" + msgstr "Ramificaciones ejecutadas:%s de %d\n" + +-#: gcov.c:2024 ++#: gcov.c:2031 + #, c-format + msgid "Taken at least once:%s of %d\n" + msgstr "Se visitaron al menos una vez:%s de %d\n" + +-#: gcov.c:2030 ++#: gcov.c:2037 + #, c-format + msgid "No branches\n" + msgstr "No hay ramificaciones\n" + +-#: gcov.c:2032 ++#: gcov.c:2039 + #, c-format + msgid "Calls executed:%s of %d\n" + msgstr "Llamadas ejecutadas:%s de %d\n" + +-#: gcov.c:2036 ++#: gcov.c:2043 + #, c-format + msgid "No calls\n" + msgstr "No hay llamadas\n" + +-#: gcov.c:2317 ++#: gcov.c:2324 + #, c-format + msgid "%s:no lines for '%s'\n" + msgstr "%s:no hay líneas para '%s'\n" + +-#: gcov.c:2419 ++#: gcov.c:2426 + #, c-format + msgid "call %2d returned %s\n" + msgstr "la llamada %2d devuelve %s\n" + +-#: gcov.c:2424 ++#: gcov.c:2431 + #, c-format + msgid "call %2d never executed\n" + msgstr "la llamada %2d nunca se ejecuta\n" + +-#: gcov.c:2429 ++#: gcov.c:2436 + #, c-format + msgid "branch %2d taken %s%s\n" + msgstr "ramificación %2d tomada %s%s\n" + +-#: gcov.c:2434 ++#: gcov.c:2441 + #, c-format + msgid "branch %2d never executed\n" + msgstr "la ramificacion %2d nunca se ejecuta\n" + +-#: gcov.c:2439 ++#: gcov.c:2446 + #, c-format + msgid "unconditional %2d taken %s\n" + msgstr "el incondicional %2d tomado %s\n" + +-#: gcov.c:2442 ++#: gcov.c:2449 + #, c-format + msgid "unconditional %2d never executed\n" + msgstr "el incondicional %2d nunca se ejecuta\n" + +-#: gcov.c:2512 ++#: gcov.c:2519 + #, c-format + msgid "Cannot open source file %s\n" + msgstr "No se puede abrir el fichero fuente %s\n" +@@ -1213,89 +1213,89 @@ + msgid "Uses of this option are diagnosed." + msgstr "Los usos de esta opción están diagnosticados." + +-#: opts.c:1096 ++#: opts.c:1103 + #, c-format + msgid "default %d minimum %d maximum %d" + msgstr "predeterminado %d mínimo %d máximo %d" + +-#: opts.c:1163 ++#: opts.c:1170 + #, c-format + msgid "Same as %s. Use the latter option instead." + msgstr "Igual que %s. Utilice, en cambio, la última opción." + +-#: opts.c:1171 ++#: opts.c:1178 + #, c-format + msgid "%s Same as %s." + msgstr "%s Igual que %s." + +-#: opts.c:1242 ++#: opts.c:1249 + msgid "[default]" + msgstr "[por defecto]" + +-#: opts.c:1253 ++#: opts.c:1260 + msgid "[enabled]" + msgstr "[activado]" + +-#: opts.c:1253 ++#: opts.c:1260 + msgid "[disabled]" + msgstr "[desactivado]" + +-#: opts.c:1272 ++#: opts.c:1279 + #, c-format + msgid " No options with the desired characteristics were found\n" + msgstr " No se encontraron opciones con las características deseadas\n" + +-#: opts.c:1281 ++#: opts.c:1288 + #, c-format + msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end.\n" + msgstr " No se encontró ninguna. Use --help=%s para mostrar *todas* las opciones admitidas por el frente %s.\n" + +-#: opts.c:1287 ++#: opts.c:1294 + #, c-format + msgid " All options with the desired characteristics have already been displayed\n" + msgstr "Ya se mostraron todas las opciones con las características deseadas\n" + +-#: opts.c:1372 ++#: opts.c:1379 + msgid "The following options are target specific" + msgstr "Las siguientes opciones son específicas del objetivo" + +-#: opts.c:1375 ++#: opts.c:1382 + msgid "The following options control compiler warning messages" + msgstr "Las siguientes opciones controlan los mensajes de aviso del compilador" + +-#: opts.c:1378 ++#: opts.c:1385 + msgid "The following options control optimizations" + msgstr "Las siguientes opciones controlan las optimizaciones" + +-#: opts.c:1381 opts.c:1420 ++#: opts.c:1388 opts.c:1427 + msgid "The following options are language-independent" + msgstr "Las siguientes opciones son independientes del lenguaje" + +-#: opts.c:1384 ++#: opts.c:1391 + msgid "The --param option recognizes the following as parameters" + msgstr "La opción --param reconoce los parámetros a continuación" + +-#: opts.c:1390 ++#: opts.c:1397 + msgid "The following options are specific to just the language " + msgstr "Las siguientes opciones son específicas sólo para el lenguaje " + +-#: opts.c:1392 ++#: opts.c:1399 + msgid "The following options are supported by the language " + msgstr "Las siguientes opciones se admiten en el lenguaje " + +-#: opts.c:1403 ++#: opts.c:1410 + msgid "The following options are not documented" + msgstr "Las siguientes opciones no están documentadas" + +-#: opts.c:1405 ++#: opts.c:1412 + msgid "The following options take separate arguments" + msgstr "Las siguientes opciones toman argumentos separados" + +-#: opts.c:1407 ++#: opts.c:1414 + msgid "The following options take joined arguments" + msgstr "Las siguientes opciones toman argumentos conjuntos" + +-#: opts.c:1418 ++#: opts.c:1425 + msgid "The following options are language-related" + msgstr "Las siguientes opciones son relacionadas al lenguaje" + +@@ -2833,8 +2833,8 @@ + msgid "" + msgstr "" + +-#: config/aarch64/aarch64.c:4927 config/arm/arm.c:21832 config/arm/arm.c:21845 +-#: config/arm/arm.c:21870 config/nios2/nios2.c:2653 ++#: config/aarch64/aarch64.c:4927 config/arm/arm.c:21821 config/arm/arm.c:21834 ++#: config/arm/arm.c:21859 config/nios2/nios2.c:2653 + #, c-format + msgid "Unsupported operand for code '%c'" + msgstr "No se admite el operando para el código '%c'" +@@ -2853,7 +2853,7 @@ + msgid "incompatible floating point / vector register operand for '%%%c'" + msgstr "coma flotante incompatible / operando de registro de vector para '%%%c'" + +-#: config/aarch64/aarch64.c:5103 config/arm/arm.c:22377 ++#: config/aarch64/aarch64.c:5103 config/arm/arm.c:22366 + #, c-format + msgid "missing operand" + msgstr "falta un operando" +@@ -2873,8 +2873,8 @@ + msgid "invalid operand prefix '%%%c'" + msgstr "prefijo de operando no válido '%%%c'" + +-#: config/alpha/alpha.c:5092 config/i386/i386.c:18279 +-#: config/rs6000/rs6000.c:23938 config/sparc/sparc.c:8854 ++#: config/alpha/alpha.c:5092 config/i386/i386.c:18285 ++#: config/rs6000/rs6000.c:23985 config/sparc/sparc.c:8995 + #, c-format + msgid "'%%&' used without any local dynamic TLS references" + msgstr "se usó '%%&' sin ninguna referencia TLS dinámica local" +@@ -2890,18 +2890,18 @@ + msgstr "valor %%r no válido" + + #: config/alpha/alpha.c:5190 config/ia64/ia64.c:5442 +-#: config/rs6000/rs6000.c:23618 config/xtensa/xtensa.c:2363 ++#: config/rs6000/rs6000.c:23665 config/xtensa/xtensa.c:2364 + #, c-format + msgid "invalid %%R value" + msgstr "valor %%R no válido" + +-#: config/alpha/alpha.c:5196 config/rs6000/rs6000.c:23538 +-#: config/xtensa/xtensa.c:2330 ++#: config/alpha/alpha.c:5196 config/rs6000/rs6000.c:23585 ++#: config/xtensa/xtensa.c:2331 + #, c-format + msgid "invalid %%N value" + msgstr "valor %%N no válido" + +-#: config/alpha/alpha.c:5204 config/rs6000/rs6000.c:23566 ++#: config/alpha/alpha.c:5204 config/rs6000/rs6000.c:23613 + #, c-format + msgid "invalid %%P value" + msgstr "valor %%P no válido" +@@ -2911,7 +2911,7 @@ + msgid "invalid %%h value" + msgstr "valor %%h no válido" + +-#: config/alpha/alpha.c:5220 config/xtensa/xtensa.c:2356 ++#: config/alpha/alpha.c:5220 config/xtensa/xtensa.c:2357 + #, c-format + msgid "invalid %%L value" + msgstr "valor %%L no válido" +@@ -2932,7 +2932,7 @@ + msgstr "valor %%U no válido" + + #: config/alpha/alpha.c:5290 config/alpha/alpha.c:5301 +-#: config/rs6000/rs6000.c:23626 ++#: config/rs6000/rs6000.c:23673 + #, c-format + msgid "invalid %%s value" + msgstr "valor %%s no válido" +@@ -2942,7 +2942,7 @@ + msgid "invalid %%C value" + msgstr "valor %%C no válido" + +-#: config/alpha/alpha.c:5349 config/rs6000/rs6000.c:23402 ++#: config/alpha/alpha.c:5349 config/rs6000/rs6000.c:23449 + #, c-format + msgid "invalid %%E value" + msgstr "valor %%E no válido" +@@ -2953,7 +2953,7 @@ + msgstr "reubicación unspec desconocida" + + #: config/alpha/alpha.c:5383 config/cr16/cr16.c:1534 +-#: config/rs6000/rs6000.c:23943 config/spu/spu.c:1447 ++#: config/rs6000/rs6000.c:23990 config/spu/spu.c:1447 + #, c-format + msgid "invalid %%xn code" + msgstr "código %%xn no válido" +@@ -3016,7 +3016,7 @@ + #. Unknown flag. + #. Undocumented flag. + #: config/arc/arc.c:3467 config/epiphany/epiphany.c:1289 +-#: config/m32r/m32r.c:2230 config/nds32/nds32.c:2292 config/sparc/sparc.c:9133 ++#: config/m32r/m32r.c:2230 config/nds32/nds32.c:2292 config/sparc/sparc.c:9274 + #, c-format + msgid "invalid operand output code" + msgstr "operando no válido en el código de salida" +@@ -3026,29 +3026,29 @@ + msgid "invalid UNSPEC as operand: %d" + msgstr "UNSPEC no válido como operando: %d" + +-#: config/arm/arm.c:18841 config/arm/arm.c:18866 config/arm/arm.c:18876 +-#: config/arm/arm.c:18885 config/arm/arm.c:18894 ++#: config/arm/arm.c:18830 config/arm/arm.c:18855 config/arm/arm.c:18865 ++#: config/arm/arm.c:18874 config/arm/arm.c:18883 + #, c-format + msgid "invalid shift operand" + msgstr "operando de desplazamiento no válido" + +-#: config/arm/arm.c:21708 config/arm/arm.c:21726 ++#: config/arm/arm.c:21697 config/arm/arm.c:21715 + #, c-format + msgid "predicated Thumb instruction" + msgstr "instrucción de predicado Thumb" + +-#: config/arm/arm.c:21714 ++#: config/arm/arm.c:21703 + #, c-format + msgid "predicated instruction in conditional sequence" + msgstr "instrucción de predicado en una secuencia condicional" + +-#: config/arm/arm.c:21947 config/arm/arm.c:21969 config/arm/arm.c:21979 +-#: config/arm/arm.c:21989 config/arm/arm.c:21999 config/arm/arm.c:22038 +-#: config/arm/arm.c:22056 config/arm/arm.c:22081 config/arm/arm.c:22096 +-#: config/arm/arm.c:22123 config/arm/arm.c:22130 config/arm/arm.c:22148 +-#: config/arm/arm.c:22155 config/arm/arm.c:22163 config/arm/arm.c:22184 +-#: config/arm/arm.c:22191 config/arm/arm.c:22324 config/arm/arm.c:22331 +-#: config/arm/arm.c:22358 config/arm/arm.c:22365 config/bfin/bfin.c:1437 ++#: config/arm/arm.c:21936 config/arm/arm.c:21958 config/arm/arm.c:21968 ++#: config/arm/arm.c:21978 config/arm/arm.c:21988 config/arm/arm.c:22027 ++#: config/arm/arm.c:22045 config/arm/arm.c:22070 config/arm/arm.c:22085 ++#: config/arm/arm.c:22112 config/arm/arm.c:22119 config/arm/arm.c:22137 ++#: config/arm/arm.c:22144 config/arm/arm.c:22152 config/arm/arm.c:22173 ++#: config/arm/arm.c:22180 config/arm/arm.c:22313 config/arm/arm.c:22320 ++#: config/arm/arm.c:22347 config/arm/arm.c:22354 config/bfin/bfin.c:1437 + #: config/bfin/bfin.c:1444 config/bfin/bfin.c:1451 config/bfin/bfin.c:1458 + #: config/bfin/bfin.c:1467 config/bfin/bfin.c:1474 config/bfin/bfin.c:1481 + #: config/bfin/bfin.c:1488 +@@ -3056,101 +3056,101 @@ + msgid "invalid operand for code '%c'" + msgstr "operando no válido para el código '%c'" + +-#: config/arm/arm.c:22051 ++#: config/arm/arm.c:22040 + #, c-format + msgid "instruction never executed" + msgstr "la instrucción nunca se ejecuta" + + #. Former Maverick support, removed after GCC-4.7. +-#: config/arm/arm.c:22072 ++#: config/arm/arm.c:22061 + #, c-format + msgid "obsolete Maverick format code '%c'" + msgstr "código de formato Maverick obsoleto '%c'" + +-#: config/avr/avr.c:2439 ++#: config/avr/avr.c:2455 + #, c-format + msgid "address operand requires constraint for X, Y, or Z register" + msgstr "el operando de dirección requiere una restricción para los registros X, Y, o Z" + +-#: config/avr/avr.c:2620 ++#: config/avr/avr.c:2636 + msgid "operands to %T/%t must be reg + const_int:" + msgstr "los operandos para %T/%t deben ser reg + const_int:" + +-#: config/avr/avr.c:2670 config/avr/avr.c:2737 ++#: config/avr/avr.c:2686 config/avr/avr.c:2753 + msgid "bad address, not an I/O address:" + msgstr "dirección errónea, no es una dirección de E/S:" + +-#: config/avr/avr.c:2679 ++#: config/avr/avr.c:2695 + msgid "bad address, not a constant:" + msgstr "dirección errónea, no es una constante:" + +-#: config/avr/avr.c:2697 config/avr/avr.c:2704 ++#: config/avr/avr.c:2713 config/avr/avr.c:2720 + msgid "bad address, not (reg+disp):" + msgstr "dirección errónea, no (reg+disp):" + +-#: config/avr/avr.c:2711 ++#: config/avr/avr.c:2727 + msgid "bad address, not post_inc or pre_dec:" + msgstr "dirección errónea, no hay post_inc o pre_dec:" + +-#: config/avr/avr.c:2723 ++#: config/avr/avr.c:2739 + msgid "internal compiler error. Bad address:" + msgstr "error interno del compilador. Dirección errónea:" + +-#: config/avr/avr.c:2756 ++#: config/avr/avr.c:2772 + #, c-format + msgid "Unsupported code '%c' for fixed-point:" + msgstr "Código '%c' no admitido para coma fija:" + +-#: config/avr/avr.c:2764 ++#: config/avr/avr.c:2780 + msgid "internal compiler error. Unknown mode:" + msgstr "error interno del compilador. Modo desconocido:" + +-#: config/avr/avr.c:3788 config/avr/avr.c:4732 config/avr/avr.c:5179 ++#: config/avr/avr.c:3804 config/avr/avr.c:4748 config/avr/avr.c:5195 + msgid "invalid insn:" + msgstr "insn no válida:" + +-#: config/avr/avr.c:3842 config/avr/avr.c:3954 config/avr/avr.c:4012 +-#: config/avr/avr.c:4064 config/avr/avr.c:4083 config/avr/avr.c:4275 +-#: config/avr/avr.c:4583 config/avr/avr.c:4868 config/avr/avr.c:5072 +-#: config/avr/avr.c:5236 config/avr/avr.c:5330 config/avr/avr.c:5529 ++#: config/avr/avr.c:3858 config/avr/avr.c:3970 config/avr/avr.c:4028 ++#: config/avr/avr.c:4080 config/avr/avr.c:4099 config/avr/avr.c:4291 ++#: config/avr/avr.c:4599 config/avr/avr.c:4884 config/avr/avr.c:5088 ++#: config/avr/avr.c:5252 config/avr/avr.c:5345 config/avr/avr.c:5544 + msgid "incorrect insn:" + msgstr "insn incorrecta:" + +-#: config/avr/avr.c:4099 config/avr/avr.c:4374 config/avr/avr.c:4654 +-#: config/avr/avr.c:4940 config/avr/avr.c:5118 config/avr/avr.c:5386 +-#: config/avr/avr.c:5587 ++#: config/avr/avr.c:4115 config/avr/avr.c:4390 config/avr/avr.c:4670 ++#: config/avr/avr.c:4956 config/avr/avr.c:5134 config/avr/avr.c:5401 ++#: config/avr/avr.c:5602 + msgid "unknown move insn:" + msgstr "insn move desconocida:" + +-#: config/avr/avr.c:6046 ++#: config/avr/avr.c:6061 + msgid "bad shift insn:" + msgstr "insn shift errónea:" + +-#: config/avr/avr.c:6154 config/avr/avr.c:6635 config/avr/avr.c:7050 ++#: config/avr/avr.c:6169 config/avr/avr.c:6650 config/avr/avr.c:7065 + msgid "internal compiler error. Incorrect shift:" + msgstr "error interno del compilador. Desplazamiento incorrecto:" + +-#: config/avr/avr.c:8456 ++#: config/avr/avr.c:8471 + msgid "unsupported fixed-point conversion" + msgstr "conversión de coma fija no admitida" + +-#: config/avr/avr.c:9803 ++#: config/avr/avr.c:9818 + msgid "variable" + msgstr "variable" + +-#: config/avr/avr.c:9808 ++#: config/avr/avr.c:9823 + msgid "function parameter" + msgstr "parámetro de función" + +-#: config/avr/avr.c:9813 ++#: config/avr/avr.c:9828 + msgid "structure field" + msgstr "campo de estructura" + +-#: config/avr/avr.c:9819 ++#: config/avr/avr.c:9834 + msgid "return type of function" + msgstr "tipo de retorno de función" + +-#: config/avr/avr.c:9824 ++#: config/avr/avr.c:9839 + msgid "pointer" + msgstr "puntero" + +@@ -3174,7 +3174,7 @@ + msgstr "operando const_double no válido" + + #: config/cris/cris.c:604 config/ft32/ft32.c:106 config/moxie/moxie.c:104 +-#: final.c:3455 final.c:3457 fold-const.c:268 gcc.c:5268 gcc.c:5282 ++#: final.c:3455 final.c:3457 fold-const.c:268 gcc.c:5271 gcc.c:5285 + #: rtl-error.c:101 toplev.c:337 tree-vrp.c:7849 cp/typeck.c:6167 + #: lto/lto-object.c:184 lto/lto-object.c:281 lto/lto-object.c:338 + #: lto/lto-object.c:362 +@@ -3396,87 +3396,87 @@ + msgid "bad output_condmove_single operand" + msgstr "operando output_condmove_single erróneo" + +-#: config/i386/i386.c:17149 ++#: config/i386/i386.c:17155 + #, c-format + msgid "invalid UNSPEC as operand" + msgstr "UNSPEC no válido como operando" + +-#: config/i386/i386.c:17660 ++#: config/i386/i386.c:17666 + #, c-format + msgid "invalid use of asm flag output" + msgstr "tipo no válido de la salida del indicador asm" + +-#: config/i386/i386.c:17882 ++#: config/i386/i386.c:17888 + #, c-format + msgid "invalid operand size for operand code 'O'" + msgstr "tamaño de operando no válido para el código de operando 'O'" + +-#: config/i386/i386.c:17917 ++#: config/i386/i386.c:17923 + #, c-format + msgid "invalid operand size for operand code 'z'" + msgstr "tamaño de operando no válido para el código de operando 'z'" + +-#: config/i386/i386.c:17986 ++#: config/i386/i386.c:17992 + #, c-format + msgid "invalid operand type used with operand code 'Z'" + msgstr "se usó un tipo de operando no válido con el código de operando 'Z'" + +-#: config/i386/i386.c:17991 ++#: config/i386/i386.c:17997 + #, c-format + msgid "invalid operand size for operand code 'Z'" + msgstr "tamaño de operando no válido para el código de operando 'Z'" + +-#: config/i386/i386.c:18067 ++#: config/i386/i386.c:18073 + #, c-format + msgid "operand is not a condition code, invalid operand code 'Y'" + msgstr "el operando no es un código de condición, código de operando 'Y' no válido" + +-#: config/i386/i386.c:18146 ++#: config/i386/i386.c:18152 + #, c-format + msgid "operand is not a condition code, invalid operand code 'D'" + msgstr "el operando no es un código de condición, código de operando 'D' no válido" + +-#: config/i386/i386.c:18164 ++#: config/i386/i386.c:18170 + #, c-format + msgid "operand is not a condition code, invalid operand code '%c'" + msgstr "el operando no es un código de condición, código de operando '%c' no válido" + +-#: config/i386/i386.c:18177 ++#: config/i386/i386.c:18183 + #, c-format + msgid "operand is not an offsettable memory reference, invalid operand code 'H'" + msgstr "el operando no es una referencia de memoria desplazable, código de operando 'H' no válido" + +-#: config/i386/i386.c:18192 ++#: config/i386/i386.c:18198 + #, c-format + msgid "operand is not an integer, invalid operand code 'K'" + msgstr "el operando no es un entero, código de operando 'K' no válido" + +-#: config/i386/i386.c:18220 ++#: config/i386/i386.c:18226 + #, c-format + msgid "operand is not a specific integer, invalid operand code 'r'" + msgstr "el operando no es un entero concreto, código de operando 'r' no válido" + +-#: config/i386/i386.c:18238 ++#: config/i386/i386.c:18244 + #, c-format + msgid "operand is not an integer, invalid operand code 'R'" + msgstr "el operando no es un entero, código de operando 'R' no válido" + +-#: config/i386/i386.c:18261 ++#: config/i386/i386.c:18267 + #, c-format + msgid "operand is not a specific integer, invalid operand code 'R'" + msgstr "el operando no es un entero concreto, código de operando 'R' no válido" + +-#: config/i386/i386.c:18357 ++#: config/i386/i386.c:18363 + #, c-format + msgid "invalid operand code '%c'" + msgstr "código de operando '%c' no válido" + +-#: config/i386/i386.c:18419 ++#: config/i386/i386.c:18425 + #, c-format + msgid "invalid constraints for operand" + msgstr "restricciones no válidas para el operando" + +-#: config/i386/i386.c:28920 ++#: config/i386/i386.c:28926 + msgid "unknown insn mode" + msgstr "modo insn desconocido" + +@@ -3513,7 +3513,7 @@ + msgid "invalid %%P operand" + msgstr "operando %%P no válido" + +-#: config/iq2000/iq2000.c:3153 config/rs6000/rs6000.c:23556 ++#: config/iq2000/iq2000.c:3153 config/rs6000/rs6000.c:23603 + #, c-format + msgid "invalid %%p value" + msgstr "valor %%p no válido" +@@ -3567,7 +3567,7 @@ + msgstr "la dirección de post-incremento no es un registro" + + #: config/m32r/m32r.c:2333 config/m32r/m32r.c:2348 +-#: config/rs6000/rs6000.c:35600 ++#: config/rs6000/rs6000.c:35649 + msgid "bad address" + msgstr "dirección errónea" + +@@ -3600,7 +3600,7 @@ + msgstr "¡ La insn contiene una dirección no válida !" + + #: config/microblaze/microblaze.c:2309 config/microblaze/microblaze.c:2528 +-#: config/xtensa/xtensa.c:2460 ++#: config/xtensa/xtensa.c:2461 + msgid "invalid address" + msgstr "dirección no válida" + +@@ -3691,277 +3691,277 @@ + msgid "Try running '%s' in the shell to raise its limit.\n" + msgstr "Pruebe ejecutar '%s' en el intérprete de órdenes para elevar su límite.\n" + +-#: config/rs6000/rs6000.c:4223 ++#: config/rs6000/rs6000.c:4225 + msgid "-maltivec=le not allowed for big-endian targets" + msgstr "-maltivec=le no permitida para destinos big-endian" + +-#: config/rs6000/rs6000.c:4235 ++#: config/rs6000/rs6000.c:4237 + msgid "-mvsx requires hardware floating point" + msgstr "-mvsx requiere coma flotante de hardware" + +-#: config/rs6000/rs6000.c:4243 ++#: config/rs6000/rs6000.c:4245 + msgid "-mvsx and -mpaired are incompatible" + msgstr "-mvsx y -mpaired son incompatibles" + +-#: config/rs6000/rs6000.c:4245 ++#: config/rs6000/rs6000.c:4247 + msgid "-mvsx needs indexed addressing" + msgstr "-mvsx necesita direccionamiento indizado" + +-#: config/rs6000/rs6000.c:4250 ++#: config/rs6000/rs6000.c:4252 + msgid "-mvsx and -mno-altivec are incompatible" + msgstr "-mvsx y -mno-altivec son incompatibles" + +-#: config/rs6000/rs6000.c:4252 ++#: config/rs6000/rs6000.c:4254 + msgid "-mno-altivec disables vsx" + msgstr "-mno-altivec desactiva vsx" + +-#: config/rs6000/rs6000.c:4460 ++#: config/rs6000/rs6000.c:4462 + msgid "-mquad-memory requires 64-bit mode" + msgstr "-mquad-memory requiere modo de 64 bits" + +-#: config/rs6000/rs6000.c:4463 ++#: config/rs6000/rs6000.c:4465 + msgid "-mquad-memory-atomic requires 64-bit mode" + msgstr "-mquad-memory-atomic requiere modo de 64 bits" + +-#: config/rs6000/rs6000.c:4475 ++#: config/rs6000/rs6000.c:4477 + msgid "-mquad-memory is not available in little endian mode" + msgstr "-mquad-memory no está disponible en modo little endian" + +-#: config/rs6000/rs6000.c:4547 ++#: config/rs6000/rs6000.c:4549 + msgid "-mtoc-fusion requires 64-bit" + msgstr "-mtoc-fusion requiere 64 bits" + +-#: config/rs6000/rs6000.c:4554 ++#: config/rs6000/rs6000.c:4556 + msgid "-mtoc-fusion requires medium/large code model" + msgstr "-mtoc-fusion requiere modelo de código medio/grande" + +-#: config/rs6000/rs6000.c:11245 ++#: config/rs6000/rs6000.c:11276 + msgid "bad move" + msgstr "move erróneo" + +-#: config/rs6000/rs6000.c:23199 ++#: config/rs6000/rs6000.c:23246 + msgid "Bad 128-bit move" + msgstr "Movimiento de 128 bits erróneo" + +-#: config/rs6000/rs6000.c:23390 ++#: config/rs6000/rs6000.c:23437 + #, c-format + msgid "invalid %%e value" + msgstr "valor %%e no válido" + +-#: config/rs6000/rs6000.c:23411 ++#: config/rs6000/rs6000.c:23458 + #, c-format + msgid "invalid %%f value" + msgstr "valor %%f no válido" + +-#: config/rs6000/rs6000.c:23420 ++#: config/rs6000/rs6000.c:23467 + #, c-format + msgid "invalid %%F value" + msgstr "valor %%F no válido" + +-#: config/rs6000/rs6000.c:23429 ++#: config/rs6000/rs6000.c:23476 + #, c-format + msgid "invalid %%G value" + msgstr "valor %%G no válido" + +-#: config/rs6000/rs6000.c:23464 ++#: config/rs6000/rs6000.c:23511 + #, c-format + msgid "invalid %%j code" + msgstr "código %%j no válido" + +-#: config/rs6000/rs6000.c:23474 ++#: config/rs6000/rs6000.c:23521 + #, c-format + msgid "invalid %%J code" + msgstr "código %%J no válido" + +-#: config/rs6000/rs6000.c:23484 ++#: config/rs6000/rs6000.c:23531 + #, c-format + msgid "invalid %%k value" + msgstr "valor %%k no válido" + +-#: config/rs6000/rs6000.c:23499 config/xtensa/xtensa.c:2349 ++#: config/rs6000/rs6000.c:23546 config/xtensa/xtensa.c:2350 + #, c-format + msgid "invalid %%K value" + msgstr "valor %%K no válido" + +-#: config/rs6000/rs6000.c:23546 ++#: config/rs6000/rs6000.c:23593 + #, c-format + msgid "invalid %%O value" + msgstr "valor %%O no válido" + +-#: config/rs6000/rs6000.c:23593 ++#: config/rs6000/rs6000.c:23640 + #, c-format + msgid "invalid %%q value" + msgstr "valor %%q no válido" + +-#: config/rs6000/rs6000.c:23646 ++#: config/rs6000/rs6000.c:23693 + #, c-format + msgid "invalid %%T value" + msgstr "valor %%T no válido" + +-#: config/rs6000/rs6000.c:23658 ++#: config/rs6000/rs6000.c:23705 + #, c-format + msgid "invalid %%u value" + msgstr "valor %%u no válido" + +-#: config/rs6000/rs6000.c:23672 config/xtensa/xtensa.c:2319 ++#: config/rs6000/rs6000.c:23719 config/xtensa/xtensa.c:2320 + #, c-format + msgid "invalid %%v value" + msgstr "valor %%v no válido" + +-#: config/rs6000/rs6000.c:23739 config/xtensa/xtensa.c:2370 ++#: config/rs6000/rs6000.c:23786 config/xtensa/xtensa.c:2371 + #, c-format + msgid "invalid %%x value" + msgstr "valor %%x no válido" + +-#: config/rs6000/rs6000.c:23887 ++#: config/rs6000/rs6000.c:23934 + #, c-format + msgid "invalid %%y value, try using the 'Z' constraint" + msgstr "valor %%y no válido, pruebe usando la restricción 'Z'" + +-#: config/rs6000/rs6000.c:24603 ++#: config/rs6000/rs6000.c:24650 + msgid "__float128 and __ibm128 cannot be used in the same expression" + msgstr "__float128 y __ibm128 no pueden utilizarse en la misma expresión" + +-#: config/rs6000/rs6000.c:24609 ++#: config/rs6000/rs6000.c:24656 + msgid "__ibm128 and long double cannot be used in the same expression" + msgstr "__ibm128 y long double no pueden utilizarse en la misma expresión" + +-#: config/rs6000/rs6000.c:24615 ++#: config/rs6000/rs6000.c:24662 + msgid "__float128 and long double cannot be used in the same expression" + msgstr "__float128 y long double no pueden utilizarse en la misma expresión" + +-#: config/rs6000/rs6000.c:38903 ++#: config/rs6000/rs6000.c:38952 + msgid "AltiVec argument passed to unprototyped function" + msgstr "Se pasó un argumento Altivec a una función sin prototipo" + +-#: config/rs6000/rs6000.c:40709 ++#: config/rs6000/rs6000.c:40758 + msgid "Could not generate addis value for fusion" + msgstr "No se ha podido generar valor addis para fusión" + +-#: config/rs6000/rs6000.c:40781 ++#: config/rs6000/rs6000.c:40830 + msgid "Unable to generate load/store offset for fusion" + msgstr "No se puede generar desplazamiento de carga/almacenamiento para fusión" + +-#: config/rs6000/rs6000.c:40885 ++#: config/rs6000/rs6000.c:40934 + msgid "Bad GPR fusion" + msgstr "Fusión GPR errónea" + +-#: config/rs6000/rs6000.c:41103 ++#: config/rs6000/rs6000.c:41152 + msgid "emit_fusion_p9_load, bad reg #1" + msgstr "emit_fusion_p9_load, reg #1 erróneo" + +-#: config/rs6000/rs6000.c:41149 ++#: config/rs6000/rs6000.c:41198 + msgid "emit_fusion_p9_load, bad reg #2" + msgstr "emit_fusion_p9_load, reg #2 erróneo" + +-#: config/rs6000/rs6000.c:41152 ++#: config/rs6000/rs6000.c:41201 + msgid "emit_fusion_p9_load not MEM" + msgstr "emit_fusion_p9_load no MEM" + +-#: config/rs6000/rs6000.c:41190 ++#: config/rs6000/rs6000.c:41239 + msgid "emit_fusion_p9_store, bad reg #1" + msgstr "emit_fusion_p9_store, reg #1 erróneo" + +-#: config/rs6000/rs6000.c:41236 ++#: config/rs6000/rs6000.c:41285 + msgid "emit_fusion_p9_store, bad reg #2" + msgstr "emit_fusion_p9_store, reg #2 erróneo" + +-#: config/rs6000/rs6000.c:41239 ++#: config/rs6000/rs6000.c:41288 + msgid "emit_fusion_p9_store not MEM" + msgstr "emit_fusion_p9_store no MEM" + +-#: config/s390/s390.c:7482 ++#: config/s390/s390.c:7489 + #, c-format + msgid "symbolic memory references are only supported on z10 or later" + msgstr "las referencias a memoria simbólica sólo se admiten en z10 o posterior" + +-#: config/s390/s390.c:7493 ++#: config/s390/s390.c:7500 + #, c-format + msgid "cannot decompose address" + msgstr "no se puede descomponer la dirección" + +-#: config/s390/s390.c:7562 ++#: config/s390/s390.c:7569 + #, c-format + msgid "invalid comparison operator for 'E' output modifier" + msgstr "operador de comparación no válido para el modificador de salida 'E'" + +-#: config/s390/s390.c:7585 ++#: config/s390/s390.c:7592 + #, c-format + msgid "invalid reference for 'J' output modifier" + msgstr "referencia no válida para el modificador de salida 'J'" + +-#: config/s390/s390.c:7603 ++#: config/s390/s390.c:7610 + #, c-format + msgid "invalid address for 'O' output modifier" + msgstr "dirección no válida para el modificador de salida 'O'" + +-#: config/s390/s390.c:7625 ++#: config/s390/s390.c:7632 + #, c-format + msgid "invalid address for 'R' output modifier" + msgstr "dirección no válida para el modificador de salida 'R'" + +-#: config/s390/s390.c:7643 ++#: config/s390/s390.c:7650 + #, c-format + msgid "memory reference expected for 'S' output modifier" + msgstr "se esperaba una referencia de memoria para el modificador de salida 'S'" + +-#: config/s390/s390.c:7653 ++#: config/s390/s390.c:7660 + #, c-format + msgid "invalid address for 'S' output modifier" + msgstr "dirección no válida para el modificador de saida 'S'" + +-#: config/s390/s390.c:7674 ++#: config/s390/s390.c:7681 + #, c-format + msgid "register or memory expression expected for 'N' output modifier" + msgstr "se esperaba un registro o expresión de memoria para el modificador de salida 'N'" + +-#: config/s390/s390.c:7685 ++#: config/s390/s390.c:7692 + #, c-format + msgid "register or memory expression expected for 'M' output modifier" + msgstr "se esperaba un registro o expresión de memoria para el modificador de salida 'M'" + +-#: config/s390/s390.c:7771 config/s390/s390.c:7792 ++#: config/s390/s390.c:7778 config/s390/s390.c:7799 + #, c-format + msgid "invalid constant for output modifier '%c'" + msgstr "constante no válida para el modificador de salida '%c'" + +-#: config/s390/s390.c:7789 ++#: config/s390/s390.c:7796 + #, c-format + msgid "invalid constant - try using an output modifier" + msgstr "constante no válida - pruebe usar un modificador de salida" + +-#: config/s390/s390.c:7826 ++#: config/s390/s390.c:7833 + #, c-format + msgid "invalid constant vector for output modifier '%c'" + msgstr "vector constante no válido para el modificador de salida '%c'" + +-#: config/s390/s390.c:7833 ++#: config/s390/s390.c:7840 + #, c-format + msgid "invalid expression - try using an output modifier" + msgstr "expresión no válida - pruebe usar un modificador de salida" + +-#: config/s390/s390.c:7836 ++#: config/s390/s390.c:7843 + #, c-format + msgid "invalid expression for output modifier '%c'" + msgstr "expresión no válida para el modificador de salida '%c'" + +-#: config/s390/s390.c:11703 ++#: config/s390/s390.c:11710 + msgid "vector argument passed to unprototyped function" + msgstr "se pasó un argumento vector a una función sin prototipo" + +-#: config/s390/s390.c:15522 ++#: config/s390/s390.c:15529 + msgid "types differ in signedness" + msgstr "los tipos difieren en el signo" + +-#: config/s390/s390.c:15532 ++#: config/s390/s390.c:15539 + msgid "binary operator does not support two vector bool operands" + msgstr "el operador binario no admite dos operadores bool vector" + +-#: config/s390/s390.c:15535 ++#: config/s390/s390.c:15542 + msgid "binary operator does not support vector bool operand" + msgstr "el operador binario no admite operador bool vector" + +-#: config/s390/s390.c:15543 ++#: config/s390/s390.c:15550 + msgid "binary operator does not support mixing vector bool with floating point vector operands" + msgstr "el operador binario no admite que se mezclen operandos bool vector y vector de coma flotante" + +@@ -3987,43 +3987,43 @@ + msgid "created and used with different endianness" + msgstr "creado y usado con diferente orden de bits" + +-#: config/sparc/sparc.c:8863 config/sparc/sparc.c:8869 ++#: config/sparc/sparc.c:9004 config/sparc/sparc.c:9010 + #, c-format + msgid "invalid %%Y operand" + msgstr "operando %%Y no válido" + +-#: config/sparc/sparc.c:8956 ++#: config/sparc/sparc.c:9097 + #, c-format + msgid "invalid %%A operand" + msgstr "operando %%A no válido" + +-#: config/sparc/sparc.c:8976 ++#: config/sparc/sparc.c:9117 + #, c-format + msgid "invalid %%B operand" + msgstr "operando %%B no válido" + +-#: config/sparc/sparc.c:9056 config/tilegx/tilegx.c:5103 ++#: config/sparc/sparc.c:9197 config/tilegx/tilegx.c:5103 + #: config/tilepro/tilepro.c:4512 + #, c-format + msgid "invalid %%C operand" + msgstr "operando %%C no válido" + +-#: config/sparc/sparc.c:9088 config/tilegx/tilegx.c:5136 ++#: config/sparc/sparc.c:9229 config/tilegx/tilegx.c:5136 + #, c-format + msgid "invalid %%D operand" + msgstr "operando %%D no válido" + +-#: config/sparc/sparc.c:9107 ++#: config/sparc/sparc.c:9248 + #, c-format + msgid "invalid %%f operand" + msgstr "operando %%f no válido" + +-#: config/sparc/sparc.c:9119 ++#: config/sparc/sparc.c:9260 + #, c-format + msgid "invalid %%s operand" + msgstr "operando %%s no válido" + +-#: config/sparc/sparc.c:9164 ++#: config/sparc/sparc.c:9305 + #, c-format + msgid "floating-point constant not a valid immediate operand" + msgstr "la constante de coma flotante no es un operando inmediato válido" +@@ -4185,30 +4185,30 @@ + msgid "bad test" + msgstr "prueba errónea" + +-#: config/xtensa/xtensa.c:2307 ++#: config/xtensa/xtensa.c:2308 + #, c-format + msgid "invalid %%D value" + msgstr "valor %%D no válido" + +-#: config/xtensa/xtensa.c:2344 ++#: config/xtensa/xtensa.c:2345 + msgid "invalid mask" + msgstr "máscara no válida" + +-#: config/xtensa/xtensa.c:2377 ++#: config/xtensa/xtensa.c:2378 + #, c-format + msgid "invalid %%d value" + msgstr "valor %%d no válido" + +-#: config/xtensa/xtensa.c:2396 config/xtensa/xtensa.c:2406 ++#: config/xtensa/xtensa.c:2397 config/xtensa/xtensa.c:2407 + #, c-format + msgid "invalid %%t/%%b value" + msgstr "valor %%t%%b no válido" + +-#: config/xtensa/xtensa.c:2485 ++#: config/xtensa/xtensa.c:2486 + msgid "no register in address" + msgstr "no hay registro en la dirección" + +-#: config/xtensa/xtensa.c:2493 ++#: config/xtensa/xtensa.c:2494 + msgid "address offset not a constant" + msgstr "el desplazamiento de dirección no es una constante" + +@@ -4229,8 +4229,8 @@ + #: c/gimple-parser.c:189 c/gimple-parser.c:198 c/gimple-parser.c:227 + #: c/gimple-parser.c:1320 c/gimple-parser.c:1344 c/gimple-parser.c:1424 + #: c/gimple-parser.c:1451 c/c-parser.c:2985 c/c-parser.c:9257 +-#: c/gimple-parser.c:1228 c/gimple-parser.c:1267 cp/parser.c:27236 +-#: cp/parser.c:27809 ++#: c/gimple-parser.c:1228 c/gimple-parser.c:1267 cp/parser.c:27259 ++#: cp/parser.c:27832 + #, gcc-internal-format + msgid "expected %<;%>" + msgstr "se esperaba %<;%>" +@@ -4252,14 +4252,14 @@ + #: c/c-parser.c:17131 c/c-parser.c:17573 c/c-parser.c:17631 c/c-parser.c:18057 + #: c/gimple-parser.c:364 c/gimple-parser.c:783 c/gimple-parser.c:835 + #: c/gimple-parser.c:861 c/gimple-parser.c:1148 c/gimple-parser.c:1289 +-#: c/gimple-parser.c:1378 c/c-parser.c:11143 cp/parser.c:24946 +-#: cp/parser.c:27812 ++#: c/gimple-parser.c:1378 c/c-parser.c:11143 cp/parser.c:24969 ++#: cp/parser.c:27835 + #, gcc-internal-format + msgid "expected %<(%>" + msgstr "se esperaba %<(%>" + + #: c/c-parser.c:2217 c/c-parser.c:7364 c/c-parser.c:7769 c/c-parser.c:7810 +-#: c/c-parser.c:7948 c/c-parser.c:11932 cp/parser.c:27234 cp/parser.c:27827 ++#: c/c-parser.c:7948 c/c-parser.c:11932 cp/parser.c:27257 cp/parser.c:27850 + #, gcc-internal-format + msgid "expected %<,%>" + msgstr "se esperaba %<,%>" +@@ -4290,7 +4290,7 @@ + #: c/gimple-parser.c:793 c/gimple-parser.c:815 c/gimple-parser.c:842 + #: c/gimple-parser.c:865 c/gimple-parser.c:988 c/gimple-parser.c:1159 + #: c/gimple-parser.c:1170 c/gimple-parser.c:1292 c/gimple-parser.c:1381 +-#: cp/parser.c:24979 cp/parser.c:27857 ++#: cp/parser.c:25002 cp/parser.c:27880 + #, gcc-internal-format + msgid "expected %<)%>" + msgstr "se esperaba %<)%>" +@@ -4298,7 +4298,7 @@ + #: c/c-parser.c:3619 c/c-parser.c:4573 c/c-parser.c:4609 c/c-parser.c:6267 + #: c/c-parser.c:7879 c/c-parser.c:8237 c/c-parser.c:8390 c/c-parser.c:10829 + #: c/c-parser.c:17969 c/c-parser.c:17971 c/c-parser.c:18310 +-#: c/gimple-parser.c:965 cp/parser.c:7115 cp/parser.c:27821 ++#: c/gimple-parser.c:965 cp/parser.c:7120 cp/parser.c:27844 + #, gcc-internal-format + msgid "expected %<]%>" + msgstr "se esperaba %<]%>" +@@ -4308,7 +4308,7 @@ + msgstr "se esperaba %<;%>, %<,%> o %<)%>" + + #: c/c-parser.c:4429 c/c-parser.c:14776 c/gimple-parser.c:1493 +-#: cp/parser.c:27815 cp/parser.c:29742 ++#: cp/parser.c:27838 cp/parser.c:29765 + #, gcc-internal-format + msgid "expected %<}%>" + msgstr "se esperaba %<}%>" +@@ -4315,7 +4315,7 @@ + + #: c/c-parser.c:4743 c/c-parser.c:9598 c/c-parser.c:15502 c/c-parser.c:18336 + #: c/gimple-parser.c:142 c/gimple-parser.c:1384 c/c-parser.c:2803 +-#: c/c-parser.c:3006 c/c-parser.c:9152 cp/parser.c:17788 cp/parser.c:27818 ++#: c/c-parser.c:3006 c/c-parser.c:9152 cp/parser.c:17811 cp/parser.c:27841 + #, gcc-internal-format + msgid "expected %<{%>" + msgstr "se esperaba %<{%>" +@@ -4325,7 +4325,7 @@ + #: c/c-parser.c:11621 c/c-parser.c:11756 c/c-parser.c:12125 c/c-parser.c:12217 + #: c/c-parser.c:12870 c/c-parser.c:16975 c/c-parser.c:17034 + #: c/gimple-parser.c:1432 c/gimple-parser.c:1459 c/c-parser.c:6174 +-#: c/c-parser.c:11237 cp/parser.c:27851 cp/parser.c:28953 cp/parser.c:31615 ++#: c/c-parser.c:11237 cp/parser.c:27874 cp/parser.c:28976 cp/parser.c:31638 + #, gcc-internal-format + msgid "expected %<:%>" + msgstr "se esperaba %<:%>" +@@ -4338,24 +4338,24 @@ + msgid "Cilk array notation cannot be used for a throw expression" + msgstr "La notaicón de array de Cilk no puede utilizarse para expresiones throw" + +-#: c/c-parser.c:5715 cp/semantics.c:1144 ++#: c/c-parser.c:5715 cp/semantics.c:1147 + msgid "Cilk array notation cannot be used as a condition for switch statement" + msgstr "La notación de array de Cilk no puede utilizarse para sentencias switch" + +-#: c/c-parser.c:5766 cp/semantics.c:799 ++#: c/c-parser.c:5766 cp/semantics.c:802 + msgid "Cilk array notation cannot be used as a condition for while statement" + msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias while" + +-#: c/c-parser.c:5818 cp/parser.c:27745 ++#: c/c-parser.c:5818 cp/parser.c:27768 + #, gcc-internal-format + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:5825 cp/semantics.c:858 ++#: c/c-parser.c:5825 cp/semantics.c:861 + msgid "Cilk array notation cannot be used as a condition for a do-while statement" + msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias do-while" + +-#: c/c-parser.c:6028 cp/semantics.c:977 ++#: c/c-parser.c:6028 cp/semantics.c:980 + msgid "Cilk array notation cannot be used in a condition for a for-loop" + msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias do-while" + +@@ -4363,18 +4363,18 @@ + msgid "expected %<.%>" + msgstr "se esperaba %<.%>" + +-#: c/c-parser.c:8823 c/c-parser.c:8855 c/c-parser.c:9095 cp/parser.c:29527 +-#: cp/parser.c:29601 ++#: c/c-parser.c:8823 c/c-parser.c:8855 c/c-parser.c:9095 cp/parser.c:29550 ++#: cp/parser.c:29624 + #, gcc-internal-format + msgid "expected %<@end%>" + msgstr "se esperaba %<@end%>" + +-#: c/c-parser.c:9512 c/gimple-parser.c:778 cp/parser.c:27836 ++#: c/c-parser.c:9512 c/gimple-parser.c:778 cp/parser.c:27859 + #, gcc-internal-format + msgid "expected %<>%>" + msgstr "se esperaba %<>%>" + +-#: c/c-parser.c:12309 c/c-parser.c:13088 cp/parser.c:27860 ++#: c/c-parser.c:12309 c/c-parser.c:13088 cp/parser.c:27883 + #, gcc-internal-format + msgid "expected %<,%> or %<)%>" + msgstr "se esperaba %<,%> o %<)%>" +@@ -4382,17 +4382,17 @@ + #. All following cases are statements with LHS. + #: c/c-parser.c:14488 c/c-parser.c:14532 c/c-parser.c:14760 c/c-parser.c:15001 + #: c/c-parser.c:17172 c/c-parser.c:17795 c/gimple-parser.c:287 +-#: c/c-parser.c:4632 cp/parser.c:27839 ++#: c/c-parser.c:4632 cp/parser.c:27862 + #, gcc-internal-format + msgid "expected %<=%>" + msgstr "se esperaba %<=%>" + +-#: c/c-parser.c:15545 c/c-parser.c:15535 cp/parser.c:35022 ++#: c/c-parser.c:15545 c/c-parser.c:15535 cp/parser.c:35045 + #, gcc-internal-format + msgid "expected %<#pragma omp section%> or %<}%>" + msgstr "se esperaba %<#pragma omp section%> o %<}%>" + +-#: c/c-parser.c:17957 c/c-parser.c:10764 cp/parser.c:27824 cp/parser.c:30884 ++#: c/c-parser.c:17957 c/c-parser.c:10764 cp/parser.c:27847 cp/parser.c:30907 + #, gcc-internal-format + msgid "expected %<[%>" + msgstr "se esperaba %<[%>" +@@ -4401,7 +4401,7 @@ + msgid "(anonymous)" + msgstr "(anónimo)" + +-#: c/gimple-parser.c:767 cp/parser.c:15443 cp/parser.c:27833 ++#: c/gimple-parser.c:767 cp/parser.c:15462 cp/parser.c:27856 + #, gcc-internal-format + msgid "expected %<<%>" + msgstr "se esperaba %<<%>" +@@ -4410,11 +4410,11 @@ + msgid "expected label" + msgstr "se esperaba etiqueta" + +-#: cp/call.c:9927 ++#: cp/call.c:9932 + msgid "candidate 1:" + msgstr "candidato 1:" + +-#: cp/call.c:9928 ++#: cp/call.c:9933 + msgid "candidate 2:" + msgstr "candidato 2:" + +@@ -4633,11 +4633,11 @@ + msgid "%r%s:%d:%R in constexpr expansion of %qs" + msgstr "%r%s:%d:%R en la expansión de la expresión constante de %qs" + +-#: cp/pt.c:1950 cp/semantics.c:5250 ++#: cp/pt.c:1950 cp/semantics.c:5263 + msgid "candidates are:" + msgstr "los candidatos son:" + +-#: cp/pt.c:21895 ++#: cp/pt.c:21984 + msgid "candidate is:" + msgid_plural "candidates are:" + msgstr[0] "el candidato es:" +@@ -4808,80 +4808,80 @@ + msgid "actual argument to INTENT = OUT/INOUT" + msgstr "argumento actual de INTENT = OUT/INOUT" + +-#: fortran/io.c:585 ++#: fortran/io.c:595 + msgid "Positive width required" + msgstr "Se requieren una anchura positiva" + +-#: fortran/io.c:586 ++#: fortran/io.c:596 + msgid "Nonnegative width required" + msgstr "Se requiere una anchura que no sea negativa" + +-#: fortran/io.c:587 ++#: fortran/io.c:597 + msgid "Unexpected element %qc in format string at %L" + msgstr "Elemento %qc inesperado en la cadena de formato en %L" + +-#: fortran/io.c:589 ++#: fortran/io.c:599 + msgid "Unexpected end of format string" + msgstr "Cadena de fin de formato inesperada" + +-#: fortran/io.c:590 ++#: fortran/io.c:600 + msgid "Zero width in format descriptor" + msgstr "Anchura cero en el descriptor de formato" + +-#: fortran/io.c:610 ++#: fortran/io.c:620 + msgid "Missing leading left parenthesis" + msgstr "Falta el paréntesis izquierdo inicial" + +-#: fortran/io.c:639 ++#: fortran/io.c:649 + msgid "Left parenthesis required after %<*%>" + msgstr "Se requiere paréntesis izquierdo después de %<*%>" + +-#: fortran/io.c:670 ++#: fortran/io.c:680 + msgid "Expected P edit descriptor" + msgstr "Se esperaba un descriptor de edición P" + + #. P requires a prior number. +-#: fortran/io.c:678 ++#: fortran/io.c:688 + msgid "P descriptor requires leading scale factor" + msgstr "El descriptor P requiere un factor de escala inicial" + +-#: fortran/io.c:726 +-#, c-format +-msgid "Right parenthesis expected at %C" +-msgstr "Se seperaba paréntesis derecho en %C" +- +-#: fortran/io.c:819 fortran/io.c:833 ++#: fortran/io.c:782 fortran/io.c:796 + msgid "Comma required after P descriptor" + msgstr "Se requiere una coma antes del descriptor P" + +-#: fortran/io.c:847 ++#: fortran/io.c:810 + msgid "Positive width required with T descriptor" + msgstr "Se requieren una anchura positiva con el descriptor T" + +-#: fortran/io.c:930 ++#: fortran/io.c:893 + msgid "E specifier not allowed with g0 descriptor" + msgstr "No se permite el especificador E con el descriptor g0" + +-#: fortran/io.c:1000 ++#: fortran/io.c:963 + msgid "Positive exponent width required" + msgstr "Se requiere anchura del exponente positiva" + +-#: fortran/io.c:1030 ++#: fortran/io.c:1006 ++#, c-format ++msgid "Right parenthesis expected at %C" ++msgstr "Se seperaba paréntesis derecho en %C" ++ ++#: fortran/io.c:1040 + msgid "Period required in format specifier" + msgstr "Se requiere un punto en el especificador de formato" + +-#: fortran/io.c:1748 ++#: fortran/io.c:1758 + #, c-format + msgid "%s tag" + msgstr "etiqueta %s" + +-#: fortran/io.c:3217 ++#: fortran/io.c:3251 + msgid "internal unit in WRITE" + msgstr "unidad interna en WRITE" + + #. For INQUIRE, all tags except FILE, ID and UNIT are variable definition + #. contexts. Thus, use an extended RESOLVE_TAG macro for that. +-#: fortran/io.c:4484 ++#: fortran/io.c:4551 + #, c-format + msgid "%s tag with INQUIRE" + msgstr "etiqueta %s con INQUIRE" +@@ -4891,75 +4891,75 @@ + msgid "Syntax error in expression at %C" + msgstr "Error sintáctico en la expresión en %C" + +-#: fortran/module.c:1211 ++#: fortran/module.c:1212 + msgid "Unexpected EOF" + msgstr "Fin de fichero inesperado" + +-#: fortran/module.c:1295 ++#: fortran/module.c:1296 + msgid "Integer overflow" + msgstr "Desbordamiento entero" + +-#: fortran/module.c:1325 ++#: fortran/module.c:1326 + msgid "Name too long" + msgstr "Nombre demasiado largo" + +-#: fortran/module.c:1427 fortran/module.c:1530 ++#: fortran/module.c:1428 fortran/module.c:1531 + msgid "Bad name" + msgstr "Nombre erróneo" + +-#: fortran/module.c:1554 ++#: fortran/module.c:1555 + msgid "Expected name" + msgstr "Se esperaba un nombre" + +-#: fortran/module.c:1557 ++#: fortran/module.c:1558 + msgid "Expected left parenthesis" + msgstr "Se esperaba un paréntesis izquierdo" + +-#: fortran/module.c:1560 ++#: fortran/module.c:1561 + msgid "Expected right parenthesis" + msgstr "Se esperaba un paréntesis derecho" + +-#: fortran/module.c:1563 ++#: fortran/module.c:1564 + msgid "Expected integer" + msgstr "Se esperaba un entero" + +-#: fortran/module.c:1566 fortran/module.c:2559 ++#: fortran/module.c:1567 fortran/module.c:2560 + msgid "Expected string" + msgstr "Se esperaba una cadena" + +-#: fortran/module.c:1591 ++#: fortran/module.c:1592 + msgid "find_enum(): Enum not found" + msgstr "find_enum(): No se encontró el enumerador" + +-#: fortran/module.c:2274 ++#: fortran/module.c:2275 + msgid "Expected attribute bit name" + msgstr "Se esperaba un nombre de atributo de bit" + +-#: fortran/module.c:3163 ++#: fortran/module.c:3164 + msgid "Expected integer string" + msgstr "Se esperaba una cadena entera" + +-#: fortran/module.c:3167 ++#: fortran/module.c:3168 + msgid "Error converting integer" + msgstr "Error al convertir el entero" + +-#: fortran/module.c:3189 ++#: fortran/module.c:3190 + msgid "Expected real string" + msgstr "Se esperaba una cadena real" + +-#: fortran/module.c:3413 ++#: fortran/module.c:3414 + msgid "Expected expression type" + msgstr "Se esperaba un tipo de expresión" + +-#: fortran/module.c:3493 ++#: fortran/module.c:3494 + msgid "Bad operator" + msgstr "Operador erróneo" + +-#: fortran/module.c:3608 ++#: fortran/module.c:3609 + msgid "Bad type in constant expression" + msgstr "Tipo erróneo en la expresión constante" + +-#: fortran/module.c:6950 ++#: fortran/module.c:6951 + msgid "Unexpected end of module" + msgstr "Fin de módulo inesperado" + +@@ -5204,12 +5204,12 @@ + msgid "Actual string length is shorter than the declared one for dummy argument '%s' (%ld/%ld)" + msgstr "La longitud de la cadena actual es más corta que la declarada para el argumento dummy '%s' (%ld/%ld)" + +-#: fortran/trans-expr.c:8617 ++#: fortran/trans-expr.c:8627 + #, c-format + msgid "Target of rank remapping is too small (%ld < %ld)" + msgstr "El objetivo del remapeo de rango es demasiado pequeño (%ld < %ld)" + +-#: fortran/trans-expr.c:9983 ++#: fortran/trans-expr.c:9993 + msgid "Assignment of scalar to unallocated array" + msgstr "Asignación de escalar a un array sin espacio asignado" + +@@ -5554,7 +5554,7 @@ + + #: config/sparc/linux64.h:149 config/sparc/linux64.h:156 + #: config/sparc/netbsd-elf.h:108 config/sparc/netbsd-elf.h:117 +-#: config/sparc/sol2.h:228 config/sparc/sol2.h:234 ++#: config/sparc/sol2.h:237 config/sparc/sol2.h:243 + msgid "may not use both -m32 and -m64" + msgstr "no se pueden usar -m32 y -m64 al mismo tiempo" + +@@ -8437,7 +8437,7 @@ + msgstr "Especifica el tamaño de bit para los desplazamientos TLS inmediatos." + + #: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:510 +-#: config/s390/s390.opt:197 config/sparc/sparc.opt:138 ++#: config/s390/s390.opt:200 config/sparc/sparc.opt:146 + #: config/visium/visium.opt:49 + msgid "Schedule code for given CPU." + msgstr "Código de planificador para el CPU dado." +@@ -8658,7 +8658,7 @@ + msgid "target the software simulator." + msgstr "destina al simulador software." + +-#: config/ft32/ft32.opt:27 config/s390/s390.opt:228 config/mips/mips.opt:389 ++#: config/ft32/ft32.opt:27 config/s390/s390.opt:231 config/mips/mips.opt:389 + msgid "Use LRA instead of reload." + msgstr "Usa la LRA en lugar de recarga." + +@@ -8875,12 +8875,12 @@ + msgid "Use 80-bit long double." + msgstr "Usa long doubles de 80 bits." + +-#: config/i386/i386.opt:204 config/s390/s390.opt:157 ++#: config/i386/i386.opt:204 config/s390/s390.opt:160 + #: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:102 + msgid "Use 64-bit long double." + msgstr "Usa long doubles de 64 bits." + +-#: config/i386/i386.opt:208 config/s390/s390.opt:153 ++#: config/i386/i386.opt:208 config/s390/s390.opt:156 + #: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:98 + msgid "Use 128-bit long double." + msgstr "Usa long doubles de 128 bits." +@@ -9895,87 +9895,87 @@ + msgid "64 bit ABI." + msgstr "ABI de 64 bit." + +-#: config/s390/s390.opt:123 ++#: config/s390/s390.opt:126 + msgid "Maintain backchain pointer." + msgstr "Mantiene el puntero a la cadena hacia atrás." + +-#: config/s390/s390.opt:127 ++#: config/s390/s390.opt:130 + msgid "Additional debug prints." + msgstr "Impresiones adicionales de depuración." + +-#: config/s390/s390.opt:131 ++#: config/s390/s390.opt:134 + msgid "ESA/390 architecture." + msgstr "Arquitectura ESA/390." + +-#: config/s390/s390.opt:135 ++#: config/s390/s390.opt:138 + msgid "Enable decimal floating point hardware support." + msgstr "Admite la coma flotante decimal de hardware." + +-#: config/s390/s390.opt:139 ++#: config/s390/s390.opt:142 + msgid "Enable hardware floating point." + msgstr "Activa coma flotante de hardware." + +-#: config/s390/s390.opt:143 ++#: config/s390/s390.opt:146 + msgid "Takes two non-negative integer numbers separated by a comma. Prepend the function label with the number of two-byte Nop instructions indicated by the first. Append Nop instructions covering the number of halfwords indicated by the second after the label. Nop instructions of the largest possible size are used (six, four or two bytes), beginning with the largest possible size. Using 0 for both values disables hotpatching." + msgstr "" + +-#: config/s390/s390.opt:161 ++#: config/s390/s390.opt:164 + msgid "Use hardware transactional execution instructions." + msgstr "Usa instrucciones de ejecución transaccional por hardware." + +-#: config/s390/s390.opt:165 ++#: config/s390/s390.opt:168 + msgid "Use hardware vector facility instructions and enable the vector ABI." + msgstr "Usa las instrucciones de operaciones con vectores por hardware y activa el vector ABI." + +-#: config/s390/s390.opt:169 ++#: config/s390/s390.opt:172 + msgid "Use packed stack layout." + msgstr "Usa la disposición de pila empacada." + +-#: config/s390/s390.opt:173 ++#: config/s390/s390.opt:176 + msgid "Use bras for executable < 64k." + msgstr "Usa bras para el ejecutable < 64k." + +-#: config/s390/s390.opt:177 ++#: config/s390/s390.opt:180 + msgid "Disable hardware floating point." + msgstr "Desactiva la coma flotante de hardware." + +-#: config/s390/s390.opt:181 ++#: config/s390/s390.opt:184 + msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered." + msgstr "Establece el número máximo de bytes que se deben dejar en el tamaño de la pila antes de que se active una instrucción trap." + +-#: config/s390/s390.opt:185 ++#: config/s390/s390.opt:188 + msgid "Switches off the -mstack-guard= option." + msgstr "Desactiva la opción -mstack-guard=." + +-#: config/s390/s390.opt:189 ++#: config/s390/s390.opt:192 + msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit." + msgstr "Emite código extra en el prólogo de la función para atrapar en caso de que el tamaño de la pila exceda el límite dado." + +-#: config/s390/s390.opt:193 ++#: config/s390/s390.opt:196 + msgid "Switches off the -mstack-size= option." + msgstr "Desactiva la opción -mstack-size= ." + +-#: config/s390/s390.opt:201 ++#: config/s390/s390.opt:204 + msgid "Use the mvcle instruction for block moves." + msgstr "Utiliza la instrucción mvcle para movimiento de bloques." + +-#: config/s390/s390.opt:205 ++#: config/s390/s390.opt:208 + msgid "Enable the z vector language extension providing the context-sensitive vector macro and enable the Altivec-style builtins in vecintrin.h." + msgstr "Activa la extensión de lenguaje de vector z que ofrece la macro de vector sensible al contexto y activa los internos de estilo Altivec en vecintrin.h." + +-#: config/s390/s390.opt:210 ++#: config/s390/s390.opt:213 + msgid "Warn if a function uses alloca or creates an array with dynamic size." + msgstr "Avisa si una función usa alloca o crea una matriz de tamaño dinámico." + +-#: config/s390/s390.opt:214 ++#: config/s390/s390.opt:217 + msgid "Warn if a single function's framesize exceeds the given framesize." + msgstr "Avisa si el tamaño de marco de una sola función excede el tamaño de marco dado." + +-#: config/s390/s390.opt:218 ++#: config/s390/s390.opt:221 + msgid "z/Architecture." + msgstr "z/Architecture." + +-#: config/s390/s390.opt:222 ++#: config/s390/s390.opt:225 + msgid "Set the branch costs for conditional branch instructions. Reasonable values are small, non-negative integers. The default branch cost is 1." + msgstr "Establece los costos de ramificación para las instrucciones de ramificación condicional. Los valores razonables son enteros pequeños que no son negativos. El costo de ramificación por defecto es 1." + +@@ -10027,11 +10027,11 @@ + msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):" + msgstr "CPUs ARM conocidos (para usar con las opciones -mcpu= y -mtune=):" + +-#: config/arm/arm-tables.opt:359 ++#: config/arm/arm-tables.opt:353 + msgid "Known ARM architectures (for use with the -march= option):" + msgstr "Arquitecturas ARM conocidas (para usar con la opción -march=):" + +-#: config/arm/arm-tables.opt:471 ++#: config/arm/arm-tables.opt:465 + msgid "Known ARM FPUs (for use with the -mfpu= option):" + msgstr "FPUs ARM conocidos (para usar con la opción -mfpu=):" + +@@ -10257,78 +10257,102 @@ + msgstr "Usa las extensiones del Conjunto de Instrucciones Visuales de UltraSPARC versión 4.0." + + #: config/sparc/sparc.opt:86 ++#, fuzzy ++#| msgid "Use vector and scalar instructions added in ISA 2.07." ++msgid "Use additional VIS instructions introduced in OSA2017." ++msgstr "Usa las instrucciones de vectores y escalares añadidas en ISA 2.07." ++ ++#: config/sparc/sparc.opt:90 + msgid "Use UltraSPARC Compare-and-Branch extensions." + msgstr "Usa las extensiones Comparación-y-Ramificación de UltraSPARC." + +-#: config/sparc/sparc.opt:90 ++#: config/sparc/sparc.opt:94 + msgid "Use UltraSPARC Fused Multiply-Add extensions." + msgstr "Usa las extensiones Multiplicación-Adición de Corto Circuito de UltraSPARC." + +-#: config/sparc/sparc.opt:94 ++#: config/sparc/sparc.opt:98 ++#, fuzzy ++#| msgid "Generate floating-point multiply-add instructions" ++msgid "Use Floating-point Multiply Single to Double (FsMULd) instruction." ++msgstr "Genera instrucciones multiply-add de coma flotante" ++ ++#: config/sparc/sparc.opt:102 + msgid "Use UltraSPARC Population-Count instruction." + msgstr "Usa la instrucción Población-Cuenta de UltraSPARC." + +-#: config/sparc/sparc.opt:98 ++#: config/sparc/sparc.opt:106 + msgid "Use UltraSPARC Subtract-Extended-with-Carry instruction." + msgstr "Usa la instrucción Resta-Extendida-con-Llevada de UltraSPARC." + +-#: config/sparc/sparc.opt:102 ++#: config/sparc/sparc.opt:110 + msgid "Pointers are 64-bit." + msgstr "Los punteros son de 64-bit." + +-#: config/sparc/sparc.opt:106 ++#: config/sparc/sparc.opt:114 + msgid "Pointers are 32-bit." + msgstr "Los punteros son de 32-bit." + +-#: config/sparc/sparc.opt:110 ++#: config/sparc/sparc.opt:118 + msgid "Use 64-bit ABI." + msgstr "Usa la ABI de 64-bit." + +-#: config/sparc/sparc.opt:114 ++#: config/sparc/sparc.opt:122 + msgid "Use 32-bit ABI." + msgstr "Usa la ABI de 32-bit." + +-#: config/sparc/sparc.opt:118 ++#: config/sparc/sparc.opt:126 + msgid "Use stack bias." + msgstr "Usa la tendencia de la pila." + +-#: config/sparc/sparc.opt:122 ++#: config/sparc/sparc.opt:130 + msgid "Use structs on stronger alignment for double-word copies." + msgstr "Usa structs en la alineación más fuerte para copias double-word." + +-#: config/sparc/sparc.opt:126 ++#: config/sparc/sparc.opt:134 + msgid "Optimize tail call instructions in assembler and linker." + msgstr "Optimiza las instrucciones de la llamada del extremo en el ensamblador y el enlazador." + +-#: config/sparc/sparc.opt:130 ++#: config/sparc/sparc.opt:138 + msgid "Do not generate code that can only run in supervisor mode (default)." + msgstr "No genera código que solo pueda correr en modo supervisor (predeterminado)." + +-#: config/sparc/sparc.opt:134 config/visium/visium.opt:45 ++#: config/sparc/sparc.opt:142 config/visium/visium.opt:45 + msgid "Use features of and schedule code for given CPU." + msgstr "Usa las características y el código de planificador para el CPU dado." + +-#: config/sparc/sparc.opt:214 ++#: config/sparc/sparc.opt:225 + msgid "Use given SPARC-V9 code model." + msgstr "Usa el modelo de código del SPARC-V9 dado." + +-#: config/sparc/sparc.opt:218 ++#: config/sparc/sparc.opt:229 + msgid "Enable debug output." + msgstr "Activa la salida de depuración." + +-#: config/sparc/sparc.opt:222 ++#: config/sparc/sparc.opt:233 + msgid "Enable strict 32-bit psABI struct return checking." + msgstr "Permite la revisión de devolución de struct psABI de 32 bits estricta." + +-#: config/sparc/sparc.opt:226 ++#: config/sparc/sparc.opt:237 + msgid "Enable workaround for single erratum of AT697F processor (corresponding to erratum #13 of AT697E processor)." + msgstr "Activa evitar el error único del procesador AT697F (corresponde al error #13 del procesador AT697E)." + +-#: config/sparc/sparc.opt:231 ++#: config/sparc/sparc.opt:242 + msgid "Enable workarounds for the errata of the UT699 processor." + msgstr "Activa evitar el error único del procesador UT699." + +-#: config/sparc/sparc.opt:260 ++#: config/sparc/sparc.opt:246 ++#, fuzzy ++#| msgid "Enable workarounds for the errata of the UT699 processor." ++msgid "Enable workarounds for the errata of the UT699E/UT700 processor." ++msgstr "Activa evitar el error único del procesador UT699." ++ ++#: config/sparc/sparc.opt:250 ++#, fuzzy ++#| msgid "Enable workarounds for the errata of the UT699 processor." ++msgid "Enable workarounds for the errata of the GR712RC processor." ++msgstr "Activa evitar el error único del procesador UT699." ++ ++#: config/sparc/sparc.opt:283 + msgid "Specify the memory model in effect for the program." + msgstr "Especifica el modelo de memoria en efecto para el programa." + +@@ -14676,7 +14700,9 @@ + msgstr "Detecta rutas que disparan comportamiento erróneo o indefinido debido a desreferencia de puntero nulo. Aisla esas rutas del flujo de control principal y convierte la sentencia con comportamiento erróneo o indefinido en una trampa." + + #: common.opt:2495 +-msgid "Detect paths that trigger erroneous or undefined behavior due a null value being used in a way forbidden by a returns_nonnull or nonnull attribute. Isolate those paths from the main control flow and turn the statement with erroneous or undefined behavior into a trap." ++#, fuzzy ++#| msgid "Detect paths that trigger erroneous or undefined behavior due a null value being used in a way forbidden by a returns_nonnull or nonnull attribute. Isolate those paths from the main control flow and turn the statement with erroneous or undefined behavior into a trap." ++msgid "Detect paths that trigger erroneous or undefined behavior due to a null value being used in a way forbidden by a returns_nonnull or nonnull attribute. Isolate those paths from the main control flow and turn the statement with erroneous or undefined behavior into a trap." + msgstr "Detecta rutas que disparan comportamiento erróneo o indefinido debido a un uso indebido de un valor nuloen un atributo returns_nonnull o nonnull. Aisla esas rutas del flujo de control principal y convierte la sentencia con comportamiento erróneo o indefinido en una trampa." + + #: common.opt:2502 +@@ -15079,7 +15105,7 @@ + msgstr "se esperaba un tipo booleano" + + #: go/gofrontend/expressions.cc:4204 c/c-parser.c:12782 c/c-parser.c:12789 +-#: cp/parser.c:32592 cp/parser.c:32599 ++#: cp/parser.c:32615 cp/parser.c:32622 + #, gcc-internal-format + msgid "expected integer" + msgstr "se esperaba un entero" +@@ -15357,125 +15383,125 @@ + msgid "range clause must have array, slice, string, map, or channel type" + msgstr "la cláusula de rango debe tener tipo matriz, rebanada, cadena, mapa o canal" + +-#: go/gofrontend/types.cc:513 ++#: go/gofrontend/types.cc:525 + msgid "invalid comparison of non-ordered type" + msgstr "comparación no válida de tipo que no es ordenado" + +-#: go/gofrontend/types.cc:529 ++#: go/gofrontend/types.cc:541 + msgid "slice can only be compared to nil" + msgstr "la rebanada sólo se puede comparar con nil" + +-#: go/gofrontend/types.cc:531 ++#: go/gofrontend/types.cc:543 + msgid "map can only be compared to nil" + msgstr "el mapa sólo se puede comparar con nil" + +-#: go/gofrontend/types.cc:533 ++#: go/gofrontend/types.cc:545 + msgid "func can only be compared to nil" + msgstr "la función sólo se puede comparar con nil" + +-#: go/gofrontend/types.cc:539 ++#: go/gofrontend/types.cc:551 + #, c-format + msgid "invalid operation (%s)" + msgstr "operación no válida (%s)" + +-#: go/gofrontend/types.cc:562 ++#: go/gofrontend/types.cc:574 + msgid "invalid comparison of non-comparable type" + msgstr "comparación no válida de tipo que no es comparable" + +-#: go/gofrontend/types.cc:575 ++#: go/gofrontend/types.cc:587 + msgid "invalid comparison of generated struct" + msgstr "comparación no válida de struct generado" + +-#: go/gofrontend/types.cc:586 ++#: go/gofrontend/types.cc:598 + msgid "invalid comparison of non-comparable struct" + msgstr "comparación no válida de struct que no es comparable" + +-#: go/gofrontend/types.cc:596 ++#: go/gofrontend/types.cc:608 + msgid "invalid comparison of generated array" + msgstr "comparación no válida de matriz generada" + +-#: go/gofrontend/types.cc:603 ++#: go/gofrontend/types.cc:615 + msgid "invalid comparison of non-comparable array" + msgstr "comparación no válida de matriz que no es comparable" + +-#: go/gofrontend/types.cc:631 ++#: go/gofrontend/types.cc:643 + msgid "multiple-value function call in single-value context" + msgstr "llamada a función de valor múltiple en un contexto de un solo valor" + +-#: go/gofrontend/types.cc:708 ++#: go/gofrontend/types.cc:720 + msgid "need explicit conversion" + msgstr "necesita conversión implícita" + +-#: go/gofrontend/types.cc:715 ++#: go/gofrontend/types.cc:727 + #, c-format + msgid "cannot use type %s as type %s" + msgstr "no se puede usar el tipo %s como tipo %s" + +-#: go/gofrontend/types.cc:3849 ++#: go/gofrontend/types.cc:3864 + msgid "different receiver types" + msgstr "tipos de receptor diferentes" + +-#: go/gofrontend/types.cc:3869 go/gofrontend/types.cc:3882 +-#: go/gofrontend/types.cc:3897 ++#: go/gofrontend/types.cc:3884 go/gofrontend/types.cc:3897 ++#: go/gofrontend/types.cc:3912 + msgid "different number of parameters" + msgstr "número diferente de parámetros" + +-#: go/gofrontend/types.cc:3890 ++#: go/gofrontend/types.cc:3905 + msgid "different parameter types" + msgstr "tipos de parámetro diferentes" + +-#: go/gofrontend/types.cc:3905 ++#: go/gofrontend/types.cc:3920 + msgid "different varargs" + msgstr "varargs diferentes" + +-#: go/gofrontend/types.cc:3914 go/gofrontend/types.cc:3927 +-#: go/gofrontend/types.cc:3942 ++#: go/gofrontend/types.cc:3929 go/gofrontend/types.cc:3942 ++#: go/gofrontend/types.cc:3958 + msgid "different number of results" + msgstr "número diferente de resultados" + +-#: go/gofrontend/types.cc:3935 ++#: go/gofrontend/types.cc:3951 + msgid "different result types" + msgstr "tipos de resultado diferentes" + +-#: go/gofrontend/types.cc:8423 ++#: go/gofrontend/types.cc:8445 + #, c-format + msgid "need explicit conversion; missing method %s%s%s" + msgstr "se necesita conversión explícita; falta el método %s%s%s" + +-#: go/gofrontend/types.cc:8440 go/gofrontend/types.cc:8582 ++#: go/gofrontend/types.cc:8462 go/gofrontend/types.cc:8605 + #, c-format + msgid "incompatible type for method %s%s%s" + msgstr "tipo incompatible para el método %s%s%s" + +-#: go/gofrontend/types.cc:8444 go/gofrontend/types.cc:8586 ++#: go/gofrontend/types.cc:8466 go/gofrontend/types.cc:8609 + #, c-format + msgid "incompatible type for method %s%s%s (%s)" + msgstr "tipo incompatible para el método %s%s%s (%s)" + +-#: go/gofrontend/types.cc:8523 go/gofrontend/types.cc:8536 ++#: go/gofrontend/types.cc:8545 go/gofrontend/types.cc:8558 + msgid "pointer to interface type has no methods" + msgstr "el puntero a tipo de interfaz no tiene métodos" + +-#: go/gofrontend/types.cc:8525 go/gofrontend/types.cc:8538 ++#: go/gofrontend/types.cc:8547 go/gofrontend/types.cc:8560 + msgid "type has no methods" + msgstr "el tipo no tiene métodos" + +-#: go/gofrontend/types.cc:8559 ++#: go/gofrontend/types.cc:8581 + #, c-format + msgid "ambiguous method %s%s%s" + msgstr "método ambiguo %s%s%s" + +-#: go/gofrontend/types.cc:8562 ++#: go/gofrontend/types.cc:8584 + #, c-format + msgid "missing method %s%s%s" + msgstr "falta el método %s%s%s" + +-#: go/gofrontend/types.cc:8603 ++#: go/gofrontend/types.cc:8626 + #, c-format + msgid "method %s%s%s requires a pointer receiver" + msgstr "el método %s%s%s requiere un receptor de puntero" + +-#: go/gofrontend/types.cc:8621 ++#: go/gofrontend/types.cc:8644 + #, c-format + msgid "method %s%s%s is marked go:nointerface" + msgstr "el método %s%s%s está marado go:nointerface" +@@ -15650,7 +15676,7 @@ + msgid "specified bound %wu equals the size of the destination" + msgstr "el límite %wu especificado es igual al tamaño del destino" + +-#: builtins.c:4640 gimplify.c:3149 ++#: builtins.c:4640 gimplify.c:3150 + #, gcc-internal-format + msgid "too few arguments to function %" + msgstr "faltan argumentos para la función %" +@@ -15712,27 +15738,27 @@ + msgid "invalid memory model for %<__atomic_load%>" + msgstr "modelo de memoria no válido para %<__atomic_load%>" + +-#: builtins.c:5881 builtins.c:6068 ++#: builtins.c:5881 builtins.c:6074 + #, gcc-internal-format + msgid "invalid memory model for %<__atomic_store%>" + msgstr "modelo de memoria no válido para %<__atomic_store%>" + +-#: builtins.c:6186 ++#: builtins.c:6192 + #, gcc-internal-format + msgid "non-constant argument 1 to __atomic_always_lock_free" + msgstr "el argumento 1 para __atomic_always_lock_free no es una constante" + +-#: builtins.c:6228 ++#: builtins.c:6234 + #, gcc-internal-format + msgid "non-integer argument 1 to __atomic_is_lock_free" + msgstr "el argumento 1 para __atomic_is_lock_free no es un entero" + +-#: builtins.c:6292 ++#: builtins.c:6298 + #, gcc-internal-format + msgid "__builtin_thread_pointer is not supported on this target" + msgstr "no se admite __builtin_thread_pointer en este objetivo" + +-#: builtins.c:6312 ++#: builtins.c:6318 + #, gcc-internal-format + msgid "__builtin_set_thread_pointer is not supported on this target" + msgstr "no se admite __builtin_set_thread_pointer en este objetivo" +@@ -15739,7 +15765,7 @@ + + #. All valid uses of __builtin_va_arg_pack () are removed during + #. inlining. +-#: builtins.c:6572 expr.c:10797 ++#: builtins.c:6578 expr.c:10795 + #, gcc-internal-format + msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>" + msgstr "%Kuso no válido de %<__builtin_va_arg_pack ()%>" +@@ -15746,12 +15772,12 @@ + + #. All valid uses of __builtin_va_arg_pack_len () are removed during + #. inlining. +-#: builtins.c:6578 ++#: builtins.c:6584 + #, gcc-internal-format + msgid "%Kinvalid use of %<__builtin_va_arg_pack_len ()%>" + msgstr "%Kuso no válido de %<__builtin_va_arg_pack_len ()%>" + +-#: builtins.c:6815 ++#: builtins.c:6821 + #, gcc-internal-format + msgid "%<__builtin_longjmp%> second argument must be 1" + msgstr "el segundo argumento de %<__builtin_longjump%> debe ser 1" +@@ -15758,62 +15784,62 @@ + + #. Software implementation of Pointer Bounds Checker is NYI. + #. Target support is required. +-#: builtins.c:7457 ++#: builtins.c:7463 + #, gcc-internal-format + msgid "Your target platform does not support -fcheck-pointer-bounds" + msgstr "Su plataforma objetivo no soporta -fcheck-pointer-bounds" + +-#: builtins.c:7776 ++#: builtins.c:7782 + #, gcc-internal-format + msgid "target format does not support infinity" + msgstr "el formato objetivo no soporta infinito" + +-#: builtins.c:9394 ++#: builtins.c:9400 + #, gcc-internal-format + msgid "% used in function with fixed args" + msgstr "se usó % en una función con argumentos fijos" + +-#: builtins.c:9402 ++#: builtins.c:9408 + #, gcc-internal-format + msgid "wrong number of arguments to function %" + msgstr "número erróneo argumentos para la función %" + +-#: builtins.c:9417 ++#: builtins.c:9423 + #, gcc-internal-format + msgid "%<__builtin_next_arg%> called without an argument" + msgstr "se llamó a %<__builtin_next_arg%> sin un argumento" + +-#: builtins.c:9422 ++#: builtins.c:9428 + #, gcc-internal-format + msgid "wrong number of arguments to function %<__builtin_next_arg%>" + msgstr "número erróneo de argumentos para la función %<__builtin_next_arg%>" + +-#: builtins.c:9454 ++#: builtins.c:9460 + #, gcc-internal-format + msgid "second parameter of % not last named argument" + msgstr "el segundo parámetro de % no es el último argumento nombrado" + +-#: builtins.c:9467 ++#: builtins.c:9473 + #, gcc-internal-format + msgid "undefined behavior when second parameter of % is declared with % storage" + msgstr "la conducta es indefinida cuando el segundo parámetro de % se declara con almacenamiento %" + +-#: builtins.c:9496 ++#: builtins.c:9502 + #, gcc-internal-format + msgid "%Kfirst argument of %D must be a pointer, second integer constant" + msgstr "%Kel primer argumento de %D debe ser un puntero, el segundo una constante entera" + +-#: builtins.c:9509 ++#: builtins.c:9515 + #, gcc-internal-format + msgid "%Klast argument of %D is not integer constant between 0 and 3" + msgstr "%Kel último argumento de %D no es una constante entera entre 0 y 3" + +-#: builtins.c:9783 ++#: builtins.c:9789 + #, gcc-internal-format + msgid "%Kattempt to free a non-heap object %qD" + msgstr "%Kse intenta liberar un objeto %qD que no es de pila" + +-#: builtins.c:9786 ++#: builtins.c:9792 + #, gcc-internal-format + msgid "%Kattempt to free a non-heap object" + msgstr "%Kse intenta liberar un objeto que no es de pila" +@@ -16721,12 +16747,12 @@ + msgstr "se descarta el atributo % porque ya se inicializó la variable" + + #. include_self= +-#: cgraphunit.c:968 c/c-decl.c:11128 ++#: cgraphunit.c:968 c/c-decl.c:11131 + #, gcc-internal-format + msgid "%q+F used but never defined" + msgstr "se usa %q+F pero nunca se define" + +-#: cgraphunit.c:970 c/c-decl.c:11137 ++#: cgraphunit.c:970 c/c-decl.c:11140 + #, gcc-internal-format + msgid "%q+F declared % but never defined" + msgstr "%q+F se declaró % pero nunca se define" +@@ -16821,12 +16847,12 @@ + msgid "cannot find '%s'" + msgstr "no se puede encontrar '%s'" + +-#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3080 gcc.c:6787 ++#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3080 gcc.c:6790 + #, gcc-internal-format + msgid "pex_init failed: %m" + msgstr "falló pex_init: %m" + +-#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8428 ++#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8431 + #, gcc-internal-format + msgid "%s: %m" + msgstr "%s: %m" +@@ -16836,7 +16862,7 @@ + msgid "COLLECT_LTO_WRAPPER must be set" + msgstr "se debe definir COLLECT_LTO_WRAPPER" + +-#: collect2.c:966 gcc.c:7313 lto-wrapper.c:1479 ++#: collect2.c:966 gcc.c:7316 lto-wrapper.c:1479 + #: config/i386/intelmic-mkoffload.c:554 config/nvptx/mkoffload.c:403 + #, gcc-internal-format + msgid "atexit failed" +@@ -17047,7 +17073,7 @@ + msgid "error writing %qs" + msgstr "error al escribir %qs" + +-#: coverage.c:1245 ++#: coverage.c:1257 + #, gcc-internal-format, gfc-internal-format + msgid "cannot open %s" + msgstr "no se puede abrir %s" +@@ -17127,17 +17153,17 @@ + msgid "ignoring possibly conflicting option %<-fopt-info-%s%>" + msgstr "se descarta la opción posiblemente conflictiva %<-fopt-info-%s%>" + +-#: dwarf2out.c:1093 ++#: dwarf2out.c:1097 + #, gcc-internal-format + msgid "multiple EH personalities are supported only with assemblers supporting .cfi_personality directive" + msgstr "sólo se admiten múltiples personalidades EH con ensambladores que admiten la directiva cfi.personality" + +-#: dwarf2out.c:13685 ++#: dwarf2out.c:13689 + #, gcc-internal-format, gfc-internal-format + msgid "non-delegitimized UNSPEC %s (%d) found in variable location" + msgstr "se encontró UNSPEC %s (%d) que no está delegitimado la ubicación de variable" + +-#: dwarf2out.c:27308 ++#: dwarf2out.c:27319 + #, gcc-internal-format + msgid "-feliminate-dwarf2-dups is broken for C++, ignoring" + msgstr "" +@@ -17247,12 +17273,12 @@ + msgid "write of %wu-bit data outside the bound of destination object, data truncated into %wu-bit" + msgstr "" + +-#: expr.c:10804 ++#: expr.c:10802 + #, gcc-internal-format + msgid "%Kcall to %qs declared with attribute error: %s" + msgstr "%Kla llamada a %qs se redeclaró con error de atributo: %s" + +-#: expr.c:10811 ++#: expr.c:10809 + #, gcc-internal-format + msgid "%Kcall to %qs declared with attribute warning: %s" + msgstr "%Kla llamada a %qs se redecló con aviso de atributo: %s" +@@ -17267,12 +17293,12 @@ + msgid "the frame size of %wd bytes is larger than %wd bytes" + msgstr "el tamaño de marco de %wd bytes es mayor que %wd bytes" + +-#: final.c:4635 toplev.c:1404 tree-cfgcleanup.c:1148 ++#: final.c:4635 toplev.c:1404 tree-cfgcleanup.c:1211 + #, gcc-internal-format + msgid "could not open final insn dump file %qs: %m" + msgstr "no se puede abrir el fichero de volcado de insn final %qs: %m" + +-#: final.c:4688 tree-cfgcleanup.c:1164 ++#: final.c:4688 tree-cfgcleanup.c:1227 + #, gcc-internal-format + msgid "could not close final insn dump file %qs: %m" + msgstr "no se puede cerrar el fichero de volcado de insn final %qs: %m" +@@ -17287,7 +17313,7 @@ + msgid "comparison is always %d due to width of bit-field" + msgstr "la comparación siempre es %d debido a la anchura del campo de bit" + +-#: fold-const.c:5340 tree-ssa-reassoc.c:2343 tree-ssa-reassoc.c:2974 ++#: fold-const.c:5340 tree-ssa-reassoc.c:2343 tree-ssa-reassoc.c:2983 + #, gcc-internal-format + msgid "assuming signed overflow does not occur when simplifying range test" + msgstr "se asume que el desbordamiento con signo no sucede al simplificar la prueba de rango" +@@ -17317,7 +17343,7 @@ + msgid "assuming signed overflow does not occur when combining constants around a comparison" + msgstr "se asume que el desbordamiento con signo no sucede cuando se combinan constantes alrededor de una comparación" + +-#: fold-const.c:12048 ++#: fold-const.c:12049 + #, gcc-internal-format + msgid "fold check: original tree changed by fold" + msgstr "fold check: el árbol original cambió por un pliegue" +@@ -17327,7 +17353,7 @@ + msgid "total size of local objects too large" + msgstr "el tamaño total de los objetos locales es demasiado grande" + +-#: function.c:1765 gimplify.c:6111 ++#: function.c:1765 gimplify.c:6112 + #, gcc-internal-format + msgid "impossible constraint in %" + msgstr "restricción imposible en %" +@@ -17427,62 +17453,68 @@ + msgid "input file %qs is the same as output file" + msgstr "el fichero de entrada %qs es el mismo que el de salida" + +-#: gcc.c:4498 ++#: gcc.c:4476 ++#, fuzzy, gcc-internal-format ++#| msgid "output file not specified" ++msgid "output filename may not be empty" ++msgstr "no se ha especificado el fichero de salida" ++ ++#: gcc.c:4501 + #, gcc-internal-format + msgid "-pipe ignored because -save-temps specified" + msgstr "se descarta -pipe porque se especificó -save-temps" + +-#: gcc.c:4586 ++#: gcc.c:4589 + #, gcc-internal-format + msgid "%<-x %s%> after last input file has no effect" + msgstr "%<-x %s%> después del último fichero de entrada no tiene efecto" + +-#: gcc.c:4768 ++#: gcc.c:4771 + #, gcc-internal-format + msgid "unable to locate default linker script %qs in the library search paths" + msgstr "no se puede localizar el guión de enlazador por defecto %qs en las rutas de búsqueda de bibliotecas" + +-#: gcc.c:4973 ++#: gcc.c:4976 + #, gcc-internal-format + msgid "switch %qs does not start with %<-%>" + msgstr "la opción %qs no inicia con %<-%>" + +-#: gcc.c:4977 ++#: gcc.c:4980 + #, gcc-internal-format + msgid "spec-generated switch is just %<-%>" + msgstr "la opción generada de especificación sólo es %<-%>" + +-#: gcc.c:5070 ++#: gcc.c:5073 + #, gcc-internal-format, gfc-internal-format + msgid "could not open temporary response file %s" + msgstr "no se puede abrir el fichero de respuesta temporal %s" + +-#: gcc.c:5077 ++#: gcc.c:5080 + #, gcc-internal-format, gfc-internal-format + msgid "could not write to temporary response file %s" + msgstr "no se puede escribir en el fichero de respuesta temporal %s" + +-#: gcc.c:5083 ++#: gcc.c:5086 + #, gcc-internal-format, gfc-internal-format + msgid "could not close temporary response file %s" + msgstr "no se puede cerrar el fichero de respuesta temporal %s" + +-#: gcc.c:5206 ++#: gcc.c:5209 + #, gcc-internal-format + msgid "spec %qs invalid" + msgstr "la especificación %qs es no válida" + +-#: gcc.c:5356 ++#: gcc.c:5359 + #, gcc-internal-format + msgid "spec %qs has invalid %<%%0%c%>" + msgstr "la especificación %qs tiene un %<%%0%c%> no válido" + +-#: gcc.c:5677 ++#: gcc.c:5680 + #, gcc-internal-format + msgid "spec %qs has invalid %<%%W%c%>" + msgstr "la especificación %qs tiene un %<%%W%c%> no válido" + +-#: gcc.c:5700 ++#: gcc.c:5703 + #, gcc-internal-format + msgid "spec %qs has invalid %<%%x%c%>" + msgstr "la especificación %qs tiene un %<%%x%c%> no válido" +@@ -17490,228 +17522,228 @@ + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. i.e. there is no * in the pattern on the left + #. hand side of the :. +-#: gcc.c:5911 ++#: gcc.c:5914 + #, gcc-internal-format + msgid "spec failure: %<%%*%> has not been initialized by pattern match" + msgstr "falla de especificación: %<%%*%> no ha sido inicializado por coincidencia de patrón" + +-#: gcc.c:5954 ++#: gcc.c:5957 + #, gcc-internal-format + msgid "spec failure: unrecognized spec option %qc" + msgstr "falla de especificación: no se reconoce la opción de especificación %qc" + +-#: gcc.c:6016 ++#: gcc.c:6019 + #, gcc-internal-format + msgid "unknown spec function %qs" + msgstr "función de especificación %qs desconocida" + +-#: gcc.c:6046 ++#: gcc.c:6049 + #, gcc-internal-format + msgid "error in args to spec function %qs" + msgstr "error en los argumentos para la función de especificación %qs" + +-#: gcc.c:6100 ++#: gcc.c:6103 + #, gcc-internal-format + msgid "malformed spec function name" + msgstr "nombre de la función de especificación malformado" + + #. ) +-#: gcc.c:6103 ++#: gcc.c:6106 + #, gcc-internal-format + msgid "no arguments for spec function" + msgstr "no hay argumentos para la función de especificación" + +-#: gcc.c:6122 ++#: gcc.c:6125 + #, gcc-internal-format + msgid "malformed spec function arguments" + msgstr "argumentos de la función de especificación malformados" + +-#: gcc.c:6396 ++#: gcc.c:6399 + #, gcc-internal-format + msgid "braced spec %qs is invalid at %qc" + msgstr "la especificación entre llaves %qs es no válida en %qc" + +-#: gcc.c:6491 ++#: gcc.c:6494 + #, gcc-internal-format + msgid "braced spec body %qs is invalid" + msgstr "el cuerpo de la especificación entre llaves %qs es no válido" + +-#: gcc.c:7097 ++#: gcc.c:7100 + #, gcc-internal-format, gfc-internal-format + msgid "%s: could not determine length of compare-debug file %s" + msgstr "%s: no se puede determinar la longitud del fichero para comparar depuración %s" + +-#: gcc.c:7108 ++#: gcc.c:7111 + #, gcc-internal-format, gfc-internal-format + msgid "%s: -fcompare-debug failure (length)" + msgstr "%s: falló -fcompare-debug (longitud)" + +-#: gcc.c:7118 gcc.c:7159 ++#: gcc.c:7121 gcc.c:7162 + #, gcc-internal-format, gfc-internal-format + msgid "%s: could not open compare-debug file %s" + msgstr "%s: no se puede abrir el fichero para comparar depuración %s" + +-#: gcc.c:7138 gcc.c:7175 ++#: gcc.c:7141 gcc.c:7178 + #, gcc-internal-format, gfc-internal-format + msgid "%s: -fcompare-debug failure" + msgstr "%s: falló -fcompare-debug" + +-#: gcc.c:7483 ++#: gcc.c:7486 + #, gcc-internal-format + msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" + msgstr "falla de especificación: más de un argumento para SYSROOT_SUFFIX_SPEC" + +-#: gcc.c:7507 ++#: gcc.c:7510 + #, gcc-internal-format + msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" + msgstr "falla de especificación: más de un argumento para SYSROOT_HEADERS_SUFFIX_SPEC" + +-#: gcc.c:7812 ++#: gcc.c:7815 + #, gcc-internal-format + msgid "unrecognized command line option %<-%s%>; did you mean %<-%s%>?" + msgstr "no se reconoce la opción de línea de órdenes %<-%s%>; ¿quería decir %<-%s%>?" + +-#: gcc.c:7816 ++#: gcc.c:7819 + #, gcc-internal-format + msgid "unrecognized command line option %<-%s%>" + msgstr "no se reconoce la opción de línea de órdenes %<-%s%>" + +-#: gcc.c:7942 ++#: gcc.c:7945 + #, gcc-internal-format + msgid "not configured with sysroot headers suffix" + msgstr "no se configuró con el sufijo de encabezados sysroot" + +-#: gcc.c:8003 ++#: gcc.c:8006 + #, gcc-internal-format + msgid "no input files" + msgstr "no hay ficheros de entrada" + +-#: gcc.c:8054 ++#: gcc.c:8057 + #, gcc-internal-format + msgid "cannot specify -o with -c, -S or -E with multiple files" + msgstr "no se puede especificar -o con -c, -S o -E y con múltiples ficheros" + +-#: gcc.c:8095 ++#: gcc.c:8098 + #, gcc-internal-format, gfc-internal-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: el compilador %s no está instalado en este sistema" + +-#: gcc.c:8119 ++#: gcc.c:8122 + #, gcc-internal-format + msgid "recompiling with -fcompare-debug" + msgstr "se recompila con -fcompare-debug" + +-#: gcc.c:8135 ++#: gcc.c:8138 + #, gcc-internal-format + msgid "during -fcompare-debug recompilation" + msgstr "durante la recompilación -fcompare-debug" + +-#: gcc.c:8144 ++#: gcc.c:8147 + #, gcc-internal-format + msgid "comparing final insns dumps" + msgstr "se comparan volcados finales de insns" + +-#: gcc.c:8261 ++#: gcc.c:8264 + #, gcc-internal-format, gfc-internal-format + msgid "-fuse-linker-plugin, but %s not found" + msgstr "-fuse-linker-plugin, pero no se encontró %s" + +-#: gcc.c:8294 ++#: gcc.c:8297 + #, gcc-internal-format, gfc-internal-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: no se usó el fichero de entrada del enlazador porque no se hizo enlace" + +-#: gcc.c:8350 c-family/c-opts.c:749 ++#: gcc.c:8353 c-family/c-opts.c:749 + #, gcc-internal-format + msgid "cannot use %<-%> as input filename for a precompiled header" + msgstr "" + +-#: gcc.c:8356 ++#: gcc.c:8359 + #, gcc-internal-format, gfc-internal-format + msgid "language %s not recognized" + msgstr "no se reconoce el lenguaje %s" + +-#: gcc.c:8596 ++#: gcc.c:8599 + #, gcc-internal-format + msgid "multilib spec %qs is invalid" + msgstr "la especificación multilib %qs es no válida" + +-#: gcc.c:8798 ++#: gcc.c:8801 + #, gcc-internal-format + msgid "multilib exclusions %qs is invalid" + msgstr "las exclusiones multilib %qs son no válidas" + +-#: gcc.c:8862 ++#: gcc.c:8865 + #, gcc-internal-format + msgid "multilib select %qs %qs is invalid" + msgstr "la selección multilib %qs %qs no es válida" + +-#: gcc.c:9024 ++#: gcc.c:9027 + #, gcc-internal-format + msgid "multilib select %qs is invalid" + msgstr "la selección multilib %qs es no válida" + +-#: gcc.c:9064 ++#: gcc.c:9067 + #, gcc-internal-format + msgid "multilib exclusion %qs is invalid" + msgstr "la exclusión multilib %qs es no válida" + +-#: gcc.c:9279 ++#: gcc.c:9282 + #, gcc-internal-format + msgid "environment variable %qs not defined" + msgstr "no se definió la variable de entorno %qs" + +-#: gcc.c:9418 gcc.c:9423 ++#: gcc.c:9421 gcc.c:9426 + #, gcc-internal-format + msgid "invalid version number %qs" + msgstr "número de versión %qs no válido" + +-#: gcc.c:9466 ++#: gcc.c:9469 + #, gcc-internal-format, gfc-internal-format + msgid "too few arguments to %%:version-compare" + msgstr "faltan argumentos para %%:version-compare" + +-#: gcc.c:9472 ++#: gcc.c:9475 + #, gcc-internal-format, gfc-internal-format + msgid "too many arguments to %%:version-compare" + msgstr "demasiados argumentos para %%:version-compare" + +-#: gcc.c:9514 ++#: gcc.c:9517 + #, gcc-internal-format + msgid "unknown operator %qs in %%:version-compare" + msgstr "operador %qs desconocido en %%:version-compare" + +-#: gcc.c:9638 ++#: gcc.c:9641 + #, gcc-internal-format, gfc-internal-format + msgid "too many arguments to %%:compare-debug-dump-opt" + msgstr "demasiados argumentos para %%:compare-debug-dump-opt" + +-#: gcc.c:9711 ++#: gcc.c:9714 + #, gcc-internal-format, gfc-internal-format + msgid "too many arguments to %%:compare-debug-self-opt" + msgstr "demasiados argumentos para %%:compare-debug-self-opt" + +-#: gcc.c:9747 ++#: gcc.c:9750 + #, gcc-internal-format, gfc-internal-format + msgid "too few arguments to %%:compare-debug-auxbase-opt" + msgstr "faltan argumentos para %%:compare-debug-auxbase-opt" + +-#: gcc.c:9751 ++#: gcc.c:9754 + #, gcc-internal-format, gfc-internal-format + msgid "too many arguments to %%:compare-debug-auxbase-opt" + msgstr "demasiados argumentos para %%:compare-debug-auxbase-opt" + +-#: gcc.c:9758 ++#: gcc.c:9761 + #, gcc-internal-format, gfc-internal-format + msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk" + msgstr "el argumento para %%:compare-debug-auxbase-opt no termina en .gk" + +-#: gcc.c:9832 ++#: gcc.c:9835 + #, gcc-internal-format, gfc-internal-format + msgid "too few arguments to %%:replace-extension" + msgstr "faltan argumentos para %%:replace-extension" + +-#: gcc.c:9885 ++#: gcc.c:9888 + #, gcc-internal-format, gfc-internal-format + msgid "wrong number of arguments to %%:debug-level-gt" + msgstr "número erróneo de argumentos para %%:debug-level-gt" +@@ -17856,9 +17888,9 @@ + #: gimple-ssa-isolate-paths.c:413 gimple-ssa-isolate-paths.c:531 tree.c:12880 + #: tree.c:12917 c/c-typeck.c:2906 c/c-typeck.c:2990 c/c-typeck.c:9913 + #: c/c-typeck.c:9930 c/gimple-parser.c:1556 c/gimple-parser.c:1564 +-#: cp/call.c:6454 cp/call.c:7933 cp/constexpr.c:777 cp/constexpr.c:2174 +-#: cp/cvt.c:992 cp/cvt.c:1019 cp/decl.c:7224 cp/decl2.c:5072 cp/pt.c:7993 +-#: cp/semantics.c:1764 cp/typeck.c:1648 cp/typeck.c:1843 cp/typeck.c:3718 ++#: cp/call.c:6454 cp/call.c:7936 cp/constexpr.c:778 cp/constexpr.c:2190 ++#: cp/cvt.c:992 cp/cvt.c:1019 cp/decl.c:7224 cp/decl2.c:5073 cp/pt.c:8075 ++#: cp/semantics.c:1767 cp/typeck.c:1648 cp/typeck.c:1843 cp/typeck.c:3718 + #, gcc-internal-format + msgid "declared here" + msgstr "se declara aquí" +@@ -18273,227 +18305,227 @@ + msgid "attribute % not preceding a case label or default label" + msgstr "el atributo % no antecede una etiqueta case o default" + +-#: gimplify.c:3289 ++#: gimplify.c:3290 + #, gcc-internal-format + msgid "using result of function returning %" + msgstr "se usa el resultado de una función que devuelve %" + +-#: gimplify.c:5969 ++#: gimplify.c:5970 + #, gcc-internal-format, gfc-internal-format + msgid "invalid lvalue in asm output %d" + msgstr "l-valor no válido en la salida asm %d" + +-#: gimplify.c:6112 ++#: gimplify.c:6113 + #, gcc-internal-format, gfc-internal-format + msgid "non-memory input %d must stay in memory" + msgstr "la entrada que no es de memoria %d debe permanecer en memoria" + +-#: gimplify.c:6152 gimplify.c:6161 ++#: gimplify.c:6153 gimplify.c:6162 + #, gcc-internal-format, gfc-internal-format + msgid "memory input %d is not directly addressable" + msgstr "la entrada de memoria %d no es directamente direccionable" + +-#: gimplify.c:6764 ++#: gimplify.c:6767 + #, gcc-internal-format + msgid "threadprivate variable %qE used in target region" + msgstr "se usó la variable threadprivate %qE en una región objetivo" + +-#: gimplify.c:6766 ++#: gimplify.c:6769 + #, gcc-internal-format + msgid "enclosing target region" + msgstr "región objetivo contenedora" + +-#: gimplify.c:6778 ++#: gimplify.c:6781 + #, gcc-internal-format + msgid "threadprivate variable %qE used in untied task" + msgstr "se usó la variable threadprivate %qE en una tarea sin atar" + +-#: gimplify.c:6780 ++#: gimplify.c:6783 + #, gcc-internal-format + msgid "enclosing task" + msgstr "tarea contenedora" + +-#: gimplify.c:6852 ++#: gimplify.c:6855 + #, gcc-internal-format + msgid "%qE not specified in enclosing %qs" + msgstr "no se especificó %qE en el %qs que lo contiene" + +-#: gimplify.c:6854 ++#: gimplify.c:6857 + #, gcc-internal-format + msgid "enclosing %qs" + msgstr "%qs contenedora" + +-#: gimplify.c:6965 ++#: gimplify.c:6968 + #, gcc-internal-format + msgid "%qE not specified in enclosing OpenACC %qs construct" + msgstr "no se especificó %qE en la construcción OpenACC %qs que lo contiene" + +-#: gimplify.c:6967 ++#: gimplify.c:6970 + #, gcc-internal-format + msgid "enclosing OpenACC %qs construct" + msgstr "construcción OpenACC %qs que lo contiene" + +-#: gimplify.c:7018 ++#: gimplify.c:7021 + #, gcc-internal-format + msgid "%qE with % clause used in % function" + msgstr "%qE con cláusula % usada en la función %" + +-#: gimplify.c:7026 ++#: gimplify.c:7029 + #, gcc-internal-format + msgid "%qE requires a % directive for use in a % function" + msgstr "%qE requiere una directiva % para poder usarse en una función%" + +-#: gimplify.c:7092 gimplify.c:7692 ++#: gimplify.c:7095 gimplify.c:7695 + #, gcc-internal-format + msgid "variable %qE declared in enclosing % region" + msgstr "la variable %qE se declaró en la región % que la contiene" + +-#: gimplify.c:7113 ++#: gimplify.c:7116 + #, gcc-internal-format + msgid "%qD referenced in target region does not have a mappable type" + msgstr "%qD referenciada en la región de destino no tiene un tipo al que asociarla" + +-#: gimplify.c:7231 gimplify.c:7263 ++#: gimplify.c:7234 gimplify.c:7266 + #, gcc-internal-format + msgid "iteration variable %qE is predetermined linear" + msgstr "la variable de iteración %qE se predetermina lineal" + +-#: gimplify.c:7234 ++#: gimplify.c:7237 + #, gcc-internal-format + msgid "iteration variable %qE should be private" + msgstr "la variable de iteración %qE debe ser private" + +-#: gimplify.c:7248 ++#: gimplify.c:7251 + #, gcc-internal-format + msgid "iteration variable %qE should not be firstprivate" + msgstr "la variable de iteración %qE no debe ser firstprivate" + +-#: gimplify.c:7251 ++#: gimplify.c:7254 + #, gcc-internal-format + msgid "iteration variable %qE should not be reduction" + msgstr "la variable de iteración %qE no debe ser reduction" + +-#: gimplify.c:7254 ++#: gimplify.c:7257 + #, gcc-internal-format + msgid "iteration variable %qE should not be linear" + msgstr "la variable de iteración %qE no debe ser lineal" + +-#: gimplify.c:7257 ++#: gimplify.c:7260 + #, gcc-internal-format + msgid "iteration variable %qE should not be lastprivate" + msgstr "la variable de iteración %qE no debe ser lastprivate" + +-#: gimplify.c:7260 ++#: gimplify.c:7263 + #, gcc-internal-format + msgid "iteration variable %qE should not be private" + msgstr "la variable de iteración %qE no debe ser private" + +-#: gimplify.c:7562 ++#: gimplify.c:7565 + #, gcc-internal-format + msgid "% clause for variable other than loop iterator specified on construct combined with %" + msgstr "cláusula % para una variable que no es iterador de bucle especificada en una construcción combinada con %" + +-#: gimplify.c:7769 ++#: gimplify.c:7772 + #, gcc-internal-format + msgid "mapping field %qE of variable length structure" + msgstr "se asocia el campo %qE de una estructura de longitud variable" + +-#: gimplify.c:7980 ++#: gimplify.c:7983 + #, gcc-internal-format + msgid "%qE appears more than once in map clauses" + msgstr "%qE aparece más de una vez en las cláusulas map" + +-#: gimplify.c:8284 ++#: gimplify.c:8287 + #, gcc-internal-format + msgid "copyprivate variable %qE is not threadprivate or private in outer context" + msgstr "la variable copyprivate %qE no es threadprivate o private en el contexto externo" + +-#: gimplify.c:8304 ++#: gimplify.c:8307 + #, gcc-internal-format + msgid "%s variable %qE is private in outer context" + msgstr "la variable %s %qE es private en el contexto externo" + +-#: gimplify.c:8330 ++#: gimplify.c:8333 + #, gcc-internal-format + msgid "expected %qs % clause modifier rather than %qs" + msgstr "se esperaba el modificador de cláusula %qs % en vez de %qs" + +-#: gimplify.c:8596 ++#: gimplify.c:8599 + #, gcc-internal-format + msgid "%<_Atomic%> %qD in implicit % clause" + msgstr "%<_Atomic%> %qD en cláusula % implícita" + +-#: gimplify.c:8629 ++#: gimplify.c:8632 + #, gcc-internal-format + msgid "%<_Atomic%> %qD in implicit % clause on % construct" + msgstr "%<_Atomic%> %qD en cláusula % implícita en una construcción %" + +-#: gimplify.c:8802 ++#: gimplify.c:8805 + #, gcc-internal-format + msgid "%<_Atomic%> %qD in % clause on % construct" + msgstr "%<_Atomic%> %qD en cláusula % en una construcción %" + +-#: gimplify.c:8853 ++#: gimplify.c:8856 + #, gcc-internal-format + msgid "same variable used in % and % clauses on % construct" + msgstr "se ha usado la misma variable en cláusulas % y % en una construcción %" + +-#: gimplify.c:8935 ++#: gimplify.c:8938 + #, gcc-internal-format + msgid "incompatible data clause with reduction on %qE; promoting to present_or_copy" + msgstr "cláusula de datos incompatible con reducción en %qE; se promociona a present_or_copy" + +-#: gimplify.c:9080 ++#: gimplify.c:9083 + #, gcc-internal-format + msgid "invalid private reduction on %qE" + msgstr "reducción privada no válida en %qE" + +-#: gimplify.c:10904 omp-low.c:2814 ++#: gimplify.c:10907 omp-low.c:2842 + #, gcc-internal-format + msgid "% construct with % clause must be closely nested inside a loop with % clause with a parameter" + msgstr "la construcción % con cláusula % debe estar bien anidada dentro de un bucle con una cláusula % con un parámetro" + +-#: gimplify.c:10922 ++#: gimplify.c:10925 + #, gcc-internal-format + msgid "variable %qE is not an iteration of outermost loop %d, expected %qE" + msgstr "la variable %qE no es una iteración del bucle más externo %d; se esperaba %qE" + +-#: gimplify.c:10935 ++#: gimplify.c:10938 + #, gcc-internal-format + msgid "number of variables in % clause does not match number of iteration variables" + msgstr "el número de variables en la cláusula % no coincide con el número de variables de iteración" + +-#: gimplify.c:10948 ++#: gimplify.c:10951 + #, gcc-internal-format + msgid "more than one % clause on an % construct" + msgstr "más de una cláusula % en una construcción %" + +-#: gimplify.c:10959 ++#: gimplify.c:10962 + #, gcc-internal-format + msgid "% clause specified together with % clauses on the same construct" + msgstr "cláusula % especificada junto con cláusulas % en la misma construcción" + +-#: gimplify.c:11902 ++#: gimplify.c:11905 + #, gcc-internal-format + msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>" + msgstr "se esperaba %<_Cilk_spawn%> antes de %<_Cilk_sync%>" + +-#: gimplify.c:12201 ++#: gimplify.c:12204 + #, gcc-internal-format + msgid "gimplification failed" + msgstr "falló la gimplificación" + +-#: gimplify.c:12729 ++#: gimplify.c:12732 + #, gcc-internal-format + msgid "%qT is promoted to %qT when passed through %<...%>" + msgstr "%qT se promueve a %qT cuando pasa a través de %<...%>" + +-#: gimplify.c:12734 ++#: gimplify.c:12737 + #, gcc-internal-format + msgid "(so you should pass %qT not %qT to %)" + msgstr "(así que debe pasar %qT y no %qT a %)" + +-#: gimplify.c:12741 ++#: gimplify.c:12744 + #, gcc-internal-format + msgid "if this code is reached, the program will abort" + msgstr "si se alcanza este código, el programa abortará" +@@ -18725,8 +18757,9 @@ + msgstr "tipos con número de parámetros diferentes" + + #: ipa-devirt.c:1229 +-#, gcc-internal-format +-msgid "type %qT itself violate the C++ One Definition Rule" ++#, fuzzy, gcc-internal-format ++#| msgid "type %qT itself violate the C++ One Definition Rule" ++msgid "type %qT itself violates the C++ One Definition Rule" + msgstr "el propio tipo %qT viola la regla de una sola definición de C++" + + #: ipa-devirt.c:1235 +@@ -18825,8 +18858,9 @@ + msgstr "hay un campo con el mismo nombre pero distinto tipo definido en otra unidad de traducción" + + #: ipa-devirt.c:1576 +-#, gcc-internal-format +-msgid "fields has different layout in another translation unit" ++#, fuzzy, gcc-internal-format ++#| msgid "fields has different layout in another translation unit" ++msgid "fields have different layout in another translation unit" + msgstr "los campos tienen distinta disposición en otra unidad de translación" + + #: ipa-devirt.c:1599 +@@ -19208,198 +19242,198 @@ + msgid "multiple loop axes specified for routine" + msgstr "se especificaron múltiples ejes de bucle para la rutina" + +-#: omp-low.c:2120 omp-offload.c:1124 ++#: omp-low.c:2148 omp-offload.c:1124 + #, gcc-internal-format + msgid "% overrides other OpenACC loop specifiers" + msgstr "% ignora otros especificadores de bucle OpenACC" + +-#: omp-low.c:2123 omp-offload.c:1125 ++#: omp-low.c:2151 omp-offload.c:1125 + #, gcc-internal-format + msgid "% conflicts with other OpenACC loop specifiers" + msgstr "% está en conflicto con otros especificadores de bucle OpenACC" + +-#: omp-low.c:2127 omp-offload.c:1159 ++#: omp-low.c:2155 omp-offload.c:1159 + #, gcc-internal-format + msgid "inner loop uses same OpenACC parallelism as containing loop" + msgstr "el bucle interno usa el mismo paralelismo OpenACC que el bucle que lo contiene" + +-#: omp-low.c:2174 ++#: omp-low.c:2202 + #, gcc-internal-format + msgid "argument not permitted on %qs clause in OpenACC %" + msgstr "argumento no permitido en la cláusula %qs en OpenACC %" + +-#: omp-low.c:2443 ++#: omp-low.c:2471 + #, gcc-internal-format + msgid "non-OpenACC construct inside of OpenACC routine" + msgstr "construcción no OpenACC dentro de rutina OpenACC" + +-#: omp-low.c:2452 ++#: omp-low.c:2480 + #, gcc-internal-format + msgid "non-OpenACC construct inside of OpenACC region" + msgstr "construcción no OpenACC dentro de región OpenACC" + +-#: omp-low.c:2477 ++#: omp-low.c:2505 + #, gcc-internal-format + msgid "% must be closely nested inside of % region" + msgstr "% debe estar estar bien anidada dentro de la región %" + +-#: omp-low.c:2485 ++#: omp-low.c:2513 + #, gcc-internal-format + msgid "OpenMP constructs other than %<#pragma omp ordered simd%> may not be nested inside % region" + msgstr "Las construcciones OpenACC distintas de %<#pragma omp ordered simd%> pueden no estar anidadas dentro de la región %" + +-#: omp-low.c:2497 ++#: omp-low.c:2525 + #, gcc-internal-format + msgid "only % or % regions are allowed to be strictly nested inside % region" + msgstr "solamente a las regiones % o % se les permite estar estrictamente anidadas dentro de la región %" + +-#: omp-low.c:2514 ++#: omp-low.c:2542 + #, gcc-internal-format + msgid "% region must be strictly nested inside % construct" + msgstr "las regiones % deben estar estrictamente anidadas dentro de construcciones %" + +-#: omp-low.c:2555 ++#: omp-low.c:2583 + #, gcc-internal-format + msgid "OpenACC loop directive must be associated with an OpenACC compute region" + msgstr "la directiva de bucle OpenACC debe estar asociada a una región de cómputo OpenACC" + +-#: omp-low.c:2577 ++#: omp-low.c:2605 + #, gcc-internal-format + msgid "orphaned %qs construct" + msgstr "construcción %qs huérfana" + +-#: omp-low.c:2606 ++#: omp-low.c:2634 + #, gcc-internal-format + msgid "%<#pragma omp cancel for%> inside % for construct" + msgstr "%<#pragma omp cancel for%> dentro de % para construcción" + +-#: omp-low.c:2611 ++#: omp-low.c:2639 + #, gcc-internal-format + msgid "%<#pragma omp cancel for%> inside % for construct" + msgstr "%<#pragma omp cancel for%> dentro de % para construcción" + +-#: omp-low.c:2631 omp-low.c:2644 ++#: omp-low.c:2659 omp-low.c:2672 + #, gcc-internal-format + msgid "%<#pragma omp cancel sections%> inside % sections construct" + msgstr "%<#pragma omp cancel section%> dentro de contrucción de secciones %" + +-#: omp-low.c:2670 ++#: omp-low.c:2698 + #, gcc-internal-format + msgid "%<%s taskgroup%> construct not closely nested inside of % region" + msgstr "la construcción %<%s taskgroup%> no está bien anidada dentro de la región %" + +-#: omp-low.c:2684 ++#: omp-low.c:2712 + #, gcc-internal-format + msgid "invalid arguments" + msgstr "argumentos no válidos" + +-#: omp-low.c:2690 ++#: omp-low.c:2718 + #, gcc-internal-format + msgid "%<%s %s%> construct not closely nested inside of %qs" + msgstr "la construcción %<%s %s%> no está bien anidada dentro de %qs" + +-#: omp-low.c:2718 ++#: omp-low.c:2746 + #, gcc-internal-format + msgid "barrier region may not be closely nested inside of work-sharing, %, %, %, explicit % or % region" + msgstr "la región de barrera puede no estar bien anidada dentro de la región de trabajo compartido, %, %, %, % explícita o región %" + +-#: omp-low.c:2725 ++#: omp-low.c:2753 + #, gcc-internal-format + msgid "work-sharing region may not be closely nested inside of work-sharing, %, %, %, explicit % or % region" + msgstr "la región de trabajo compartido puede no estar bien anidada dentro de la región de trabajo compartido, %, %, %, % explícita o región %" + +-#: omp-low.c:2754 ++#: omp-low.c:2782 + #, gcc-internal-format + msgid "% region may not be closely nested inside of work-sharing, explicit % or % region" + msgstr "la región % puede no estar bien anidada dentro de la región de trabajo compartido, de % explícita o de región %" + +-#: omp-low.c:2778 omp-low.c:2917 ++#: omp-low.c:2806 omp-low.c:2945 + #, gcc-internal-format + msgid "% is only allowed in %" + msgstr "% solo se permite en %" + +-#: omp-low.c:2806 ++#: omp-low.c:2834 + #, gcc-internal-format + msgid "% construct with % clause must be closely nested inside an % loop" + msgstr "la construcción % con la cláusula % debe estar bien anidada dentro de un bucle %" + +-#: omp-low.c:2823 ++#: omp-low.c:2851 + #, gcc-internal-format + msgid "invalid depend kind in omp % %" + msgstr "" + +-#: omp-low.c:2838 ++#: omp-low.c:2866 + #, gcc-internal-format + msgid "% % must be closely nested inside % region" + msgstr "% % debe estar bien anidada dentro de una región %" + +-#: omp-low.c:2851 ++#: omp-low.c:2879 + #, gcc-internal-format + msgid "% region may not be closely nested inside of %, %, explicit % or % region" + msgstr "la región % puede no estar bien anidada dentro de la región %, %, explicit % o %" + +-#: omp-low.c:2862 omp-low.c:2875 ++#: omp-low.c:2890 omp-low.c:2903 + #, gcc-internal-format + msgid "% region must be closely nested inside a loop region with an % clause" + msgstr "la región % debe estar bien anidada dentro de una región de bucle con una cláusula %" + +-#: omp-low.c:2892 ++#: omp-low.c:2920 + #, gcc-internal-format + msgid "% region may not be nested inside a % region with the same name" + msgstr "la región % puede no estar bien anidada dentro de una región % con el mismo nombre" + +-#: omp-low.c:2904 ++#: omp-low.c:2932 + #, gcc-internal-format + msgid "% construct not closely nested inside of % construct" + msgstr "construcción % no bien anidada dentro de construcción %" + +-#: omp-low.c:2925 ++#: omp-low.c:2953 + #, gcc-internal-format + msgid "OpenACC region inside of OpenACC routine, nested parallelism not supported yet" + msgstr "región OpenACC dentro de rutina OpenACC; el paralelismo anidado aún no se permite" + +-#: omp-low.c:2938 ++#: omp-low.c:2966 + #, gcc-internal-format + msgid "OpenACC construct inside of non-OpenACC region" + msgstr "construcción OpenACC dentro de región no OpenACC" + +-#: omp-low.c:2983 ++#: omp-low.c:3011 + #, gcc-internal-format + msgid "%s %qs construct inside of %s %qs region" + msgstr "construcción %s %qs dentro de región %s %qs" + +-#: omp-low.c:2996 omp-low.c:3003 ++#: omp-low.c:3024 omp-low.c:3031 + #, gcc-internal-format + msgid "%qs construct inside of %qs region" + msgstr "construcción %qs dentro de región %qs" + +-#: omp-low.c:3115 ++#: omp-low.c:3143 + #, gcc-internal-format + msgid "setjmp/longjmp inside simd construct" + msgstr "setjmp/longjmp dentro de construcción simd" + +-#: omp-low.c:6341 ++#: omp-low.c:6379 + #, gcc-internal-format + msgid "ignoring sink clause with offset that is not a multiple of the loop step" + msgstr "se hace caso omiso de cláusula sumidero con desplazamiento que no es múltiplo del paso del bucle" + +-#: omp-low.c:6364 ++#: omp-low.c:6402 + #, gcc-internal-format + msgid "first offset must be in opposite direction of loop iterations" + msgstr "el primer desplazamiento debe estar en dirección opuesta a las iteraciones del bucle" + +-#: omp-low.c:9087 ++#: omp-low.c:9125 + #, gcc-internal-format, gfc-internal-format + msgid "invalid exit from %s structured block" + msgstr "salida no válida de un bloque estructurado %s" + +-#: omp-low.c:9089 omp-low.c:9094 ++#: omp-low.c:9127 omp-low.c:9132 + #, gcc-internal-format, gfc-internal-format + msgid "invalid entry to %s structured block" + msgstr "entrada no válida a un bloque estructurado %s" + + #. Otherwise, be vague and lazy, but efficient. +-#: omp-low.c:9098 ++#: omp-low.c:9136 + #, gcc-internal-format, gfc-internal-format + msgid "invalid branch to/from %s structured block" + msgstr "ramificación no válida desde/para un bloque estructurado %s" +@@ -19485,7 +19519,7 @@ + msgid "command line option %qs is not supported by this configuration" + msgstr "la opción de línea de órdenes %qs no se admite en esta configuración" + +-#: opts-common.c:1129 opts.c:1773 ++#: opts-common.c:1129 opts.c:1780 + #, gcc-internal-format + msgid "missing argument to %qs" + msgstr "faltan argumentos para %qs" +@@ -19641,127 +19675,139 @@ + msgid "-fsanitize-address-use-after-scope requires -fstack-reuse=none option" + msgstr "-fsanitize-address-use-after-scope requiere -fstack-reuse=none option" + +-#: opts.c:1410 ++#: opts.c:1012 ++#, fuzzy, gcc-internal-format ++#| msgid "transactional memory is not supported with non-call exceptions" ++msgid "transactional memory is not supported with %<-fsanitize=address%>" ++msgstr "la memoria transaccional no se admite con excepciones que no son llamada" ++ ++#: opts.c:1015 ++#, fuzzy, gcc-internal-format ++#| msgid "transactional memory is not supported with non-call exceptions" ++msgid "transactional memory is not supported with %<-fsanitize=kernel-address%>" ++msgstr "la memoria transaccional no se admite con excepciones que no son llamada" ++ ++#: opts.c:1417 + #, gcc-internal-format + msgid "unrecognized include_flags 0x%x passed to print_specific_help" + msgstr "no se reconocen las include_flags 0x%x pasadas a print_specific_help" + +-#: opts.c:1610 ++#: opts.c:1617 + #, gcc-internal-format + msgid "-fsanitize=all option is not valid" + msgstr "la opción -fsanitize=all no es válida" + +-#: opts.c:1642 ++#: opts.c:1649 + #, gcc-internal-format + msgid "unrecognized argument to -f%ssanitize%s= option: %q.*s; did you mean %qs?" + msgstr "no se reconoce el argumento para la opción -f%ssanitize%s=: %q.*s; ¿quiso decir %qs?" + +-#: opts.c:1649 ++#: opts.c:1656 + #, gcc-internal-format + msgid "unrecognized argument to -f%ssanitize%s= option: %q.*s" + msgstr "no se reconoce el argumento para la opción -f%ssanitize%s=: %q.*s" + +-#: opts.c:1828 ++#: opts.c:1835 + #, gcc-internal-format + msgid "--help argument %q.*s is ambiguous, please be more specific" + msgstr "el argumento %q.*s de --help es ambiguo, por favor sea más específico" + +-#: opts.c:1837 ++#: opts.c:1844 + #, gcc-internal-format + msgid "unrecognized argument to --help= option: %q.*s" + msgstr "no se reconoce el argumento para la opción --help=: %q.*s" + +-#: opts.c:2078 ++#: opts.c:2085 + #, gcc-internal-format + msgid "HSA has not been enabled during configuration" + msgstr "HSA no se activó durante la configuración" + +-#: opts.c:2090 ++#: opts.c:2097 + #, gcc-internal-format + msgid "-foffload-abi option can be specified only for offload compiler" + msgstr "la opción -foffload-abi solo puede especificarse para compilador de descarga" + +-#: opts.c:2098 ++#: opts.c:2105 + #, gcc-internal-format, gfc-internal-format + msgid "structure alignment must be a small power of two, not %d" + msgstr "la alineación de la estructura debe ser una potencia pequeña de dos, no %d" + +-#: opts.c:2217 ++#: opts.c:2224 + #, gcc-internal-format + msgid "unknown stack check parameter %qs" + msgstr "parámetro de revisión de pila desconocido %qs" + +-#: opts.c:2249 ++#: opts.c:2256 + #, gcc-internal-format + msgid "%<-gdwarf%s%> is ambiguous; use %<-gdwarf-%s%> for DWARF version or %<-gdwarf -g%s%> for debug level" + msgstr "%<-gdwarf%s%> es ambiguo; use %<-gdwarf-%s%> para la versión DWARF o %<-gdwarf -g%s%> para nivel de depuración" + +-#: opts.c:2260 ++#: opts.c:2267 + #, gcc-internal-format, gfc-internal-format + msgid "dwarf version %d is not supported" + msgstr "no se admite dwarf versión %d" + +-#: opts.c:2360 ++#: opts.c:2367 + #, gcc-internal-format, gfc-internal-format + msgid "%s: --param arguments should be of the form NAME=VALUE" + msgstr "%s: los argumentos --param deben ser de la forma NOMBRE=VALOR" + +-#: opts.c:2371 ++#: opts.c:2378 + #, gcc-internal-format + msgid "invalid --param name %qs; did you mean %qs?" + msgstr "nombre de --param %qs no válido; ¿quiso decir %qs?" + +-#: opts.c:2374 ++#: opts.c:2381 + #, gcc-internal-format + msgid "invalid --param name %qs" + msgstr "nombre de --param %qs no válido" + +-#: opts.c:2382 ++#: opts.c:2389 + #, gcc-internal-format + msgid "invalid --param value %qs" + msgstr "valor de --param %qs no válido" + +-#: opts.c:2504 ++#: opts.c:2511 + #, gcc-internal-format + msgid "target system does not support debug output" + msgstr "el sistema objetivo no admite salida de depuración" + +-#: opts.c:2513 ++#: opts.c:2520 + #, gcc-internal-format + msgid "debug format %qs conflicts with prior selection" + msgstr "el formato de depuración %qs genera un conflicto con una selección previa" + +-#: opts.c:2531 ++#: opts.c:2538 + #, gcc-internal-format + msgid "unrecognized debug output level %qs" + msgstr "no se reconoce el nivel de salida de depuración %qs" + +-#: opts.c:2533 ++#: opts.c:2540 + #, gcc-internal-format + msgid "debug output level %qs is too high" + msgstr "el nivel de salida de depuración %qs es demasiado elevado" + +-#: opts.c:2553 ++#: opts.c:2560 + #, gcc-internal-format + msgid "getting core file size maximum limit: %m" + msgstr "obteniendo el límite del tamaño máximo del fichero core: %m" + +-#: opts.c:2557 ++#: opts.c:2564 + #, gcc-internal-format + msgid "setting core file size limit to maximum: %m" + msgstr "estableciendo el límite del tamaño máximo del fichero core: %m" + +-#: opts.c:2602 ++#: opts.c:2609 + #, gcc-internal-format, gfc-internal-format + msgid "unrecognized gcc debugging option: %c" + msgstr "no se reconoce la opción de depuración de gcc: %c" + +-#: opts.c:2627 ++#: opts.c:2634 + #, gcc-internal-format, gfc-internal-format + msgid "-Werror=%s: no option -%s" + msgstr "-Werror=%s: no existe la opción -%s" + +-#: opts.c:2629 ++#: opts.c:2636 + #, gcc-internal-format, gfc-internal-format + msgid "-Werror=%s: -%s is not an option that controls warnings" + msgstr "-Werror=%s: -%s no es una opción para controlar avisos" +@@ -20107,7 +20153,7 @@ + msgid "register of %qD used for multiple global register variables" + msgstr "se usó el registro de %qD para múltiples variables de registro globales" + +-#: reginfo.c:789 config/rs6000/rs6000.c:31768 ++#: reginfo.c:789 config/rs6000/rs6000.c:31817 + #, gcc-internal-format + msgid "conflicts with %qD" + msgstr "genera un conflicto con %qD" +@@ -20709,12 +20755,12 @@ + msgid "error closing %s: %m" + msgstr "error al cerrar %s: %m" + +-#: toplev.c:2054 ++#: toplev.c:2057 + #, gcc-internal-format + msgid "self-tests incompatible with -E" + msgstr "self-tests es incompatible con -E" + +-#: toplev.c:2069 ++#: toplev.c:2072 + #, gcc-internal-format + msgid "self-tests are not enabled in this build" + msgstr "self-tests no están activadas en este build" +@@ -21625,47 +21671,47 @@ + msgid "in expansion of macro %qs" + msgstr "en expansión de macro %qs" + +-#: tree-eh.c:4669 ++#: tree-eh.c:4684 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i has multiple EH edges" + msgstr "el BB %i tiene múltiples bordes EH" + +-#: tree-eh.c:4681 ++#: tree-eh.c:4696 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i can not throw but has an EH edge" + msgstr "el BB %i no puede hacer throw pero tiene un borde EH" + +-#: tree-eh.c:4689 ++#: tree-eh.c:4704 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i last statement has incorrectly set lp" + msgstr "la última sentencia del BB %i tiene establecido incorrectamente lp" + +-#: tree-eh.c:4695 ++#: tree-eh.c:4710 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i is missing an EH edge" + msgstr "al BB %i le falta un borde EH" + +-#: tree-eh.c:4701 ++#: tree-eh.c:4716 + #, gcc-internal-format, gfc-internal-format + msgid "Incorrect EH edge %i->%i" + msgstr "Borde EH %i->%i incorrecto" + +-#: tree-eh.c:4735 tree-eh.c:4754 ++#: tree-eh.c:4750 tree-eh.c:4769 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i is missing an edge" + msgstr "al BB %i le falta un borde" + +-#: tree-eh.c:4771 ++#: tree-eh.c:4786 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i too many fallthru edges" + msgstr "BB %i demasiados bordes de respaldo" + +-#: tree-eh.c:4780 ++#: tree-eh.c:4795 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i has incorrect edge" + msgstr "BB %i tiene un borde incorrecto" + +-#: tree-eh.c:4786 ++#: tree-eh.c:4801 + #, gcc-internal-format, gfc-internal-format + msgid "BB %i has incorrect fallthru edge" + msgstr "BB %i tiene un borde de respaldo incorrecto" +@@ -21766,32 +21812,32 @@ + msgid "target does not support atomic profile update, single mode is selected" + msgstr "el objetivo no admite actualización de perfil atómica; se selecciona el modo sencillo" + +-#: tree-ssa-ccp.c:3422 ++#: tree-ssa-ccp.c:3420 + #, gcc-internal-format, gfc-internal-format + msgid "argument %u null where non-null expected" + msgstr "argumento %u nulo donde se esperaba no nulo" + +-#: tree-ssa-ccp.c:3427 ++#: tree-ssa-ccp.c:3425 + #, gcc-internal-format + msgid "in a call to built-in function %qD" + msgstr "en una llamada a la función interna %qD" + +-#: tree-ssa-ccp.c:3431 ++#: tree-ssa-ccp.c:3429 + #, gcc-internal-format + msgid "in a call to function %qD declared here" + msgstr "en una llamada a la función %qD declarada aquí" + +-#: tree-ssa-loop-niter.c:2367 ++#: tree-ssa-loop-niter.c:2416 + #, gcc-internal-format + msgid "missed loop optimization, the loop counter may overflow" + msgstr "faltó optimizar el bucle, el contador de bucles se puede desbordar" + +-#: tree-ssa-loop-niter.c:2964 ++#: tree-ssa-loop-niter.c:3013 + #, gcc-internal-format, gfc-internal-format + msgid "iteration %s invokes undefined behavior" + msgstr "la iteración %s invoca comportamiento indefinido" + +-#: tree-ssa-loop-niter.c:2965 ++#: tree-ssa-loop-niter.c:3014 + #, gcc-internal-format + msgid "within this loop" + msgstr "dentro de este bucle" +@@ -22145,11 +22191,11 @@ + #: c-family/c-attribs.c:2898 c-family/c-attribs.c:2937 + #: c-family/c-attribs.c:3019 c-family/c-attribs.c:3062 + #: c-family/c-attribs.c:3078 c-family/c-attribs.c:3172 +-#: c-family/c-common.c:5631 config/darwin.c:2062 config/arm/arm.c:6741 +-#: config/arm/arm.c:6769 config/arm/arm.c:6786 config/avr/avr.c:9460 +-#: config/h8300/h8300.c:5480 config/h8300/h8300.c:5504 config/i386/i386.c:7715 +-#: config/i386/i386.c:41425 config/ia64/ia64.c:762 +-#: config/rs6000/rs6000.c:35369 config/spu/spu.c:3741 ++#: c-family/c-common.c:5631 config/darwin.c:2062 config/arm/arm.c:6719 ++#: config/arm/arm.c:6747 config/arm/arm.c:6764 config/avr/avr.c:9475 ++#: config/h8300/h8300.c:5480 config/h8300/h8300.c:5504 config/i386/i386.c:7721 ++#: config/i386/i386.c:41466 config/ia64/ia64.c:762 ++#: config/rs6000/rs6000.c:35418 config/spu/spu.c:3741 + #: ada/gcc-interface/utils.c:6124 ada/gcc-interface/utils.c:6141 + #: ada/gcc-interface/utils.c:6157 ada/gcc-interface/utils.c:6183 + #: lto/lto-lang.c:241 +@@ -23116,7 +23162,7 @@ + msgid "type was previously declared %qE" + msgstr "el tipo se declaró previamente %qE" + +-#: c-family/c-attribs.c:2524 cp/class.c:4715 ++#: c-family/c-attribs.c:2524 cp/class.c:4717 + #, gcc-internal-format + msgid "% may only be specified for a virtual function" + msgstr "% solo se puede especificar para funciones virtuales" +@@ -23391,7 +23437,7 @@ + msgid "the compiler can assume that the address of %qD will always evaluate to %" + msgstr "el compilador puede asumir que la dirección de %qD siempre se evaluará como %" + +-#: c-family/c-common.c:3427 cp/semantics.c:660 cp/typeck.c:8608 ++#: c-family/c-common.c:3427 cp/semantics.c:660 cp/typeck.c:8609 + #, gcc-internal-format + msgid "suggest parentheses around assignment used as truth value" + msgstr "se sugieren paréntesis alrededor de la asignación usada como valor verdadero" +@@ -24010,62 +24056,62 @@ + msgid "extra type qualifiers in format argument (argument %d)" + msgstr "calificadores de tipo extra en el argumento de formato (argumento %d)" + +-#: c-family/c-format.c:3469 ++#: c-family/c-format.c:3475 + #, gcc-internal-format + msgid "%s %<%s%.*s%> expects argument of type %<%s%s%>, but argument %d has type %qT" + msgstr "%s %<%s%.*s%> espera un argumento de tipo %<%s%s%>, pero el argumento %d es de tipo %qT" + +-#: c-family/c-format.c:3479 ++#: c-family/c-format.c:3485 + #, gcc-internal-format + msgid "%s %<%s%.*s%> expects a matching %<%s%s%> argument" + msgstr "%s %<%s%.*s%> espera un argumento %<%s%s%> coincidente" + +-#: c-family/c-format.c:3490 ++#: c-family/c-format.c:3496 + #, gcc-internal-format + msgid "%s %<%s%.*s%> expects argument of type %<%T%s%>, but argument %d has type %qT" + msgstr "%s %<%s%.*s%> espera un argumento de tipo %<%T%s%>, pero el argumento %d es de tipo %qT" + +-#: c-family/c-format.c:3500 ++#: c-family/c-format.c:3506 + #, gcc-internal-format + msgid "%s %<%s%.*s%> expects a matching %<%T%s%> argument" + msgstr "%s %<%s%.*s%> espera un argumento %<%T%s%> coincidente" + +-#: c-family/c-format.c:3562 c-family/c-format.c:3568 c-family/c-format.c:3719 ++#: c-family/c-format.c:3568 c-family/c-format.c:3574 c-family/c-format.c:3725 + #, gcc-internal-format + msgid "%<__gcc_host_wide_int__%> is not defined as a type" + msgstr "%<__gcc_host_wide_int__%> no se define como un tipo" + +-#: c-family/c-format.c:3575 c-family/c-format.c:3729 ++#: c-family/c-format.c:3581 c-family/c-format.c:3735 + #, gcc-internal-format + msgid "%<__gcc_host_wide_int__%> is not defined as % or %" + msgstr "%<__gcc_host_wide_int__%> no se define como % o %" + +-#: c-family/c-format.c:3625 ++#: c-family/c-format.c:3631 + #, gcc-internal-format + msgid "% is not defined as a type" + msgstr "% no se define como un tipo" + +-#: c-family/c-format.c:3678 ++#: c-family/c-format.c:3684 + #, gcc-internal-format + msgid "% is not defined as a type" + msgstr "% no se define como un tipo" + +-#: c-family/c-format.c:3695 ++#: c-family/c-format.c:3701 + #, gcc-internal-format + msgid "% is not defined as a type" + msgstr "% no se define como un tipo" + +-#: c-family/c-format.c:3700 ++#: c-family/c-format.c:3706 + #, gcc-internal-format + msgid "% is not defined as a pointer type" + msgstr "% no se define como un tipo puntero" + +-#: c-family/c-format.c:3973 ++#: c-family/c-format.c:3979 + #, gcc-internal-format + msgid "args to be formatted is not %<...%>" + msgstr "los argumentos que recibirán formato no son %<...%>" + +-#: c-family/c-format.c:3985 ++#: c-family/c-format.c:3991 + #, gcc-internal-format + msgid "strftime formats cannot format arguments" + msgstr "los formatos de strftime no pueden dar formato a los argumentos" +@@ -24166,7 +24212,7 @@ + msgid "repeated %<@%> before Objective-C string" + msgstr "%<@%> repetida antes de la cadena Objective-C" + +-#: c-family/c-lex.c:1191 cp/parser.c:3974 ++#: c-family/c-lex.c:1191 cp/parser.c:3976 + #, gcc-internal-format + msgid "unsupported non-standard concatenation of string literals" + msgstr "no se admite la concatenación no estándar de literales de cadena" +@@ -24196,7 +24242,7 @@ + msgid "%<#pragma omp atomic capture%> uses two different variables for memory" + msgstr "%<#pragma omp atomic capture%> usa dos variables diferentes para la memoria" + +-#: c-family/c-omp.c:485 cp/semantics.c:8196 ++#: c-family/c-omp.c:485 cp/semantics.c:8209 + #, gcc-internal-format + msgid "invalid type for iteration variable %qE" + msgstr "tipo no válido para la variable de iteración %qE" +@@ -24211,22 +24257,22 @@ + msgid "%qE is not initialized" + msgstr "%qE no está inicializado" + +-#: c-family/c-omp.c:527 cp/semantics.c:8084 ++#: c-family/c-omp.c:527 cp/semantics.c:8097 + #, gcc-internal-format + msgid "missing controlling predicate" + msgstr "falta el predicado controlador" + +-#: c-family/c-omp.c:612 cp/semantics.c:7740 ++#: c-family/c-omp.c:612 cp/semantics.c:7753 + #, gcc-internal-format + msgid "invalid controlling predicate" + msgstr "predicado controlador no válido" + +-#: c-family/c-omp.c:619 cp/semantics.c:8090 ++#: c-family/c-omp.c:619 cp/semantics.c:8103 + #, gcc-internal-format + msgid "missing increment expression" + msgstr "falta la expresión de incremento" + +-#: c-family/c-omp.c:683 cp/semantics.c:7855 ++#: c-family/c-omp.c:683 cp/semantics.c:7868 + #, gcc-internal-format + msgid "invalid increment expression" + msgstr "expresión de incremento no válida" +@@ -24771,8 +24817,8 @@ + msgid "wrong type argument to %s" + msgstr "argumento de tipo erróneo para %s" + +-#: c-family/c-warn.c:49 c-family/c-warn.c:62 cp/constexpr.c:1757 +-#: cp/constexpr.c:3911 ++#: c-family/c-warn.c:49 c-family/c-warn.c:62 cp/constexpr.c:1773 ++#: cp/constexpr.c:3935 + #, gcc-internal-format + msgid "overflow in constant expression" + msgstr "desbordamiento en la expresión constante" +@@ -25449,7 +25495,7 @@ + msgid "this condition has identical branches" + msgstr "esta condición tiene bifurcaciones idénticas" + +-#: c-family/cilk.c:93 cp/parser.c:6570 ++#: c-family/cilk.c:93 cp/parser.c:6575 + #, gcc-internal-format + msgid "%<_Cilk_spawn%> may only be used inside a function" + msgstr "%<_Cilk_spawn%> sólo se puede usar dentro de una función" +@@ -25611,7 +25657,7 @@ + msgid "-march=%s: unsupported ISA substring %qs" + msgstr "-march=%s: subcadena ISA %qs no válida" + +-#: common/config/rs6000/rs6000-common.c:174 config/sparc/sparc.c:1371 ++#: common/config/rs6000/rs6000-common.c:174 config/sparc/sparc.c:1482 + #, gcc-internal-format, gfc-internal-format + msgid "unknown -mdebug-%s switch" + msgstr "interruptor -mdebug-%s desconocido" +@@ -25938,7 +25984,7 @@ + msgid "%Kargument %d must be a constant immediate" + msgstr "el %Kargumento %d debe ser un inmediato constante" + +-#: config/aarch64/aarch64-builtins.c:1160 config/arm/arm-builtins.c:2471 ++#: config/aarch64/aarch64-builtins.c:1160 config/arm/arm-builtins.c:2476 + #, gcc-internal-format + msgid "%Klane index must be a constant immediate" + msgstr "el índice %Klane debe ser un inmediato constante" +@@ -26025,7 +26071,7 @@ + msgid "unknown value %qs for -mtune" + msgstr "valor %qs desconocido para -mtune" + +-#: config/aarch64/aarch64.c:8929 config/arm/arm.c:3094 ++#: config/aarch64/aarch64.c:8929 config/arm/arm.c:3072 + #, gcc-internal-format, gfc-internal-format + msgid "switch -mcpu=%s conflicts with -march=%s switch" + msgstr "la opción -mcpu=%s genera un conflicto con la opción -march=%s" +@@ -26112,9 +26158,9 @@ + msgid "target %s %s=%s is not valid" + msgstr "el objetivo %s %s=%s no es válido" + +-#: config/aarch64/aarch64.c:9544 config/arm/arm.c:30411 +-#: config/i386/i386.c:6772 config/rs6000/rs6000.c:39283 +-#: config/s390/s390.c:15017 ++#: config/aarch64/aarch64.c:9544 config/arm/arm.c:30400 ++#: config/i386/i386.c:6778 config/rs6000/rs6000.c:39332 ++#: config/s390/s390.c:15024 + #, fuzzy, gcc-internal-format + #| msgid "attribute %qE argument not a string" + msgid "attribute % argument not a string" +@@ -26202,7 +26248,7 @@ + msgstr "valor %qs erróneo para -mmemory-latency" + + #: config/alpha/alpha.c:6663 config/alpha/alpha.c:6666 config/arc/arc.c:5816 +-#: config/arc/arc.c:6095 config/s390/s390.c:873 config/tilegx/tilegx.c:3542 ++#: config/arc/arc.c:6095 config/s390/s390.c:876 config/tilegx/tilegx.c:3542 + #: config/tilepro/tilepro.c:3106 + #, gcc-internal-format + msgid "bad builtin fcode" +@@ -26379,235 +26425,235 @@ + msgid "insn addresses not freed" + msgstr "direcciones de insn no liberadas" + +-#: config/arm/arm-builtins.c:2349 ++#: config/arm/arm-builtins.c:2354 + #, fuzzy, gcc-internal-format + #| msgid "nested functions not supported on this target" + msgid "this builtin is not supported for this target" + msgstr "no se admiten funciones anidadas en este objetivo" + +-#: config/arm/arm-builtins.c:2454 ++#: config/arm/arm-builtins.c:2459 + #, gcc-internal-format + msgid "You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use these intrinsics." + msgstr "Debe activar las instrucciones NEON (e.g. -mfloat-abi=softfp -mfpu=neon) para usar estos intrínsecos." + +-#: config/arm/arm-builtins.c:2492 ++#: config/arm/arm-builtins.c:2497 + #, gcc-internal-format + msgid "You must enable VFP instructions to use these intrinsics." + msgstr "Debe activar las instrucciones VFP para usar estos intrínsecos." + +-#: config/arm/arm-builtins.c:2552 ++#: config/arm/arm-builtins.c:2557 + #, gcc-internal-format + msgid "You must enable crypto instructions (e.g. include -mfloat-abi=softfp -mfpu=crypto-neon...) to use these intrinsics." + msgstr "Debe activar las instrucciones crypto (e.g. include -mfloat-abi=softfp -mfpu=crypto-neon...) para usar estos intrínsecos." + + #. @@@ better error message +-#: config/arm/arm-builtins.c:2610 config/arm/arm-builtins.c:2714 ++#: config/arm/arm-builtins.c:2615 config/arm/arm-builtins.c:2719 + #, gcc-internal-format + msgid "selector must be an immediate" + msgstr "el selector debe ser un inmediato" + +-#: config/arm/arm-builtins.c:2618 config/arm/arm-builtins.c:2663 +-#: config/arm/arm-builtins.c:2721 config/arm/arm-builtins.c:2730 ++#: config/arm/arm-builtins.c:2623 config/arm/arm-builtins.c:2668 ++#: config/arm/arm-builtins.c:2726 config/arm/arm-builtins.c:2735 + #, gcc-internal-format + msgid "the range of selector should be in 0 to 7" + msgstr "el rango del selector debe estar entre 0 y 7" + +-#: config/arm/arm-builtins.c:2623 config/arm/arm-builtins.c:2732 ++#: config/arm/arm-builtins.c:2628 config/arm/arm-builtins.c:2737 + #, gcc-internal-format + msgid "the range of selector should be in 0 to 3" + msgstr "el rango del selector debe estar entre 0 y 3" + +-#: config/arm/arm-builtins.c:2628 config/arm/arm-builtins.c:2734 ++#: config/arm/arm-builtins.c:2633 config/arm/arm-builtins.c:2739 + #, gcc-internal-format + msgid "the range of selector should be in 0 to 1" + msgstr "el rango del selector debe estar entre 0 y 1" + +-#: config/arm/arm-builtins.c:2800 ++#: config/arm/arm-builtins.c:2805 + #, gcc-internal-format + msgid "mask must be an immediate" + msgstr "la máscara debe ser un inmediato" + +-#: config/arm/arm-builtins.c:2805 ++#: config/arm/arm-builtins.c:2810 + #, gcc-internal-format + msgid "the range of mask should be in 0 to 255" + msgstr "el rango de la máscara debe estar entre 0 y 255" + +-#: config/arm/arm-builtins.c:2993 ++#: config/arm/arm-builtins.c:2998 + #, gcc-internal-format + msgid "the range of count should be in 0 to 32. please check the intrinsic _mm_rori_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:2995 ++#: config/arm/arm-builtins.c:3000 + #, gcc-internal-format + msgid "the range of count should be in 0 to 32. please check the intrinsic _mm_rori_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:2997 ++#: config/arm/arm-builtins.c:3002 + #, gcc-internal-format + msgid "the range of count should be in 0 to 32. please check the intrinsic _mm_ror_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:2999 ++#: config/arm/arm-builtins.c:3004 + #, gcc-internal-format + msgid "the range of count should be in 0 to 32. please check the intrinsic _mm_ror_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3005 ++#: config/arm/arm-builtins.c:3010 + #, gcc-internal-format + msgid "the range of count should be in 0 to 64. please check the intrinsic _mm_rori_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3007 ++#: config/arm/arm-builtins.c:3012 + #, gcc-internal-format + msgid "the range of count should be in 0 to 64. please check the intrinsic _mm_ror_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3012 ++#: config/arm/arm-builtins.c:3017 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srli_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3014 ++#: config/arm/arm-builtins.c:3019 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srli_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3016 ++#: config/arm/arm-builtins.c:3021 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srli_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3018 ++#: config/arm/arm-builtins.c:3023 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_slli_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3020 ++#: config/arm/arm-builtins.c:3025 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_slli_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3022 ++#: config/arm/arm-builtins.c:3027 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_slli_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3024 ++#: config/arm/arm-builtins.c:3029 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srai_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3026 ++#: config/arm/arm-builtins.c:3031 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srai_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3028 ++#: config/arm/arm-builtins.c:3033 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srai_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3030 ++#: config/arm/arm-builtins.c:3035 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srl_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3032 ++#: config/arm/arm-builtins.c:3037 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srl_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3034 ++#: config/arm/arm-builtins.c:3039 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_srl_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3036 ++#: config/arm/arm-builtins.c:3041 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sll_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3038 ++#: config/arm/arm-builtins.c:3043 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sll_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3040 ++#: config/arm/arm-builtins.c:3045 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sll_si64 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3042 ++#: config/arm/arm-builtins.c:3047 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sra_pi16 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3044 ++#: config/arm/arm-builtins.c:3049 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sra_pi32 in code." + msgstr "" + +-#: config/arm/arm-builtins.c:3046 ++#: config/arm/arm-builtins.c:3051 + #, gcc-internal-format + msgid "the count should be no less than 0. please check the intrinsic _mm_sra_si64 in code." + msgstr "" + +-#: config/arm/arm.c:2800 ++#: config/arm/arm.c:2778 + #, gcc-internal-format + msgid "iWMMXt and NEON are incompatible" + msgstr "iWMMXt y NEON son incompatibles" + +-#: config/arm/arm.c:2806 ++#: config/arm/arm.c:2784 + #, gcc-internal-format + msgid "target CPU does not support ARM mode" + msgstr "el CPU objetivo no tiene soporte para el modo ARM" + +-#: config/arm/arm.c:2810 ++#: config/arm/arm.c:2788 + #, gcc-internal-format + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "habilitar el soporte de rastreo hacia atrás sólo tiene significado cuando se compila para el Thumb" + +-#: config/arm/arm.c:2813 ++#: config/arm/arm.c:2791 + #, gcc-internal-format + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "habilitar el soporte de trabajo interno de llamado sólo tiene significado cuando se compila para el Thumb" + +-#: config/arm/arm.c:2821 ++#: config/arm/arm.c:2799 + #, gcc-internal-format + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g con -mno-apcs-frame no permite una depuración sensible" + +-#: config/arm/arm.c:2825 ++#: config/arm/arm.c:2803 + #, gcc-internal-format + msgid "iWMMXt unsupported under Thumb mode" + msgstr "" + +-#: config/arm/arm.c:2828 ++#: config/arm/arm.c:2806 + #, gcc-internal-format + msgid "can not use -mtp=cp15 with 16-bit Thumb" + msgstr "no se puede usar -mtp=cp15 con Thumb de 16-bit" + +-#: config/arm/arm.c:2832 ++#: config/arm/arm.c:2810 + #, gcc-internal-format + msgid "RTP PIC is incompatible with Thumb" + msgstr "El PIC de RTP es incompatible con Thumb" + +-#: config/arm/arm.c:2840 ++#: config/arm/arm.c:2818 + #, gcc-internal-format + msgid "-mslow-flash-data only supports non-pic code on armv7-m targets" + msgstr "" + +-#: config/arm/arm.c:2845 ++#: config/arm/arm.c:2823 + #, gcc-internal-format + msgid "-mpure-code only supports non-pic code on armv7-m targets" + msgstr "-mpure-code solo admite código no pic en los objetivos armv7-m" + +-#: config/arm/arm.c:2948 ++#: config/arm/arm.c:2926 + #, gcc-internal-format + msgid "target CPU does not support THUMB instructions" + msgstr "el CPU objetivo no admite las instrucciones THUMB" + +-#: config/arm/arm.c:2993 ++#: config/arm/arm.c:2971 + #, gcc-internal-format + msgid "target CPU does not support unaligned accesses" + msgstr "el CPU objetivo no admite accesos sin alinear" +@@ -26614,141 +26660,141 @@ + + #. To support this we need to be able to parse FPU feature options + #. from the architecture string. +-#: config/arm/arm.c:3247 ++#: config/arm/arm.c:3225 + #, gcc-internal-format + msgid "-mfpu=auto not currently supported without an explicit CPU." + msgstr "-mfpu=auto no se admite actualmente sin una CPU explícita." + +-#: config/arm/arm.c:3322 ++#: config/arm/arm.c:3300 + #, gcc-internal-format + msgid "target CPU does not support interworking" + msgstr "el CPU objetivo no admite trabajo interno" + +-#: config/arm/arm.c:3328 ++#: config/arm/arm.c:3306 + #, gcc-internal-format + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check es incompatible con -mno-apcs-frame" + +-#: config/arm/arm.c:3336 ++#: config/arm/arm.c:3314 + #, gcc-internal-format + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic y -mapcs-reent son incompatibles" + +-#: config/arm/arm.c:3339 ++#: config/arm/arm.c:3317 + #, gcc-internal-format + msgid "APCS reentrant code not supported. Ignored" + msgstr "no se admite el código reentrante APCS. Descartado" + +-#: config/arm/arm.c:3373 ++#: config/arm/arm.c:3351 + #, gcc-internal-format + msgid "selected fp16 options are incompatible" + msgstr "las opciones fp16 seleccionadas son incompatibles" + +-#: config/arm/arm.c:3404 ++#: config/arm/arm.c:3382 + #, gcc-internal-format + msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" + msgstr "iwmmxt requiere una ABI compatible con AAPCS para una operación adecuada" + +-#: config/arm/arm.c:3407 ++#: config/arm/arm.c:3385 + #, gcc-internal-format + msgid "iwmmxt abi requires an iwmmxt capable cpu" + msgstr "el abi iwmmxt requiere un cpu capaz de iwmmxt" + +-#: config/arm/arm.c:3418 ++#: config/arm/arm.c:3396 + #, gcc-internal-format + msgid "AAPCS does not support -mcaller-super-interworking" + msgstr "AAPCS no admite -mcaller-super-interworking" + +-#: config/arm/arm.c:3421 ++#: config/arm/arm.c:3399 + #, gcc-internal-format + msgid "AAPCS does not support -mcallee-super-interworking" + msgstr "AAPCS no admite -mcallee-super-interworking" + +-#: config/arm/arm.c:3426 ++#: config/arm/arm.c:3404 + #, gcc-internal-format + msgid "__fp16 and no ldrh" + msgstr "__fp16 sin ldrh" + +-#: config/arm/arm.c:3437 ++#: config/arm/arm.c:3415 + #, gcc-internal-format + msgid "-mfloat-abi=hard: selected processor lacks an FPU" + msgstr "-mfloat-abi=hard: el procesador seleccionado carece de FPU" + +-#: config/arm/arm.c:3445 ++#: config/arm/arm.c:3423 + #, gcc-internal-format + msgid "-mfloat-abi=hard and VFP" + msgstr "-mfloat-abi=hard y VFP" + +-#: config/arm/arm.c:3481 ++#: config/arm/arm.c:3459 + #, gcc-internal-format + msgid "structure size boundary can only be set to 8, 32 or 64" + msgstr "el límite del tamaño de la estructura sólo se puede establecer a 8, 32 o 64" + +-#: config/arm/arm.c:3483 ++#: config/arm/arm.c:3461 + #, gcc-internal-format + msgid "structure size boundary can only be set to 8 or 32" + msgstr "el límite del tamaño de la estructura sólo se puede establecer a 8 o 32" + +-#: config/arm/arm.c:3508 ++#: config/arm/arm.c:3486 + #, gcc-internal-format + msgid "RTP PIC is incompatible with -msingle-pic-base" + msgstr "El PIC de RTP es incompatible con -msingle-pic-base" + +-#: config/arm/arm.c:3520 ++#: config/arm/arm.c:3498 + #, gcc-internal-format + msgid "-mpic-register= is useless without -fpic" + msgstr "-mpic-register= es inútil sin -fpic" + +-#: config/arm/arm.c:3529 ++#: config/arm/arm.c:3507 + #, gcc-internal-format, gfc-internal-format + msgid "unable to use '%s' for PIC register" + msgstr "no se puede usar '%s' para registro PIC" + +-#: config/arm/arm.c:3548 ++#: config/arm/arm.c:3526 + #, gcc-internal-format + msgid "-freorder-blocks-and-partition not supported on this architecture" + msgstr "no se admite -freorder-blocks-and-partition en esta arquitectura" + +-#: config/arm/arm.c:3639 ++#: config/arm/arm.c:3617 + #, gcc-internal-format + msgid "target CPU does not support ARMv8-M Security Extensions" + msgstr "la CPU objetivo no admite las instrucciones de seguridad ARMv8-M" + +-#: config/arm/arm.c:5707 ++#: config/arm/arm.c:5685 + #, gcc-internal-format + msgid "non-AAPCS derived PCS variant" + msgstr "variante PCS derivada de un no AAPCS" + +-#: config/arm/arm.c:5709 ++#: config/arm/arm.c:5687 + #, gcc-internal-format + msgid "variadic functions must use the base AAPCS variant" + msgstr "las funciones variadic debe usar la variante AAPCS base" + +-#: config/arm/arm.c:5728 ++#: config/arm/arm.c:5706 + #, gcc-internal-format + msgid "PCS variant" + msgstr "variante PCS" + +-#: config/arm/arm.c:5923 ++#: config/arm/arm.c:5901 + #, gcc-internal-format + msgid "Thumb-1 hard-float VFP ABI" + msgstr "ABI de VFP de coma flotante dura de Thumb-1" + +-#: config/arm/arm.c:6362 config/arm/arm.c:6565 config/arm/arm.c:6593 +-#: config/arm/arm.c:26560 ++#: config/arm/arm.c:6340 config/arm/arm.c:6543 config/arm/arm.c:6571 ++#: config/arm/arm.c:26549 + #, gcc-internal-format + msgid "parameter passing for argument of type %qT changed in GCC 7.1" + msgstr "el paso de parámetro para argumentos de tipo %qT ha cambiado en GCC 7.1" + +-#: config/arm/arm.c:6709 config/arm/arm.c:6727 config/arm/arm.c:6902 +-#: config/avr/avr.c:9480 config/avr/avr.c:9496 config/bfin/bfin.c:4673 ++#: config/arm/arm.c:6687 config/arm/arm.c:6705 config/arm/arm.c:6880 ++#: config/avr/avr.c:9495 config/avr/avr.c:9511 config/bfin/bfin.c:4673 + #: config/bfin/bfin.c:4734 config/bfin/bfin.c:4763 + #: config/epiphany/epiphany.c:475 config/h8300/h8300.c:5456 +-#: config/i386/i386.c:7670 config/i386/i386.c:13041 config/i386/i386.c:41329 +-#: config/i386/i386.c:41379 config/i386/i386.c:41449 config/m68k/m68k.c:760 +-#: config/mcore/mcore.c:3056 config/nvptx/nvptx.c:4278 config/rl78/rl78.c:781 +-#: config/rs6000/rs6000.c:35295 config/rx/rx.c:2696 config/rx/rx.c:2722 +-#: config/s390/s390.c:1082 config/sh/sh.c:8394 config/sh/sh.c:8412 ++#: config/i386/i386.c:7676 config/i386/i386.c:13047 config/i386/i386.c:41370 ++#: config/i386/i386.c:41420 config/i386/i386.c:41490 config/m68k/m68k.c:760 ++#: config/mcore/mcore.c:3056 config/nvptx/nvptx.c:4294 config/rl78/rl78.c:781 ++#: config/rs6000/rs6000.c:35344 config/rx/rx.c:2696 config/rx/rx.c:2722 ++#: config/s390/s390.c:1085 config/sh/sh.c:8394 config/sh/sh.c:8412 + #: config/sh/sh.c:8436 config/sh/sh.c:8507 config/sh/sh.c:8530 + #: config/spu/spu.c:3683 config/stormy16/stormy16.c:2212 + #: config/v850/v850.c:2083 config/visium/visium.c:705 +@@ -26756,73 +26802,78 @@ + msgid "%qE attribute only applies to functions" + msgstr "el atributo %qE se aplica solamente a funciones" + +-#: config/arm/arm.c:6851 ++#: config/arm/arm.c:6829 + #, gcc-internal-format + msgid "%qE attribute not available to functions with arguments passed on the stack" + msgstr "el atributo %qE no está disponible para funciones con argumentos pasados en la pila" + +-#: config/arm/arm.c:6863 ++#: config/arm/arm.c:6841 + #, gcc-internal-format + msgid "%qE attribute not available to functions with variable number of arguments" + msgstr "el atributo %qE no está disponible para funciones con un número variable de argumentos" + +-#: config/arm/arm.c:6872 ++#: config/arm/arm.c:6850 + #, gcc-internal-format + msgid "%qE attribute not available to functions that return value on the stack" + msgstr "el atributo %qE no está disponible para funciones que devuelven valor en la pila" + +-#: config/arm/arm.c:6894 config/arm/arm.c:6946 ++#: config/arm/arm.c:6872 config/arm/arm.c:6924 + #, gcc-internal-format + msgid "%qE attribute ignored without -mcmse option." + msgstr "se descarta el atributo %qE sin la opción -mcmse." + +-#: config/arm/arm.c:6913 ++#: config/arm/arm.c:6891 + #, gcc-internal-format + msgid "%qE attribute has no effect on functions with static linkage" + msgstr "el atributo %qE no tiene efecto en funciones con enlazado estático" + +-#: config/arm/arm.c:6962 ++#: config/arm/arm.c:6940 + #, gcc-internal-format + msgid "%qE attribute only applies to base type of a function pointer" + msgstr "el atributo %qE se aplica solamente al tipo base de un puntero a función" + +-#: config/arm/arm.c:12245 ++#: config/arm/arm.c:8656 + #, gcc-internal-format ++msgid "accessing thread-local storage is not currently supported with -mpure-code or -mslow-flash-data" ++msgstr "" ++ ++#: config/arm/arm.c:12232 ++#, gcc-internal-format + msgid "%K%s %wd out of range %wd - %wd" + msgstr "%K%s %wd fuera de rango %wd - %wd" + +-#: config/arm/arm.c:12248 ++#: config/arm/arm.c:12235 + #, gcc-internal-format + msgid "%s %wd out of range %wd - %wd" + msgstr "%s %wd fuera de rango %wd - %wd" + +-#: config/arm/arm.c:23495 ++#: config/arm/arm.c:23484 + #, gcc-internal-format + msgid "unable to compute real location of stacked parameter" + msgstr "no se puede calcular la ubicación real del parámetro apilado" + +-#: config/arm/arm.c:24148 ++#: config/arm/arm.c:24137 + #, fuzzy, gcc-internal-format + #| msgid "Unexpected end of module" + msgid "Unexpected thumb1 far jump" + msgstr "Fin de módulo inesperado" + +-#: config/arm/arm.c:24412 ++#: config/arm/arm.c:24401 + #, gcc-internal-format + msgid "no low registers available for popping high registers" + msgstr "no hay registros inferiores disponibles para extraer registros superiores" + +-#: config/arm/arm.c:24661 ++#: config/arm/arm.c:24650 + #, gcc-internal-format + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "no se pueden codificar las Rutinas de Servicios de Interrupción en el modo Thumb" + +-#: config/arm/arm.c:24890 ++#: config/arm/arm.c:24879 + #, gcc-internal-format + msgid "-fstack-check=specific for Thumb-1" + msgstr "-fstack-check=specific para Thumb-1" + +-#: config/arm/arm.c:30435 ++#: config/arm/arm.c:30424 + #, gcc-internal-format, gfc-internal-format + msgid "invalid fpu for attribute(target(\"%s\"))" + msgstr "fpu no válida para el atributo(objetivo(\"%s\"))" +@@ -26830,13 +26881,13 @@ + #. This doesn't really make sense until we support + #. general dynamic selection of the architecture and all + #. sub-features. +-#: config/arm/arm.c:30443 ++#: config/arm/arm.c:30432 + #, gcc-internal-format + msgid "auto fpu selection not currently permitted here" + msgstr "selección automática de fpu actualmente no permitida aquí" + +-#: config/arm/arm.c:30450 config/i386/i386.c:6838 config/i386/i386.c:6885 +-#: config/s390/s390.c:15083 config/s390/s390.c:15133 config/s390/s390.c:15150 ++#: config/arm/arm.c:30439 config/i386/i386.c:6844 config/i386/i386.c:6891 ++#: config/s390/s390.c:15090 config/s390/s390.c:15140 config/s390/s390.c:15157 + #, gcc-internal-format, gfc-internal-format + msgid "attribute(target(\"%s\")) is unknown" + msgstr "se desconoce attribute(target(\"%s\"))" +@@ -26933,163 +26984,176 @@ + msgid "function attributes %qs and %qs have no effect on %qs function" + msgstr "los atributos de función %qs y %qs no tienen efecto en funciones %qs" + +-#: config/avr/avr.c:1074 ++#: config/avr/avr.c:1068 + #, gcc-internal-format + msgid "%qs function cannot have arguments" + msgstr "la función %qs no puede tener argumentos" + +-#: config/avr/avr.c:1077 ++#: config/avr/avr.c:1071 + #, gcc-internal-format + msgid "%qs function cannot return a value" + msgstr "la función %qs no puede devolver un valor" + +-#: config/avr/avr.c:1084 +-#, gcc-internal-format +-msgid "%qs appears to be a misspelled %s handler, missing __vector prefix" ++#: config/avr/avr.c:1085 ++#, fuzzy, gcc-internal-format ++#| msgid "%qs appears to be a misspelled %s handler, missing __vector prefix" ++msgid "%qs appears to be a misspelled %qs handler, missing %<__vector%> prefix" + msgstr "%qs parece ser un manejador %s mal escrito; falta el prefijo __vector" + +-#: config/avr/avr.c:1311 ++#: config/avr/avr.c:1098 + #, gcc-internal-format ++msgid "%qs is a reserved indentifier in AVR-LibC. Consider %<#include %> before using the %qs macro" ++msgstr "" ++ ++#: config/avr/avr.c:1327 ++#, gcc-internal-format + msgid "% contains only 2 bytes of address" + msgstr "% sólo contiene 2 bytes de dirección" + +-#: config/avr/avr.c:2543 ++#: config/avr/avr.c:2559 + #, gcc-internal-format + msgid "pointer offset from symbol maybe incorrect" + msgstr "el desplazamiento del puntero desde el símbolo tal vez es incorrecto" + +-#: config/avr/avr.c:2682 ++#: config/avr/avr.c:2698 + #, gcc-internal-format + msgid "accessing data memory with program memory address" + msgstr "se accede a memoria de datos con dirección de memoria de programa" + +-#: config/avr/avr.c:2743 ++#: config/avr/avr.c:2759 + #, gcc-internal-format + msgid "accessing program memory with data memory address" + msgstr "se accede a memoria de programa con dirección de memoria de datos" + +-#: config/avr/avr.c:3222 ++#: config/avr/avr.c:3238 + #, gcc-internal-format, gfc-internal-format + msgid "fixed register %s used to pass parameter to function" + msgstr "se usó el registro fijo %s para pasar un parámetro a la función" + +-#: config/avr/avr.c:3492 ++#: config/avr/avr.c:3508 + #, gcc-internal-format + msgid "writing to address space %qs not supported" + msgstr "no se admite escribir al espacio de direcciones %qs" + +-#: config/avr/avr.c:9515 ++#: config/avr/avr.c:9530 + #, gcc-internal-format + msgid "%qE attribute only applies to variables in static storage" + msgstr "el atributo %qE se aplica solamente a variables en almacenamiento estático" + +-#: config/avr/avr.c:9522 ++#: config/avr/avr.c:9537 + #, gcc-internal-format + msgid "%qE attribute only supported for reduced Tiny cores" + msgstr "solo se admite el atributo %qE núcleos Tiny reducidos" + +-#: config/avr/avr.c:9539 config/bfin/bfin.c:4795 config/i386/winnt.c:59 +-#: config/nvptx/nvptx.c:4301 ++#: config/avr/avr.c:9554 config/bfin/bfin.c:4795 config/i386/winnt.c:59 ++#: config/nvptx/nvptx.c:4317 + #, gcc-internal-format + msgid "%qE attribute only applies to variables" + msgstr "el atributo %qE solamente se aplica a variables" + +-#: config/avr/avr.c:9550 ++#: config/avr/avr.c:9565 + #, gcc-internal-format + msgid "%qE attribute allows only an integer constant argument" + msgstr "el atributo %qE sólo permite una constante entera como argumento" + +-#: config/avr/avr.c:9560 ++#: config/avr/avr.c:9575 + #, gcc-internal-format + msgid "%qE attribute address out of range" + msgstr "la dirección del atributo %qE está fuera de rango" + +-#: config/avr/avr.c:9573 ++#: config/avr/avr.c:9588 + #, gcc-internal-format + msgid "both %s and %qE attribute provide address" + msgstr "tanto el atributo %s como el %qE proporcionan dirección" + +-#: config/avr/avr.c:9583 ++#: config/avr/avr.c:9598 + #, gcc-internal-format + msgid "%qE attribute on non-volatile variable" + msgstr "atributo %qE en variable no volátil" + +-#: config/avr/avr.c:9653 ++#: config/avr/avr.c:9668 + #, gcc-internal-format + msgid "address spaces are not supported for reduced Tiny devices" + msgstr "no se admiten espacios de direcciones para dispositivos Tiny reducidos" + +-#: config/avr/avr.c:9660 ++#: config/avr/avr.c:9675 + #, gcc-internal-format + msgid "address space %qs not supported for devices with flash size up to %d KiB" + msgstr "no se admite el espacio de direcciones %qs para dispositivos con tamaño de flash de hasta %d KiB" + +-#: config/avr/avr.c:9831 ++#: config/avr/avr.c:9846 + #, gcc-internal-format + msgid "pointer targeting address space %qs must be const in %qT" + msgstr "el espacio de direcciones %qs que apuntan a punteros debe ser const en %qT" + +-#: config/avr/avr.c:9834 ++#: config/avr/avr.c:9849 + #, gcc-internal-format + msgid "pointer targeting address space %qs must be const in %s %q+D" + msgstr "el espacio de direcciones %qs que apuntan a punteros debe ser const en %s %q+D" + +-#: config/avr/avr.c:9880 ++#: config/avr/avr.c:9895 + #, gcc-internal-format + msgid "variable %q+D must be const in order to be put into read-only section by means of %qs" + msgstr "la variable %q+D debe ser const para que se ponga en la sección de sólo lectura a través de %qs" + +-#: config/avr/avr.c:9919 ++#: config/avr/avr.c:9934 + #, gcc-internal-format + msgid "static IO declaration for %q+D needs an address" + msgstr "la declaración de ES estática para %q+D necesita una dirección" + +-#: config/avr/avr.c:9951 ++#: config/avr/avr.c:9966 + #, gcc-internal-format + msgid "IO definition for %q+D needs an address" + msgstr "la definición de ES para %q+D necesita una dirección" + +-#: config/avr/avr.c:10058 ++#: config/avr/avr.c:10073 + #, gcc-internal-format + msgid "only uninitialized variables can be placed in the .noinit section" + msgstr "Sólo las variables sin inicializar se pueden colocar en la sección .noinit" + +-#: config/avr/avr.c:10138 ++#. This might happen with C++ if stuff needs constructing. ++#: config/avr/avr.c:10149 ++#, fuzzy, gcc-internal-format ++#| msgid "uninitialized variable %q+D put into program memory area" ++msgid "variable %q+D with dynamic initialization put into program memory area" ++msgstr "se colocó la variable %q+D sin inicializar en el área de memoria del programa" ++ ++#: config/avr/avr.c:10160 + #, gcc-internal-format + msgid "uninitialized variable %q+D put into program memory area" + msgstr "se colocó la variable %q+D sin inicializar en el área de memoria del programa" + +-#: config/avr/avr.c:10224 ++#: config/avr/avr.c:10247 + #, gcc-internal-format + msgid "%q+D has incompatible attributes %qs and %qs" + msgstr "%q+D tiene atributos incompatibles %qs y %qs" + +-#: config/avr/avr.c:10287 ++#: config/avr/avr.c:10310 + #, gcc-internal-format + msgid "architecture %qs supported for assembler only" + msgstr "la arquitectura %qs sólo se admite para ensamblador" + +-#: config/avr/avr.c:12823 ++#: config/avr/avr.c:12872 + #, gcc-internal-format + msgid "conversion from address space %qs to address space %qs" + msgstr "vonversión del espacio de direcciones %qs al espacio de direcciones %qs" + +-#: config/avr/avr.c:13916 config/avr/avr.c:13929 ++#: config/avr/avr.c:13965 config/avr/avr.c:13978 + #, gcc-internal-format, gfc-internal-format + msgid "%s expects a compile time integer constant" + msgstr "%s expera una constante entera en tiempo de compilación" + +-#: config/avr/avr.c:13943 ++#: config/avr/avr.c:13992 + #, gcc-internal-format, gfc-internal-format + msgid "%s expects a compile time long integer constant as first argument" + msgstr "%s espera una constante entera long en tiempo de compilación como primer argumento" + +-#: config/avr/avr.c:13971 ++#: config/avr/avr.c:14020 + #, gcc-internal-format, gfc-internal-format + msgid "rounding to %d bits has no effect for fixed-point value with %d fractional bits" + msgstr "redondear a %d bits no tiene ningún efecto en valores de coma fija con %d bits de fracción" + +-#: config/avr/avr.c:13980 ++#: config/avr/avr.c:14029 + #, gcc-internal-format + msgid "rounding result will always be 0" + msgstr "el resultado del redondeo será siempre 0" +@@ -27372,12 +27436,12 @@ + msgid "invalid IACC argument" + msgstr "argumento IACC no válido" + +-#: config/frv/frv.c:8708 ++#: config/frv/frv.c:8708 config/sparc/sparc.c:10545 + #, gcc-internal-format + msgid "%qs expects a constant argument" + msgstr "%qs espera una constante como argumento" + +-#: config/frv/frv.c:8713 ++#: config/frv/frv.c:8713 config/sparc/sparc.c:10551 + #, gcc-internal-format + msgid "constant argument out of range for %qs" + msgstr "el argumento constante está fuera de rango para %qs" +@@ -27555,7 +27619,7 @@ + msgid "code model %qs not supported in x32 mode" + msgstr "el modelo de código %qs no se admite en modo x32" + +-#: config/i386/i386.c:5372 config/i386/i386.c:5381 config/i386/i386.c:6556 ++#: config/i386/i386.c:5372 config/i386/i386.c:5381 config/i386/i386.c:6562 + #, gcc-internal-format, gfc-internal-format + msgid "code model %s does not support PIC mode" + msgstr "el modelo de código %s no admite el modo PIC" +@@ -27685,287 +27749,287 @@ + msgid "% is ignored in 64bit mode" + msgstr "se descarta % en el modo de 64bit" + +-#: config/i386/i386.c:5938 ++#: config/i386/i386.c:5944 + #, gcc-internal-format + msgid "-mpreferred-stack-boundary is not supported for this target" + msgstr "no se admite -mpreferred-stack-boundary en este objetivo" + +-#: config/i386/i386.c:5941 ++#: config/i386/i386.c:5947 + #, gcc-internal-format, gfc-internal-format + msgid "-mpreferred-stack-boundary=%d is not between %d and %d" + msgstr "-mpreferred-stack-boundary=%d no está entre %d y %d" + +-#: config/i386/i386.c:5964 ++#: config/i386/i386.c:5970 + #, gcc-internal-format, gfc-internal-format + msgid "-mincoming-stack-boundary=%d is not between %d and 12" + msgstr "-mincoming-stack-boundary=%d no está entre %d y 12" + +-#: config/i386/i386.c:5977 ++#: config/i386/i386.c:5983 + #, gcc-internal-format + msgid "-mnop-mcount is not compatible with this target" + msgstr "-mnop-mcount no es compatible con este objetivo" + +-#: config/i386/i386.c:5980 ++#: config/i386/i386.c:5986 + #, gcc-internal-format + msgid "-mnop-mcount is not implemented for -fPIC" + msgstr "-mnop-mcount no está implementada para -fPIC" + +-#: config/i386/i386.c:5986 ++#: config/i386/i386.c:5992 + #, gcc-internal-format + msgid "%<-msseregparm%> used without SSE enabled" + msgstr "se usó %<-msseregparm%> sin SSE activado" + +-#: config/i386/i386.c:5987 ++#: config/i386/i386.c:5993 + #, gcc-internal-format + msgid "% used without SSE enabled" + msgstr "se usó % sin SSE activado" + +-#: config/i386/i386.c:5997 ++#: config/i386/i386.c:6003 + #, gcc-internal-format + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "el conjunto de instrucciones SSE está desactivado, usando la aritmética 387" + +-#: config/i386/i386.c:6004 ++#: config/i386/i386.c:6010 + #, gcc-internal-format + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "el conjunto de instrucciones 387 está desactivado, usando la aritmética SSE" + +-#: config/i386/i386.c:6054 ++#: config/i386/i386.c:6060 + #, gcc-internal-format + msgid "stack probing requires %<-maccumulate-outgoing-args%> for correctness" + msgstr "la prueba de pila requiere %<-maccumulate-outgoing-args%> para ser correcta" + +-#: config/i386/i386.c:6056 ++#: config/i386/i386.c:6062 + #, gcc-internal-format + msgid "stack probing requires % for correctness" + msgstr "la prueba de pila requiere % para ser correcta" + +-#: config/i386/i386.c:6070 ++#: config/i386/i386.c:6076 + #, gcc-internal-format + msgid "fixed ebp register requires %<-maccumulate-outgoing-args%>" + msgstr "el registro ebp fijo requiere %<-maccumulate-outgoing-args%>" + +-#: config/i386/i386.c:6072 ++#: config/i386/i386.c:6078 + #, gcc-internal-format + msgid "fixed ebp register requires %" + msgstr "el registro ebp fijo requiere %" + +-#: config/i386/i386.c:6178 ++#: config/i386/i386.c:6184 + #, gcc-internal-format + msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic" + msgstr "-mfentry no se admite para 32-bit en combinación con -fpic" + +-#: config/i386/i386.c:6185 ++#: config/i386/i386.c:6191 + #, gcc-internal-format + msgid "-mno-fentry isn%'t compatible with SEH" + msgstr "-mno-fentry no es compatible con SEH" + +-#: config/i386/i386.c:6252 config/rs6000/rs6000.c:5475 ++#: config/i386/i386.c:6258 config/rs6000/rs6000.c:5477 + #, gcc-internal-format, gfc-internal-format + msgid "unknown option for -mrecip=%s" + msgstr "opción desconocida para -mrecip=%s" + +-#: config/i386/i386.c:6866 ++#: config/i386/i386.c:6872 + #, gcc-internal-format, gfc-internal-format + msgid "option(\"%s\") was already specified" + msgstr "ya se había especificado option(\"%s\")" + +-#: config/i386/i386.c:7168 ++#: config/i386/i386.c:7174 + #, gcc-internal-format + msgid "Only DWARF debug format is supported for interrupt service routine." + msgstr "Solo se admite el formato de depuración DWARF para la rutina de servicio de interrupciones." + +-#: config/i386/i386.c:7267 ++#: config/i386/i386.c:7273 + #, gcc-internal-format, gfc-internal-format + msgid "%s instructions aren't allowed in %s service routine" + msgstr "las instrucciones %s no se permiten en la rutina de servicio %s" + +-#: config/i386/i386.c:7271 ++#: config/i386/i386.c:7277 + #, gcc-internal-format, gfc-internal-format + msgid "%s instructions aren't allowed in function with no_caller_saved_registers attribute" + msgstr "Las instrucciones %s no están permitidas en funciones con el atributo no_caller_saved_registers" + +-#: config/i386/i386.c:7683 config/i386/i386.c:7734 ++#: config/i386/i386.c:7689 config/i386/i386.c:7740 + #, gcc-internal-format + msgid "fastcall and regparm attributes are not compatible" + msgstr "los atributos fastcall y regparm no son compatibles" + +-#: config/i386/i386.c:7688 ++#: config/i386/i386.c:7694 + #, gcc-internal-format + msgid "regparam and thiscall attributes are not compatible" + msgstr "los atributos regparam y thiscall no son compatibles" + +-#: config/i386/i386.c:7695 config/i386/i386.c:41349 ++#: config/i386/i386.c:7701 config/i386/i386.c:41390 + #, gcc-internal-format + msgid "%qE attribute requires an integer constant argument" + msgstr "el atributo %qE requiere un argumento constante entero" + +-#: config/i386/i386.c:7701 ++#: config/i386/i386.c:7707 + #, gcc-internal-format + msgid "argument to %qE attribute larger than %d" + msgstr "el argumento para el atributo %qE es más grande que %d" + +-#: config/i386/i386.c:7726 config/i386/i386.c:7769 ++#: config/i386/i386.c:7732 config/i386/i386.c:7775 + #, gcc-internal-format + msgid "fastcall and cdecl attributes are not compatible" + msgstr "los atributos fastcall y cdecl no son compatibles" + +-#: config/i386/i386.c:7730 ++#: config/i386/i386.c:7736 + #, gcc-internal-format + msgid "fastcall and stdcall attributes are not compatible" + msgstr "los atributos fastcall y stdcall no son compatibles" + +-#: config/i386/i386.c:7738 config/i386/i386.c:7787 ++#: config/i386/i386.c:7744 config/i386/i386.c:7793 + #, gcc-internal-format + msgid "fastcall and thiscall attributes are not compatible" + msgstr "los atributos fastcall y thiscall no son compatibles" + +-#: config/i386/i386.c:7748 config/i386/i386.c:7765 ++#: config/i386/i386.c:7754 config/i386/i386.c:7771 + #, gcc-internal-format + msgid "stdcall and cdecl attributes are not compatible" + msgstr "los atributos stdcall y cdecl no son compatibles" + +-#: config/i386/i386.c:7752 ++#: config/i386/i386.c:7758 + #, gcc-internal-format + msgid "stdcall and fastcall attributes are not compatible" + msgstr "los atributos stdcall y fastcall no son compatibles" + +-#: config/i386/i386.c:7756 config/i386/i386.c:7783 ++#: config/i386/i386.c:7762 config/i386/i386.c:7789 + #, gcc-internal-format + msgid "stdcall and thiscall attributes are not compatible" + msgstr "los atributos stdcall y thiscall no son compatibles" + +-#: config/i386/i386.c:7773 config/i386/i386.c:7791 ++#: config/i386/i386.c:7779 config/i386/i386.c:7797 + #, gcc-internal-format + msgid "cdecl and thiscall attributes are not compatible" + msgstr "los atributos cdecl y thiscall no son compatibles" + +-#: config/i386/i386.c:7779 ++#: config/i386/i386.c:7785 + #, gcc-internal-format + msgid "%qE attribute is used for non-class method" + msgstr "se usó el atributo %qE para método no de clase" + +-#: config/i386/i386.c:8023 ++#: config/i386/i386.c:8029 + #, gcc-internal-format + msgid "calling %qD with attribute sseregparm without SSE/SSE2 enabled" + msgstr "se llama a %qD con el atributo sseregparm sin activar SSE/SSE2" + +-#: config/i386/i386.c:8026 ++#: config/i386/i386.c:8032 + #, gcc-internal-format + msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled" + msgstr "se llama a %qT con el atributo sseregparm sin activar SSE/SSE2" + +-#: config/i386/i386.c:8342 ++#: config/i386/i386.c:8348 + #, gcc-internal-format + msgid "X32 does not support ms_abi attribute" + msgstr "X32 no admite el atributo ms_abi" + +-#: config/i386/i386.c:8374 ++#: config/i386/i386.c:8380 + #, gcc-internal-format + msgid "ms_hook_prologue is not compatible with nested function" + msgstr "ms_hook_prologue no es compatible con la función anidada" + +-#: config/i386/i386.c:8687 ++#: config/i386/i386.c:8693 + #, gcc-internal-format + msgid "AVX512F vector argument without AVX512F enabled changes the ABI" + msgstr "el argumento de vector AVX512F sin AVX512F activado cambia la ABI" + +-#: config/i386/i386.c:8693 ++#: config/i386/i386.c:8699 + #, gcc-internal-format + msgid "AVX512F vector return without AVX512F enabled changes the ABI" + msgstr "el retorno de vector AVX512F sin AVX512F activado cambia la ABI" + +-#: config/i386/i386.c:8707 ++#: config/i386/i386.c:8713 + #, gcc-internal-format + msgid "AVX vector argument without AVX enabled changes the ABI" + msgstr "el argumento de vector AVX sin AVX activado cambia la ABI" + +-#: config/i386/i386.c:8713 ++#: config/i386/i386.c:8719 + #, gcc-internal-format + msgid "AVX vector return without AVX enabled changes the ABI" + msgstr "el retorno de vector AVX sin AVX activado cambia la ABI" + +-#: config/i386/i386.c:8729 ++#: config/i386/i386.c:8735 + #, gcc-internal-format + msgid "SSE vector argument without SSE enabled changes the ABI" + msgstr "el argumento de vector SSE sin SSE activado cambia la ABI" + +-#: config/i386/i386.c:8735 ++#: config/i386/i386.c:8741 + #, gcc-internal-format + msgid "SSE vector return without SSE enabled changes the ABI" + msgstr "la devolución de vector SSE sin SSE activado cambia la ABI" + +-#: config/i386/i386.c:8751 ++#: config/i386/i386.c:8757 + #, gcc-internal-format + msgid "MMX vector argument without MMX enabled changes the ABI" + msgstr "el argumento de vector MMX sin MMX activado cambia la ABI" + +-#: config/i386/i386.c:8757 ++#: config/i386/i386.c:8763 + #, gcc-internal-format + msgid "MMX vector return without MMX enabled changes the ABI" + msgstr "la devolución de vector MMX sin MMX activado cambia la ABI" + +-#: config/i386/i386.c:8939 ++#: config/i386/i386.c:8945 + #, gcc-internal-format + msgid "the ABI of passing struct with a flexible array member has changed in GCC 4.4" + msgstr "la ABI para pasar un struct con un miembro de matriz flexible cambió en GCC 4.4" + +-#: config/i386/i386.c:9056 ++#: config/i386/i386.c:9062 + #, gcc-internal-format + msgid "the ABI of passing union with long double has changed in GCC 4.4" + msgstr "la ABI para pasar un union con long double cambió en GCC 4.4" + +-#: config/i386/i386.c:9174 ++#: config/i386/i386.c:9180 + #, gcc-internal-format + msgid "the ABI of passing structure with complex float member has changed in GCC 4.4" + msgstr "la ABI para pasar una estructura con un miembro de coma flotante compleja cambió en GCC 4.4" + +-#: config/i386/i386.c:9337 ++#: config/i386/i386.c:9343 + #, gcc-internal-format + msgid "SSE register return with SSE disabled" + msgstr "se devuelve el registro SSE con SSE desactivado" + +-#: config/i386/i386.c:9343 ++#: config/i386/i386.c:9349 + #, gcc-internal-format + msgid "SSE register argument with SSE disabled" + msgstr "argumento de registro SSE con SSE desactivado" + +-#: config/i386/i386.c:9359 ++#: config/i386/i386.c:9365 + #, gcc-internal-format + msgid "x87 register return with x87 disabled" + msgstr "se devuelve el registro x87 con x87 desactivado" + +-#: config/i386/i386.c:9655 config/i386/i386.c:9926 config/i386/i386.c:10449 ++#: config/i386/i386.c:9661 config/i386/i386.c:9932 config/i386/i386.c:10455 + #, gcc-internal-format + msgid "calling %qD with SSE calling convention without SSE/SSE2 enabled" + msgstr "se llama a %qD con el convenio de llamadas SSE sin activar SSE/SSE2" + +-#: config/i386/i386.c:9657 config/i386/i386.c:9928 config/i386/i386.c:10451 ++#: config/i386/i386.c:9663 config/i386/i386.c:9934 config/i386/i386.c:10457 + #, gcc-internal-format + msgid "this is a GCC bug that can be worked around by adding attribute used to function called" + msgstr "esto es un error de GCC que se puede sortear añadiendo el atributo usado a la función llamada" + +-#: config/i386/i386.c:10351 ++#: config/i386/i386.c:10357 + #, gcc-internal-format, gfc-internal-format + msgid "The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" + msgstr "La ABI para pasar parámetros con alineación de %d-bytes cambió en GCC 4.6" + +-#: config/i386/i386.c:13734 ++#: config/i386/i386.c:13740 + #, gcc-internal-format + msgid "ms_hook_prologue attribute isn%'t compatible with -mfentry for 32-bit" + msgstr "el atributo ms_hook_prologue no es compatible con -mfentry para 32-bit" + +-#: config/i386/i386.c:13824 ++#: config/i386/i386.c:13830 + #, gcc-internal-format + msgid "Dynamic Realign Argument Pointer (DRAP) not supported in interrupt service routine. This may be worked around by avoiding functions with aggregate return." + msgstr "No se admite Puntero de Argumento de Realineamiento Dinámico (DRAP) en la rutina de servicio de interrupciones. Esto puede sortearse evitando funciones con retorno agregado." + +-#: config/i386/i386.c:14836 ++#: config/i386/i386.c:14842 + #, gcc-internal-format + msgid "-fsplit-stack does not support fastcall with nested function" + msgstr "-fsplit-stack no admite fastcall con funciones anidadas" + +-#: config/i386/i386.c:14856 ++#: config/i386/i386.c:14862 + #, gcc-internal-format + msgid "-fsplit-stack does not support 2 register parameters for a nested function" + msgstr "-fsplit-stack no admite 2 parámetros de registro para una función anidada" +@@ -27972,297 +28036,297 @@ + + #. FIXME: We could make this work by pushing a register + #. around the addition and comparison. +-#: config/i386/i386.c:14867 ++#: config/i386/i386.c:14873 + #, gcc-internal-format + msgid "-fsplit-stack does not support 3 register parameters" + msgstr "-fsplit-stack no admite 3 parámetros de registro" + +-#: config/i386/i386.c:17672 config/i386/i386.c:17686 ++#: config/i386/i386.c:17678 config/i386/i386.c:17692 + #, gcc-internal-format + msgid "unsupported size for integer register" + msgstr "no se admite el tamaño para registro de enteros" + +-#: config/i386/i386.c:17718 ++#: config/i386/i386.c:17724 + #, gcc-internal-format + msgid "extended registers have no high halves" + msgstr "los registros extendidos no tiene mitades superiores" + +-#: config/i386/i386.c:17733 ++#: config/i386/i386.c:17739 + #, gcc-internal-format + msgid "unsupported operand size for extended register" + msgstr "no se admite el tamaño de operando para el registro extendido" + +-#: config/i386/i386.c:17924 ++#: config/i386/i386.c:17930 + #, gcc-internal-format + msgid "non-integer operand used with operand code 'z'" + msgstr "se usó un operando que no es entero con el código de operando 'z'" + +-#: config/i386/i386.c:28283 ++#: config/i386/i386.c:28289 + #, gcc-internal-format + msgid "interrupt service routine can't be called directly" + msgstr "no se puede llamar directamente a la rutina de servicio de interrupciones" + +-#: config/i386/i386.c:32550 ++#: config/i386/i386.c:32591 + #, gcc-internal-format + msgid "No dispatcher found for the versioning attributes" + msgstr "No se ha encontrado despachador para los atributos de versión" + +-#: config/i386/i386.c:32600 ++#: config/i386/i386.c:32641 + #, gcc-internal-format, gfc-internal-format + msgid "No dispatcher found for %s" + msgstr "No se encontró despachador para %s" + +-#: config/i386/i386.c:32610 ++#: config/i386/i386.c:32651 + #, gcc-internal-format, gfc-internal-format + msgid "No dispatcher found for the versioning attributes : %s" + msgstr "No se encontró despachador para los atributos de versión : %s" + +-#: config/i386/i386.c:32858 ++#: config/i386/i386.c:32899 + #, gcc-internal-format + msgid "Function versions cannot be marked as gnu_inline, bodies have to be generated" + msgstr "Las versiones de funciones no pueden marcarse como gnu_inline; hay que generar cuerpos" + +-#: config/i386/i386.c:32863 config/i386/i386.c:33291 ++#: config/i386/i386.c:32904 config/i386/i386.c:33332 + #, gcc-internal-format + msgid "Virtual function multiversioning not supported" + msgstr "No se admiten versiones múltiples de funciones virtuales" + +-#: config/i386/i386.c:32926 ++#: config/i386/i386.c:32967 + #, gcc-internal-format + msgid "missing % attribute for multi-versioned %D" + msgstr "falta el atributo % para %D multiversionado" + +-#: config/i386/i386.c:32929 ++#: config/i386/i386.c:32970 + #, gcc-internal-format + msgid "previous declaration of %D" + msgstr "declaración previa de %D" + +-#: config/i386/i386.c:33148 ++#: config/i386/i386.c:33189 + #, gcc-internal-format + msgid "multiversioning needs ifunc which is not supported on this target" + msgstr "el versionado múltiple necesita ifunc, que no se admite en este objetivo" + +-#: config/i386/i386.c:33540 ++#: config/i386/i386.c:33581 + #, gcc-internal-format + msgid "Parameter to builtin must be a string constant or literal" + msgstr "El parámetro para la función interna debe ser una cadena constante o literal" + +-#: config/i386/i386.c:33565 config/i386/i386.c:33615 ++#: config/i386/i386.c:33606 config/i386/i386.c:33656 + #, gcc-internal-format, gfc-internal-format + msgid "Parameter to builtin not valid: %s" + msgstr "El parámetro para la función interna no es válido: %s" + +-#: config/i386/i386.c:34294 config/i386/i386.c:35692 ++#: config/i386/i386.c:34335 config/i386/i386.c:35733 + #, gcc-internal-format + msgid "the last argument must be a 2-bit immediate" + msgstr "el tercer argumento debe ser un inmediato de 2-bit" + +-#: config/i386/i386.c:34689 ++#: config/i386/i386.c:34730 + #, gcc-internal-format + msgid "the fifth argument must be an 8-bit immediate" + msgstr "el quinto argumento debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:34784 ++#: config/i386/i386.c:34825 + #, gcc-internal-format + msgid "the third argument must be an 8-bit immediate" + msgstr "el tercer argumento debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:35623 ++#: config/i386/i386.c:35664 + #, gcc-internal-format + msgid "the last argument must be an 1-bit immediate" + msgstr "el último argumento debe ser un inmediato de 1-bit" + +-#: config/i386/i386.c:35638 ++#: config/i386/i386.c:35679 + #, gcc-internal-format + msgid "the last argument must be a 3-bit immediate" + msgstr "el último argumento debe ser un inmediato de 3-bit" + +-#: config/i386/i386.c:35671 ++#: config/i386/i386.c:35712 + #, gcc-internal-format + msgid "the last argument must be a 4-bit immediate" + msgstr "el último argumento debe ser un inmediato de 4-bit" + +-#: config/i386/i386.c:35711 ++#: config/i386/i386.c:35752 + #, gcc-internal-format + msgid "the last argument must be a 1-bit immediate" + msgstr "el último argumento debe ser un inmediato de 1-bit" + +-#: config/i386/i386.c:35724 ++#: config/i386/i386.c:35765 + #, gcc-internal-format + msgid "the last argument must be a 5-bit immediate" + msgstr "el tercer argumento debe ser un inmediato de 5-bit" + +-#: config/i386/i386.c:35734 ++#: config/i386/i386.c:35775 + #, gcc-internal-format + msgid "the next to last argument must be an 8-bit immediate" + msgstr "el penúltimo argumento debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:35739 config/i386/i386.c:36529 ++#: config/i386/i386.c:35780 config/i386/i386.c:36570 + #, gcc-internal-format + msgid "the last argument must be an 8-bit immediate" + msgstr "el último argumento debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:35907 ++#: config/i386/i386.c:35948 + #, gcc-internal-format + msgid "the third argument must be comparison constant" + msgstr "el tercer argumento debe ser una constante de comparación" + +-#: config/i386/i386.c:35912 ++#: config/i386/i386.c:35953 + #, gcc-internal-format + msgid "incorrect comparison mode" + msgstr "modo de comparación incorrecto" + +-#: config/i386/i386.c:35918 config/i386/i386.c:36119 ++#: config/i386/i386.c:35959 config/i386/i386.c:36160 + #, gcc-internal-format + msgid "incorrect rounding operand" + msgstr "operando de redondeo incorrecto" + +-#: config/i386/i386.c:36101 ++#: config/i386/i386.c:36142 + #, gcc-internal-format + msgid "the immediate argument must be a 4-bit immediate" + msgstr "el argumento inmediato debe ser un inmediato de 4-bit" + +-#: config/i386/i386.c:36107 ++#: config/i386/i386.c:36148 + #, gcc-internal-format + msgid "the immediate argument must be a 5-bit immediate" + msgstr "el argumento inmediato debe ser un inmediato de 5-bit" + +-#: config/i386/i386.c:36110 ++#: config/i386/i386.c:36151 + #, gcc-internal-format + msgid "the immediate argument must be an 8-bit immediate" + msgstr "el argumento inmediato debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:36527 ++#: config/i386/i386.c:36568 + #, gcc-internal-format + msgid "the last argument must be a 32-bit immediate" + msgstr "el último argumento debe ser un inmediato de 32-bit" + +-#: config/i386/i386.c:36609 config/rs6000/rs6000.c:15973 ++#: config/i386/i386.c:36650 config/rs6000/rs6000.c:16009 + #, gcc-internal-format + msgid "selector must be an integer constant in the range 0..%wi" + msgstr "el selector debe ser una constante entera en el rango 0..%wi" + +-#: config/i386/i386.c:36814 ++#: config/i386/i386.c:36855 + #, gcc-internal-format + msgid "%qE needs unknown isa option" + msgstr "%qE necesita la opción isa desconocida" + +-#: config/i386/i386.c:36818 ++#: config/i386/i386.c:36859 + #, gcc-internal-format + msgid "%qE needs isa option %s" + msgstr "%qE necesita la opción isa %s" + +-#: config/i386/i386.c:37566 ++#: config/i386/i386.c:37607 + #, gcc-internal-format + msgid "last argument must be an immediate" + msgstr "el último argumento debe ser un inmediato" + +-#: config/i386/i386.c:38270 config/i386/i386.c:38452 ++#: config/i386/i386.c:38311 config/i386/i386.c:38493 + #, gcc-internal-format + msgid "the last argument must be scale 1, 2, 4, 8" + msgstr "el último argumento debe ser un escalar 1, 2, 4, 8" + +-#: config/i386/i386.c:38505 ++#: config/i386/i386.c:38546 + #, gcc-internal-format + msgid "the forth argument must be scale 1, 2, 4, 8" + msgstr "el argumento delantero debe ser un escalar 1, 2, 4, 8" + +-#: config/i386/i386.c:38511 ++#: config/i386/i386.c:38552 + #, gcc-internal-format + msgid "incorrect hint operand" + msgstr "operando de pista incorrecto" + +-#: config/i386/i386.c:38530 ++#: config/i386/i386.c:38571 + #, gcc-internal-format + msgid "the xabort's argument must be an 8-bit immediate" + msgstr "el argumento de xabort debe ser un inmediato de 8-bit" + +-#: config/i386/i386.c:41336 ++#: config/i386/i386.c:41377 + #, gcc-internal-format + msgid "%qE attribute only available for 32-bit" + msgstr "el atributo %qE solamente está disponible para 64-bit" + +-#: config/i386/i386.c:41357 ++#: config/i386/i386.c:41398 + #, gcc-internal-format + msgid "argument to %qE attribute is neither zero, nor one" + msgstr "el argumento del atributo %qE no es cero ni uno" + +-#: config/i386/i386.c:41390 config/i386/i386.c:41399 ++#: config/i386/i386.c:41431 config/i386/i386.c:41440 + #, gcc-internal-format + msgid "ms_abi and sysv_abi attributes are not compatible" + msgstr "los atributos ms_abi y sysv_abi no son compatibles" + +-#: config/i386/i386.c:41435 config/rs6000/rs6000.c:35378 ++#: config/i386/i386.c:41476 config/rs6000/rs6000.c:35427 + #, gcc-internal-format + msgid "%qE incompatible attribute ignored" + msgstr "se descarta el atributo incompatible %qE" + +-#: config/i386/i386.c:41479 ++#: config/i386/i386.c:41520 + #, gcc-internal-format + msgid "interrupt service routine should have a pointer as the first argument" + msgstr "la rutina de servicio de interrupciones debería tener un puntero como primer argumento" + +-#: config/i386/i386.c:41486 ++#: config/i386/i386.c:41527 + #, gcc-internal-format, gfc-internal-format + msgid "interrupt service routine should have unsigned %sint as the second argument" + msgstr "" + +-#: config/i386/i386.c:41496 ++#: config/i386/i386.c:41537 + #, gcc-internal-format + msgid "interrupt service routine can only have a pointer argument and an optional integer argument" + msgstr "la rutina de servicio de interrupciones solo puede tener un argumento puntero y un argumento entero opcional" + +-#: config/i386/i386.c:41499 ++#: config/i386/i386.c:41540 + #, gcc-internal-format + msgid "interrupt service routine can't have non-void return value" + msgstr "ls rutina de servicio de interrupción no puede tener valor de retorno que no sea void" + +-#: config/i386/i386.c:44401 ++#: config/i386/i386.c:44442 + #, gcc-internal-format + msgid "alternatives not allowed in asm flag output" + msgstr "no se permiten alternativas en la salida del indicador asm" + +-#: config/i386/i386.c:44465 ++#: config/i386/i386.c:44506 + #, gcc-internal-format + msgid "unknown asm flag output %qs" + msgstr "salida del indicador asm %qs desconocida" + +-#: config/i386/i386.c:44494 ++#: config/i386/i386.c:44535 + #, gcc-internal-format + msgid "invalid type for asm flag output" + msgstr "tipo no válido para la salida del indicador asm" + +-#: config/i386/i386.c:50765 ++#: config/i386/i386.c:50806 + #, gcc-internal-format + msgid "Unknown architecture specific memory model" + msgstr "Modelo de memoria específico de la arquitectura desconocido" + +-#: config/i386/i386.c:50772 ++#: config/i386/i386.c:50813 + #, gcc-internal-format + msgid "HLE_ACQUIRE not used with ACQUIRE or stronger memory model" + msgstr "HLE_ACQUIRE no se usa con ACQUIRE o modelos de memoria más fuertes" + +-#: config/i386/i386.c:50778 ++#: config/i386/i386.c:50819 + #, gcc-internal-format + msgid "HLE_RELEASE not used with RELEASE or stronger memory model" + msgstr "HLE_RELEASE no se usa con RELEASE o modelos de memoria más fuertes" + +-#: config/i386/i386.c:50802 config/i386/i386.c:50923 ++#: config/i386/i386.c:50843 config/i386/i386.c:50964 + #, gcc-internal-format, gfc-internal-format + msgid "unsupported simdlen %d" + msgstr "simdlen %d no admitido" + +-#: config/i386/i386.c:50821 ++#: config/i386/i386.c:50862 + #, gcc-internal-format + msgid "unsupported return type %qT for simd\n" + msgstr "no se admite el tipo de retorno %qT para simd\n" + +-#: config/i386/i386.c:50843 ++#: config/i386/i386.c:50884 + #, gcc-internal-format + msgid "unsupported argument type %qT for simd\n" + msgstr "no se admite el tipo de argumento %qT para simd\n" + +-#: config/i386/i386.c:51169 ++#: config/i386/i386.c:51210 + #, gcc-internal-format + msgid "Pointer Checker requires MPX support on this target. Use -mmpx options to enable MPX." + msgstr "El Comprobador de Punteros requiere suporte MPX en este objetivo. Utilice las opciones -mmpx para activar MPX." +@@ -28382,7 +28446,7 @@ + msgid "argument %qd is not a constant" + msgstr "el argumento %qd no es una constante" + +-#: config/iq2000/iq2000.c:2912 config/xtensa/xtensa.c:2455 ++#: config/iq2000/iq2000.c:2912 config/xtensa/xtensa.c:2456 + #, gcc-internal-format + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, puntero nulo" +@@ -28392,7 +28456,7 @@ + msgid "PRINT_OPERAND: Unknown punctuation '%c'" + msgstr "PRINT_OPERAND: Puntuación desconocida '%c'" + +-#: config/iq2000/iq2000.c:3076 config/xtensa/xtensa.c:2299 ++#: config/iq2000/iq2000.c:3076 config/xtensa/xtensa.c:2300 + #, gcc-internal-format + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND puntero nulo" +@@ -28493,7 +28557,7 @@ + msgid "interrupt_thread is available only on fido" + msgstr "interrupt_thread sólo está disponible en fido" + +-#: config/m68k/m68k.c:1108 config/rs6000/rs6000.c:28119 ++#: config/m68k/m68k.c:1108 config/rs6000/rs6000.c:28168 + #, gcc-internal-format + msgid "stack limit expression is not supported" + msgstr "no se admite la expresión del límite de la pila" +@@ -28999,8 +29063,8 @@ + msgid "MSP430 builtin functions only work inside interrupt handlers" + msgstr "las funciones internas de MSP430 solo funcionan dentro de manejadores de interrupciones" + +-#: config/msp430/msp430.c:2606 config/rx/rx.c:2635 config/xtensa/xtensa.c:3375 +-#: config/xtensa/xtensa.c:3401 ++#: config/msp430/msp430.c:2606 config/rx/rx.c:2635 config/xtensa/xtensa.c:3376 ++#: config/xtensa/xtensa.c:3402 + #, gcc-internal-format + msgid "bad builtin code" + msgstr "código interno erróneo" +@@ -29253,27 +29317,27 @@ + msgid "PTX does not support weak declarations (only weak definitions)" + msgstr "PTX no admite declaraciones débiles (solamente definiciones débiles)" + +-#: config/nvptx/nvptx.c:4283 ++#: config/nvptx/nvptx.c:4299 + #, gcc-internal-format + msgid "%qE attribute requires a void return type" + msgstr "el atributo %qE requiere tipo de retorno void" + +-#: config/nvptx/nvptx.c:4306 ++#: config/nvptx/nvptx.c:4322 + #, gcc-internal-format + msgid "%qE attribute not allowed with auto storage class" + msgstr "no se permite el atributo %qE con una clase de auto almacenamiento" + +-#: config/nvptx/nvptx.c:4674 ++#: config/nvptx/nvptx.c:4690 + #, gcc-internal-format, gfc-internal-format + msgid "using vector_length (%d), ignoring %d" + msgstr "se usa vector_length (%d); se hace caso omiso de %d" + +-#: config/nvptx/nvptx.c:4675 ++#: config/nvptx/nvptx.c:4691 + #, gcc-internal-format, gfc-internal-format + msgid "using vector_length (%d), ignoring runtime setting" + msgstr "se usa vector_length (%d); se hace caso omiso de la configuración de tiempo de ejecución" + +-#: config/nvptx/nvptx.c:4685 ++#: config/nvptx/nvptx.c:4701 + #, gcc-internal-format, gfc-internal-format + msgid "using num_workers (%d), ignoring %d" + msgstr "se usa num_workers (%d); se hace caso omiso de %d" +@@ -29298,7 +29362,7 @@ + msgid "-g option disabled" + msgstr "opción -g desactivada" + +-#: config/pa/pa.c:8769 ++#: config/pa/pa.c:8793 + #, gcc-internal-format, gfc-internal-format + msgid "alignment (%u) for %s exceeds maximum alignment for global common data. Using %u" + msgstr "la alineación (%u) para %s excede la alineación máxima para los datos comunes globales. Se usará %u" +@@ -29433,157 +29497,157 @@ + msgid "junk at end of #pragma longcall" + msgstr "basura al final de #pragma longcall" + +-#: config/rs6000/rs6000-c.c:5575 ++#: config/rs6000/rs6000-c.c:5578 + #, gcc-internal-format + msgid "vec_lvsl is deprecated for little endian; use assignment for unaligned loads and stores" + msgstr "vec_lvsl está obsoleta para little endian; utilize asignación para cargas y almacenajes no alineados" + +-#: config/rs6000/rs6000-c.c:5579 ++#: config/rs6000/rs6000-c.c:5582 + #, gcc-internal-format + msgid "vec_lvsr is deprecated for little endian; use assignment for unaligned loads and stores" + msgstr "vec_lvsr está obsoleta para little endian; utilize asignación para cargas y almacenajes no alineados" + +-#: config/rs6000/rs6000-c.c:5589 ++#: config/rs6000/rs6000-c.c:5592 + #, gcc-internal-format + msgid "vec_mul only accepts 2 arguments" + msgstr "vec_mul sólo acepta 2 argumentos" + +-#: config/rs6000/rs6000-c.c:5640 ++#: config/rs6000/rs6000-c.c:5643 + #, gcc-internal-format + msgid "vec_cmpne only accepts 2 arguments" + msgstr "vec_cmpne sólo acepta 2 argumentos" + +-#: config/rs6000/rs6000-c.c:5710 ++#: config/rs6000/rs6000-c.c:5713 + #, gcc-internal-format + msgid "vec_adde only accepts 3 arguments" + msgstr "vec_adde sólo acepta 3 argumentos" + +-#: config/rs6000/rs6000-c.c:5774 ++#: config/rs6000/rs6000-c.c:5777 + #, gcc-internal-format + msgid "vec_addec only accepts 3 arguments" + msgstr "vec_addec sólo acepta 3 argumentos" + +-#: config/rs6000/rs6000-c.c:5862 ++#: config/rs6000/rs6000-c.c:5865 + #, gcc-internal-format, gfc-internal-format + msgid "%s only accepts %d arguments" + msgstr "%s sólo acepta %d argumentos" + +-#: config/rs6000/rs6000-c.c:5867 ++#: config/rs6000/rs6000-c.c:5870 + #, gcc-internal-format, gfc-internal-format + msgid "%s only accepts 1 argument" + msgstr "%s sólo acepta 1 argumento" + +-#: config/rs6000/rs6000-c.c:5872 ++#: config/rs6000/rs6000-c.c:5875 + #, gcc-internal-format, gfc-internal-format + msgid "%s only accepts 2 arguments" + msgstr "%s sólo acepta 2 argumentos" + +-#: config/rs6000/rs6000-c.c:5938 ++#: config/rs6000/rs6000-c.c:5941 + #, gcc-internal-format + msgid "vec_extract only accepts 2 arguments" + msgstr "vec_extract sólo acepta 2 argumentos" + +-#: config/rs6000/rs6000-c.c:6107 ++#: config/rs6000/rs6000-c.c:6110 + #, gcc-internal-format + msgid "vec_insert only accepts 3 arguments" + msgstr "vec_insert sólo acepta 3 argumentos" + +-#: config/rs6000/rs6000-c.c:6381 ++#: config/rs6000/rs6000-c.c:6388 + #, gcc-internal-format + msgid "passing arg %d of %qE discards qualifiers from pointer target type" + msgstr "el paso del argumento %d de %qE descarta los calificadores del tipo del destino del puntero" + +-#: config/rs6000/rs6000-c.c:6435 ++#: config/rs6000/rs6000-c.c:6442 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s not supported in this compiler configuration" + msgstr "No se admite la función interna %s en esta configuración del compilador" + +-#: config/rs6000/rs6000-c.c:6443 ++#: config/rs6000/rs6000-c.c:6450 + #, gcc-internal-format, gfc-internal-format + msgid "invalid parameter combination for AltiVec intrinsic %s" + msgstr "combinación de parámetros no válida para el intrínseco AltiVec %s" + +-#: config/rs6000/rs6000.c:3642 ++#: config/rs6000/rs6000.c:3644 + #, gcc-internal-format + msgid "-mrecip requires -ffinite-math or -ffast-math" + msgstr "-recip requiere -ffinite-math o -ffast-math" + +-#: config/rs6000/rs6000.c:3644 ++#: config/rs6000/rs6000.c:3646 + #, gcc-internal-format + msgid "-mrecip requires -fno-trapping-math or -ffast-math" + msgstr "-mrecip requiere -fno-trapping-math o -ffast-math" + +-#: config/rs6000/rs6000.c:3646 ++#: config/rs6000/rs6000.c:3648 + #, gcc-internal-format + msgid "-mrecip requires -freciprocal-math or -ffast-math" + msgstr "-mrecip requiere -freciprocal-math o -ffast-math" + +-#: config/rs6000/rs6000.c:3746 ++#: config/rs6000/rs6000.c:3748 + #, gcc-internal-format + msgid "-m64 requires PowerPC64 architecture, enabling" + msgstr "-m64 requiere la arquitectura PowerPC64, activando" + +-#: config/rs6000/rs6000.c:3929 ++#: config/rs6000/rs6000.c:3931 + #, gcc-internal-format + msgid "-malign-power is not supported for 64-bit Darwin; it is incompatible with the installed C and C++ libraries" + msgstr "no se admite -malign-power para Darwin de 64-bit; es incompatible con las bibliotecas C y C++ instaladas" + +-#: config/rs6000/rs6000.c:4021 ++#: config/rs6000/rs6000.c:4023 + #, gcc-internal-format + msgid "will not generate power9 instructions because assembler lacks power9 support" + msgstr "no generará instrucciones power9 porque el ensamblador no las admite" + +-#: config/rs6000/rs6000.c:4030 ++#: config/rs6000/rs6000.c:4032 + #, gcc-internal-format + msgid "will not generate power8 instructions because assembler lacks power8 support" + msgstr "no generará instrucciones power8 porque el ensamblador no las admite" + +-#: config/rs6000/rs6000.c:4039 ++#: config/rs6000/rs6000.c:4041 + #, gcc-internal-format + msgid "will not generate power7 instructions because assembler lacks power7 support" + msgstr "no generará instrucciones power7 porque el ensamblador no las admite" + +-#: config/rs6000/rs6000.c:4048 ++#: config/rs6000/rs6000.c:4050 + #, gcc-internal-format + msgid "will not generate power6 instructions because assembler lacks power6 support" + msgstr "no generará instrucciones power6 porque el ensamblador no las admite" + +-#: config/rs6000/rs6000.c:4057 ++#: config/rs6000/rs6000.c:4059 + #, gcc-internal-format + msgid "will not generate power5 instructions because assembler lacks power5 support" + msgstr "no generará instrucciones power5 porque el ensamblador no las admite" + +-#: config/rs6000/rs6000.c:4145 ++#: config/rs6000/rs6000.c:4147 + #, gcc-internal-format + msgid "not configured for SPE ABI" + msgstr "no se configuró para ABI SPE" + +-#: config/rs6000/rs6000.c:4150 ++#: config/rs6000/rs6000.c:4152 + #, gcc-internal-format + msgid "not configured for SPE instruction set" + msgstr "no configurado para el conjunto de instrucciones SPE" + +-#: config/rs6000/rs6000.c:4156 ++#: config/rs6000/rs6000.c:4158 + #, gcc-internal-format + msgid "target attribute or pragma changes SPE ABI" + msgstr "el atributo o pragma target cabia la ABI SPE" + +-#: config/rs6000/rs6000.c:4163 ++#: config/rs6000/rs6000.c:4165 + #, gcc-internal-format + msgid "AltiVec not supported in this target" + msgstr "no se admite AltiVec en este objetivo" + +-#: config/rs6000/rs6000.c:4165 config/rs6000/rs6000.c:4170 ++#: config/rs6000/rs6000.c:4167 config/rs6000/rs6000.c:4172 + #, gcc-internal-format + msgid "SPE not supported in this target" + msgstr "no se admite SPE en este objetivo" + +-#: config/rs6000/rs6000.c:4198 ++#: config/rs6000/rs6000.c:4200 + #, gcc-internal-format + msgid "-mmultiple is not supported on little endian systems" + msgstr "no se admite -mmultiple en sistemas little endian" + +-#: config/rs6000/rs6000.c:4205 ++#: config/rs6000/rs6000.c:4207 + #, gcc-internal-format + msgid "-mstring is not supported on little endian systems" + msgstr "no se admite -mstring en sistemas little endian" +@@ -29590,67 +29654,67 @@ + + #. Enforce that none of the ISA_3_0_MASKS_SERVER flags + #. were explicitly cleared. +-#: config/rs6000/rs6000.c:4301 config/rs6000/rs6000.c:4312 ++#: config/rs6000/rs6000.c:4303 config/rs6000/rs6000.c:4314 + #, gcc-internal-format + msgid "-mpower9-minmax incompatible with explicitly disabled options" + msgstr "-mpower9-minmax es incompatible con las opciones desactivadas explícitamente" + +-#: config/rs6000/rs6000.c:4304 ++#: config/rs6000/rs6000.c:4306 + #, gcc-internal-format + msgid "Power9 target option is incompatible with -mcpu= for less than power9" + msgstr "la opción del objetivo Power9 es incompatible con -mcpu= para menor que power9" + +-#: config/rs6000/rs6000.c:4336 ++#: config/rs6000/rs6000.c:4338 + #, gcc-internal-format + msgid "-mcrypto requires -maltivec" + msgstr "-mcrypto requiere -maltivec" + +-#: config/rs6000/rs6000.c:4343 ++#: config/rs6000/rs6000.c:4345 + #, gcc-internal-format + msgid "-mdirect-move requires -mvsx" + msgstr "-mdirect-move requiere -mvsx" + +-#: config/rs6000/rs6000.c:4350 ++#: config/rs6000/rs6000.c:4352 + #, gcc-internal-format + msgid "-mpower8-vector requires -maltivec" + msgstr "-mpower8-vector requiere -maltivec" + +-#: config/rs6000/rs6000.c:4358 ++#: config/rs6000/rs6000.c:4360 + #, gcc-internal-format + msgid "-mpower8-vector requires -mvsx" + msgstr "-mpower8-vector requiere -mvsx" + +-#: config/rs6000/rs6000.c:4377 ++#: config/rs6000/rs6000.c:4379 + #, gcc-internal-format + msgid "-mvsx-timode requires -mvsx" + msgstr "-mvsx-timode requiere -mvsx" + +-#: config/rs6000/rs6000.c:4384 ++#: config/rs6000/rs6000.c:4386 + #, gcc-internal-format + msgid "-mhard-dfp requires -mhard-float" + msgstr "-mhard-dfp requiere -mhard-float" + +-#: config/rs6000/rs6000.c:4437 ++#: config/rs6000/rs6000.c:4439 + #, gcc-internal-format + msgid "-mupper-regs-df requires -mvsx" + msgstr "-mupper-regs-df requiere -mvsx" + +-#: config/rs6000/rs6000.c:4444 ++#: config/rs6000/rs6000.c:4446 + #, gcc-internal-format + msgid "-mupper-regs-di requires -mvsx" + msgstr "-mupper-regs-di requiere -mvsx" + +-#: config/rs6000/rs6000.c:4451 ++#: config/rs6000/rs6000.c:4453 + #, gcc-internal-format + msgid "-mupper-regs-sf requires -mpower8-vector" + msgstr "-mupper-regs-sf requiere -mpower8-vector" + +-#: config/rs6000/rs6000.c:4500 ++#: config/rs6000/rs6000.c:4502 + #, gcc-internal-format + msgid "-mpower8-fusion-sign requires -mpower8-fusion" + msgstr "-mpower8-fusion-sign requiere -mpower8-fusion" + +-#: config/rs6000/rs6000.c:4503 ++#: config/rs6000/rs6000.c:4505 + #, gcc-internal-format + msgid "-mtoc-fusion requires -mpower8-fusion" + msgstr "-mtoc-fusion requiere -mpower8-fusion" +@@ -29659,244 +29723,244 @@ + #. error messages. However, if users have managed to select + #. power9-fusion without selecting power8-fusion, they + #. already know about undocumented flags. +-#: config/rs6000/rs6000.c:4520 ++#: config/rs6000/rs6000.c:4522 + #, gcc-internal-format + msgid "-mpower9-fusion requires -mpower8-fusion" + msgstr "-mpower9-fusion requiere -mpower8-fusion" + +-#: config/rs6000/rs6000.c:4573 ++#: config/rs6000/rs6000.c:4575 + #, gcc-internal-format + msgid "-mpower9-vector requires -mpower8-vector" + msgstr "-mpower9-vector requiere -mpower8-vector" + +-#: config/rs6000/rs6000.c:4618 ++#: config/rs6000/rs6000.c:4620 + #, gcc-internal-format + msgid "-mpower9-dform requires -mpower9-vector" + msgstr "-mpower9-dform requiere -mpower9-vector" + +-#: config/rs6000/rs6000.c:4647 ++#: config/rs6000/rs6000.c:4649 + #, gcc-internal-format + msgid "-mpower9-dform, -mpower9-dform-vector, -mpower9-dform-scalar require -mdirect-move" + msgstr "-mpower9-dform, -mpower9-dform-vector, -mpower9-dform-scalar requieren -mdirect-move" + +-#: config/rs6000/rs6000.c:4670 ++#: config/rs6000/rs6000.c:4672 + #, gcc-internal-format + msgid "-mpower9-dform requires -mupper-regs-df" + msgstr "-mpower9-dform requiere -mupper-regs-df" + +-#: config/rs6000/rs6000.c:4677 ++#: config/rs6000/rs6000.c:4679 + #, gcc-internal-format + msgid "-mpower9-dform requires -mupper-regs-sf" + msgstr "-mpower9-dform requiere -mupper-regs-sf" + +-#: config/rs6000/rs6000.c:4697 ++#: config/rs6000/rs6000.c:4699 + #, gcc-internal-format + msgid "-mvsx-timode might need -mlra" + msgstr "" + +-#: config/rs6000/rs6000.c:4722 ++#: config/rs6000/rs6000.c:4724 + #, gcc-internal-format + msgid "-mallow-movmisalign requires -mvsx" + msgstr "" + +-#: config/rs6000/rs6000.c:4737 ++#: config/rs6000/rs6000.c:4739 + #, gcc-internal-format + msgid "-mefficient-unaligned-vsx requires -mvsx" + msgstr "" + +-#: config/rs6000/rs6000.c:4745 ++#: config/rs6000/rs6000.c:4747 + #, gcc-internal-format + msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign" + msgstr "" + +-#: config/rs6000/rs6000.c:4759 ++#: config/rs6000/rs6000.c:4761 + #, gcc-internal-format + msgid "-mvsx-small-integer requires -mpower8-vector, -mupper-regs-di, and -mdirect-move" + msgstr "" + +-#: config/rs6000/rs6000.c:4771 ++#: config/rs6000/rs6000.c:4773 + #, gcc-internal-format + msgid "target attribute or pragma changes long double size" + msgstr "el atributo o pragma target cambia el tamaño de double long" + +-#: config/rs6000/rs6000.c:4797 ++#: config/rs6000/rs6000.c:4799 + #, gcc-internal-format + msgid "-mfloat128 requires VSX support" + msgstr "" + +-#: config/rs6000/rs6000.c:4807 ++#: config/rs6000/rs6000.c:4809 + #, gcc-internal-format + msgid "-mfloat128-type requires VSX support" + msgstr "" + +-#: config/rs6000/rs6000.c:4823 ++#: config/rs6000/rs6000.c:4825 + #, gcc-internal-format + msgid "-mfloat128 requires -mfloat128-type" + msgstr "" + +-#: config/rs6000/rs6000.c:4836 ++#: config/rs6000/rs6000.c:4838 + #, fuzzy, gcc-internal-format + #| msgid "-mrecip requires -mfused-madd" + msgid "-mfloat128-hardware requires -mfloat128-type" + msgstr "-mrecip requiere -mfused-madd" + +-#: config/rs6000/rs6000.c:4859 ++#: config/rs6000/rs6000.c:4861 + #, gcc-internal-format + msgid "-mfloat128-hardware requires full ISA 3.0 support" + msgstr "" + +-#: config/rs6000/rs6000.c:4867 ++#: config/rs6000/rs6000.c:4869 + #, fuzzy, gcc-internal-format + #| msgid "-mrecip requires -mfused-madd" + msgid "-mfloat128-hardware requires -m64" + msgstr "-mrecip requiere -mfused-madd" + +-#: config/rs6000/rs6000.c:4931 ++#: config/rs6000/rs6000.c:4933 + #, gcc-internal-format, gfc-internal-format + msgid "unknown vectorization library ABI type (%s) for -mveclibabi= switch" + msgstr "tipo de ABI de biblioteca de vectorización desconocida (%s) para la opción -mveclibabi=" + +-#: config/rs6000/rs6000.c:4952 config/rs6000/rs6000.c:4967 ++#: config/rs6000/rs6000.c:4954 config/rs6000/rs6000.c:4969 + #, gcc-internal-format + msgid "target attribute or pragma changes AltiVec ABI" + msgstr "el atributo o pragma target cambia la ABI Altivec" + +-#: config/rs6000/rs6000.c:4980 ++#: config/rs6000/rs6000.c:4982 + #, gcc-internal-format + msgid "target attribute or pragma changes darwin64 ABI" + msgstr "el atributo o pragma target cambia la ABI darwin64" + +-#: config/rs6000/rs6000.c:5046 ++#: config/rs6000/rs6000.c:5048 + #, gcc-internal-format + msgid "target attribute or pragma changes single precision floating point" + msgstr "el atributo o pragma target cambia la coma flotante de precisión sencilla" + +-#: config/rs6000/rs6000.c:5049 ++#: config/rs6000/rs6000.c:5051 + #, gcc-internal-format + msgid "target attribute or pragma changes double precision floating point" + msgstr "el atributo o pragma target cambia la coma flotante de precisión doble" + +-#: config/rs6000/rs6000.c:5151 ++#: config/rs6000/rs6000.c:5153 + #, gcc-internal-format + msgid "%qs is not a valid number in -mstack-protector-guard-offset=" + msgstr "" + +-#: config/rs6000/rs6000.c:5156 ++#: config/rs6000/rs6000.c:5158 + #, fuzzy, gcc-internal-format + #| msgid "%qs is not a valid option to the preprocessor" + msgid "%qs is not a valid offset in -mstack-protector-guard-offset=" + msgstr "%qs no es una opción válida para el preprocesador" + +-#: config/rs6000/rs6000.c:5168 ++#: config/rs6000/rs6000.c:5170 + #, gcc-internal-format + msgid "%qs is not a valid base register in -mstack-protector-guard-reg=" + msgstr "" + +-#: config/rs6000/rs6000.c:5176 ++#: config/rs6000/rs6000.c:5178 + #, gcc-internal-format + msgid "-mstack-protector-guard=tls needs a valid base register" + msgstr "" + +-#: config/rs6000/rs6000.c:8171 ++#: config/rs6000/rs6000.c:8202 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" + msgid "the layout of aggregates containing vectors with %d-byte alignment has changed in GCC 5" + msgstr "La ABI para pasar parámetros con alineación de %d-bytes cambió en GCC 4.6" + +-#: config/rs6000/rs6000.c:11584 ++#: config/rs6000/rs6000.c:11615 + #, gcc-internal-format + msgid "GCC vector returned by reference: non-standard ABI extension with no compatibility guarantee" + msgstr "Se devolvió un vector GCC por referencia: extensión de ABI no estándar sin garantía de compatibilidad" + +-#: config/rs6000/rs6000.c:11746 ++#: config/rs6000/rs6000.c:11777 + #, gcc-internal-format + msgid "cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them" + msgstr "no se puede devolver un valor en el registro vector porque las instrucciones altivec están desactivadas, use -maltivec para activarlas" + +-#: config/rs6000/rs6000.c:11946 ++#: config/rs6000/rs6000.c:11977 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" + msgid "the ABI of passing aggregates with %d-byte alignment has changed in GCC 5" + msgstr "La ABI para pasar parámetros con alineación de %d-bytes cambió en GCC 4.6" + +-#: config/rs6000/rs6000.c:12215 ++#: config/rs6000/rs6000.c:12246 + #, gcc-internal-format + msgid "cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them" + msgstr "no se puede pasar argumentos en el registro vector porque las instrucciones altivec están desactivadas, use -maltivec para activarlas" + +-#: config/rs6000/rs6000.c:13067 ++#: config/rs6000/rs6000.c:13098 + #, fuzzy, gcc-internal-format + #| msgid "the ABI of passing structure with complex float member has changed in GCC 4.4" + msgid "the ABI of passing homogeneous float aggregates has changed in GCC 5" + msgstr "la ABI para pasar una estructura con un miembro de coma flotante compleja cambió en GCC 4.4" + +-#: config/rs6000/rs6000.c:13242 ++#: config/rs6000/rs6000.c:13273 + #, gcc-internal-format + msgid "GCC vector passed by reference: non-standard ABI extension with no compatibility guarantee" + msgstr "vector GCC pasado por referencia: extensión ABI que no es estándar sin garantía de compatibilidad" + +-#: config/rs6000/rs6000.c:14036 ++#: config/rs6000/rs6000.c:14067 + #, gcc-internal-format, gfc-internal-format + msgid "internal error: builtin function %s already processed" + msgstr "error interno: la función interna %s ya se procesó" + +-#: config/rs6000/rs6000.c:14540 ++#: config/rs6000/rs6000.c:14571 + #, fuzzy, gcc-internal-format + #| msgid "argument 1 must be a 5-bit signed literal" + msgid "argument 1 must be an 8-bit field value" + msgstr "el argumento 1 debe ser una literal con signo de 5-bit" + +-#: config/rs6000/rs6000.c:14586 ++#: config/rs6000/rs6000.c:14617 + #, gcc-internal-format + msgid "argument 1 must be a 5-bit signed literal" + msgstr "el argumento 1 debe ser una literal con signo de 5-bit" + +-#: config/rs6000/rs6000.c:14689 config/rs6000/rs6000.c:16557 ++#: config/rs6000/rs6000.c:14720 config/rs6000/rs6000.c:16593 + #, gcc-internal-format + msgid "argument 2 must be a 5-bit unsigned literal" + msgstr "el argumento 2 debe ser una literal sin signo de 5-bit" + +-#: config/rs6000/rs6000.c:14707 ++#: config/rs6000/rs6000.c:14738 + #, fuzzy, gcc-internal-format + #| msgid "argument 2 must be a 5-bit unsigned literal" + msgid "argument 1 must be a 6-bit unsigned literal" + msgstr "el argumento 2 debe ser una literal sin signo de 5-bit" + +-#: config/rs6000/rs6000.c:14721 ++#: config/rs6000/rs6000.c:14752 + #, fuzzy, gcc-internal-format + #| msgid "argument 2 must be a 5-bit unsigned literal" + msgid "argument 2 must be a 7-bit unsigned literal" + msgstr "el argumento 2 debe ser una literal sin signo de 5-bit" + +-#: config/rs6000/rs6000.c:14760 ++#: config/rs6000/rs6000.c:14791 + #, gcc-internal-format + msgid "argument 1 of __builtin_altivec_predicate must be a constant" + msgstr "el argumento 1 de __builtin_altivec_predicate debe ser una constante" + +-#: config/rs6000/rs6000.c:14817 ++#: config/rs6000/rs6000.c:14848 + #, gcc-internal-format + msgid "argument 1 of __builtin_altivec_predicate is out of range" + msgstr "el argumento 1 de __builtin_altivec_predicate está fuera de rango" + +-#: config/rs6000/rs6000.c:15305 ++#: config/rs6000/rs6000.c:15336 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "%srtd%s is ignored in 64bit mode" + msgid "builtin %s is only valid in 64-bit mode" + msgstr "se descarta %srtd%s en el modo de 64bit" + +-#: config/rs6000/rs6000.c:15354 ++#: config/rs6000/rs6000.c:15385 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "argument 2 must be a 5-bit unsigned literal" + msgid "argument %d must be an unsigned literal" + msgstr "el argumento 2 debe ser una literal sin signo de 5-bit" + +-#: config/rs6000/rs6000.c:15356 ++#: config/rs6000/rs6000.c:15387 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "argument 1 of __builtin_spe_predicate is out of range" + msgid "argument %d is an unsigned literal that is out of range" + msgstr "el argumento 1 de __builtin_spe_predicate está fuera de rango" + +-#: config/rs6000/rs6000.c:15494 ++#: config/rs6000/rs6000.c:15525 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "%s only accepts 1 argument" + msgid "builtin %s only accepts a string argument" +@@ -29903,7 +29967,7 @@ + msgstr "%s sólo acepta 1 argumento" + + #. Invalid CPU argument. +-#: config/rs6000/rs6000.c:15513 ++#: config/rs6000/rs6000.c:15544 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "%qs is an invalid argument to -mcpu=" + msgid "cpu %s is an invalid argument to builtin %s" +@@ -29910,79 +29974,84 @@ + msgstr "%qs es un argumento no válido para -mcpu=" + + #. Invalid HWCAP argument. +-#: config/rs6000/rs6000.c:15541 ++#: config/rs6000/rs6000.c:15572 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "%qs is an invalid argument to -mcpu=" + msgid "hwcap %s is an invalid argument to builtin %s" + msgstr "%qs es un argumento no válido para -mcpu=" + +-#: config/rs6000/rs6000.c:15615 ++#: config/rs6000/rs6000.c:15598 ++#, gcc-internal-format, gfc-internal-format ++msgid "%s needs GLIBC (2.23 and newer) that exports hardware capability bits" ++msgstr "" ++ ++#: config/rs6000/rs6000.c:15651 + #, gcc-internal-format + msgid "argument 3 must be a 4-bit unsigned literal" + msgstr "el argumento 3 debe ser una literal sin signo de 4-bit" + +-#: config/rs6000/rs6000.c:15640 ++#: config/rs6000/rs6000.c:15676 + #, gcc-internal-format + msgid "argument 3 must be a 2-bit unsigned literal" + msgstr "el argumento 3 debe ser una literal sin signo de 2-bit" + +-#: config/rs6000/rs6000.c:15660 ++#: config/rs6000/rs6000.c:15696 + #, gcc-internal-format + msgid "argument 3 must be a 1-bit unsigned literal" + msgstr "el argumento 3 debe ser una literal sin signo de 1-bit" + +-#: config/rs6000/rs6000.c:15672 ++#: config/rs6000/rs6000.c:15708 + #, fuzzy, gcc-internal-format + #| msgid "argument 1 must be a map" + msgid "argument 1 must be 0 or 2" + msgstr "el argumento 1 debe ser un mapa" + +-#: config/rs6000/rs6000.c:15684 ++#: config/rs6000/rs6000.c:15720 + #, fuzzy, gcc-internal-format + #| msgid "argument 3 must be a 1-bit unsigned literal" + msgid "argument 1 must be a 1-bit unsigned literal" + msgstr "el argumento 3 debe ser una literal sin signo de 1-bit" + +-#: config/rs6000/rs6000.c:15698 ++#: config/rs6000/rs6000.c:15734 + #, fuzzy, gcc-internal-format + #| msgid "argument 2 must be a 5-bit unsigned literal" + msgid "argument 2 must be a 6-bit unsigned literal" + msgstr "el argumento 2 debe ser una literal sin signo de 5-bit" + +-#: config/rs6000/rs6000.c:15710 ++#: config/rs6000/rs6000.c:15746 + #, fuzzy, gcc-internal-format + #| msgid "number must be 0 or 1" + msgid "argument 2 must be 0 or 1" + msgstr "el número debe ser 0 ó 1" + +-#: config/rs6000/rs6000.c:15717 ++#: config/rs6000/rs6000.c:15753 + #, fuzzy, gcc-internal-format + #| msgid "argument %d of %qE must be in the range %d...%d" + msgid "argument 3 must be in the range 0..15" + msgstr "el argumento %d de %qE debe estar dentro del rango %d...%d" + +-#: config/rs6000/rs6000.c:15906 ++#: config/rs6000/rs6000.c:15942 + #, gcc-internal-format + msgid "argument to %qs must be a 2-bit unsigned literal" + msgstr "el argumento para %qs debe ser una literal sin signo de 2-bit" + +-#: config/rs6000/rs6000.c:16063 ++#: config/rs6000/rs6000.c:16099 + #, gcc-internal-format + msgid "unresolved overload for Altivec builtin %qF" + msgstr "sobrecarga sin resolver para el interno Altivec %qF" + +-#: config/rs6000/rs6000.c:16237 ++#: config/rs6000/rs6000.c:16273 + #, gcc-internal-format + msgid "argument to dss must be a 2-bit unsigned literal" + msgstr "el argumento para dss debe ser una literal sin signo de 2-bit" + +-#: config/rs6000/rs6000.c:16285 ++#: config/rs6000/rs6000.c:16321 + #, fuzzy, gcc-internal-format + #| msgid "second argument to %<__builtin_expect%> must be a constant" + msgid "second argument to vec_vextract4b must be 0..12" + msgstr "el segundo argumento de %<__builtin_expect%> debe ser una constante" + +-#: config/rs6000/rs6000.c:16302 ++#: config/rs6000/rs6000.c:16338 + #, fuzzy, gcc-internal-format + #| msgid "third argument to %<__builtin_prefetch%> must be a constant" + msgid "third argument to vec_vinsert4b must be 0..12" +@@ -29989,218 +30058,218 @@ + msgstr "el tercer argumento de %<__builtin_prefetch%> debe ser una constante" + + # continuar aqui +-#: config/rs6000/rs6000.c:16677 ++#: config/rs6000/rs6000.c:16713 + #, gcc-internal-format + msgid "argument 1 of __builtin_paired_predicate must be a constant" + msgstr "el argumento 1 de __builtin_paired_predicate debe ser una constante" + +-#: config/rs6000/rs6000.c:16724 ++#: config/rs6000/rs6000.c:16760 + #, gcc-internal-format + msgid "argument 1 of __builtin_paired_predicate is out of range" + msgstr "el argumento 1 de __builtin_paired_predicate está fuera de rango" + +-#: config/rs6000/rs6000.c:16749 ++#: config/rs6000/rs6000.c:16785 + #, gcc-internal-format + msgid "argument 1 of __builtin_spe_predicate must be a constant" + msgstr "el argumento 1 de __builtin_spe_predicate debe ser una constante" + +-#: config/rs6000/rs6000.c:16821 ++#: config/rs6000/rs6000.c:16857 + #, gcc-internal-format + msgid "argument 1 of __builtin_spe_predicate is out of range" + msgstr "el argumento 1 de __builtin_spe_predicate está fuera de rango" + +-#: config/rs6000/rs6000.c:16903 ++#: config/rs6000/rs6000.c:16939 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s is only valid for the cell processor" + msgstr "La función interna %s sólo es válida para el procesador cell" + +-#: config/rs6000/rs6000.c:16905 ++#: config/rs6000/rs6000.c:16941 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s requires the -mvsx option" + msgstr "La función interna %s requiere la opción -mvsx" + +-#: config/rs6000/rs6000.c:16907 ++#: config/rs6000/rs6000.c:16943 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mvsx option" + msgid "Builtin function %s requires the -mhtm option" + msgstr "La función interna %s requiere la opción -mvsx" + +-#: config/rs6000/rs6000.c:16909 ++#: config/rs6000/rs6000.c:16945 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s requires the -maltivec option" + msgstr "La función interna %s requiere la opción -maltivec" + +-#: config/rs6000/rs6000.c:16911 ++#: config/rs6000/rs6000.c:16947 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s requires the -mpaired option" + msgstr "La función interna %s requiere la opción -mpaired" + +-#: config/rs6000/rs6000.c:16913 ++#: config/rs6000/rs6000.c:16949 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s requires the -mspe option" + msgstr "La función interna %s requiere la opción -mspe" + +-#: config/rs6000/rs6000.c:16916 ++#: config/rs6000/rs6000.c:16952 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mpaired option" + msgid "Builtin function %s requires the -mhard-dfp and -mpower8-vector options" + msgstr "La función interna %s requiere la opción -mpaired" + +-#: config/rs6000/rs6000.c:16919 ++#: config/rs6000/rs6000.c:16955 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mpaired option" + msgid "Builtin function %s requires the -mhard-dfp option" + msgstr "La función interna %s requiere la opción -mpaired" + +-#: config/rs6000/rs6000.c:16921 ++#: config/rs6000/rs6000.c:16957 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mspe option" + msgid "Builtin function %s requires the -mpower8-vector option" + msgstr "La función interna %s requiere la opción -mspe" + +-#: config/rs6000/rs6000.c:16924 config/rs6000/rs6000.c:16930 ++#: config/rs6000/rs6000.c:16960 config/rs6000/rs6000.c:16966 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mspe option" + msgid "Builtin function %s requires the -mcpu=power9 and -m64 options" + msgstr "La función interna %s requiere la opción -mspe" + +-#: config/rs6000/rs6000.c:16927 config/rs6000/rs6000.c:16933 ++#: config/rs6000/rs6000.c:16963 config/rs6000/rs6000.c:16969 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mspe option" + msgid "Builtin function %s requires the -mcpu=power9 option" + msgstr "La función interna %s requiere la opción -mspe" + +-#: config/rs6000/rs6000.c:16936 ++#: config/rs6000/rs6000.c:16972 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -maltivec option" + msgid "Builtin function %s requires the -mhard-float and -mlong-double-128 options" + msgstr "La función interna %s requiere la opción -maltivec" + +-#: config/rs6000/rs6000.c:16939 ++#: config/rs6000/rs6000.c:16975 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -mpaired option" + msgid "Builtin function %s requires the -mhard-float option" + msgstr "La función interna %s requiere la opción -mpaired" + +-#: config/rs6000/rs6000.c:16941 ++#: config/rs6000/rs6000.c:16977 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "Builtin function %s requires the -maltivec option" + msgid "Builtin function %s requires the -mfloat128 option" + msgstr "La función interna %s requiere la opción -maltivec" + +-#: config/rs6000/rs6000.c:16943 ++#: config/rs6000/rs6000.c:16979 + #, gcc-internal-format, gfc-internal-format + msgid "Builtin function %s is not supported with the current options" + msgstr "La función interna %s no se admite con las opciones actuales" + +-#: config/rs6000/rs6000.c:18786 ++#: config/rs6000/rs6000.c:18833 + #, gcc-internal-format, gfc-internal-format + msgid "internal error: builtin function %s had an unexpected return type %s" + msgstr "error interno: la función interna %s tiene un tipo de devolución inesperado %s" + +-#: config/rs6000/rs6000.c:18803 ++#: config/rs6000/rs6000.c:18850 + #, gcc-internal-format, gfc-internal-format + msgid "internal error: builtin function %s, argument %d had unexpected argument type %s" + msgstr "error interno: función interna %s, el argumento %d tiene el tipo de argumento inesperado %s" + +-#: config/rs6000/rs6000.c:28088 ++#: config/rs6000/rs6000.c:28135 + #, gcc-internal-format + msgid "stack frame too large" + msgstr "marco de pila demasiado grande" + +-#: config/rs6000/rs6000.c:31766 ++#: config/rs6000/rs6000.c:31815 + #, fuzzy, gcc-internal-format + #| msgid "-fsplit-stack does not support 3 register parameters" + msgid "-fsplit-stack uses register r29" + msgstr "-fsplit-stack no admite 3 parámetros de registro" + +-#: config/rs6000/rs6000.c:31774 ++#: config/rs6000/rs6000.c:31823 + #, fuzzy, gcc-internal-format + #| msgid "#pragma GCC target is not supported for this machine" + msgid "Stack frame larger than 2G is not supported for -fsplit-stack" + msgstr "No se admite #pragma GCC target en este objetivo" + +-#: config/rs6000/rs6000.c:32762 ++#: config/rs6000/rs6000.c:32811 + #, gcc-internal-format + msgid "no profiling of 64-bit code for this ABI" + msgstr "no hay análisis de perfil del código de 64-bit para esta ABI" + +-#: config/rs6000/rs6000.c:35065 ++#: config/rs6000/rs6000.c:35114 + #, gcc-internal-format + msgid "You cannot take the address of a nested function if you use the -mno-pointers-to-nested-functions option." + msgstr "No se puede tomar la dirección de una función anindada si se usa la opción -mno-pointers-to-nested-functions." + +-#: config/rs6000/rs6000.c:35147 ++#: config/rs6000/rs6000.c:35196 + #, gcc-internal-format + msgid "use of % in AltiVec types is invalid" + msgstr "el uso de % en tipos AltiVec es no válido" + +-#: config/rs6000/rs6000.c:35149 ++#: config/rs6000/rs6000.c:35198 + #, gcc-internal-format + msgid "use of boolean types in AltiVec types is invalid" + msgstr "el uso de tipos booleanos en tipos AltiVec es no válido" + +-#: config/rs6000/rs6000.c:35151 ++#: config/rs6000/rs6000.c:35200 + #, gcc-internal-format + msgid "use of % in AltiVec types is invalid" + msgstr "el uso de % en tipos AltiVec es no válido" + +-#: config/rs6000/rs6000.c:35153 ++#: config/rs6000/rs6000.c:35202 + #, gcc-internal-format + msgid "use of decimal floating point types in AltiVec types is invalid" + msgstr "el uso de tipos de coma flotante decimal en tipos AltiVec es no válido" + +-#: config/rs6000/rs6000.c:35159 ++#: config/rs6000/rs6000.c:35208 + #, gcc-internal-format + msgid "use of % in AltiVec types is invalid for 64-bit code without -mvsx" + msgstr "el uso de % en tipos AltiVec es no válido para código de 64 bit sin -mvsx" + +-#: config/rs6000/rs6000.c:35162 ++#: config/rs6000/rs6000.c:35211 + #, gcc-internal-format + msgid "use of % in AltiVec types is deprecated; use %" + msgstr "el uso de % en tipos AltiVec es obsoleto; use %" + +-#: config/rs6000/rs6000.c:35167 ++#: config/rs6000/rs6000.c:35216 + #, gcc-internal-format + msgid "use of % in AltiVec types is invalid without -mvsx" + msgstr "el uso de % en tipos AltiVec es no válido sin -mvsx" + +-#: config/rs6000/rs6000.c:35170 ++#: config/rs6000/rs6000.c:35219 + #, gcc-internal-format + msgid "use of % in AltiVec types is invalid without -mvsx" + msgstr "el uso de % en tipos AltiVec es no válido sin -mvsx" + +-#: config/rs6000/rs6000.c:38943 ++#: config/rs6000/rs6000.c:38992 + #, gcc-internal-format, gfc-internal-format + msgid "emitting microcode insn %s\t[%s] #%d" + msgstr "se emite el insn de microcódigo %s\t[%s] #%d" + +-#: config/rs6000/rs6000.c:38947 ++#: config/rs6000/rs6000.c:38996 + #, gcc-internal-format, gfc-internal-format + msgid "emitting conditional microcode insn %s\t[%s] #%d" + msgstr "se emite el insn de microcódigo condicional %s\t[%s] #%d" + +-#: config/rs6000/rs6000.c:39255 ++#: config/rs6000/rs6000.c:39304 + #, gcc-internal-format, gfc-internal-format + msgid "invalid cpu \"%s\" for %s\"%s\"%s" + msgstr "cpu \"%s\" no válido para %s\"%s\"%s" + +-#: config/rs6000/rs6000.c:39258 ++#: config/rs6000/rs6000.c:39307 + #, gcc-internal-format, gfc-internal-format + msgid "%s\"%s\"%s is not allowed" + msgstr "%s\"%s\"%s no está definido" + +-#: config/rs6000/rs6000.c:39260 ++#: config/rs6000/rs6000.c:39309 + #, gcc-internal-format, gfc-internal-format + msgid "%s\"%s\"%s is invalid" + msgstr "%s\"%s\"%s es no válido" + +-#: config/rs6000/rs6000.c:39777 ++#: config/rs6000/rs6000.c:39826 + #, gcc-internal-format, gfc-internal-format + msgid "-mno-%s turns off -m%s" + msgstr "" + +-#: config/rs6000/rs6000.c:39794 ++#: config/rs6000/rs6000.c:39843 + #, gcc-internal-format + msgid "-mno-power9-vector turns off -mpower9-dform" + msgstr "" +@@ -30391,6 +30460,7 @@ + msgstr "-mas100-syntax es incompatible con -gdwarf" + + #: config/rs6000/freebsd64.h:113 config/rs6000/linux64.h:135 ++#: config/rs6000/rtems.h:96 + #, gcc-internal-format + msgid "-m64 requires a PowerPC64 cpu" + msgstr "-m64 requiere un procesador PowerPC64" +@@ -30483,7 +30553,7 @@ + msgid "builtin vec_step can only be used on vector types." + msgstr "" + +-#: config/s390/s390-c.c:685 config/s390/s390.c:913 ++#: config/s390/s390-c.c:685 config/s390/s390.c:916 + #, gcc-internal-format + msgid "constant value required for builtin %qF argument %d" + msgstr "" +@@ -30511,9 +30581,10 @@ + msgstr "--resource requiere -o" + + #: config/s390/s390-c.c:889 +-#, gcc-internal-format +-msgid "%qF requires -march=arch12 or higher" +-msgstr "" ++#, fuzzy, gcc-internal-format ++#| msgid "--resource requires -o" ++msgid "%qF requires z14 or higher" ++msgstr "--resource requiere -o" + + #: config/s390/s390-c.c:903 + #, gcc-internal-format +@@ -30533,9 +30604,10 @@ + msgstr "sobrecarga ambigua para %qs en %<%s %E%>" + + #: config/s390/s390-c.c:966 +-#, gcc-internal-format +-msgid "%qs matching variant requires -march=arch12 or higher" +-msgstr "" ++#, fuzzy, gcc-internal-format ++#| msgid "%qs is deprecated" ++msgid "%qs matching variant requires z14 or higher" ++msgstr "%qs es obsoleto" + + #: config/s390/s390-c.c:972 + #, fuzzy, gcc-internal-format +@@ -30549,162 +30621,162 @@ + msgid "constant argument %d for builtin %qF is out of range for target type" + msgstr "el argumento constante está fuera de rango para %qs" + +-#: config/s390/s390.c:769 ++#: config/s390/s390.c:772 + #, fuzzy, gcc-internal-format + #| msgid "constant argument out of range for %qs" + msgid "constant argument %d for builtin %qF is out of range (0.." + msgstr "el argumento constante está fuera de rango para %qs." + +-#: config/s390/s390.c:786 ++#: config/s390/s390.c:789 + #, fuzzy, gcc-internal-format + #| msgid "constant argument out of range for %qs" + msgid "constant argument %d for builtin %qF is out of range (" + msgstr "el argumento constante está fuera de rango para %qs" + +-#: config/s390/s390.c:837 ++#: config/s390/s390.c:840 + #, gcc-internal-format + msgid "builtin %qF is not supported without -mhtm (default with -march=zEC12 and higher)." + msgstr "" + +-#: config/s390/s390.c:843 ++#: config/s390/s390.c:846 + #, gcc-internal-format + msgid "builtin %qF requires -mvx (default with -march=z13 and higher)." + msgstr "" + +-#: config/s390/s390.c:850 ++#: config/s390/s390.c:853 + #, gcc-internal-format +-msgid "Builtin %qF requires arch12 or higher." ++msgid "Builtin %qF requires z14 or higher." + msgstr "" + +-#: config/s390/s390.c:869 ++#: config/s390/s390.c:872 + #, fuzzy, gcc-internal-format + #| msgid "" + msgid "unresolved overloaded builtin" + msgstr "" + +-#: config/s390/s390.c:876 config/tilegx/tilegx.c:3545 ++#: config/s390/s390.c:879 config/tilegx/tilegx.c:3545 + #: config/tilepro/tilepro.c:3109 + #, gcc-internal-format + msgid "bad builtin icode" + msgstr "icode interno erróneo" + +-#: config/s390/s390.c:1004 ++#: config/s390/s390.c:1007 + #, fuzzy, gcc-internal-format + #| msgid "Invalid argument %qs for %" + msgid "invalid argument %d for builtin %qF" + msgstr "Argumento %qs no válido para %" + +-#: config/s390/s390.c:1105 ++#: config/s390/s390.c:1108 + #, gcc-internal-format + msgid "requested %qE attribute is not a comma separated pair of non-negative integer constants or too large (max. %d)" + msgstr "" + +-#: config/s390/s390.c:9980 ++#: config/s390/s390.c:9987 + #, gcc-internal-format + msgid "total size of local variables exceeds architecture limit" + msgstr "el tamaño total de las variables locales excede el límite de la arquitectura" + +-#: config/s390/s390.c:11094 ++#: config/s390/s390.c:11101 + #, gcc-internal-format + msgid "frame size of function %qs is %wd bytes exceeding user provided stack limit of %d bytes. An unconditional trap is added." + msgstr "el tamaño de marco de la función %qs de %wd bytes excede el límite de pila definido por el usuario de %d bytes. Se agrega una trampa incondicional." + +-#: config/s390/s390.c:11110 ++#: config/s390/s390.c:11117 + #, gcc-internal-format + msgid "frame size of function %qs is %wd bytes which is more than half the stack size. The dynamic check would not be reliable. No check emitted for this function." + msgstr "el tamaño de marco de la función %qs de %wd bytes es mayor que la mitad del tamaño de la pila. La revisión dinámica no será confiable. No se emitirá revisión para esta función." + +-#: config/s390/s390.c:11138 ++#: config/s390/s390.c:11145 + #, gcc-internal-format + msgid "frame size of %qs is %wd bytes" + msgstr "el tamaño de marco de %qs es de %wd bytes" + +-#: config/s390/s390.c:11142 ++#: config/s390/s390.c:11149 + #, gcc-internal-format + msgid "%qs uses dynamic stack allocation" + msgstr "%qs utiliza alojamiento dinámico de pila" + +-#: config/s390/s390.c:11520 ++#: config/s390/s390.c:11527 + #, gcc-internal-format + msgid "CPUs older than z900 are not supported for -fsplit-stack" + msgstr "" + +-#: config/s390/s390.c:14666 ++#: config/s390/s390.c:14673 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "% is deprecated and will be removed in a future release" + msgid "%sarch=%s%s is deprecated and will be removed in future releases; use at least %sarch=z900%s" + msgstr "% es obsoleto y se eliminará en una versión futura" + +-#: config/s390/s390.c:14678 ++#: config/s390/s390.c:14685 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "% is deprecated and will be removed in a future release" + msgid "%stune=%s%s is deprecated and will be removed in future releases; use at least %stune=z900%s" + msgstr "% es obsoleto y se eliminará en una versión futura" + +-#: config/s390/s390.c:14690 ++#: config/s390/s390.c:14697 + #, gcc-internal-format, gfc-internal-format + msgid "z/Architecture mode not supported on %s" + msgstr "no se admite el modo z/Architecture en %s" + +-#: config/s390/s390.c:14693 ++#: config/s390/s390.c:14700 + #, gcc-internal-format + msgid "64-bit ABI not supported in ESA/390 mode" + msgstr "no se admite la ABI de 64-bit en el modo ESA/390" + +-#: config/s390/s390.c:14710 ++#: config/s390/s390.c:14717 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "hardware decimal floating point instructions not available on %s" + msgid "hardware vector support not available on %s" + msgstr "las instrucciones de coma flotante decimal de hardware no están disponibles en %s" + +-#: config/s390/s390.c:14713 ++#: config/s390/s390.c:14720 + #, gcc-internal-format + msgid "hardware vector support not available with -msoft-float" + msgstr "" + +-#: config/s390/s390.c:14741 ++#: config/s390/s390.c:14748 + #, gcc-internal-format, gfc-internal-format + msgid "hardware decimal floating point instructions not available on %s" + msgstr "las instrucciones de coma flotante decimal de hardware no están disponibles en %s" + +-#: config/s390/s390.c:14745 ++#: config/s390/s390.c:14752 + #, gcc-internal-format + msgid "hardware decimal floating point instructions not available in ESA/390 mode" + msgstr "las instrucciones de coma flotante decimal de hardware no están disponibles en el modo ESA/390" + +-#: config/s390/s390.c:14757 ++#: config/s390/s390.c:14764 + #, gcc-internal-format + msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float" + msgstr "-mhard-dfp no se puede usar en conjunción con -msoft-float" + +-#: config/s390/s390.c:14765 ++#: config/s390/s390.c:14772 + #, gcc-internal-format + msgid "-mbackchain -mpacked-stack -mhard-float are not supported in combination" + msgstr "no se admiten -mbackchain -mpacked-stack -mhard-float en combinación" + +-#: config/s390/s390.c:14771 ++#: config/s390/s390.c:14778 + #, gcc-internal-format + msgid "stack size must be greater than the stack guard value" + msgstr "el tamaño de la pila debe ser mayor que el valor de la guardia de pila" + +-#: config/s390/s390.c:14773 ++#: config/s390/s390.c:14780 + #, gcc-internal-format + msgid "stack size must not be greater than 64k" + msgstr "el tamaño de la pila no debe ser mayor a 64k" + +-#: config/s390/s390.c:14776 ++#: config/s390/s390.c:14783 + #, gcc-internal-format + msgid "-mstack-guard implies use of -mstack-size" + msgstr "-mstack-guard implica el uso de -mstack-size" + + #. argument is not a plain number +-#: config/s390/s390.c:14874 ++#: config/s390/s390.c:14881 + #, fuzzy, gcc-internal-format + #| msgid "argument to %qs should be a non-negative integer" + msgid "arguments to %qs should be non-negative integers" + msgstr "el argumento para %qs debe ser un entero no negativo" + +-#: config/s390/s390.c:14881 ++#: config/s390/s390.c:14888 + #, fuzzy, gcc-internal-format + #| msgid "argument to %qE attribute larger than %d" + msgid "argument to %qs is too large (max. %d)" +@@ -30711,7 +30783,7 @@ + msgstr "el argumento para el atributo %qE es más grande que %d" + + #. Value is not allowed for the target attribute. +-#: config/s390/s390.c:15089 ++#: config/s390/s390.c:15096 + #, fuzzy, gcc-internal-format + #| msgid "%<__int128%> is not supported by this target" + msgid "value %qs is not supported by attribute %" +@@ -30769,27 +30841,28 @@ + msgid "-mrelax is only supported for RTP PIC" + msgstr "-mrelax sólo se admite pare el PIC de RTP" + +-#: config/sparc/sparc.c:1393 ++#: config/sparc/sparc.c:1509 + #, gcc-internal-format, gfc-internal-format + msgid "%s is not supported by this configuration" + msgstr "%s no se admite en esta configuración" + +-#: config/sparc/sparc.c:1400 ++#: config/sparc/sparc.c:1516 + #, gcc-internal-format + msgid "-mlong-double-64 not allowed with -m64" + msgstr "no se permite -mlong-double-64 con -m64" + +-#: config/sparc/sparc.c:1420 ++#: config/sparc/sparc.c:1536 + #, gcc-internal-format, gfc-internal-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "valor erróneo (%s) para el interruptor -mcmodel=" + +-#: config/sparc/sparc.c:1425 +-#, gcc-internal-format +-msgid "-mcmodel= is not supported on 32 bit systems" ++#: config/sparc/sparc.c:1541 ++#, fuzzy, gcc-internal-format ++#| msgid "-mcmodel= is not supported on 32 bit systems" ++msgid "-mcmodel= is not supported on 32-bit systems" + msgstr "-mcmodel= no se admite en sistemas de 32 bit" + +-#: config/sparc/sparc.c:1432 ++#: config/sparc/sparc.c:1548 + #, gcc-internal-format + msgid "-fcall-saved-REG is not supported for out registers" + msgstr "no se admite -fcall-saved-REG para registros de salida" +@@ -31077,22 +31150,22 @@ + msgid "invalid constant in %<#pragma %s%>" + msgstr "constante no válida en %<#pragma pack%> - se descarta" + +-#: config/xtensa/xtensa.c:2185 ++#: config/xtensa/xtensa.c:2186 + #, gcc-internal-format + msgid "boolean registers required for the floating-point option" + msgstr "se requieren registros booleanos para la opción de coma flotante" + +-#: config/xtensa/xtensa.c:2220 ++#: config/xtensa/xtensa.c:2221 + #, gcc-internal-format, gfc-internal-format + msgid "-f%s is not supported with CONST16 instructions" + msgstr "no se admite -f%s con instrucciones CONST16" + +-#: config/xtensa/xtensa.c:2227 ++#: config/xtensa/xtensa.c:2228 + #, gcc-internal-format + msgid "PIC is required but not supported with CONST16 instructions" + msgstr "se requiere PIC pero no se admite con instrucciones CONST16" + +-#: config/xtensa/xtensa.c:3543 ++#: config/xtensa/xtensa.c:3544 + #, gcc-internal-format + msgid "only uninitialized variables can be placed in a .bss section" + msgstr "sólo las variables sin inicializar se pueden colocar en una sección .bss" +@@ -31182,7 +31255,7 @@ + msgid "could not read the BRIG file" + msgstr "no se puede abrir el fichero %s" + +-#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:8205 ++#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:8210 + #: cp/cp-array-notation.c:250 + #, fuzzy, gcc-internal-format + #| msgid "invalid option argument %qs" +@@ -31595,9 +31668,9 @@ + msgstr "la etiqueta %qD se define aquí" + + #: c/c-decl.c:3601 c/c-decl.c:3872 c/c-typeck.c:8091 cp/class.c:1480 +-#: cp/class.c:3379 cp/decl.c:3907 cp/decl.c:10592 cp/decl.c:10999 +-#: cp/friend.c:383 cp/friend.c:392 cp/parser.c:3166 cp/parser.c:3259 +-#: cp/parser.c:3290 cp/parser.c:6043 cp/parser.c:20681 ++#: cp/class.c:3381 cp/decl.c:3907 cp/decl.c:10592 cp/decl.c:10999 ++#: cp/friend.c:383 cp/friend.c:392 cp/parser.c:3168 cp/parser.c:3261 ++#: cp/parser.c:3292 cp/parser.c:6048 cp/parser.c:20704 + #, gcc-internal-format + msgid "%qD declared here" + msgstr "%qD se declara aquí" +@@ -31731,7 +31804,7 @@ + msgid "%<[*]%> not allowed in other than function prototype scope" + msgstr "no se permite %<[*]%> en otro lugar que no sea el ámbido de prototipo de función" + +-#: c/c-decl.c:4606 cp/decl2.c:1408 ++#: c/c-decl.c:4606 cp/decl2.c:1409 + #, gcc-internal-format + msgid "%q+D in declare target directive does not have mappable type" + msgstr "" +@@ -32793,7 +32866,7 @@ + msgid "two or more data types in declaration specifiers" + msgstr "dos o más tipos de datos en los especificadores de la declaración" + +-#: c/c-decl.c:9853 cp/parser.c:27656 ++#: c/c-decl.c:9853 cp/parser.c:27679 + #, gcc-internal-format + msgid "% is too long for GCC" + msgstr "% es demasiado largo para GCC" +@@ -32942,17 +33015,17 @@ + msgid "ISO C does not support plain % meaning %" + msgstr "ISO C no admite % simples que significan %" + +-#: c/c-decl.c:10925 c/c-decl.c:10938 c/c-decl.c:10964 ++#: c/c-decl.c:10925 c/c-decl.c:10941 c/c-decl.c:10967 + #, gcc-internal-format + msgid "ISO C does not support complex integer types" + msgstr "ISO C no admite tipos enteros complejos" + +-#: c/c-decl.c:11372 cp/semantics.c:5330 ++#: c/c-decl.c:11375 cp/semantics.c:5343 + #, gcc-internal-format + msgid "%<#pragma omp declare reduction%> combiner refers to variable %qD which is not % nor %" + msgstr "" + +-#: c/c-decl.c:11376 cp/semantics.c:5334 ++#: c/c-decl.c:11379 cp/semantics.c:5347 + #, gcc-internal-format + msgid "%<#pragma omp declare reduction%> initializer refers to variable %qD which is not % nor %" + msgstr "" +@@ -33005,7 +33078,7 @@ + msgid "version control conflict marker in file" + msgstr "" + +-#: c/c-parser.c:1035 cp/parser.c:27863 ++#: c/c-parser.c:1035 cp/parser.c:27886 + #, gcc-internal-format + msgid "expected end of line" + msgstr "se esperaba fin de línea" +@@ -33047,7 +33120,7 @@ + msgstr "nombre de tipo %qE desconocido" + + #: c/c-parser.c:1656 c/c-parser.c:10365 c/c-parser.c:15447 c/c-parser.c:15875 +-#: c/c-parser.c:16351 cp/parser.c:35355 cp/parser.c:38379 ++#: c/c-parser.c:16351 cp/parser.c:35378 cp/parser.c:38402 + #, gcc-internal-format + msgid "expected declaration specifiers" + msgstr "se esperaban especificadores de declaración" +@@ -33063,7 +33136,7 @@ + msgid "expected %<;%>, identifier or %<(%>" + msgstr "se esperaba %<;>, identificador o %<(%>" + +-#: c/c-parser.c:1714 cp/parser.c:29516 cp/parser.c:29590 ++#: c/c-parser.c:1714 cp/parser.c:29539 cp/parser.c:29613 + #, gcc-internal-format + msgid "prefix attributes are ignored for methods" + msgstr "se descartan los atributos de prefijo para los métodos" +@@ -33078,8 +33151,8 @@ + msgid "unexpected attribute" + msgstr "atributo inesperado" + +-#: c/c-parser.c:1780 c/c-parser.c:5035 c/c-parser.c:5376 cp/parser.c:10721 +-#: cp/parser.c:10908 ++#: c/c-parser.c:1780 c/c-parser.c:5035 c/c-parser.c:5376 cp/parser.c:10730 ++#: cp/parser.c:10917 + #, fuzzy, gcc-internal-format + #| msgid "getter/setter attribute must be followed by %<=%>" + msgid "% attribute not followed by %<;%>" +@@ -33122,7 +33195,7 @@ + msgid "%<__auto_type%> may only be used with a single declarator" + msgstr "% sólo se puede especificar para variables o declaraciones de función" + +-#: c/c-parser.c:2028 cp/parser.c:12724 cp/parser.c:12881 ++#: c/c-parser.c:2028 cp/parser.c:12733 cp/parser.c:12890 + #, gcc-internal-format + msgid "expected %<,%> or %<;%>" + msgstr "se esperaba %<,%> o %<;%>" +@@ -33150,7 +33223,7 @@ + msgid "ISO C90 does not support %<_Static_assert%>" + msgstr "ISO C90 no admite %<_Static_assert%>" + +-#: c/c-parser.c:2234 c/c-parser.c:3925 c/c-parser.c:10423 cp/parser.c:38038 ++#: c/c-parser.c:2234 c/c-parser.c:3925 c/c-parser.c:10423 cp/parser.c:38061 + #, gcc-internal-format + msgid "expected string literal" + msgstr "se esperaba una cadena literal" +@@ -33218,14 +33291,14 @@ + #: c/c-parser.c:10030 c/c-parser.c:10083 c/c-parser.c:10099 c/c-parser.c:10145 + #: c/c-parser.c:10737 c/c-parser.c:10778 c/c-parser.c:12750 c/c-parser.c:12984 + #: c/c-parser.c:14838 c/c-parser.c:17638 c/c-parser.c:17967 +-#: c/gimple-parser.c:1008 c/gimple-parser.c:1046 cp/parser.c:27866 +-#: cp/parser.c:30359 cp/parser.c:30389 cp/parser.c:30459 cp/parser.c:32558 +-#: cp/parser.c:37752 cp/parser.c:38523 ++#: c/gimple-parser.c:1008 c/gimple-parser.c:1046 cp/parser.c:27889 ++#: cp/parser.c:30382 cp/parser.c:30412 cp/parser.c:30482 cp/parser.c:32581 ++#: cp/parser.c:37775 cp/parser.c:38546 + #, gcc-internal-format + msgid "expected identifier" + msgstr "se esperaba un identificador" + +-#: c/c-parser.c:2780 cp/parser.c:18016 ++#: c/c-parser.c:2780 cp/parser.c:18039 + #, gcc-internal-format + msgid "comma at end of enumerator list" + msgstr "coma al final de la lista de enumeradores" +@@ -33361,7 +33434,7 @@ + msgid "expected %<}%> before %" + msgstr "se esperaba %<}%> antes de %" + +-#: c/c-parser.c:4908 cp/parser.c:11026 ++#: c/c-parser.c:4908 cp/parser.c:11035 + #, gcc-internal-format + msgid "% without a previous %" + msgstr "% sin un % previo" +@@ -33387,12 +33460,12 @@ + msgid "a label can only be part of a statement and a declaration is not a statement" + msgstr "una etiqueta sólo puede ser parte de una declaración y una declaración no es un enunciado" + +-#: c/c-parser.c:5252 cp/parser.c:10573 ++#: c/c-parser.c:5252 cp/parser.c:10582 + #, gcc-internal-format + msgid "-fcilkplus must be enabled to use %<_Cilk_for%>" + msgstr "" + +-#: c/c-parser.c:5262 cp/parser.c:10599 ++#: c/c-parser.c:5262 cp/parser.c:10608 + #, gcc-internal-format + msgid "-fcilkplus must be enabled to use %<_Cilk_sync%>" + msgstr "" +@@ -33406,17 +33479,17 @@ + #. c_parser_skip_until_found stops at a closing nesting + #. delimiter without consuming it, but here we need to consume + #. it to proceed further. +-#: c/c-parser.c:5397 c/gimple-parser.c:1391 cp/parser.c:10677 ++#: c/c-parser.c:5397 c/gimple-parser.c:1391 cp/parser.c:10686 + #, gcc-internal-format + msgid "expected statement" + msgstr "se esperaba una declaración" + +-#: c/c-parser.c:5501 cp/parser.c:12259 ++#: c/c-parser.c:5501 cp/parser.c:12268 + #, gcc-internal-format + msgid "suggest braces around empty body in an % statement" + msgstr "se sugieren llaves alrededor del cuerpo vacío en una declaración %" + +-#: c/c-parser.c:5535 cp/parser.c:12262 ++#: c/c-parser.c:5535 cp/parser.c:12271 + #, gcc-internal-format + msgid "suggest braces around empty body in an % statement" + msgstr "se sugieren llaves alrededor del cuerpo vacío en una declaración %" +@@ -33426,7 +33499,7 @@ + msgid "if statement cannot contain %" + msgstr "" + +-#: c/c-parser.c:5667 cp/parser.c:11261 ++#: c/c-parser.c:5667 cp/parser.c:11270 + #, gcc-internal-format + msgid "suggest explicit braces to avoid ambiguous %" + msgstr "se sugieren llaves explícitas para evitar un % ambiguo" +@@ -33446,7 +33519,7 @@ + msgid "invalid iterating variable in fast enumeration" + msgstr "variable de iteración no válida en la enumeración rápida" + +-#: c/c-parser.c:6014 cp/parser.c:11462 ++#: c/c-parser.c:6014 cp/parser.c:11471 + #, gcc-internal-format + msgid "missing loop condition in loop with % pragma" + msgstr "" +@@ -33636,17 +33709,17 @@ + msgid "%<__builtin_complex%> operands of different types" + msgstr "los operandos de %<__builtin_complex%> son de tipos diferentes" + +-#: c/c-parser.c:8121 cp/parser.c:6676 ++#: c/c-parser.c:8121 cp/parser.c:6681 + #, gcc-internal-format + msgid "wrong number of arguments to %<__builtin_shuffle%>" + msgstr "número erróneo de argumentos para %<__builtin_shuffle%>" + +-#: c/c-parser.c:8202 cp/parser.c:6587 ++#: c/c-parser.c:8202 cp/parser.c:6592 + #, gcc-internal-format + msgid "-fcilkplus must be enabled to use %<_Cilk_spawn%>" + msgstr "" + +-#: c/c-parser.c:8209 cp/parser.c:6593 ++#: c/c-parser.c:8209 cp/parser.c:6598 + #, gcc-internal-format + msgid "consecutive %<_Cilk_spawn%> keywords are not permitted" + msgstr "" +@@ -33701,64 +33774,64 @@ + msgid "no type or storage class may be specified here," + msgstr "ninguna clase de almacenamiento o tipo se puede especificar aquí," + +-#: c/c-parser.c:9946 c/c-parser.c:10003 cp/parser.c:30419 ++#: c/c-parser.c:9946 c/c-parser.c:10003 cp/parser.c:30442 + #, gcc-internal-format + msgid "unknown property attribute" + msgstr "atributo de propiedad desconocido" + +-#: c/c-parser.c:9967 cp/parser.c:30379 ++#: c/c-parser.c:9967 cp/parser.c:30402 + #, gcc-internal-format + msgid "missing %<=%> (after % attribute)" + msgstr "falta un %<=%> (después del atributo %)" + +-#: c/c-parser.c:9970 cp/parser.c:30382 ++#: c/c-parser.c:9970 cp/parser.c:30405 + #, gcc-internal-format + msgid "missing %<=%> (after % attribute)" + msgstr "falta un %<=%> (después del atributo %)" + +-#: c/c-parser.c:9984 cp/parser.c:30397 ++#: c/c-parser.c:9984 cp/parser.c:30420 + #, gcc-internal-format + msgid "the % attribute may only be specified once" + msgstr "el atributo % sólo se puede especificar una vez" + +-#: c/c-parser.c:9989 cp/parser.c:30403 ++#: c/c-parser.c:9989 cp/parser.c:30426 + #, gcc-internal-format + msgid "setter name must terminate with %<:%>" + msgstr "el nombre del setter debe terminar con %<:%>" + +-#: c/c-parser.c:9996 cp/parser.c:30411 ++#: c/c-parser.c:9996 cp/parser.c:30434 + #, gcc-internal-format + msgid "the % attribute may only be specified once" + msgstr "el atributo % sólo se puede especificar una vez" + + #: c/c-parser.c:10191 c/c-parser.c:15872 c/c-parser.c:16130 c/c-parser.c:16189 +-#: c/c-parser.c:16273 cp/parser.c:35352 cp/parser.c:35646 cp/parser.c:35734 +-#: cp/parser.c:35805 cp/parser.c:38116 cp/parser.c:38131 cp/parser.c:38147 +-#: cp/parser.c:38163 cp/parser.c:38179 cp/parser.c:38207 cp/parser.c:38220 +-#: cp/parser.c:38243 cp/parser.c:38256 ++#: c/c-parser.c:16273 cp/parser.c:35375 cp/parser.c:35669 cp/parser.c:35757 ++#: cp/parser.c:35828 cp/parser.c:38139 cp/parser.c:38154 cp/parser.c:38170 ++#: cp/parser.c:38186 cp/parser.c:38202 cp/parser.c:38230 cp/parser.c:38243 ++#: cp/parser.c:38266 cp/parser.c:38279 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma omp flush%> may only be used in compound statements" + msgid "%<#pragma %s%> may only be used in compound statements" + msgstr "%<#pragma omp flush%> sólo se puede usar en declaraciones compuestas" + +-#: c/c-parser.c:10214 cp/parser.c:38233 ++#: c/c-parser.c:10214 cp/parser.c:38256 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC option%> is not a string" + msgid "%<#pragma acc routine%> must be at file scope" + msgstr "%<#pragma GCC option%> no es una cadena" + +-#: c/c-parser.c:10292 cp/parser.c:38314 ++#: c/c-parser.c:10292 cp/parser.c:38337 + #, gcc-internal-format + msgid "%<#pragma omp section%> may only be used in %<#pragma omp sections%> construct" + msgstr "%<#pragma omp section%> sólo se puede usar en construcciones %<#pragma omp sections%>" + +-#: c/c-parser.c:10311 cp/parser.c:38333 ++#: c/c-parser.c:10311 cp/parser.c:38356 + #, fuzzy, gcc-internal-format + #| msgid "for statement expected" + msgid "for, while or do statement expected" + msgstr "se esperaba una declaración for" + +-#: c/c-parser.c:10323 cp/parser.c:38106 ++#: c/c-parser.c:10323 cp/parser.c:38129 + #, gcc-internal-format + msgid "%<#pragma GCC pch_preprocess%> must be first" + msgstr "%<#pragma GCC pch_preprocess%> debe ser primero" +@@ -33774,12 +33847,12 @@ + msgid "%<#pragma grainsize%> must be inside a function" + msgstr "no se permite #pragma GCC optimize dentro de funciones" + +-#: c/c-parser.c:10663 cp/parser.c:30809 ++#: c/c-parser.c:10663 cp/parser.c:30832 + #, gcc-internal-format + msgid "too many %qs clauses" + msgstr "demasiadas cláusulas %qs" + +-#: c/c-parser.c:10684 cp/parser.c:31341 ++#: c/c-parser.c:10684 cp/parser.c:31364 + #, fuzzy, gcc-internal-format + #| msgid "expected integer expression" + msgid "expected integer expression before ')'" +@@ -33796,59 +33869,59 @@ + msgid "%qD is not a variable" + msgstr "%qD no es una variable" + +-#: c/c-parser.c:10986 cp/semantics.c:6815 ++#: c/c-parser.c:10986 cp/semantics.c:6828 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a variable" + msgid "%qD is not a pointer variable" + msgstr "%qD no es una variable" + +-#: c/c-parser.c:11027 cp/parser.c:31419 ++#: c/c-parser.c:11027 cp/parser.c:31442 + #, gcc-internal-format + msgid "collapse argument needs positive constant integer expression" + msgstr "el argumento de collapse necesita una expresión entera constante positiva" + +-#: c/c-parser.c:11097 cp/parser.c:31476 ++#: c/c-parser.c:11097 cp/parser.c:31499 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:11099 cp/parser.c:31478 ++#: c/c-parser.c:11099 cp/parser.c:31501 + #, gcc-internal-format + msgid "expected % or %" + msgstr "se esperaba % o %" + +-#: c/c-parser.c:11199 cp/parser.c:31578 ++#: c/c-parser.c:11199 cp/parser.c:31601 + #, fuzzy, gcc-internal-format + #| msgid "expected %<;%>, %<,%> or %<)%>" + msgid "expected %, %, % or %" + msgstr "se esperaba %<;%>, %<,%> o %<)%>" + +-#: c/c-parser.c:11219 c/c-parser.c:16182 c/c-parser.c:16266 cp/parser.c:31596 +-#: cp/parser.c:35638 cp/parser.c:35726 ++#: c/c-parser.c:11219 c/c-parser.c:16182 c/c-parser.c:16266 cp/parser.c:31619 ++#: cp/parser.c:35661 cp/parser.c:35749 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:11266 cp/parser.c:31649 ++#: c/c-parser.c:11266 cp/parser.c:31672 + #, gcc-internal-format + msgid "too many % clauses with %qs modifier" + msgstr "" + +-#: c/c-parser.c:11273 cp/parser.c:31656 ++#: c/c-parser.c:11273 cp/parser.c:31679 + #, fuzzy, gcc-internal-format + #| msgid "too many %qs clauses" + msgid "too many % clauses" + msgstr "demasiadas cláusulas %qs" + +-#: c/c-parser.c:11275 cp/parser.c:31658 ++#: c/c-parser.c:11275 cp/parser.c:31681 + #, fuzzy, gcc-internal-format + #| msgid "too many %qs clauses" + msgid "too many % clauses without modifier" + msgstr "demasiadas cláusulas %qs" + +-#: c/c-parser.c:11281 cp/parser.c:31664 ++#: c/c-parser.c:11281 cp/parser.c:31687 + #, gcc-internal-format + msgid "if any % clause has modifier, then all % clauses have to use modifier" + msgstr "" +@@ -33878,25 +33951,25 @@ + msgid "% value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:11502 cp/semantics.c:6999 ++#: c/c-parser.c:11502 cp/semantics.c:7012 + #, fuzzy, gcc-internal-format + #| msgid "% value must be positive" + msgid "% value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:11548 cp/semantics.c:7028 ++#: c/c-parser.c:11548 cp/semantics.c:7041 + #, fuzzy, gcc-internal-format + #| msgid "'%s' at %L must be nonnegative" + msgid "% value must be non-negative" + msgstr "'%s' en %L debe ser no negativo" + +-#: c/c-parser.c:11611 c/c-parser.c:11617 cp/parser.c:31875 cp/parser.c:31882 ++#: c/c-parser.c:11611 c/c-parser.c:11617 cp/parser.c:31898 cp/parser.c:31905 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:11625 c/c-parser.c:11631 cp/parser.c:31891 cp/parser.c:31898 ++#: c/c-parser.c:11625 c/c-parser.c:11631 cp/parser.c:31914 cp/parser.c:31921 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" +@@ -33908,65 +33981,65 @@ + msgid "% value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:11762 cp/parser.c:31200 ++#: c/c-parser.c:11762 cp/parser.c:31223 + #, fuzzy, gcc-internal-format + #| msgid "too many arguments" + msgid "too many % arguments" + msgstr "demasiados argumentos" + +-#: c/c-parser.c:11796 cp/parser.c:31233 ++#: c/c-parser.c:11796 cp/parser.c:31256 + #, fuzzy, gcc-internal-format + #| msgid "unexpected attribute" + msgid "unexpected argument" + msgstr "atributo inesperado" + +-#: c/c-parser.c:11823 cp/semantics.c:6323 ++#: c/c-parser.c:11823 cp/semantics.c:6336 + #, fuzzy, gcc-internal-format + #| msgid "% value must be positive" + msgid "%qs value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:11962 cp/semantics.c:7128 ++#: c/c-parser.c:11962 cp/semantics.c:7141 + #, fuzzy, gcc-internal-format + #| msgid "%qE attribute argument not an integer constant" + msgid "% argument needs positive integral constant" + msgstr "el argumento del atributo %qE no es una constante entera" + +-#: c/c-parser.c:12027 cp/parser.c:31955 ++#: c/c-parser.c:12027 cp/parser.c:31978 + #, fuzzy, gcc-internal-format + #| msgid "collapse argument needs positive constant integer expression" + msgid "ordered argument needs positive constant integer expression" + msgstr "el argumento de collapse necesita una expresión entera constante positiva" + +-#: c/c-parser.c:12118 c/c-parser.c:16964 cp/parser.c:37047 ++#: c/c-parser.c:12118 c/c-parser.c:16964 cp/parser.c:37070 + #, fuzzy, gcc-internal-format + #| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % or %" + msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or identifier" + msgstr "se esperaba %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % o %" + +-#: c/c-parser.c:12227 cp/parser.c:32168 ++#: c/c-parser.c:12227 cp/parser.c:32191 + #, fuzzy, gcc-internal-format + #| msgid "both % and % in declaration specifiers" + msgid "both % and % modifiers specified" + msgstr "se usaron al mismo tiempo % y % en los especificadores de declaración" + +-#: c/c-parser.c:12281 cp/parser.c:32184 ++#: c/c-parser.c:12281 cp/parser.c:32207 + #, gcc-internal-format + msgid "schedule % does not take a % parameter" + msgstr "el planificador % no toma un parámetro %" + +-#: c/c-parser.c:12285 cp/parser.c:32187 ++#: c/c-parser.c:12285 cp/parser.c:32210 + #, gcc-internal-format + msgid "schedule % does not take a % parameter" + msgstr "el planificador % no toma un parámetro %" + +-#: c/c-parser.c:12297 cp/semantics.c:6395 ++#: c/c-parser.c:12297 cp/semantics.c:6408 + #, fuzzy, gcc-internal-format + #| msgid "% value must be positive" + msgid "chunk size value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:12320 cp/parser.c:32207 ++#: c/c-parser.c:12320 cp/parser.c:32230 + #, gcc-internal-format + msgid "invalid schedule kind" + msgstr "género de planificador no válido" +@@ -33983,19 +34056,19 @@ + msgid "% value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:12529 cp/semantics.c:6486 ++#: c/c-parser.c:12529 cp/semantics.c:6499 + #, fuzzy, gcc-internal-format + #| msgid "% value must be positive" + msgid "% value must be positive" + msgstr "el valor de % debe ser positivo" + +-#: c/c-parser.c:12573 cp/semantics.c:6596 ++#: c/c-parser.c:12573 cp/semantics.c:6609 + #, fuzzy, gcc-internal-format + #| msgid "%Hcollapse argument needs positive constant integer expression" + msgid "% clause alignment expression must be positive constant integer expression" + msgstr "%Hel argumento de collapse necesita ser una expresión entera constante positiva" + +-#: c/c-parser.c:12636 cp/parser.c:32465 ++#: c/c-parser.c:12636 cp/parser.c:32488 + #, fuzzy, gcc-internal-format + #| msgid "code model % not supported yet" + msgid "using parameters for % step is not supported yet" +@@ -34019,19 +34092,19 @@ + msgid "% clause expression must be positive constant integer expression" + msgstr "%Hel argumento de collapse necesita ser una expresión entera constante positiva" + +-#: c/c-parser.c:12888 cp/parser.c:32701 cp/parser.c:32924 ++#: c/c-parser.c:12888 cp/parser.c:32724 cp/parser.c:32947 + #, fuzzy, gcc-internal-format + #| msgid "invalid schedule kind" + msgid "invalid depend kind" + msgstr "género de planificador no válido" + +-#: c/c-parser.c:12972 cp/parser.c:32774 ++#: c/c-parser.c:12972 cp/parser.c:32797 + #, fuzzy, gcc-internal-format + #| msgid "invalid mask" + msgid "invalid map kind" + msgstr "máscara no válida" + +-#: c/c-parser.c:13068 cp/parser.c:32871 ++#: c/c-parser.c:13068 cp/parser.c:32894 + #, fuzzy, gcc-internal-format + #| msgid "invalid schedule kind" + msgid "invalid dist_schedule kind" +@@ -34043,76 +34116,76 @@ + msgid "invalid proc_bind kind" + msgstr "género de planificador no válido" + +-#: c/c-parser.c:13352 cp/parser.c:33149 ++#: c/c-parser.c:13352 cp/parser.c:33172 + #, fuzzy, gcc-internal-format + #| msgid "expected %<#pragma omp%> clause" + msgid "expected %<#pragma acc%> clause" + msgstr "se esperaba una cláusula %<#pragma omp%>" + +-#: c/c-parser.c:13363 c/c-parser.c:13646 cp/parser.c:33160 cp/parser.c:33476 ++#: c/c-parser.c:13363 c/c-parser.c:13646 cp/parser.c:33183 cp/parser.c:33499 + #, gcc-internal-format + msgid "%qs is not valid for %qs" + msgstr "%qs no es válido para %qs" + +-#: c/c-parser.c:13509 cp/parser.c:33336 ++#: c/c-parser.c:13509 cp/parser.c:33359 + #, fuzzy, gcc-internal-format + #| msgid "%qs must be used with %qs" + msgid "%qs must be the first clause of %qs" + msgstr "%qs se debe usar con %qs" + +-#: c/c-parser.c:13635 cp/parser.c:33465 ++#: c/c-parser.c:13635 cp/parser.c:33488 + #, gcc-internal-format + msgid "expected %<#pragma omp%> clause" + msgstr "se esperaba una cláusula %<#pragma omp%>" + +-#: c/c-parser.c:13773 cp/parser.c:36151 ++#: c/c-parser.c:13773 cp/parser.c:36174 + #, gcc-internal-format + msgid "no valid clauses specified in %<#pragma acc declare%>" + msgstr "" + +-#: c/c-parser.c:13783 cp/parser.c:36161 ++#: c/c-parser.c:13783 cp/parser.c:36184 + #, fuzzy, gcc-internal-format + #| msgid "Array section in '%s' call at %L" + msgid "array section in %<#pragma acc declare%>" + msgstr "Sección de matriz en la llamada '%s' en %L" + +-#: c/c-parser.c:13803 cp/parser.c:36181 ++#: c/c-parser.c:13803 cp/parser.c:36204 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of %<--%> on bool variable %qD" + msgid "%qD must be a global variable in %<#pragma acc declare link%>" + msgstr "uso no válido de %<--%> en la variable booleana %qD" + +-#: c/c-parser.c:13814 cp/parser.c:36192 ++#: c/c-parser.c:13814 cp/parser.c:36215 + #, fuzzy, gcc-internal-format + #| msgid "invalid type in declaration" + msgid "invalid OpenACC clause at file scope" + msgstr "tipo no válido en la declaración" + +-#: c/c-parser.c:13821 cp/parser.c:36199 ++#: c/c-parser.c:13821 cp/parser.c:36222 + #, fuzzy, gcc-internal-format + #| msgid "declaration of % variable %qD in % loop initial declaration" + msgid "invalid use of % variable %qD in %<#pragma acc declare%>" + msgstr "declaración de la variable % %qD en la declaración inicial del bucle %" + +-#: c/c-parser.c:13829 cp/parser.c:36207 ++#: c/c-parser.c:13829 cp/parser.c:36230 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of %<--%> on bool variable %qD" + msgid "invalid use of % variable %qD in %<#pragma acc declare%>" + msgstr "uso no válido de %<--%> en la variable booleana %qD" + +-#: c/c-parser.c:13841 cp/parser.c:36219 ++#: c/c-parser.c:13841 cp/parser.c:36242 + #, fuzzy, gcc-internal-format + #| msgid "Variable %qs is used more than once in the argument list of method %qs" + msgid "variable %qD used more than once with %<#pragma acc declare%>" + msgstr "La variable %qs se usa más de una vez en la lista de argumentos del método %qs" + +-#: c/c-parser.c:13933 cp/parser.c:36305 ++#: c/c-parser.c:13933 cp/parser.c:36328 + #, fuzzy, gcc-internal-format + #| msgid "expected a string after %<#pragma message%>" + msgid "expected % after %<#pragma acc %s%>" + msgstr "se esperaba una cadena después de %<#pragma message%>" + +-#: c/c-parser.c:13949 cp/parser.c:36322 ++#: c/c-parser.c:13949 cp/parser.c:36345 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC option%> is not a string" + msgid "%<#pragma acc %s data%> has no data movement clause" +@@ -34129,7 +34202,7 @@ + msgid "expected function name" + msgstr "se esperaba función" + +-#: c/c-parser.c:14191 cp/parser.c:37466 ++#: c/c-parser.c:14191 cp/parser.c:37489 + #, fuzzy, gcc-internal-format + #| msgid "%q+D is not a function," + msgid "%qD does not refer to a function" +@@ -34141,46 +34214,46 @@ + msgid "%<#pragma acc routine%> not immediately followed by function declaration or definition" + msgstr "no se puede usar el especificador % en una declaración de función que no es una definición" + +-#: c/c-parser.c:14251 cp/parser.c:37520 cp/parser.c:37562 ++#: c/c-parser.c:14251 cp/parser.c:37543 cp/parser.c:37585 + #, fuzzy, gcc-internal-format + #| msgid "the % specifier cannot be used in a function declaration that is not a definition" + msgid "%<#pragma acc routine%> not immediately followed by a single function declaration or definition" + msgstr "no se puede usar el especificador % en una declaración de función que no es una definición" + +-#: c/c-parser.c:14268 cp/parser.c:37576 ++#: c/c-parser.c:14268 cp/parser.c:37599 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC pch_preprocess%> must be first" + msgid "%<#pragma acc routine%> already applied to %qD" + msgstr "%<#pragma GCC pch_preprocess%> debe ser primero" + +-#: c/c-parser.c:14277 cp/parser.c:37585 ++#: c/c-parser.c:14277 cp/parser.c:37608 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC pch_preprocess%> must be first" + msgid "%<#pragma acc routine%> must be applied before use" + msgstr "%<#pragma GCC pch_preprocess%> debe ser primero" + +-#: c/c-parser.c:14278 cp/parser.c:37586 ++#: c/c-parser.c:14278 cp/parser.c:37609 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC pch_preprocess%> must be first" + msgid "%<#pragma acc routine%> must be applied before definition" + msgstr "%<#pragma GCC pch_preprocess%> debe ser primero" + +-#: c/c-parser.c:14321 cp/parser.c:36497 ++#: c/c-parser.c:14321 cp/parser.c:36520 + #, gcc-internal-format + msgid "%<#pragma acc update%> must contain at least one % or % or % clause" + msgstr "" + +-#: c/c-parser.c:14729 cp/parser.c:33847 cp/parser.c:33873 ++#: c/c-parser.c:14729 cp/parser.c:33870 cp/parser.c:33896 + #, gcc-internal-format + msgid "invalid form of %<#pragma omp atomic%>" + msgstr "forma no válida de %<#pragma omp atomic%>" + +-#: c/c-parser.c:14733 cp/parser.c:33904 cp/parser.c:33920 ++#: c/c-parser.c:14733 cp/parser.c:33927 cp/parser.c:33943 + #, gcc-internal-format + msgid "invalid operator for %<#pragma omp atomic%>" + msgstr "operador no válido para %<#pragma omp atomic%>" + +-#: c/c-parser.c:14782 cp/semantics.c:8525 cp/semantics.c:8535 ++#: c/c-parser.c:14782 cp/semantics.c:8538 cp/semantics.c:8548 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma omp atomic capture%> uses two different variables for memory" + msgid "%<#pragma omp atomic capture%> uses two different expressions for memory" +@@ -34191,28 +34264,28 @@ + msgid "expected %<(%> or end of line" + msgstr "se esperaba %<(%> o fin de línea" + +-#: c/c-parser.c:14913 cp/parser.c:34451 ++#: c/c-parser.c:14913 cp/parser.c:34474 + #, gcc-internal-format + msgid "% clause parameter is less than %" + msgstr "" + +-#: c/c-parser.c:14924 cp/parser.c:34462 ++#: c/c-parser.c:14924 cp/parser.c:34485 + #, gcc-internal-format + msgid "% clause may not be specified together with % clause with a parameter" + msgstr "" + +-#: c/c-parser.c:14943 cp/parser.c:34490 cp/parser.c:38700 ++#: c/c-parser.c:14943 cp/parser.c:34513 cp/parser.c:38723 + #, gcc-internal-format + msgid "for statement expected" + msgstr "se esperaba una declaración for" + +-#: c/c-parser.c:14949 cp/parser.c:34497 ++#: c/c-parser.c:14949 cp/parser.c:34520 + #, fuzzy, gcc-internal-format + #| msgid "for statement expected" + msgid "_Cilk_for statement expected" + msgstr "se esperaba una declaración for" + +-#: c/c-parser.c:15018 cp/semantics.c:8074 cp/semantics.c:8161 ++#: c/c-parser.c:15018 cp/semantics.c:8087 cp/semantics.c:8174 + #, gcc-internal-format + msgid "expected iteration declaration or initialization" + msgstr "se esperaba una declaración de iteración o una inicialización" +@@ -34222,76 +34295,76 @@ + msgid "not enough perfectly nested loops" + msgstr "no hay suficientes bucles perfectamente anidados" + +-#: c/c-parser.c:15162 cp/parser.c:34723 ++#: c/c-parser.c:15162 cp/parser.c:34746 + #, gcc-internal-format + msgid "collapsed loops not perfectly nested" + msgstr "los bucles colapsados no están perfectamente anidados" + +-#: c/c-parser.c:15209 cp/parser.c:34540 cp/parser.c:34582 cp/pt.c:15513 ++#: c/c-parser.c:15209 cp/parser.c:34563 cp/parser.c:34605 cp/pt.c:15595 + #, gcc-internal-format + msgid "iteration variable %qD should not be firstprivate" + msgstr "la variable de iteración %qD no debe ser firstprivate" + +-#: c/c-parser.c:15300 cp/parser.c:34796 ++#: c/c-parser.c:15300 cp/parser.c:34819 + #, fuzzy, gcc-internal-format + #| msgid "% as only parameter may not be qualified" + msgid "% clause with parameter may not be specified on %qs construct" + msgstr "no se puede calificar % si es el único parámetro" + +-#: c/c-parser.c:15461 cp/parser.c:34954 ++#: c/c-parser.c:15461 cp/parser.c:34977 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma omp barrier%> may only be used in compound statements" + msgid "%<#pragma omp ordered%> with % clause may only be used in compound statements" + msgstr "%<#pragma omp barrier%> sólo se puede usar en declaraciones compuestas" + +-#: c/c-parser.c:15664 cp/parser.c:35147 ++#: c/c-parser.c:15664 cp/parser.c:35170 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected % after %qs" + msgstr "se esperaba %" + +-#: c/c-parser.c:15863 cp/parser.c:35343 ++#: c/c-parser.c:15863 cp/parser.c:35366 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:16083 cp/parser.c:35580 ++#: c/c-parser.c:16083 cp/parser.c:35603 + #, gcc-internal-format + msgid "%<#pragma omp target data%> with map-type other than %, %, % or % on % clause" + msgstr "" + +-#: c/c-parser.c:16096 cp/parser.c:35593 ++#: c/c-parser.c:16096 cp/parser.c:35616 + #, gcc-internal-format + msgid "%<#pragma omp target data%> must contain at least one % clause" + msgstr "" + +-#: c/c-parser.c:16143 cp/parser.c:35818 ++#: c/c-parser.c:16143 cp/parser.c:35841 + #, gcc-internal-format + msgid "%<#pragma omp target update%> must contain at least one % or % clauses" + msgstr "" + +-#: c/c-parser.c:16215 cp/parser.c:35673 ++#: c/c-parser.c:16215 cp/parser.c:35696 + #, gcc-internal-format + msgid "%<#pragma omp target enter data%> with map-type other than % or % on % clause" + msgstr "" + +-#: c/c-parser.c:16227 cp/parser.c:35685 ++#: c/c-parser.c:16227 cp/parser.c:35708 + #, gcc-internal-format + msgid "%<#pragma omp target enter data%> must contain at least one % clause" + msgstr "" + +-#: c/c-parser.c:16301 cp/parser.c:35762 ++#: c/c-parser.c:16301 cp/parser.c:35785 + #, gcc-internal-format + msgid "%<#pragma omp target exit data%> with map-type other than %, % or % on % clause" + msgstr "" + +-#: c/c-parser.c:16314 cp/parser.c:35775 ++#: c/c-parser.c:16314 cp/parser.c:35798 + #, gcc-internal-format + msgid "%<#pragma omp target exit data%> must contain at least one % clause" + msgstr "" + +-#: c/c-parser.c:16528 cp/parser.c:36028 ++#: c/c-parser.c:16528 cp/parser.c:36051 + #, gcc-internal-format + msgid "%<#pragma omp target%> with map-type other than %, %, % or % on % clause" + msgstr "" +@@ -34307,7 +34380,7 @@ + msgid "%<#pragma omp declare simd%> must be followed by function declaration or definition" + msgstr "%<#pragma align%> debe aparecer antes de la declaración de %D, se descarta" + +-#: c/c-parser.c:16675 cp/parser.c:36620 ++#: c/c-parser.c:16675 cp/parser.c:36643 + #, gcc-internal-format + msgid "%<#pragma omp declare simd%> or % attribute cannot be used in the same function marked as a Cilk Plus SIMD-enabled function" + msgstr "" +@@ -34317,34 +34390,34 @@ + msgid "%<#pragma omp declare simd%> not immediately followed by a function declaration or definition" + msgstr "" + +-#: c/c-parser.c:16697 cp/parser.c:36679 ++#: c/c-parser.c:16697 cp/parser.c:36702 + #, gcc-internal-format + msgid "%<#pragma omp declare simd%> not immediately followed by a single function declaration or definition" + msgstr "" + +-#: c/c-parser.c:16813 cp/parser.c:36749 ++#: c/c-parser.c:16813 cp/parser.c:36772 + #, gcc-internal-format + msgid "%<#pragma omp declare target%> with clauses in between %<#pragma omp declare target%> without clauses and %<#pragma omp end declare target%>" + msgstr "" + +-#: c/c-parser.c:16832 cp/parser.c:36768 ++#: c/c-parser.c:16832 cp/parser.c:36791 + #, gcc-internal-format + msgid "%qD specified both in declare target % and % clauses" + msgstr "" + +-#: c/c-parser.c:16873 cp/parser.c:36815 ++#: c/c-parser.c:16873 cp/parser.c:36838 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:16880 cp/parser.c:36822 ++#: c/c-parser.c:16880 cp/parser.c:36845 + #, fuzzy, gcc-internal-format + #| msgid "expected %" + msgid "expected %" + msgstr "se esperaba %" + +-#: c/c-parser.c:16886 cp/parser.c:36829 ++#: c/c-parser.c:16886 cp/parser.c:36852 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma GCC pop_options%> without a corresponding %<#pragma GCC push_options%>" + msgid "%<#pragma omp end declare target%> without corresponding %<#pragma omp declare target%>" +@@ -34405,23 +34478,23 @@ + msgid "one of the initializer call arguments should be %<&omp_priv%>" + msgstr "" + +-#: c/c-parser.c:17286 cp/parser.c:37274 ++#: c/c-parser.c:17286 cp/parser.c:37297 + #, fuzzy, gcc-internal-format + #| msgid "expected %<#pragma omp section%> or %<}%>" + msgid "expected % or % or %" + msgstr "se esperaba %<#pragma omp section%> o %<}%>" + +-#: c/c-parser.c:17501 cp/semantics.c:7539 ++#: c/c-parser.c:17501 cp/semantics.c:7552 + #, gcc-internal-format + msgid "%qE declared % after first use" + msgstr "%qE se declaró % después del primer uso" + +-#: c/c-parser.c:17503 cp/semantics.c:7541 ++#: c/c-parser.c:17503 cp/semantics.c:7554 + #, gcc-internal-format + msgid "automatic variable %qE cannot be %" + msgstr "la variable automática %qE no puede ser %" + +-#: c/c-parser.c:17507 cp/semantics.c:7543 ++#: c/c-parser.c:17507 cp/semantics.c:7556 + #, gcc-internal-format + msgid "% %qE has incomplete type" + msgstr "% %qE tiene tipo incompleto" +@@ -34437,57 +34510,57 @@ + msgid "pragma simd must be inside a function" + msgstr "no se permite #pragma GCC optimize dentro de funciones" + +-#: c/c-parser.c:17588 cp/parser.c:38471 ++#: c/c-parser.c:17588 cp/parser.c:38494 + #, fuzzy, gcc-internal-format + #| msgid "end bit in POS must be an integer constant" + msgid "vectorlength must be an integer constant" + msgstr "el bit final en POS debe ser una constante entera" + +-#: c/c-parser.c:17590 cp/parser.c:38474 ++#: c/c-parser.c:17590 cp/parser.c:38497 + #, fuzzy, gcc-internal-format + #| msgid "text length must be greater than 0" + msgid "vectorlength must be a power of 2" + msgstr "la longitud de texto debe ser más grande que 0" + +-#: c/c-parser.c:17673 cp/parser.c:38581 ++#: c/c-parser.c:17673 cp/parser.c:38604 + #, fuzzy, gcc-internal-format + #| msgid "selector must be an integer constant in the range 0..%wi" + msgid "step size must be an integer constant expression or an integer variable" + msgstr "el selector debe ser una constante entera en el rango 0..%wi" + +-#: c/c-parser.c:17772 cp/parser.c:38674 ++#: c/c-parser.c:17772 cp/parser.c:38697 + #, fuzzy, gcc-internal-format + #| msgid "expected %<#pragma omp%> clause" + msgid "expected %<#pragma simd%> clause" + msgstr "se esperaba una cláusula %<#pragma omp%>" + +-#: c/c-parser.c:17816 cp/parser.c:38077 ++#: c/c-parser.c:17816 cp/parser.c:38100 + #, fuzzy, gcc-internal-format + #| msgid "%<#pragma%> is not allowed here" + msgid "%<#pragma cilk grainsize%> is not followed by %<_Cilk_for%>" + msgstr "%<#pragma%> no se permite aquí" + +-#: c/c-parser.c:18116 cp/parser.c:37969 ++#: c/c-parser.c:18116 cp/parser.c:37992 + #, gcc-internal-format + msgid "%<__transaction_cancel%> without transactional memory support enabled" + msgstr "%<__transaction_cancel%> sin activar el soporte para memoria transaccional" + +-#: c/c-parser.c:18122 cp/parser.c:37975 ++#: c/c-parser.c:18122 cp/parser.c:37998 + #, gcc-internal-format + msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>" + msgstr "%<__transaction_cancel%> dentro de un %<__transaction_relaxed%>" + +-#: c/c-parser.c:18131 cp/parser.c:37984 ++#: c/c-parser.c:18131 cp/parser.c:38007 + #, gcc-internal-format + msgid "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>" + msgstr "%<__transaction_cancel%> más externo no está dentro del %<__transaction_atomic%> más externo" + +-#: c/c-parser.c:18133 cp/parser.c:37987 ++#: c/c-parser.c:18133 cp/parser.c:38010 + #, gcc-internal-format + msgid " or a % function" + msgstr " o una función %" + +-#: c/c-parser.c:18139 cp/parser.c:37993 ++#: c/c-parser.c:18139 cp/parser.c:38016 + #, gcc-internal-format + msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>" + msgstr "%<__transaction_cancel%> no está dentro de %<__transaction_atomic%>" +@@ -34498,7 +34571,7 @@ + msgid "base of array section must be pointer or array type" + msgstr "el tamaño de la matriz nueva debe tener un tipo integral" + +-#: c/c-parser.c:18216 cp/parser.c:7104 ++#: c/c-parser.c:18216 cp/parser.c:7109 + #, fuzzy, gcc-internal-format + #| msgid "expected %<:%> or %<::%>" + msgid "expected %<:%> or numeral" +@@ -35244,7 +35317,7 @@ + msgid "initialization left-hand side might be a candidate for a format attribute" + msgstr "el lado izquierdo de la inicialización puede ser un candidato para un atributo de formato" + +-#: c/c-typeck.c:6623 cp/typeck.c:8583 ++#: c/c-typeck.c:6623 cp/typeck.c:8584 + #, gcc-internal-format + msgid "return type might be a candidate for a format attribute" + msgstr "el tipo de devolución puede ser un candidato para un atributo de formato" +@@ -35573,7 +35646,7 @@ + msgid "ISO C forbids %" + msgstr "ISO C prohíbe %" + +-#: c/c-typeck.c:9860 c/gimple-parser.c:1544 cp/typeck.c:8812 ++#: c/c-typeck.c:9860 c/gimple-parser.c:1544 cp/typeck.c:8813 + #, gcc-internal-format + msgid "function declared % has a % statement" + msgstr "la función declarada % tiene una declaración %" +@@ -35584,7 +35657,7 @@ + msgid "array notation expression cannot be used as a return value" + msgstr "se usó una expresión coma para inicializar el valor de devolución" + +-#: c/c-typeck.c:9877 cp/typeck.c:8803 ++#: c/c-typeck.c:9877 cp/typeck.c:8804 + #, fuzzy, gcc-internal-format + #| msgid "Logical range in CASE statement at %L is not allowed" + msgid "use of %<_Cilk_spawn%> in a return statement is not allowed" +@@ -35611,7 +35684,7 @@ + msgid "function returns address of label" + msgstr "la función devuelve la dirección de una variable local" + +-#: c/c-typeck.c:10093 cp/semantics.c:1154 ++#: c/c-typeck.c:10093 cp/semantics.c:1157 + #, gcc-internal-format + msgid "switch quantity not an integer" + msgstr "la cantidad de switch no es un entero" +@@ -35626,7 +35699,7 @@ + msgid "case label is not an integer constant expression" + msgstr "la etiqueta de case no es una expresion constante entera" + +-#: c/c-typeck.c:10170 cp/parser.c:10824 ++#: c/c-typeck.c:10170 cp/parser.c:10833 + #, gcc-internal-format + msgid "case label not within a switch statement" + msgstr "la etiqueta case no se encuentra dentro de una declaración switch" +@@ -35646,17 +35719,17 @@ + msgid "rank-mismatch between if-statement%'s condition and the else-block" + msgstr "" + +-#: c/c-typeck.c:10374 cp/parser.c:12094 ++#: c/c-typeck.c:10374 cp/parser.c:12103 + #, gcc-internal-format + msgid "break statement not within loop or switch" + msgstr "la declaración break no está dentro de un bucle o switch" + +-#: c/c-typeck.c:10376 cp/parser.c:12120 ++#: c/c-typeck.c:10376 cp/parser.c:12129 + #, gcc-internal-format + msgid "continue statement not within a loop" + msgstr "la declaración continue no está dentro de un bucle" + +-#: c/c-typeck.c:10381 cp/parser.c:12107 ++#: c/c-typeck.c:10381 cp/parser.c:12116 + #, gcc-internal-format + msgid "break statement used with OpenMP for loop" + msgstr "se usó la declaración break en un bucle for de OpenMP" +@@ -35667,7 +35740,7 @@ + msgid "break statement within %<#pragma simd%> loop body" + msgstr "la declaración break no está dentro de un bucle o switch" + +-#: c/c-typeck.c:10388 cp/parser.c:12124 ++#: c/c-typeck.c:10388 cp/parser.c:12133 + #, fuzzy, gcc-internal-format + #| msgid "continue statement not within a loop" + msgid "continue statement within %<#pragma simd%> loop body" +@@ -35774,12 +35847,12 @@ + msgid "used vector type where scalar is required" + msgstr "se usa un tipo vector cuando se requiere un escalar" + +-#: c/c-typeck.c:12108 cp/semantics.c:8632 ++#: c/c-typeck.c:12108 cp/semantics.c:8645 + #, gcc-internal-format + msgid "%<#pragma omp cancel%> must specify one of %, %, % or % clauses" + msgstr "" + +-#: c/c-typeck.c:12147 cp/semantics.c:8669 ++#: c/c-typeck.c:12147 cp/semantics.c:8682 + #, gcc-internal-format + msgid "%<#pragma omp cancellation point%> must specify one of %, %, % or % clauses" + msgstr "" +@@ -35790,27 +35863,27 @@ + msgid "%<_Atomic%> %qE in %qs clause" + msgstr "%Hdemasiadas cláusulas %qs" + +-#: c/c-typeck.c:12204 c/c-typeck.c:13413 cp/semantics.c:4535 +-#: cp/semantics.c:6724 ++#: c/c-typeck.c:12204 c/c-typeck.c:13413 cp/semantics.c:4548 ++#: cp/semantics.c:6737 + #, gcc-internal-format + msgid "bit-field %qE in %qs clause" + msgstr "" + +-#: c/c-typeck.c:12213 c/c-typeck.c:13437 cp/semantics.c:4545 +-#: cp/semantics.c:6742 ++#: c/c-typeck.c:12213 c/c-typeck.c:13437 cp/semantics.c:4558 ++#: cp/semantics.c:6755 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a member template function" + msgid "%qE is a member of a union" + msgstr "%qD no es una función plantilla miembro" + +-#: c/c-typeck.c:12223 cp/semantics.c:4559 cp/semantics.c:6767 ++#: c/c-typeck.c:12223 cp/semantics.c:4572 cp/semantics.c:6780 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a variable in clause %qs" + msgid "%qD is not a variable in %qs clause" + msgstr "%qD no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:12227 c/c-typeck.c:13454 cp/semantics.c:4563 +-#: cp/semantics.c:6770 ++#: c/c-typeck.c:12227 c/c-typeck.c:13454 cp/semantics.c:4576 ++#: cp/semantics.c:6783 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE is not a variable in %qs clause" +@@ -35823,19 +35896,19 @@ + msgstr "%Hdemasiadas cláusulas %qs" + + #: c/c-typeck.c:12243 c/c-typeck.c:13461 c/c-typeck.c:13563 +-#: cp/semantics.c:4580 cp/semantics.c:6776 cp/semantics.c:6938 ++#: cp/semantics.c:4593 cp/semantics.c:6789 cp/semantics.c:6951 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a variable in clause %qs" + msgid "%qD is threadprivate variable in %qs clause" + msgstr "%qD no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:12279 cp/semantics.c:4612 ++#: c/c-typeck.c:12279 cp/semantics.c:4625 + #, fuzzy, gcc-internal-format + #| msgid "size in array new must have integral type" + msgid "low bound %qE of array section does not have integral type" + msgstr "el tamaño de la matriz nueva debe tener un tipo integral" + +-#: c/c-typeck.c:12286 cp/semantics.c:4619 ++#: c/c-typeck.c:12286 cp/semantics.c:4632 + #, fuzzy, gcc-internal-format + #| msgid "size in array new must have integral type" + msgid "length %qE of array section does not have integral type" +@@ -35842,58 +35915,58 @@ + msgstr "el tamaño de la matriz nueva debe tener un tipo integral" + + #: c/c-typeck.c:12313 c/c-typeck.c:12377 c/c-typeck.c:12635 +-#: cp/semantics.c:4655 cp/semantics.c:4719 ++#: cp/semantics.c:4668 cp/semantics.c:4732 + #, fuzzy, gcc-internal-format + #| msgid "Array section in '%s' call at %L" + msgid "zero length array section in %qs clause" + msgstr "Sección de matriz en la llamada '%s' en %L" + +-#: c/c-typeck.c:12332 cp/semantics.c:4674 ++#: c/c-typeck.c:12332 cp/semantics.c:4687 + #, gcc-internal-format + msgid "for unknown bound array type length expression must be specified" + msgstr "" + +-#: c/c-typeck.c:12340 cp/semantics.c:4682 ++#: c/c-typeck.c:12340 cp/semantics.c:4695 + #, gcc-internal-format + msgid "negative low bound in array section in %qs clause" + msgstr "" + +-#: c/c-typeck.c:12349 c/c-typeck.c:12459 cp/semantics.c:4691 +-#: cp/semantics.c:4801 ++#: c/c-typeck.c:12349 c/c-typeck.c:12459 cp/semantics.c:4704 ++#: cp/semantics.c:4814 + #, fuzzy, gcc-internal-format + #| msgid "variable length array is used" + msgid "negative length in array section in %qs clause" + msgstr "se usó la matriz de longitud variable" + +-#: c/c-typeck.c:12366 cp/semantics.c:4708 ++#: c/c-typeck.c:12366 cp/semantics.c:4721 + #, gcc-internal-format + msgid "low bound %qE above array section size in %qs clause" + msgstr "" + +-#: c/c-typeck.c:12403 cp/semantics.c:4745 ++#: c/c-typeck.c:12403 cp/semantics.c:4758 + #, gcc-internal-format + msgid "length %qE above array section size in %qs clause" + msgstr "" + +-#: c/c-typeck.c:12418 cp/semantics.c:4760 ++#: c/c-typeck.c:12418 cp/semantics.c:4773 + #, gcc-internal-format + msgid "high bound %qE above array section size in %qs clause" + msgstr "" + +-#: c/c-typeck.c:12451 cp/semantics.c:4793 ++#: c/c-typeck.c:12451 cp/semantics.c:4806 + #, fuzzy, gcc-internal-format + #| msgid "for increment expression has no effect" + msgid "for pointer type length expression must be specified" + msgstr "la expresión de incremento for no tiene efecto" + +-#: c/c-typeck.c:12469 c/c-typeck.c:12578 cp/semantics.c:4811 +-#: cp/semantics.c:4923 ++#: c/c-typeck.c:12469 c/c-typeck.c:12578 cp/semantics.c:4824 ++#: cp/semantics.c:4936 + #, fuzzy, gcc-internal-format + #| msgid "Copy array sections into a contiguous block on procedure entry" + msgid "array section is not contiguous in %qs clause" + msgstr "Copia las secciones de matriz en un bloque contiguo en la entrada de procedimiento" + +-#: c/c-typeck.c:12477 cp/semantics.c:4819 ++#: c/c-typeck.c:12477 cp/semantics.c:4832 + #, fuzzy, gcc-internal-format + #| msgid "%qD does not have integral or enumeration type" + msgid "%qE does not have pointer or array type" +@@ -35915,7 +35988,7 @@ + msgid "%qE has invalid type for %" + msgstr "%qE tiene tipo no válido para %" + +-#: c/c-typeck.c:12955 cp/semantics.c:5734 ++#: c/c-typeck.c:12955 cp/semantics.c:5747 + #, fuzzy, gcc-internal-format + #| msgid "No label definition found for %qs" + msgid "user defined reduction not found for %qE" +@@ -35927,17 +36000,17 @@ + msgid "variable length element type in array % clause" + msgstr "se usó la matriz de longitud variable" + +-#: c/c-typeck.c:13061 c/c-typeck.c:13621 cp/semantics.c:7257 ++#: c/c-typeck.c:13061 c/c-typeck.c:13621 cp/semantics.c:7270 + #, gcc-internal-format + msgid "% clause must not be used together with %" + msgstr "" + +-#: c/c-typeck.c:13073 cp/semantics.c:7297 ++#: c/c-typeck.c:13073 cp/semantics.c:7310 + #, gcc-internal-format + msgid "%qE must be % for %" + msgstr "%qE debe ser % para %" + +-#: c/c-typeck.c:13087 cp/semantics.c:5908 ++#: c/c-typeck.c:13087 cp/semantics.c:5921 + #, gcc-internal-format + msgid "modifier should not be specified in % clause on % or % constructs" + msgstr "" +@@ -35957,18 +36030,18 @@ + msgid "%<_Atomic%> %qD in % clause" + msgstr "" + +-#: c/c-typeck.c:13139 cp/semantics.c:5991 ++#: c/c-typeck.c:13139 cp/semantics.c:6004 + #, gcc-internal-format + msgid "% clause step %qE is neither constant nor a parameter" + msgstr "" + +-#: c/c-typeck.c:13169 c/c-typeck.c:13556 cp/semantics.c:6075 +-#: cp/semantics.c:6931 ++#: c/c-typeck.c:13169 c/c-typeck.c:13556 cp/semantics.c:6088 ++#: cp/semantics.c:6944 + #, gcc-internal-format + msgid "%qE is not a variable in clause %qs" + msgstr "%qE no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13178 cp/semantics.c:6084 ++#: c/c-typeck.c:13178 cp/semantics.c:6097 + #, fuzzy, gcc-internal-format + #| msgid "%qD appears more than once in data clauses" + msgid "%qD appears more than once in reduction clauses" +@@ -35981,33 +36054,33 @@ + + #: c/c-typeck.c:13196 c/c-typeck.c:13225 c/c-typeck.c:13385 c/c-typeck.c:13499 + #: c/c-typeck.c:13505 c/c-typeck.c:13518 c/c-typeck.c:13527 +-#: cp/semantics.c:6094 cp/semantics.c:6101 cp/semantics.c:6152 +-#: cp/semantics.c:6158 cp/semantics.c:6195 cp/semantics.c:6687 +-#: cp/semantics.c:6824 cp/semantics.c:6830 cp/semantics.c:6843 +-#: cp/semantics.c:6852 ++#: cp/semantics.c:6107 cp/semantics.c:6114 cp/semantics.c:6165 ++#: cp/semantics.c:6171 cp/semantics.c:6208 cp/semantics.c:6700 ++#: cp/semantics.c:6837 cp/semantics.c:6843 cp/semantics.c:6856 ++#: cp/semantics.c:6865 + #, gcc-internal-format + msgid "%qD appears more than once in data clauses" + msgstr "%qD aparece más de una vez en las cláusulas de datos" + + #: c/c-typeck.c:13198 c/c-typeck.c:13227 c/c-typeck.c:13507 c/c-typeck.c:13529 +-#: cp/semantics.c:6103 cp/semantics.c:6160 cp/semantics.c:6832 +-#: cp/semantics.c:6854 ++#: cp/semantics.c:6116 cp/semantics.c:6173 cp/semantics.c:6845 ++#: cp/semantics.c:6867 + #, fuzzy, gcc-internal-format + #| msgid "%qD appears more than once in data clauses" + msgid "%qD appears both in data and map clauses" + msgstr "%qD aparece más de una vez en las cláusulas de datos" + +-#: c/c-typeck.c:13212 cp/semantics.c:6146 ++#: c/c-typeck.c:13212 cp/semantics.c:6159 + #, gcc-internal-format + msgid "%qE is not a variable in clause %" + msgstr "%qE no es una variable en la cláusula %" + +-#: c/c-typeck.c:13241 cp/semantics.c:6189 ++#: c/c-typeck.c:13241 cp/semantics.c:6202 + #, gcc-internal-format + msgid "%qE is not a variable in clause %" + msgstr "%qE no es una variable en la cláusula %" + +-#: c/c-typeck.c:13260 cp/semantics.c:6552 ++#: c/c-typeck.c:13260 cp/semantics.c:6565 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE is not a variable in % clause" +@@ -36031,64 +36104,64 @@ + msgid "%qE appears more than once in % clauses" + msgstr "%qE aparece más de una vez en las cláusulas de datos" + +-#: c/c-typeck.c:13336 cp/semantics.c:6634 ++#: c/c-typeck.c:13336 cp/semantics.c:6647 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE is not a variable in % clause" + msgstr "%qE no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13358 cp/semantics.c:6665 ++#: c/c-typeck.c:13358 cp/semantics.c:6678 + #, fuzzy, gcc-internal-format + #| msgid "Array section not permitted in '%s' call at %L" + msgid "array section does not have mappable type in %qs clause" + msgstr "No se permite una sección de matriz en la llamada '%s' en %L" + +-#: c/c-typeck.c:13382 c/c-typeck.c:13516 cp/semantics.c:6684 +-#: cp/semantics.c:6841 ++#: c/c-typeck.c:13382 c/c-typeck.c:13516 cp/semantics.c:6697 ++#: cp/semantics.c:6854 + #, fuzzy, gcc-internal-format + #| msgid "%qD appears more than once in data clauses" + msgid "%qD appears more than once in motion clauses" + msgstr "%qD aparece más de una vez en las cláusulas de datos" + +-#: c/c-typeck.c:13388 c/c-typeck.c:13520 cp/semantics.c:6690 +-#: cp/semantics.c:6845 ++#: c/c-typeck.c:13388 c/c-typeck.c:13520 cp/semantics.c:6703 ++#: cp/semantics.c:6858 + #, fuzzy, gcc-internal-format + #| msgid "%qD appears more than once in data clauses" + msgid "%qD appears more than once in map clauses" + msgstr "%qD aparece más de una vez en las cláusulas de datos" + +-#: c/c-typeck.c:13420 cp/semantics.c:6731 ++#: c/c-typeck.c:13420 cp/semantics.c:6744 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE does not have a mappable type in %qs clause" + msgstr "%qE no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13480 c/c-typeck.c:13570 cp/semantics.c:6806 +-#: cp/semantics.c:6945 ++#: c/c-typeck.c:13480 c/c-typeck.c:13570 cp/semantics.c:6819 ++#: cp/semantics.c:6958 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a variable in clause %qs" + msgid "%qD does not have a mappable type in %qs clause" + msgstr "%qD no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13551 cp/semantics.c:6925 ++#: c/c-typeck.c:13551 cp/semantics.c:6938 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE is neither a variable nor a function name in clause %qs" + msgstr "%qE no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13579 cp/semantics.c:6954 ++#: c/c-typeck.c:13579 cp/semantics.c:6967 + #, fuzzy, gcc-internal-format + #| msgid "%qE appears more than once in data clauses" + msgid "%qE appears more than once on the same % directive" + msgstr "%qE aparece más de una vez en las cláusulas de datos" + +-#: c/c-typeck.c:13593 cp/semantics.c:6969 ++#: c/c-typeck.c:13593 cp/semantics.c:6982 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a variable in clause %qs" + msgid "%qD is not an argument in % clause" + msgstr "%qD no es una variable en la cláusula %qs" + +-#: c/c-typeck.c:13596 cp/semantics.c:6971 ++#: c/c-typeck.c:13596 cp/semantics.c:6984 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a variable in clause %qs" + msgid "%qE is not an argument in % clause" +@@ -36100,32 +36173,32 @@ + msgid "%qs variable is neither a pointer nor an array" + msgstr "el tipo de vector delete no es del tipo puntero ni matriz" + +-#: c/c-typeck.c:13686 cp/semantics.c:6351 ++#: c/c-typeck.c:13686 cp/semantics.c:6364 + #, gcc-internal-format + msgid "% modifier specified for %qs schedule kind" + msgstr "" + +-#: c/c-typeck.c:13717 cp/semantics.c:7149 ++#: c/c-typeck.c:13717 cp/semantics.c:7162 + #, gcc-internal-format + msgid "% clause is incompatible with %" + msgstr "" + +-#: c/c-typeck.c:13767 cp/semantics.c:7340 ++#: c/c-typeck.c:13767 cp/semantics.c:7353 + #, gcc-internal-format + msgid "%qE is predetermined %qs for %qs" + msgstr "%qE está predeterminado como %qs para %qs" + +-#: c/c-typeck.c:13787 cp/semantics.c:7231 ++#: c/c-typeck.c:13787 cp/semantics.c:7244 + #, gcc-internal-format + msgid "% clause value is bigger than % clause value" + msgstr "" + +-#: c/c-typeck.c:13799 cp/semantics.c:7244 ++#: c/c-typeck.c:13799 cp/semantics.c:7257 + #, gcc-internal-format + msgid "% schedule modifier specified together with % clause" + msgstr "" + +-#: c/c-typeck.c:13817 cp/semantics.c:7211 ++#: c/c-typeck.c:13817 cp/semantics.c:7224 + #, gcc-internal-format + msgid "% clause step is a parameter %qD not specified in % clause" + msgstr "" +@@ -36716,163 +36789,163 @@ + msgid "use of multiversioned function without a default" + msgstr "función definida por defecto %q+D con argumento por defecto" + +-#: cp/call.c:7710 ++#: cp/call.c:7713 + #, fuzzy, gcc-internal-format + #| msgid "passing %qT as % argument of %q#D discards qualifiers" + msgid "passing %qT as % argument discards qualifiers" + msgstr "pasar %qT como el argumento % de %q#D descarta a los calificadores" + +-#: cp/call.c:7713 cp/call.c:7829 cp/call.c:9587 cp/name-lookup.c:5963 ++#: cp/call.c:7716 cp/call.c:7832 cp/call.c:9592 cp/name-lookup.c:5962 + #, gcc-internal-format + msgid " in call to %qD" + msgstr " en la llamada a %qD" + +-#: cp/call.c:7743 ++#: cp/call.c:7746 + #, gcc-internal-format + msgid "%qT is not an accessible base of %qT" + msgstr "%qT no es una base inaccesible de %qT" + +-#: cp/call.c:7825 ++#: cp/call.c:7828 + #, gcc-internal-format + msgid "deducing %qT as %qT" + msgstr "se deduce %qT como %qT" + +-#: cp/call.c:7831 ++#: cp/call.c:7834 + #, gcc-internal-format + msgid " (you can disable this with -fno-deduce-init-list)" + msgstr " (puede desactivar esto con -fno-deduce-init-list)" + +-#: cp/call.c:7931 ++#: cp/call.c:7934 + #, fuzzy, gcc-internal-format + #| msgid "too many arguments to constructor %q#D" + msgid "passing arguments to ellipsis of inherited constructor %qD" + msgstr "demasiados argumentos para el constructor %q#D" + +-#: cp/call.c:8275 ++#: cp/call.c:8280 + #, fuzzy, gcc-internal-format + #| msgid "constant refers to itself" + msgid "constructor delegates to itself" + msgstr "la constante se refiere a sí misma" + +-#: cp/call.c:8525 ++#: cp/call.c:8530 + #, gcc-internal-format + msgid "call to non-function %qD" + msgstr "llamada a %qD que no es función" + +-#: cp/call.c:8571 cp/pt.c:14200 cp/typeck.c:2807 ++#: cp/call.c:8576 cp/pt.c:14282 cp/typeck.c:2807 + #, gcc-internal-format + msgid "cannot call constructor %<%T::%D%> directly" + msgstr "no se puede llamar directamente al constructor %<%T::%D%>" + +-#: cp/call.c:8573 ++#: cp/call.c:8578 + #, fuzzy, gcc-internal-format + #| msgid " for a function-style cast, remove the redundant %<::%D%>" + msgid "for a function-style cast, remove the redundant %<::%D%>" + msgstr " para una conversión de estilo de función, borre el %<::%D%> redundante" + +-#: cp/call.c:8708 ++#: cp/call.c:8713 + #, gcc-internal-format + msgid "no matching function for call to %<%T::operator %T(%A)%#V%>" + msgstr "no se encontró una función coincidente para la llamada a %<%T::operator %T(%A)%#V%>" + +-#: cp/call.c:8724 ++#: cp/call.c:8729 + #, fuzzy, gcc-internal-format + #| msgid "no matching function for call to %<%T::%s(%A)%#V%>" + msgid "no matching function for call to %<%T::%E(%A)%#V%>" + msgstr "no se encontró una función coincidente para la llamada a %<%T::%s(%A)%#V%>" + +-#: cp/call.c:8748 ++#: cp/call.c:8753 + #, fuzzy, gcc-internal-format + #| msgid "no matching function for call to %<%D(%A)%>" + msgid "no matching function for call to %<%s(%A)%>" + msgstr "no hay una función coincidente para la llamada a %<%D(%A)%>" + +-#: cp/call.c:8751 ++#: cp/call.c:8756 + #, gcc-internal-format + msgid "call of overloaded %<%s(%A)%> is ambiguous" + msgstr "la llamada del %<%s(%A)%> sobrecargado es ambigua" + +-#: cp/call.c:8772 ++#: cp/call.c:8777 + #, fuzzy, gcc-internal-format + #| msgid "non-static data member initializers" + msgid "pure virtual %q#D called from non-static data member initializer" + msgstr "los inicializadores de los datos miembro no son estáticos" + +-#: cp/call.c:8777 ++#: cp/call.c:8782 + #, fuzzy, gcc-internal-format + #| msgid "abstract virtual `%#D' called from constructor" + msgid "pure virtual %q#D called from constructor" + msgstr "virtual abstracto `%#D' llamado desde un constructor" + +-#: cp/call.c:8778 ++#: cp/call.c:8783 + #, fuzzy, gcc-internal-format + #| msgid "abstract virtual `%#D' called from destructor" + msgid "pure virtual %q#D called from destructor" + msgstr "virtual abstracto `%#D' llamado desde un destructor" + +-#: cp/call.c:8801 ++#: cp/call.c:8806 + #, gcc-internal-format + msgid "cannot call member function %qD without object" + msgstr "no se puede llamar a la función miembro %qD sin un objeto" + +-#: cp/call.c:9585 ++#: cp/call.c:9590 + #, gcc-internal-format + msgid "passing %qT chooses %qT over %qT" + msgstr "al pasar %qT se escoge %qT sobre %qT" + +-#: cp/call.c:9645 ++#: cp/call.c:9650 + #, gcc-internal-format + msgid "choosing %qD over %qD" + msgstr "se escoge %qD sobre %qD" + +-#: cp/call.c:9646 ++#: cp/call.c:9651 + #, gcc-internal-format + msgid " for conversion from %qT to %qT" + msgstr " para la conversión de %qT a %qT" + +-#: cp/call.c:9649 ++#: cp/call.c:9654 + #, gcc-internal-format + msgid " because conversion sequence for the argument is better" + msgstr " porque la secuencia de conversión para el argumento es mejor" + +-#: cp/call.c:9873 ++#: cp/call.c:9878 + #, gcc-internal-format + msgid "default argument mismatch in overload resolution" + msgstr "no coincide el argumento por defecto en la resolución de sobrecarga" + +-#: cp/call.c:9877 ++#: cp/call.c:9882 + #, fuzzy, gcc-internal-format + #| msgid " candidate 1: %q+#F" + msgid " candidate 1: %q#F" + msgstr " candidato 1: %q+#F" + +-#: cp/call.c:9879 ++#: cp/call.c:9884 + #, fuzzy, gcc-internal-format + #| msgid " candidate 2: %q+#F" + msgid " candidate 2: %q#F" + msgstr " candidato 2: %q+#F" + +-#: cp/call.c:9924 ++#: cp/call.c:9929 + #, gcc-internal-format + msgid "ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:" + msgstr "ISO C++ dice que estos son ambiguos, aún cuando la peor conversión para el primero es mejor que la peor conversión para el segundo:" + +-#: cp/call.c:10102 ++#: cp/call.c:10107 + #, gcc-internal-format + msgid "could not convert %qE from %qT to %qT" + msgstr "no se puede convertir %qE de %qT a %qT" + +-#: cp/call.c:10296 ++#: cp/call.c:10301 + #, gcc-internal-format + msgid "a temporary bound to %qD only persists until the constructor exits" + msgstr "un enlace temporal a %qD sólo persiste hasta que el constructor termina" + +-#: cp/call.c:10419 ++#: cp/call.c:10424 + #, gcc-internal-format + msgid "invalid initialization of non-const reference of type %qT from an rvalue of type %qT" + msgstr "inicialización no válida de una referencia que no es constante de tipo %qT desde un r-valor de tipo %qT" + +-#: cp/call.c:10423 ++#: cp/call.c:10428 + #, gcc-internal-format + msgid "invalid initialization of reference of type %qT from expression of type %qT" + msgstr "inicialización no válida de la referencia de tipo %qT desde una expresión de tipo %qT" +@@ -36980,297 +37053,297 @@ + msgid "cannot derive from % base %qT in derived type %qT" + msgstr "no se puede derivar de la base % %qT al tipo derivado %qT" + +-#: cp/class.c:2231 ++#: cp/class.c:2233 + #, gcc-internal-format + msgid "all member functions in class %qT are private" + msgstr "todos las funciones miembros en la clase %qT son privadas" + +-#: cp/class.c:2243 ++#: cp/class.c:2245 + #, gcc-internal-format + msgid "%q#T only defines a private destructor and has no friends" + msgstr "%q#T solamente define un destructor privado y no tiene friends" + +-#: cp/class.c:2288 ++#: cp/class.c:2290 + #, gcc-internal-format + msgid "%q#T only defines private constructors and has no friends" + msgstr "%q#T solamente define constructores privados y no tiene friends" + + # Ojo, no es impostor, sino impositor, el que impone. cfuga +-#: cp/class.c:2681 ++#: cp/class.c:2683 + #, gcc-internal-format + msgid "no unique final overrider for %qD in %qT" + msgstr "no hay un impositor único final para %qD en %qT" + +-#: cp/class.c:3042 ++#: cp/class.c:3044 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D cannot be overloaded" + msgid "%qD can be marked override" + msgstr "no se puede sobrecargar %q+#D" + +-#: cp/class.c:3054 ++#: cp/class.c:3056 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D marked final, but is not virtual" + msgid "%q+#D marked %, but is not virtual" + msgstr "se marca %q+#D como final, pero no es virtual" + +-#: cp/class.c:3056 ++#: cp/class.c:3058 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D marked override, but does not override" + msgid "%q+#D marked %, but does not override" + msgstr "%q+#D se marca como override, pero no hace override" + +-#: cp/class.c:3126 ++#: cp/class.c:3128 + #, fuzzy, gcc-internal-format + #| msgid "%q+D was hidden" + msgid "%qD was hidden" + msgstr "%q+D estaba escondido" + +-#: cp/class.c:3128 ++#: cp/class.c:3130 + #, fuzzy, gcc-internal-format + #| msgid " by %q+D" + msgid " by %qD" + msgstr " por %q+D" + +-#: cp/class.c:3162 cp/decl2.c:1483 ++#: cp/class.c:3164 cp/decl2.c:1484 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D invalid; an anonymous union can only have non-static data members" + msgid "%q#D invalid; an anonymous union can only have non-static data members" + msgstr "%q+#D no válido; un union anónimo sólo puede tener miembros con datos no estáticos" + +-#: cp/class.c:3166 ++#: cp/class.c:3168 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D invalid; an anonymous struct can only have non-static data members" + msgid "%q#D invalid; an anonymous struct can only have non-static data members" + msgstr "%q+#D no válido; un struct anónimo sólo puede tener miembros con datos no estáticos" + +-#: cp/class.c:3178 cp/decl2.c:1490 ++#: cp/class.c:3180 cp/decl2.c:1491 + #, fuzzy, gcc-internal-format + #| msgid "private member %q+#D in anonymous union" + msgid "private member %q#D in anonymous union" + msgstr "miembro privado %q+#D en union anónima" + +-#: cp/class.c:3181 ++#: cp/class.c:3183 + #, fuzzy, gcc-internal-format + #| msgid "private member %q+#D in anonymous struct" + msgid "private member %q#D in anonymous struct" + msgstr "miembro privado %q+#D en struct anónimo" + +-#: cp/class.c:3187 cp/decl2.c:1493 ++#: cp/class.c:3189 cp/decl2.c:1494 + #, fuzzy, gcc-internal-format + #| msgid "protected member %q+#D in anonymous union" + msgid "protected member %q#D in anonymous union" + msgstr "miembro protegido %q+#D en union anónima" + +-#: cp/class.c:3190 ++#: cp/class.c:3192 + #, fuzzy, gcc-internal-format + #| msgid "protected member %q+#D in anonymous struct" + msgid "protected member %q#D in anonymous struct" + msgstr "miembro protegido %q+#D en struct anónimo" + +-#: cp/class.c:3378 ++#: cp/class.c:3380 + #, gcc-internal-format + msgid "the ellipsis in %qD is not inherited" + msgstr "" + +-#: cp/class.c:3547 ++#: cp/class.c:3549 + #, gcc-internal-format + msgid "bit-field %q+#D with non-integral type" + msgstr "campo de bits %q+#D con tipo no entero" + +-#: cp/class.c:3563 ++#: cp/class.c:3565 + #, gcc-internal-format + msgid "bit-field %q+D width not an integer constant" + msgstr "la anchura del campo de bits %q+D no es una constante entera" + +-#: cp/class.c:3568 ++#: cp/class.c:3570 + #, gcc-internal-format + msgid "negative width in bit-field %q+D" + msgstr "anchura negativa en el campo de bits %q+D" + +-#: cp/class.c:3573 ++#: cp/class.c:3575 + #, gcc-internal-format + msgid "zero width for bit-field %q+D" + msgstr "anchura cero para el campo de bits %q+D" + +-#: cp/class.c:3583 ++#: cp/class.c:3585 + #, fuzzy, gcc-internal-format + #| msgid "width of %q+D exceeds its type" + msgid "width of %qD exceeds its type" + msgstr "la anchura de %q+D excede su tipo" + +-#: cp/class.c:3588 ++#: cp/class.c:3590 + #, fuzzy, gcc-internal-format + #| msgid "%q+D is too small to hold all values of %q#T" + msgid "%qD is too small to hold all values of %q#T" + msgstr "%q+D es demasiado pequeño para contener todos los valores de %q#T" + +-#: cp/class.c:3648 ++#: cp/class.c:3650 + #, gcc-internal-format + msgid "member %q+#D with constructor not allowed in union" + msgstr "no se permite el miembro %q+#D con constructor en la union" + +-#: cp/class.c:3651 ++#: cp/class.c:3653 + #, gcc-internal-format + msgid "member %q+#D with destructor not allowed in union" + msgstr "no se permite el miembro %q+#D con destructor en la union" + +-#: cp/class.c:3653 ++#: cp/class.c:3655 + #, gcc-internal-format + msgid "member %q+#D with copy assignment operator not allowed in union" + msgstr "no se permite el miembro %q+#D con operador de asignación de copia en la union" + +-#: cp/class.c:3657 ++#: cp/class.c:3659 + #, gcc-internal-format + msgid "unrestricted unions only available with -std=c++11 or -std=gnu++11" + msgstr "las uniones sin restricción sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/class.c:3781 ++#: cp/class.c:3783 + #, fuzzy, gcc-internal-format + #| msgid "%q+D may not be static because it is a member of a union" + msgid "in C++98 %q+D may not be static because it is a member of a union" + msgstr "%q+D no debe ser static porque es el miembro de una unión" + +-#: cp/class.c:3788 ++#: cp/class.c:3790 + #, fuzzy, gcc-internal-format + #| msgid "non-static data member %qD has Java class type" + msgid "non-static data member %q+D in a union may not have reference type %qT" + msgstr "el dato miembro que no es estático %qD tiene un tipo de clase Java" + +-#: cp/class.c:3798 ++#: cp/class.c:3800 + #, gcc-internal-format + msgid "field %q+D invalidly declared function type" + msgstr "el campo %q+D no válidamente se declara como un tipo de función" + +-#: cp/class.c:3804 ++#: cp/class.c:3806 + #, gcc-internal-format + msgid "field %q+D invalidly declared method type" + msgstr "el campo %q+D no válidamente se declara como un tipo de método" + +-#: cp/class.c:3864 ++#: cp/class.c:3866 + #, fuzzy, gcc-internal-format + #| msgid "ignoring packed attribute because of unpacked non-POD field %q+#D" + msgid "ignoring packed attribute because of unpacked non-POD field %q#D" + msgstr "se descartan los atributos packed por el campo %q+#D sin empacar que no es POD" + +-#: cp/class.c:3912 ++#: cp/class.c:3914 + #, fuzzy, gcc-internal-format + #| msgid "non-member %qs cannot be declared %" + msgid "member %q+D cannot be declared both % and %" + msgstr "el no-miembro %qs no se puede declarar %" + +-#: cp/class.c:3918 ++#: cp/class.c:3920 + #, fuzzy, gcc-internal-format + #| msgid "non-member %qs cannot be declared %" + msgid "member %q+D cannot be declared as a % reference" + msgstr "el no-miembro %qs no se puede declarar %" + +-#: cp/class.c:3944 ++#: cp/class.c:3946 + #, gcc-internal-format + msgid "multiple fields in union %qT initialized" + msgstr "múltiples campos inicializados en la unión %qT" + +-#: cp/class.c:3985 ++#: cp/class.c:3987 + #, fuzzy, gcc-internal-format + #| msgid "field %q+#D with same name as class" + msgid "field %q#D with same name as class" + msgstr "campo %q+#D con el mismo nombre que la clase" + +-#: cp/class.c:4008 ++#: cp/class.c:4010 + #, gcc-internal-format + msgid "%q#T has pointer data members" + msgstr "%q#T tiene miembros punteros a datos" + +-#: cp/class.c:4013 ++#: cp/class.c:4015 + #, gcc-internal-format + msgid " but does not override %<%T(const %T&)%>" + msgstr " pero no se impone a %<%T(const %T&)%>" + +-#: cp/class.c:4015 ++#: cp/class.c:4017 + #, gcc-internal-format + msgid " or %" + msgstr " o a %" + +-#: cp/class.c:4019 ++#: cp/class.c:4021 + #, gcc-internal-format + msgid " but does not override %" + msgstr " pero no se impone a %" + +-#: cp/class.c:4424 ++#: cp/class.c:4426 + #, gcc-internal-format + msgid "alignment of %qD increased in -fabi-version=9 (GCC 5.2)" + msgstr "" + +-#: cp/class.c:4427 ++#: cp/class.c:4429 + #, fuzzy, gcc-internal-format + #| msgid "alignment of %qD is bigger than original declaration" + msgid "alignment of %qD will increase in -fabi-version=9" + msgstr "la alineación de %qD es más grande que la declaración original" + +-#: cp/class.c:4698 ++#: cp/class.c:4700 + #, gcc-internal-format + msgid "initializer specified for non-virtual method %q+D" + msgstr "se especificó un inicializador para el método %q+D que no es virtual" + +-#: cp/class.c:5155 ++#: cp/class.c:5157 + #, gcc-internal-format + msgid "method overrides both % and %qE methods" + msgstr "el método anula tanto % como los métodos %qE" + +-#: cp/class.c:5176 ++#: cp/class.c:5178 + #, gcc-internal-format + msgid "method declared %qE overriding %qE method" + msgstr "el método declarado como %qE anula el método %qE" + +-#: cp/class.c:5771 cp/constexpr.c:218 ++#: cp/class.c:5775 cp/constexpr.c:220 + #, gcc-internal-format + msgid "enclosing class of constexpr non-static member function %q+#D is not a literal type" + msgstr "la clase envolvente de la función miembro que no es estática constexpr %q+#D no es un tipo literal" + +-#: cp/class.c:5796 ++#: cp/class.c:5799 + #, gcc-internal-format + msgid "%q+T is not literal because:" + msgstr "%q+T no es literal porque:" + +-#: cp/class.c:5798 ++#: cp/class.c:5801 + #, gcc-internal-format + msgid " %q+T has a non-trivial destructor" + msgstr " %q+T tiene un destructor que no es trivial" + +-#: cp/class.c:5803 ++#: cp/class.c:5806 + #, gcc-internal-format + msgid " %q+T is not an aggregate, does not have a trivial default constructor, and has no constexpr constructor that is not a copy or move constructor" + msgstr " %q+T no es un agregado, no tiene un constructor trivial por defecto y no tiene un constructor constexpr que no es un constructor copy o move" + +-#: cp/class.c:5838 ++#: cp/class.c:5841 + #, gcc-internal-format + msgid " base class %qT of %q+T is non-literal" + msgstr " la clase base %qT de %q+T no es literal" + +-#: cp/class.c:5853 ++#: cp/class.c:5856 + #, fuzzy, gcc-internal-format + #| msgid " non-static data member %q+D has non-literal type" + msgid " non-static data member %qD has non-literal type" + msgstr " el dato miembro que no es estático %q+D tiene un tipo que no es literal" + +-#: cp/class.c:5860 ++#: cp/class.c:5863 + #, fuzzy, gcc-internal-format + #| msgid " non-static data member %q+D has non-literal type" + msgid " non-static data member %qD has volatile type" + msgstr " el dato miembro que no es estático %q+D tiene un tipo que no es literal" + +-#: cp/class.c:5978 ++#: cp/class.c:5981 + #, fuzzy, gcc-internal-format + #| msgid "base class %q#T has a non-virtual destructor" + msgid "base class %q#T has accessible non-virtual destructor" + msgstr "la clase base %q#T tiene un destructor no virtual" + +-#: cp/class.c:6007 ++#: cp/class.c:6010 + #, fuzzy, gcc-internal-format + #| msgid "non-static reference %q+#D in class without a constructor" + msgid "non-static reference %q#D in class without a constructor" + msgstr "referencia %q+#D que no es static en una clase sin un constructor" + +-#: cp/class.c:6013 ++#: cp/class.c:6016 + #, fuzzy, gcc-internal-format + #| msgid "non-static const member %q+#D in class without a constructor" + msgid "non-static const member %q#D in class without a constructor" +@@ -37278,165 +37351,165 @@ + + #. If the function is defaulted outside the class, we just + #. give the synthesis error. +-#: cp/class.c:6039 ++#: cp/class.c:6042 + #, gcc-internal-format + msgid "%q+D declared to take const reference, but implicit declaration would take non-const" + msgstr "se declaró %q+D para tomar referencia const, pero la declaración implícita tomaría algo que no es const" + +-#: cp/class.c:6316 ++#: cp/class.c:6319 + #, gcc-internal-format + msgid "direct base %qT inaccessible in %qT due to ambiguity" + msgstr "base directa %qT inaccesible en %qT debido a ambigüedad" + +-#: cp/class.c:6328 ++#: cp/class.c:6331 + #, gcc-internal-format + msgid "virtual base %qT inaccessible in %qT due to ambiguity" + msgstr "base virtual %qT inaccesible en %qT debido a ambigüedad" + +-#: cp/class.c:6556 ++#: cp/class.c:6559 + #, fuzzy, gcc-internal-format + #| msgid "offset of %q+D is not ABI-compliant and may change in a future version of GCC" + msgid "offset of %qD is not ABI-compliant and may change in a future version of GCC" + msgstr "el desplazamiento de %q+D no cumple con la ABI y puede cambiar en una versión futura de GCC" + +-#: cp/class.c:6711 ++#: cp/class.c:6714 + #, fuzzy, gcc-internal-format + #| msgid "size of array %qE is too large" + msgid "size of type %qT is too large (%qE bytes)" + msgstr "el tamaño de la matriz %qE es demasiado grande" + +-#: cp/class.c:7009 ++#: cp/class.c:7012 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of %<...%> with non-slice" + msgid "invalid use of %q#T with a zero-size array in %q#D" + msgstr "uso no válido de %<...%> con algo que no es rebanada" + +-#: cp/class.c:7011 ++#: cp/class.c:7014 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of structure with flexible array member" + msgid "invalid use of %q#T with a flexible array member in %q#T" + msgstr "uso no válido de una estructura con un miembro de matriz flexible" + +-#: cp/class.c:7016 ++#: cp/class.c:7019 + #, fuzzy, gcc-internal-format + #| msgid " %q+#D declared here" + msgid "array member %q#D declared here" + msgstr " %q+#D se declaró aquí" + +-#: cp/class.c:7043 ++#: cp/class.c:7046 + #, fuzzy, gcc-internal-format + #| msgid "flexible array member not at end of struct" + msgid "zero-size array member %qD not at end of %q#T" + msgstr "el miembro de matriz flexible no está al final del struct" + +-#: cp/class.c:7045 ++#: cp/class.c:7048 + #, fuzzy, gcc-internal-format + #| msgid "flexible array member in otherwise empty struct" + msgid "zero-size array member %qD in an otherwise empty %q#T" + msgstr "el miembro de matriz flexible sería de otra manera un struct vacío" + +-#: cp/class.c:7053 cp/class.c:7083 ++#: cp/class.c:7056 cp/class.c:7086 + #, fuzzy, gcc-internal-format + #| msgid "redefinition of %q#T" + msgid "in the definition of %q#T" + msgstr "redefinición de %q#T" + +-#: cp/class.c:7061 ++#: cp/class.c:7064 + #, fuzzy, gcc-internal-format + #| msgid "flexible array member not at end of struct" + msgid "flexible array member %qD not at end of %q#T" + msgstr "el miembro de matriz flexible no está al final del struct" + +-#: cp/class.c:7063 ++#: cp/class.c:7066 + #, fuzzy, gcc-internal-format + #| msgid "flexible array member in otherwise empty struct" + msgid "flexible array member %qD in an otherwise empty %q#T" + msgstr "el miembro de matriz flexible sería de otra manera un struct vacío" + +-#: cp/class.c:7081 ++#: cp/class.c:7084 + #, fuzzy, gcc-internal-format + #| msgid " %q+#D declared here" + msgid "next member %q#D declared here" + msgstr " %q+#D se declaró aquí" + +-#: cp/class.c:7193 cp/parser.c:22773 ++#: cp/class.c:7196 cp/parser.c:22796 + #, gcc-internal-format + msgid "redefinition of %q#T" + msgstr "redefinición de %q#T" + +-#: cp/class.c:7337 ++#: cp/class.c:7340 + #, gcc-internal-format + msgid "%q#T has virtual functions and accessible non-virtual destructor" + msgstr "%q#T tiene funciones virtuales y destructor no virtual accesible" + +-#: cp/class.c:7365 ++#: cp/class.c:7368 + #, fuzzy, gcc-internal-format + #| msgid "type transparent class %qT does not have any fields" + msgid "type transparent %q#T does not have any fields" + msgstr "la clase transparente tipo %qT no tiene ningún campo" + +-#: cp/class.c:7371 ++#: cp/class.c:7374 + #, gcc-internal-format + msgid "type transparent class %qT has base classes" + msgstr "la clase transparente tipo %qT tiene clases base" + +-#: cp/class.c:7375 ++#: cp/class.c:7378 + #, gcc-internal-format + msgid "type transparent class %qT has virtual functions" + msgstr "la clase transparente tipo %qT tiene funciones virtuales" + +-#: cp/class.c:7381 ++#: cp/class.c:7384 + #, gcc-internal-format + msgid "type transparent %q#T cannot be made transparent because the type of the first field has a different ABI from the class overall" + msgstr "" + +-#: cp/class.c:7545 ++#: cp/class.c:7548 + #, fuzzy, gcc-internal-format + #| msgid "deducing from brace-enclosed initializer list requires #include " + msgid "definition of std::initializer_list does not match #include " + msgstr "la deducción de una lista inicializadora encerrada entre llaves requiere #include " + +-#: cp/class.c:7556 ++#: cp/class.c:7559 + #, gcc-internal-format + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "se trató de terminar struct, pero fue sacado debido a errores previos de decodificación" + +-#: cp/class.c:8072 ++#: cp/class.c:8075 + #, gcc-internal-format + msgid "language string %<\"%E\"%> not recognized" + msgstr "no se reconoce la cadena de lenguaje %<\"%E\"%>" + +-#: cp/class.c:8162 ++#: cp/class.c:8165 + #, gcc-internal-format + msgid "cannot resolve overloaded function %qD based on conversion to type %qT" + msgstr "no se puede resolver la función sobrecargada %qD basándose en la conversión al tipo %qT" + +-#: cp/class.c:8317 ++#: cp/class.c:8320 + #, gcc-internal-format + msgid "no matches converting function %qD to type %q#T" + msgstr "no hay coincidencias al convertir la función %qD al tipo %q#T" + +-#: cp/class.c:8345 ++#: cp/class.c:8348 + #, gcc-internal-format + msgid "converting overloaded function %qD to type %q#T is ambiguous" + msgstr "la conversión de la función sobrecargada %qD al tipo %q#T es ambigua" + +-#: cp/class.c:8372 ++#: cp/class.c:8375 + #, gcc-internal-format + msgid "assuming pointer to member %qD" + msgstr "asumiendo el puntero a miembro %qD" + +-#: cp/class.c:8375 ++#: cp/class.c:8378 + #, gcc-internal-format + msgid "(a pointer to member can only be formed with %<&%E%>)" + msgstr "(un puntero a miembro solamente se puede formar con %<&%E%>)" + +-#: cp/class.c:8450 cp/class.c:8487 ++#: cp/class.c:8453 cp/class.c:8490 + #, gcc-internal-format + msgid "not enough type information" + msgstr "no hay suficiente información de tipo" + +-#: cp/class.c:8470 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247 ++#: cp/class.c:8473 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247 + #, gcc-internal-format + msgid "cannot convert %qE from type %qT to type %qT" + msgstr "no se puede convertir %qE desde el tipo %qT al tipo %qT" +@@ -37446,12 +37519,12 @@ + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. +-#: cp/class.c:8756 ++#: cp/class.c:8759 + #, gcc-internal-format + msgid "declaration of %q#D" + msgstr "la declaración de %q#D" + +-#: cp/class.c:8758 ++#: cp/class.c:8761 + #, fuzzy, gcc-internal-format + #| msgid "changes meaning of %qD from %q+#D" + msgid "changes meaning of %qD from %q#D" +@@ -37484,366 +37557,366 @@ + msgid "invalid return type %qT of constexpr function %q+D" + msgstr "tipo de devolución %qT no válido para la función constexpr %q+D" + +-#: cp/constexpr.c:228 ++#: cp/constexpr.c:229 + #, gcc-internal-format + msgid "%q#T has virtual base classes" + msgstr "%q#T tiene clases base virtuales" + +-#: cp/constexpr.c:488 ++#: cp/constexpr.c:489 + #, gcc-internal-format + msgid "constexpr constructor does not have empty body" + msgstr "el constructor constexpr no tiene cuerpo vacío" + +-#: cp/constexpr.c:594 ++#: cp/constexpr.c:595 + #, gcc-internal-format + msgid "body of % constructor cannot be a function-try-block" + msgstr "" + +-#: cp/constexpr.c:723 ++#: cp/constexpr.c:724 + #, gcc-internal-format + msgid "% constructor for union %qT must initialize exactly one non-static data member" + msgstr "el constructor % para union %qT debe inicializar exactamente un dato miembro que no es static" + +-#: cp/constexpr.c:775 ++#: cp/constexpr.c:776 + #, fuzzy, gcc-internal-format + #| msgid "uninitialized member %qD in % constructor" + msgid "member %qD must be initialized by mem-initializer in % constructor" + msgstr "miembro %qD sin inicializar en el constructor %" + +-#: cp/constexpr.c:816 ++#: cp/constexpr.c:817 + #, gcc-internal-format + msgid "body of constexpr function %qD not a return-statement" + msgstr "el cuerpo de la función constexpr %qD no es una declaración de devolución" + +-#: cp/constexpr.c:876 ++#: cp/constexpr.c:877 + #, fuzzy, gcc-internal-format + #| msgid "%q+D is not usable as a constexpr function because:" + msgid "%qD is not usable as a constexpr function because:" + msgstr "%q+D no se puede usar como una función constexpr porque:" + +-#: cp/constexpr.c:1176 cp/constexpr.c:1185 cp/constexpr.c:1750 ++#: cp/constexpr.c:1177 cp/constexpr.c:1186 cp/constexpr.c:1766 + #, gcc-internal-format + msgid "%q+E is not a constant expression" + msgstr "%q+E no es una expresión constante" + +-#: cp/constexpr.c:1363 cp/constexpr.c:5115 ++#: cp/constexpr.c:1364 cp/constexpr.c:5146 + #, fuzzy, gcc-internal-format + #| msgid "internal function" + msgid "call to internal function %qE" + msgstr "función interna" + +-#: cp/constexpr.c:1426 ++#: cp/constexpr.c:1442 + #, gcc-internal-format + msgid "expression %qE does not designate a constexpr function" + msgstr "la expresión %qE no designa una función constexpr" + +-#: cp/constexpr.c:1444 cp/constexpr.c:5133 ++#: cp/constexpr.c:1460 cp/constexpr.c:5164 + #, gcc-internal-format + msgid "call to non-constexpr function %qD" + msgstr "llamada a la función %qD que no es constexpr" + +-#: cp/constexpr.c:1516 ++#: cp/constexpr.c:1532 + #, fuzzy, gcc-internal-format + #| msgid "%qD called in a constant expression" + msgid "%qD called in a constant expression before its definition is complete" + msgstr "se llamó %qD en una expresión constante" + +-#: cp/constexpr.c:1523 ++#: cp/constexpr.c:1539 + #, gcc-internal-format + msgid "%qD called in a constant expression" + msgstr "se llamó %qD en una expresión constante" + +-#: cp/constexpr.c:1527 ++#: cp/constexpr.c:1543 + #, gcc-internal-format + msgid "%qD used before its definition" + msgstr "se usó %qD antes de su definición" + +-#: cp/constexpr.c:1567 ++#: cp/constexpr.c:1583 + #, gcc-internal-format + msgid "call has circular dependency" + msgstr "la llamada tiene una dependencia circular" + +-#: cp/constexpr.c:1578 ++#: cp/constexpr.c:1594 + #, gcc-internal-format, gfc-internal-format + msgid "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to increase the maximum)" + msgstr "la profundidad de evaluación de constexpr excede el máximo de %d (use -fconstexpr-depth= para incrementar el máximo)" + +-#: cp/constexpr.c:1661 ++#: cp/constexpr.c:1677 + #, fuzzy, gcc-internal-format + #| msgid "Warn on calls to these functions" + msgid "constexpr call flows off the end of the function" + msgstr "Avisa en las llamadas a estas funciones" + +-#: cp/constexpr.c:1790 ++#: cp/constexpr.c:1806 + #, fuzzy, gcc-internal-format + #| msgid "right shift count is negative" + msgid "right operand of shift expression %q+E is negative" + msgstr "la cuenta de desplazamiento a la derecha es negativa" + +-#: cp/constexpr.c:1797 ++#: cp/constexpr.c:1813 + #, gcc-internal-format + msgid "right operand of shift expression %q+E is >= than the precision of the left operand" + msgstr "" + +-#: cp/constexpr.c:1815 ++#: cp/constexpr.c:1831 + #, fuzzy, gcc-internal-format + #| msgid "left-hand operand of comma expression has no effect" + msgid "left operand of shift expression %q+E is negative" + msgstr "el operador del lado izquierdo de la expresión coma no tiene efecto" + +-#: cp/constexpr.c:1834 ++#: cp/constexpr.c:1850 + #, fuzzy, gcc-internal-format + #| msgid "integral expression %qE is not constant" + msgid "shift expression %q+E overflows" + msgstr "la expresión integral %qE no es una constante" + +-#: cp/constexpr.c:1978 ++#: cp/constexpr.c:1994 + #, gcc-internal-format + msgid "arithmetic involving a null pointer in %qE" + msgstr "" + +-#: cp/constexpr.c:2172 ++#: cp/constexpr.c:2188 + #, fuzzy, gcc-internal-format + #| msgid "array subscript is outside array bounds" + msgid "array subscript value %qE is outside the bounds of array %qD of type %qT" + msgstr "el subíndice de la matriz está fuera de los límites de la matriz" + +-#: cp/constexpr.c:2177 ++#: cp/constexpr.c:2193 + #, fuzzy, gcc-internal-format + #| msgid "array subscript is outside array bounds" + msgid "array subscript value %qE is outside the bounds of array type %qT" + msgstr "el subíndice de la matriz está fuera de los límites de la matriz" + +-#: cp/constexpr.c:2324 ++#: cp/constexpr.c:2340 + #, fuzzy, gcc-internal-format + #| msgid "missing initializer for member %qD" + msgid "accessing uninitialized array element" + msgstr "falta el inicializador para el miembro %qD" + +-#: cp/constexpr.c:2355 ++#: cp/constexpr.c:2371 + #, fuzzy, gcc-internal-format + #| msgid "dereferencing % pointer" + msgid "dereferencing a null pointer in %qE" + msgstr "deferenciando el puntero %" + +-#: cp/constexpr.c:2369 cp/constexpr.c:2459 cp/constexpr.c:4003 ++#: cp/constexpr.c:2385 cp/constexpr.c:2475 cp/constexpr.c:4027 + #, gcc-internal-format + msgid "%qE is not a constant expression" + msgstr "%qE no es una expresión constante" + +-#: cp/constexpr.c:2375 ++#: cp/constexpr.c:2391 + #, gcc-internal-format + msgid "mutable %qD is not usable in a constant expression" + msgstr "%qD mutable no se puede usar en una expresión constante" + +-#: cp/constexpr.c:2400 ++#: cp/constexpr.c:2416 + #, gcc-internal-format + msgid "accessing %qD member instead of initialized %qD member in constant expression" + msgstr "se accede al miembro %qD en lugar del miembro inicializado %qD en la expresión constante" + +-#: cp/constexpr.c:2419 ++#: cp/constexpr.c:2435 + #, fuzzy, gcc-internal-format + #| msgid "missing initializer for member %qD" + msgid "accessing uninitialized member %qD" + msgstr "falta el inicializador para el miembro %qD" + +-#: cp/constexpr.c:3122 cp/constexpr.c:4412 ++#: cp/constexpr.c:3146 cp/constexpr.c:4443 + #, fuzzy, gcc-internal-format + #| msgid "dereferencing % pointer" + msgid "dereferencing a null pointer" + msgstr "deferenciando el puntero %" + +-#: cp/constexpr.c:3141 ++#: cp/constexpr.c:3165 + #, gcc-internal-format + msgid "accessing value of %qE through a %qT glvalue in a constant expression" + msgstr "se accede al valor de %qE a través de glvalue %qT en una expresión constante" + +-#: cp/constexpr.c:3180 ++#: cp/constexpr.c:3204 + #, gcc-internal-format + msgid "the value of %qD is not usable in a constant expression" + msgstr "el valor de %qD no se puede usar en una expresión constante" + +-#: cp/constexpr.c:3187 ++#: cp/constexpr.c:3211 + #, gcc-internal-format + msgid "%qD used in its own initializer" + msgstr "se usó %qD en su propio inicializador" + +-#: cp/constexpr.c:3192 ++#: cp/constexpr.c:3216 + #, gcc-internal-format + msgid "%q#D is not const" + msgstr "%q#D no es const" + +-#: cp/constexpr.c:3195 ++#: cp/constexpr.c:3219 + #, gcc-internal-format + msgid "%q#D is volatile" + msgstr "%q+#D es volatile" + +-#: cp/constexpr.c:3200 cp/constexpr.c:3207 ++#: cp/constexpr.c:3224 cp/constexpr.c:3231 + #, gcc-internal-format + msgid "%qD was not initialized with a constant expression" + msgstr "%qD no se inicializó con una expresion constante" + +-#: cp/constexpr.c:3213 ++#: cp/constexpr.c:3237 + #, gcc-internal-format + msgid "%qD was not declared %" + msgstr "%qD no se declaró %" + +-#: cp/constexpr.c:3216 ++#: cp/constexpr.c:3240 + #, gcc-internal-format + msgid "%qD does not have integral or enumeration type" + msgstr "%qD no tiene tipo integral o de enumeración" + +-#: cp/constexpr.c:3410 ++#: cp/constexpr.c:3434 + #, fuzzy, gcc-internal-format + #| msgid "division by zero is not a constant-expression" + msgid "modification of %qE is not a constant expression" + msgstr "la división entre cero no es una expresión constante" + +-#: cp/constexpr.c:3782 ++#: cp/constexpr.c:3806 + #, fuzzy, gcc-internal-format, gfc-internal-format + #| msgid "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to increase the maximum)" + msgid "constexpr loop iteration count exceeds limit of %d (use -fconstexpr-loop-limit= to increase the limit)" + msgstr "la profundidad de evaluación de constexpr excede el máximo de %d (use -fconstexpr-depth= para incrementar el máximo)" + +-#: cp/constexpr.c:3921 ++#: cp/constexpr.c:3945 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a constant expression" + msgid "value %qE of type %qT is not a constant expression" + msgstr "%qE no es una expresión constante" + +-#: cp/constexpr.c:4049 cp/constexpr.c:5562 ++#: cp/constexpr.c:4080 cp/constexpr.c:5593 + #, gcc-internal-format + msgid "temporary of non-literal type %qT in a constant expression" + msgstr "temporal del tipo %qT que no es literal en una expresión constante" + +-#: cp/constexpr.c:4398 ++#: cp/constexpr.c:4429 + #, fuzzy, gcc-internal-format + #| msgid "expression %qE is not a constant-expression" + msgid "a reinterpret_cast is not a constant expression" + msgstr "la expresión %qE no es una expresión constante" + +-#: cp/constexpr.c:4424 ++#: cp/constexpr.c:4455 + #, fuzzy, gcc-internal-format + #| msgid "temporary of non-literal type %qT in a constant expression" + msgid "conversion of %qT null pointer to %qT is not a constant expression" + msgstr "temporal del tipo %qT que no es literal en una expresión constante" + +-#: cp/constexpr.c:4439 ++#: cp/constexpr.c:4470 + #, fuzzy, gcc-internal-format + #| msgid "expression %qE is not a constant-expression" + msgid "%(%E)%> is not a constant expression" + msgstr "la expresión %qE no es una expresión constante" + +-#: cp/constexpr.c:4502 cp/constexpr.c:5423 cp/constexpr.c:5738 ++#: cp/constexpr.c:4533 cp/constexpr.c:5454 cp/constexpr.c:5769 + #, fuzzy, gcc-internal-format + #| msgid "expression %qE is not a constant-expression" + msgid "expression %qE is not a constant expression" + msgstr "la expresión %qE no es una expresión constante" + +-#: cp/constexpr.c:4579 ++#: cp/constexpr.c:4610 + #, fuzzy, gcc-internal-format + #| msgid "initializer element is not a constant expression" + msgid "statement is not a constant expression" + msgstr "el elemento inicializador no es una expresión constante" + +-#: cp/constexpr.c:4582 ++#: cp/constexpr.c:4613 + #, gcc-internal-format + msgid "unexpected expression %qE of kind %s" + msgstr "expresión %qE inesperada de género %s" + +-#: cp/constexpr.c:4652 ++#: cp/constexpr.c:4683 + #, fuzzy, gcc-internal-format + #| msgid "%qT cannot be the type of a complete constant expression because it has mutable sub-objects" + msgid "%qE is not a constant expression because it refers to mutable subobjects of %qT" + msgstr "%qT no puede ser el tipo de una expresión constante completa porque tiene sub-objetos mutables" + +-#: cp/constexpr.c:4661 ++#: cp/constexpr.c:4692 + #, fuzzy, gcc-internal-format + #| msgid "%qT cannot be the type of a complete constant expression because it has mutable sub-objects" + msgid "%qE is not a constant expression because it refers to an incompletely initialized variable" + msgstr "%qT no puede ser el tipo de una expresión constante completa porque tiene sub-objetos mutables" + +-#: cp/constexpr.c:4675 ++#: cp/constexpr.c:4706 + #, fuzzy, gcc-internal-format + #| msgid "conversion from pointer type %qT to arithmetic type %qT in a constant-expression" + msgid "conversion from pointer type %qT to arithmetic type %qT in a constant expression" + msgstr "conversión del tipo puntero %qT al tipo aritmético %qT en una expresión constante" + +-#: cp/constexpr.c:5033 ++#: cp/constexpr.c:5064 + #, gcc-internal-format + msgid "expression %qE has side-effects" + msgstr "la expresión %qE tiene efectos colaterales" + +-#: cp/constexpr.c:5227 ++#: cp/constexpr.c:5258 + #, fuzzy, gcc-internal-format + #| msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgid "reinterpret_cast from integer to pointer" + msgstr "reinterpret_cast no válido del tipo `%T' al tipo `%T'" + +-#: cp/constexpr.c:5259 ++#: cp/constexpr.c:5290 + #, gcc-internal-format + msgid "address-of an object %qE with thread local or automatic storage is not a constant expression" + msgstr "la dirección de un objeto %qE con hilo local o almacenamiento automático no es una expresión constante" + +-#: cp/constexpr.c:5293 ++#: cp/constexpr.c:5324 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a constant expression" + msgid "use of % in a constant expression" + msgstr "%qE no es una expresión constante" + +-#: cp/constexpr.c:5435 ++#: cp/constexpr.c:5466 + #, gcc-internal-format + msgid "typeid-expression is not a constant expression because %qE is of polymorphic type" + msgstr "la expresión id de tipo no es una expresión constante porque %qE es de tipo polimórfico" + +-#: cp/constexpr.c:5496 ++#: cp/constexpr.c:5527 + #, fuzzy, gcc-internal-format + #| msgid "temporary of non-literal type %qT in a constant expression" + msgid "cast to non-integral type %qT in a constant expression" + msgstr "temporal del tipo %qT que no es literal en una expresión constante" + +-#: cp/constexpr.c:5529 cp/decl.c:5163 ++#: cp/constexpr.c:5560 cp/decl.c:5163 + #, fuzzy, gcc-internal-format + #| msgid "%q+F declared % but never defined" + msgid "%qD declared % in % function" + msgstr "%q+F se declaró % pero nunca se define" + +-#: cp/constexpr.c:5536 cp/decl.c:5160 ++#: cp/constexpr.c:5567 cp/decl.c:5160 + #, fuzzy, gcc-internal-format + #| msgid "%qE undeclared here (not in a function)" + msgid "%qD declared % in % function" + msgstr "%qE no se declaró aquí (no en una función)" + +-#: cp/constexpr.c:5543 cp/decl.c:5583 ++#: cp/constexpr.c:5574 cp/decl.c:5583 + #, fuzzy, gcc-internal-format + #| msgid "uninitialized member %qD in % constructor" + msgid "uninitialized variable %qD in % function" + msgstr "miembro %qD sin inicializar en el constructor %" + +-#: cp/constexpr.c:5611 ++#: cp/constexpr.c:5642 + #, fuzzy, gcc-internal-format + #| msgid "division by zero is not a constant-expression" + msgid "division by zero is not a constant expression" + msgstr "la división entre cero no es una expresión constante" + +-#: cp/constexpr.c:5715 ++#: cp/constexpr.c:5746 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a constant expression" + msgid "% is not a constant expression" + msgstr "%qE no es una expresión constante" + +-#: cp/constexpr.c:5746 ++#: cp/constexpr.c:5777 + #, gcc-internal-format + msgid "non-constant array initialization" + msgstr "inicialización de una matriz que no es constante" + +-#: cp/constexpr.c:5767 ++#: cp/constexpr.c:5798 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a constant expression" + msgid "% is not a constant expression" + msgstr "%qE no es una expresión constante" + +-#: cp/constexpr.c:5779 ++#: cp/constexpr.c:5810 + #, gcc-internal-format, gfc-internal-format + msgid "unexpected AST of kind %s" + msgstr "AST inesperado de género %s" +@@ -38687,7 +38760,7 @@ + msgid " skips initialization of %q#D" + msgstr " salta la inicialización de %q+#D" + +-#: cp/decl.c:3408 cp/parser.c:12104 cp/parser.c:12131 ++#: cp/decl.c:3408 cp/parser.c:12113 cp/parser.c:12140 + #, gcc-internal-format + msgid "invalid exit from OpenMP structured block" + msgstr "salida no válida de un bloque estructurado OpenMP" +@@ -38702,7 +38775,7 @@ + msgid "%qD is not a type" + msgstr "%qD no es un tipo" + +-#: cp/decl.c:3766 cp/parser.c:6082 ++#: cp/decl.c:3766 cp/parser.c:6087 + #, gcc-internal-format + msgid "%qD used without template parameters" + msgstr "se usa %qD sin parámetros de plantilla" +@@ -40429,7 +40502,7 @@ + msgid "parameter declared %" + msgstr "el parámetro se declaró %" + +-#: cp/decl.c:11845 cp/parser.c:3161 ++#: cp/decl.c:11845 cp/parser.c:3163 + #, gcc-internal-format + msgid "invalid use of template-name %qE without an argument list" + msgstr "uso no válido del nombre-de-plantilla %qE sin una lista de argumentos" +@@ -40900,13 +40973,13 @@ + msgid "%qD has the same name as the class in which it is declared" + msgstr "%qD tiene el mismo nombre que la clase en la cual se declaró" + +-#: cp/decl.c:13533 cp/friend.c:304 cp/parser.c:2987 cp/parser.c:6141 +-#: cp/pt.c:8574 ++#: cp/decl.c:13533 cp/friend.c:304 cp/parser.c:2989 cp/parser.c:6146 ++#: cp/pt.c:8656 + #, gcc-internal-format + msgid "%qT is not a template" + msgstr "%qT no es una plantilla" + +-#: cp/decl.c:13534 cp/friend.c:305 cp/tree.c:4036 ++#: cp/decl.c:13534 cp/friend.c:305 cp/tree.c:4031 + #, fuzzy, gcc-internal-format + #| msgid "previous declaration %q+#D here" + msgid "previous declaration here" +@@ -40917,8 +40990,8 @@ + msgid "perhaps you want to explicitly add %<%T::%>" + msgstr "" + +-#: cp/decl.c:13547 cp/name-lookup.c:2741 cp/name-lookup.c:3581 +-#: cp/name-lookup.c:3626 cp/parser.c:6092 cp/parser.c:25696 ++#: cp/decl.c:13547 cp/name-lookup.c:2741 cp/name-lookup.c:3580 ++#: cp/name-lookup.c:3625 cp/parser.c:6097 cp/parser.c:25719 + #, gcc-internal-format + msgid "reference to %qD is ambiguous" + msgstr "la referencia a %qD es ambigua" +@@ -40971,7 +41044,7 @@ + msgid "scoped/unscoped mismatch in enum %q#T" + msgstr "no coinciden scoped/unscoped en el enum %q#T" + +-#: cp/decl.c:14058 cp/decl.c:14066 cp/decl.c:14078 cp/parser.c:17916 ++#: cp/decl.c:14058 cp/decl.c:14066 cp/decl.c:14078 cp/parser.c:17939 + #, gcc-internal-format + msgid "previous definition here" + msgstr "la definición previa está aquí" +@@ -41038,7 +41111,7 @@ + msgid "return type %q#T is incomplete" + msgstr "el tipo de devolución %q#T es un tipo de dato incompleto" + +-#: cp/decl.c:14846 cp/typeck.c:8980 ++#: cp/decl.c:14846 cp/typeck.c:8981 + #, gcc-internal-format + msgid "% should return a reference to %<*this%>" + msgstr "% debe devolver una referencia a %<*this%>" +@@ -41054,7 +41127,7 @@ + msgid "no return statements in function returning %qT" + msgstr "no hay una declaración de devolución en la función que no devuelve void" + +-#: cp/decl.c:15615 cp/typeck.c:8861 ++#: cp/decl.c:15615 cp/typeck.c:8862 + #, fuzzy, gcc-internal-format + #| msgid "function return types not compatible due to %" + msgid "only plain % return type can be deduced to %" +@@ -41218,28 +41291,28 @@ + msgid "width of bit-field %qD has non-integral type %qT" + msgstr "la anchura del campo de bits %qD es del tipo %qT que no integral" + +-#: cp/decl2.c:1403 ++#: cp/decl2.c:1404 + #, fuzzy, gcc-internal-format + #| msgid "%qD is not a static data member of a class template" + msgid "%q+D static data member inside of declare target directive" + msgstr "%qD no es un dato miembro static de una plantilla de clase" + +-#: cp/decl2.c:1467 ++#: cp/decl2.c:1468 + #, gcc-internal-format + msgid "anonymous struct not inside named type" + msgstr "struct anónimo no está dentro de un tipo nombrado" + +-#: cp/decl2.c:1558 ++#: cp/decl2.c:1559 + #, gcc-internal-format + msgid "namespace-scope anonymous aggregates must be static" + msgstr "los agregados anónimos de alcance de espacio de nombres deben ser static" + +-#: cp/decl2.c:1567 ++#: cp/decl2.c:1568 + #, gcc-internal-format + msgid "anonymous union with no members" + msgstr "union anónima sin miembros" + +-#: cp/decl2.c:1600 ++#: cp/decl2.c:1601 + #, gcc-internal-format + msgid "% must return type %qT" + msgstr "% debe devolver el tipo %qT" +@@ -41248,71 +41321,71 @@ + #. + #. The first parameter shall not have an associated default + #. argument. +-#: cp/decl2.c:1611 ++#: cp/decl2.c:1612 + #, gcc-internal-format + msgid "the first parameter of % cannot have a default argument" + msgstr "el primer parámetro de % no puede tener un argumento por defecto" + +-#: cp/decl2.c:1627 ++#: cp/decl2.c:1628 + #, gcc-internal-format + msgid "% takes type % (%qT) as first parameter" + msgstr "% toma el tipo % (%qT) como primer argumento" + +-#: cp/decl2.c:1656 ++#: cp/decl2.c:1657 + #, gcc-internal-format + msgid "% must return type %qT" + msgstr "% debe devolver el tipo %qT" + +-#: cp/decl2.c:1665 ++#: cp/decl2.c:1666 + #, gcc-internal-format + msgid "% takes type %qT as first parameter" + msgstr "% toma el tipo %qT como primer argumento" + +-#: cp/decl2.c:2527 ++#: cp/decl2.c:2528 + #, fuzzy, gcc-internal-format + #| msgid "%qT has a field %qD whose type uses the anonymous namespace" + msgid "%qT has a field %qD whose type has no linkage" + msgstr "%qT tiene un campo %qD cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2531 ++#: cp/decl2.c:2532 + #, fuzzy, gcc-internal-format + #| msgid "%qT has a field %qD whose type uses the anonymous namespace" + msgid "%qT has a field %qD whose type depends on the type %qT which has no linkage" + msgstr "%qT tiene un campo %qD cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2536 ++#: cp/decl2.c:2537 + #, gcc-internal-format + msgid "%qT has a field %qD whose type uses the anonymous namespace" + msgstr "%qT tiene un campo %qD cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2544 ++#: cp/decl2.c:2545 + #, gcc-internal-format + msgid "%qT declared with greater visibility than the type of its field %qD" + msgstr "%qT se declaró con mayor visibilidad que el tipo de su campo %qD" + +-#: cp/decl2.c:2562 ++#: cp/decl2.c:2563 + #, fuzzy, gcc-internal-format + #| msgid "%qT has a base %qT whose type uses the anonymous namespace" + msgid "%qT has a base %qT whose type has no linkage" + msgstr "%qT tiene una base %qT cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2566 ++#: cp/decl2.c:2567 + #, fuzzy, gcc-internal-format + #| msgid "%qT has a base %qT whose type uses the anonymous namespace" + msgid "%qT has a base %qT whose type depends on the type %qT which has no linkage" + msgstr "%qT tiene una base %qT cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2571 ++#: cp/decl2.c:2572 + #, gcc-internal-format + msgid "%qT has a base %qT whose type uses the anonymous namespace" + msgstr "%qT tiene una base %qT cuyo tipo usa el espacio de nombres anónimo" + +-#: cp/decl2.c:2578 ++#: cp/decl2.c:2579 + #, gcc-internal-format + msgid "%qT declared with greater visibility than its base %qT" + msgstr "%qT se declaró con mayor visibilidad que su base %qT" + +-#: cp/decl2.c:4187 ++#: cp/decl2.c:4188 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D, declared using anonymous type, is used but never defined" + msgid "%q#D, declared using unnamed type, is used but never defined" +@@ -41322,52 +41395,52 @@ + #. no linkage can only be used to declare extern "C" + #. entities. Since it's not always an error in the + #. ISO C++ 90 Standard, we only issue a warning. +-#: cp/decl2.c:4196 ++#: cp/decl2.c:4197 + #, fuzzy, gcc-internal-format + #| msgid "anonymous type with no linkage used to declare variable %q#D with linkage" + msgid "unnamed type with no linkage used to declare variable %q#D with linkage" + msgstr "se usó un tipo anónimo sin enlace para declarar la variable %q#D sin enlace" + +-#: cp/decl2.c:4200 ++#: cp/decl2.c:4201 + #, fuzzy, gcc-internal-format + #| msgid "anonymous type with no linkage used to declare function %q#D with linkage" + msgid "unnamed type with no linkage used to declare function %q#D with linkage" + msgstr "se usó un tipo anónimo sin enlace para declarar la función %q#D con enlace" + +-#: cp/decl2.c:4204 ++#: cp/decl2.c:4205 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D does not refer to the unqualified type, so it is not used for linkage" + msgid "%q#D does not refer to the unqualified type, so it is not used for linkage" + msgstr "%q+#D no se refiere al tipo sin calificar, así que no se usa para el enlace" + +-#: cp/decl2.c:4212 ++#: cp/decl2.c:4213 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D, declared using local type %qT, is used but never defined" + msgid "%q#D, declared using local type %qT, is used but never defined" + msgstr "%q+#D, declarada usando el tipo local %qT, se usa pero nunca se define" + +-#: cp/decl2.c:4216 ++#: cp/decl2.c:4217 + #, gcc-internal-format + msgid "type %qT with no linkage used to declare variable %q#D with linkage" + msgstr "se usó el tipo %qT sin enlace para declarar la variable %q#D con enlace" + +-#: cp/decl2.c:4219 ++#: cp/decl2.c:4220 + #, gcc-internal-format + msgid "type %qT with no linkage used to declare function %q#D with linkage" + msgstr "se usó el tipo %qT sin enlace para declarar la función %q#D con enlace" + +-#: cp/decl2.c:4407 cp/decl2.c:4410 ++#: cp/decl2.c:4408 cp/decl2.c:4411 + #, gcc-internal-format + msgid "the program should also define %qD" + msgstr "" + +-#: cp/decl2.c:4775 ++#: cp/decl2.c:4776 + #, fuzzy, gcc-internal-format + #| msgid "inline function %q+D used but never defined" + msgid "inline function %qD used but never defined" + msgstr "se usa la función inline %q+D pero nunca se define" + +-#: cp/decl2.c:4963 ++#: cp/decl2.c:4964 + #, gcc-internal-format + msgid "default argument missing for parameter %P of %q+#D" + msgstr "falta el argumento por defecto para el parámetro %P de %q+#D" +@@ -41374,12 +41447,12 @@ + + #. We mark a lambda conversion op as deleted if we can't + #. generate it properly; see maybe_add_lambda_conv_op. +-#: cp/decl2.c:5063 ++#: cp/decl2.c:5064 + #, gcc-internal-format + msgid "converting lambda which uses %<...%> to function pointer" + msgstr "se convierte lambda la cual usa %<...%> a un puntero de función" + +-#: cp/decl2.c:5070 ++#: cp/decl2.c:5071 + #, gcc-internal-format + msgid "use of deleted function %qD" + msgstr "se usó la función borrada %q+D" +@@ -41699,19 +41772,19 @@ + msgid "invalid initializer for array member %q#D" + msgstr "inicializador no válido para la matriz miembro %q#D" + +-#: cp/init.c:797 cp/init.c:821 cp/init.c:2367 cp/method.c:1345 ++#: cp/init.c:797 cp/init.c:821 cp/init.c:2367 cp/method.c:1346 + #, gcc-internal-format + msgid "uninitialized const member in %q#T" + msgstr "miembro const sin inicializar en %q#T" + + #: cp/init.c:799 cp/init.c:816 cp/init.c:823 cp/init.c:2352 cp/init.c:2380 +-#: cp/method.c:1348 cp/method.c:1359 ++#: cp/method.c:1349 cp/method.c:1360 + #, fuzzy, gcc-internal-format + #| msgid "%qD should be initialized" + msgid "%q#D should be initialized" + msgstr "%qD se debe inicializar" + +-#: cp/init.c:814 cp/init.c:2339 cp/method.c:1356 ++#: cp/init.c:814 cp/init.c:2339 cp/method.c:1357 + #, gcc-internal-format + msgid "uninitialized reference member in %q#T" + msgstr "miembro referencia sin inicializar en %q#T" +@@ -41813,7 +41886,7 @@ + msgid "array must be initialized with a brace-enclosed initializer" + msgstr "la matriz se debe inicializar con un inicializador dentro de llaves" + +-#: cp/init.c:1980 cp/semantics.c:3192 ++#: cp/init.c:1980 cp/semantics.c:3205 + #, gcc-internal-format + msgid "%qT is not a class type" + msgstr "%qT no es un tipo de clase" +@@ -41833,7 +41906,7 @@ + msgid "invalid use of non-static member function %qD" + msgstr "uso no válido de la función miembro no static %qD" + +-#: cp/init.c:2143 cp/semantics.c:1763 ++#: cp/init.c:2143 cp/semantics.c:1766 + #, gcc-internal-format + msgid "invalid use of non-static data member %qD" + msgstr "uso no válido del dato miembro no static %qD" +@@ -42042,23 +42115,23 @@ + msgid "because the array element type %qT has variable size" + msgstr "la literal compuesta tiene tamaño variable" + +-#: cp/lambda.c:541 ++#: cp/lambda.c:542 + #, gcc-internal-format + msgid "cannot capture %qE by reference" + msgstr "no se puede capturar %qE por referencia" + +-#: cp/lambda.c:549 ++#: cp/lambda.c:552 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of incomplete type %q#T" + msgid "capture by copy of incomplete type %qT" + msgstr "uso no válido del tipo incompleto %q#T" + +-#: cp/lambda.c:573 ++#: cp/lambda.c:576 + #, gcc-internal-format + msgid "already captured %qD in lambda expression" + msgstr "ya se capturó %qD en la expresión lambda" + +-#: cp/lambda.c:772 ++#: cp/lambda.c:775 + #, gcc-internal-format + msgid "% was not captured for this lambda function" + msgstr "no se capturó % para esta función lambda" +@@ -42113,121 +42186,121 @@ + msgid "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the use of an undeclared name is deprecated)" + msgstr "(si utiliza %<-fpermissive%>, G++ aceptará su código, pero permitir el uso de un nombre sin declarar es obsoleto)" + +-#: cp/mangle.c:2335 ++#: cp/mangle.c:2340 + #, gcc-internal-format + msgid "mangling typeof, use decltype instead" + msgstr "se decodifica typeof, utilice decltype en su lugar" + +-#: cp/mangle.c:2339 ++#: cp/mangle.c:2344 + #, gcc-internal-format + msgid "mangling __underlying_type" + msgstr "se decodifica __underlying_type" + +-#: cp/mangle.c:2622 ++#: cp/mangle.c:2627 + #, gcc-internal-format + msgid "mangling unknown fixed point type" + msgstr "se decodifica el tipo de coma fija desconocido" + +-#: cp/mangle.c:3233 ++#: cp/mangle.c:3238 + #, gcc-internal-format + msgid "use of built-in trait %qE in function signature; use library traits instead" + msgstr "" + +-#: cp/mangle.c:3238 ++#: cp/mangle.c:3243 + #, gcc-internal-format, gfc-internal-format + msgid "mangling %C" + msgstr "decodificando %C" + +-#: cp/mangle.c:3315 ++#: cp/mangle.c:3320 + #, gcc-internal-format + msgid "omitted middle operand to % operand cannot be mangled" + msgstr "se omitió el operando de enmedio de %: no se puede revolver el operando" + +-#: cp/mangle.c:3402 ++#: cp/mangle.c:3407 + #, gcc-internal-format + msgid "string literal in function template signature" + msgstr "literal de cadena en la firma de plantilla de función" + +-#: cp/mangle.c:3860 ++#: cp/mangle.c:3865 + #, gcc-internal-format + msgid "mangled name for %qD will change in C++17 because the exception specification is part of a function type" + msgstr "" + +-#: cp/mangle.c:3894 ++#: cp/mangle.c:3899 + #, fuzzy, gcc-internal-format + #| msgid "-fabi-version=6 (or =0) avoids this error with a change in mangling" + msgid "a later -fabi-version= (or =0) avoids this error with a change in mangling" + msgstr "-fabi-version=6 (o =0) evita este error con un cambio en la decodificación" + +-#: cp/mangle.c:3923 ++#: cp/mangle.c:3928 + #, fuzzy, gcc-internal-format + #| msgid "the mangled name of %qD will change in a future version of GCC" + msgid "the mangled name of %qD changed between -fabi-version=%d (%D) and -fabi-version=%d (%D)" + msgstr "el nombre revuelto de %qD cambiará en una versión futura de GCC" + +-#: cp/mangle.c:3929 ++#: cp/mangle.c:3934 + #, fuzzy, gcc-internal-format + #| msgid "the mangled name of %qD will change in a future version of GCC" + msgid "the mangled name of %qD changes between -fabi-version=%d (%D) and -fabi-version=%d (%D)" + msgstr "el nombre revuelto de %qD cambiará en una versión futura de GCC" + +-#: cp/mangle.c:4271 ++#: cp/mangle.c:4276 + #, fuzzy, gcc-internal-format + #| msgid "the mangled name of %qD will change in a future version of GCC" + msgid "the mangled name of a thunk for %qD changes between -fabi-version=%d and -fabi-version=%d" + msgstr "el nombre revuelto de %qD cambiará en una versión futura de GCC" + +-#: cp/mangle.c:4276 ++#: cp/mangle.c:4281 + #, fuzzy, gcc-internal-format + #| msgid "the mangled name of %qD will change in a future version of GCC" + msgid "the mangled name of %qD changes between -fabi-version=%d and -fabi-version=%d" + msgstr "el nombre revuelto de %qD cambiará en una versión futura de GCC" + +-#: cp/mangle.c:4281 ++#: cp/mangle.c:4286 + #, fuzzy, gcc-internal-format + #| msgid "the mangled name of %qD will change in a future version of GCC" + msgid "the mangled name of the initialization guard variable for %qD changes between -fabi-version=%d and -fabi-version=%d" + msgstr "el nombre revuelto de %qD cambiará en una versión futura de GCC" + +-#: cp/method.c:845 cp/method.c:1301 ++#: cp/method.c:846 cp/method.c:1302 + #, gcc-internal-format + msgid "non-static const member %q#D, can%'t use default assignment operator" + msgstr "el miembro const %q#D que no es static, no puede usar el operador de asignación por defecto" + +-#: cp/method.c:851 cp/method.c:1307 ++#: cp/method.c:852 cp/method.c:1308 + #, gcc-internal-format + msgid "non-static reference member %q#D, can%'t use default assignment operator" + msgstr "el miembro de referencia %q#D que no es static, no puede usar el operador de asignación por defecto" + +-#: cp/method.c:969 ++#: cp/method.c:970 + #, gcc-internal-format + msgid "synthesized method %qD first required here " + msgstr "se requirió primero el método sintetizado %qD aquí " + +-#: cp/method.c:1256 ++#: cp/method.c:1257 + #, gcc-internal-format + msgid "union member %q+D with non-trivial %qD" + msgstr "miembro union %q+D con %qD que no es trivial" + +-#: cp/method.c:1266 ++#: cp/method.c:1267 + #, fuzzy, gcc-internal-format + #| msgid "defaulted constructor calls non-constexpr %q+D" + msgid "defaulted constructor calls non-constexpr %qD" + msgstr "un constructor por defecto llama a %q+D que no es constexpr" + +-#: cp/method.c:1324 ++#: cp/method.c:1325 + #, fuzzy, gcc-internal-format + #| msgid "initializer for %q+#D is invalid" + msgid "initializer for %q#D is invalid" + msgstr "el inicializador para %q+#D es no válido" + +-#: cp/method.c:1376 ++#: cp/method.c:1377 + #, fuzzy, gcc-internal-format + #| msgid "defaulted default constructor does not initialize %q+#D" + msgid "defaulted default constructor does not initialize %q#D" + msgstr "el constructor por defecto en efecto no inicializa %q+#D" + +-#: cp/method.c:1387 ++#: cp/method.c:1388 + #, fuzzy, gcc-internal-format + #| msgid "non-static data member %qD has Java class type" + msgid "copying non-static data member %q#D of rvalue reference type" +@@ -42234,79 +42307,79 @@ + msgstr "el dato miembro que no es estático %qD tiene un tipo de clase Java" + + #. A trivial constructor doesn't have any NSDMI. +-#: cp/method.c:1616 ++#: cp/method.c:1617 + #, gcc-internal-format + msgid "defaulted default constructor does not initialize any non-static data member" + msgstr "el constructor por defecto en efecto no inicializa ningún dato miembro que no es static" + +-#: cp/method.c:1657 ++#: cp/method.c:1658 + #, gcc-internal-format + msgid "defaulted move assignment for %qT calls a non-trivial move assignment operator for virtual base %qT" + msgstr "" + +-#: cp/method.c:1774 ++#: cp/method.c:1775 + #, gcc-internal-format + msgid "a lambda closure type has a deleted default constructor" + msgstr "un tipo de conclusión lambda tiene un constructor por defecto borrado" + +-#: cp/method.c:1777 ++#: cp/method.c:1778 + #, gcc-internal-format + msgid "a lambda closure type has a deleted copy assignment operator" + msgstr "un tipo de conclusión lambda tiene un operador de asignación por copia borrado" + +-#: cp/method.c:1788 ++#: cp/method.c:1789 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D is implicitly declared as deleted because %qT declares a move constructor or move assignment operator" + msgid "%q#D is implicitly declared as deleted because %qT declares a move constructor or move assignment operator" + msgstr "%q+#D se declara implícitamente como deleted porque %qT declara un constructor move o un operador de asignación move" + +-#: cp/method.c:1799 ++#: cp/method.c:1800 + #, gcc-internal-format + msgid "%q#D inherits from multiple base subobjects" + msgstr "" + +-#: cp/method.c:1819 ++#: cp/method.c:1820 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D is implicitly deleted because the default definition would be ill-formed:" + msgid "%q#D is implicitly deleted because the default definition would be ill-formed:" + msgstr "%q+#D es implícitamente deleted por que la definición por defecto estaría mal formada:" + +-#: cp/method.c:1828 ++#: cp/method.c:1829 + msgid "%q#F is implicitly deleted because its exception-specification does not match the implicit exception-specification %qX" + msgstr "" + +-#: cp/method.c:2148 ++#: cp/method.c:2149 + #, gcc-internal-format + msgid "defaulted declaration %q+D" + msgstr "declaración definida por defecto %q+D" + +-#: cp/method.c:2150 ++#: cp/method.c:2151 + #, gcc-internal-format + msgid "does not match expected signature %qD" + msgstr "no coincide la firma esperada %qD" + +-#: cp/method.c:2182 ++#: cp/method.c:2183 + #, fuzzy + #| msgid "function %q+D defaulted on its first declaration with an exception-specification that differs from the implicit declaration %q#D" + msgid "function %q+D defaulted on its redeclaration with an exception-specification that differs from the implicit exception-specification %qX" + msgstr "la función %q+D definida por defecto en su primera declaración tiene una excepción de especificación que difiere de la declaración implícita %q#D" + +-#: cp/method.c:2204 ++#: cp/method.c:2205 + #, gcc-internal-format + msgid "explicitly defaulted function %q+D cannot be declared as constexpr because the implicit declaration is not constexpr:" + msgstr "la función %q+D explícitamente por defecto no se puede declarar como constexpr porque la declaración implícita no es constexpr:" + +-#: cp/method.c:2250 ++#: cp/method.c:2251 + #, gcc-internal-format + msgid "a template cannot be defaulted" + msgstr "una plantilla no se puede definir por defecto" + +-#: cp/method.c:2278 ++#: cp/method.c:2279 + #, gcc-internal-format + msgid "%qD cannot be defaulted" + msgstr "%qD no se puede definir por defecto" + +-#: cp/method.c:2287 ++#: cp/method.c:2288 + #, gcc-internal-format + msgid "defaulted function %q+D with default argument" + msgstr "función definida por defecto %q+D con argumento por defecto" +@@ -42506,97 +42579,97 @@ + msgid "%<%T::%D%> names constructor in %qT" + msgstr "%<%T::%D%> nombra al constructor en %qT" + +-#: cp/name-lookup.c:3459 ++#: cp/name-lookup.c:3458 + #, gcc-internal-format + msgid "cannot inherit constructors from indirect base %qT" + msgstr "" + +-#: cp/name-lookup.c:3467 ++#: cp/name-lookup.c:3466 + #, gcc-internal-format + msgid "no members matching %<%T::%D%> in %q#T" + msgstr "no hay miembros que coincidan con %<%T::%D%> en %q#T" + +-#: cp/name-lookup.c:3559 ++#: cp/name-lookup.c:3558 + #, gcc-internal-format + msgid "declaration of %qD not in a namespace surrounding %qD" + msgstr "la declaración de %qD no está en un espacio de nombres alrededor de %qD" + +-#: cp/name-lookup.c:3567 ++#: cp/name-lookup.c:3566 + #, gcc-internal-format + msgid "explicit qualification in declaration of %qD" + msgstr "calificación explícita en la declaración de %qD" + +-#: cp/name-lookup.c:3640 ++#: cp/name-lookup.c:3639 + #, fuzzy, gcc-internal-format + #| msgid "%qE has not been declared" + msgid "%qD has not been declared within %D" + msgstr "%qE no se ha declarado" + +-#: cp/name-lookup.c:3641 ++#: cp/name-lookup.c:3640 + #, fuzzy, gcc-internal-format + #| msgid "%q+D declared as a friend" + msgid "only here as a friend" + msgstr "%q+D se declaró como friend" + +-#: cp/name-lookup.c:3657 ++#: cp/name-lookup.c:3656 + #, gcc-internal-format + msgid "%qD should have been declared inside %qD" + msgstr "%qD se debería declarar dentro de %qD" + +-#: cp/name-lookup.c:3702 ++#: cp/name-lookup.c:3701 + #, gcc-internal-format + msgid "%qD attribute requires a single NTBS argument" + msgstr "el atributo %qD requiere un solo argumento NTBS" + +-#: cp/name-lookup.c:3709 ++#: cp/name-lookup.c:3708 + #, gcc-internal-format + msgid "%qD attribute is meaningless since members of the anonymous namespace get local symbols" + msgstr "el atributo %qD no tiene signifcado porque los miembros del espacio de nombres anónimo tiene símbolos locales" + +-#: cp/name-lookup.c:3719 ++#: cp/name-lookup.c:3718 + #, fuzzy, gcc-internal-format + #| msgid "ignoring attributes on template argument %qT" + msgid "ignoring %qD attribute on non-inline namespace" + msgstr "se descartan los atributos en el argumento de plantilla %qT" + +-#: cp/name-lookup.c:3725 ++#: cp/name-lookup.c:3724 + #, fuzzy, gcc-internal-format + #| msgid "ignoring attributes on template argument %qT" + msgid "ignoring %qD attribute on anonymous namespace" + msgstr "se descartan los atributos en el argumento de plantilla %qT" + +-#: cp/name-lookup.c:3744 cp/name-lookup.c:4165 ++#: cp/name-lookup.c:3743 cp/name-lookup.c:4164 + #, gcc-internal-format + msgid "%qD attribute directive ignored" + msgstr "se descarta la directiva de atributo %qD" + +-#: cp/name-lookup.c:3809 ++#: cp/name-lookup.c:3808 + #, gcc-internal-format + msgid "namespace alias %qD not allowed here, assuming %qD" + msgstr "no se permite aquí el alias del espacio de nombres %qD, se asume que es %qD" + +-#: cp/name-lookup.c:4150 ++#: cp/name-lookup.c:4149 + #, fuzzy, gcc-internal-format + #| msgid "This switch is deprecated; use -fsanitize-recover= instead." + msgid "strong using is deprecated; use inline namespaces instead" + msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-recover=." + +-#: cp/name-lookup.c:4153 ++#: cp/name-lookup.c:4152 + #, gcc-internal-format + msgid "strong using only meaningful at namespace scope" + msgstr "el uso de strong solamente tiene significado en el ámbito de espacio de nombres" + +-#: cp/name-lookup.c:4157 ++#: cp/name-lookup.c:4156 + #, gcc-internal-format + msgid "current namespace %qD does not enclose strongly used namespace %qD" + msgstr "el espacio de nombres actual %qD no contiene al espacio de nombres %qD usado con frecuencia" + +-#: cp/name-lookup.c:4506 ++#: cp/name-lookup.c:4505 + #, gcc-internal-format + msgid "maximum limit of %d namespaces searched for %qE" + msgstr "límite máximo de %d espacios de nombres buscados para %qE" + +-#: cp/name-lookup.c:4522 cp/name-lookup.c:4563 ++#: cp/name-lookup.c:4521 cp/name-lookup.c:4562 + #, fuzzy, gcc-internal-format + #| msgid "suggested alternative:" + #| msgid_plural "suggested alternatives:" +@@ -42603,7 +42676,7 @@ + msgid "suggested alternative: %qs" + msgstr "alternativa sugerida:" + +-#: cp/name-lookup.c:4530 ++#: cp/name-lookup.c:4529 + #, gcc-internal-format + msgid "suggested alternative:" + msgid_plural "suggested alternatives:" +@@ -42610,28 +42683,28 @@ + msgstr[0] "alternativa sugerida:" + msgstr[1] "alternativas sugeridas:" + +-#: cp/name-lookup.c:4534 ++#: cp/name-lookup.c:4533 + #, gcc-internal-format + msgid " %qE" + msgstr " %qE" + +-#: cp/name-lookup.c:5962 ++#: cp/name-lookup.c:5961 + #, gcc-internal-format + msgid "argument dependent lookup finds %q+D" + msgstr "la búsqueda dependiente del argumento encuentra %q+D" + +-#: cp/name-lookup.c:6215 ++#: cp/name-lookup.c:6214 + #, fuzzy, gcc-internal-format + #| msgid "deducing from brace-enclosed initializer list requires #include " + msgid "declaration of std::initializer_list does not match #include , isn't a template" + msgstr "la deducción de una lista inicializadora encerrada entre llaves requiere #include " + +-#: cp/name-lookup.c:6526 ++#: cp/name-lookup.c:6525 + #, gcc-internal-format + msgid "XXX entering pop_everything ()\n" + msgstr "XXX entrando a pop_everything ()\n" + +-#: cp/name-lookup.c:6535 ++#: cp/name-lookup.c:6534 + #, gcc-internal-format + msgid "XXX leaving pop_everything ()\n" + msgstr "XXX saliendo de pop_everything ()\n" +@@ -42651,7 +42724,7 @@ + msgid "LEXER_DEBUGGING_ENABLED_P is not set to true" + msgstr "" + +-#: cp/parser.c:1359 cp/parser.c:36599 ++#: cp/parser.c:1359 cp/parser.c:36622 + #, gcc-internal-format + msgid "%<#pragma omp declare simd%> not immediately followed by function declaration or definition" + msgstr "" +@@ -42676,7 +42749,7 @@ + msgid "request for member %qE in non-class type %qT" + msgstr "solicitud por el miembro %qE en el tipo %qT que no es clase" + +-#: cp/parser.c:2842 cp/parser.c:17854 ++#: cp/parser.c:2842 cp/parser.c:17877 + #, gcc-internal-format + msgid "%<%T::%E%> has not been declared" + msgstr "%<%T::%E%> no se ha declarado" +@@ -42736,698 +42809,698 @@ + msgid "(perhaps a semicolon is missing after the definition of %qT)" + msgstr "(tal vez falta un punto y coma después de la definición de %qT)" + +-#: cp/parser.c:2991 ++#: cp/parser.c:2993 + #, fuzzy, gcc-internal-format + #| msgid "%qE is not a template" + msgid "%qE is not a class template" + msgstr "%qE no es una plantilla" + +-#: cp/parser.c:2993 ++#: cp/parser.c:2995 + #, gcc-internal-format + msgid "%qE is not a template" + msgstr "%qE no es una plantilla" + +-#: cp/parser.c:2996 ++#: cp/parser.c:2998 + #, gcc-internal-format + msgid "invalid template-id" + msgstr "id-de-plantilla no válido" + +-#: cp/parser.c:3030 ++#: cp/parser.c:3032 + #, fuzzy, gcc-internal-format + #| msgid "floating-point literal cannot appear in a constant-expression" + msgid "ISO C++ forbids using a floating-point literal in a constant-expression" + msgstr "una literal de coma flotante no puede aparecer en una expresión constante" + +-#: cp/parser.c:3034 cp/pt.c:16746 ++#: cp/parser.c:3036 cp/pt.c:16828 + #, gcc-internal-format + msgid "a cast to a type other than an integral or enumeration type cannot appear in a constant-expression" + msgstr "una conversión a un tipo diferente de un tipo integral o de enumeración no puede aparecer en una expresión constante" + +-#: cp/parser.c:3039 ++#: cp/parser.c:3041 + #, gcc-internal-format + msgid "% operator cannot appear in a constant-expression" + msgstr "el operador % no puede aparecer en una expresión constante" + +-#: cp/parser.c:3043 ++#: cp/parser.c:3045 + #, gcc-internal-format + msgid "non-constant compound literals cannot appear in a constant-expression" + msgstr "las literales compuestas que no son constantes no pueden aparecer en una expresión constante" + +-#: cp/parser.c:3047 ++#: cp/parser.c:3049 + #, gcc-internal-format + msgid "a function call cannot appear in a constant-expression" + msgstr "una llamada a función no puede aparecer en una expresión constante" + +-#: cp/parser.c:3051 ++#: cp/parser.c:3053 + #, gcc-internal-format + msgid "an increment cannot appear in a constant-expression" + msgstr "un incremento no puede aparecer en una expresión constante" + +-#: cp/parser.c:3055 ++#: cp/parser.c:3057 + #, gcc-internal-format + msgid "an decrement cannot appear in a constant-expression" + msgstr "un decremento no puede aparecer en una expresión constante" + +-#: cp/parser.c:3059 ++#: cp/parser.c:3061 + #, gcc-internal-format + msgid "an array reference cannot appear in a constant-expression" + msgstr "una referencia a matriz no puede aparecer en una expresión constante" + +-#: cp/parser.c:3063 ++#: cp/parser.c:3065 + #, gcc-internal-format + msgid "the address of a label cannot appear in a constant-expression" + msgstr "la dirección de una etiqueta no puede aparecer en una expresión constante" + +-#: cp/parser.c:3067 ++#: cp/parser.c:3069 + #, gcc-internal-format + msgid "calls to overloaded operators cannot appear in a constant-expression" + msgstr "las llamadas a operadores sobrecargados no pueden aparecer en una expresión constante" + +-#: cp/parser.c:3071 ++#: cp/parser.c:3073 + #, gcc-internal-format + msgid "an assignment cannot appear in a constant-expression" + msgstr "una asignación no puede aparecer en una expresión constante" + +-#: cp/parser.c:3074 ++#: cp/parser.c:3076 + #, gcc-internal-format + msgid "a comma operator cannot appear in a constant-expression" + msgstr "un operador coma no puede aparecer en una expresión constante" + +-#: cp/parser.c:3078 ++#: cp/parser.c:3080 + #, gcc-internal-format + msgid "a call to a constructor cannot appear in a constant-expression" + msgstr "una llamada a un constructor no puede aparecer en una expresión constante" + +-#: cp/parser.c:3082 ++#: cp/parser.c:3084 + #, gcc-internal-format + msgid "a transaction expression cannot appear in a constant-expression" + msgstr "una expresión de transacción no puede aparecer en una expresión constante" + +-#: cp/parser.c:3128 ++#: cp/parser.c:3130 + #, gcc-internal-format + msgid "%qs cannot appear in a constant-expression" + msgstr "%qs no puede aparecer en una expresión constante" + +-#: cp/parser.c:3164 ++#: cp/parser.c:3166 + #, fuzzy, gcc-internal-format + #| msgid "variadic templates only available with -std=c++11 or -std=gnu++11" + msgid "class template argument deduction is only available with -std=c++1z or -std=gnu++1z" + msgstr "las plantillas variadic sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:3169 ++#: cp/parser.c:3171 + #, gcc-internal-format + msgid "invalid use of destructor %qD as a type" + msgstr "uso no válido del destructor %qD como un tipo" + + #. Something like 'unsigned A a;' +-#: cp/parser.c:3172 ++#: cp/parser.c:3174 + #, gcc-internal-format + msgid "invalid combination of multiple type-specifiers" + msgstr "combinación no válida de especificadores de tipo múltiples" + +-#: cp/parser.c:3184 ++#: cp/parser.c:3186 + #, fuzzy, gcc-internal-format + #| msgid "%qE does not name a type" + msgid "%qE does not name a type; did you mean %qs?" + msgstr "%qE no nombra a un tipo" + +-#: cp/parser.c:3188 ++#: cp/parser.c:3190 + #, gcc-internal-format + msgid "%qE does not name a type" + msgstr "%qE no nombra a un tipo" + +-#: cp/parser.c:3197 ++#: cp/parser.c:3199 + #, gcc-internal-format + msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:3200 ++#: cp/parser.c:3202 + #, fuzzy, gcc-internal-format + #| msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:3205 ++#: cp/parser.c:3207 + #, fuzzy, gcc-internal-format + #| msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:3208 ++#: cp/parser.c:3210 + #, fuzzy, gcc-internal-format + #| msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgid "% only available with -fconcepts" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:3234 ++#: cp/parser.c:3236 + #, gcc-internal-format + msgid "(perhaps % was intended)" + msgstr "(tal vez intentó %)" + +-#: cp/parser.c:3252 ++#: cp/parser.c:3254 + #, fuzzy, gcc-internal-format + #| msgid "%qE in namespace %qE does not name a type" + msgid "%qE in namespace %qE does not name a template type" + msgstr "%qE en el espacio de nombres %qE no nombra un tipo" + +-#: cp/parser.c:3256 ++#: cp/parser.c:3258 + #, gcc-internal-format + msgid "%qE in namespace %qE does not name a type" + msgstr "%qE en el espacio de nombres %qE no nombra un tipo" + + #. A::A() +-#: cp/parser.c:3265 ++#: cp/parser.c:3267 + #, gcc-internal-format + msgid "%<%T::%E%> names the constructor, not the type" + msgstr "%<%T::%E%> nombra el constructor, no el tipo" + +-#: cp/parser.c:3268 ++#: cp/parser.c:3270 + #, gcc-internal-format + msgid "and %qT has no template constructors" + msgstr "y %qT no tiene constructores de plantilla" + +-#: cp/parser.c:3273 ++#: cp/parser.c:3275 + #, gcc-internal-format + msgid "need % before %<%T::%E%> because %qT is a dependent scope" + msgstr "se necesita % antes de %<%T::%E%> porque %qT es un ámbito dependiente" + +-#: cp/parser.c:3283 ++#: cp/parser.c:3285 + #, fuzzy, gcc-internal-format + #| msgid "%qE in %q#T does not name a type" + msgid "%qE in %q#T does not name a template type" + msgstr "%qE en %q#T no nombra un tipo" + +-#: cp/parser.c:3287 ++#: cp/parser.c:3289 + #, gcc-internal-format + msgid "%qE in %q#T does not name a type" + msgstr "%qE en %q#T no nombra un tipo" + +-#: cp/parser.c:3890 ++#: cp/parser.c:3892 + #, gcc-internal-format + msgid "expected string-literal" + msgstr "se esperaba una cadena literal" + +-#: cp/parser.c:3955 ++#: cp/parser.c:3957 + #, gcc-internal-format + msgid "inconsistent user-defined literal suffixes %qD and %qD in string literal" + msgstr "los sufijos de literal %qD y %qD definidos por el usuario son inconsistentes en la cadena literal" + +-#: cp/parser.c:4009 ++#: cp/parser.c:4011 + #, gcc-internal-format + msgid "a wide string is invalid in this context" + msgstr "una cadena ancha es no válida en este contexto" + +-#: cp/parser.c:4124 ++#: cp/parser.c:4126 + #, gcc-internal-format + msgid "unable to find character literal operator %qD with %qT argument" + msgstr "no se puede encontrar el operador de carácter literal %qD con argumento %qT" + +-#: cp/parser.c:4225 ++#: cp/parser.c:4227 + #, fuzzy, gcc-internal-format + #| msgid "floating constant exceeds range of %qT" + msgid "integer literal exceeds range of %qT type" + msgstr "la constante de coma flotante excede el rango de %qT" + +-#: cp/parser.c:4232 ++#: cp/parser.c:4234 + #, fuzzy, gcc-internal-format + #| msgid "floating constant exceeds range of %qT" + msgid "floating literal exceeds range of %qT type" + msgstr "la constante de coma flotante excede el rango de %qT" + +-#: cp/parser.c:4236 ++#: cp/parser.c:4238 + #, fuzzy, gcc-internal-format + #| msgid "floating constant truncated to zero" + msgid "floating literal truncated to zero" + msgstr "se truncó la constante de coma flotante a cero" + +-#: cp/parser.c:4276 ++#: cp/parser.c:4278 + #, gcc-internal-format + msgid "unable to find numeric literal operator %qD" + msgstr "no se puede encontrar un operador literal numérico %qD" + +-#: cp/parser.c:4278 ++#: cp/parser.c:4280 + #, gcc-internal-format + msgid "use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes" + msgstr "" + +-#: cp/parser.c:4330 ++#: cp/parser.c:4332 + #, gcc-internal-format + msgid "unable to find string literal operator %qD with %qT, %qT arguments" + msgstr "no se puede encontrar un operador literal de cadena %qD con argumentos %qT, %qT" + +-#: cp/parser.c:4390 cp/parser.c:12668 ++#: cp/parser.c:4392 cp/parser.c:12677 + #, gcc-internal-format + msgid "expected declaration" + msgstr "se esperaba una declaración" + +-#: cp/parser.c:4652 cp/parser.c:4667 ++#: cp/parser.c:4654 cp/parser.c:4669 + #, fuzzy, gcc-internal-format + #| msgid "expected operator" + msgid "expected binary operator" + msgstr "operador inesperado" + +-#: cp/parser.c:4673 ++#: cp/parser.c:4675 + #, fuzzy, gcc-internal-format + #| msgid "expected %<...%>" + msgid "expected ..." + msgstr "se esperaba %<...%>." + +-#: cp/parser.c:4685 ++#: cp/parser.c:4687 + #, fuzzy, gcc-internal-format + #| msgid "%s expression list treated as compound expression" + msgid "binary expression in operand of fold-expression" + msgstr "se trata la lista de expresiones como una expresión compuesta %s" + +-#: cp/parser.c:4688 ++#: cp/parser.c:4690 + #, fuzzy, gcc-internal-format + #| msgid "conditional expression not allowed inside parentheses" + msgid "conditional expression in operand of fold-expression" + msgstr "no se permiten expresiones condicionales dentro de paréntesis" + +-#: cp/parser.c:4696 ++#: cp/parser.c:4698 + #, fuzzy, gcc-internal-format + #| msgid "type mismatch in vector shift expression" + msgid "mismatched operator in fold-expression" + msgstr "los tipos de datos no coinciden en la expresión shift de vector" + +-#: cp/parser.c:4800 ++#: cp/parser.c:4802 + #, gcc-internal-format + msgid "fixed-point types not supported in C++" + msgstr "no se admiten tipos de coma fija en C++" + +-#: cp/parser.c:4881 ++#: cp/parser.c:4883 + #, gcc-internal-format + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ISO C++ prohíbe grupos de llaves dentro de expresiones" + +-#: cp/parser.c:4893 ++#: cp/parser.c:4895 + #, gcc-internal-format + msgid "statement-expressions are not allowed outside functions nor in template-argument lists" + msgstr "las expresiones-de-declaraciones no se permiten fuera de funciones ni en listas de argumentos-plantilla" + +-#: cp/parser.c:4932 ++#: cp/parser.c:4934 + #, fuzzy, gcc-internal-format + #| msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" + msgid "fold-expressions only available with -std=c++1z or -std=gnu++1z" + msgstr "las expresiones lambda sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:4990 cp/parser.c:5164 cp/parser.c:5342 cp/semantics.c:3530 ++#: cp/parser.c:4992 cp/parser.c:5166 cp/parser.c:5344 cp/semantics.c:3543 + #, gcc-internal-format + msgid "expected primary-expression" + msgstr "se esperaba una expresión primaria" + +-#: cp/parser.c:5020 ++#: cp/parser.c:5022 + #, gcc-internal-format + msgid "% may not be used in this context" + msgstr "no se puede usar % en este contexto" + +-#: cp/parser.c:5158 ++#: cp/parser.c:5160 + #, gcc-internal-format + msgid "a template declaration cannot appear at block scope" + msgstr "una declaración de plantilla no puede aparecer en el ámbito de bloque" + +-#: cp/parser.c:5317 ++#: cp/parser.c:5319 + #, gcc-internal-format + msgid "local variable %qD may not appear in this context" + msgstr "la variable local %qD no puede aparecer en este contexto" + +-#: cp/parser.c:5494 ++#: cp/parser.c:5501 + #, gcc-internal-format + msgid "expected id-expression" + msgstr "se esperaba una expresión id" + +-#: cp/parser.c:5626 ++#: cp/parser.c:5633 + #, gcc-internal-format + msgid "scope %qT before %<~%> is not a class-name" + msgstr "el ámbito %qT antes de %<~%> no es un nombre-de-clase" + +-#: cp/parser.c:5655 cp/parser.c:7675 ++#: cp/parser.c:5662 cp/parser.c:7680 + #, fuzzy, gcc-internal-format + #| msgid "C++0x auto only available with -std=c++11 or -std=gnu++11" + msgid "%<~auto%> only available with -std=c++14 or -std=gnu++14" + msgstr "C++0x automático sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:5766 ++#: cp/parser.c:5773 + #, gcc-internal-format + msgid "declaration of %<~%T%> as member of %qT" + msgstr "declaración de %<~%T%> como miembro de %qT" + +-#: cp/parser.c:5781 ++#: cp/parser.c:5788 + #, gcc-internal-format + msgid "typedef-name %qD used as destructor declarator" + msgstr "se usa el nombre-de-definición-de-tipo %qD como un declarador de destructor" + +-#: cp/parser.c:5817 ++#: cp/parser.c:5824 + #, gcc-internal-format + msgid "literal operator suffixes not preceded by %<_%> are reserved for future standardization" + msgstr "los sufijos de operador literal que no están precedidos por %<_%> están reservados para estandarización futura" + +-#: cp/parser.c:5828 cp/parser.c:19884 ++#: cp/parser.c:5835 cp/parser.c:19907 + #, gcc-internal-format + msgid "expected unqualified-id" + msgstr "se esperaba un id sin calificar" + +-#: cp/parser.c:5935 ++#: cp/parser.c:5942 + #, gcc-internal-format + msgid "found %<:%> in nested-name-specifier, expected %<::%>" + msgstr "se encontró %<:%> en un especificador de nombre anidado, se esperaba %<::%>" + +-#: cp/parser.c:6004 ++#: cp/parser.c:6009 + #, gcc-internal-format + msgid "decltype evaluates to %qT, which is not a class or enumeration type" + msgstr "el tipo de declaración evalúa a %qT, el cual no es una clase o un tipo enumerado" + +-#: cp/parser.c:6030 ++#: cp/parser.c:6035 + #, fuzzy, gcc-internal-format + #| msgid "incomplete type %qT used in nested name specifier" + msgid "function template-id %qD in nested-name-specifier" + msgstr "se utilizó el tipo incompleto %qT en un especificador de nombre anidado" + +-#: cp/parser.c:6038 ++#: cp/parser.c:6043 + #, fuzzy, gcc-internal-format + #| msgid "expected nested-name-specifier" + msgid "variable template-id %qD in nested-name-specifier" + msgstr "se esperaban especificadores de nombre anidados" + +-#: cp/parser.c:6142 cp/typeck.c:2625 cp/typeck.c:2628 cp/typeck.c:2648 ++#: cp/parser.c:6147 cp/typeck.c:2625 cp/typeck.c:2628 cp/typeck.c:2648 + #, gcc-internal-format + msgid "%qD is not a template" + msgstr "%qD no es una plantilla" + +-#: cp/parser.c:6220 ++#: cp/parser.c:6225 + #, gcc-internal-format + msgid "expected nested-name-specifier" + msgstr "se esperaban especificadores de nombre anidados" + +-#: cp/parser.c:6421 cp/parser.c:8656 ++#: cp/parser.c:6426 cp/parser.c:8661 + #, gcc-internal-format + msgid "types may not be defined in casts" + msgstr "los tipos no se pueden definir en conversiones" + +-#: cp/parser.c:6505 ++#: cp/parser.c:6510 + #, gcc-internal-format + msgid "types may not be defined in a % expression" + msgstr "no se pueden definir tipos en una expresión %" + +-#: cp/parser.c:6563 ++#: cp/parser.c:6568 + #, gcc-internal-format + msgid "%<_Cilk_spawn%> must be followed by an expression" + msgstr "" + +-#: cp/parser.c:6647 ++#: cp/parser.c:6652 + #, fuzzy, gcc-internal-format + #| msgid "wrong number of arguments to %<__builtin_shuffle%>" + msgid "wrong number of arguments to %<__builtin_addressof%>" + msgstr "número erróneo de argumentos para %<__builtin_shuffle%>" + +-#: cp/parser.c:6659 cp/pt.c:17319 ++#: cp/parser.c:6664 cp/pt.c:17401 + #, fuzzy, gcc-internal-format + #| msgid "wrong number of arguments to %<__builtin_complex%>" + msgid "wrong number of arguments to %<__builtin_launder%>" + msgstr "número erróneo de argumentos para %<__builtin_complex%>" + +-#: cp/parser.c:6751 ++#: cp/parser.c:6756 + #, gcc-internal-format + msgid "ISO C++ forbids compound-literals" + msgstr "ISO C++ prohíbe las literales compuestas" + +-#: cp/parser.c:6810 ++#: cp/parser.c:6815 + #, gcc-internal-format + msgid "two consecutive %<[%> shall only introduce an attribute" + msgstr "" + +-#: cp/parser.c:7210 ++#: cp/parser.c:7215 + #, fuzzy, gcc-internal-format + #| msgid "-client_name not allowed with -dynamiclib" + msgid "braced list index is not allowed with array notation" + msgstr "no se permite -client_name con -dynamiclib" + +-#: cp/parser.c:7420 cp/typeck.c:2513 ++#: cp/parser.c:7425 cp/typeck.c:2513 + #, gcc-internal-format + msgid "invalid use of %qD" + msgstr "uso no válido de %qD" + +-#: cp/parser.c:7429 ++#: cp/parser.c:7434 + #, gcc-internal-format + msgid "%<%D::%D%> is not a class member" + msgstr "%<%D::%D%> no es un miembro clase" + +-#: cp/parser.c:7727 ++#: cp/parser.c:7732 + #, gcc-internal-format + msgid "non-scalar type" + msgstr "tipo que no es escalar" + +-#: cp/parser.c:7826 ++#: cp/parser.c:7831 + #, gcc-internal-format + msgid "ISO C++ does not allow % with a non-type" + msgstr "ISO C++ no permite % con algo que no es tipo" + +-#: cp/parser.c:7911 ++#: cp/parser.c:7916 + #, gcc-internal-format + msgid "types may not be defined in % expressions" + msgstr "no se pueden definir tipos en expresiones %" + +-#: cp/parser.c:8189 ++#: cp/parser.c:8194 + #, gcc-internal-format + msgid "types may not be defined in a new-expression" + msgstr "no se pueden definir tipos en una expresión new" + +-#: cp/parser.c:8205 ++#: cp/parser.c:8210 + #, gcc-internal-format + msgid "array bound forbidden after parenthesized type-id" + msgstr "se prohíbe el límite de matriz después del id-de-tipo entre paréntesis" + +-#: cp/parser.c:8207 ++#: cp/parser.c:8212 + #, gcc-internal-format + msgid "try removing the parentheses around the type-id" + msgstr "intente borrar los paréntesis alrededor del id-de-tipo" + +-#: cp/parser.c:8239 ++#: cp/parser.c:8244 + #, gcc-internal-format + msgid "initialization of new-expression for type % requires exactly one element" + msgstr "" + +-#: cp/parser.c:8287 ++#: cp/parser.c:8292 + #, fuzzy, gcc-internal-format + #| msgid "Expected expression type" + msgid "expected expression-list or type-id" + msgstr "Se esperaba un tipo de expresión" + +-#: cp/parser.c:8316 ++#: cp/parser.c:8321 + #, gcc-internal-format + msgid "types may not be defined in a new-type-id" + msgstr "no se pueden definir tipos en un id-tipo-nuevo" + +-#: cp/parser.c:8444 ++#: cp/parser.c:8449 + #, gcc-internal-format + msgid "expression in new-declarator must have integral or enumeration type" + msgstr "la expresión en el declarador-new debe tener un tipo integral o de enumeración" + +-#: cp/parser.c:8752 ++#: cp/parser.c:8757 + #, gcc-internal-format + msgid "use of old-style cast" + msgstr "uso de conversión de estilo antiguo" + +-#: cp/parser.c:8899 ++#: cp/parser.c:8904 + #, gcc-internal-format + msgid "%<>>%> operator is treated as two right angle brackets in C++11" + msgstr "el operador %<>>%> se tratará como dos en llaves en ángulo derechas en C++11" + +-#: cp/parser.c:8902 ++#: cp/parser.c:8907 + #, gcc-internal-format + msgid "suggest parentheses around %<>>%> expression" + msgstr "se sugieren paréntesis alrededor de la expresión %<>>%>" + +-#: cp/parser.c:9098 ++#: cp/parser.c:9103 + #, gcc-internal-format + msgid "ISO C++ does not allow ?: with omitted middle operand" + msgstr "ISO C++ no permite ?: con el operando medio omitido" + +-#: cp/parser.c:9813 ++#: cp/parser.c:9822 + #, gcc-internal-format + msgid "lambda-expression in unevaluated context" + msgstr "expresión lambda en un contexto sin evaluar" + +-#: cp/parser.c:9822 ++#: cp/parser.c:9831 + #, fuzzy, gcc-internal-format + #| msgid "lambda-expression in unevaluated context" + msgid "lambda-expression in template-argument" + msgstr "expresión lambda en un contexto sin evaluar" + +-#: cp/parser.c:9975 ++#: cp/parser.c:9984 + #, gcc-internal-format + msgid "expected end of capture-list" + msgstr "se esperaba el fin de la lista-de-captura" + +-#: cp/parser.c:9989 ++#: cp/parser.c:9998 + #, gcc-internal-format + msgid "explicit by-copy capture of % redundant with by-copy capture default" + msgstr "la captura por copia explícita de % es redundante con la captura por copia por defecto" + +-#: cp/parser.c:10006 ++#: cp/parser.c:10015 + #, fuzzy, gcc-internal-format + #| msgid "C++0x auto only available with -std=c++11 or -std=gnu++11" + msgid "%<*this%> capture only available with -std=c++1z or -std=gnu++1z" + msgstr "C++0x automático sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:10051 ++#: cp/parser.c:10060 + #, fuzzy, gcc-internal-format + #| msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" + msgid "lambda capture initializers only available with -std=c++14 or -std=gnu++14" + msgstr "las expresiones lambda sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:10058 ++#: cp/parser.c:10067 + #, fuzzy, gcc-internal-format + #| msgid "non-empty initializer for array of empty elements" + msgid "empty initializer for lambda init-capture" + msgstr "inicializador no-vacío para una matriz de elementos vacíos" + +-#: cp/parser.c:10081 ++#: cp/parser.c:10090 + #, gcc-internal-format + msgid "capture of non-variable %qD " + msgstr "captura de %qD que no es variable " + +-#: cp/parser.c:10084 cp/parser.c:10094 cp/semantics.c:3371 cp/semantics.c:3383 ++#: cp/parser.c:10093 cp/parser.c:10103 cp/semantics.c:3384 cp/semantics.c:3396 + #, fuzzy, gcc-internal-format + #| msgid "%q+#D declared here" + msgid "%q#D declared here" + msgstr "%q+#D se declaró aquí" + +-#: cp/parser.c:10090 ++#: cp/parser.c:10099 + #, gcc-internal-format + msgid "capture of variable %qD with non-automatic storage duration" + msgstr "captura de la variable %qD con duración de almacenamiento que no es automática" + +-#: cp/parser.c:10128 ++#: cp/parser.c:10137 + #, gcc-internal-format + msgid "explicit by-copy capture of %qD redundant with by-copy capture default" + msgstr "la captura por copia explícita de %qD es redundante con la captura por copia por defecto" + +-#: cp/parser.c:10133 ++#: cp/parser.c:10142 + #, gcc-internal-format + msgid "explicit by-reference capture of %qD redundant with by-reference capture default" + msgstr "la captura por referencia explícita de %qD es redundate con la captura por referencia por defecto" + +-#: cp/parser.c:10182 ++#: cp/parser.c:10191 + #, fuzzy, gcc-internal-format + #| msgid "variadic templates only available with -std=c++11 or -std=gnu++11" + msgid "lambda templates are only available with -std=c++14 or -std=gnu++14" + msgstr "las plantillas variadic sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:10186 ++#: cp/parser.c:10195 + #, fuzzy, gcc-internal-format + #| msgid "ISO C90 does not support complex types" + msgid "ISO C++ does not support lambda templates" + msgstr "ISO C90 no admite tipos complejos" + +-#: cp/parser.c:10216 ++#: cp/parser.c:10225 + #, gcc-internal-format + msgid "default argument specified for lambda parameter" + msgstr "se especificó un argumento por defecto para el parámetro lambda" + +-#: cp/parser.c:10234 ++#: cp/parser.c:10243 + #, fuzzy, gcc-internal-format + #| msgid "duplicate %" + msgid "duplicate %" + msgstr "% duplicado" + +-#: cp/parser.c:10282 ++#: cp/parser.c:10291 + #, fuzzy, gcc-internal-format + #| msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgid "% lambda only available with -std=c++1z or -std=gnu++1z" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:10734 cp/parser.c:10915 ++#: cp/parser.c:10743 cp/parser.c:10924 + #, fuzzy, gcc-internal-format + #| msgid "attributes after parenthesized initializer ignored" + msgid "attributes at the beginning of statement are ignored" + msgstr "se descartan los atributos después del inicializador entre paréntesis" + +-#: cp/parser.c:10762 ++#: cp/parser.c:10771 + #, gcc-internal-format + msgid "expected labeled-statement" + msgstr "se esperaba una declaración etiquetada" + +-#: cp/parser.c:10808 ++#: cp/parser.c:10817 + #, gcc-internal-format + msgid "case label %qE not within a switch statement" + msgstr "la etiqueta case %qE no está dentro de una declaración switch" + +-#: cp/parser.c:10922 ++#: cp/parser.c:10931 + #, gcc-internal-format + msgid "need % before %qE because %qT is a dependent scope" + msgstr "se necesita % antes de %qE porque %qT es un ámbito dependiente" + +-#: cp/parser.c:10931 ++#: cp/parser.c:10940 + #, gcc-internal-format + msgid "%<%T::%D%> names the constructor, not the type" + msgstr "%<%T::%D%> nombra el constructor, no el tipo" + +-#: cp/parser.c:10978 ++#: cp/parser.c:10987 + #, gcc-internal-format + msgid "compound-statement in constexpr function" + msgstr "declaración compuesta en una función constexpr" + +-#: cp/parser.c:11105 ++#: cp/parser.c:11114 + #, fuzzy, gcc-internal-format + #| msgid "C++11 % only available with -std=c++11 or -std=gnu++11" + msgid "% only available with -std=c++1z or -std=gnu++1z" + msgstr "% de C++11 sólo está disponible con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:11131 ++#: cp/parser.c:11140 + #, fuzzy, gcc-internal-format + #| msgid "inline namespaces only available with -std=c++11 or -std=gnu++11" + msgid "init-statement in selection statements only available with -std=c++1z or -std=gnu++1z" + msgstr "los nombres de espacio incluidos en línea sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:11301 cp/parser.c:27869 ++#: cp/parser.c:11310 cp/parser.c:27892 + #, gcc-internal-format + msgid "expected selection-statement" + msgstr "se esperaba una declaración de selección" + +-#: cp/parser.c:11334 ++#: cp/parser.c:11343 + #, gcc-internal-format + msgid "types may not be defined in conditions" + msgstr "no se pueden definir tipos en condiciones" + +-#: cp/parser.c:11757 ++#: cp/parser.c:11766 + #, gcc-internal-format + msgid "range-based % expression of type %qT has incomplete type" + msgstr "la expresión % basada en rango de tipo %qT es de tipo incompleto" + +-#: cp/parser.c:11795 ++#: cp/parser.c:11804 + #, gcc-internal-format + msgid "range-based % expression of type %qT has an % member but not a %" + msgstr "la expresión % basada en rango de tipo %qT tiene un miembro % pero no tiene %" + +-#: cp/parser.c:11801 ++#: cp/parser.c:11810 + #, gcc-internal-format + msgid "range-based % expression of type %qT has a % member but not an %" + msgstr "la expresión % basada en rango de tipo %qT tiene un miembro % pero no tiene %" + +-#: cp/parser.c:11853 ++#: cp/parser.c:11862 + #, gcc-internal-format + msgid "inconsistent begin/end types in range-based % statement: %qT and %qT" + msgstr "tipos begin/end inconsistentes para la declaración % basada en rango: %qT y %qT" + +-#: cp/parser.c:11988 cp/parser.c:27872 ++#: cp/parser.c:11997 cp/parser.c:27895 + #, gcc-internal-format + msgid "expected iteration-statement" + msgstr "se esperaba una declaración de iteración" + +-#: cp/parser.c:12036 ++#: cp/parser.c:12045 + #, fuzzy, gcc-internal-format + #| msgid "unrestricted unions only available with -std=c++11 or -std=gnu++11" + msgid "range-based % loops only available with -std=c++11 or -std=gnu++11" + msgstr "las uniones sin restricción sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:12110 ++#: cp/parser.c:12119 + #, fuzzy, gcc-internal-format + #| msgid "break statement used with OpenMP for loop" + msgid "break statement used with Cilk Plus for loop" + msgstr "se usó la declaración break en un bucle for de OpenMP" + +-#: cp/parser.c:12170 ++#: cp/parser.c:12179 + #, fuzzy, gcc-internal-format + #| msgid "compound-statement in constexpr function" + msgid "% in % function" +@@ -43434,72 +43507,78 @@ + msgstr "declaración compuesta en una función constexpr" + + #. Issue a warning about this use of a GNU extension. +-#: cp/parser.c:12178 ++#: cp/parser.c:12187 + #, gcc-internal-format + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ prohíbe los gotos calculados" + +-#: cp/parser.c:12191 cp/parser.c:27875 ++#: cp/parser.c:12200 cp/parser.c:27898 + #, gcc-internal-format + msgid "expected jump-statement" + msgstr "se esperaba una declaración de salto" + +-#: cp/parser.c:12348 cp/parser.c:23115 ++#: cp/parser.c:12357 cp/parser.c:23138 + #, gcc-internal-format + msgid "extra %<;%>" + msgstr "<;%> extra" + +-#: cp/parser.c:12591 ++#: cp/parser.c:12600 + #, gcc-internal-format + msgid "%<__label__%> not at the beginning of a block" + msgstr "%<__label%> no está al inicio de un bloque" + +-#: cp/parser.c:12805 ++#: cp/parser.c:12814 + #, gcc-internal-format + msgid "non-variable %qD in declaration with more than one declarator with placeholder type" + msgstr "" + +-#: cp/parser.c:12825 ++#: cp/parser.c:12834 + #, gcc-internal-format + msgid "inconsistent deduction for %qT: %qT and then %qT" + msgstr "deducción inconsistente para %qT: %qT y después %qT" + +-#: cp/parser.c:12846 ++#: cp/parser.c:12855 + #, gcc-internal-format + msgid "mixing declarations and function-definitions is forbidden" + msgstr "se prohíbe mezclar declaraciones y definiciones-de-función" + +-#: cp/parser.c:12870 ++#: cp/parser.c:12879 + #, fuzzy, gcc-internal-format + #| msgid "types may not be defined in exception-declarations" + msgid "types may not be defined in a for-range-declaration" + msgstr "no se pueden definir tipos en declaraciones de excepción" + +-#: cp/parser.c:12925 ++#: cp/parser.c:12934 + #, fuzzy, gcc-internal-format + #| msgid "types may not be defined in range-based for loops" + msgid "initializer in range-based % loop" + msgstr "no se pueden definir tipos en bucles for basados en rango" + +-#: cp/parser.c:12928 ++#: cp/parser.c:12937 + #, fuzzy, gcc-internal-format + #| msgid "multiple declarations `%T' and `%T'" + msgid "multiple declarations in range-based % loop" + msgstr "declaraciones múltiples `%T' y `%T'" + +-#: cp/parser.c:12979 ++#: cp/parser.c:12988 + #, fuzzy, gcc-internal-format + #| msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" + msgid "decomposition declaration only available with -std=c++1z or -std=gnu++1z" + msgstr "las expresiones lambda sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:13028 ++#: cp/parser.c:13037 + #, fuzzy, gcc-internal-format + #| msgid "empty declaration" + msgid "empty decomposition declaration" + msgstr "declaración vacía" + +-#: cp/parser.c:13201 ++#: cp/parser.c:13054 ++#, fuzzy, gcc-internal-format ++#| msgid "invalid initializer for bit string" ++msgid "invalid initializer for structured binding declaration" ++msgstr "inicializador no válido para la cadena de bits" ++ ++#: cp/parser.c:13220 + #, gcc-internal-format + msgid "% used outside of class" + msgstr "se usó % fuera de la clase" +@@ -43506,502 +43585,502 @@ + + #. Complain about `auto' as a storage specifier, if + #. we're complaining about C++0x compatibility. +-#: cp/parser.c:13265 ++#: cp/parser.c:13284 + #, gcc-internal-format + msgid "% changes meaning in C++11; please remove it" + msgstr "% cambiará su significado en C++11; por favor bórrelo" + +-#: cp/parser.c:13301 ++#: cp/parser.c:13320 + #, gcc-internal-format + msgid "decl-specifier invalid in condition" + msgstr "especificador-decl no válido en la condición" + +-#: cp/parser.c:13307 ++#: cp/parser.c:13326 + #, fuzzy, gcc-internal-format + #| msgid "%qD invalid in %qT" + msgid "%qD invalid in lambda" + msgstr "%qD no válido en %qT" + +-#: cp/parser.c:13400 ++#: cp/parser.c:13419 + #, gcc-internal-format + msgid "class definition may not be declared a friend" + msgstr "la definición de clase no se puede declarar como friend" + +-#: cp/parser.c:13470 cp/parser.c:23522 ++#: cp/parser.c:13489 cp/parser.c:23545 + #, gcc-internal-format + msgid "templates may not be %" + msgstr "las plantillas no pueden ser %" + +-#: cp/parser.c:13510 ++#: cp/parser.c:13529 + #, gcc-internal-format + msgid "invalid linkage-specification" + msgstr "especificación de enlace no válida" + +-#: cp/parser.c:13597 ++#: cp/parser.c:13616 + #, fuzzy, gcc-internal-format + #| msgid "inline namespaces only available with -std=c++11 or -std=gnu++11" + msgid "static_assert without a message only available with -std=c++1z or -std=gnu++1z" + msgstr "los nombres de espacio incluidos en línea sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:13791 ++#: cp/parser.c:13810 + #, gcc-internal-format + msgid "types may not be defined in % expressions" + msgstr "no se pueden definir tipos en expresiones %" + +-#: cp/parser.c:13934 ++#: cp/parser.c:13953 + #, fuzzy, gcc-internal-format + #| msgid "types may not be defined in a new-type-id" + msgid "types may not be defined in a conversion-type-id" + msgstr "no se pueden definir tipos en un id-tipo-nuevo" + +-#: cp/parser.c:13961 ++#: cp/parser.c:13980 + #, gcc-internal-format + msgid "invalid use of % in conversion operator" + msgstr "uso no válido de % en el operador de conversión" + +-#: cp/parser.c:13965 ++#: cp/parser.c:13984 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of % in conversion operator" + msgid "use of % in member template conversion operator can never be deduced" + msgstr "uso no válido de % en el operador de conversión" + +-#: cp/parser.c:14054 ++#: cp/parser.c:14073 + #, gcc-internal-format + msgid "only constructors take member initializers" + msgstr "solamente los constructores toman inicializadores miembro" + +-#: cp/parser.c:14076 ++#: cp/parser.c:14095 + #, gcc-internal-format + msgid "cannot expand initializer for member %<%D%>" + msgstr "no se puede expandir el inicializador para el miembro %<%D%>" + +-#: cp/parser.c:14088 ++#: cp/parser.c:14107 + #, gcc-internal-format + msgid "mem-initializer for %qD follows constructor delegation" + msgstr "inicializador mem para %qD después de una delegación de constructor" + +-#: cp/parser.c:14100 ++#: cp/parser.c:14119 + #, gcc-internal-format + msgid "constructor delegation follows mem-initializer for %qD" + msgstr "delegación de constructor después de un inicializador mem para %qD" + +-#: cp/parser.c:14152 ++#: cp/parser.c:14171 + #, gcc-internal-format + msgid "anachronistic old-style base class initializer" + msgstr "inicializador de clase base de estilo antiguo anacrónico" + +-#: cp/parser.c:14222 ++#: cp/parser.c:14241 + #, gcc-internal-format + msgid "keyword % not allowed in this context (a qualified member initializer is implicitly a type)" + msgstr "no se permite la palabra clave % en este contexto (un inicializador de miembro calificado es implícitamente un tipo)" + +-#: cp/parser.c:14583 ++#: cp/parser.c:14602 + #, fuzzy, gcc-internal-format + #| msgid "missing space between %<\"\"%> and suffix identifier" + msgid "unexpected keyword; remove space between quotes and suffix identifier" + msgstr "falta un espacio entre %<\"\"%> y el identificador sufijo" + +-#: cp/parser.c:14589 ++#: cp/parser.c:14608 + #, gcc-internal-format + msgid "expected suffix identifier" + msgstr "se esperaba un identificador sufijo" + +-#: cp/parser.c:14598 ++#: cp/parser.c:14617 + #, gcc-internal-format + msgid "expected empty string after % keyword" + msgstr "se esperaba una cadena vacía después de la palabra clave %" + +-#: cp/parser.c:14604 ++#: cp/parser.c:14623 + #, fuzzy, gcc-internal-format + #| msgid "invalid operands in ternary operation" + msgid "invalid encoding prefix in literal operator" + msgstr "operandos no válidos en la operación terniaria" + +-#: cp/parser.c:14627 ++#: cp/parser.c:14646 + #, gcc-internal-format + msgid "expected operator" + msgstr "operador inesperado" + + #. Warn that we do not support `export'. +-#: cp/parser.c:14672 ++#: cp/parser.c:14691 + #, gcc-internal-format + msgid "keyword % not implemented, and will be ignored" + msgstr "no se admite la palabra clave %, y se descartará" + +-#: cp/parser.c:14842 ++#: cp/parser.c:14861 + #, fuzzy, gcc-internal-format + #| msgid "invalid template non-type parameter" + msgid "invalid constrained type parameter" + msgstr "parámetro que no es tipo plantilla no válido" + +-#: cp/parser.c:14850 ++#: cp/parser.c:14869 + #, fuzzy, gcc-internal-format + #| msgid "invalid catch parameter" + msgid "cv-qualified type parameter" + msgstr "parámetro de captura no válido" + +-#: cp/parser.c:14935 ++#: cp/parser.c:14954 + #, gcc-internal-format + msgid "variadic constraint introduced without %<...%>" + msgstr "" + +-#: cp/parser.c:14999 ++#: cp/parser.c:15018 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of '%E' as a non-type template-argument" + msgid "invalid use of % in default template argument" + msgstr "uso no válido de '%E' como un argumento de plantilla que no es tipo" + +-#: cp/parser.c:15234 cp/parser.c:15320 cp/parser.c:21348 ++#: cp/parser.c:15253 cp/parser.c:15339 cp/parser.c:21371 + #, gcc-internal-format + msgid "template parameter pack %qD cannot have a default argument" + msgstr "el paquete de parámetros plantilla %qD no puede tener un argumento por defecto" + +-#: cp/parser.c:15238 cp/parser.c:15324 ++#: cp/parser.c:15257 cp/parser.c:15343 + #, gcc-internal-format + msgid "template parameter packs cannot have default arguments" + msgstr "los paquetes de parámetro de plantilla no pueden tener argumentos por defecto" + +-#: cp/parser.c:15390 ++#: cp/parser.c:15409 + #, gcc-internal-format + msgid "expected template-id" + msgstr "se esperaba un id de plantilla" + +-#: cp/parser.c:15450 ++#: cp/parser.c:15469 + #, gcc-internal-format + msgid "%<<::%> cannot begin a template-argument list" + msgstr "%<<::%> no puede iniciar una lista de argumentos de plantilla" + +-#: cp/parser.c:15454 ++#: cp/parser.c:15473 + #, gcc-internal-format + msgid "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> and %<::%>" + msgstr "%<<:%> es una forma alternativa para %<[%>. Inserte espacios en blanco entre %<<%> y %<::%>" + +-#: cp/parser.c:15458 ++#: cp/parser.c:15477 + #, fuzzy, gcc-internal-format + #| msgid "(if you use %<-fpermissive%> G++ will accept your code)" + msgid "(if you use %<-fpermissive%> or %<-std=c++11%>, or %<-std=gnu++11%> G++ will accept your code)" + msgstr "(si utiliza %<-fpermissive%>, G++ aceptará su código)" + +-#: cp/parser.c:15565 ++#: cp/parser.c:15584 + #, gcc-internal-format + msgid "parse error in template argument list" + msgstr "error de decodificación en la lista de argumentos de plantilla" + + #. The name does not name a template. +-#: cp/parser.c:15634 cp/parser.c:15761 cp/parser.c:15976 ++#: cp/parser.c:15653 cp/parser.c:15784 cp/parser.c:15999 + #, gcc-internal-format + msgid "expected template-name" + msgstr "se esperaba un nombre de plantilla" + + #. Explain what went wrong. +-#: cp/parser.c:15680 ++#: cp/parser.c:15699 + #, gcc-internal-format + msgid "non-template %qD used as template" + msgstr "se usó %qD que no es plantilla como plantilla" + +-#: cp/parser.c:15682 ++#: cp/parser.c:15701 + #, gcc-internal-format + msgid "use %<%T::template %D%> to indicate that it is a template" + msgstr "utilice %<%T::template %D%> para indicar que es una plantilla" + +-#: cp/parser.c:15828 ++#: cp/parser.c:15851 + #, gcc-internal-format + msgid "expected parameter pack before %<...%>" + msgstr "se esperaba el parámetro pack antes de %<...%>" + +-#: cp/parser.c:15937 cp/parser.c:15955 cp/parser.c:16122 ++#: cp/parser.c:15960 cp/parser.c:15978 cp/parser.c:16145 + #, gcc-internal-format + msgid "expected template-argument" + msgstr "se esperaba un argumento de plantilla" + +-#: cp/parser.c:16097 ++#: cp/parser.c:16120 + #, gcc-internal-format + msgid "invalid non-type template argument" + msgstr "argumento de plantilla que no es tipo no válido" + +-#: cp/parser.c:16224 ++#: cp/parser.c:16247 + #, gcc-internal-format + msgid "explicit instantiation shall not use % specifier" + msgstr "la instanciación explícita no debe usar el especificador %" + +-#: cp/parser.c:16228 ++#: cp/parser.c:16251 + #, gcc-internal-format + msgid "explicit instantiation shall not use % specifier" + msgstr "la instanciación explícita no debe usar el especificador %" + +-#: cp/parser.c:16287 ++#: cp/parser.c:16310 + #, gcc-internal-format + msgid "template specialization with C linkage" + msgstr "especialización de plantilla con enlace C" + +-#: cp/parser.c:16507 ++#: cp/parser.c:16530 + #, gcc-internal-format + msgid "expected type specifier" + msgstr "se esperaba un specificador de tipo" + +-#: cp/parser.c:16691 ++#: cp/parser.c:16714 + #, fuzzy, gcc-internal-format + #| msgid "defaulted and deleted functions only available with -std=c++11 or -std=gnu++11" + msgid "use of % in lambda parameter declaration only available with -std=c++14 or -std=gnu++14" + msgstr "las funciones por defecto y borradas sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:16697 ++#: cp/parser.c:16720 + #, fuzzy, gcc-internal-format + #| msgid "defaulted and deleted functions only available with -std=c++11 or -std=gnu++11" + msgid "use of % in parameter declaration only available with -std=c++14 or -std=gnu++14" + msgstr "las funciones por defecto y borradas sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:16702 ++#: cp/parser.c:16725 + #, fuzzy, gcc-internal-format + #| msgid "ISO C forbids forward parameter declarations" + msgid "ISO C++ forbids use of % in parameter declaration" + msgstr "ISO C prohíbe declaraciones adelantadas de parámetros" + +-#: cp/parser.c:16847 ++#: cp/parser.c:16870 + #, gcc-internal-format + msgid "expected template-id for type" + msgstr "se esperaba un id de plantilla para el tipo" + +-#: cp/parser.c:16916 ++#: cp/parser.c:16939 + #, gcc-internal-format + msgid "expected type-name" + msgstr "se esperaba un nombre de tipo" + +-#: cp/parser.c:17265 ++#: cp/parser.c:17288 + #, gcc-internal-format + msgid "elaborated-type-specifier for a scoped enum must not use the %<%D%> keyword" + msgstr "el especificador de tipo elaborado para un ámbito enumerado no debe usar la palabra clave %<%D%>" + +-#: cp/parser.c:17488 ++#: cp/parser.c:17511 + #, gcc-internal-format + msgid "declaration %qD does not declare anything" + msgstr "la declaración %qD no declara nada" + +-#: cp/parser.c:17575 ++#: cp/parser.c:17598 + #, gcc-internal-format + msgid "attributes ignored on uninstantiated type" + msgstr "se descartan los atributos en el tipo sin instanciar" + +-#: cp/parser.c:17579 ++#: cp/parser.c:17602 + #, gcc-internal-format + msgid "attributes ignored on template instantiation" + msgstr "se descartan los atributos en la instanciación de una plantilla" + +-#: cp/parser.c:17584 ++#: cp/parser.c:17607 + #, gcc-internal-format + msgid "attributes ignored on elaborated-type-specifier that is not a forward declaration" + msgstr "se descartan los atributos en un especificador de tipo elaborado que no es una declaración adelantada" + +-#: cp/parser.c:17718 ++#: cp/parser.c:17741 + #, gcc-internal-format + msgid "%qD is an enumeration template" + msgstr "%qD es una plantilla de enumeración" + +-#: cp/parser.c:17729 ++#: cp/parser.c:17752 + #, fuzzy, gcc-internal-format + #| msgid "%qD does not have integral or enumeration type" + msgid "%qD does not name an enumeration in %qT" + msgstr "%qD no tiene tipo integral o de enumeración" + +-#: cp/parser.c:17744 ++#: cp/parser.c:17767 + #, fuzzy, gcc-internal-format + #| msgid "% definition is not allowed here" + msgid "unnamed scoped enum is not allowed" + msgstr "la definición % no se permite aquí" + +-#: cp/parser.c:17799 ++#: cp/parser.c:17822 + #, gcc-internal-format + msgid "expected %<;%> or %<{%>" + msgstr "se esperaba %<;%> o %<{%>" + +-#: cp/parser.c:17848 ++#: cp/parser.c:17871 + #, gcc-internal-format + msgid "cannot add an enumerator list to a template instantiation" + msgstr "no se puede agregar una lista de enumerador a una instanciación de plantilla" + +-#: cp/parser.c:17862 ++#: cp/parser.c:17885 + #, fuzzy, gcc-internal-format + #| msgid "friend declaration does not name a class or function" + msgid "nested name specifier %qT for enum declaration does not name a class or namespace" + msgstr "la declaración friend no nombra una clase o función" + +-#: cp/parser.c:17874 cp/parser.c:22605 ++#: cp/parser.c:17897 cp/parser.c:22628 + #, gcc-internal-format + msgid "declaration of %qD in namespace %qD which does not enclose %qD" + msgstr "la declaración de %qD en el espacio de nombres %qD el cual no incluye a %qD" + +-#: cp/parser.c:17879 cp/parser.c:22610 ++#: cp/parser.c:17902 cp/parser.c:22633 + #, gcc-internal-format + msgid "declaration of %qD in %qD which does not enclose %qD" + msgstr "la declaración de %qD en %qD la cual no incluye a %qD" + +-#: cp/parser.c:17891 cp/parser.c:22624 ++#: cp/parser.c:17914 cp/parser.c:22647 + #, gcc-internal-format + msgid "extra qualification not allowed" + msgstr "no se permite la calificación extra" + +-#: cp/parser.c:17914 ++#: cp/parser.c:17937 + #, gcc-internal-format + msgid "multiple definition of %q#T" + msgstr "definición múltiple de %q#T" + +-#: cp/parser.c:17927 ++#: cp/parser.c:17950 + #, fuzzy, gcc-internal-format + #| msgid "ISO C++ forbids incrementing an enum" + msgid "ISO C++ forbids empty unnamed enum" + msgstr "ISO C++ prohíbe incrementar un enum" + +-#: cp/parser.c:17947 ++#: cp/parser.c:17970 + #, gcc-internal-format + msgid "opaque-enum-specifier without name" + msgstr "especificador enumerador opaco sin nombre" + +-#: cp/parser.c:17950 ++#: cp/parser.c:17973 + #, gcc-internal-format + msgid "opaque-enum-specifier must use a simple identifier" + msgstr "el especificador enumerador opaco debe usar un identificador simple" + +-#: cp/parser.c:18128 ++#: cp/parser.c:18151 + #, gcc-internal-format + msgid "%qD is not a namespace-name" + msgstr "%qD no es un nombre-de-espacio-de-nombres" + +-#: cp/parser.c:18129 ++#: cp/parser.c:18152 + #, gcc-internal-format + msgid "expected namespace-name" + msgstr "se esperaba un nombre de espacio" + +-#: cp/parser.c:18207 ++#: cp/parser.c:18230 + #, fuzzy, gcc-internal-format + #| msgid "Enumerator cannot have attributes %C" + msgid "a nested namespace definition cannot have attributes" + msgstr "El enumerador no puede tener atributos %C" + +-#: cp/parser.c:18210 ++#: cp/parser.c:18233 + #, fuzzy, gcc-internal-format + #| msgid "inline namespaces only available with -std=c++11 or -std=gnu++11" + msgid "nested namespace definitions only available with -std=c++1z or -std=gnu++1z" + msgstr "los nombres de espacio incluidos en línea sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:18213 ++#: cp/parser.c:18236 + #, fuzzy, gcc-internal-format + #| msgid "varargs function cannot be inline" + msgid "a nested namespace definition cannot be inline" + msgstr "la función varargs no puede ser inline" + +-#: cp/parser.c:18221 ++#: cp/parser.c:18244 + #, fuzzy, gcc-internal-format + #| msgid "expected identifier" + msgid "nested identifier required" + msgstr "se esperaba un identificador" + +-#: cp/parser.c:18249 ++#: cp/parser.c:18272 + #, fuzzy, gcc-internal-format + #| msgid "namespace %qT undeclared" + msgid "namespace %qD entered" + msgstr "espacio de nombres %qT sin declarar" + +-#: cp/parser.c:18302 ++#: cp/parser.c:18325 + #, gcc-internal-format + msgid "% definition is not allowed here" + msgstr "la definición % no se permite aquí" + +-#: cp/parser.c:18453 ++#: cp/parser.c:18476 + #, fuzzy, gcc-internal-format + #| msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" + msgid "pack expansion in using-declaration only available with -std=c++1z or -std=gnu++1z" + msgstr "las expresiones lambda sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:18468 ++#: cp/parser.c:18491 + #, gcc-internal-format + msgid "a template-id may not appear in a using-declaration" + msgstr "un id-de-plantilla no puede aparecer en una declaración-using" + +-#: cp/parser.c:18515 ++#: cp/parser.c:18538 + #, fuzzy, gcc-internal-format + #| msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" + msgid "comma-separated list in using-declaration only available with -std=c++1z or -std=gnu++1z" + msgstr "las expresiones lambda sólo están disponibles con -std=c++11 o -std=gnu++11" + +-#: cp/parser.c:18525 ++#: cp/parser.c:18548 + #, gcc-internal-format + msgid "access declarations are deprecated in favour of using-declarations; suggestion: add the % keyword" + msgstr "las declaraciones access son obsoletas en favor de las declaraciones using: sugerencia: use la palabra clave %" + +-#: cp/parser.c:18590 ++#: cp/parser.c:18613 + #, gcc-internal-format + msgid "types may not be defined in alias template declarations" + msgstr "no se pueden definir tipos en declaraciones de plantilla alias" + +-#: cp/parser.c:18743 ++#: cp/parser.c:18766 + #, fuzzy, gcc-internal-format + #| msgid "compound-statement in constexpr function" + msgid "% in % function" + msgstr "declaración compuesta en una función constexpr" + +-#: cp/parser.c:19130 ++#: cp/parser.c:19153 + #, gcc-internal-format + msgid "a function-definition is not allowed here" + msgstr "una definición de función no se permite aquí" + +-#: cp/parser.c:19141 ++#: cp/parser.c:19164 + #, gcc-internal-format + msgid "an asm-specification is not allowed on a function-definition" + msgstr "no se permite una especificación-asm en una definición-de-función" + +-#: cp/parser.c:19145 ++#: cp/parser.c:19168 + #, gcc-internal-format + msgid "attributes are not allowed on a function-definition" + msgstr "no se permiten atributos en una definición-de-función" + +-#: cp/parser.c:19196 ++#: cp/parser.c:19219 + #, gcc-internal-format + msgid "expected constructor, destructor, or type conversion" + msgstr "se esperaba un constructor, un destructor, o una conversión de tipo" + + #. Anything else is an error. +-#: cp/parser.c:19235 cp/parser.c:21539 ++#: cp/parser.c:19258 cp/parser.c:21562 + #, gcc-internal-format + msgid "expected initializer" + msgstr "se esperaba un inicializador" + +-#: cp/parser.c:19316 ++#: cp/parser.c:19339 + #, gcc-internal-format + msgid "initializer provided for function" + msgstr "se proporcionó un inicializador para la función" + +-#: cp/parser.c:19350 ++#: cp/parser.c:19373 + #, gcc-internal-format + msgid "attributes after parenthesized initializer ignored" + msgstr "se descartan los atributos después del inicializador entre paréntesis" + +-#: cp/parser.c:19355 ++#: cp/parser.c:19378 + #, fuzzy, gcc-internal-format + #| msgid "function %q+D redeclared as inline" + msgid "non-function %qD declared as implicit template" + msgstr "se redeclara la función %q+D como inline" + +-#: cp/parser.c:19804 ++#: cp/parser.c:19827 + #, gcc-internal-format + msgid "array bound is not an integer constant" + msgstr "el límite de la matriz no es una constante entera" + +-#: cp/parser.c:19930 ++#: cp/parser.c:19953 + #, gcc-internal-format + msgid "cannot define member of dependent typedef %qT" + msgstr "no se puede definir el miembro de la definición de tipo dependiente %qT" + +-#: cp/parser.c:19934 ++#: cp/parser.c:19957 + #, gcc-internal-format + msgid "%<%T::%E%> is not a type" + msgstr "%<%T::%E%> no es un tipo" + +-#: cp/parser.c:19962 ++#: cp/parser.c:19985 + #, gcc-internal-format + msgid "invalid use of constructor as a template" + msgstr "uso no válido del constructor como una plantilla" + +-#: cp/parser.c:19964 ++#: cp/parser.c:19987 + #, gcc-internal-format + msgid "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified name" + msgstr "use %<%T::%D%> en lugar de %<%T::%D%> para nombrar el constructor en un nombre calificado" +@@ -44010,7 +44089,7 @@ + #. here because we do not have enough + #. information about its original syntactic + #. form. +-#: cp/parser.c:19981 ++#: cp/parser.c:20004 + #, gcc-internal-format + msgid "invalid declarator" + msgstr "declarador no válido" +@@ -44017,354 +44096,356 @@ + + #. But declarations with qualified-ids can't appear in a + #. function. +-#: cp/parser.c:20051 ++#: cp/parser.c:20074 + #, fuzzy, gcc-internal-format + #| msgid "invalid type in declaration" + msgid "qualified-id in declaration" + msgstr "tipo no válido en la declaración" + +-#: cp/parser.c:20076 ++#: cp/parser.c:20099 + #, gcc-internal-format + msgid "expected declarator" + msgstr "se esperaba un declarador" + +-#: cp/parser.c:20179 ++#: cp/parser.c:20202 + #, gcc-internal-format + msgid "%qD is a namespace" + msgstr "%qD es un espacio de nombres" + +-#: cp/parser.c:20181 ++#: cp/parser.c:20204 + #, gcc-internal-format + msgid "cannot form pointer to member of non-class %q#T" + msgstr "no se puede formar un puntero al miembro de %q#T que no es clase" + +-#: cp/parser.c:20202 ++#: cp/parser.c:20225 + #, gcc-internal-format + msgid "expected ptr-operator" + msgstr "se esperaba un operador puntero" + +-#: cp/parser.c:20261 ++#: cp/parser.c:20284 + #, gcc-internal-format + msgid "duplicate cv-qualifier" + msgstr "calificador-cv duplicado" + +-#: cp/parser.c:20315 ++#: cp/parser.c:20338 + #, fuzzy, gcc-internal-format + #| msgid "multiple `virtual' specifiers" + msgid "multiple ref-qualifiers" + msgstr "especificadores `virtual' múltiples" + +-#: cp/parser.c:20352 ++#: cp/parser.c:20375 + #, gcc-internal-format + msgid "%E requires %<-fgnu-tm%>" + msgstr "" + +-#: cp/parser.c:20408 ++#: cp/parser.c:20431 + #, gcc-internal-format + msgid "duplicate virt-specifier" + msgstr "especificador-virt duplicado" + +-#: cp/parser.c:20679 ++#: cp/parser.c:20702 + #, fuzzy, gcc-internal-format + #| msgid "in template argument for type %qT " + msgid "missing template arguments after %qT" + msgstr "en el argumento de plantilla para el tipo %qT " + +-#: cp/parser.c:20685 cp/typeck2.c:493 cp/typeck2.c:532 cp/typeck2.c:1976 ++#: cp/parser.c:20708 cp/typeck2.c:493 cp/typeck2.c:532 cp/typeck2.c:1976 + #, gcc-internal-format + msgid "invalid use of %qT" + msgstr "uso no válido de %qT" + +-#: cp/parser.c:20706 ++#: cp/parser.c:20729 + #, gcc-internal-format + msgid "types may not be defined in template arguments" + msgstr "no se pueden definir tipos en argumentos de plantilla" + +-#: cp/parser.c:20711 ++#: cp/parser.c:20734 + #, fuzzy, gcc-internal-format + #| msgid "invalid use of '%E' as a non-type template-argument" + msgid "invalid use of % in template argument" + msgstr "uso no válido de '%E' como un argumento de plantilla que no es tipo" + +-#: cp/parser.c:20799 ++#: cp/parser.c:20822 + #, gcc-internal-format + msgid "expected type-specifier" + msgstr "se esperaba un especificador de tipo" + +-#: cp/parser.c:21105 ++#: cp/parser.c:21128 + #, gcc-internal-format + msgid "expected %<,%> or %<...%>" + msgstr "se esperaba %<,%> o %<...%>" + +-#: cp/parser.c:21180 ++#: cp/parser.c:21203 + #, gcc-internal-format + msgid "types may not be defined in parameter types" + msgstr "no se pueden definir tipos en tipos de parámetro" + +-#: cp/parser.c:21332 ++#: cp/parser.c:21355 + #, gcc-internal-format + msgid "default arguments are only permitted for function parameters" + msgstr "los argumentos por defecto sólo se permiten para parámetros de función" + +-#: cp/parser.c:21350 ++#: cp/parser.c:21373 + #, gcc-internal-format + msgid "parameter pack %qD cannot have a default argument" + msgstr "el paquete de parámetros %qD no puede tener un argumento por defecto" + +-#: cp/parser.c:21356 ++#: cp/parser.c:21379 + #, gcc-internal-format + msgid "template parameter pack cannot have a default argument" + msgstr "el paquete de parámetros plantilla no puede tener un argumento por defecto" + +-#: cp/parser.c:21358 ++#: cp/parser.c:21381 + #, gcc-internal-format + msgid "parameter pack cannot have a default argument" + msgstr "el paquete de parámetros no puede tener un argumento por defecto" + +-#: cp/parser.c:21745 ++#: cp/parser.c:21768 + #, gcc-internal-format + msgid "ISO C++ does not allow designated initializers" + msgstr "ISO C++ no permite inicializadores designados" + +-#: cp/parser.c:21759 ++#: cp/parser.c:21782 + #, gcc-internal-format + msgid "ISO C++ does not allow C99 designated initializers" + msgstr "ISO C++ no permite inicializadores designados de C99" + +-#: cp/parser.c:21879 cp/parser.c:22005 ++#: cp/parser.c:21902 cp/parser.c:22028 + #, gcc-internal-format + msgid "expected class-name" + msgstr "se esperaba un nombre de clase" + +-#: cp/parser.c:22206 ++#: cp/parser.c:22229 + #, gcc-internal-format + msgid "expected %<;%> after class definition" + msgstr "se esperaba %<;%> después de la definición de clase" + +-#: cp/parser.c:22209 ++#: cp/parser.c:22232 + #, gcc-internal-format + msgid "expected %<;%> after struct definition" + msgstr "se esperaba %<;%> después de la definición de struct" + +-#: cp/parser.c:22212 ++#: cp/parser.c:22235 + #, gcc-internal-format + msgid "expected %<;%> after union definition" + msgstr "se esperaba %<;%> después de la definición de union" + +-#: cp/parser.c:22553 ++#: cp/parser.c:22576 + #, gcc-internal-format + msgid "expected %<{%> or %<:%>" + msgstr "se esperaba %<{%> o %<:%>" + +-#: cp/parser.c:22564 ++#: cp/parser.c:22587 + #, gcc-internal-format + msgid "cannot specify % for a class" + msgstr "no se puede especificar % para una clase" + +-#: cp/parser.c:22572 ++#: cp/parser.c:22595 + #, gcc-internal-format + msgid "global qualification of class name is invalid" + msgstr "la calificación global del nombre de clase es no válida" + +-#: cp/parser.c:22579 ++#: cp/parser.c:22602 + #, gcc-internal-format + msgid "qualified name does not name a class" + msgstr "el nombre calificado no nombra una clase" + +-#: cp/parser.c:22591 ++#: cp/parser.c:22614 + #, gcc-internal-format + msgid "invalid class name in declaration of %qD" + msgstr "nombre de clase no válido en la declaración de %qD" + +-#: cp/parser.c:22650 ++#: cp/parser.c:22673 + #, gcc-internal-format + msgid "an explicit specialization must be preceded by %