1 #!/usr/bin/env python3 2 3 # Copyright (C) 2020 Free Software Foundation, Inc. 4 # 5 # This file is part of GCC. 6 # 7 # GCC is free software; you can redistribute it and/or modify 8 # it under the terms of the GNU General Public License as published by 9 # the Free Software Foundation; either version 3, or (at your option) 10 # any later version. 11 # 12 # GCC is distributed in the hope that it will be useful, 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # GNU General Public License for more details. 16 # 17 # You should have received a copy of the GNU General Public License 18 # along with GCC; see the file COPYING. If not, write to 19 # the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20 # Boston, MA 02110-1301, USA. 21 22 # This script parses a .diff file generated with 'diff -up' or 'diff -cp' 23 # and adds a skeleton ChangeLog file to the file. It does not try to be 24 # too smart when parsing function names, but it produces a reasonable 25 # approximation. 26 # 27 # Author: Martin Liska <mliska (at] suse.cz> 28 29 import unittest 30 31 from mklog import generate_changelog 32 33 import unidiff 34 35 unidiff_supports_renaming = hasattr(unidiff.PatchedFile(), 'is_rename') 36 37 38 PATCH1 = '''\ 39 diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h 40 index 567c23380fe..e6209ede9d6 100644 41 --- a/gcc/config/riscv/riscv.h 42 +++ b/gcc/config/riscv/riscv.h 43 @@ -920,6 +920,7 @@ extern unsigned riscv_stack_boundary; 44 #define SHIFT_RS1 15 45 #define SHIFT_IMM 20 46 #define IMM_BITS 12 47 +#define C_S_BITS 5 48 #define C_SxSP_BITS 6 49 50 #define IMM_REACH (1LL << IMM_BITS) 51 @@ -929,6 +930,10 @@ extern unsigned riscv_stack_boundary; 52 #define SWSP_REACH (4LL << C_SxSP_BITS) 53 #define SDSP_REACH (8LL << C_SxSP_BITS) 54 55 +/* This is the maximum value that can be represented in a compressed load/store 56 + offset (an unsigned 5-bit value scaled by 4). */ 57 +#define CSW_MAX_OFFSET ((4LL << C_S_BITS) - 1) & ~3 58 + 59 /* Called from RISCV_REORG, this is defined in riscv-sr.c. */ 60 61 extern void riscv_remove_unneeded_save_restore_calls (void); 62 63 ''' 64 65 EXPECTED1 = '''\ 66 gcc/ChangeLog: 67 68 * config/riscv/riscv.h (C_S_BITS): 69 (CSW_MAX_OFFSET): 70 71 ''' 72 73 PATCH2 = '''\ 74 diff --git a/gcc/targhooks.h b/gcc/targhooks.h 75 index 9704d23f1db..b572a36e8cf 100644 76 --- a/gcc/targhooks.h 77 +++ b/gcc/targhooks.h 78 @@ -120,7 +120,7 @@ extern bool default_empty_mask_is_expensive (unsigned); 79 extern void *default_init_cost (class loop *); 80 extern unsigned default_add_stmt_cost (class vec_info *, void *, int, 81 enum vect_cost_for_stmt, 82 - class _stmt_vec_info *, int, 83 + class _stmt_vec_info *, tree, int, 84 enum vect_cost_model_location); 85 extern void default_finish_cost (void *, unsigned *, unsigned *, unsigned *); 86 extern void default_destroy_cost_data (void *); 87 @@ -186,6 +186,7 @@ extern tree default_emutls_var_init (tree, tree, tree); 88 extern unsigned int default_hard_regno_nregs (unsigned int, machine_mode); 89 extern bool default_hard_regno_scratch_ok (unsigned int); 90 extern bool default_mode_dependent_address_p (const_rtx, addr_space_t); 91 +extern bool default_new_address_profitable_p (rtx, rtx_insn *, rtx); 92 extern bool default_target_option_valid_attribute_p (tree, tree, tree, int); 93 extern bool default_target_option_pragma_parse (tree, tree); 94 extern bool default_target_can_inline_p (tree, tree); 95 96 ''' 97 98 EXPECTED2 = '''\ 99 gcc/ChangeLog: 100 101 * targhooks.h (default_add_stmt_cost): 102 (default_new_address_profitable_p): 103 104 ''' 105 106 PATCH3 = '''\ 107 diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h 108 index 2b1e33f94ae..7f47402f9b9 100644 109 --- a/libcpp/include/cpplib.h 110 +++ b/libcpp/include/cpplib.h 111 @@ -173,7 +173,7 @@ enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11, CLK_GNUC17, CLK_GNUC2X, 112 CLK_STDC2X, 113 CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11, 114 CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17, 115 - CLK_GNUCXX2A, CLK_CXX2A, CLK_ASM}; 116 + CLK_GNUCXX20, CLK_CXX20, CLK_ASM}; 117 118 /* Payload of a NUMBER, STRING, CHAR or COMMENT token. */ 119 struct GTY(()) cpp_string { 120 @@ -484,7 +484,7 @@ struct cpp_options 121 /* Nonzero for C2X decimal floating-point constants. */ 122 unsigned char dfp_constants; 123 124 - /* Nonzero for C++2a __VA_OPT__ feature. */ 125 + /* Nonzero for C++20 __VA_OPT__ feature. */ 126 unsigned char va_opt; 127 128 /* Nonzero for the '::' token. */ 129 130 ''' 131 132 EXPECTED3 = '''\ 133 libcpp/ChangeLog: 134 135 * include/cpplib.h (enum c_lang): 136 (struct cpp_options): 137 138 ''' 139 140 EXPECTED3B = '''\ 141 libcpp/ChangeLog: 142 143 * include/cpplib.h: 144 145 ''' 146 147 PATCH4 = '''\ 148 diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c 149 index aab79492357..f0df1002488 100644 150 --- a/gcc/ipa-icf.c 151 +++ b/gcc/ipa-icf.c 152 @@ -1,5 +1,7 @@ 153 154 155 + 156 + 157 /* Interprocedural Identical Code Folding pass 158 Copyright (C) 2014-2020 Free Software Foundation, Inc. 159 160 diff --git a/gcc/testsuite/gcc.dg/pr32374.c b/gcc/testsuite/gcc.dg/pr32374.c 161 deleted file mode 100644 162 index de15d559f5b..00000000000 163 --- a/gcc/testsuite/gcc.dg/pr32374.c 164 +++ /dev/null 165 @@ -1,20 +0,0 @@ 166 -/* { dg-do compile } */ 167 -/* { dg-options "-O2" } */ 168 - 169 -extern int *stderr; 170 - 171 -void f (int *, const char *, ...); 172 - 173 -void g (const char *conf_name) 174 -{ 175 - typedef struct 176 - { 177 - const char *label; 178 - const int value; 179 - } Section; 180 - 181 - const Section sections[2] = { {"", 0}, {"", 1} }; 182 - 183 - f (stderr, "", "", conf_name, 0, sections[0]); 184 - f (stderr, "", "", conf_name, 0, sections[0]); 185 -} 186 diff --git a/gcc/testsuite/gcc.dg/pr40209.c b/gcc/testsuite/gcc.dg/pr40209.c 187 index 4e77df5c2e6..c23d69d1f1b 100644 188 --- a/gcc/testsuite/gcc.dg/pr40209.c 189 +++ b/gcc/testsuite/gcc.dg/pr40209.c 190 @@ -1,6 +1,8 @@ 191 /* { dg-do compile } */ 192 /* { dg-options "-O2 -fprofile-use -fopt-info -Wno-missing-profile" } */ 193 194 + 195 + 196 void process(const char *s); 197 198 struct BaseHolder { 199 diff --git a/gcc/testsuite/gcc.dg/pr50209.c b/gcc/testsuite/gcc.dg/pr50209.c 200 new file mode 100644 201 index 00000000000..b28b04f6431 202 --- /dev/null 203 +++ b/gcc/testsuite/gcc.dg/pr50209.c 204 @@ -0,0 +1,3 @@ 205 + 206 + 207 + 208 diff --git a/gcc/testsuite/gcc.dg/pr63567-1.c b/gcc/testsuite/gcc.dg/pr63567-1.c 209 index 97da171563e..00c5ecc11fa 100644 210 --- a/gcc/testsuite/gcc.dg/pr63567-1.c 211 +++ b/gcc/testsuite/gcc.dg/pr63567-1.c 212 @@ -1,3 +1,4 @@ 213 + 214 /* PR c/63567 */ 215 /* { dg-do compile } */ 216 /* { dg-options "" } */ 217 diff --git a/gcc/varasm.c b/gcc/varasm.c 218 index f062e48071f..fd3c7ca8cf3 100644 219 --- a/gcc/varasm.c 220 +++ b/gcc/varasm.c 221 @@ -1,3 +1,5 @@ 222 + 223 + 224 /* Output variables, constants and external declarations, for GNU compiler. 225 Copyright (C) 1987-2020 Free Software Foundation, Inc. 226 227 diff --git a/libssp/gets-chk.c b/libssp/gets-chk.c 228 index 4ad78c1f77b..6687b368038 100644 229 --- a/libssp/gets-chk.c 230 +++ b/libssp/gets-chk.c 231 @@ -32,6 +32,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 232 <http://www.gnu.org/licenses/>. */ 233 234 235 + 236 + 237 #include "config.h" 238 #include <ssp/ssp.h> 239 #include <stdarg.h> 240 ''' 241 242 EXPECTED4 = '''\ 243 244 PR 50209 245 246 gcc/ChangeLog: 247 248 * ipa-icf.c: 249 * varasm.c: 250 251 libssp/ChangeLog: 252 253 * gets-chk.c: 254 255 gcc/testsuite/ChangeLog: 256 257 * gcc.dg/pr40209.c: 258 * gcc.dg/pr63567-1.c: 259 * gcc.dg/pr32374.c: Removed. 260 * gcc.dg/pr50209.c: New test. 261 262 ''' 263 264 PATCH5 = '''\ 265 diff --git a/gcc/testsuite/gcc.target/i386/pr95046-6.c b/gcc/testsuite/gcc.target/i386/pr95046-6.c 266 new file mode 100644 267 index 00000000000..dcc8999c446 268 --- /dev/null 269 +++ b/gcc/testsuite/gcc.target/i386/pr95046-6.c 270 @@ -0,0 +1,44 @@ 271 +/* PR target/95046 */ 272 +/* { dg-do compile { target { ! ia32 } } } */ 273 +/* { dg-options "-O3 -mavx512vl" } */ 274 + 275 + 276 +double r[2]; 277 +int s[2]; 278 +unsigned int u[2]; 279 + 280 +void 281 +test_float (void) 282 +{ 283 + for (int i = 0; i < 2; i++) 284 + r[i] = s[i]; 285 +} 286 + 287 +/* { dg-final { scan-assembler "\tvcvtdq2pd" } } */ 288 + 289 +void 290 +test_ufloat (void) 291 +{ 292 + for (int i = 0; i < 2; i++) 293 + r[i] = u[i]; 294 +} 295 + 296 +/* { dg-final { scan-assembler "\tvcvtudq2pd" } } */ 297 + 298 +void 299 +test_fix (void) 300 +{ 301 + for (int i = 0; i < 2; i++) 302 + s[i] = r[i]; 303 +} 304 + 305 +/* { dg-final { scan-assembler "\tvcvttpd2dqx" } } */ 306 + 307 +void 308 +test_ufix (void) 309 +{ 310 + for (int i = 0; i < 2; i++) 311 + u[i] = r[i]; 312 +} 313 + 314 +/* { dg-final { scan-assembler "\tvcvttpd2udqx" } } */ 315 -- 316 2.26.2 317 318 ''' 319 320 EXPECTED5 = '''\ 321 PR target/95046 - Vectorize V2SFmode operations 322 323 PR target/95046 324 325 gcc/testsuite/ChangeLog: 326 327 * gcc.target/i386/pr95046-6.c: New test. 328 329 ''' 330 331 PATCH6 = '''\ 332 diff --git a/gcc/cgraph.h b/gcc/cgraph.h 333 index 5ddeb65269b..cfae6e91da9 100644 334 --- a/gcc/cgraph.h 335 +++ b/gcc/cgraph.h 336 @@ -937,7 +937,8 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node 337 split_part (false), indirect_call_target (false), local (false), 338 versionable (false), can_change_signature (false), 339 redefined_extern_inline (false), tm_may_enter_irr (false), 340 - ipcp_clone (false), m_uid (uid), m_summary_id (-1) 341 + ipcp_clone (false), declare_variant_alt (false), 342 + calls_declare_variant_alt (false), m_uid (uid), m_summary_id (-1) 343 {} 344 345 /* Remove the node from cgraph and all inline clones inlined into it. 346 347 ''' 348 349 EXPECTED6 = '''\ 350 gcc/ChangeLog: 351 352 * cgraph.h (struct cgraph_node): 353 354 ''' 355 356 PATCH7 = '''\ 357 diff --git a/gcc/testsuite/g++.dg/DRs/dr2237.C b/gcc/testsuite/g++.dg/DRs/dr2237.C 358 new file mode 100644 359 index 00000000000..f3d6d11e61e 360 --- /dev/null 361 +++ b/gcc/testsuite/g++.dg/DRs/dr2237.C 362 @@ -0,0 +1,18 @@ 363 +// DR 2237 - Can a template-id name a constructor? 364 + 365 +template<class T> 366 +struct X { 367 + X<T>(); // { dg-error "expected" "" { target c++20 } } 368 + X(int); // OK, injected-class-name used 369 + ~X<T>(); // { dg-error "template-id not allowed for destructor" "" { target c++20 } } 370 +}; 371 + 372 +// ill-formed since DR1435 373 +template<typename T> X<T>::X<T>() {} // { dg-error "names the constructor|as no template constructors" } 374 +template<typename T> X<T>::~X<T>() {} // { dg-error "template-id not allowed for destructor" "" { target c++20 } } 375 + 376 +struct Q { 377 + // ill-formed since DR1435 378 + template<typename T> friend X<T>::X<T>(); // { dg-error "names the constructor|as no template constructors" } 379 + template<typename T> friend X<T>::~X<T>(); // { dg-error "template-id not allowed for destructor" "" { target c++20 } } 380 +}; 381 ''' 382 383 EXPECTED7 = '''\ 384 385 DR 2237 386 387 gcc/testsuite/ChangeLog: 388 389 * g++.dg/DRs/dr2237.C: New test. 390 391 ''' 392 393 PATCH8 = '''\ 394 diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf2.c 395 similarity index 100% 396 rename from gcc/ipa-icf.c 397 rename to gcc/ipa-icf2.c 398 ''' 399 400 EXPECTED8 = '''\ 401 gcc/ChangeLog: 402 403 * ipa-icf.c: Moved to... 404 * ipa-icf2.c: ...here. 405 406 ''' 407 408 PATCH9 = '''\ 409 diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md 410 index 2a260c1cfbd..7f03fc491c3 100644 411 --- a/gcc/config/i386/sse.md 412 +++ b/gcc/config/i386/sse.md 413 @@ -17611,6 +17611,23 @@ (define_insn "avx2_<code>v16qiv16hi2<mask_name>" 414 (set_attr "prefix" "maybe_evex") 415 (set_attr "mode" "OI")]) 416 417 +(define_insn_and_split "*avx2_zero_extendv16qiv16hi2_1" 418 + [(set (match_operand:V32QI 0 "register_operand" "=v") 419 + (vec_select:V32QI 420 + (vec_concat:V64QI 421 + (match_operand:V32QI 1 "nonimmediate_operand" "vm") 422 + (match_operand:V32QI 2 "const0_operand" "C")) 423 + (match_parallel 3 "pmovzx_parallel" 424 + [(match_operand 4 "const_int_operand" "n")])))] 425 + "TARGET_AVX2" 426 + "#" 427 + "&& reload_completed" 428 + [(set (match_dup 0) (zero_extend:V16HI (match_dup 1)))] 429 +{ 430 + operands[0] = lowpart_subreg (V16HImode, operands[0], V32QImode); 431 + operands[1] = lowpart_subreg (V16QImode, operands[1], V32QImode); 432 +}) 433 + 434 (define_expand "<insn>v16qiv16hi2" 435 [(set (match_operand:V16HI 0 "register_operand") 436 (any_extend:V16HI 437 ''' 438 439 EXPECTED9 = '''\ 440 gcc/ChangeLog: 441 442 * config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_1): 443 444 ''' 445 446 PATCH10 = '''\ 447 diff --git a/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst b/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst 448 new file mode 100644 449 index 00000000000..ad3c6d856fc 450 --- /dev/null 451 +++ b/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst 452 @@ -0,0 +1,3 @@ 453 + 454 + 455 + 456 457 ''' 458 459 EXPECTED10 = '''\ 460 libgomp/ChangeLog: 461 462 * doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst: 463 New file. 464 465 ''' 466 467 class TestMklog(unittest.TestCase): 468 def test_macro_definition(self): 469 changelog = generate_changelog(PATCH1) 470 assert changelog == EXPECTED1 471 472 def test_changed_argument(self): 473 changelog = generate_changelog(PATCH2) 474 assert changelog == EXPECTED2 475 476 def test_enum_and_struct(self): 477 changelog = generate_changelog(PATCH3) 478 assert changelog == EXPECTED3 479 480 def test_no_function(self): 481 changelog = generate_changelog(PATCH3, True) 482 assert changelog == EXPECTED3B 483 484 def test_sorting(self): 485 changelog = generate_changelog(PATCH4) 486 assert changelog == EXPECTED4 487 488 def test_pr_bugzilla_download(self): 489 changelog = generate_changelog(PATCH5, fill_pr_titles=True) 490 assert changelog == EXPECTED5 491 492 def test_gty_in_struct(self): 493 changelog = generate_changelog(PATCH6, fill_pr_titles=True) 494 assert changelog == EXPECTED6 495 496 def test_dr_detection_in_test_case(self): 497 changelog = generate_changelog(PATCH7) 498 assert changelog == EXPECTED7 499 500 @unittest.skipIf(not unidiff_supports_renaming, 501 'Newer version of unidiff is needed (0.6.0+)') 502 def test_renaming(self): 503 changelog = generate_changelog(PATCH8) 504 assert changelog == EXPECTED8 505 506 def test_define_macro_parsing(self): 507 changelog = generate_changelog(PATCH9) 508 assert changelog == EXPECTED9 509 510 def test_long_filenames(self): 511 changelog = generate_changelog(PATCH10) 512 assert changelog == EXPECTED10 513