diff --git a/SOURCES/0000-infrastructure.patch b/SOURCES/0000-infrastructure.patch new file mode 100644 index 0000000..2d5fcf3 --- /dev/null +++ b/SOURCES/0000-infrastructure.patch @@ -0,0 +1,125 @@ +commit 366dbfaa2132186e5e8b0688df05662967e628c7 +Author: jakub +Date: Wed Mar 28 11:59:06 2018 +0000 + + * gfortran.h (gfc_dt): Rename default_exp field to dec_ext. + * ioparm.def (IOPARM_dt_default_exp): Rename to ... + (IOPARM_dt_dec_ext): ... this. + * trans-io.c (build_dt): Adjust for default_exp renaming to + dec_ext and IOPARM_dt_default_exp renaming to IOPARM_dt_dec_ext. + * io.c (match_io): Likewise. + + * io/io.h (IOPARM_DT_DEFAULT_EXP): Rename to ... + (IOPARM_DT_DEC_EXT): ... this. + * io/list_read.c (parse_real): Adjust for IOPARM_DT_DEFAULT_EXP + renaming to IOPARM_DT_DEC_EXT. + (read_real): Likewise. + * io/read.c (read_f): Likewise. + + + git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258920 138bc75d-0d04-0410-961f-82ee72b054a4 + +diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h +index 2bfd1e3019d..507570ccbff 100644 +--- a/gcc/fortran/gfortran.h ++++ b/gcc/fortran/gfortran.h +@@ -2437,7 +2437,7 @@ typedef struct + gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg, + *id, *pos, *asynchronous, *blank, *decimal, *delim, *pad, *round, + *sign, *extra_comma, *dt_io_kind, *udtio; +- char default_exp; ++ char dec_ext; + + gfc_symbol *namelist; + /* A format_label of `format_asterisk' indicates the "*" format */ +diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c +index 10b7e827dab..0aa31bb6a4f 100644 +--- a/gcc/fortran/io.c ++++ b/gcc/fortran/io.c +@@ -4291,9 +4291,10 @@ get_io_list: + goto syntax; + } + +- /* See if we want to use defaults for missing exponents in real transfers. */ ++ /* See if we want to use defaults for missing exponents in real transfers ++ and other DEC runtime extensions. */ + if (flag_dec) +- dt->default_exp = 1; ++ dt->dec_ext = 1; + + /* A full IO statement has been matched. Check the constraints. spec_end is + supplied for cases where no locus is supplied. */ +diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def +index b9dc58f26a7..9ab3b58946e 100644 +--- a/gcc/fortran/ioparm.def ++++ b/gcc/fortran/ioparm.def +@@ -118,5 +118,5 @@ IOPARM (dt, round, 1 << 23, char2) + IOPARM (dt, sign, 1 << 24, char1) + #define IOPARM_dt_f2003 (1 << 25) + #define IOPARM_dt_dtio (1 << 26) +-#define IOPARM_dt_default_exp (1 << 27) ++#define IOPARM_dt_dec_ext (1 << 27) + IOPARM (dt, u, 0, pad) +diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c +index 9058712c695..2626c4651e2 100644 +--- a/gcc/fortran/trans-io.c ++++ b/gcc/fortran/trans-io.c +@@ -1958,8 +1958,8 @@ build_dt (tree function, gfc_code * code) + if (dt->udtio) + mask |= IOPARM_dt_dtio; + +- if (dt->default_exp) +- mask |= IOPARM_dt_default_exp; ++ if (dt->dec_ext) ++ mask |= IOPARM_dt_dec_ext; + + if (dt->namelist) + { +diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h +index 3c2a2cae38a..ccbaf47ff90 100644 +--- a/libgfortran/io/io.h ++++ b/libgfortran/io/io.h +@@ -442,7 +442,7 @@ st_parameter_inquire; + #define IOPARM_DT_HAS_SIGN (1 << 24) + #define IOPARM_DT_HAS_F2003 (1 << 25) + #define IOPARM_DT_HAS_UDTIO (1 << 26) +-#define IOPARM_DT_DEFAULT_EXP (1 << 27) ++#define IOPARM_DT_DEC_EXT (1 << 27) + /* Internal use bit. */ + #define IOPARM_DT_IONML_SET (1u << 31) + +diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c +index d052d1fa828..300c3bd23f3 100644 +--- a/libgfortran/io/list_read.c ++++ b/libgfortran/io/list_read.c +@@ -1380,7 +1380,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length) + if (!isdigit (c)) + { + /* Extension: allow default exponent of 0 when omitted. */ +- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP) ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) + { + push_char (dtp, '0'); + goto done; +@@ -1831,7 +1831,7 @@ read_real (st_parameter_dt *dtp, void *dest, int length) + if (!isdigit (c)) + { + /* Extension: allow default exponent of 0 when omitted. */ +- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP) ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) + { + push_char (dtp, '0'); + goto done; +diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c +index 87adfb8a41d..976020af448 100644 +--- a/libgfortran/io/read.c ++++ b/libgfortran/io/read.c +@@ -1093,7 +1093,7 @@ exponent: + if (w == 0) + { + /* Extension: allow default exponent of 0 when omitted. */ +- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP) ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) + goto done; + else + goto bad_float; diff --git a/SOURCES/0022-Default-values-for-certain-field-descriptors-in-form.patch b/SOURCES/0022-Default-values-for-certain-field-descriptors-in-form.patch new file mode 100644 index 0000000..ebad048 --- /dev/null +++ b/SOURCES/0022-Default-values-for-certain-field-descriptors-in-form.patch @@ -0,0 +1,516 @@ +diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c +index d93dcfa..f47565c 100644 +--- a/gcc/fortran/io.c ++++ b/gcc/fortran/io.c +@@ -909,6 +909,13 @@ data_desc: + + if (u != FMT_POSINT) + { ++ if (flag_dec) ++ { ++ /* Assume a default width based on the variable size. */ ++ saved_token = u; ++ break; ++ } ++ + format_locus.nextc += format_string_pos; + gfc_error ("Positive width required in format " + "specifier %s at %L", token_to_string (t), +@@ -1030,6 +1037,13 @@ data_desc: + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { ++ if (flag_dec) ++ { ++ /* Assume the default width is expected here and continue lexing. */ ++ value = 0; /* It doesn't matter what we set the value to here. */ ++ saved_token = t; ++ break; ++ } + error = nonneg_required; + goto syntax; + } +@@ -1099,8 +1113,17 @@ data_desc: + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { +- error = nonneg_required; +- goto syntax; ++ if (flag_dec) ++ { ++ /* Assume the default width is expected here and continue lexing. */ ++ value = 0; /* It doesn't matter what we set the value to here. */ ++ saved_token = t; ++ } ++ else ++ { ++ error = nonneg_required; ++ goto syntax; ++ } + } + else if (is_input && t == FMT_ZERO) + { +diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90 +new file mode 100644 +index 0000000..b087b8f +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90 +@@ -0,0 +1,43 @@ ++! { dg-do run } ++! { dg-options -fdec } ++! ++! Test case for the default field widths enabled by the -fdec-format-defaults flag. ++! ++! This feature is not part of any Fortran standard, but it is supported by the ++! Oracle Fortran compiler and others. ++! ++! libgfortran uses printf() internally to implement FORMAT. If you print float ++! values to a higher precision than the type can actually store, the results ++! are implementation dependent: some platforms print zeros, others print random ++! numbers. Don't depend on this behaviour in tests because they will not be ++! portable. ++ ++ character(50) :: buffer ++ ++ real*4 :: real_4 ++ real*8 :: real_8 ++ real*16 :: real_16 ++ integer :: len ++ ++ real_4 = 4.18 ++ write(buffer, '(A, F, A)') ':',real_4,':' ++ print *,buffer ++ if (buffer.ne.": 4.1799998:") call abort ++ ++ real_4 = 0.00000018 ++ write(buffer, '(A, F, A)') ':',real_4,':' ++ print *,buffer ++ if (buffer.ne.": 0.0000002:") call abort ++ ++ real_8 = 4.18 ++ write(buffer, '(A, F, A)') ':',real_8,':' ++ print *,buffer ++ len = len_trim(buffer) ++ if (len /= 27) call abort ++ ++ real_16 = 4.18 ++ write(buffer, '(A, F, A)') ':',real_16,':' ++ print *,buffer ++ len = len_trim(buffer) ++ if (len /= 44) call abort ++end +diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90 +new file mode 100644 +index 0000000..3d3a476 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90 +@@ -0,0 +1,48 @@ ++! { dg-do run } ++! { dg-options -fdec } ++! ++! Test case for the default field widths enabled by the -fdec-format-defaults flag. ++! ++! This feature is not part of any Fortran standard, but it is supported by the ++! Oracle Fortran compiler and others. ++! ++! libgfortran uses printf() internally to implement FORMAT. If you print float ++! values to a higher precision than the type can actually store, the results ++! are implementation dependent: some platforms print zeros, others print random ++! numbers. Don't depend on this behaviour in tests because they will not be ++! portable. ++ ++ character(50) :: buffer ++ ++ real*4 :: real_4 ++ real*8 :: real_8 ++ real*16 :: real_16 ++ integer :: len ++ ++ real_4 = 4.18 ++ write(buffer, '(A, G, A)') ':',real_4,':' ++ print *,buffer ++ if (buffer.ne.": 4.180000 :") call abort ++ ++ real_4 = 0.00000018 ++ write(buffer, '(A, G, A)') ':',real_4,':' ++ print *,buffer ++ if (buffer.ne.": 0.1800000E-06:") call abort ++ ++ real_4 = 18000000.4 ++ write(buffer, '(A, G, A)') ':',real_4,':' ++ print *,buffer ++ if (buffer.ne.": 0.1800000E+08:") call abort ++ ++ real_8 = 4.18 ++ write(buffer, '(A, G, A)') ':',real_8,':' ++ print *,buffer ++ len = len_trim(buffer) ++ if (len /= 27) call abort ++ ++ real_16 = 4.18 ++ write(buffer, '(A, G, A)') ':',real_16,':' ++ print *,buffer ++ len = len_trim(buffer) ++ if (len /= 44) call abort ++end +diff --git a/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90 +new file mode 100644 +index 0000000..ac4e165 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90 +@@ -0,0 +1,38 @@ ++! { dg-do run } ++! { dg-options -fdec } ++! ++! Test case for the default field widths enabled by the -fdec-format-defaults flag. ++! ++! This feature is not part of any Fortran standard, but it is supported by the ++! Oracle Fortran compiler and others. ++ ++ character(50) :: buffer ++ character(1) :: colon ++ ++ integer*2 :: integer_2 ++ integer*4 :: integer_4 ++ integer*8 :: integer_8 ++ ++ write(buffer, '(A, I, A)') ':',12340,':' ++ print *,buffer ++ if (buffer.ne.": 12340:") call abort ++ ++ read(buffer, '(A1, I, A1)') colon, integer_4, colon ++ if (integer_4.ne.12340) call abort ++ ++ integer_2 = -99 ++ write(buffer, '(A, I, A)') ':',integer_2,':' ++ print *,buffer ++ if (buffer.ne.": -99:") call abort ++ ++ integer_8 = -11112222 ++ write(buffer, '(A, I, A)') ':',integer_8,':' ++ print *,buffer ++ if (buffer.ne.": -11112222:") call abort ++ ++! If the width is 7 and there are 7 leading zeroes, the result should be zero. ++ integer_2 = 789 ++ buffer = '0000000789' ++ read(buffer, '(I)') integer_2 ++ if (integer_2.ne.0) call abort ++end +diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c +index c2abdd7..692b1ff 100644 +--- a/libgfortran/io/format.c ++++ b/libgfortran/io/format.c +@@ -956,12 +956,33 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd) + *seen_dd = true; + if (u != FMT_POSINT && u != FMT_ZERO) + { ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) ++ { ++ tail->u.real.w = DEFAULT_WIDTH; ++ tail->u.real.d = 0; ++ tail->u.real.e = -1; ++ fmt->saved_token = u; ++ break; ++ } + fmt->error = nonneg_required; + goto finished; + } + } ++ else if (u == FMT_ZERO) ++ { ++ fmt->error = posint_required; ++ goto finished; ++ } + else if (u != FMT_POSINT) + { ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) ++ { ++ tail->u.real.w = DEFAULT_WIDTH; ++ tail->u.real.d = 0; ++ tail->u.real.e = -1; ++ fmt->saved_token = u; ++ break; ++ } + fmt->error = posint_required; + goto finished; + } +@@ -1099,6 +1120,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd) + { + if (t != FMT_POSINT) + { ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) ++ { ++ tail->u.integer.w = DEFAULT_WIDTH; ++ tail->u.integer.m = -1; ++ fmt->saved_token = t; ++ break; ++ } + fmt->error = posint_required; + goto finished; + } +@@ -1107,6 +1135,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd) + { + if (t != FMT_ZERO && t != FMT_POSINT) + { ++ if (dtp->common.flags & IOPARM_DT_DEC_EXT) ++ { ++ tail->u.integer.w = DEFAULT_WIDTH; ++ tail->u.integer.m = -1; ++ fmt->saved_token = t; ++ break; ++ } + fmt->error = nonneg_required; + goto finished; + } +diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h +index 5583183..d1d08e8 100644 +--- a/libgfortran/io/io.h ++++ b/libgfortran/io/io.h +@@ -981,5 +981,55 @@ memset4 (gfc_char4_t *p, gfc_char4_t c, int k) + *p++ = c; + } + ++/* Used in width fields to indicate that the default should be used */ ++#define DEFAULT_WIDTH -1 ++ ++/* Defaults for certain format field descriptors. These are decided based on ++ * the type of the value being formatted. ++ * ++ * The behaviour here is modelled on the Oracle Fortran compiler. At the time ++ * of writing, the details were available at this URL: ++ * ++ * https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc3/index.html#z4000743746d ++ */ ++ ++static inline int ++default_width_for_integer (int kind) ++{ ++ switch (kind) ++ { ++ case 1: ++ case 2: return 7; ++ case 4: return 12; ++ case 8: return 23; ++ case 16: return 44; ++ default: return 0; ++ } ++} ++ ++static inline int ++default_width_for_float (int kind) ++{ ++ switch (kind) ++ { ++ case 4: return 15; ++ case 8: return 25; ++ case 16: return 42; ++ default: return 0; ++ } ++} ++ ++static inline int ++default_precision_for_float (int kind) ++{ ++ switch (kind) ++ { ++ case 4: return 7; ++ case 8: return 16; ++ case 16: return 33; ++ default: return 0; ++ } ++} ++ + #endif + +diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c +index 2c9de48..e911e35 100644 +--- a/libgfortran/io/read.c ++++ b/libgfortran/io/read.c +@@ -629,6 +629,12 @@ read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length) + + w = f->u.w; + ++ /* This is a legacy extension, and the frontend will only allow such cases ++ * through when -fdec-format-defaults is passed. ++ */ ++ if (w == DEFAULT_WIDTH) ++ w = default_width_for_integer (length); ++ + p = read_block_form (dtp, &w); + + if (p == NULL) +diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c +index a7307a8..c8e52fb 100644 +--- a/libgfortran/io/write.c ++++ b/libgfortran/io/write.c +@@ -684,9 +684,8 @@ write_l (st_parameter_dt *dtp, const fnode *f, char *source, int len) + p[wlen - 1] = (n) ? 'T' : 'F'; + } + +- + static void +-write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n) ++write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n, int len) + { + int w, m, digits, nzero, nblank; + char *p; +@@ -719,6 +718,9 @@ write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n) + /* Select a width if none was specified. The idea here is to always + print something. */ + ++ if (w == DEFAULT_WIDTH) ++ w = default_width_for_integer (len); ++ + if (w == 0) + w = ((digits < m) ? m : digits); + +@@ -845,6 +847,8 @@ write_decimal (st_parameter_dt *dtp, const fnode *f, const char *source, + + /* Select a width if none was specified. The idea here is to always + print something. */ ++ if (w == DEFAULT_WIDTH) ++ w = default_width_for_integer (len); + + if (w == 0) + w = ((digits < m) ? m : digits) + nsign; +@@ -1187,13 +1191,13 @@ write_b (st_parameter_dt *dtp, const fnode *f, const char *source, int len) + if (len > (int) sizeof (GFC_UINTEGER_LARGEST)) + { + p = btoa_big (source, itoa_buf, len, &n); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + else + { + n = extract_uint (source, len); + p = btoa (n, itoa_buf, sizeof (itoa_buf)); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + } + +@@ -1208,13 +1212,13 @@ write_o (st_parameter_dt *dtp, const fnode *f, const char *source, int len) + if (len > (int) sizeof (GFC_UINTEGER_LARGEST)) + { + p = otoa_big (source, itoa_buf, len, &n); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + else + { + n = extract_uint (source, len); + p = otoa (n, itoa_buf, sizeof (itoa_buf)); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + } + +@@ -1228,13 +1232,13 @@ write_z (st_parameter_dt *dtp, const fnode *f, const char *source, int len) + if (len > (int) sizeof (GFC_UINTEGER_LARGEST)) + { + p = ztoa_big (source, itoa_buf, len, &n); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + else + { + n = extract_uint (source, len); + p = gfc_xtoa (n, itoa_buf, sizeof (itoa_buf)); +- write_boz (dtp, f, p, n); ++ write_boz (dtp, f, p, n, len); + } + } + +@@ -1504,7 +1508,7 @@ size_from_kind (st_parameter_dt *dtp, const fnode *f, int kind) + { + int size; + +- if (f->format == FMT_F && f->u.real.w == 0) ++ if ((f->format == FMT_F && f->u.real.w == 0) || f->u.real.w == DEFAULT_WIDTH) + { + switch (kind) + { +diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def +index 7f0aa1d..73dc910 100644 +--- a/libgfortran/io/write_float.def ++++ b/libgfortran/io/write_float.def +@@ -113,7 +113,8 @@ determine_precision (st_parameter_dt * dtp, const fnode * f, int len) + static void + build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer, + size_t size, int nprinted, int precision, int sign_bit, +- bool zero_flag, int npad, char *result, size_t *len) ++ bool zero_flag, int npad, int default_width, char *result, ++ size_t *len) + { + char *put; + char *digits; +@@ -132,8 +133,17 @@ build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer, + sign_t sign; + + ft = f->format; +- w = f->u.real.w; +- d = f->u.real.d; ++ if (f->u.real.w == DEFAULT_WIDTH) ++ /* This codepath can only be reached with -fdec-format-defaults. */ ++ { ++ w = default_width; ++ d = precision; ++ } ++ else ++ { ++ w = f->u.real.w; ++ d = f->u.real.d; ++ } + p = dtp->u.p.scale_factor; + + rchar = '5'; +@@ -958,6 +968,11 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f, + int save_scale_factor;\ + volatile GFC_REAL_ ## x temp;\ + save_scale_factor = dtp->u.p.scale_factor;\ ++ if (w == DEFAULT_WIDTH)\ ++ {\ ++ w = default_width;\ ++ d = precision;\ ++ }\ + switch (dtp->u.p.current_unit->round_status)\ + {\ + case ROUND_ZERO:\ +@@ -1033,7 +1048,8 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f, + nprinted = FDTOA(y,precision,m);\ + }\ + build_float_string (dtp, &newf, buffer, size, nprinted, precision,\ +- sign_bit, zero_flag, npad, result, res_len);\ ++ sign_bit, zero_flag, npad, default_width,\ ++ result, res_len);\ + dtp->u.p.scale_factor = save_scale_factor;\ + }\ + else\ +@@ -1043,7 +1059,8 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f, + else\ + nprinted = DTOA(y,precision,m);\ + build_float_string (dtp, f, buffer, size, nprinted, precision,\ +- sign_bit, zero_flag, npad, result, res_len);\ ++ sign_bit, zero_flag, npad, default_width,\ ++ result, res_len);\ + }\ + }\ + +@@ -1057,6 +1074,16 @@ get_float_string (st_parameter_dt *dtp, const fnode *f, const char *source, + { + int sign_bit, nprinted; + bool zero_flag; ++ int default_width = 0; ++ ++ if (f->u.real.w == DEFAULT_WIDTH) ++ /* This codepath can only be reached with -fdec-format-defaults. The default ++ * values are based on those used in the Oracle Fortran compiler. ++ */ ++ { ++ default_width = default_width_for_float (kind); ++ precision = default_precision_for_float (kind); ++ } + + switch (kind) + { diff --git a/SPECS/gcc-libraries.spec b/SPECS/gcc-libraries.spec index e42e6cf..18bb4c8 100644 --- a/SPECS/gcc-libraries.spec +++ b/SPECS/gcc-libraries.spec @@ -60,7 +60,7 @@ Provides: libatomic libitm libcilkrts libgfortran4 Obsoletes: libitm Version: %{gcc_version} -Release: %{gcc_release}.1.1%{?dist} +Release: %{gcc_release}.2.1%{?dist} # libgcc, libgfortran, libmudflap, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD @@ -193,6 +193,11 @@ Patch1002: gcc7-alt-compat-test.patch Patch1005: gcc7-rh1118870.patch Patch1100: gcc7-htm-in-asm.patch +# Support for more DEC extensions in libgfortran runtime +# BZ1554429 +Patch2000: 0000-infrastructure.patch +Patch2001: 0022-Default-values-for-certain-field-descriptors-in-form.patch + %if 0%{?rhel} >= 7 %global nonsharedver 48 %else @@ -299,6 +304,9 @@ sed -i -e 's/ -Wl,-z,nodlopen//g' gcc/ada/gcc-interface/Makefile.in %patch1005 -p0 -b .rh1118870~ %patch1100 -p0 -b .gcc6-htm-in-asm~ +%patch2000 -p1 -b .dec-extensions~ +%patch2001 -p1 -b .dec-extensions-2~ + %if 0%{?rhel} == 6 # Default to -gdwarf-3 rather than -gdwarf-4 sed -i '/UInteger Var(dwarf_version)/s/Init(4)/Init(3)/' gcc/common.opt @@ -679,6 +687,9 @@ fi %doc gcc/COPYING3 COPYING.RUNTIME rpm.doc/gfortran/* %changelog +* Thu Apr 5 2018 Marek Polacek 7.2.1-1.2.1 +- Add support for DEC formatting extensions (#1564043) + * Thu Oct 19 2017 Marek Polacek 7.2.1-1.1.1 - update from gcc-7.2.1-1 (#1477224)